<!doctype html>
<html lang="fi">
<head >
    <meta charset="utf-8"/>
<meta name="title" content="OM SYSTEM Kamerat, Objektiivit, Audio-tuotteet &amp; Kiikarit | OM SYSTEM Suomi"/>
<meta name="description" content="OM SYSTEM"/>
<meta name="robots" content="INDEX,FOLLOW"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>OM SYSTEM Kamerat, Objektiivit, Audio-tuotteet &amp; Kiikarit | OM SYSTEM Suomi</title>
        <link rel="stylesheet" type="text/css" media="all" href="https://emea.explore.omsystem.com/static/version1779261903/frontend/OMDigital/Hyva/default/css/styles.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://emea.explore.omsystem.com/static/version1779261903/frontend/Magento/base/default/Magezon_Core/css/styles.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://emea.explore.omsystem.com/static/version1779261903/base/Magento/base/default/Magezon_NinjaMenus/css/styles.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://emea.explore.omsystem.com/static/version1779261903/frontend/Magento/base/default/Amasty_Storelocator/vendor/chosen/chosen.min.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://emea.explore.omsystem.com/static/version1779261903/base/Magento/base/default/Magezon_Core/css/owlcarousel/owl.carousel.min.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://emea.explore.omsystem.com/static/version1779261903/base/Magento/base/default/Magezon_Core/css/animate.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://emea.explore.omsystem.com/static/version1779261903/base/Magento/base/default/Magezon_Core/css/fontawesome5.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://emea.explore.omsystem.com/static/version1779261903/base/Magento/base/default/Magezon_Core/css/mgz_font.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://emea.explore.omsystem.com/static/version1779261903/base/Magento/base/default/Magezon_Core/css/mgz_bootstrap.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://emea.explore.omsystem.com/static/version1779261903/base/Magento/base/default/Magezon_Builder/css/openiconic.min.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://emea.explore.omsystem.com/static/version1779261903/base/Magento/base/default/Magezon_Builder/css/styles.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://emea.explore.omsystem.com/static/version1779261903/frontend/Magento/base/default/Magezon_Builder/css/common.css" />
<script type="text/javascript" src="https://emea.explore.omsystem.com/static/version1779261903/frontend/Magento/base/default/Hyva_MagezonBuilder/js/load-script.js"></script>
<script type="text/javascript" defer="defer" src="https://emea.explore.omsystem.com/static/version1779261903/frontend/Magento/base/default/Hyva_MagentoDataServices/js/storefront-event-collector.js"></script>
<script type="text/javascript" defer="defer" src="https://emea.explore.omsystem.com/static/version1779261903/frontend/Magento/base/default/Hyva_MagentoDataServices/js/storefront-events-sdk.js"></script>
<link rel="canonical" href="https://explore.omsystem.com/fi/fi/" />
<link rel="alternate" hreflang="fi-FI" href="https://explore.omsystem.com/fi/fi/" />
<link rel="alternate" hreflang="de-AT" href="https://explore.omsystem.com/at/de/" />
<link rel="alternate" hreflang="fr-BE" href="https://explore.omsystem.com/be/fr/" />
<link rel="alternate" hreflang="nl-BE" href="https://explore.omsystem.com/be/nl/" />
<link rel="alternate" hreflang="en-BG" href="https://explore.omsystem.com/bg/en/" />
<link rel="alternate" hreflang="de-CH" href="https://explore.omsystem.com/ch/de/" />
<link rel="alternate" hreflang="fr-CH" href="https://explore.omsystem.com/ch/fr/" />
<link rel="alternate" hreflang="cs-CZ" href="https://explore.omsystem.com/cz/cs/" />
<link rel="alternate" hreflang="cs-SK" href="https://explore.omsystem.com/sk/cs/" />
<link rel="alternate" hreflang="de-DE" href="https://explore.omsystem.com/de/de/" />
<link rel="alternate" hreflang="en-DK" href="https://explore.omsystem.com/dk/en/" />
<link rel="alternate" hreflang="en-EE" href="https://explore.omsystem.com/ee/en/" />
<link rel="alternate" hreflang="es-ES" href="https://explore.omsystem.com/es/es/" />
<link rel="alternate" hreflang="fr-FR" href="https://explore.omsystem.com/fr/fr/" />
<link rel="alternate" hreflang="en-GB" href="https://explore.omsystem.com/gb/en/" />
<link rel="alternate" hreflang="en-IE" href="https://explore.omsystem.com/ie/en/" />
<link rel="alternate" hreflang="en-HU" href="https://explore.omsystem.com/hu/en/" />
<link rel="alternate" hreflang="it-IT" href="https://explore.omsystem.com/it/it/" />
<link rel="alternate" hreflang="en-LT" href="https://explore.omsystem.com/lt/en/" />
<link rel="alternate" hreflang="en-LV" href="https://explore.omsystem.com/lv/en/" />
<link rel="alternate" hreflang="nl-NL" href="https://explore.omsystem.com/nl/nl/" />
<link rel="alternate" hreflang="en-NO" href="https://explore.omsystem.com/no/en/" />
<link rel="alternate" hreflang="pl-PL" href="https://explore.omsystem.com/pl/pl/" />
<link rel="alternate" hreflang="pt-PT" href="https://explore.omsystem.com/pt/pt/" />
<link rel="alternate" hreflang="sv-SE" href="https://explore.omsystem.com/se/sv/" />
<link rel="alternate" hreflang="en-US" href="https://explore.omsystem.com/us/en/" />
<link rel="alternate" hreflang="en-CA" href="https://explore.omsystem.com/ca/en/" />
<link rel="alternate" hreflang="fr-CA" href="https://explore.omsystem.com/ca/fr/" />
<link rel="alternate" hreflang="es-MX" href="https://explore.omsystem.com/la/es/" />
<link rel="alternate" hreflang="en-AU" href="https://explore.omsystem.com/au/en/" />
<link rel="alternate" hreflang="en-IN" href="https://explore.omsystem.com/in/en/" />
<link rel="alternate" hreflang="th-TH" href="https://explore.omsystem.com/th/th/" />
<link rel="alternate" hreflang="zh-TW" href="https://explore.omsystem.com/tw/zh/" />
<link rel="alternate" hreflang="zh-HK" href="https://explore.omsystem.com/hk/zh/" />
<link rel="icon" type="image/x-icon" href="https://emea.explore.omsystem.com/media/favicon/default/TypeA_Black_Letters.webp" />
<link rel="shortcut icon" type="image/x-icon" href="https://emea.explore.omsystem.com/media/favicon/default/TypeA_Black_Letters.webp" />
<script nonce="aWZzMWwzYWNmMXlqdG94bGZsenV4eHpkZ2N1bmcza2Y=" src="https://assets.adobedtm.com/e7efc29d9f71/23def406a734/launch-03cb762b375c.min.js"></script>

<meta name="google-site-verification" content="FzkTFisn_gw-U78BecwcGezakJQFa4SKEONq6H8lNl0" />
<meta name="google-site-verification" content="1uCBU6xO090_mgP0duZgtKXpS2TPxUvlDC0AQEbuH8o" />

<style>
.product-label.sale{display: none;}
</style>
     <script>
(function() {
    if ('scrollRestoration' in history) {
        history.scrollRestoration = 'manual';
    }

    if (window.location.hash) {
        var targetHash = window.location.hash;

        
        history.replaceState(null, '', window.location.pathname + window.location.search);

        
        window.scrollTo(0, 0);

        document.addEventListener('DOMContentLoaded', function() {
            window.scrollTo(0, 0);

            var scrollTimeout = null;
            var stabilityDelay = 300;
            var retryCount = 0;
            var maxRetries = 5;
            var hasScrolled = false;
            var targetElement = null;
            var lastTargetTop = null;
            var focusObserver = null;
            var focusDuration = 3000;

            function scrollToTarget(smooth) {
                targetElement = document.querySelector(targetHash);
                if (targetElement) {
                    
                    history.replaceState(null, '', window.location.pathname + window.location.search + targetHash);
                    targetElement.scrollIntoView({ behavior: 'instant' });
                    lastTargetTop = targetElement.getBoundingClientRect().top;
                    return true;
                }
                return false;
            }

            function startFocusLock() {
                if (!targetElement) return;

                var focusStartTime = Date.now();
                var isProgrammaticScroll = false;
                var focusTimeoutId = null;

                function stopFocusLock() {
                    if (focusObserver) {
                        focusObserver.disconnect();
                        focusObserver = null;
                    }
                    if (focusTimeoutId) {
                        clearTimeout(focusTimeoutId);
                    }
                    window.removeEventListener('wheel', onUserScroll);
                    window.removeEventListener('touchmove', onUserScroll);
                }

                function onUserScroll() {
                    if (!isProgrammaticScroll) {
                        stopFocusLock();
                    }
                }

                window.addEventListener('wheel', onUserScroll, { passive: true });
                window.addEventListener('touchmove', onUserScroll, { passive: true });

                focusObserver = new MutationObserver(function() {
                    if (!targetElement || !focusObserver) {
                        stopFocusLock();
                        return;
                    }

                    if (Date.now() - focusStartTime > focusDuration) {
                        stopFocusLock();
                        return;
                    }

                    var currentTop = targetElement.getBoundingClientRect().top;
                    var drift = Math.abs(currentTop - lastTargetTop);

                    if (drift > 5) {
                        isProgrammaticScroll = true;
                        window.scrollBy({ top: currentTop - lastTargetTop, behavior: 'instant' });
                        lastTargetTop = targetElement.getBoundingClientRect().top;
                        requestAnimationFrame(function() {
                            isProgrammaticScroll = false;
                        });
                    }
                });

                focusObserver.observe(document.body, {
                    childList: true,
                    subtree: true,
                    attributes: true,
                    attributeFilter: ['style', 'class']
                });

                focusTimeoutId = setTimeout(stopFocusLock, focusDuration);
            }

            function resetTimeout() {
                if (scrollTimeout) {
                    clearTimeout(scrollTimeout);
                }
                scrollTimeout = setTimeout(function() {
                    observer.disconnect();
                    if (scrollToTarget(true)) {
                        hasScrolled = true;
                        startFocusLock();
                    }
                }, stabilityDelay);
            }

            var observer = new MutationObserver(function(mutations) {
                var hasRelevantChanges = mutations.some(function(mutation) {
                    return mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0;
                });

                if (hasRelevantChanges) {
                    retryCount++;
                    if (retryCount >= maxRetries) {
                        observer.disconnect();
                        if (scrollTimeout) {
                            clearTimeout(scrollTimeout);
                        }
                        if (scrollToTarget(true)) {
                            hasScrolled = true;
                            startFocusLock();
                        }
                    } else {
                        resetTimeout();
                    }
                }
            });

            observer.observe(document.body, {
                childList: true,
                subtree: true
            });

            
            resetTimeout();
        });
    }
})();</script>
<meta name="twitter:card" content="summary"/>
<meta name="twitter:site" content="@OMSYSTEMcameras"/>
<meta name="twitter:creator" content="@OMSYSTEMcameras"/>
<meta name="twitter:title" content="OM SYSTEM Kamerat, Objektiivit, Audio-tuotteet &amp; Kiikarit | OM SYSTEM Suomi"/>
<meta name="twitter:url" content="https://explore.omsystem.com/fi/fi/"/>
<meta name="twitter:description" content="OM SYSTEM"/>
<meta name="twitter:image" content="https://emea.explore.omsystem.com/static/version1779261903/frontend/OMDigital/Hyva/default/images/logo.svg"/>

<meta property="og:url" content="https://explore.omsystem.com/fi/fi/"/>
<meta property="og:title" content="OM SYSTEM Kamerat, Objektiivit, Audio-tuotteet &amp; Kiikarit | OM SYSTEM Suomi"/>
<meta property="og:description" content="OM SYSTEM"/>
<meta property="og:image" content="https://emea.explore.omsystem.com/static/version1779261903/frontend/OMDigital/Hyva/default/images/logo.svg"/>
<meta property="og:site_name" content="OM SYSTEM"/>
<meta property="og:type" content="website"/>
  <script>
    document.addEventListener("DOMContentLoaded", function () {
        const inputsHoneySpamCheckTimeSubmit = document.querySelectorAll('input[name="honey_spam_focus_submit_times"]');
        window.jajumaHoneySpamTimeCheck = {};
        inputsHoneySpamCheckTimeSubmit.forEach(input => {
            const closestForm = input.closest('form');
            if (closestForm) {
                
                const honeySpamFormInput = closestForm.querySelector('input[name="honey_spam_form"]');
                const valueHoneySpamForm = honeySpamFormInput ? honeySpamFormInput.value : Math.random().toString(36).substring(2, 10);
                window.jajumaHoneySpamTimeCheck[valueHoneySpamForm] = '';
                const inputsHoneySpamCheck = closestForm.querySelectorAll('input:not([type="hidden"]), textarea');
                inputsHoneySpamCheck.forEach(inputForm => {
                    inputForm.addEventListener('focus', function () {
                        if (!window.jajumaHoneySpamTimeCheck[valueHoneySpamForm]) {
                            window.jajumaHoneySpamTimeCheck[valueHoneySpamForm] = Date.now();
                        }
                    });
                });
                                closestForm.addEventListener('submit', async function (event) {
                    
                    if (closestForm.id && closestForm.id == 'review_form') return;
                    event.preventDefault();
                    if (window.jajumaHoneySpamTimeCheck[valueHoneySpamForm]) {
                        const inputFocusSubmitTimeCheck = closestForm.querySelector('input[name="honey_spam_focus_submit_times"]');
                        inputFocusSubmitTimeCheck.value = window.jajumaHoneySpamTimeCheck[valueHoneySpamForm] + '_' + Date.now();
                    }

                    
                    if (closestForm.getAttribute('captcha-initialized') !== 'true') {
                        closestForm.submit();
                    }
                });
                 }
        });
    });</script><script  type="text/javascript"  data-routing="commerce=rum" defer="defer" src="https://rum.hlx.page/.rum/@adobe/helix-rum-js@^2/dist/rum-standalone.js"></script>   <style> .magezon-builder { z-index: unset; } @media (min-width: 1260px) { .magezon-builder .mgz-container {width: 1260px;} } </style>  <script>
    var BASE_URL = 'https://explore.omsystem.com/fi/fi/';
    var THEME_PATH = 'https://emea.explore.omsystem.com/static/version1779261903/frontend/OMDigital/Hyva/fi_FI';
    var COOKIE_CONFIG = {
        "expires": null,
        "path": "\u002Ffi\u002Ffi",
        "domain": ".explore.omsystem.com",
        "secure": true,
        "lifetime": "3600",
        "cookie_restriction_enabled": false    };
    var CURRENT_STORE_CODE = 'fi_FI';
    var CURRENT_WEBSITE_ID = '11';

    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>
    (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 groupSeparator = options.groupSeparator;
            const decimalSeparator = options.decimalSeparator
            delete options.groupSeparator;
            delete options.decimalSeparator;
            const formatter = new Intl.NumberFormat(
                'fi\u002DFI',
                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 '+ ';
                        case 'group':
                            return groupSeparator !== undefined ? groupSeparator : value;
                        case 'decimal':
                            return decimalSeparator !== undefined ? decimalSeparator : value;
                        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) => {
            
            const parser = new DOMParser();
            const doc = parser.parseFromString(content, 'text/html');
            const contentNode = doc.querySelector(targetSelector);

            
            if (!contentNode || !document.querySelector(targetSelector)) {
                return;
            }

             hyva.activateScripts(contentNode);
             document.querySelector(targetSelector).replaceWith(contentNode);

            
            window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
            hyva.initMessages();
        }

        hyva.removeScripts = (contentNode) => {
            const scripts = contentNode.getElementsByTagName('script');
            for (let i = 0; i < scripts.length; i++) {
                scripts[i].parentNode.removeChild(scripts[i]);
            }
            const templates = contentNode.getElementsByTagName('template');
            for (let i = 0; i < templates.length; i++) {
                const container = document.createElement('div');
                container.innerHTML = templates[i].innerHTML;
                hyva.removeScripts(container);
                templates[i].innerHTML = container.innerHTML;
            }
        }

        hyva.activateScripts = (contentNode) => {
 const scripts = Array.from(contentNode.getElementsByTagName('script'));

            
            for (const original of scripts) {
                const script = document.createElement('script');
                original.type && (script.type = original.type);
                script.innerHTML = original.innerHTML;

                
                original.parentNode.removeChild(original)

                
                document.head.appendChild(script);
            }

            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.safeParseNumber = (rawValue) => {
            const number = rawValue ? parseFloat(rawValue) : null;

            return Array.isArray(number) || isNaN(number) ? rawValue : number;
        }

 const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('');
        hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => {

            const camelCase = toCamelCase(name);
 const key = '__hyva_bool_' + name

            return new Proxy(Object.assign(
                additionalMethods,
                {
                    [key]: !!value,
                    [name]() {return !!this[key]},
                    ['!' + name]() {return !this[key]}, 
                    ['not' + camelCase]() {return !this[key]},
                    ['toggle' + camelCase]() {this[key] = !this[key]},
                    [`set${camelCase}True`]() {this[key] = true},
                    [`set${camelCase}False`]() {this[key] = false},
                }
            ), {
                set(target, prop, value) {
                    return prop === name
                        ? (target[key] = !!value)
                        : Reflect.set(...arguments);
                }
            })
        }

                hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true})
        window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true});
         window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies())

    }( window.hyva = window.hyva || {} ));</script> <script type="speculationrules">
{
    "tag": "Hyva Theme",
    "prefetch": [{
        "source": "document",
        "where": {
            "and": [
                { "href_matches": "/*" },
                { "not": {
                    "href_matches": ["/fi/fi/customer/*","/fi/fi/search/*","/fi/fi/sales/*","/fi/fi/wishlist/*","/fi/fi/checkout/*","/fi/fi/paypal/*","/fi/fi/newsletter/*","/fi/fi/stores/store/redirect/*"]                }},
                { "not": {
                    "selector_matches": [".no-preload", ".do-not-prerender", "[download]", "[rel~=nofollow]", "[target]"]
                }}
            ]
        },
        "eagerness": "moderate"
    }]
}</script>
<script>
    const viewTransitionToGalleryPageStorage = 'view-transition-to-gallery-page-type';
    const setTransitionNameBetweenGallery = async (url, promise) => {
        if (window.matchMedia('(prefers-reduced-motion)').matches) return;

        const productGallery = document.getElementById('gallery-main');
        const productListItem = document.querySelector(`.product-item-photo[href="${url}"]`);
        const targetElement = productListItem || productGallery;

        if (targetElement) {
            targetElement.style.viewTransitionName = 'view-transition-to-gallery';

            await promise;
            targetElement.style.viewTransitionName = '';
        }
    };

    const getViewTransitionToGalleryPageIsProduct = () => {
        return document.body.classList.contains('catalog-product-view') ? 'product-page' : 'other'
    }

    window.addEventListener('pageswap', async (e) => {
        if (!e.viewTransition) return;
        const pageType = getViewTransitionToGalleryPageIsProduct();
        const target = new URL(e.activation.entry.url);

        sessionStorage.setItem(viewTransitionToGalleryPageStorage, pageType);
        setTransitionNameBetweenGallery(target.href, e.viewTransition.finished);
    });

    window.addEventListener('pagereveal', async (e) => {
        if (!e.viewTransition || (window.navigation && !window.navigation.activation.from)) return;
        const previousPageType = sessionStorage.getItem(viewTransitionToGalleryPageStorage);
        const pageType = getViewTransitionToGalleryPageIsProduct();
        sessionStorage.removeItem(viewTransitionToGalleryPageStorage);

        if (previousPageType === pageType) return;
        const target = new URL(window.navigation.activation.from.url);
        setTransitionNameBetweenGallery(target.href, e.viewTransition.ready);
    });
</script>
 <script>
    function initDeviceTypeVariable() {
        const mobileMatchMedia = window.matchMedia("(max-width: 1023px)");

        function onChangeMedia(mediaQuery) {
            if (window.isMobile !== mediaQuery.matches) {
                const isMobile = mediaQuery.matches;

                window.isMobile = isMobile;
                Alpine.store('device').isMobile = isMobile;
            }
        }

        onChangeMedia(mobileMatchMedia);

        if (typeof mobileMatchMedia.onchange !== 'object') {
            
            mobileMatchMedia.addListener((event) => onChangeMedia(event));
        } else {
            mobileMatchMedia.addEventListener(
                "change",
                (event) => onChangeMedia(event)
            )
        }
    }

    document.addEventListener("alpine:init", () => {
        Alpine.store('device', {
            isMobile: window.isMobile
        });

        initDeviceTypeVariable();
    });</script> <script>
    window.setProductTitleHeight = function(productType = 'product', headers, isSideBarOpen = false) {
        const headerArray = Array.from(headers);
        let chunkSize = productType === 'kit' ? 4 : 3;

        if (productType === 'kit') {
            if (window.matchMedia('(min-width: 768px) and (max-width: 1054px)').matches || isSideBarOpen) {
                chunkSize = 2;
            } else if (window.matchMedia('(min-width: 1055px) and (max-width: 1399px)').matches) {
                chunkSize = 3;
            } else if (window.matchMedia('(max-width: 767px)').matches) {
                resetHegihts(headerArray);
                return;
            }
        } else if (productType === 'product') {
            if (window.matchMedia('(min-width: 768px) and (max-width: 1440px)').matches) {
                chunkSize = 2;
            } else if (window.matchMedia('(max-width: 767px)').matches) {
                resetHegihts(headerArray);
                return;
            }
        }

        resetHegihts(headerArray);

        if (productType === 'kit' || productType === 'product') {
            for (let i = 0; i < headerArray.length; i += chunkSize) {
                const chunk = headerArray.slice(i, i + chunkSize);
                const maxHeight = Math.max(...chunk.map(header => header.offsetHeight));
                chunk.forEach(header => {
                    header.style.minHeight = `${maxHeight}px`;
                });
            }
        } else {
            const maxHeight = Math.max(...headerArray.map(header => header.offsetHeight));
            headerArray.forEach(header => {
                header.style.minHeight = `${maxHeight}px`;
            });
        }
    };

    function resetHegihts(headers) {
        headers.forEach(header => {
            header.style.minHeight = 'auto';
        });
    }</script> <script>
    (function () {
        let amSwiperProcessed = false;

        window.addEventListener('load-amswiper', () => {
            if (amSwiperProcessed) {
                window?.Swiper && window.dispatchEvent(new CustomEvent('amswiper-loaded', {}));
                return;
            }

            const script = document.createElement('script');
            script.src = 'https://emea.explore.omsystem.com/static/version1779261903/frontend/Magento/base/default/Amasty_LibSwiperJs/js/vendor/swiper/swiper.min.js';
            script.async = true;
            document.body.appendChild(script);

            amSwiperProcessed = true;

            script.onload = () => {
                window.dispatchEvent(new CustomEvent('amswiper-loaded', {}));
            }

            const stylesHref = 'https://emea.explore.omsystem.com/static/version1779261903/frontend/Magento/base/default/Amasty_LibSwiperJs/vendor/swiper/swiper.min.css';

            if (document.querySelector(`link[href="${stylesHref}"]`)) {
                return;
            }

            const styles = document.createElement('link');
            styles.rel = 'stylesheet';
            styles.type = 'text/css';
            styles.href = stylesHref;

            document.head.appendChild(styles);
        });
    }());</script> <script>
    'use strict';

    (function () {
        window.initAmAppendLabels = {
            selectors: {
                labelWrapper: '.amlabel-position-wrapper'
            },
            /**
             * We use approach from hyva.replaceDomElement method to replace labels and init components
             *
             * @param {HTMLElement} labelContainer
             * @param {string} labelHtml
             * @return {void}
             */
            appendLabels: function (labelContainer, labelHtml) {
                const parser = new DOMParser();
                const doc = parser.parseFromString(labelHtml, 'text/html');
                const nodes = doc.querySelectorAll(this.selectors.labelWrapper);

                if (!nodes) {
                    return;
                }

                labelContainer.append(...nodes);
            }
        };
    })();</script> <script>
    window.addEventListener('init-external-scripts', () => {
        if (window._amPurifyLoaded) {
            return;
        }

        
        const script = document.createElement('script');
        script.src = 'https://emea.explore.omsystem.com/static/version1779261903/frontend/Magento/base/default/Amasty_XsearchHyvaCompatibility/js/purify.min.js';
        script.async = true;
        document.body.appendChild(script);

        window._amPurifyLoaded = true;

        script.onload = () => {
            
            window.dispatchEvent(new CustomEvent('amPurifyLoaded', {}));
        }
    }, { once: true, passive: true });</script> <script>
    window.addEventListener('load', function () {
        window.magentoStorefrontEvents = magentoStorefrontEvents;
        magentoStorefrontEvents.context.setStorefrontInstance(
            {"storeUrl":"https:\/\/explore.omsystem.com\/fi\/fi\/","websiteId":11,"websiteCode":"website_fi","storeId":11,"storeCode":"fi","storeViewId":13,"storeViewCode":"fi_FI","websiteName":"Finland","storeName":"Finland","storeViewName":"Finland","baseCurrencyCode":"EUR","storeViewCurrencyCode":"EUR","catalogExtensionVersion":"103.4.20","environmentId":"25ce3845-71fd-4380-9d2a-064403b4410a","environment":"Production","storefrontTemplate":"Hyva"}        );
        magentoStorefrontEvents.context.setMagentoExtension({
            magentoExtensionVersion: "8.0.1",
        });
        magentoStorefrontEvents.context.setDataServicesExtension({
            version: "8.0.1",
        });
        magentoStorefrontEvents.context.setPage({
            pageType: "Default"
        });
        magentoStorefrontEvents.context.setContext("pageExtended", {
            action: "page-view"
        });

        let shopperId = "guest";
        magentoStorefrontEvents.context.setShopper({ shopperId: shopperId });

         magentoStorefrontEvents.publish.pageView();
    });

    function getCustomerIdFromDataServices() {
        let customerId = hyva.getCookie("dataservices_customer_id");
        return customerId ? decodeURI(customerId).replace(/[^\w\s]/gi, "") : null;
    }

    function getCustomerGroupFromDataServices() {
        try {
            const decodedString = decodeURIComponent(hyva.getCookie("dataservices_customer_group"));
            return decodedString ? JSON.parse(decodedString) : null;
        } catch (error) {
            console.error("Failed to parse customer group data:", error);
            return null;
        }
    }</script></head>
<body id="html-body" class="sanity-id-index page-layout-1column">
 <script>
    'use strict';

    /**
     * Dynamically loads the Glider.js script and executes a callback function upon its loading.
     *
     * @param {Function} onLoadFunction - The callback function to be executed after the Glider.js script is loaded.
     */
    function addGliderJSScript(onLoadFunction) {
        const scriptSrc = 'https\u003A\u002F\u002Femea.explore.omsystem.com\u002Fstatic\u002Fversion1779261903\u002Ffrontend\u002FHyva\u002Fdefault\u002Fdefault\u002FMagento_PageBuilder\u002Fjs\u002Fglider.min.js';
        const currentScript = document.querySelector(`script[src="${scriptSrc}"]`);
        let script;

        if (currentScript) {
            script = currentScript;
        } else {
            script = document.createElement('script');
            script.type = 'text/javascript';
            script.src = scriptSrc;
            script.defer = true;
        }

        script.addEventListener('load', onLoadFunction);

        if (!currentScript) {
            document.head.appendChild(script);
        }
    }</script><input name="form_key" type="hidden" value="c0ny0dVgaigzPe8n" />
    <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"
            aria-labelledby="messageGlobalNoScriptMessage"
        >
            <div class="container text-center">
                <p id="messageGlobalNoScriptMessage">
                    <strong>JavaScript näyttää olevan pois käytöstä selaimessasi.</strong>
                    <span>
                        Parhaan käyttökokemuksen saamiseksi sivustollamme muista ottaa Javascript käyttöön selaimessasi.                    </span>
                </p>
            </div>
        </section>
    </noscript>


<script>
    document.body.addEventListener('touchstart', () => {}, {passive: true})
</script>
 <script>
    'use strict';

    (() => {
        window.addEventListener(
            'ga-initialized',
            () => {
                window.addEventListener('cart-item-added', (event) => {
                    let products = [];

                    event.detail.forEach((item) => {
                        products.push({
                            id: item['product_sku'],
                            name: item['product_name'],
                            price: item['product_price_value'],
                            quantity: item['qty'],
                        });
                    });

                    dataLayer.push({
                        event: 'addToCart',
                        ecommerce: {
                            currencyCode: 'EUR',
                            add: {
                                products: products,
                            },
                        },
                    });
                });
            },
            { once: true }
        );
    })();</script> <script>
    'use strict';

    (() => {
        window.addEventListener(
            'ga-initialized',
            () => {
                window.addEventListener('cart-item-removed', (event) => {
                    let products = [];

                    event.detail.forEach((item) => {
                        products.push({
                            id: item['product_sku'],
                            name: item['product_name'],
                            price: item['product_price_value'],
                            quantity: item['qty'],
                        });
                    });

                    dataLayer.push({
                        event: 'removeFromCart',
                        ecommerce: {
                            currencyCode: 'EUR',
                            remove: {
                                products: products,
                            },
                        },
                    });
                });
            },
            { once: true }
        );
    })();</script> <script>
    'use strict';

    (() => {
        window.addEventListener(
            'ga-initialized',
            () => {
                const banners = document.querySelectorAll('\u005Bdata\u002Dbanner\u002Did\u005D');
                let promotions = [];

                banners.forEach((banner) => {
                    banner.addEventListener('click', () => {
                        window.dataLayer.push({
                            event: 'promotionClick',
                            ecommerce: {
                                promoClick: {
                                    promotions: [{
                                        id: banner.dataset.bannerId,
                                        name: banner.dataset.bannerName,
                                        creative: '',
                                        position: 'sanity_id_index',
                                    }],
                                },
                            },
                        });
                    });

                    promotions.push({
                        id: banner.dataset.bannerId,
                        name: banner.dataset.bannerName,
                        creative: '',
                        position: 'sanity_id_index',
                    });
                });

                if (promotions.length) {
                    window.dataLayer.push({
                        event: 'promotionView',
                        ecommerce: {
                            promoView: {
                                promotions: promotions,
                            },
                        },
                    });
                }
            },
            { once: true }
        );
    })();</script> <script>
    (function(hyva) {
         const formValidationRules = {
            required(value, options, field, context) {
                const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element,
                    fieldName = getFieldName(field),
                    msg = fieldName
                        ? hyva.str('\u00251\u002Dkentt\u00E4\u0020on\u0020pakollinen.', fieldName)
                        : 'T\u00E4m\u00E4\u0020on\u0020pakollinen\u0020kentt\u00E4.';

                if (el.type === 'radio' || el.type === 'checkbox') {
                    return (value === undefined || value.length === 0) ? msg : true;
                }

                el.setAttribute('required', '');
                el.checkValidity();

                return el.validity.valueMissing ? msg : true;
            },
            maxlength(value, options, field, context) {
                const n = Number(options)
                if (value.length > n) {
                    const fieldName = getFieldName(field);
                    return fieldName
                        ? n === 1
                            ? hyva.str('\u00251\u0020\u002Dkentt\u00E4\u0020ei\u0020voi\u0020olla\u0020pidempi\u0020kuin\u0020yksi\u0020merkki.', fieldName)
                            : hyva.str('\u00251\u0020\u002Dkentt\u00E4\u0020ei\u0020voi\u0020olla\u0020pidempi\u0020kuin\u0020\u00252\u0020merkki\u00E4.', fieldName, options)
                        : n === 1
                            ? 'Kirjoita\u0020enint\u00E4\u00E4n\u00201\u0020merkki.'
                            : hyva.strf('Kirjoita\u0020enint\u00E4\u00E4n\u0020\u00250\u0020merkki\u00E4.', options);
                }
                return true;
            },
            minlength(value, options, field, context) {
                const n = Number(options)
                if (value.length > 0 && value.length < n) {
                    const fieldName = getFieldName(field);
                    return fieldName
                        ? n === 1
                            ? hyva.str('\u00251\u0020\u002Dkent\u00E4n\u0020on\u0020oltava\u0020v\u00E4hint\u00E4\u00E4n\u00201\u0020merkin\u0020mittainen.', fieldName)
                            : hyva.str('\u00251\u0020\u002Dkent\u00E4n\u0020on\u0020oltava\u0020v\u00E4hint\u00E4\u00E4n\u0020\u00252\u0020merkki\u00E4\u0020pitk\u00E4.', fieldName, options)
                        : n === 1
                            ? 'Kirjoita\u0020v\u00E4hint\u00E4\u00E4n\u00201\u0020merkki.'
                            : hyva.strf('Kirjoita\u0020v\u00E4hint\u00E4\u00E4n\u0020\u00250\u0020merkki\u00E4.', options);
                }
                return true;
            },
            max(value, options, field, context) {
                field.element.setAttribute('max', options);
                field.element.checkValidity();
                if (field.element.validity.rangeOverflow) {
                    const fieldName = getFieldName(field);
                    return fieldName
                        ? hyva.str('Kent\u00E4n\u0020\u00251\u0020tulee\u0020sis\u00E4lt\u00E4\u00E4\u0020arvo,\u0020joka\u0020on\u0020pienempi\u0020tai\u0020yht\u00E4\u0020suuri\u0020kuin\u0020\u0022\u00252\u0022.', fieldName, options)
                        : hyva.strf('Anna\u0020arvo,\u0020joka\u0020on\u0020pienempi\u0020tai\u0020yht\u00E4\u0020suuri\u0020kuin\u0020\u0022\u00250\u0022.', options);
                }
                return true;
            },
            min(value, options, field, context) {
                field.element.setAttribute('min', options);
                field.element.checkValidity();
                if (field.element.validity.rangeUnderflow) {
                    const fieldName = getFieldName(field);
                    return fieldName
                        ? hyva.str('Kent\u00E4n\u0020\u00251\u0020tulee\u0020sis\u00E4lt\u00E4\u00E4\u0020arvo,\u0020joka\u0020on\u0020suurempi\u0020tai\u0020yht\u00E4\u0020suuri\u0020kuin\u0020\u0022\u00252\u0022.', fieldName, options)
                        : hyva.strf('Anna\u0020arvo,\u0020joka\u0020on\u0020suurempi\u0020tai\u0020yht\u00E4\u0020suuri\u0020kuin\u0020\u0022\u00250\u0022.', options);
                }
                return true;
            },
            step(value, options, field, context) {
                field.element.setAttribute('step', options);
                field.element.checkValidity();
                if (field.element.validity.stepMismatch) {
                    const val = Number(value),
                        step = Number(options),
                        fieldName = getFieldName(field),
                        nearestLowerValue = Math.floor(val / step) * step,
                        nearestUpperValue = Math.ceil(val / step) * step;
                    return fieldName
                        ? hyva.str('\u00251\u0020\u002Dkentt\u00E4\u0020on\u0020virheellinen.\u0020Kaksi\u0020l\u00E4hint\u00E4\u0020kelvollista\u0020arvoa\u0020ovat\u0020\u0022\u00252\u0022\u0020ja\u0020\u0022\u00253\u0022.', fieldName, nearestLowerValue, nearestUpperValue)
                        : hyva.strf('Anna\u0020kelvollinen\u0020arvo.\u0020Kaksi\u0020l\u00E4hint\u00E4\u0020kelvollista\u0020arvoa\u0020ovat\u0020\u0022\u00250\u0022\u0020ja\u0020\u0022\u00251\u0022.', nearestLowerValue, nearestUpperValue);
                }
                return true;
            },
            pattern(value, options, field, context) {
                field.element.setAttribute('pattern', options);
                field.element.checkValidity();
                if (field.element.validity.patternMismatch) {
                    const fieldName = getFieldName(field);
                    return fieldName
                        ? field.element.pattern
                            ? hyva.str('\u00251\u0020\u002Dkent\u00E4n\u0020on\u0020vastattava\u0020pyydetty\u00E4\u0020muotoa\u003A\u0020\u00252.', fieldName, field.element.pattern)
                            : hyva.str('\u00251\u0020\u002Dkent\u00E4n\u0020on\u0020vastattava\u0020pyydetty\u00E4\u0020muotoa.', fieldName)
                        : field.element.pattern
                            ? hyva.strf('T\u00E4sm\u00E4\u00E4\u0020pyydetty\u0020muoto\u003A\u0020\u00250.', field.element.pattern)
                            : 'Noudata\u0020pyydetty\u00E4\u0020muotoa.';
                }
                return true;
            },
            email(value, options, field, context) {
                 const rule = /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i;
                if (value.length > 0 && !rule.test(value)) {
                    const fieldName = getFieldName(field);
                    return fieldName
                        ? hyva.str('\u00251\u0020\u002Dkent\u00E4n\u0020tulee\u0020sis\u00E4lt\u00E4\u00E4\u0020kelvollinen\u0020s\u00E4hk\u00F6postiosoite\u0020\u0028esim.\u0020johndoe\u0040domain.com\u0029.', fieldName)
                        : 'Kirjoita\u0020voimassa\u0020oleva\u0020s\u00E4hk\u00F6postiosoite\u0020\u0028Esim\u003A\u0020johndoe\u0040domain.com\u0029.';
                }
                return true;
            },
            password(value, options, field, context) {
                const rule = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/;
                if (value.length > 0 && !rule.test(value)) {
                    const fieldName = getFieldName(field);
                    return fieldName
                        ? hyva.str('\u00251\u0020\u002Dkent\u00E4ss\u00E4\u0020on\u0020oltava\u0020v\u00E4hint\u00E4\u00E4n\u0020yksi\u0020iso\u0020kirjain,\u0020yksi\u0020pieni\u0020kirjain,\u0020yksi\u0020numero\u0020ja\u0020yksi\u0020erikoismerkki\u0020\u0028\u0023\u003F\u0021\u0040\u0024\u0025\u005E\u0026\u002A\u002D\u0029', fieldName)
                        : 'Anna\u0020v\u00E4hint\u00E4\u00E4n\u0020yksi\u0020iso\u0020ja\u0020yksi\u0020pieni\u0020kirjain,\u0020yksi\u0020numero\u0020ja\u0020yksi\u0020erikoismerkki\u0020\u0028\u0023\u003F\u0021\u0040\u0024\u0025\u005E\u0026\u002A\u002D\u0029.';
                }
                return true;
            },
            equalTo(value, options, field, context) {
                const dependencyField = context.fields[options].element;
                if (value !== dependencyField.value) {
                    const dependencyFieldName =
                        dependencyField.label ||
                        dependencyField.title ||
                        (dependencyField.labels && dependencyField.labels[0] && dependencyField.labels[0].innerText) ||
                        dependencyField.name,
                        fieldName = getFieldName(field);
                    return fieldName
                        ? hyva.str('\u00251\u002Dkent\u00E4n\u0020arvon\u0020on\u0020oltava\u0020sama\u0020kuin\u0020\u0022\u00252\u0022.', fieldName, dependencyFieldName)
                        : hyva.strf('T\u00E4m\u00E4n\u0020kent\u00E4n\u0020arvon\u0020on\u0020oltava\u0020sama\u0020kuin\u0020\u0022\u00250\u0022.', dependencyFieldName);
                }
                return true;
            }
        };

         function raceSome(promises, pred) {
            return new Promise((resolve, reject) => {

                if (promises.length === 0) {
                    return resolve();
                }

                let settled = false, nDone = 0;

                const resolveIf = v => {
                    if (!settled && (pred(v) || ++nDone === promises.length)) {
                        settled = true;
                        resolve(v);
                    }
                    return v;
                }

                promises.map(promise => {
                    promise.then(resolveIf).catch(reason => {
                        settled = true;
                        reject(reason)
                    });
                    return promise;
                });
            });
        }

        const INPUT_ATTRIBUTE_RULES = {min: 'min', max: 'max', required: 'required', minlength: 'minlength', maxlength: 'maxlength', step: 'step', pattern: 'pattern'}
        const INPUT_TYPE_RULES = {email: 'email'}

        function getRules(element) {
            let rules = {};
            Object.keys(INPUT_ATTRIBUTE_RULES).forEach(attrName => {
                if (element.hasAttribute(attrName)) {
                    rules[INPUT_ATTRIBUTE_RULES[attrName]] = element.getAttribute(attrName);
                }
            })
            if (INPUT_TYPE_RULES[element.type]) {
                rules[INPUT_TYPE_RULES[element.type]] = true;
            }

            if (element.dataset.validate) {
                try {
                    Object.assign(rules, JSON.parse(element.dataset.validate));
                } catch (error) {
                    console.error('Validator error. Cannot parse data-validate attribute of element:\n', element);
                }
            }

            return rules;
        }

        function isInvalidRuleResult(ruleState) {
            return typeof ruleState === 'string' || !ruleState || (ruleState.type && ruleState.content);
        }

        async function runValidateFn(rule, options, value, field) {
            return formValidationRules[rule](value, options, field, this);
        }

        function generateId() {
            let id;
            do {
                id = `${this.idPrefix}-${++this.idSeq}`;
            } while (document.getElementById(id));
            return id;
        }

        function isVisible(element) {
            const el = element.type !== 'hidden' ? element : (element.parentElement || {});
            return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length)
        }

        function elementWillValidate(element) {
            return (element.willValidate || element.type === 'hidden')
                && element.tagName !== 'BUTTON'
                && element.disabled === false
                && !(element.tagName === 'INPUT' && element.type === 'submit')
                && (element.hasAttribute('data-validate-hidden') || isVisible(element))
        }

        function createMessageContainer(el, fieldWrapperClassName) {
            if (! el.parentElement) {
                return;
            }
            const refocus = document.activeElement === el;
            const wrapper = document.createElement('div');
            wrapper.classList.add.apply(wrapper.classList, fieldWrapperClassName.split(' '));
            el.parentElement.insertBefore(wrapper, el);
            wrapper.appendChild(el);
            refocus && document.activeElement !== el && el.focus();
            return wrapper;
        }

        function containerNotFound(selector, el) {
            const msg = `Cannot find message container element ${selector} of ${el.name}`;
            console.error(msg, el);
            throw msg;
        }

        function createTextInputFrom(el) {
            const text = document.createElement('INPUT');
            text.type = 'text';
            text.value = el.value;
            return text;
        }

        function classNamesToSelector(classNames) {
            return classNames.split(' ')
                .filter(className => className.length > 0)
                .map(className => `.${className}`)
                .join('')
        }

        function hasMessagesWrapper(field, messagesWrapperClassName) {
            return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName));
        }

        function getMessagesWrapper(field, messagesWrapperClassName) {
            if (hasMessagesWrapper.call(this, field, messagesWrapperClassName)) {
                return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName));
            }

            const msgWrapper = document.createElement('ul');
            const msgId = generateId.call(this);
            msgWrapper.id = msgId;
            field.element.setAttribute('aria-errormessage', msgId);
            field.element.setAttribute('aria-describedby', msgId);
            msgWrapper.classList.add.apply(msgWrapper.classList, messagesWrapperClassName.split(' '));
            if (field.validateOnChange) {
                msgWrapper.setAttribute('aria-live', 'polite');
            }
            this.getMessageContainer(field).appendChild(msgWrapper);

            return msgWrapper;
        }

        function getCheckedValues(field) {
            const name = field.element.name.replace(/([\\"])/g, '\\$1');
            const elements = field.element.form.querySelectorAll('input[name="' + name + '"]:checked');
            return Array.from(elements).map(el => el.value);
        }

        function escapeHtml(s) {
            const div = document.createElement('div')
            div.innerText = s;
            return div.innerHTML;
        }

         function formValidation(form, options = {}) {
            const formElement = form || this.$el;

            if (formElement.dataset && formElement.dataset.options) {
                try {
                    options = Object.assign(options, JSON.parse(formElement.dataset.options || '{}'));
                } catch (e) {
                    throw new Error('Cannot read the form options from the data-options attribute: not valid JSON');
                }
            }

            
            if (formElement.tagName === 'FORM') {
                formElement.setAttribute('novalidate', '');
            } else {
                console.error('formValidation can be initialized only on FORM element', formElement);
                return;
            }

            options = Object.assign({
                fieldWrapperClassName: 'field field-reserved',
                messagesWrapperClassName: 'messages',
                validClassName: 'field-success',
                invalidClassName: 'field-error',
                pageMessagesWrapperSelector: null,
                scrollToFirstError: true,
            }, options || {});

            return {
                state: {
                    valid: false,
                },
                fields: {},
                idSeq: 0,
                idPrefix: formElement.id || 'vld-msg',
                setupFields(elements) {
                    this.fields = {};
                    Array.from(elements).forEach(element => {
                        if (elementWillValidate(element)) {
                            this.setupField(element);
                        }
                    });
                },
                setupField(element) {
                    if (! element) return;
                    const onChange = !!element.dataset.onChange;
                    if (elementWillValidate(element)) {
                        const rules = getRules(element);
                        if (Object.keys(rules).length > 0) {
                            if (this.fields[element.name]) {
                                Object.assign(this.fields[element.name].rules, rules);
                            } else {
                                this.fields[element.name] = {
                                    element,
                                    rules: rules,
                                    validateOnChange: onChange,
                                    state: {
                                        valid: null,
                                        rules: {}
                                    }
                                }
                            }
                        }
                    } else {
                        console.error('Element will not validate', element);
                    }
                },
                onSubmit(event) {
                    if (event.target.tagName === 'FORM') {
                        event.preventDefault();

                        this.validate()
                            .then(() => event.target.submit())
                            .catch(invalidElements => {});
                    }
                },
                onChange(event) {
                    event.target.dataset.onChange = 'true';
                    if (!Object.keys(this.fields).length) {
                        this.setupFields(formElement.elements);
                    }
                    if (!Object.keys(this.fields).includes(event.target.name)) {
                        this.setupField(event.target);
                    }
                    const field = this.fields[event.target.name];

                    this.validateField(field);
                    field && field.element.removeAttribute('data-on-change')
                },
                validateSafe() {
                    return new Promise(resolve => this.validate().then(() => resolve(true)).catch(() => {}))
                },
                validate() {
                    if (!Object.keys(this.fields).length || !Object.keys(this.fields).length !== formElement.elements.length) {
                        this.setupFields(formElement.elements);
                    }
                    return new Promise(async (resolve, reject) => {
                        if (formElement.elements) {
                             await raceSome(this.validateFields(), result => result !== true)
                            const invalidFields = Object.values(this.fields).filter(field => !field.state.valid);
                            this.state.valid = invalidFields.length === 0;
                            if (this.state.valid) {
                                resolve();
                            } else {
                                if (options.scrollToFirstError && invalidFields.length > 0) {
                                    invalidFields[0].element.focus()
                                    invalidFields[0].element.select && invalidFields[0].element.select();
                                }
                                reject(invalidFields.map(field => field.element));
                            }
                        }
                    });
                },
                 validateFields() {
                    const fields = Object.values(this.fields);

                     fields.forEach(field => {
                        this.getMessageContainer(field).classList.remove(options.validClassName, options.invalidClassName)
                    });
                     return fields.map(field => this.validateField(field))
                },
                 validateField(field) {
                     if (! field || ! elementWillValidate(field.element)) {
                        return new Promise(resolve => resolve(true))
                    }

                    let value;
                    if (field.element.type === 'checkbox') {
                        value = getCheckedValues(field);
                    } else if (field.element.type === 'radio') {
                        value = getCheckedValues(field)[0] || undefined;
                    } else if (field.element.tagName === 'SELECT' && field.element.multiple) {
                        value = Array.from(field.element.selectedOptions).map(opt => opt.value);
                    } else {
                        value = field.element.value;
                    }

                    const rules = field.rules || {};

                     field.state.valid = true;
                    this.showFieldState(field);

                  const fieldValidations = Object.keys(rules).filter(rule => formValidationRules[rule]).map(async rule => {
                        return runValidateFn.call(this, rule, rules[rule], value, field).then(result => {
                            field.state.rules[rule] = result;
                            return result;
                        })
                    });

                    return new Promise(resolve => {
                         Promise.all(fieldValidations).then(results => {
                              field.state.valid = !elementWillValidate(field.element) || rules.length === 0 || !results.some(isInvalidRuleResult)
                            this.showFieldState(field);
                            resolve(field.state.valid);
                        })
                    });
                },
                 getMessagesByField(field) {
                    const messages = [];
                    const invalidRules = Object.keys(field.state.rules).filter(rule => isInvalidRuleResult(field.state.rules[rule]));

                    field.rules && Object.keys(field.rules).forEach((rule) => {
                        if (invalidRules.includes(rule)) {
                            const customMessage = field.element.getAttribute('data-msg-' + rule);
                            const message = customMessage ? customMessage : field.state.rules[rule];
                            const ruleOptions = JSON.parse(JSON.stringify(field.rules[rule]));

                            if (typeof message === 'undefined' || message === null || (typeof message !== 'string' && ! message.type)) {
                                messages.push(hyva.strf('Validation rule "%0" failed.', rule));
                            } else if (Array.isArray(ruleOptions)) {
                                ruleOptions.unshift(message.type ? message.content : message);
                                const content = hyva.strf.apply(null, ruleOptions);
                                messages.push(message.type ? {type: message.type, content} : content);
                            } else {
                                const content = hyva.strf(message.type ? message.content : message, ruleOptions)
                                messages.push(message.type ? {type: message.type, content} : content);
                            }
                        }
                    });
                    return messages;
                },
                /** @deprecated */
                getFieldWrapper(field) {
                     return this.getMessageContainer(field)
                },
                getMessageContainer(field) {
                    let container;
                    const pageSelector = field.element.getAttribute('data-validation-container') || options.pageMessagesContainerSelector;
                    if (pageSelector) {
                        container = document.querySelector(pageSelector)
                            || containerNotFound(pageSelector, field.element)
                    } else {
                        const containerSelector = classNamesToSelector(options.fieldWrapperClassName);
                        container = field.element.closest(containerSelector)
                            || createMessageContainer(field.element, options.fieldWrapperClassName)
                            || containerNotFound(containerSelector, field.element);
                    }

                    return container;
                },
                showFieldState(field) {
                    const container = this.getMessageContainer(field),
                        hasErrorMessages = hasMessagesWrapper.call(this, field, options.messagesWrapperClassName),
                        messages = this.getMessagesByField(field).map(m => {
                            return m.type !== 'html' ? escapeHtml(m.type ? m.content : m) : m.content;
                        });
                    container.classList.toggle(options.validClassName, field.state.valid && ! hasErrorMessages);
                    container.classList.toggle(options.invalidClassName, !field.state.valid || hasErrorMessages);
                    this.createHtmlErrorMessage(field, messages);

                    if (field.state.valid) {
                        field.element.removeAttribute('aria-invalid');
                    } else {
                        field.element.setAttribute('aria-invalid', 'true');
                        if (! document.activeElement) {
                            field.element.focus();
                        }
                    }
                },
                removeMessages(field, messagesClass) {
                    if (! hasMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName)) {
                        return;
                    }

                    const msgWrapper = getMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName);
                    const messages = msgWrapper.querySelectorAll(`[data-msg-field='${field.element.name}']`);
                    Array.from(messages).forEach(msg => msg.remove());
                    if (msgWrapper && msgWrapper.childElementCount === 0) {
                        field.element.removeAttribute('aria-errormessage');
                        field.element.removeAttribute('aria-describedby');
                        msgWrapper.remove();
                    }
                },
                createErrorMessage(field, messages) {
                    const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml)
                    this.createHtmlErrorMessage(field, htmlMessages);
                },
                createHtmlErrorMessage(field, messages) {
                    this.removeMessages(field, options.messagesWrapperClassName);
                    field.element.removeAttribute('aria-errormessage');
                    field.element.removeAttribute('aria-describedby');

                    if (!field.state.valid) {
                        const msgWrapper = this.addHtmlMessages(field, options.messagesWrapperClassName, messages);
                        field.element.setAttribute('aria-errormessage', msgWrapper.id);
                        field.element.setAttribute('aria-describedby', msgWrapper.id);
                    }
                },
                /** @deprecated */
                createMessage(field, message) {
                     return this.addMessages(field, options.messagesWrapperClassName, message);
                },
                addMessages(field, messagesClass, messages) {
                    const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml)
                    return this.addHtmlMessages(field, messagesClass, htmlMessages);
                },
                addHtmlMessages(field, messagesClass, htmlMessages) {
                    const msgWrapper = getMessagesWrapper.call(this, field, messagesClass);

                    (Array.isArray(htmlMessages) ? htmlMessages : [htmlMessages]).forEach((htmlMessage) => {
                        const li = document.createElement('li');
                        li.innerHTML = htmlMessage;
                        li.setAttribute('data-msg-field', field.element.name);
                        msgWrapper.appendChild(li);
                    });

                    return msgWrapper;
                },
                setField(name, value) {
                    this.fields[name].element.value = value;
                    this.fields[name].element.dispatchEvent((new Event('input')));
                    this.validateField(this.fields[name]);
                }
            }
        }

        function getFieldName(field) {
             const fieldName = field.element?.getAttribute('title')
                || document.querySelector(`label[for="${field.element?.id}"]`)?.innerText;

            return fieldName
                ? fieldName.trim()
                : '';
        }

        hyva.formValidation = formValidation;
        hyva.formValidation.rules = formValidationRules;
        hyva.formValidation.setInputAttributeRuleName = (attrName, ruleName) => INPUT_ATTRIBUTE_RULES[attrName] = ruleName || attrName;
        hyva.formValidation.setInputTypeRuleName = (typeName, ruleName) => INPUT_TYPE_RULES[typeName] = ruleName || typeName;
        hyva.formValidation.addRule = (name, validator) => formValidationRules[name] = validator;
        hyva.formValidation.getFieldName = getFieldName;
    }(window.hyva = window.hyva || {}));

    window.addEventListener('alpine:init', () => {
        Alpine.data('hyva.formValidation', hyva.formValidation);
        Alpine.data('hyva.formValidation($el)', hyva.formValidation);
    }, {once: true});</script><div class="page messages"> <script>
            window.defaultSuccessMessageTimeout = 3000;
     function initMessages() {
        "use strict";
        return {
            messages: window.mageMessages || [],
            timeouts: {},
            stickyFiltersState: false,
            stickyProductBarState: false,
            showMessages: true,

            init() {
                this.positionMessages();
                this.dialog = document.getElementById('messages');

                this.$watch('showMessages', (showMessages) => {
                    this.watchShowMessages(showMessages);
                })
            },

            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 && window.defaultSuccessMessageTimeout) {
                        hideAfter = window.defaultSuccessMessageTimeout;
                    }

                    if (hideAfter) {
                        this.setHideTimeOut(this.messages.length - 1, hideAfter);
                    }
                });
            },

            setHideTimeOut(messageIndex, hideAfter) {
                
                this.clearTimeoutForMessage(messageIndex);

                this.timeouts[messageIndex] = setTimeout(() => {
                    if (this.showMessages) {
                        this.removeMessage(messageIndex);
                    }
                }, hideAfter);
            },

            clearTimeoutForMessage(index) {
                if (this.timeouts[index]) {
                    clearTimeout(this.timeouts[index]);
                    delete this.timeouts[index];
                }
            },

            clearAllMessageTimeouts() {
                Object.keys(this.timeouts).forEach(index => {
                    this.clearTimeoutForMessage(index);
                });
            },

            resetAllMessageTimeouts(hideAfter) {
                this.clearAllMessageTimeouts();

                if (hideAfter === undefined && window.defaultSuccessMessageTimeout) {
                    hideAfter = window.defaultSuccessMessageTimeout;
                }

                if (hideAfter) {
                    this.messages.forEach((_, index) => {
                        this.setHideTimeOut(index, hideAfter);
                    });
                }
            },

            getMessagesWrapper() {
                return document.querySelector('.page.messages');
            },

            getStickyFilters() {
                return document.querySelector('#sticky-filters');
            },

            getStickyProductBar() {
                return document.querySelector('#sticky-product-bar');
            },

            getBreadcrumbsHeight() {
                return document.querySelector('[aria-label="Breadcrumb"]')?.offsetHeight ?? 0;
            },

            getHeaderHeight() {
                return document.querySelector('#header')?.offsetHeight ?? 0;
            },

            positionMessages() {
                const messagesWrapper = this.getMessagesWrapper();
                const headerHeight = this.getHeaderHeight();
                const breadcrumbsHeight = this.getBreadcrumbsHeight();
                const stickyFilters = this.getStickyFilters();
                const stickyProductBar = this.getStickyProductBar();

                if (!stickyFilters && !stickyProductBar) {
                    if (window.scrollY >= 80) {
                        if (document.body.classList.contains('catalog-product-view')) {
                            messagesWrapper.style.top = `${headerHeight + 80}px`;
                        } else {
                            messagesWrapper.style.top = `${headerHeight}px`;
                        }
                    } else {
                        messagesWrapper.style.top = `${headerHeight + breadcrumbsHeight}px`;
                    }
                } else {
                    if (this.stickyFiltersState) {
                        const stickyFiltersHeight = stickyFilters.offsetHeight;
                        messagesWrapper.style.top = `${headerHeight + stickyFiltersHeight}px`;
                    } else if (this.stickyProductBarState) {
                        const stickyProductBarHeight = stickyProductBar.offsetHeight;
                        messagesWrapper.style.top = `${headerHeight + stickyProductBarHeight}px`;
                    } else if (window.scrollY >= 80) {
                        messagesWrapper.style.top = `${headerHeight}px`;
                    } else {
                        messagesWrapper.style.top = `${headerHeight + breadcrumbsHeight}px`;
                    }
                }
            },

            watchShowMessages(showMessages) {
                if (showMessages) {
                    this.resetAllMessageTimeouts();
                } else {
                    this.clearAllMessageTimeouts();
                }
            },

            eventListeners: {
                ['@sticky-filters.window'](event) {
                    this.stickyFiltersState = event.detail.isSticky;
                    this.positionMessages();
                },

                ['@sticky-product-bar.window'](event) {
                    this.stickyProductBarState = event.detail.isSticky;
                    this.positionMessages();
                },

                ['@messages-loaded.window'](event) {
                    this.addMessages(event.detail.messages);
                    this.positionMessages();
                },

                ['@private-content-loaded.window'](event) {
                    const data = event.detail.data;
                    if (data?.messages?.messages?.length) {
                        this.addMessages(data.messages.messages);
                        this.positionMessages();
                    }
                },

                ['@clear-messages.window']() {
                    this.messages = [];
                },

                ['@resize.window'](event) {
                    if (!this.isEmpty()) {
                        this.positionMessages();
                    }
                },

                ['@scroll.window'](event) {
                    if (!this.isEmpty()) {
                        this.positionMessages();
                    }
                },

                ['@hide-messages-start.window']() {
                    this.showMessages = false;
                },

                ['@hide-messages-end.window']() {
                    this.showMessages = true;
                },
            }
        }
    }</script><section id="messages" x-data="initMessages()" x-init="init()" x-bind="eventListeners" aria-live="assertive" role="alert" class="messages container px-0 mx-auto"><template x-if="!isEmpty() && showMessages"><div class="gap-2 md:px-0 flex flex-col items-center"><template x-for="(message, index) in messages" :key="index"><div class="w-full flex justify-center"><template x-if="message"><div class="message shadow-xl min-h-[60px] pl-[54px] pr-5 py-[18px] justify-start items-center gap-5 inline-flex rounded-none min-w-full w-full max-w-[776px]" :class="message.type" :ui-id="'message-' + message.type" :style="{ 'border': '0', 'background': message.type === 'error' ? 'var(--Additional-Error, #990000)' : message.type === 'success' ? 'var(--Supplementary-colours-OM-Green, #40683C)' : 'var(--Supplementary-colours-Azure, #0084B2)', 'text-underline-position': 'from-font', 'text-decoration-skip-ink': 'none', }"><span class="grow shrink basis-0 text-center text-pallas text-xl font-normal font-['Helvetica'] leading-6" x-html="message.text"></span> <button type="button" class="w-[14px] h-[14px] text-pallas flex items-center justify-center p-0" aria-label="Sulje Viesti" @click.prevent="removeMessage(index)"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 14" stroke="currentColor" stroke-width="2" class="stroke-current block" width="14" height="14"><path d="M0 0L14 14M0 14L14 0" /></svg></button></div></template></div></template></div></template></section></div><div class="page-wrapper"> <div class="geoip-banner-wrapper box-border w-full sticky z-[10001] top-0 left-0 bg-[#f3f3f3]" x-init="init()" x-data="geoip({ data: {&quot;AU&quot;:{&quot;name&quot;:&quot;Australia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/au/en/&quot;},&quot;AT&quot;:{&quot;name&quot;:&quot;Austria&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/at/de/&quot;},&quot;BE&quot;:{&quot;name&quot;:&quot;Belgium&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/be/nl/&quot;},&quot;BG&quot;:{&quot;name&quot;:&quot;Bulgaria&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/bg/en/&quot;},&quot;CA&quot;:{&quot;name&quot;:&quot;Canada&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/ca/en/&quot;},&quot;CZ&quot;:{&quot;name&quot;:&quot;CzechRepublic&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/cz/cs/&quot;},&quot;DK&quot;:{&quot;name&quot;:&quot;Denmark&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/dk/en/&quot;},&quot;EE&quot;:{&quot;name&quot;:&quot;Estonia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/ee/en/&quot;},&quot;FI&quot;:{&quot;name&quot;:&quot;Finland&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/fi/fi/&quot;},&quot;FR&quot;:{&quot;name&quot;:&quot;France&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/fr/fr/&quot;},&quot;DE&quot;:{&quot;name&quot;:&quot;Germany&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/de/de/&quot;},&quot;HU&quot;:{&quot;name&quot;:&quot;Hungary&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/hu/en/&quot;},&quot;IE&quot;:{&quot;name&quot;:&quot;Ireland&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/ie/en/&quot;},&quot;IT&quot;:{&quot;name&quot;:&quot;Italy&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/it/it/&quot;},&quot;LV&quot;:{&quot;name&quot;:&quot;Latvia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/lv/en/&quot;},&quot;LT&quot;:{&quot;name&quot;:&quot;Lithuania&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/lt/en/&quot;},&quot;NL&quot;:{&quot;name&quot;:&quot;Netherlands&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/nl/nl/&quot;},&quot;NO&quot;:{&quot;name&quot;:&quot;Norway&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/no/en/&quot;},&quot;PL&quot;:{&quot;name&quot;:&quot;Poland&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/pl/pl/&quot;},&quot;PT&quot;:{&quot;name&quot;:&quot;Portugal&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/pt/pt/&quot;},&quot;SK&quot;:{&quot;name&quot;:&quot;Slovakia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/sk/cs/&quot;},&quot;ES&quot;:{&quot;name&quot;:&quot;Spain&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/es/es/&quot;},&quot;SE&quot;:{&quot;name&quot;:&quot;Sweden&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/se/sv/&quot;},&quot;CH&quot;:{&quot;name&quot;:&quot;Switzerland&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/ch/de/&quot;},&quot;GB&quot;:{&quot;name&quot;:&quot;UnitedKingdom&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/gb/en/&quot;},&quot;JP&quot;:{&quot;name&quot;:&quot;Japan&quot;,&quot;url&quot;:&quot;https://jp.omsystem.com/product/index.html&quot;},&quot;AR&quot;:{&quot;name&quot;:&quot;Argentina&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;BZ&quot;:{&quot;name&quot;:&quot;Belize&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;BO&quot;:{&quot;name&quot;:&quot;Bolivia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;BR&quot;:{&quot;name&quot;:&quot;Brazil&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;CL&quot;:{&quot;name&quot;:&quot;Chile&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;KM&quot;:{&quot;name&quot;:&quot;Comoros&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;CR&quot;:{&quot;name&quot;:&quot;CostaRica&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;CU&quot;:{&quot;name&quot;:&quot;Cuba&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;DO&quot;:{&quot;name&quot;:&quot;DominicanRepublic&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;EC&quot;:{&quot;name&quot;:&quot;Ecuador&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;SV&quot;:{&quot;name&quot;:&quot;ElSalvador&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;GT&quot;:{&quot;name&quot;:&quot;Guatemala&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;HT&quot;:{&quot;name&quot;:&quot;Haiti&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;HN&quot;:{&quot;name&quot;:&quot;Honduras&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;JM&quot;:{&quot;name&quot;:&quot;Jamaica&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;MX&quot;:{&quot;name&quot;:&quot;Mexico&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;NI&quot;:{&quot;name&quot;:&quot;Nicaragua&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;PA&quot;:{&quot;name&quot;:&quot;Panama&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;PY&quot;:{&quot;name&quot;:&quot;Paraguay&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;PE&quot;:{&quot;name&quot;:&quot;Peru&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;LC&quot;:{&quot;name&quot;:&quot;SaintLucia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;UY&quot;:{&quot;name&quot;:&quot;Uruguay&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;VE&quot;:{&quot;name&quot;:&quot;Venezuela&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;AF&quot;:{&quot;name&quot;:&quot;Afghanistan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;AL&quot;:{&quot;name&quot;:&quot;Albania&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;DZ&quot;:{&quot;name&quot;:&quot;Algeria&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;AG&quot;:{&quot;name&quot;:&quot;AntiguaandBarbuda&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;AM&quot;:{&quot;name&quot;:&quot;Armenia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;AZ&quot;:{&quot;name&quot;:&quot;Azerbaijan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;BS&quot;:{&quot;name&quot;:&quot;Bahamas&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;BH&quot;:{&quot;name&quot;:&quot;Bahrain&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;BD&quot;:{&quot;name&quot;:&quot;Bangladesh&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;BB&quot;:{&quot;name&quot;:&quot;Barbados&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;BY&quot;:{&quot;name&quot;:&quot;Belarus&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;BJ&quot;:{&quot;name&quot;:&quot;Benin&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;BT&quot;:{&quot;name&quot;:&quot;Bhutan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;BA&quot;:{&quot;name&quot;:&quot;BosniaandHerzegovina&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;BW&quot;:{&quot;name&quot;:&quot;Botswana&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;BN&quot;:{&quot;name&quot;:&quot;BruneiDarussalam&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;BF&quot;:{&quot;name&quot;:&quot;BurkinaFaso&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;BI&quot;:{&quot;name&quot;:&quot;Burundi&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;CV&quot;:{&quot;name&quot;:&quot;CaboVerde&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;KH&quot;:{&quot;name&quot;:&quot;Cambodia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;CM&quot;:{&quot;name&quot;:&quot;Cameroon&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;CF&quot;:{&quot;name&quot;:&quot;CentralAfricanRepublic&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;TD&quot;:{&quot;name&quot;:&quot;Chad&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;CN&quot;:{&quot;name&quot;:&quot;China&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;CO&quot;:{&quot;name&quot;:&quot;Colombia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;CG&quot;:{&quot;name&quot;:&quot;Congo&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;CD&quot;:{&quot;name&quot;:&quot;DemocraticRepublicofCongo&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;CI&quot;:{&quot;name&quot;:&quot;Côted&#039;Ivoire&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;HR&quot;:{&quot;name&quot;:&quot;Croatia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;CY&quot;:{&quot;name&quot;:&quot;Cyprus&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;DJ&quot;:{&quot;name&quot;:&quot;Djibouti&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;DM&quot;:{&quot;name&quot;:&quot;Dominica&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;EG&quot;:{&quot;name&quot;:&quot;Egypt&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;GQ&quot;:{&quot;name&quot;:&quot;EquatorialGuinea&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;ER&quot;:{&quot;name&quot;:&quot;Eritrea&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SZ&quot;:{&quot;name&quot;:&quot;Eswatini&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;ET&quot;:{&quot;name&quot;:&quot;Ethiopia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;FJ&quot;:{&quot;name&quot;:&quot;Fiji&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;GA&quot;:{&quot;name&quot;:&quot;Gabon&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;GM&quot;:{&quot;name&quot;:&quot;Gambia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;GE&quot;:{&quot;name&quot;:&quot;Georgia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;GH&quot;:{&quot;name&quot;:&quot;Ghana&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;GR&quot;:{&quot;name&quot;:&quot;Greece&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;GD&quot;:{&quot;name&quot;:&quot;Grenada&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;GN&quot;:{&quot;name&quot;:&quot;Guinea&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;GW&quot;:{&quot;name&quot;:&quot;Guinea-Bissau&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;GY&quot;:{&quot;name&quot;:&quot;Guyana&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;HK&quot;:{&quot;name&quot;:&quot;HongKong&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/hk/zh/&quot;},&quot;IS&quot;:{&quot;name&quot;:&quot;Iceland&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;IN&quot;:{&quot;name&quot;:&quot;India&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/in/en/&quot;},&quot;ID&quot;:{&quot;name&quot;:&quot;Indonesia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;IR&quot;:{&quot;name&quot;:&quot;Iran&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;IQ&quot;:{&quot;name&quot;:&quot;Iraq&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;IL&quot;:{&quot;name&quot;:&quot;Israel&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;JO&quot;:{&quot;name&quot;:&quot;Jordan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;KZ&quot;:{&quot;name&quot;:&quot;Kazakhstan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;KE&quot;:{&quot;name&quot;:&quot;Kenya&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;KI&quot;:{&quot;name&quot;:&quot;Kiribati&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;KW&quot;:{&quot;name&quot;:&quot;Kuwait&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;KG&quot;:{&quot;name&quot;:&quot;Kyrgyzstan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;LA&quot;:{&quot;name&quot;:&quot;LaoPeople&#039;sDemocraticRepublic&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;LB&quot;:{&quot;name&quot;:&quot;Lebanon&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;LS&quot;:{&quot;name&quot;:&quot;Lesotho&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;LR&quot;:{&quot;name&quot;:&quot;Liberia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;LY&quot;:{&quot;name&quot;:&quot;Libya&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;LI&quot;:{&quot;name&quot;:&quot;Liechtenstein&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;LU&quot;:{&quot;name&quot;:&quot;Luxembourg&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MG&quot;:{&quot;name&quot;:&quot;Madagascar&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MW&quot;:{&quot;name&quot;:&quot;Malawi&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MY&quot;:{&quot;name&quot;:&quot;Malaysia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MV&quot;:{&quot;name&quot;:&quot;Maldives&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;ML&quot;:{&quot;name&quot;:&quot;Mali&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MT&quot;:{&quot;name&quot;:&quot;Malta&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MH&quot;:{&quot;name&quot;:&quot;MarshallIslands&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MR&quot;:{&quot;name&quot;:&quot;Mauritania&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MU&quot;:{&quot;name&quot;:&quot;Mauritius&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;FM&quot;:{&quot;name&quot;:&quot;Micronesia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MD&quot;:{&quot;name&quot;:&quot;Moldova&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MC&quot;:{&quot;name&quot;:&quot;Monaco&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MN&quot;:{&quot;name&quot;:&quot;Mongolia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;ME&quot;:{&quot;name&quot;:&quot;Montenegro&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MA&quot;:{&quot;name&quot;:&quot;Morocco&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MZ&quot;:{&quot;name&quot;:&quot;Mozambique&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MM&quot;:{&quot;name&quot;:&quot;Myanmar&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;NA&quot;:{&quot;name&quot;:&quot;Namibia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;NR&quot;:{&quot;name&quot;:&quot;Nauru&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;NP&quot;:{&quot;name&quot;:&quot;Nepal&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;NZ&quot;:{&quot;name&quot;:&quot;NewZealand&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;NE&quot;:{&quot;name&quot;:&quot;Niger&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;NG&quot;:{&quot;name&quot;:&quot;Nigeria&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;KP&quot;:{&quot;name&quot;:&quot;NorthKorea&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;OM&quot;:{&quot;name&quot;:&quot;Oman&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;PK&quot;:{&quot;name&quot;:&quot;Pakistan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;PW&quot;:{&quot;name&quot;:&quot;Palau&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;PS&quot;:{&quot;name&quot;:&quot;Palestine&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;PG&quot;:{&quot;name&quot;:&quot;PapuaNewGuinea&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;PH&quot;:{&quot;name&quot;:&quot;Philippines&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;PR&quot;:{&quot;name&quot;:&quot;PuertoRico&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/la/es/&quot;},&quot;QA&quot;:{&quot;name&quot;:&quot;Qatar&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;MK&quot;:{&quot;name&quot;:&quot;RepublicofNorthMacedonia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;RO&quot;:{&quot;name&quot;:&quot;Romania&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;RU&quot;:{&quot;name&quot;:&quot;RussianFederation&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;RW&quot;:{&quot;name&quot;:&quot;Rwanda&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;KN&quot;:{&quot;name&quot;:&quot;SaintKittsandNevis&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;VC&quot;:{&quot;name&quot;:&quot;SaintVincentandtheGrenadines&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;WS&quot;:{&quot;name&quot;:&quot;Samoa&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SM&quot;:{&quot;name&quot;:&quot;SanMarino&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;ST&quot;:{&quot;name&quot;:&quot;SaoTomeandPrincipe&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SA&quot;:{&quot;name&quot;:&quot;SaudiArabia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SN&quot;:{&quot;name&quot;:&quot;Senegal&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;RS&quot;:{&quot;name&quot;:&quot;Serbia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SC&quot;:{&quot;name&quot;:&quot;Seychelles&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SL&quot;:{&quot;name&quot;:&quot;SierraLeone&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SG&quot;:{&quot;name&quot;:&quot;Singapore&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SI&quot;:{&quot;name&quot;:&quot;Slovenia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SB&quot;:{&quot;name&quot;:&quot;SolomonIslands&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SO&quot;:{&quot;name&quot;:&quot;Somalia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;ZA&quot;:{&quot;name&quot;:&quot;SouthAfrica&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;KR&quot;:{&quot;name&quot;:&quot;SouthKorea&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SS&quot;:{&quot;name&quot;:&quot;SouthSudan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;LK&quot;:{&quot;name&quot;:&quot;SriLanka&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SD&quot;:{&quot;name&quot;:&quot;Sudan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SR&quot;:{&quot;name&quot;:&quot;Suriname&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;SY&quot;:{&quot;name&quot;:&quot;SyrianArabRepublic&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;TW&quot;:{&quot;name&quot;:&quot;Taiwan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/tw/zh/&quot;},&quot;TJ&quot;:{&quot;name&quot;:&quot;Tajikistan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;TZ&quot;:{&quot;name&quot;:&quot;Tanzania&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;TH&quot;:{&quot;name&quot;:&quot;Thailand&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/th/th/&quot;},&quot;TL&quot;:{&quot;name&quot;:&quot;Timor-Leste&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;TG&quot;:{&quot;name&quot;:&quot;Togo&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;TO&quot;:{&quot;name&quot;:&quot;Tonga&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;TT&quot;:{&quot;name&quot;:&quot;TrinidadandTobago&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;TN&quot;:{&quot;name&quot;:&quot;Tunisia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;TR&quot;:{&quot;name&quot;:&quot;Turkey&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;TM&quot;:{&quot;name&quot;:&quot;Turkmenistan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;TV&quot;:{&quot;name&quot;:&quot;Tuvalu&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;UG&quot;:{&quot;name&quot;:&quot;Uganda&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;UA&quot;:{&quot;name&quot;:&quot;Ukraine&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;AE&quot;:{&quot;name&quot;:&quot;UnitedArabEmirates&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;UZ&quot;:{&quot;name&quot;:&quot;Uzbekistan&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;VU&quot;:{&quot;name&quot;:&quot;Vanuatu&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;VN&quot;:{&quot;name&quot;:&quot;VietNam&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;YE&quot;:{&quot;name&quot;:&quot;Yemen&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;ZM&quot;:{&quot;name&quot;:&quot;Zambia&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;ZW&quot;:{&quot;name&quot;:&quot;Zimbabue&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/c/en/&quot;},&quot;US&quot;:{&quot;name&quot;:&quot;UnitedStates&quot;,&quot;url&quot;:&quot;https://explore.omsystem.com/us/en/&quot;}}, debugCountry: '', debugUrl: '', expiredDays: '7', message: 'Choose your country or region to view specific content and shop online.', allStoreUrl: 'country-selection' })" x-show="showBanner" x-cloak ><div class="geoip-banner flex flex-col gap-[20px] md:gap-[15px] p-[20px] items-center justify-center md:flex-row"><label for="geoip-select" class="pr-[30px]" x-text="message"></label> <select id="geoip-select" class="bg-tundra text-black w-full md:w-min focus:outline-none focus:ring-0 focus:border focus:border-gray-500" x-model="selectedStore" @change="changeSelectedStore" style="appearance: unset !important;"><template x-for="(store, country) in stores" :key="country"><option :value="store.url" x-text="store.name" selected="selected"></option></template><option value="0">Muu maa tai alue</option></select> <a class="btn btn-secondary text-caption cursor-pointer" @click="goRegionStore" x-text="'Jatka'"></a> <button @click="close" class="absolute font-helvetica ml-[10px] right-6 top-[10px] right-[15px] p-0 bg-transparent border-0 shadow-none h-[0px] md:h-auto md:relative md:top-0 md:right-0" ><svg xmlns="http://www.w3.org/2000/svg" width="23" height="23" viewBox="0 0 20 20" fill="none" role="img">
    <path d="M5 15L15 5M5 5L15 15" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<title>close</title></svg>
</button></div></div><script>
    function geoip(config) {
        return {
            showBanner: false,
            selectedStore: '',
            stores: {},
            message: config.message,
            websitePath: '',
            storeBaseUrl: '',

            async init() {
                await this.initializeGeoIP();
                this.checkRegion();
            },

            async fetchCountry() {
                try {
                    const res = await fetch('/cdn-cgi/trace', { cache: 'no-store' });
                    const text = await res.text();
                    const match = text.match(/loc=([A-Z]{2})/);
                    return match ? match[1] : '';
                } catch (e) {
                    console.log('GeoIP fetch failed', e);
                    return '';
                }
            },

            async initializeGeoIP() {
                try {
                    let pathname = [];

                    if (typeof BASE_URL !== 'undefined') {
                        try {
                            pathname = JSON.parse(BASE_URL);
                        } catch (e) {
                            pathname = BASE_URL;
                        }

                        pathname = pathname.replaceAll(window.location.origin, "").split('/');
                    } else {
                        pathname = window.location.pathname.split('/');
                    }

                    this.websitePath = pathname[1] && pathname[2]
                        ? "/" + pathname[1] + "/" + pathname[2]
                        : "/";

                    this.storeBaseUrl = typeof BASE_URL !== 'undefined'
                        ? BASE_URL
                        : window.location.origin + this.websitePath;

                    if (config.debugCountry && config.debugUrl) {
                        this.setCookie('regionStoreUrl', config.debugUrl, true);
                        this.setCookie('regionStoreName', config.debugCountry, true);

                        return;
                    }

                    const country = await this.fetchCountry();

                    if (country) {
                        const data = config.data;
                        const upperCountry = country.toUpperCase();

                        if (data && data[upperCountry]) {
                            this.setCookie('regionStoreUrl', data[upperCountry]["url"]);
                            this.setCookie('regionStoreName', data[upperCountry]["name"]);
                        }
                    }
                } catch (e) {
                    console.log("ERROR", e);
                }
            },

            checkRegion() {
                const ignoreRegionStore = this.getCookie('ignoreRegionStore');
                const regionStoreName = this.getCookie('regionStoreName');
                const regionStoreUrl = this.getCookie('regionStoreUrl');

                if (ignoreRegionStore != 1 &&
                    regionStoreName &&
                    regionStoreUrl &&
                    !this.storeBaseUrl.includes(regionStoreUrl) &&
                    !regionStoreUrl.includes(this.storeBaseUrl)
                ) {
                    this.stores = {
                        [regionStoreName]: {
                            name: regionStoreName,
                            url: regionStoreUrl
                        }
                    };
                    this.selectedStore = regionStoreUrl;
                    this.showBanner = true;
                } else {
                    this.selectedStore = '0';
                }
            },

            close() {
                this.setCookie('ignoreRegionStore', 1);
                this.showBanner = false;
            },

            changeSelectedStore(event) {
                this.selectedStore = event.target.value;
            },

            goRegionStore() {
                if (!this.selectedStore || this.selectedStore === '0') {
                    this.setCookie('ignoreRegionStore', 1);
                    window.location = this.storeBaseUrl + config.allStoreUrl;
                } else {
                    const url = new URL(window.location.href);
                    const params = url.pathname.split("/").slice(3).join("/");
                    window.location = this.selectedStore + params;
                }
            },

            setCookie(name, value, debug = false) {
                const days = debug === false ? config.expiredDays : 0;
                const expiredDate = new Date();
                expiredDate.setTime(expiredDate.getTime() + (days * 24 * 60 * 60 * 1000));
                document.cookie = `${name}=${value};expires=${expiredDate.toUTCString()};path=${this.websitePath}`;
            },

            getCookie(name) {
                const value = `; ${document.cookie}`;
                const parts = value.split(`; ${name}=`);
                if (parts.length === 2) return parts.pop().split(';').shift();
                return null;
            }
        }
    }</script><header class="page-header"> <script>
    function initHeader() {
        return {
            searchOpen: false,
            cart: {},
            isCartOpen: false,
            isMobile: true,
            isSearchOpen: false,
            mobileMenuPositionTop: 0,
            viewportWidth: window.innerWidth,

            init() {
                const matchMedia = window.matchMedia("(max-width: 1023px)");
                this.onChangeMedia(matchMedia);

                if (typeof matchMedia.onchange !== 'object') {
                    
                    matchMedia.addListener((event) => this.onChangeMedia(event));
                } else {
                    matchMedia.addEventListener(
                        "change",
                        (event) => this.onChangeMedia(event)
                    )
                }

                if (this.$refs.promoBlock) {
                    const { height } = this.$refs.promoBlock.getBoundingClientRect();
                    this.mobileMenuPositionTop = height;
                }

                this.updateScrollPadding();
            },
            updateScrollPadding() {
                const isDesktop = this.viewportWidth >= 768;
                const headerHeight = isDesktop && this.$refs.promoBlock
                    ? this.$refs.promoBlock.offsetHeight
                    : (this.$root ? this.$root.offsetHeight : 0);
                const stickyAddToCart = document.getElementById('sticky-product-bar-wrapper');
                const stickyBarHeight = stickyAddToCart ? (stickyAddToCart.offsetHeight ?? 0) : 0;
                const stickyAnchorBar = document.getElementById('sticky-anchor-bar');
                const stickyAnchorBarHeight = stickyAnchorBar ? (stickyAnchorBar.offsetHeight ?? 0) : 0;
                const stickyNotification = document.getElementById('stickynotfication');
                const stickyNotificationHeight = stickyNotification ? (stickyNotification.offsetHeight ?? 0) : 0;
                document.documentElement.style.setProperty('--page-scroll-padding', `${headerHeight + stickyBarHeight + stickyAnchorBarHeight + stickyNotificationHeight}px`);
                if (stickyAnchorBar){
                    document.documentElement.style.setProperty('--sticky-anchor-bar-height', `${stickyAnchorBarHeight}px`);
                }
            },
            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
                }
            },
            onChangeMedia(mediaQuery) {
                if (this.isMobile !== mediaQuery.matches) {
                    this.isMobile = mediaQuery.matches;
                    if (this.isMobile) {
                        this.$refs.searchContainerMobile.appendChild(this.$refs.searchForm);
                    } else {
                        this.$refs.searchContainerDesktop.appendChild(this.$refs.searchForm);
                    }
                }
            },
            handleSearchOutsideClick(isMobile) {
                if (isMobile) {
                    return;
                }

                this.isSearchOpen = false;
            },
            handleSearchClick() {
                this.isSearchOpen = !this.isSearchOpen;
                if (!this.isSearchOpen) {
                    return;
                }

                const searchInput = this.$refs.searchForm.querySelector('#search_field');
                if (!searchInput) {
                    return
                }

                var tempEl = document.createElement('input');
                tempEl.style.position = 'absolute';
                tempEl.style.top = `${searchInput.offsetTop + 7}px`;
                tempEl.style.left = `${searchInput.offsetLeft}px`;
                tempEl.style.height = 0;
                tempEl.style.opacity = 0;
                document.body.appendChild(tempEl);
                tempEl.focus();

                setTimeout(function () {
                    searchInput.focus();
                    searchInput.click();
                    document.body.removeChild(tempEl);
                }, 300);
            }
        }
    }

    function initCompareHeader() {
        return {
            compareProducts: null,
            itemCount: 0,
            receiveCompareData(data) {
                if (data['compare-products']) {
                    this.compareProducts = data['compare-products'];
                    this.itemCount = this.compareProducts.count;
                }
            }
        }
    }</script><!-- Sticky header hight is defined in container class --><div id="header" class="w-full" :style="`${viewportWidth >= 768 ? `margin-top: ${mobileMenuPositionTop > 0 ? mobileMenuPositionTop + 'px' : '0px'}` : ''}`" x-data="initHeader()" @private-content-loaded.window="getData(event.detail.data)" @banner-resize.window="mobileMenuPositionTop = $event.detail.height" @resize.window.debounce.100ms="viewportWidth = window.innerWidth; updateScrollPadding()"><!-- Sticky container -->  <script>
        function promoBlock() {
            return {
                activeIndex: 1,
                messagesCount: 1,
                direction: 1,
                sliderInterval: undefined,

                init() {
                    this.handleInterval();
                    this.setupResizeObserver();
                },
                setupResizeObserver() {
                    const resizeObserver = new ResizeObserver((entries) => {
                        entries.forEach((entry) => {
                            const height = entry.contentRect.height;
                            const width = entry.contentRect.width;
                            
                            this.$dispatch('banner-resize', { 
                                height: height, 
                                width: width 
                            });
                        });
                    });

                    resizeObserver.observe(this.$refs.promoBlock);
                },
                handleInterval() {
                    this.sliderInterval = setInterval(
                        () => this.setNextActiveIndex(), 6000
                    );
                },
                interruptInterval() {
                    clearInterval(this.sliderInterval);
                },
                setNextActiveIndex() {
                    this.$refs.promoDiv.classList.add('opacity-0');
                    this.$refs.promoDiv.classList.remove('opacity-100');

                    setTimeout(() => {
                        if (this.activeIndex >= this.messagesCount) {
                            this.activeIndex = 1;
                        } else {
                            this.activeIndex++;
                        }
                        this.$refs.promoDiv.classList.add('opacity-100');
                        this.$refs.promoDiv.classList.remove('opacity-0');
                    }, 1000);
                }
            }
        }</script> <div style="background-color: #005f87;" alt="" data-id="GlobalPromoBanner-emea_global" id="global-promo-banner" class="text-sm font-semibold text-center flex text-pallas" x-ref="promoBlock" ><div class="flex w-full overflow-hidden" x-data="promoBlock" @mouseover="interruptInterval" @mouseleave="handleInterval" ><div class="flex ease-in-out w-max transition-opacity duration-700 ease-in-out" :style="`transform: translateX(-${100 / messagesCount * (activeIndex - 1)}%);`" x-ref="promoDiv" >  <div class="transition-opacity duration-1000 ease-in-out min-w-[100vw] max-w-[100vw] flex items-center justify-center py-2 px-4 md:px-5 2xl:px-10"><p class="text-pallas text-sm leading-[20px] text-center"> Säästä jopa 300 € OM-3-kamerasta ja objektiiveista!    <a class="font-bold underline hover:underline !text-inherit hover:!text-inherit visited:!text-inherit" href="explore-the-city-promotion?olycmp=soco-explore_the_city_may26-owned-ig-link_shop-promo_lp" title="Tilaa&#x20;nyt&#x21;" tabindex="0" >Tilaa nyt!</a> </p></div> </div></div></div> <script>
    (function() {
        var banner = document.getElementById('global-promo-banner');
        
        if (banner) {
            var mt = banner.getBoundingClientRect().height + 'px';
            document.getElementById('header').style.marginTop = mt;
        }
    })();</script> <div data-id="MainNav-global" class="bg-pallas relative"><div><div class="flex flex-col w-full container max-w-[1440px] px-4 md:px-5 2xl:px-5"> <h1 class="sr-only">OM SYSTEM</h1> <!--Logo desktop--><div class="max-lg:hidden mt-5 flex justify-center max-h-6 max-w-[194px] mx-auto min-h-6"> <div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0"><a class="flex items-center justify-center text-xl font-medium tracking-wide text-gray-800 no-underline hover:no-underline font-title" href="https://explore.omsystem.com/fi/fi/" aria-label="Siirry&#x20;etusivulle" tabindex="0" ><img src="https://emea.explore.omsystem.com/static/version1779261903/frontend/OMDigital/Hyva/default/images/logo.svg" alt="OM&#x20;SYSTEM" width="189" height="64" loading="eager" /></a></div></div><div class="flex sm:justify-between items-center max-lg:py-5 lg:min-h-[60px]"><!--Main Navigation--> <script>
    'use strict';

    const initMenuMobile_6a0d8d3a2842d = () => {
        return {
            mobilePanelActiveId: null,
            mobilePanelActiveItemStack: [],
            promoHeight: '0px',
            open: false,

            init() {
                this.$watch(
                    'mobilePanelActiveItemStack',
                    () => {
                        const previousIndex = this.mobilePanelActiveItemStack.length - 2;
                        const previousMenuItem = this.mobilePanelActiveItemStack[previousIndex];
                        let previousOverlayElement = null;

                        if (previousMenuItem) {
                            if (previousMenuItem.element) {
                                previousOverlayElement = previousMenuItem.element?.nextElementSibling;
                            }
                        } else {
                            const mobileMenuNav = this.$refs['mobileMenuNav'];

                            previousOverlayElement = mobileMenuNav;
                        }

                        if (previousOverlayElement) {
                            previousOverlayElement.scrollTop = 0;
                        }
                    }
                );

                this.observer = new ResizeObserver(entries => {
                    for (const entry of entries) {
                        this.promoHeight = `${entry.contentRect.height}px`;
                    }
                });

                const promoBlock = document.getElementById('global-promo-banner');
                if (promoBlock) {
                    this.observer.observe(promoBlock);
                    this.promoHeight = `${promoBlock.offsetHeight}px`;
                }

                this.$el.addEventListener('$destroy', () => {
                    if (this.observer) {
                        this.observer.disconnect();
                    }
                });
            },
            openMenu() {
                this.open = true
                this.$nextTick(() => hyva.trapFocus(this.$refs['mobileMenuNavLinks']));
                
                document.body.style.overflow = 'hidden';
            },
            closeMenu() {
                document.body.style.overflow = '';

                if (this.open) {
                    this.$nextTick(() => this.$refs['mobileMenuTrigger'].focus() || hyva.releaseFocus());
                }

                this.open = false
                setTimeout(() => this.mobilePanelActiveItemStack = [], 300);
            },
            openSubcategory(index) {
                const menuNodeRef = document.querySelector('[data-child-id=' + `"${index}"` + ']')
                this.mobilePanelActiveId = this.mobilePanelActiveId === index ? 0 : index
                this.$nextTick(() => hyva.trapFocus(menuNodeRef))
            },
            backToMainCategories(index) {
                const menuNodeRef = document.querySelector('[data-child-id=' + `"${index}"` + ']')
                this.mobilePanelActiveId = 0
                this.$nextTick(() => {
                    hyva.trapFocus(this.$refs['mobileMenuNavLinks'])
                    menuNodeRef.querySelector('a').focus()
                })
            }
        }
    }</script><nav x-data="initMenuMobile_6a0d8d3a2842d()" @keydown.window.escape="closeMenu()" class="z-30 lg:hidden" aria-label="Sivuston&#x20;navigointi" role="navigation"><!-- mobile --><button x-ref="mobileMenuTrigger" @click="openMenu()" class="p-0.5 !text-black !border-0 !bg-pallas min-w-6 !flex" type="button" aria-label="Avaa&#x20;menu" aria-haspopup="menu" :aria-expanded="open" :hidden="open"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" role="img">
      <path d="M0.90918 16.3636H19.091V14.5454H0.90918V16.3636ZM0.90918 10.9091H19.091V9.0909H0.90918V10.9091ZM0.90918 3.63635V5.45453H19.091V3.63635H0.90918Z" fill="currentColor"/>
<title>menu</title></svg>
</button> <div x-ref="mobileMenuNavLinks" class=" fixed top-0 right-0 w-full h-full hidden flex-col bg-white overflow-x-hidden " :class="{ 'flex': true, 'hidden': false }" :style="{ 'top': `${promoHeight}`, 'height': `calc(100% - ${mobileMenuPositionTop}px` }" x-show="open" x-transition:enter="transform transition ease-in-out duration-200 sm:duration-500" x-transition:enter-start="translate-x-[-100%]" x-transition:enter-end="translate-x-0" x-transition:leave="transform transition ease-in-out duration-200 sm:duration-500" x-transition:leave-start="translate-x-0" x-transition:leave-end="translate-x-[-100%]" :aria-hidden="open ? 'false' : 'true'" role="dialog" aria-modal="true"><div class="flex flex-col h-full"><div class="w-full flex justify-between items-center py-[22px] px-4 bg-pallas max-h-16"><div class="w-[152px] h-[18px]"> <div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0"><a class="flex items-center justify-center text-xl font-medium tracking-wide text-gray-800 no-underline hover:no-underline font-title" href="https://explore.omsystem.com/fi/fi/" aria-label="Siirry&#x20;etusivulle" tabindex="0" ><img src="https://emea.explore.omsystem.com/static/version1779261903/frontend/OMDigital/Hyva/default/images/logo.svg" alt="OM&#x20;SYSTEM" width="152" height="18" loading="eager" /></a></div></div><button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><div class="flex flex-col justify-between gap-[22px] h-full pb-[calc(40px+env(safe-area-inset-bottom))] overflow-y-auto"><ul class="flex flex-col px-4 pt-2.5 list-none h-max" aria-label="Sivuston&#x20;navigointilinkit"> <li data-child-id="dba344a97536-main" class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'dba344a97536', title: 'Kauppa', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Kauppa</span> <button @click=" mobilePanelActiveItemStack.push({ id:'dba344a97536', title: 'Kauppa', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Kauppa&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'dba344a97536'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('dba344a97536'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('dba344a97536'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Kauppa&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'dba344a97536'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Kauppa</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_2)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_2">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><div class=" flex flex-col justify-between gap-[22px] h-full overflow-y-auto  " ><ul class="flex flex-col px-4 pt-2.5 list-none h-max" >  <li data-child-id="77b12860f593-main" class="level-0 pl-0 mb-0"> <div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'77b12860f593', title: 'Kamerat&#x20;', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Kamerat </span> <button @click=" mobilePanelActiveItemStack.push({ id:'77b12860f593', title: 'Kamerat&#x20;', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Kamerat&#x20;&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '77b12860f593'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('77b12860f593'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('77b12860f593'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Kamerat&#x20;&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '77b12860f593'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Kamerat&#x20;</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_3)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_3">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/cameras" title="Kaikki&#x20;kamerat">Kaikki kamerat  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/cameras/om-d" title="OM">OM </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/ep-7-pancake-kit-white" title="PEN">PEN </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/cameras/tough" title="Tough&#x20;TG">Tough TG </a></div></li> </ul></div></li>   <li data-child-id="ae02c7f3880e-main" class="level-0 pl-0 mb-0"> <div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'ae02c7f3880e', title: 'Objektiivit', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Objektiivit</span> <button @click=" mobilePanelActiveItemStack.push({ id:'ae02c7f3880e', title: 'Objektiivit', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Objektiivit&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'ae02c7f3880e'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('ae02c7f3880e'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('ae02c7f3880e'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Objektiivit&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'ae02c7f3880e'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Objektiivit</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_4)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_4">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/lenses" title="Kaikki&#x20;objektiivit">Kaikki objektiivit  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/lenses?lens_type=1" title="Kiinte&#xE4;polttov&#xE4;liset">Kiinteäpolttoväliset </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/lenses?lens_type=2" title="Makro">Makro </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/lenses?lens_type=3" title="Zoom">Zoom </a></div></li> </ul></div></li>   <li data-child-id="52024ea22805-main" class="level-0 pl-0 mb-0"> <div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'52024ea22805', title: 'Audiotuotteet', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Audiotuotteet</span> <button @click=" mobilePanelActiveItemStack.push({ id:'52024ea22805', title: 'Audiotuotteet', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Audiotuotteet&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '52024ea22805'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('52024ea22805'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('52024ea22805'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Audiotuotteet&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '52024ea22805'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Audiotuotteet</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_5)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_5">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/audio" title="Kaikki&#x20;audiotuotteet">Kaikki audiotuotteet  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/audio/notetakers" title="Muistio-&#x20;&amp;&#x20;stereosanelimet">Muistio- &amp; stereosanelimet </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/audio/sound-music-field" title="Musiikki&#x20;&amp;&#x20;kentt&#xE4;-&#xE4;&#xE4;nitys">Musiikki &amp; kenttä-äänitys </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/audio/transcription" title="Saneluiden&#x20;purku">Saneluiden purku </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://dictation.omsystem.com" title="Ammattisanelu">Ammattisanelu </a></div></li> </ul></div></li>   <li data-child-id="33cc7da1d7f6-main" class="level-0 pl-0 mb-0"> <div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'33cc7da1d7f6', title: 'Kiikarit', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Kiikarit</span> <button @click=" mobilePanelActiveItemStack.push({ id:'33cc7da1d7f6', title: 'Kiikarit', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Kiikarit&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '33cc7da1d7f6'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('33cc7da1d7f6'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('33cc7da1d7f6'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Kiikarit&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '33cc7da1d7f6'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Kiikarit</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_6)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_6">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/binoculars" title="Kaikki&#x20;kiikarit">Kaikki kiikarit  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/binoculars/pro" title="PRO">PRO </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/binoculars/standard" title="Standardi">Standardi </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/binoculars/compact" title="Kompakti">Kompakti </a></div></li> </ul></div></li>   <li data-child-id="04115b4b3bb6-main" class="level-0 pl-0 mb-0"> <div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'04115b4b3bb6', title: 'Lis&#xE4;varusteet', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Lisävarusteet</span> <button @click=" mobilePanelActiveItemStack.push({ id:'04115b4b3bb6', title: 'Lis&#xE4;varusteet', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Lis&#xE4;varusteet&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '04115b4b3bb6'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('04115b4b3bb6'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('04115b4b3bb6'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Lis&#xE4;varusteet&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '04115b4b3bb6'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Lis&#xE4;varusteet</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_7)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_7">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/accessories" title="Kaikki&#x20;lis&#xE4;varusteet">Kaikki lisävarusteet  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/accessories/camera-accessories" title="Kameravarusteet">Kameravarusteet </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/accessories/lens-accessories" title="Objektiivien&#x20;varusteet">Objektiivien varusteet </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/accessories/tough-accessories" title="Tough&#x20;TG">Tough TG </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/accessories/audio-accessories" title="Audiovarusteet">Audiovarusteet </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/accessories/spare-parts" title="Varaosat">Varaosat </a></div></li> </ul></div></li>  </ul> <div class="bg-tundra px-4 pt-5 pb-[calc(60px+env(safe-area-inset-bottom))] z-50"><ul class="flex pl-0 list-none"> <li class="level-1 min-w-[202px] max-w-[202px] mb-0"><span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Erityistä</span> <ul class="z-10 w-full pl-0 list-none mt-2.5"> <li class="level-2 mb-0 flex"><a  href="https://explore.omsystem.com/fi/fi/reconditioned" title="Tehdashuolletut&#x20;tuotteet" class="text-base leading-[20px] font-bold py-2.5 focus:!text-taiga hover:!text-taiga">Tehdashuolletut tuotteet</a></li>  <li class="level-2 mb-0 flex"><a  href="https://explore.omsystem.com/fi/fi/accessories/merchandise" title="Tavarat" class="text-base leading-[20px] font-bold py-2.5 focus:!text-taiga hover:!text-taiga">Tavarat</a></li>  <li class="level-2 mb-0 flex"><a  href="https://explore.omsystem.com/fi/fi/promotions" title="Tarjoukset" class="text-base leading-[20px] font-bold py-2.5 focus:!text-taiga hover:!text-taiga">Tarjoukset</a></li>  <li class="level-2 mb-0 flex"><a  href="https://my.omsystem.com/tradein/main" title="Trade-in" class="text-base leading-[20px] font-bold py-2.5 focus:!text-taiga hover:!text-taiga">Trade-in</a></li> </ul></li> </ul></div></div></div></li>   <li data-child-id="b50f4e2f4d4a-main" class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'b50f4e2f4d4a', title: 'Tutki', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Tutki</span> <button @click=" mobilePanelActiveItemStack.push({ id:'b50f4e2f4d4a', title: 'Tutki', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Tutki&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'b50f4e2f4d4a'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('b50f4e2f4d4a'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('b50f4e2f4d4a'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Tutki&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'b50f4e2f4d4a'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Tutki</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_8)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_8">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><div class=" flex flex-col justify-between gap-[22px] h-full overflow-y-auto  " ><ul class="flex flex-col px-4 pt-2.5 list-none h-max" >  <li data-child-id="c1a99d194231-main" class="level-0 pl-0 mb-0"> <div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'c1a99d194231', title: 'Tutustu&#x20;koko&#x20;kuvantamisvalikoimaamme', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Tutustu koko kuvantamisvalikoimaamme</span> <button @click=" mobilePanelActiveItemStack.push({ id:'c1a99d194231', title: 'Tutustu&#x20;koko&#x20;kuvantamisvalikoimaamme', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Tutustu&#x20;koko&#x20;kuvantamisvalikoimaamme&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'c1a99d194231'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('c1a99d194231'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('c1a99d194231'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Tutustu&#x20;koko&#x20;kuvantamisvalikoimaamme&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'c1a99d194231'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Tutustu&#x20;koko&#x20;kuvantamisvalikoimaamme</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_9)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_9">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/omd" title="OM-kamerat">OM-kamerat </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/e-p7" title="PEN-kamerat">PEN-kamerat </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/tough" title="Tough&#x20;TG&#x20;-kamerat">Tough TG -kamerat </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/m-zuiko-digital-lenses" title="M.Zuiko-objektiivit">M.Zuiko-objektiivit </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/binos" title="Kiikarit">Kiikarit </a></div></li> </ul></div></li>   <li data-child-id="3422c1adfe7a-main" class="level-0 pl-0 mb-0"> <div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'3422c1adfe7a', title: 'Suositut&#x20;valokuvauksen&#x20;tyylilajit', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Suositut valokuvauksen tyylilajit</span> <button @click=" mobilePanelActiveItemStack.push({ id:'3422c1adfe7a', title: 'Suositut&#x20;valokuvauksen&#x20;tyylilajit', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Suositut&#x20;valokuvauksen&#x20;tyylilajit&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '3422c1adfe7a'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('3422c1adfe7a'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('3422c1adfe7a'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Suositut&#x20;valokuvauksen&#x20;tyylilajit&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '3422c1adfe7a'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Suositut&#x20;valokuvauksen&#x20;tyylilajit</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_10)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_10">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/bird-photography" title="Linnut">Linnut </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/macro-photography" title="Makro">Makro </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/wildlife-photography" title="Villiel&#xE4;imet">Villieläimet </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/landscape-photography" title="Maisema">Maisema </a></div></li> </ul></div></li>   <li data-child-id="2fab08d3d807-main" class="level-0 pl-0 mb-0"> <div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'2fab08d3d807', title: 'Inspiroidu', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Inspiroidu</span> <button @click=" mobilePanelActiveItemStack.push({ id:'2fab08d3d807', title: 'Inspiroidu', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Inspiroidu&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '2fab08d3d807'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('2fab08d3d807'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('2fab08d3d807'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Inspiroidu&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '2fab08d3d807'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Inspiroidu</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_11)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_11">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://my.omsystem.com" title="MyOMSYSTEM">MyOMSYSTEM </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://my.omsystem.com/ambassadors" title="L&#xE4;hettil&#xE4;&#xE4;t">Lähettiläät </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://events.eao.omsystem.com" title="Tapahtumat">Tapahtumat </a></div></li> </ul></div></li>   <li data-child-id="902b3f433b79-main" class="level-0 pl-0 mb-0"> <div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'902b3f433b79', title: 'Tutustu&#x20;&#xE4;&#xE4;nitystuotteisiimme', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Tutustu äänitystuotteisiimme</span> <button @click=" mobilePanelActiveItemStack.push({ id:'902b3f433b79', title: 'Tutustu&#x20;&#xE4;&#xE4;nitystuotteisiimme', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Tutustu&#x20;&#xE4;&#xE4;nitystuotteisiimme&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '902b3f433b79'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('902b3f433b79'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('902b3f433b79'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Tutustu&#x20;&#xE4;&#xE4;nitystuotteisiimme&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '902b3f433b79'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Tutustu&#x20;&#xE4;&#xE4;nitystuotteisiimme</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_12)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_12">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/digital-recorders" title="Digitaaliset&#x20;tallentimet">Digitaaliset tallentimet </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://dictation.omsystem.com" title="Ammattimainen&#x20;puheentallennus">Ammattimainen puheentallennus </a></div></li> </ul></div></li>  </ul> <div class="bg-tundra px-4 pt-5 pb-[calc(60px+env(safe-area-inset-bottom))] z-50"><ul class="flex pl-0 list-none"> <li class="level-1 min-w-[202px] max-w-[202px] mb-0"><span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Muut</span> <ul class="z-10 w-full pl-0 list-none mt-2.5"> <li class="level-2 mb-0 flex"><a  target="_blank"  href="https://my.omsystem.com/login?ReturnUrl=%2Fp%2Fdashboard-products-add" title="Tuotteen&#x20;rekister&#xF6;inti" class="text-base leading-[20px] font-bold py-2.5 focus:!text-taiga hover:!text-taiga">Tuotteen rekisteröinti</a></li>  <li class="level-2 mb-0 flex"><a  href="https://explore.omsystem.com/fi/fi/stores" title="J&#xE4;lleenmyyj&#xE4;haku" class="text-base leading-[20px] font-bold py-2.5 focus:!text-taiga hover:!text-taiga">Jälleenmyyjähaku</a></li>  <li class="level-2 mb-0 flex"><a  href="https://explore.omsystem.com/fi/fi/firmware" title="Laiteohjelmiston&#x20;p&#xE4;ivitykset" class="text-base leading-[20px] font-bold py-2.5 focus:!text-taiga hover:!text-taiga">Laiteohjelmiston päivitykset</a></li>  <li class="level-2 mb-0 flex"><a  href="https://explore.omsystem.com/fi/fi/downloads" title="Tuotek&#xE4;sikirjat" class="text-base leading-[20px] font-bold py-2.5 focus:!text-taiga hover:!text-taiga">Tuotekäsikirjat</a></li> </ul></li> </ul></div></div></div></li>   <li data-child-id="49435fded0f1-main" class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'49435fded0f1', title: 'Tarjoukset', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Tarjoukset</span> <button @click=" mobilePanelActiveItemStack.push({ id:'49435fded0f1', title: 'Tarjoukset', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Tarjoukset&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '49435fded0f1'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('49435fded0f1'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('49435fded0f1'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Tarjoukset&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '49435fded0f1'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Tarjoukset</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_13)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_13">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><div class=" flex flex-col justify-between gap-[22px] h-full overflow-y-auto pb-[calc(30px+env(safe-area-inset-bottom))] " ><ul class="flex flex-col px-4 pt-2.5 list-none h-max" >  <li class="p-0 m-0"><a  href="https://explore.omsystem.com/fi/fi/promotions" title="N&#xE4;yt&#xE4;&#x20;kaikki&#x20;tarjoukset" class="text-base py-2.5 items-center flex gap-3 leading-[20px] font-bold hover:text-taiga">Näytä kaikki tarjoukset  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a></li>    <li data-child-id="c0f096298f59-main" class="level-0 pl-0 mb-0"> <ul class="flex flex-col p-0 list-none gap-8 mt-3.5"> <li class="flex flex-col mb-0"><a href="https://explore.omsystem.com/fi/fi/adventure-cashback-promotion?icid=adventure_cashback_apr26-internal-hp-link_shop-promo_lp" title="adventure-cashback-2026-navi-menu"><img class="w-full h-full object-cover aspect-[4/3]" width="256" height="192" src="https://cdn.sanity.io/images/ipox1240/live/88c3be5dddfed7412527dcacf9e86dbdd2df94a2-991x744.jpg" alt="adventure-cashback-2026-navi-menu" loading="lazy" /><div class="px-3 py-1.5 bg-primary text-center text-base leading-[16px] text-white">Lunasta jopa 31.5.2026</div><p class="mt-4 text-base font-bold leading-[20px]">Matkusta kevyesti. Mene pidemmälle. Säästä jopa 500€</p></a></li>  <li class="flex flex-col mb-0"><a href="http://my.omsystem.com/tradein/main" title="Trade&#x20;in&#x20;promo&#x20;menu"><img class="w-full h-full object-cover aspect-[4/3]" width="256" height="192" src="https://cdn.sanity.io/images/ipox1240/live/46c75ffbb88f5c0773155e1053829aa073746d6b-991x744.jpg" alt="Trade&#x20;in&#x20;promo&#x20;menu" loading="lazy" /><div class="px-3 py-1.5 bg-primary text-center text-base leading-[16px] text-white">Vain valituissa maissa</div><p class="mt-4 text-base font-bold leading-[20px]">Vaihda vanha uuteen - Päivitys alkaa tästä</p></a></li> </ul></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('c0f096298f59'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('c0f096298f59'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'c0f096298f59'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left"></span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_14)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_14">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/adventure-cashback-promotion?icid=adventure_cashback_apr26-internal-hp-link_shop-promo_lp" title="Matkusta&#x20;kevyesti.&#x20;Mene&#x20;pidemm&#xE4;lle.&#x20;S&#xE4;&#xE4;st&#xE4;&#x20;jopa&#x20;500&#x20AC;">Matkusta kevyesti. Mene pidemmälle. Säästä jopa 500€ </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="http://my.omsystem.com/tradein/main" title="Vaihda&#x20;vanha&#x20;uuteen&#x20;-&#x20;P&#xE4;ivitys&#x20;alkaa&#x20;t&#xE4;st&#xE4;">Vaihda vanha uuteen - Päivitys alkaa tästä </a></div></li> </ul></div></li>  </ul></div></div></li>   <li data-child-id="c3f3c779a92d-main" class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'c3f3c779a92d', title: 'Tuki&#x20;', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Tuki </span> <button @click=" mobilePanelActiveItemStack.push({ id:'c3f3c779a92d', title: 'Tuki&#x20;', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Tuki&#x20;&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'c3f3c779a92d'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('c3f3c779a92d'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('c3f3c779a92d'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Tuki&#x20;&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'c3f3c779a92d'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Tuki&#x20;</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_15)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_15">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><div class=" flex flex-col justify-between gap-[22px] h-full overflow-y-auto pb-[calc(30px+env(safe-area-inset-bottom))] " ><ul class="flex flex-col px-4 pt-2.5 list-none h-max" >  <li class="p-0 m-0"><a  href="https://explore.omsystem.com/fi/fi/service-and-support" title="N&#xE4;yt&#xE4;&#x20;asiakastuen&#x20;sivu" class="text-base py-2.5 items-center flex gap-3 leading-[20px] font-bold hover:text-taiga">Näytä asiakastuen sivu  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a></li>    <li data-child-id="2b211a7528bc-main" class="level-0 pl-0 mb-0"> <div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'2b211a7528bc', title: 'Tuote&#x20;ja&#x20;palvelu', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Tuote ja palvelu</span> <button @click=" mobilePanelActiveItemStack.push({ id:'2b211a7528bc', title: 'Tuote&#x20;ja&#x20;palvelu', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Tuote&#x20;ja&#x20;palvelu&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '2b211a7528bc'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('2b211a7528bc'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('2b211a7528bc'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Tuote&#x20;ja&#x20;palvelu&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '2b211a7528bc'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Tuote&#x20;ja&#x20;palvelu</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_16)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_16">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://my.omsystem.com/p/repair-service" title="Korjauspyynt&#xF6;">Korjauspyyntö </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/pro-service" title="Pro-palvelu">Pro-palvelu </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/warranty-regulations" title="Takuukattavuus&#x20;">Takuukattavuus  </a></div></li> </ul></div></li>   <li data-child-id="3d1d558cd80e-main" class="level-0 pl-0 mb-0"> <div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'3d1d558cd80e', title: 'Tuotetiedot&#x20;ja&#x20;rekister&#xF6;inti', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Tuotetiedot ja rekisteröinti</span> <button @click=" mobilePanelActiveItemStack.push({ id:'3d1d558cd80e', title: 'Tuotetiedot&#x20;ja&#x20;rekister&#xF6;inti', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Tuotetiedot&#x20;ja&#x20;rekister&#xF6;inti&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '3d1d558cd80e'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('3d1d558cd80e'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('3d1d558cd80e'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Tuotetiedot&#x20;ja&#x20;rekister&#xF6;inti&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === '3d1d558cd80e'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Tuotetiedot&#x20;ja&#x20;rekister&#xF6;inti</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_17)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_17">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://my.omsystem.com/login?ReturnUrl=%2Fp%2Fdashboard-products-add" title="Tuotteen&#x20;rekister&#xF6;inti">Tuotteen rekisteröinti </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/downloads" title="Lataukset">Lataukset </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/firmware" title="Laiteohjelmiston&#x20;p&#xE4;ivitykset">Laiteohjelmiston päivitykset </a></div></li> </ul></div></li>   <li data-child-id="e656fcfb595b-main" class="level-0 pl-0 mb-0"> <div class="flex items-center transition-transform duration-150 ease-in-out transform gap-3" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"> <span @click=" mobilePanelActiveItemStack.push({ id:'e656fcfb595b', title: 'Asiakastuki&#x20;ja&#x20;resurssit', }) " class="flex items-center w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px]" >Asiakastuki ja resurssit</span> <button @click=" mobilePanelActiveItemStack.push({ id:'e656fcfb595b', title: 'Asiakastuki&#x20;ja&#x20;resurssit', }) " class="!text-black !border-0 !bg-white !flex mb-0" aria-label="Avaa&#x20;Asiakastuki&#x20;ja&#x20;resurssit&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'e656fcfb595b'" ><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="size-[18px] fill-black" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
</button> </div></li>  <li class="absolute top-0 right-0 z-10 transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter h-full w-full overflow-x-hidden pb-[--safe-area-inset-bottom]" :class="() => { const mobilePanelActiveItemStackIdStack = mobilePanelActiveItemStack.map(item => item.id); return { 'translate-x-full' : !mobilePanelActiveItemStackIdStack.includes('e656fcfb595b'), 'translate-x-0' : mobilePanelActiveItemStackIdStack.includes('e656fcfb595b'), } }"><div class="flex flex-col h-full bg-white"><div class="py-2.5 px-4 flex justify-between items-center h-16 gap-4"><button @click="mobilePanelActiveItemStack.pop()" class="!text-black !border-0 !bg-white !flex mb-0 items-center gap-4 py-1" aria-label="Avaa&#x20;Asiakastuki&#x20;ja&#x20;resurssit&#x20;alaluokat" aria-haspopup="true" :aria-expanded="mobilePanelActiveId === 'e656fcfb595b'" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 18 18" fill="none" class="size-5 fill-black rotate-180" aria-hidden="true">
  <path d="M5.22131 18L3.795 16.588L11.3758 9L3.795 1.41918L5.22131 0L14.2213 9L5.22131 18Z" fill="currentColor"/>
</svg>
 <span class="text-base text-black font-bold leading-[20px] text-left">Asiakastuki&#x20;ja&#x20;resurssit</span></button> <button @click="closeMenu()" class="!text-black !border-0 !bg-pallas !flex mb-0" aria-label="Sulje&#x20;menu" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" :class="{ 'hidden' : !open, 'flex': open }" aria-hidden="true">
  <g clip-path="url(#clip0_23386_52354_18)">
    <path d="M19.5 2.48062L11.9756 9.99502L19.5 17.5194L17.5194 19.5L9.99502 11.9756L2.48062 19.5L0.5 17.5194L8.02436 9.99502L0.5 2.48062L2.48062 0.5L9.99502 8.02436L17.5194 0.5L19.5 2.48062Z" fill="black"/>
  </g>
  <defs>
    <clipPath id="clip0_23386_52354_18">
      <rect width="20" height="20" fill="white"/>
    </clipPath>
  </defs>
</svg>
</button></div><ul class="flex flex-col px-4 pt-2.5 pb-[calc(40px+env(safe-area-inset-bottom))] list-none overflow-x-hidden flex-1 overflow-y-auto" > <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/software" title="Ohjelmistot&#x20;ja&#x20;sovellukset">Ohjelmistot ja sovellukset </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://contact-support.explore.omsystem.com/hc/en-us/requests/new" title="Ota&#x20;yhteytt&#xE4;&#x20;">Ota yhteyttä  </a></div></li>  <li class="level-0 pl-0 mb-0"><div class="flex items-center transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }"><a class="flex items-center gap-3 w-full py-2.5 cursor-pointer level-0 font-bold text-base leading-[20px] focus:!text-taiga hover:!text-taiga" href="https://explore.omsystem.com/fi/fi/vulnerability-om-workspace" title="Tuoteturvallisuus">Tuoteturvallisuus </a></div></li> </ul></div></li>  </ul></div></div></li>  </ul><div class="flex flex-col gap-5 px-4 pb-[calc(30px+env(safe-area-inset-bottom))]"> <a class="flex gap-2.5 items-center py-1" onclick="hyva.setCookie && hyva.setCookie( 'login_redirect', window.location.href, 1 )" href="https://explore.omsystem.com/fi/fi/customer/account/index" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" aria-hidden="true">
    <path d="M2.52304 20H0.739481L0.898161 18.172C1.08858 16.344 1.97084 14.9413 3.53859 13.9638C5.10635 12.9863 7.2644 12.504 10.0127 12.504C12.7611 12.504 14.9255 12.9864 16.4869 13.9575C18.0483 14.9286 18.9305 16.3313 19.1273 18.1593L19.286 20H17.5024L17.3437 18.3243C17.2739 17.6833 17.0772 17.1184 16.7471 16.6233C16.417 16.1282 16.0108 15.7347 15.5348 15.4491C15.0587 15.1634 14.5002 14.9222 13.8528 14.7382C13.2054 14.5541 12.5833 14.4272 11.9677 14.3573C11.352 14.2875 10.6982 14.2558 10.0127 14.2558C9.32724 14.2558 8.66712 14.2875 8.05779 14.3573C7.44846 14.4272 6.81374 14.5478 6.17268 14.7382C5.53161 14.9286 4.96671 15.1634 4.49067 15.4554C4.01463 15.7474 3.60841 16.1409 3.27836 16.6296C2.9483 17.1184 2.75154 17.6896 2.68172 18.337L2.52304 20ZM12.285 2.73564C11.6313 2.06918 10.8696 1.73279 10.0064 1.73279C9.14317 1.73279 8.38785 2.06284 7.72775 2.72929C7.06764 3.39575 6.74392 4.17011 6.74392 5.05871C6.74392 6.27737 7.05493 7.29927 7.67696 8.11806C8.29898 8.93684 9.07335 9.34306 10.0064 9.34306C10.9394 9.34306 11.7138 8.93684 12.3358 8.11806C12.9578 7.29927 13.2688 6.28372 13.2688 5.05871C13.2688 4.17645 12.9388 3.40209 12.285 2.73564ZM13.5671 9.35576C12.6151 10.4983 11.4282 11.0759 10.0064 11.0759C8.58461 11.0759 7.39769 10.4983 6.43927 9.34941C5.48084 8.20057 5.00479 6.77245 5.00479 5.05871C5.00479 4.16376 5.2333 3.33228 5.68395 2.54522C6.1346 1.75817 6.75027 1.1425 7.51828 0.685498C8.28629 0.2285 9.11777 0 10 0C10.8823 0 11.7138 0.2285 12.4818 0.685498C13.2498 1.1425 13.8655 1.76452 14.3161 2.54522C14.7668 3.32593 14.9953 4.16376 14.9953 5.05871C14.9953 6.77245 14.5129 8.20057 13.5545 9.35576H13.5671Z" fill="black"/>
</svg>
 <span class="text-base text-gray-dark leading-[16px]">Kirjaudu sisään/ Rekisteröidy</span></a>  <button type="button" x-data @click="$dispatch('country-selector-overlay')" class="gap-2.5 items-center py-1 !border-0 !flex mb-0 cursor-pointer" tabindex="0" aria-label="Valitse&#x20;maa" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 fill-black" aria-hidden="true">
  <path d="M15.6894 15.6967C16.9739 14.4122 17.7358 12.8592 17.9753 11.0305H14.6734C14.5791 13.2221 14.209 15.1306 13.5486 16.7489C13.4398 17.0029 13.3454 17.2061 13.2656 17.3512C14.1509 16.9666 14.9565 16.4224 15.6894 15.7039V15.6967ZM2.02468 11.0305C2.26416 12.8592 3.02613 14.4122 4.3106 15.6967C5.04354 16.4078 5.84905 16.9594 6.7344 17.344C6.65457 17.1988 6.5675 17.0029 6.45139 16.7417C5.79827 15.1234 5.4209 13.2221 5.32656 11.0232H2.02468V11.0305ZM4.3106 4.31785C3.02613 5.60232 2.26416 7.15529 2.02468 8.98403H5.32656C5.4209 6.79245 5.79101 4.88389 6.45139 3.2656C6.55298 3.01161 6.64731 2.80841 6.7344 2.65602C5.81277 3.06966 5.00726 3.62844 4.3106 4.31785ZM9.209 17.5617C9.51379 17.8882 9.78229 18.0479 10 18.0479C10.2177 18.0479 10.4862 17.881 10.7837 17.5544C11.0813 17.2279 11.3788 16.7199 11.6546 16.0305C12.2061 14.6589 12.5326 12.9971 12.627 11.0305H7.37301C7.46734 12.9608 7.78665 14.6299 8.34543 16.0305C8.62844 16.7199 8.91873 17.2279 9.21626 17.5617H9.209ZM10 1.96662H9.97096C9.73874 1.98113 9.48477 2.1553 9.19449 2.48186C8.90422 2.80842 8.62118 3.30914 8.33816 3.98403C7.78664 5.38461 7.46008 7.0537 7.36574 8.98403H12.6197C12.5254 7.01741 12.2061 5.35559 11.6473 3.98403L11.5602 3.80261C12.5036 4.03483 13.3599 4.46299 14.1219 5.1016C14.4122 6.28447 14.5864 7.5762 14.6589 8.97678H17.9608C17.7213 7.14804 16.9594 5.59507 15.6749 4.3106C14.9202 3.55588 14.0494 2.97533 13.0697 2.56894C12.09 2.16255 11.0595 1.96662 9.98549 1.96662H10ZM13.8244 0.769229C15.0435 1.26995 16.1176 1.99565 17.061 2.93904C18.0044 3.88244 18.73 4.96372 19.238 6.17562C19.746 7.38752 20 8.66473 20 10C20 11.3353 19.746 12.6125 19.238 13.8244C18.73 15.0363 18.0044 16.1176 17.061 17.061C16.1176 18.0044 15.0363 18.73 13.8244 19.238C12.6125 19.746 11.3353 20 10 20C8.66473 20 7.38752 19.746 6.17562 19.238C4.96372 18.73 3.88243 18.0044 2.93903 17.061C1.99564 16.1176 1.26995 15.0363 0.761965 13.8244C0.253982 12.6125 0 11.3353 0 10C0 8.66473 0.253982 7.38752 0.761965 6.17562C1.26995 4.96372 1.99564 3.88244 2.93903 2.93904C3.88243 1.99565 4.96372 1.26996 6.17562 0.761976C7.38752 0.253993 8.66473 0 10 0C11.3353 0 12.6125 0.253993 13.8244 0.761976V0.769229Z" fill="currentColor"/>
</svg>
 <span class="text-base text-gray-dark leading-[16px] pt-1">Finland</span></button></div></div></div></div></nav> <script>
    'use strict';

    function initMenuDesktop_6a0d8d3a4f23c() {
        return {
            hoverTopPosition: '100%',
            selectedSubMenuHeight: 0,
            prevSubMenuHeight: 0,
            activeMenuId: null,
            debounceMouseOver: null,

            setActiveMenu(id) {
                if (!id) {
                    this.activeMenuId = undefined;
                    this.selectedSubMenuHeight = 0;

                    return;
                }

                this.hoverTopPosition = this.$refs.menuContainer.offsetTop + this.$refs.menuContainer.getBoundingClientRect().height;
                this.selectedSubMenuHeight = this.$refs[`subMenuContainer-${id}`].offsetHeight;
                this.activeMenuId = id;
            },

            handleCloseSubMenu() {
                clearTimeout(this.debounceMouseOver);
                this.setActiveMenu(0);
            },

            setMaxCalloutHeight() {
                const calloutTexts = document.querySelectorAll('.callout-text');
                const maxHeight =  Math.max(...Array.from(calloutTexts).map(el => el.offsetHeight));
                calloutTexts.forEach(el => el.style.height = `${maxHeight}px`);
            },

            init() {
                this.setMaxCalloutHeight();
            }
        }
    }</script><div x-data="initMenuDesktop_6a0d8d3a4f23c()" class="z-20 max-lg:hidden flex" x-ref="menuDesktop" @keydown.escape="activeMenuId ? handleCloseSubMenu() : null" @mouseleave.stop="handleCloseSubMenu" @scroll.window="activeMenuId ? handleCloseSubMenu() : null"><!-- desktop --><div x-ref="nav-desktop" class="justify-between items-center mx-auto w-full"><nav aria-label="P&#xE4;&#xE4;valikko"><ul class="flex justify-center list-none pl-0" x-ref="menuContainer">  <li tabindex="0" aria-expanded="false" :aria-expanded="activeMenuId === 'dba344a97536' ? 'true' : 'false'" aria-controls="subMenuContainer-dba344a97536" @keydown.enter="  setActiveMenu('dba344a97536');  " class="level-0 mb-0 flex min-h-[60px] items-center pt-5 pb-[17px] border-b-[3px] border-transparent transition-colors duration-500 group hover:border-primary focus-within:border-primary hover:text-black" @mouseover.stop.throttle=" (event) => { if (activeMenuId === 'dba344a97536') { return; } debounceMouseOver = setTimeout( () => {  setActiveMenu('dba344a97536')  }, 150 ) } " @mouseleave.self="clearTimeout(debounceMouseOver); prevSubMenuHeight = selectedSubMenuHeight"><a href="https://explore.omsystem.com/fi/fi"  :class="{ 'pointer-events-none': '1' }" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Kauppa" tabindex="-1" class="level-0 font-bold leading-5 max-2xl:first:!pl-0 px-5 text-base hover:text-black text-black whitespace-nowrap cursor-pointer"><span>Kauppa</span></a>  <div id="subMenuContainer-dba344a97536" class="absolute bg-white left-0 top-full z-10 mt-0 w-full bg-pallas h-0 duration-300 transition-[height] ease-out pointer-events-none overflow-hidden" :style="{ 'top': `${hoverTopPosition}px`, 'height': activeMenuId === 'dba344a97536' ? `${selectedSubMenuHeight}px` : !activeMenuId ? 0 : `${selectedSubMenuHeight}px` }" :class="{ 'pointer-events-none opacity-0': activeMenuId && activeMenuId !== 'dba344a97536', 'pointer-events-auto opacity-100': activeMenuId === 'dba344a97536' }"><div class="flex justify-between p-0 w-full" x-ref="subMenuContainer-dba344a97536" :class="{ 'opacity-0': activeMenuId !== 'dba344a97536', 'opacity-100': activeMenuId === 'dba344a97536' }"> <div class="bg-white max-2xl:hidden flex-1"></div> <div class="w-full p-10 pt-8 max-w-[1170px] 2xl:min-w-[1170px]"><div class="flex flex-col gap-5"> <ul class="flex flex-wrap gap-5 pl-0 list-none ">  <li class="level-1 flex-1 mb-0"> <span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Kamerat </span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/cameras"  title="Kaikki&#x20;kamerat" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': true }"  >Kaikki kamerat  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="arrow" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/cameras/om-d"  title="OM" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >OM </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/ep-7-pancake-kit-white"  title="PEN" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >PEN </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/cameras/tough"  title="Tough&#x20;TG" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Tough TG </a></li> </ul></li>   <li class="level-1 flex-1 mb-0"> <span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Objektiivit</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/lenses"  title="Kaikki&#x20;objektiivit" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': true }"  >Kaikki objektiivit  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="arrow" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/lenses?lens_type=1"  title="Kiinte&#xE4;polttov&#xE4;liset" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Kiinteäpolttoväliset </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/lenses?lens_type=2"  title="Makro" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Makro </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/lenses?lens_type=3"  title="Zoom" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Zoom </a></li> </ul></li>   <li class="level-1 flex-1 mb-0"> <span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Audiotuotteet</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/audio"  title="Kaikki&#x20;audiotuotteet" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': true }"  >Kaikki audiotuotteet  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="arrow" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/audio/notetakers"  title="Muistio-&#x20;&amp;&#x20;stereosanelimet" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Muistio- &amp; stereosanelimet </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/audio/sound-music-field"  title="Musiikki&#x20;&amp;&#x20;kentt&#xE4;-&#xE4;&#xE4;nitys" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Musiikki &amp; kenttä-äänitys </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/audio/transcription"  title="Saneluiden&#x20;purku" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Saneluiden purku </a></li>   <li class="level-2 mb-3"><a href="https://dictation.omsystem.com"  title="Ammattisanelu" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Ammattisanelu </a></li> </ul></li>   <li class="level-1 flex-1 mb-0"> <span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Kiikarit</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/binoculars"  title="Kaikki&#x20;kiikarit" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': true }"  >Kaikki kiikarit  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="arrow" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/binoculars/pro"  title="PRO" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >PRO </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/binoculars/standard"  title="Standardi" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Standardi </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/binoculars/compact"  title="Kompakti" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Kompakti </a></li> </ul></li>   <li class="level-1 flex-1 mb-0"> <span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Lisävarusteet</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/accessories"  title="Kaikki&#x20;lis&#xE4;varusteet" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': true }"  >Kaikki lisävarusteet  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="arrow" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/accessories/camera-accessories"  title="Kameravarusteet" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Kameravarusteet </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/accessories/lens-accessories"  title="Objektiivien&#x20;varusteet" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Objektiivien varusteet </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/accessories/tough-accessories"  title="Tough&#x20;TG" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Tough TG </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/accessories/audio-accessories"  title="Audiovarusteet" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Audiovarusteet </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/accessories/spare-parts"  title="Varaosat" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Varaosat </a></li> </ul></li>  </ul></div></div> <div class="bg-tundra p-10 pt-8"><ul class="flex gap-5 pl-0 list-none"> <li class="level-1 min-w-[202px] max-w-[202px] mb-0"><span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Erityistä</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a  href="https://explore.omsystem.com/fi/fi/reconditioned" title="Tehdashuolletut&#x20;tuotteet" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base leading-[20px] font-bold" >Tehdashuolletut tuotteet</a></li>   <li class="level-2 mb-3"><a  href="https://explore.omsystem.com/fi/fi/accessories/merchandise" title="Tavarat" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base leading-[20px] font-bold" >Tavarat</a></li>   <li class="level-2 mb-3"><a  href="https://explore.omsystem.com/fi/fi/promotions" title="Tarjoukset" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base leading-[20px] font-bold" >Tarjoukset</a></li>   <li class="level-2 mb-3"><a  href="https://my.omsystem.com/tradein/main" title="Trade-in" :tabindex="activeMenuId === 'dba344a97536' ? '0' : '-1'" class="text-base leading-[20px] font-bold"  @keydown.tab="!$event.shiftKey ? setActiveMenu(0) : null" >Trade-in</a></li> </ul></li> </ul></div><div class="bg-tundra max-2xl:hidden flex-1"></div></div></div></li>   <li tabindex="0" aria-expanded="false" :aria-expanded="activeMenuId === 'b50f4e2f4d4a' ? 'true' : 'false'" aria-controls="subMenuContainer-b50f4e2f4d4a" @keydown.enter="  setActiveMenu('b50f4e2f4d4a');  " class="level-0 mb-0 flex min-h-[60px] items-center pt-5 pb-[17px] border-b-[3px] border-transparent transition-colors duration-500 group hover:border-primary focus-within:border-primary hover:text-black" @mouseover.stop.throttle=" (event) => { if (activeMenuId === 'b50f4e2f4d4a') { return; } debounceMouseOver = setTimeout( () => {  setActiveMenu('b50f4e2f4d4a')  }, 150 ) } " @mouseleave.self="clearTimeout(debounceMouseOver); prevSubMenuHeight = selectedSubMenuHeight"><a href="https://explore.omsystem.com/fi/fi"  :class="{ 'pointer-events-none': '1' }" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Tutki" tabindex="-1" class="level-0 font-bold leading-5 max-2xl:first:!pl-0 px-5 text-base hover:text-black text-black whitespace-nowrap cursor-pointer"><span>Tutki</span></a>  <div id="subMenuContainer-b50f4e2f4d4a" class="absolute bg-white left-0 top-full z-10 mt-0 w-full bg-pallas h-0 duration-300 transition-[height] ease-out pointer-events-none overflow-hidden" :style="{ 'top': `${hoverTopPosition}px`, 'height': activeMenuId === 'b50f4e2f4d4a' ? `${selectedSubMenuHeight}px` : !activeMenuId ? 0 : `${selectedSubMenuHeight}px` }" :class="{ 'pointer-events-none opacity-0': activeMenuId && activeMenuId !== 'b50f4e2f4d4a', 'pointer-events-auto opacity-100': activeMenuId === 'b50f4e2f4d4a' }"><div class="flex justify-between p-0 w-full" x-ref="subMenuContainer-b50f4e2f4d4a" :class="{ 'opacity-0': activeMenuId !== 'b50f4e2f4d4a', 'opacity-100': activeMenuId === 'b50f4e2f4d4a' }"> <div class="bg-white max-2xl:hidden flex-1"></div> <div class="w-full p-10 pt-8 max-w-[1170px] 2xl:min-w-[1170px]"><div class="flex flex-col gap-5"> <ul class="flex flex-wrap gap-5 pl-0 list-none ">  <li class="level-1 flex-1 mb-0"> <span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Tutustu koko kuvantamisvalikoimaamme</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/omd"  title="OM-kamerat" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >OM-kamerat </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/e-p7"  title="PEN-kamerat" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >PEN-kamerat </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/tough"  title="Tough&#x20;TG&#x20;-kamerat" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Tough TG -kamerat </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/m-zuiko-digital-lenses"  title="M.Zuiko-objektiivit" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >M.Zuiko-objektiivit </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/binos"  title="Kiikarit" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Kiikarit </a></li> </ul></li>   <li class="level-1 flex-1 mb-0"> <span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Suositut valokuvauksen tyylilajit</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/bird-photography"  title="Linnut" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Linnut </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/macro-photography"  title="Makro" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Makro </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/wildlife-photography"  title="Villiel&#xE4;imet" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Villieläimet </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/landscape-photography"  title="Maisema" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Maisema </a></li> </ul></li>   <li class="level-1 flex-1 mb-0"> <span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Inspiroidu</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a href="https://my.omsystem.com"  target="_blank"  title="MyOMSYSTEM" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >MyOMSYSTEM </a></li>   <li class="level-2 mb-3"><a href="https://my.omsystem.com/ambassadors"  target="_blank"  title="L&#xE4;hettil&#xE4;&#xE4;t" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Lähettiläät </a></li>   <li class="level-2 mb-3"><a href="https://events.eao.omsystem.com"  target="_blank"  title="Tapahtumat" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Tapahtumat </a></li> </ul></li>   <li class="level-1 flex-1 mb-0"> <span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Tutustu äänitystuotteisiimme</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/digital-recorders"  title="Digitaaliset&#x20;tallentimet" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Digitaaliset tallentimet </a></li>   <li class="level-2 mb-3"><a href="https://dictation.omsystem.com"  target="_blank"  title="Ammattimainen&#x20;puheentallennus" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Ammattimainen puheentallennus </a></li> </ul></li>  </ul></div></div> <div class="bg-tundra p-10 pt-8"><ul class="flex gap-5 pl-0 list-none"> <li class="level-1 min-w-[202px] max-w-[202px] mb-0"><span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Muut</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a  target="_blank"  href="https://my.omsystem.com/login?ReturnUrl=%2Fp%2Fdashboard-products-add" title="Tuotteen&#x20;rekister&#xF6;inti" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base leading-[20px] font-bold" >Tuotteen rekisteröinti</a></li>   <li class="level-2 mb-3"><a  href="https://explore.omsystem.com/fi/fi/stores" title="J&#xE4;lleenmyyj&#xE4;haku" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base leading-[20px] font-bold" >Jälleenmyyjähaku</a></li>   <li class="level-2 mb-3"><a  href="https://explore.omsystem.com/fi/fi/firmware" title="Laiteohjelmiston&#x20;p&#xE4;ivitykset" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base leading-[20px] font-bold" >Laiteohjelmiston päivitykset</a></li>   <li class="level-2 mb-3"><a  href="https://explore.omsystem.com/fi/fi/downloads" title="Tuotek&#xE4;sikirjat" :tabindex="activeMenuId === 'b50f4e2f4d4a' ? '0' : '-1'" class="text-base leading-[20px] font-bold"  @keydown.tab="!$event.shiftKey ? setActiveMenu(0) : null" >Tuotekäsikirjat</a></li> </ul></li> </ul></div><div class="bg-tundra max-2xl:hidden flex-1"></div></div></div></li>   <li tabindex="0" aria-expanded="false" :aria-expanded="activeMenuId === '49435fded0f1' ? 'true' : 'false'" aria-controls="subMenuContainer-49435fded0f1" @keydown.enter="  setActiveMenu('49435fded0f1');  " class="level-0 mb-0 flex min-h-[60px] items-center pt-5 pb-[17px] border-b-[3px] border-transparent transition-colors duration-500 group hover:border-primary focus-within:border-primary hover:text-black" @mouseover.stop.throttle=" (event) => { if (activeMenuId === '49435fded0f1') { return; } debounceMouseOver = setTimeout( () => {  setActiveMenu('49435fded0f1')  }, 150 ) } " @mouseleave.self="clearTimeout(debounceMouseOver); prevSubMenuHeight = selectedSubMenuHeight"><a href="https://explore.omsystem.com/fi/fi"  :class="{ 'pointer-events-none': '1' }" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Tarjoukset" tabindex="-1" class="level-0 font-bold leading-5 max-2xl:first:!pl-0 px-5 text-base hover:text-black text-black whitespace-nowrap cursor-pointer"><span>Tarjoukset</span></a>  <div id="subMenuContainer-49435fded0f1" class="absolute bg-white left-0 top-full z-10 mt-0 w-full bg-pallas h-0 duration-300 transition-[height] ease-out pointer-events-none overflow-hidden" :style="{ 'top': `${hoverTopPosition}px`, 'height': activeMenuId === '49435fded0f1' ? `${selectedSubMenuHeight}px` : !activeMenuId ? 0 : `${selectedSubMenuHeight}px` }" :class="{ 'pointer-events-none opacity-0': activeMenuId && activeMenuId !== '49435fded0f1', 'pointer-events-auto opacity-100': activeMenuId === '49435fded0f1' }"><div class="flex justify-between p-0 w-full" x-ref="subMenuContainer-49435fded0f1" :class="{ 'opacity-0': activeMenuId !== '49435fded0f1', 'opacity-100': activeMenuId === '49435fded0f1' }"> <div class="w-full p-10 pt-8 max-w-[1440px] mx-auto"><div class="flex flex-col gap-5"> <div class="flex gap-5">  <a  href="https://explore.omsystem.com/fi/fi/promotions" title="N&#xE4;yt&#xE4;&#x20;kaikki&#x20;tarjoukset" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': true }" :tabindex="activeMenuId === '49435fded0f1' ? '0' : '-1'" >Näytä kaikki tarjoukset  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="arrow" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a> </div> <ul class="flex flex-wrap gap-5 pl-0 list-none max-w-[1090px]">  <li class="level-1 flex-1 mb-0"> <ul class="z-10 w-full pl-0 list-none flex gap-5">  <li class="flex flex-col max-w-[256px]"><a href="https://explore.omsystem.com/fi/fi/adventure-cashback-promotion?icid=adventure_cashback_apr26-internal-hp-link_shop-promo_lp" target="_self" title="adventure-cashback-2026-navi-menu" :tabindex="activeMenuId === '49435fded0f1' ? '0' : '-1'"  ><img class="w-[256px] h-[192px] aspect-[4/3] object-cover" width="256" height="192" src="https://cdn.sanity.io/images/ipox1240/live/88c3be5dddfed7412527dcacf9e86dbdd2df94a2-991x744.jpg" alt="adventure-cashback-2026-navi-menu" /><div class="callout-text px-3 py-1.5 bg-primary text-base leading-[16px] text-white">Lunasta jopa 31.5.2026</div><p class="mt-4 text-base font-bold leading-[20px]">Matkusta kevyesti. Mene pidemmälle. Säästä jopa 500€</p></a></li>   <li class="flex flex-col max-w-[256px]"><a href="http://my.omsystem.com/tradein/main" target="_blank" title="Trade&#x20;in&#x20;promo&#x20;menu" :tabindex="activeMenuId === '49435fded0f1' ? '0' : '-1'"  @keydown.tab="!$event.shiftKey ? setActiveMenu(0) : null"  ><img class="w-[256px] h-[192px] aspect-[4/3] object-cover" width="256" height="192" src="https://cdn.sanity.io/images/ipox1240/live/46c75ffbb88f5c0773155e1053829aa073746d6b-991x744.jpg" alt="Trade&#x20;in&#x20;promo&#x20;menu" /><div class="callout-text px-3 py-1.5 bg-primary text-base leading-[16px] text-white">Vain valituissa maissa</div><p class="mt-4 text-base font-bold leading-[20px]">Vaihda vanha uuteen - Päivitys alkaa tästä</p></a></li> </ul></li>  </ul></div></div></div></div></li>   <li tabindex="0" aria-expanded="false" :aria-expanded="activeMenuId === 'c3f3c779a92d' ? 'true' : 'false'" aria-controls="subMenuContainer-c3f3c779a92d" @keydown.enter="  setActiveMenu('c3f3c779a92d');  " class="level-0 mb-0 flex min-h-[60px] items-center pt-5 pb-[17px] border-b-[3px] border-transparent transition-colors duration-500 group hover:border-primary focus-within:border-primary hover:text-black" @mouseover.stop.throttle=" (event) => { if (activeMenuId === 'c3f3c779a92d') { return; } debounceMouseOver = setTimeout( () => {  setActiveMenu('c3f3c779a92d')  }, 150 ) } " @mouseleave.self="clearTimeout(debounceMouseOver); prevSubMenuHeight = selectedSubMenuHeight"><a href="https://explore.omsystem.com/fi/fi"  :class="{ 'pointer-events-none': '1' }" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Tuki&#x20;" tabindex="-1" class="level-0 font-bold leading-5 max-2xl:first:!pl-0 px-5 text-base hover:text-black text-black whitespace-nowrap cursor-pointer"><span>Tuki </span></a>  <div id="subMenuContainer-c3f3c779a92d" class="absolute bg-white left-0 top-full z-10 mt-0 w-full bg-pallas h-0 duration-300 transition-[height] ease-out pointer-events-none overflow-hidden" :style="{ 'top': `${hoverTopPosition}px`, 'height': activeMenuId === 'c3f3c779a92d' ? `${selectedSubMenuHeight}px` : !activeMenuId ? 0 : `${selectedSubMenuHeight}px` }" :class="{ 'pointer-events-none opacity-0': activeMenuId && activeMenuId !== 'c3f3c779a92d', 'pointer-events-auto opacity-100': activeMenuId === 'c3f3c779a92d' }"><div class="flex justify-between p-0 w-full" x-ref="subMenuContainer-c3f3c779a92d" :class="{ 'opacity-0': activeMenuId !== 'c3f3c779a92d', 'opacity-100': activeMenuId === 'c3f3c779a92d' }"> <div class="w-full p-10 pt-8 max-w-[1440px] mx-auto"><div class="flex flex-col gap-5"> <div class="flex gap-5">  <a  href="https://explore.omsystem.com/fi/fi/service-and-support" title="N&#xE4;yt&#xE4;&#x20;asiakastuen&#x20;sivu" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': true }" :tabindex="activeMenuId === 'c3f3c779a92d' ? '0' : '-1'" >Näytä asiakastuen sivu  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="arrow" aria-hidden="true">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5546 9.00007L9.34097 3.78646L10.6138 2.51367L17.1002 9.00007L10.6138 15.4865L9.34097 14.2137L14.5546 9.00007Z" fill="currentColor"/>
  <path fill-rule="evenodd" clip-rule="evenodd" d="M0.899902 8.09998H15.2999V9.89998H0.899902V8.09998Z" fill="currentColor"/>
</svg>
 </a> </div> <ul class="flex flex-wrap gap-5 pl-0 list-none max-w-[1090px]">  <li class="level-1 flex-1 mb-0"> <span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Tuote ja palvelu</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a href="https://my.omsystem.com/p/repair-service"  target="_blank"  title="Korjauspyynt&#xF6;" :tabindex="activeMenuId === 'c3f3c779a92d' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Korjauspyyntö </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/pro-service"  title="Pro-palvelu" :tabindex="activeMenuId === 'c3f3c779a92d' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Pro-palvelu </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/warranty-regulations"  title="Takuukattavuus&#x20;" :tabindex="activeMenuId === 'c3f3c779a92d' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Takuukattavuus  </a></li> </ul></li>   <li class="level-1 flex-1 mb-0"> <span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Tuotetiedot ja rekisteröinti</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a href="https://my.omsystem.com/login?ReturnUrl=%2Fp%2Fdashboard-products-add"  target="_blank"  title="Tuotteen&#x20;rekister&#xF6;inti" :tabindex="activeMenuId === 'c3f3c779a92d' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Tuotteen rekisteröinti </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/downloads"  title="Lataukset" :tabindex="activeMenuId === 'c3f3c779a92d' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Lataukset </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/firmware"  title="Laiteohjelmiston&#x20;p&#xE4;ivitykset" :tabindex="activeMenuId === 'c3f3c779a92d' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Laiteohjelmiston päivitykset </a></li> </ul></li>   <li class="level-1 flex-1 mb-0"> <span class="level-1 text-gray-dark text-base font-bold leading-[20px]">Asiakastuki ja resurssit</span> <ul class="z-10 w-full pl-0 list-none mt-5">  <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/software"  title="Ohjelmistot&#x20;ja&#x20;sovellukset" :tabindex="activeMenuId === 'c3f3c779a92d' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Ohjelmistot ja sovellukset </a></li>   <li class="level-2 mb-3"><a href="https://contact-support.explore.omsystem.com/hc/en-us/requests/new"  title="Ota&#x20;yhteytt&#xE4;&#x20;" :tabindex="activeMenuId === 'c3f3c779a92d' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  >Ota yhteyttä  </a></li>   <li class="level-2 mb-3"><a href="https://explore.omsystem.com/fi/fi/vulnerability-om-workspace"  title="Tuoteturvallisuus" :tabindex="activeMenuId === 'c3f3c779a92d' ? '0' : '-1'" class="text-base items-center leading-[20px] font-bold hover:text-taiga arrow-interactive-container" :class="{ 'flex gap-3': false }"  @keydown.tab="!$event.shiftKey ? setActiveMenu(0) : null"  >Tuoteturvallisuus </a></li> </ul></li>  </ul></div></div></div></div></li> </ul></nav></div></div>  <!-- Logo mobile --><div class="lg:hidden max-sm:mx-5 max-w-[152px] max-h-[19px]"> <div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0"><a class="flex items-center justify-center text-xl font-medium tracking-wide text-gray-800 no-underline hover:no-underline font-title" href="https://explore.omsystem.com/fi/fi/" aria-label="Siirry&#x20;etusivulle" tabindex="0" ><img src="https://emea.explore.omsystem.com/static/version1779261903/frontend/OMDigital/Hyva/default/images/logo.svg" alt="OM&#x20;SYSTEM" width="189" height="64" loading="eager" /></a></div></div><div class="flex gap-4 md:gap-8 items-center max-sm:ml-auto 2xl:pr-5"><!--Search desktop--><div class="flex gap-4 items-center" @click.outside="handleSearchOutsideClick(isMobile)"><div class="hidden" :class="{ 'hidden': !isSearchOpen, 'flex': isSearchOpen }"><div x-ref="searchContainerDesktop" class="max-lg:hidden"></div></div><button class="p-0.5 !text-black !border-0 !bg-pallas min-w-6 !flex" @click="handleSearchClick" tabindex="0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 21 21" fill="none" class="size-5" :class="{ &quot;hidden&quot;: isSearchOpen }" role="img">
    <path d="M4.76607 13.5732C5.98253 14.7897 7.44941 15.3979 9.16676 15.3979C10.8841 15.3979 12.351 14.7897 13.5675 13.5732C14.7839 12.3568 15.3778 10.9042 15.3778 9.18683C15.3778 7.46948 14.7768 6.00973 13.5675 4.78612C12.3439 3.57682 10.877 2.97575 9.16676 2.97575C7.45656 2.97575 5.9825 3.57682 4.78035 4.78612C3.57821 5.99542 2.95568 7.46948 2.95568 9.18683C2.95568 10.9042 3.55677 12.3711 4.76607 13.5732ZM20.9449 19.5339L19.521 20.9579L14.2258 15.6627C12.7446 16.8219 11.0558 17.4015 9.16676 17.4015C8.0791 17.4015 7.02726 17.194 6.02547 16.779C5.02368 16.3639 4.12919 15.77 3.34923 14.9972C2.57642 14.2244 1.98251 13.3371 1.56748 12.3353C1.15246 11.3335 0.944946 10.2816 0.944946 9.18683C0.944946 8.09202 1.15246 7.04014 1.56748 6.03836C1.98251 5.03657 2.57642 4.14927 3.34923 3.37646C4.12919 2.60365 5.01653 2.00974 6.02547 1.59471C7.03442 1.17968 8.07195 0.972168 9.16676 0.972168C10.2616 0.972168 11.3135 1.17968 12.3153 1.59471C13.317 2.00974 14.2043 2.60365 14.9771 3.37646C15.7571 4.14927 16.351 5.03657 16.766 6.03836C17.1811 7.04014 17.3886 8.09202 17.3886 9.18683C17.3886 11.0616 16.809 12.7503 15.6426 14.2459L20.9378 19.541L20.9449 19.5339Z" fill="black"/>
<title>search</title></svg>
 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 hidden" :class="{ &quot;hidden&quot;: !isSearchOpen }" role="img">
    <path d="M5 15L15 5M5 5L15 15" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<title>close</title></svg>
</button></div> <!--Customer Icon & Dropdown--> <div class="relative inline-block" x-data="{ open: false }" @keyup.escape="open = false" @click.outside="open = false"><button type="button" id="customer-menu" class="p-0.5 !text-black !border-0 !bg-pallas min-w-6 !flex" tabindex="0" @click="open = !open" :aria-expanded="open ? 'true' : 'false'" aria-label="Oma&#x20;tili" aria-haspopup="true"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5" aria-hidden="true">
    <path d="M2.52304 20H0.739481L0.898161 18.172C1.08858 16.344 1.97084 14.9413 3.53859 13.9638C5.10635 12.9863 7.2644 12.504 10.0127 12.504C12.7611 12.504 14.9255 12.9864 16.4869 13.9575C18.0483 14.9286 18.9305 16.3313 19.1273 18.1593L19.286 20H17.5024L17.3437 18.3243C17.2739 17.6833 17.0772 17.1184 16.7471 16.6233C16.417 16.1282 16.0108 15.7347 15.5348 15.4491C15.0587 15.1634 14.5002 14.9222 13.8528 14.7382C13.2054 14.5541 12.5833 14.4272 11.9677 14.3573C11.352 14.2875 10.6982 14.2558 10.0127 14.2558C9.32724 14.2558 8.66712 14.2875 8.05779 14.3573C7.44846 14.4272 6.81374 14.5478 6.17268 14.7382C5.53161 14.9286 4.96671 15.1634 4.49067 15.4554C4.01463 15.7474 3.60841 16.1409 3.27836 16.6296C2.9483 17.1184 2.75154 17.6896 2.68172 18.337L2.52304 20ZM12.285 2.73564C11.6313 2.06918 10.8696 1.73279 10.0064 1.73279C9.14317 1.73279 8.38785 2.06284 7.72775 2.72929C7.06764 3.39575 6.74392 4.17011 6.74392 5.05871C6.74392 6.27737 7.05493 7.29927 7.67696 8.11806C8.29898 8.93684 9.07335 9.34306 10.0064 9.34306C10.9394 9.34306 11.7138 8.93684 12.3358 8.11806C12.9578 7.29927 13.2688 6.28372 13.2688 5.05871C13.2688 4.17645 12.9388 3.40209 12.285 2.73564ZM13.5671 9.35576C12.6151 10.4983 11.4282 11.0759 10.0064 11.0759C8.58461 11.0759 7.39769 10.4983 6.43927 9.34941C5.48084 8.20057 5.00479 6.77245 5.00479 5.05871C5.00479 4.16376 5.2333 3.33228 5.68395 2.54522C6.1346 1.75817 6.75027 1.1425 7.51828 0.685498C8.28629 0.2285 9.11777 0 10 0C10.8823 0 11.7138 0.2285 12.4818 0.685498C13.2498 1.1425 13.8655 1.76452 14.3161 2.54522C14.7668 3.32593 14.9953 4.16376 14.9953 5.05871C14.9953 6.77245 14.5129 8.20057 13.5545 9.35576H13.5671Z" fill="black"/>
</svg>
</button> <nav class=" absolute right-0 z-20 w-40 py-2 mt-2 -mr-4 px-1 overflow-auto origin-top-right rounded-sm shadow-lg sm:w-48 lg:mt-3 bg-container-lighter " x-cloak x-show="open" aria-labelledby="customer-menu">  <a id="customer.header.sign.in.link" class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100 mb-0 text-body hover:text-primary-darker" onclick="hyva.setCookie && hyva.setCookie( 'login_redirect', window.location.href, 1 )" href="https://explore.omsystem.com/fi/fi/customer/account/index/" title="Kirjaudu&#x20;sis&#xE4;&#xE4;n">Kirjaudu sisään</a>  <a id="customer.header.register.link" class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100 mb-0 text-body hover:text-primary-darker" href="https://explore.omsystem.com/fi/fi/customer/account/create/" title="Luo&#x20;tili">Luo tili</a>  </nav></div> <!--Cart Icon--> <button id="menu-cart-icon" class="relative p-0.5 !text-black !border-0 !bg-pallas min-w-6 !flex" x-ref="cartButton" tabindex="0" :aria-disabled="isCartEmpty()" title="Ostoskori" @click.prevent.stop="() => { $dispatch('toggle-cart', { isOpen: true }) }" @toggle-cart.window="toggleCart($event)" :aria-expanded="isCartOpen" aria-haspopup="dialog"> <span class="sr-only label" x-text="` Vaihda minivaunu, ${isCartEmpty() ? 'Ostoskori on tyhjä' : hyva.str( 'You have %1 product%2 in your cart.', cart.summary_count, cart.summary_count === 1 ? '' : 's' )}` "></span> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="size-5" role="img">
    <path d="M5.96565 2.36818H20L19.9277 3.2781C19.9156 3.57337 19.8433 4.4893 19.7168 6.02591C19.5902 7.56252 19.4938 8.53269 19.4336 8.93643C19.3372 9.62338 19.0178 10.1958 18.4815 10.6659C17.9452 11.1359 17.2763 11.4251 16.4809 11.5396C16.4688 11.5396 13.6909 11.871 8.14703 12.5339V10.8286C8.72552 10.7563 9.65351 10.6478 10.925 10.5032C12.1964 10.3585 13.3353 10.2199 14.3417 10.0994C15.348 9.97891 15.9867 9.90057 16.2639 9.85839C16.6797 9.81018 17.0232 9.67761 17.2944 9.46671C17.5655 9.2558 17.7222 8.99066 17.7704 8.68334C17.8487 8.18319 17.9873 6.64055 18.1862 4.06749H6.09822V12.8713C6.09822 13.1847 6.20066 13.4318 6.39952 13.6186C6.59837 13.8054 6.87557 13.9018 7.21904 13.9018H18.6381V15.5951H7.22507C6.4176 15.5951 5.74872 15.3359 5.21241 14.8177C4.67611 14.2995 4.40494 13.6487 4.40494 12.8713V3.19373C4.40494 2.88039 4.2784 2.60922 4.03133 2.38023C3.78427 2.15125 3.489 2.03073 3.15758 2.03073H0V0.331425H3.15758C3.80235 0.331425 4.38084 0.524254 4.89907 0.903886C5.41729 1.28352 5.77282 1.77162 5.96565 2.36818ZM15.7517 17.1015C16.0832 16.7701 16.4809 16.6014 16.9509 16.6014C17.4209 16.6014 17.8186 16.7701 18.15 17.1015C18.4815 17.433 18.6502 17.8307 18.6502 18.3007C18.6502 18.7707 18.4815 19.1684 18.15 19.4998C17.8186 19.8313 17.4209 20 16.9509 20C16.4809 20 16.0832 19.8313 15.7517 19.4998C15.4203 19.1684 15.2516 18.7707 15.2516 18.3007C15.2516 17.8307 15.4203 17.433 15.7517 17.1015ZM4.90509 17.1015C5.23652 16.7701 5.63423 16.6014 6.10425 16.6014C6.57427 16.6014 6.97198 16.7701 7.3034 17.1015C7.63483 17.433 7.80356 17.8307 7.80356 18.3007C7.80356 18.7707 7.63483 19.1684 7.3034 19.4998C6.97198 19.8313 6.57427 20 6.10425 20C5.63423 20 5.23652 19.8313 4.90509 19.4998C4.57367 19.1684 4.40494 18.7707 4.40494 18.3007C4.40494 17.8307 4.57367 17.433 4.90509 17.1015Z" fill="currentColor"/>
<title>cart</title></svg>
 <span x-text="cart.summary_count" x-show="!isCartEmpty()" x-cloak class="absolute top-0 right-0 py-0 leading-none text-center -mt-2 -mr-[11px] flex justify-center items-center h-[18px] px-2 text-xs font-bold text-white bg-black rounded-[10px]" aria-hidden="true"></span> </button>  </div></div></div></div></div><div class="hidden absolute top-full w-full" :class="{ 'hidden': !isSearchOpen, 'flex': isSearchOpen }"><!--Search mobile--><div x-ref="searchContainerMobile" class="lg:hidden w-full bg-pallas"><div x-ref="searchForm">  <script>
    'use strict';

    function amXsearchProductsComponent() {
        const postFormRequest = (postUrl, id) => {
            const req = fetch(BASE_URL + postUrl, {
                "headers": {
                    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
                },
                "body": "form_key=" + hyva.getFormKey() + "&product=" + id + "&uenc=" + hyva.getUenc(),
                "method": "POST",
                "mode": "cors",
                "credentials": "include"
            });

            req.finally(() => this.isLoading = false);

            return req;
        }

        return {
            mutationAddToCartQuery: "mutation addProductsToCart($cartId: String!, $cartItems: [CartItemInput!]!) {addProductsToCart(\n                cartId: $cartId,\n                cartItems: $cartItems\n                ) {\n                    cart {\n                        items {\n                            product {\n                                name\n                            }\n                        }\n                        total_quantity\n                    }\n                    user_errors {\n                        code\n                        message\n                    }\n                }}",
            mutationAddToWishlistQuery: "mutation addProductsToWishlist($wishlistId: ID!, $wishlistItems: [WishlistItemInput!]!) {addProductsToWishlist(\n                wishlistId: $wishlistId,\n                wishlistItems: $wishlistItems\n                ) {\n                    wishlist {\n                        items {\n                            id\n                            product {\n                                name\n                            }\n                        }\n                        items_count\n                    }\n                    user_errors {\n                        code\n                        message\n                    }\n                }}",
            mutationAddToCompareListQuery: "mutation addProductsToCompareList($uid: ID!, $products: [ID!]!) {addProductsToCompareList(input: {\n                uid: $uid,\n                products: $products\n            }) {\n                items {\n                    product {\n                        name\n                    }\n                }\n                item_count\n            }}",

            sliderInitialization(event) {
                this[event.detail.key] = event.detail.value;
            },

            getResultProductsCount() {
                const suggestions = this.sections.products;
                const totalCount = suggestions?.total_count ?? 0;
                const itemsCount = suggestions?.items?.length ?? 0;

                return totalCount > 0 ? totalCount - itemsCount : 0;
            },

            processProductName(value) {
                if (value.items) {
                    value.items = value.items.map(item => {
                        item.name = this.addHighlight(item, 'name');
                        item.sku = this.addHighlight(item, 'sku');
                        item.name = this.truncateWithDots(item.name, this.productNameMaxLength, true);

                        return item;
                    });
                }
                return value;
            },

            addHighlight(product, key = 'name') {
                const name = product[key];
                const { latestQuery } = this;
                const queries = latestQuery.toLowerCase().split(" ");

                let highlightedName = name;

                for (const query of queries) {
                    const safeQuery = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
                    const regex = new RegExp(`(?!<[^>]*)(${safeQuery})(?![^<]*>)`, "gi");
                    highlightedName = highlightedName.replace(regex, match => `<span class="amsearch-highlight">${match}</span>`);
                }

                return highlightedName;
            },

            truncateWithDots(str, maxLength, returnOriginal = false) {
                if (maxLength === '' || maxLength < 1) {
                    return returnOriginal ? str : "";
                }

                let output = [];
                let tagBuffer = [];
                let count = 0;
                let inTag = false;

                for (const char of str) {
                    if (char === "<") {
                        inTag = true;
                    }

                    if (inTag) {
                        tagBuffer.push(char);
                    } else {
                        count++;
                    }

                    if (char === ">") {
                        inTag = false;
                        output.push(tagBuffer.join(""));
                        tagBuffer = [];
                    } else if (!inTag) {
                        output.push(char);
                    }

                    if (count >= maxLength) {
                        break;
                    }
                }

                if (count >= maxLength) {
                    output.push("...");
                }

                
                while (tagBuffer.length > 0) {
                    const closingTagPos = str.indexOf(">", str.indexOf(tagBuffer.join("")) + tagBuffer.length);
                    if (closingTagPos !== -1) {
                        output.push(str.slice(str.indexOf(tagBuffer.join("")) + tagBuffer.length, closingTagPos + 1));
                        tagBuffer = [];
                    } else {
                        break;
                    }
                }

                return output.join("");
            },

            getProductUrl(product) {
                const productUrl = window.BASE_URL + product.url_key + (product.url_suffix || '');
                const marketingUrl = product.marketing_pdp
                    ? product.marketing_pdp
                    : null;
                const type = product.type_id || '';

                if (!marketingUrl) return productUrl;
                    if (type === 'bundle') {
                        return marketingUrl;
                    }

                    return productUrl;
            },

            getLearnMoreUrl(product) {
                const productUrl = window.BASE_URL + product.url_key + (product.url_suffix || '');
                const marketingUrl = product.marketing_pdp
                    ? product.marketing_pdp
                    : null;
                const type = product.type_id || '';

                if (!marketingUrl) return productUrl;
                        if (type === 'bundle') {
                        return productUrl;
                    }

                    return marketingUrl;
            },

            getProductImageUrl(product) {
                const imageUrl = product.small_image.url;
                let mediaURL = this.config.customMediaUrl || '';

                if (mediaURL.includes('/media') && imageUrl.startsWith('media/')) {
                    mediaURL = mediaURL.replace('/media', '');
                }

                if (imageUrl.includes('://')) {
                    return imageUrl;
                }

                const productImageUrl = mediaURL + imageUrl;

                if (productImageUrl.includes('/product/placeholder/')) {
                    return productImageUrl.replace(/\/media(?=\/static)/, '');
                }

                return productImageUrl;
            },

            /**
             * @param Product {id: string}
             */
            addToWishlist({id}) {
                postFormRequest('wishlist/index/add/', id).then(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: "Tuotetta ei voitu lisätä toivelistalle."
                            }], 5000
                        );
                    }
                }).then(response => {
                    if (!response) { return }
                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
                        [{
                            type: response.success ? "success" : "error",
                            text: response.success
                                ? "Tuote on lisätty toivelistallesi." : response.error_message
                        }], 5000
                    );
                    window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
                }).catch(function (error) {
                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
                        [{
                            type: "error",
                            text: error
                        }], 5000
                    );
                });
            },

            /**
             * @param Product {id: string}
             */
            addToCompare({id}) {
                postFormRequest('catalog/product_compare/add', id)
                    .then(response => {
                        if (response.redirected) {
                            window.location.href = response.url;
                        }
                        this.isLoading = false;
                    }).catch(error => {
                        this.isLoading = false;
                        typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
                            [{
                                type: "error",
                                text: error
                            }], 5000
                        );
                    });
            },

            /**
             *
             * @param product
             */
            getRating(product) {
                const { rating_summary } = product;
                product.ratingData = {
                    ratingSteps: 5,
                    starsFilled: Math.floor(+rating_summary / 100 * 5),
                    starFragment: rating_summary / 100 * 5 % 1,
                    starsEmpty: Math.floor(5 - (+rating_summary / 100 * 5)),
                    yellowHex: '#000000',
                    greyHex: '#E4E4E7'
                };
                return product;
            },


            /**
             * Compatibility function for Amasty_AjaxCart module
             *
             * @param id
             * @param $event
             */
            addToCart({id}, $event) {
                                this.isLoading = true;

                const action = 'https://explore.omsystem.com/fi/fi/checkout/cart/add/';
                const data = { product: id, qty: 1 };

                hyva.postForm({ action, data });
                 }
        }
    }</script>  <script>
    'use strict';

    (()=> {
        const browserCache = {
            set(key, value) {
                const now = new Date();
                const item = {
                    value: value,
                    expiry: now.getTime() + 5 * 60 * 1000, 
                };
                localStorage.setItem(key, JSON.stringify(item));
            },
            get(key) {
                const itemStr = localStorage.getItem(key);
                if (!itemStr) {
                    return null;
                }
                const item = JSON.parse(itemStr);
                const now = new Date();
                if (now.getTime() > item.expiry) {
                    localStorage.removeItem(key);
                    return null;
                }
                return item.value;
            }
        };

        window._amXSearchConfigFetcher = null;

        window.amXsearchAutocompleteComponent = () => {
            const INITIAL_QUERY_CACHE_KEY = 'x.InitialQuery';
            const CONFIG_QUERY_CACHE_KEY = 'x.ConfigQuery';
            const PREV_QUERY_CACHE_KEY = 'x.PrevQuery';
            
            const HEADER_TYPE = 'b';

            const cache = {};
            const dataSections = {
                products: false,
                category: false,
                page: false,
                faq: false,
                landingPage: false,
                browsingHistory: false,
                popularSearches: false,
                bestsellers: false,
                recentSearches: false,
                recentlyViewed: false,
                brand: false,
                blog: false
            };

            return {
                isLoading: false,
                searchInitialized: false,
                latestQuery: '',
                productNameMaxLength: 50,
                resultPageUrl: 'https://explore.omsystem.com/fi/fi/catalogsearch/result/?q=',
                minSearchLength: 3,
                maxSearchLength: 128,
                isDefaultSearchInput: false,
                isFullWidthSearch: false,
                searchPopupWidth: 900,
                showOverlay: false,
                config: {},
                slider: {
                    bestsellers: false,
                    recentlyViewed: false
                },
                isHorizontalView: true,
                noResultsFound: false,
                errorMessage: null,
                
                sections: Object.create(dataSections),

                isHyvaUiHeader() {
                  return HEADER_TYPE.length && HEADER_TYPE !== 'default';
                },

                checkHyvaUiHeaderVariant(needle) {
                    return this.isHyvaUiHeader() && needle === HEADER_TYPE;
                },

                dynamicLayout($el) {
                    const matchMedia = window.matchMedia('(max-width: 768px)');
                    const isHorizontalViewPopupWidth = this.searchPopupWidth < 700 && !this.isDefaultSearchInput && !this.isFullWidthSearch;

                    this.isHorizontalView = !matchMedia.matches ? isHorizontalViewPopupWidth  : true;
                    matchMedia.addEventListener('change', event => {
                        this.isHorizontalView = !matchMedia.matches ? isHorizontalViewPopupWidth : true;
                    })

                    if (!window._amXSearchConfigFetcher) {
                        window._amXSearchConfigFetcher = new Promise(async resolve => {
                            const cachedData = browserCache.get(CONFIG_QUERY_CACHE_KEY);

                            if (cachedData) {
                                return resolve(cachedData);
                            }

                            const query = `query {config: storeConfig {
            isProductReviewsBlockEnabled: amasty_xsearch_product_reviews
            isProductAddToCartBlockEnabled: amasty_xsearch_product_add_to_cart
            isRedirectToSingleProductEnabled: amasty_xsearch_product_redirect_single_product
            isFullScreenMode: amasty_xsearch_general_full_screen
            isGridView: amasty_xsearch_product_popup_display
            isShowSku: amasty_xsearch_product_show_sku
            shortDescriptionLength: amasty_xsearch_product_desc_length

            customMediaUrl: secure_base_media_url

            amasty_xsearch_products_title: amasty_xsearch_product_title
            amasty_xsearch_popularSearches_title: amasty_xsearch_popular_searches_title
            amasty_xsearch_browsingHistory_title: amasty_xsearch_browsing_history_title
            amasty_xsearch_recentSearches_title: amasty_xsearch_recent_searches_title
            amasty_xsearch_recentlyViewed_title: amasty_xsearch_recently_viewed_title
            amasty_xsearch_landingPage_title: amasty_xsearch_landing_page_title
            amasty_xsearch_bestsellers_position

            amasty_xsearch_faq_title
            amasty_xsearch_brand_title
            amasty_xsearch_blog_title
            amasty_xsearch_category_title
            amasty_xsearch_bestsellers_title
            amasty_xsearch_page_title

            amasty_xsearch_popularSearches_first_click: amasty_xsearch_popular_searches_first_click
            amasty_xsearch_browsingHistory_first_click: amasty_xsearch_browsing_history_first_click
            amasty_xsearch_recentSearches_first_click: amasty_xsearch_recent_searches_first_click

            amasty_xsearch_layout_enabled
            amasty_xsearch_layout_border
            amasty_xsearch_layout_hover
            amasty_xsearch_layout_highlight
            amasty_xsearch_layout_background
            amasty_xsearch_layout_text
            amasty_xsearch_layout_hover_text
            amasty_xsearch_layout_search_button
            amasty_xsearch_layout_search_button_text
        }}`;
                            const response = await this.fetch(query, {}, CONFIG_QUERY_CACHE_KEY, false);
                            if (response.errors && response.errors.length > 0) {
                                console.error(response.errors);
                            }

                            browserCache.set(CONFIG_QUERY_CACHE_KEY, response);
                            resolve(response);
                        });
                    }

                    _amXSearchConfigFetcher.then(response => {
                        if (!response?.data?.config) {
                            return;
                        }

                        this.config = response.data.config;
                        this.processCustomLayoutStyles($el);
                    });

                    if (typeof this.searchOpen !== "undefined") {
                        this.$watch('searchOpen', val => {
                            if (!val) {
                                return;
                            }

                            requestAnimationFrame(() => {
                                const searchInput = document.querySelector('#search');
                                searchInput && searchInput.focus();
                            });
                        });
                    }

                    if (typeof this.showOverlay !== "undefined") {
                        this.$watch('showOverlay', val => {
                            if (!val) {
                                return;
                            }

                            this.applyHyvaUiHeaderConfig()
                        });
                    }

                                            this.applyHeaderTypeToContainers();
                     },

                isSidebarSectionsDisabled() {
                    if (!this.isHorizontalView) {
                        return !Object.entries(this.sections).some(([key, value]) =>
                            key !== 'products' && key !== 'bestsellers' && key !== 'recentlyViewed' && value.total_count > 0
                        );
                    }
                },

                showSideBar() {
                    const recentlyViewed = this.sections?.recentlyViewed;
                    return this.latestQuery.length >= 3
                        || (recentlyViewed && recentlyViewed?.items?.length);
                },


                showOnFirstClick(blockName) {
                    const sectionsToCheck = [
                        'popularSearches',
                        'browsingHistory',
                        'recentSearches'
                    ];

                    if (!sectionsToCheck.includes(blockName)) {
                        return false;
                    }

                    return this.latestQuery.length < this.minSearchLength
                        && this.config[`amasty_xsearch_${blockName}_first_click`]
                        && this.sections[blockName]?.items?.length;
                },

                processCustomLayoutStyles() {
                    const conf = key => this.config[`amasty_xsearch_layout_${key}`];

                    if (!conf("enabled")) {
                        return "";
                    }

                    const styles = [
                        "border",
                        "hover",
                        "highlight",
                        "background",
                        "text",
                        "hover_text",
                        'search_button',
                        'search_button_text'
                    ];

                    const cachedConf = styles.reduce((acc, key) => {
                        acc[key] = conf(key);
                        return acc;
                    }, {});

                    const getDarken = (color, amount) => {
                        const hex = parseInt(color.slice(1), 16);
                        const r = Math.min(255, Math.max(0, ((hex >> 16) & 0xff) + amount));
                        const g = Math.min(255, Math.max(0, ((hex >> 8) & 0xff) + amount));
                        const b = Math.min(255, Math.max(0, (hex & 0xff) + amount));

                        return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, "0")}`;
                    };

                    const prefix = "--amsearch-color-";
                    styles.forEach((key) => {
                        const color = cachedConf[key];

                        document.body.style.setProperty(prefix + key, `#${color}`);
                        document.body.style.setProperty(`${prefix + key}-focus`, getDarken(`#${color}`, -12));
                        document.body.style.setProperty(`${prefix + key}-hover`, getDarken(`#${color}`, -16));
                    });
                },

                canShowSection(sectionData) {
                    return sectionData && sectionData.items && sectionData.items.length > 0;
                },

                initialSectionLoad() {
                    const req = this.fetch(`query xSearchQuery {
recentlyViewed: xsearchRecentlyViewed {
            items {
                small_image {
                    label
                    url
                }
                id
                is_salable
                short_description {
                    html
                }
                name
                options_container
                rating_summary
                reviews_count
                sku
                url_key
                url_suffix
                price_range {
                    minimum_price {
                        regular_price {
                            value
                            currency
                        }
                        final_price {
                            value
                            currency
                        }
                    }
                     maximum_price {
                        regular_price {
                            value
                            currency
                        }
                        final_price {
                            value
                            currency
                        }
                    }
                }
            }
        }

popularSearches: xsearchPopularSearches {
                    code
                    items {
                      name
                      num_results
                      url
                    }
                    total_count
                  }
recentSearches: xsearchRecentSearches {
                    code
                    items {
                      name
                      num_results
                      url
                    }
                    total_count
                  }
browsingHistory: xsearchBrowsingHistory {
            code
            items {
              name
              url
            }
            total_count
          }
}`, {}, INITIAL_QUERY_CACHE_KEY);
                    req.then(response => {
                        if (response.errors && response.errors.length > 0) {
                            console.error(response.errors);
                        }

                        this.searchInitialized = true;
                        this.processResponse(response);
                    });
                },

                encodeHtml(html) {
                    const txt = document.createElement('textarea');
                    txt.textContent = html;
                    return txt.innerHTML;
                },

                sanitize(value) {
                    if (typeof DOMPurify === 'function') {
                        return DOMPurify.sanitize(value)
                    } else {
                        return this.encodeHtml(value)
                    }
                },

                doSearch() {
                    const { searchInput } = this.$refs;
                    const { latestQuery, minSearchLength } = this;
                    const inputText = this.sanitize(searchInput.value);

                    if (inputText !== latestQuery && cache[PREV_QUERY_CACHE_KEY]) {
                        delete cache[PREV_QUERY_CACHE_KEY];
                    }

                    this.latestQuery = this.sanitize(searchInput.value);

                    if (inputText.length < minSearchLength) {
                        this.initialSectionLoad();
                        return;
                    }

                    this.noResultsFound = null;
                    this.errorMessage = null;

                    const query = `query xSearchQuery($inputText: String!) {products: xsearchProducts(search: $inputText) {
                code
                items {
                  __typename
                  small_image {
                    label
                    url
                  }

                  id
                  is_salable
                  short_description {
                    html
                  }
                  name
                  rating_summary
                  reviews_count
                  sku
                  preorder
                  url_key
                  url_suffix
                  type_id
                  marketing_pdp
                  
                  price_range {
                    minimum_price {
                        regular_price {
                            value
                            currency
                        }
                        final_price {
                            value
                            currency
                        }
                    }
                    maximum_price {
                        regular_price {
                            value
                            currency
                        }
                        final_price {
                            value
                            currency
                        }
                    }
                 }
                }
                total_count
              }
page: xsearchPages(search: $inputText) {
                   items {
                      description
                      name
                      title
                      url
                    },
                    total_count
                }
category: xsearchCategories(search: $inputText) {
            code
            items {
              description
              name
              url
            }
            total_count
          }
browsingHistory: xsearchBrowsingHistory {
            code
            items {
              name
              url
            }
            total_count
          }
recentSearches: xsearchRecentSearches {
                    code
                    items {
                      name
                      num_results
                      url
                    }
                    total_count
                  }
popularSearches: xsearchPopularSearches {
                    code
                    items {
                      name
                      num_results
                      url
                    }
                    total_count
                  }


terms: xsearchRelatedTerms(search: $inputText) {
                    items {
                      count
                      name
                    }
                  }

}`;
                    const req = this.fetch(query, { inputText }, PREV_QUERY_CACHE_KEY);

                    req.then(response => {
                        if (response.errors && response.errors.length > 0) {
                            this.errorMessage = response.errors[0].message;
                            console.error(this.errorMessage);
                        }

                        this.searchInitialized = true;
                        this.processResponse(response);
                    });
                },

                fetch(query, variables = {}, cacheKey = null, useLoading = true) {
                    if (cacheKey && cache[cacheKey]) {
                        return Promise.resolve(cache[cacheKey]);
                    }

                    if (useLoading) {
                        this.isLoading = true;
                    }

                    const req = fetch(`${BASE_URL}graphql`, {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/json',
                            'Store': 'fi_FI'
                        },
                        credentials: 'include',
                        body: JSON.stringify({query, variables}),
                    });

                    return req.then(response => {
                        if (!response.ok) {
                            throw new Error(`HTTP error: ${response.status}`);
                        }

                        const body = response.json();
                        if (cacheKey) {
                            cache[cacheKey] = body;
                        }

                        return body;
                    })
                    .catch(reason => {
                        console.error(reason);
                    })
                    .finally(() => {
                        this.isLoading = false;
                    });
                },

                checkSearchInput() {
                    if (this.$refs.searchInput.value === '') {
                        this.clear();
                    }
                },

                redirect() {
                    this.isLoading = true;
                    const { searchInput } = this.$refs;
                    const inputText = this.sanitize(searchInput.value);

                    const products = this.sections.products;
                    if (products && products.items.length === 1 && this.config.isRedirectToSingleProductEnabled) {
                        location.href = this.getProductUrl(products.items[0]);
                        return;
                    }

                    const url = 'https://explore.omsystem.com/fi/fi/catalogsearch/result/?q=';
                    location.href = url + inputText;
                },

                focusElement(element) {
                    if (element && element.nodeName === "DIV") {
                        element.focus();
                        return true;
                    }
                    return false;
                },

                processResponse(response) {
                    this.updateSections(response.data);
                },

                clear() {
                    const initialQueryCache = cache[INITIAL_QUERY_CACHE_KEY];
                    if (!initialQueryCache) {
                        return;
                    }

                    initialQueryCache.then(result => {
                        this.updateSections(result.data ?? {});
                    });
                },

                closeSearch() {
                    if (this.searchOpen) {
                        this.searchOpen = false;
                    }

                    this.$nextTick(() => {
                        this.showOverlay = false;
                        this.searchInitialized = false;
                    })

                    if (this.checkHyvaUiHeaderVariant('c')) {
                        this.$refs.searchContainerDesktop.classList.remove(HEADER_TYPE + '-header-type');
                    }
                },

                processItemsWithRating(value) {
                    if (value.items) {
                        value.items = value.items.map(this.getRating.bind(this));
                    }
                    return value;
                },

                processSection(key, value) {
                    if (!value) {
                        return value;
                    }

                    let processedValue;

                    switch (key) {
                        case 'recentlyViewed':
                        case 'bestsellers':
                            processedValue = this.processItemsWithRating(value);
                            if (processedValue.items) {
                                processedValue.items = (processedValue.items || []).map(item => {
                                    item.isSliderItem = true;
                                    return item;
                                });
                            }
                            break;
                        case 'products':
                            processedValue = this.processItemsWithRating(value);
                            processedValue = this.processProductName(processedValue);
                            break;
                        default:
                            processedValue = value;
                    }

                    processedValue.title = this.config[`amasty_xsearch_${key}_title`];
                    return processedValue;
                },

                updateSections(rows) {
                    if (!this.showOverlay) {
                        this.showOverlay = true;
                    }

                    this.isLoading = false;

                    this.noResultsFound = !rows.products?.total_count && this.latestQuery.length >= this.minSearchLength;
                    if (!this.noResultsFound) {
                        this.errorMessage = null;
                    }

                    for (const key in dataSections) {
                        const data = rows[key];
                        this.sections[key] = data?.items?.length > 0
                            ? this.processSection(key, data)
                            : {items: [], total_count: 0};
                    }

                    if (this.latestQuery.length >= this.minSearchLength) {
                        return;
                    }

                    for (const key in this.slider) {
                        const items = rows[key]?.items;

                        if (rows.hasOwnProperty(key) && items?.length && !this.slider[key]) {
                            this.slider[key] = this.amXsearchCarouselComponent(key, items.length);
                        }
                    }
                }
            }
        }
    })();</script>  <script>
    'use strict';

    function deepMerge(target, ...sources) {
        if (!sources.length) return target;

        for (const source of sources) {
            if (typeof source !== 'object' || source === null) continue;

            for (const key in source) {
                if (!source.hasOwnProperty(key)) continue;

                if (Array.isArray(source[key])) {
                    target[key] = (target[key] || []).concat(source[key]);
                } else if (typeof source[key] === 'object' && source[key] !== null) {
                    target[key] = deepMerge(target[key] || {}, source[key]);
                } else {
                    target[key] = source[key];
                }
            }
        }

        return target;
    }

    function mergeFunctions(functions) {
        return function (...args) {
            functions.forEach(func => func && func.apply(this, args));
        };
    }

    /**
     * Carousel component for xsearch
     *
     * @param key
     * @param itemCount
     * @returns Object
     */
    function amXsearchCarouselComponent(key, itemCount) {
        return {
            itemCount,
            pageSize: 4,
            active: 0,
            slider: null,
            pageFillers: 0,
            sliderEl: false,
            smallWindowItemWidth: false,
            init($refs) {
                const sliderEl = $refs[`${key}Container`];
                if (!sliderEl || itemCount === 0) {
                    return this;
                }

                if (sliderEl) {
                    if (!this.isDefaultSearchInput && !this.isFullWidthSearch) {
                        if (this.searchPopupWidth <= 900) {
                            this.smallWindowItemWidth = sliderEl.clientWidth / 3;
                        }
                        if (this.searchPopupWidth <= 700) {
                            this.smallWindowItemWidth = sliderEl.clientWidth / 2;
                        }
                        if (this.searchPopupWidth <= 500) {
                            this.smallWindowItemWidth = sliderEl.clientWidth - 30;
                        }
                    }
                }

                this.sliderEl = sliderEl;
                this.recalculate();
            },
            getSlider() {
                return this.sliderEl.querySelector('.carousel-slides');
            },
            calcPageSize() {
                const slider = this.getSlider();
                if (!slider) {
                    return this;
                }

                const slides = slider.querySelectorAll('.carousel-slide');
                if (this.smallWindowItemWidth) {
                    slides.forEach(slide => {
                        slide.style.width = `${this.smallWindowItemWidth}px`;
                    });
                }

                const firstSlide = slides[0];

                this.itemCount = slides.length;
                this.pageSize = Math.round(slider.clientWidth / firstSlide.clientWidth);

                this.pageFillers = this.pageSize * Math.ceil(this.itemCount / this.pageSize) - this.itemCount;
            },
            calcActive() {
                const slider = this.getSlider();
                if (!slider) {
                    return this;
                }

                const sliderItems = Math.round(this.itemCount) + Math.round(this.pageFillers);
                const calculatedActiveSlide = Math.round(
                    Math.round(slider.scrollLeft) / (Math.round(slider.scrollWidth) / sliderItems)
                );

                this.active = Math.round(calculatedActiveSlide / Math.round(this.pageSize)) * Math.round(this.pageSize);
            },
            prev() {
                this.scrollTo(this.active - this.pageSize);
            },
            next() {
                this.scrollTo(this.active + this.pageSize);
            },
            scrollTo(index) {
                const slider = this.getSlider();
                if (!slider) {
                    return this;
                }

                const slideWidth = slider.scrollWidth / (this.itemCount + this.pageFillers);
                slider.scrollLeft = Math.floor(slideWidth) * index;

                this.calcActive();
            },

            isActive(index) {
                return index === this.active;
            },

            recalculate() {
                this.calcPageSize();
                setTimeout(() => this.calcActive(), 100);
            },
            onResize() {
                this.calcPageSize();
                setTimeout(() => this.calcActive(), 100);
            }
        };
    }</script>   <script>
    'use strict';

    function amXsearchAutocompleteHyvaUIHeaderCompat() {
        const HEADER_TYPE = 'b';
        return HEADER_TYPE ? {
            applyHyvaUiHeaderConfig() {
                const searchContent = document.getElementById('search-content');

                if (this.isFullWidthSearch) {
                    if (!this.isHorizontalView) {
                        if (this.checkHyvaUiHeaderVariant('b')) {
                            searchContent.style = 'max-width:none';
                            searchContent.parentNode.style = 'padding-right:0; padding-left:0;';
                        }

                        if (this.checkHyvaUiHeaderVariant('c')) {
                            this.$refs.searchContainerDesktop.classList.add(HEADER_TYPE + '-header-type');
                            this.$refs.searchForm.style = 'padding-right:0; padding-left:0;';
                        }
                    }

                    if (this.checkHyvaUiHeaderVariant('a')) {
                        searchContent.style = 'max-width: none';
                    }
                }
            },

            applyHeaderTypeToContainers() {
                const searchHeader = document.getElementById('header');
                const columnMain = document.querySelector('.column.main');
                const searchContent = document.getElementById('search-content');
                const headerTypeClass = HEADER_TYPE + '-header-type';

                if (searchHeader) {
                    searchHeader.classList.add(headerTypeClass);
                }

                if (columnMain) {
                    columnMain.classList.add(headerTypeClass);
                }

                if (this.checkHyvaUiHeaderVariant('a')) {
                    searchContent.className = 'container';
                }
            },

            normalizeBaseUrl() {
                let url = new URL(BASE_URL);
                BASE_URL = url.origin + url.pathname
            }
        } : {};
    }</script>  <script>
    function initAmastySearch(doSearch) {
        return {
            topOffset: 0,
            doSearch: doSearch,

            init() {
                this.doSearch();
                const headerEl = document.getElementById('header');
                const promoEl = document.getElementById('global-promo-banner');
                const updateOffsets = () => {
                    const h = headerEl ? headerEl.offsetHeight : 0;
                    const p = promoEl ? promoEl.offsetHeight : 0;
                    const mobile = window.matchMedia('(max-width: 768px)').matches;
                    const base = h + (mobile ? 0 : p);
                    this.$refs.searchContainer.style.top = base + 'px';

                    if (this.isSearchOpen) {
                        this.topOffset = base + 60;
                    }
                };
                updateOffsets();
                this.$watch('isSearchOpen', (status) => {
                    document.body.style.overflow = status ? 'hidden' : null;
                    updateOffsets();
                });
                window.addEventListener('resize', updateOffsets);
            }
        }
    }</script><div :class="{ 'max-lg:pb-4 text-black z-20 min-w-96 xl:min-w-[650px] 2xl:min-w-[800px]': true, }" id="search-wrapper" x-data="Object.assign( {amXsearchCarouselComponent}, amXsearchProductsComponent(), amXsearchAutocompleteComponent(),  amXsearchAutocompleteHyvaUIHeaderCompat(),  )" x-init="dynamicLayout($el)" x-cloak><div class="backdrop max-lg:hidden" x-ref="searchContainer" x-show="isSearchOpen" 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="isSearchOpen = false"></div><div class="form mini-search z-20 lg:relative" :class="{ 'right-0': !isHyvaUiHeader(), 'md:flex md:justify-center': checkHyvaUiHeaderVariant('c') && !isDefaultSearchInput && !isFullWidthSearch }" x-data="initAmastySearch(doSearch)" ><form id="search_mini_form" @submit.prevent="redirect()" action="https://explore.omsystem.com/fi/fi/catalogsearch/result/?q=" class="max-lg:px-4" :class="{ 'w-full absolute right-0': checkHyvaUiHeaderVariant('a') && !isDefaultSearchInput && !isFullWidthSearch, 'justify-end': !checkHyvaUiHeaderVariant('c') }" class="flex" method="GET">  <label class="hidden" for="search" data-role="mini-search-label"><span>Etsi</span></label> <div class="w-full flex align-center justify-center relative" :style="`max-width: ${!isDefaultSearchInput && !isFullWidthSearch ? searchPopupWidth + 'px' : '100%'}`"><input id="search_field" x-ref="searchInput" maxlength="128" form="search_mini_form" type="search" name="q" value="" autocomplete="off" placeholder="Etsi..." class="px-4 pr-10 min-h-11 placeholder:!h-4 placeholder:pt-1 py-3 bg-pallas border border-secondary-lighter w-full focus:ring-0 focus:!shadow-none focus:border-secondary-lighter text-sm font-light !leading-[16px] placeholder:!text-sm placeholder:!leading-[16px] appearance-none !tracking-[0px]" @search="checkSearchInput()" @input.debounce.500="doSearch()"  x-intersect:enter.once="applyHyvaUiHeaderConfig()"  @keydown.arrow-down.prevent="focusElement($el.querySelector('[tabindex]'))"/><button type="submit" title="Etsi" class="top-3 right-4 absolute !border-0 !bg-transparent" x-bind:disabled="isLoading || latestQuery.length < minSearchLength" :class="{ 'am-custom-search-button': false, 'rounded-tr': isHyvaUiHeader() }" aria-label="Search"><svg xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 21" fill="none" class="!text-gray-dark" role="img">
    <path d="M4.76607 13.5732C5.98253 14.7897 7.44941 15.3979 9.16676 15.3979C10.8841 15.3979 12.351 14.7897 13.5675 13.5732C14.7839 12.3568 15.3778 10.9042 15.3778 9.18683C15.3778 7.46948 14.7768 6.00973 13.5675 4.78612C12.3439 3.57682 10.877 2.97575 9.16676 2.97575C7.45656 2.97575 5.9825 3.57682 4.78035 4.78612C3.57821 5.99542 2.95568 7.46948 2.95568 9.18683C2.95568 10.9042 3.55677 12.3711 4.76607 13.5732ZM20.9449 19.5339L19.521 20.9579L14.2258 15.6627C12.7446 16.8219 11.0558 17.4015 9.16676 17.4015C8.0791 17.4015 7.02726 17.194 6.02547 16.779C5.02368 16.3639 4.12919 15.77 3.34923 14.9972C2.57642 14.2244 1.98251 13.3371 1.56748 12.3353C1.15246 11.3335 0.944946 10.2816 0.944946 9.18683C0.944946 8.09202 1.15246 7.04014 1.56748 6.03836C1.98251 5.03657 2.57642 4.14927 3.34923 3.37646C4.12919 2.60365 5.01653 2.00974 6.02547 1.59471C7.03442 1.17968 8.07195 0.972168 9.16676 0.972168C10.2616 0.972168 11.3135 1.17968 12.3153 1.59471C13.317 2.00974 14.2043 2.60365 14.9771 3.37646C15.7571 4.14927 16.351 5.03657 16.766 6.03836C17.1811 7.04014 17.3886 8.09202 17.3886 9.18683C17.3886 11.0616 16.809 12.7503 15.6426 14.2459L20.9378 19.541L20.9449 19.5339Z" fill="black"/>
<title>search</title></svg>
</button></div></form><div class="md:px-1 w-full left-0 shadow-lg overflow-auto text-sm amsearch-container max-w-[100vw] lg:max-w-96 lg:!h-auto lg:max-h-[600px] xl:max-w-[650px] 2xl:max-w-[800px] lg:!top-[51px]" :class="{ 'fixed lg:absolute': !config.isFullScreenMode || isHyvaUiHeader(), 'rounded-br rounded-bl': isHyvaUiHeader(), 'right-0': !checkHyvaUiHeaderVariant('c'), 'top-12': checkHyvaUiHeaderVariant('c') && !isHorizontalView, 'top-14': checkHyvaUiHeaderVariant('a') && isHorizontalView }" tabindex="-1" x-cloak :style="{'height': `calc(100dvh - ${topOffset}px`, 'top': `${topOffset}px` }"><div class="flex w-full content-start lg:flex-col flex-wrap box-border relative xl:grid xl:grid-cols-[260px_1fr]" :class="{ 'flex-col': isHorizontalView, 'flex-col md:flex-row': !isHorizontalView, }"><div x-show="isLoading" class="lg:!h-full lg:max-h-[600px] lg:w-full fixed lg:absolute left-0 w-screen flex justify-center items-center bg-white bg-opacity-50 z-10" :style="{'height': `calc(100dvh - ${topOffset}px`}" > <div class="z-10 flex items-center justify-center w-[60px] h-[60px] relative"><div class="spinner"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div></div><style> .spinner { display: flex; justify-content: center; align-items: center; width: 60px; height: 60px; animation: rotateClockwise 1.2s linear infinite; } .spinner div { position: absolute; width: 6px; height: 17px; background-color: #40683C; animation: fadeOpacity 1.2s linear infinite; } .spinner div:nth-child(1) { transform: rotate(45deg) translate(0, -20px); animation-delay: 0s; } .spinner div:nth-child(2) { transform: rotate(0deg) translate(0, -20px); animation-delay: -0.15s; } .spinner div:nth-child(3) { transform: rotate(-45deg) translate(0, -20px); animation-delay: -0.3s; } .spinner div:nth-child(4) { transform: rotate(-90deg) translate(0, -20px); animation-delay: -0.45s; } .spinner div:nth-child(5) { transform: rotate(-135deg) translate(0, -20px); animation-delay: -0.6s; } .spinner div:nth-child(6) { transform: rotate(-180deg) translate(0, -20px); animation-delay: -0.75s; } .spinner div:nth-child(7) { transform: rotate(-225deg) translate(0, -20px); animation-delay: -0.9s; } .spinner div:nth-child(8) { transform: rotate(-270deg) translate(0, -20px); animation-delay: -1.05s; } @keyframes rotateClockwise { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } @keyframes fadeOpacity { 0% { opacity: 1; } 12.5% { opacity: 0.86; } 25% { opacity: 0.72; } 37.5% { opacity: 0.58; } 50% { opacity: 0.44; } 62.5% { opacity: 0.30; } 75% { opacity: 0.16; } 87.5% { opacity: 0.02; } 100% { opacity: 1; } }</style></div><div class="w-full pt-6 am-search-sidebar lg:!max-w-full" :class="{ 'hidden': latestQuery.length < minSearchLength && ( !showOnFirstClick('recentSearches') && !showOnFirstClick('popularSearches') && !showOnFirstClick('browsingHistory') ) || isSidebarSectionsDisabled(), 'am-search-horizontal-view': isHorizontalView, }"> <template x-if=" sections?.blog?.items?.length"><div class="max-lg:mb-6" x-show="(latestQuery.length >= minSearchLength || showOnFirstClick('blog'))" x-cloak> <div class="w-full mb-2 am-search-item-list "><p class="text-base leading-[20px] font-bold mb-2" x-text="sections.blog.title"></p><div><template x-for="(item, index) in sections.blog.items" :key="index"><div><a class="w-full flex py-2" :href="window.BASE_URL + item.url"><span x-html="item.title" class="font-semibold"></span></a> <span class="text-black mt-1 px-4 flex" x-html="item.description"></span></div></template></div></div></div></template> <template x-if=" sections?.faq?.items?.length"><div class="max-lg:mb-6" x-show="(latestQuery.length >= minSearchLength || showOnFirstClick('faq'))" x-cloak> <div class="w-full mb-2 am-search-item-list "><p class="text-base leading-[20px] font-bold mb-2" x-text="sections.faq.title"></p><template x-for="(item, index) in sections.faq.items" :key="index"><a class="w-full flex py-2" :href="window.BASE_URL + item.url" x-html="item.name"></a></template></div></div></template> <template x-if=" sections?.brand?.items?.length"><div class="max-lg:mb-6" x-show="(latestQuery.length >= minSearchLength || showOnFirstClick('brand'))" x-cloak> <div class="w-full mb-2 am-search-item-list "><p class="text-base leading-[20px] font-bold mb-2" x-text="sections.brand.title"></p><template x-for="(item, index) in sections.brand.items" :key="index"><a class="w-full flex py-2" :href="`${BASE_URL + item.url}`" x-html="item.name"></a></template></div></div></template> <template x-if=" sections?.landingPage?.items?.length"><div class="max-lg:mb-6" x-show="(latestQuery.length >= minSearchLength || showOnFirstClick('landingPage'))" x-cloak> <div class="w-full mb-2 am-search-item-list "><p class="text-base leading-[20px] font-bold mb-2" x-text="sections.landingPage.title"></p><template x-for="(item, index) in sections.landingPage.items" :key="index"><a class="w-full flex py-2" :href="window.BASE_URL + item.url" x-html="item.title"></a></template></div></div></template> <template x-if="isHorizontalView &amp;&amp; !noResultsFound &amp;&amp;  sections?.products?.items?.length"><div class="max-lg:mb-6" x-show="(latestQuery.length >= minSearchLength || showOnFirstClick('products'))" x-cloak> <div class="w-full"><div class="flex row justify-between w-full pb-4 px-4 lg:px-2 items-center"><template x-if="sections.products?.total_count"><p class="text-base leading-[20px] font-bold"><span x-text="sections.products.title"></span> (<span x-text="sections.products.total_count"></span>)</p></template><div class="am-search-view-all" x-show="getResultProductsCount() >= 1"><a :href="resultPageUrl + latestQuery" class="text-blue-600 hover:text-blue-800 ">Katso Kaikki <span x-show="getResultProductsCount() > 0">(+<span x-text="getResultProductsCount()"></span>)</span></a></div></div><div class="relative flex flex-wrap w-full gap-3 md:gap-4"><template x-for="(product, index) in (sections.products.items || [])" :key="index"> <div class="item product product-item card card-interactive flex round-none shadow-none border-none relative" :class="{ 'flex-1': !config.isGridView, 'flex-row mb-5 list-view': config.isGridView && (isFullWidthSearch || isDefaultSearchInput || searchPopupWidth > 900), 'flex-col w-full md:w-auto md:max-w-md': !config.isGridView && (!isFullWidthSearch || !isDefaultSearchInput || searchPopupWidth <= 900) }" x-data="{ isProductHovered: false }" @mouseenter="isProductHovered = true" @mouseleave="isProductHovered = false" ><div class="absolute top-4 right-4 flex lg:hidden flex-col gap-1" :class="{ 'lg:flex': isProductHovered, 'lg:hidden': !isProductHovered }">  <button aria-label="Lis&#xE4;&#xE4;&#x20;toivelistalle" x-on:click.prevent="addToWishlist(product)" class="px-2 py-1 flex gap-2 text-xs leading-[12px] font-bold items-center !bg-transparent !border-0" >Suosikit <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.37263 3.70601C3.40096 2.67768 4.79566 2.09998 6.24993 2.09998C7.07343 2.09998 7.82713 2.21781 8.56556 2.53942C9.06779 2.75817 9.53677 3.05978 9.99994 3.44573C10.4631 3.05978 10.9321 2.75817 11.4343 2.53942C12.1727 2.21781 12.9264 2.09998 13.7499 2.09998C15.2042 2.09998 16.5989 2.67768 17.6272 3.70601C18.6556 4.73433 19.2333 6.12904 19.2333 7.58331C19.2333 9.89821 17.7056 11.5917 16.4665 12.8062L12.0505 17.2222C10.918 18.3547 9.08184 18.3547 7.94932 17.2222L3.53556 12.8084C2.28152 11.5955 0.766602 9.90439 0.766602 7.58331C0.766602 6.12904 1.34431 4.73433 2.37263 3.70601ZM6.24993 3.89998C5.27305 3.89998 4.33618 4.28804 3.64542 4.9788C2.95467 5.66956 2.5666 6.60643 2.5666 7.58331C2.5666 9.09215 3.54723 10.3162 4.79212 11.5196L4.79761 11.5249L9.22212 15.9494C9.65169 16.3789 10.3482 16.3789 10.7778 15.9494L15.2033 11.5238C16.447 10.3052 17.4333 9.083 17.4333 7.58331C17.4333 6.60643 17.0452 5.66956 16.3544 4.9788C15.6637 4.28804 14.7268 3.89998 13.7499 3.89998C13.1068 3.89998 12.6105 3.99048 12.1531 4.18969C11.6898 4.39144 11.21 4.72933 10.6363 5.30304L9.99993 5.93943L9.36354 5.30304C8.78983 4.72933 8.31002 4.39144 7.84681 4.18969C7.3894 3.99048 6.8931 3.89998 6.24993 3.89998Z" fill="black"/>
<title>favorites</title></svg>
</button>    <button x-on:click.prevent="addToCompare(product)" aria-label="Lis&#xE4;&#xE4;&#x20;vertailuun" class="px-2 py-1 flex gap-2 text-xs leading-[12px] font-bold items-center !bg-transparent !border-0" >Vertaa <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.1001 19.375V0.625H10.9001V19.375H9.1001Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.6001 4.99998C1.6001 3.46739 2.84251 2.22498 4.3751 2.22498H9.3751V4.02498H4.3751C3.83662 4.02498 3.4001 4.4615 3.4001 4.99998V15C3.4001 15.5385 3.83662 15.975 4.3751 15.975H9.3751V17.775H4.3751C2.84251 17.775 1.6001 16.5326 1.6001 15V4.99998Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.3999 15C18.3999 16.5326 17.1575 17.775 15.6249 17.775L14.0624 17.775L14.0624 15.975L15.6249 15.975C16.1634 15.975 16.5999 15.5385 16.5999 15L16.5999 13.4375L18.3999 13.4375L18.3999 15ZM12.1874 17.775L10.6249 17.775L10.6249 15.975L12.1874 15.975L12.1874 17.775ZM18.3999 8.43752L18.3999 11.5625L16.5999 11.5625L16.5999 8.43752L18.3999 8.43752ZM18.3999 5.00002L18.3999 6.56252L16.5999 6.56252L16.5999 5.00002C16.5999 4.46155 16.1634 4.02502 15.6249 4.02502L14.0624 4.02502L14.0624 2.22502L15.6249 2.22502C17.1575 2.22503 18.3999 3.46743 18.3999 5.00002ZM10.6249 2.22502L12.1874 2.22502L12.1874 4.02502L10.6249 4.02502L10.6249 2.22502Z" fill="black"/>
<title>compare</title></svg>
</button> </div><a :href="getProductUrl(product)" class="photo product-item-photo block mb-3 flex justify-center align-center" tabindex="-1"  :class="{'md:w-1/6 md:mb-0 mr-5': config.isGridView}" ><img class="object-contain min-w-[311px] min-h-[311px] max-w-[311px] size-[311px] 2xl:min-w-[210px] 2xl:min-h-[210px] 2xl:max-w-[210px] 2xl:size-[210px]" :src="getProductImageUrl(product)" :alt="product.small_image.label"  width="210" height="210" /></a> <div class="product-info flex flex-col grow"><div class="mb-1 text-primary text-lg" :class="{'md:text-left': config.isGridView, 'text-left': !config.isGridView}" ><a class="product-item-link action link" :href="getProductUrl(product)" ><span x-html="product.name" class="amsearch-product-name font-bold text-xl leading-[25.6px]"></span></a> <template x-if="config.isShowSku"><div class="text-sm font-normal"><span>SKU:</span> <span x-html="product.sku"></span></div></template></div><div class="flex flex-col gap-3"> <div class="price-container flex justify-center items-center"><div class="final-price flex items-end"><template x-if="product.price_range.minimum_price.final_price.value < product.price_range.maximum_price.final_price.value"><span class="price-label mr-2 text-sm leading-[17.5px] text-gray-dark">Alkaen</span></template><template x-if="product.price_range.minimum_price.regular_price.value !== product.price_range.minimum_price.final_price.value"><span class="price-wrapper line-through text-gray-medium text-sm leading-[17.5px] mr-1" x-html="hyva.formatPrice(product.price_range.minimum_price.regular_price.value)"></span></template><span class="price-wrapper title-font font-bold text-base leading-[20px] text-black" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value)"></span></div></div> <div class="flex justify-between items-center"> <template x-if="product.preorder"><div class="flex items-center gap-2"><div class="p-1 bg-orange-500"></div><span class="text-sm leading-[17.5px] text-black">Ennakkotilaus</span></div></template><template x-if="!product.preorder && product.is_salable"><div class="flex items-center gap-2"><div class="p-1 bg-stock-available"></div><span class="text-sm leading-[17.5px] text-black">Varastossa</span></div></template><template x-if="!product.is_salable"><div class="flex items-center gap-2"><div class="p-1 bg-secondary-lighter"></div><span class="text-sm leading-[17.5px] text-black">Ei varastossa</span></div></template> <template x-if="config.isProductReviewsBlockEnabled"> <template x-if="product.rating_summary > 0"><div><div class="rating-summary cursor-pointer text-center flex items-center" :title="product.rating_summary === 0 ? 'Arvostele&#x20;t&#xE4;m&#xE4;&#x20;tuote&#x20;ensimm&#xE4;isen&#xE4;' : ''"><div class="flex pb-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="currentColor" class="size-3"><defs><linearGradient :id="'partialFill' + product.id"><stop offset="0%" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.rating_summary + '%'" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.rating_summary + '%'" :stop-color="product.ratingData.greyHex"/><stop offset="100%" :stop-color="product.ratingData.greyHex"/></linearGradient></defs><g :fill="'url(#partialFill' + product.id + ')'"><path d="M9.70294 11.5L5.99523 9.222L2.29706 11.5L3.33598 7.30619L0 4.5135L4.35584 4.19897L5.99523 0.205321L7.63463 4.19897L12 4.5135L8.65449 7.30619L9.70294 11.5Z" /></g></svg></div><span class="ml-1 text-sm text-black leading-[17.5px]" x-html="(product.rating_summary / 2 / 10).toFixed(1)"></span> <span class="ml-1 text-sm text-gray-dark leading-[17.5px]" x-html="'(' + product.reviews_count + ')'"></span></div></div></template></template></div></div><div class="pt-3 flex flex-col gap-2 w-full" :class="{ 'mt-auto justify-center': !config.isGridView , 'flex-wrap': config.isGridView && config.isProductAddToCartBlockEnabled && product.is_salable, 'justify-start': config.isGridView }"> <a :href="getLearnMoreUrl(product)" class="btn btn-tritical-reversed transition-all duration-300 h-9 md-lg:h-12 py-2 px-[18px] lg:py-[14px] lg:px-[30px] lg:flex-1 max-w-full" >Lue lisää</a>  <button class="btn btn-secondary transition-all duration-300 h-9 md-lg:h-12 py-2 px-[18px] lg:py-[14px] lg:px-[30px] lg:flex-1 max-w-full" data-addto="cart" x-on:click.prevent="addToCart(product)" ><span x-text="product.preorder ? 'Ennakkotilaus' : 'Lis\u00E4\u00E4\u0020ostoskoriin'"></span></button>   </div></div></div></template></div></div></div></template> <template x-if=" sections?.popularSearches?.items?.length"><div class="max-lg:mb-6" x-show="(latestQuery.length >= minSearchLength || showOnFirstClick('popularSearches'))" x-cloak> <div class="w-full mb-2 am-search-item-list "><p class="text-base leading-[20px] font-bold mb-2" x-text="sections.popularSearches.title"></p><template x-for="(searchItem, index) in sections.popularSearches.items" :key="index"><a class="w-full flex py-2" :href="resultPageUrl + searchItem.name.toLowerCase().replace(/<[^>]*>?/gm, '')" x-html="searchItem.name"></a></template></div></div></template> <template x-if=" sections?.page?.items?.length"><div class="max-lg:mb-6" x-show="(latestQuery.length >= minSearchLength || showOnFirstClick('page'))" x-cloak> <div class="w-full mb-2 am-search-item-list "><p class="text-base leading-[20px] font-bold mb-2" x-text="sections.page.title"></p><template x-for="(item, index) in sections.page.items" :key="index"><div><a class="w-full flex py-2" :href="`${BASE_URL + item.url}`"><span x-html="item.title" class="font-semibold"></span></a> <span class="text-black block mt-1 mb-0" x-html="item.description"></span></div></template></div></div></template> <template x-if=" sections?.category?.items?.length"><div class="max-lg:mb-6" x-show="(latestQuery.length >= minSearchLength || showOnFirstClick('category'))" x-cloak> <div class="w-full mb-2 am-search-item-list "><p class="text-base leading-[20px] font-bold mb-2" x-text="sections.category.title"></p><template x-for="(item, index) in sections.category.items" :key="index"><div><a class="w-full flex py-2" :href="window.BASE_URL + item.url"><span x-html="item.name" class="font-semibold"></span></a> <span class="text-black block mt-1 mb-0" x-html="item.description" x-show="item.description"></span></div></template></div></div></template> <template x-if=" sections?.recentSearches?.items?.length"><div class="max-lg:mb-6" x-show="(latestQuery.length >= minSearchLength || showOnFirstClick('recentSearches'))" x-cloak> <div class="w-full mb-2 am-search-item-list "><p class="text-base leading-[20px] font-bold mb-2" x-text="sections.recentSearches.title"></p><div class="flex direction-row flex-wrap"><template x-for="(searchItem, index) in sections.recentSearches.items" :key="index"><a class="bg-gray-100 hover:bg-gray-200 py-1 px-4 rounded-lg mr-2 mb-2" :href="resultPageUrl + searchItem.name.toLowerCase().replace(/<[^>]*>?/gm, '')" x-html="searchItem.name"></a></template></div></div></div></template> <template x-if=" sections?.browsingHistory?.items?.length"><div class="max-lg:mb-6" x-show="(latestQuery.length >= minSearchLength || showOnFirstClick('browsingHistory'))" x-cloak> <div class="w-full mb-2 am-search-item-list "><p class="text-base leading-[20px] font-bold mb-2" x-text="sections.browsingHistory.title"></p><template x-for="(searchItem, index) in sections.browsingHistory.items" :key="index"><a class="w-full flex py-2" :href="resultPageUrl + searchItem.name.toLowerCase().replace(/<[^>]*>?/gm, '')" x-html="searchItem.name"></a></template></div></div></template></div><div class="relative" :class="{ 'am-search-content p-2 pt-6': latestQuery.length >= minSearchLength || ( showOnFirstClick('recentSearches') || showOnFirstClick('popularSearches') || showOnFirstClick('browsingHistory') ), 'w-full': latestQuery.length < minSearchLength && ( !showOnFirstClick('recentSearches') && !showOnFirstClick('popularSearches') && !showOnFirstClick('browsingHistory') ), 'am-search-horizontal-view': isHorizontalView, 'p-2 pt-6': slider.recentlyViewed || slider.bestsellers, 'am-search-sidebar-disabled': isSidebarSectionsDisabled(), }"><div class="flex flex-nowrap flex-col" x-show="latestQuery.length < minSearchLength" x-cloak> </div><template x-if="!noResultsFound && !isHorizontalView && latestQuery.length >= minSearchLength"> <div class="w-full"><div class="flex row justify-between w-full pb-4 px-4 lg:px-2 items-center"><template x-if="sections.products?.total_count"><p class="text-base leading-[20px] font-bold"><span x-text="sections.products.title"></span> (<span x-text="sections.products.total_count"></span>)</p></template><div class="am-search-view-all" x-show="getResultProductsCount() >= 1"><a :href="resultPageUrl + latestQuery" class="text-blue-600 hover:text-blue-800 ">Katso Kaikki <span x-show="getResultProductsCount() > 0">(+<span x-text="getResultProductsCount()"></span>)</span></a></div></div><div class="relative flex flex-wrap w-full gap-3 md:gap-4"><template x-for="(product, index) in (sections.products.items || [])" :key="index"> <div class="item product product-item card card-interactive flex round-none shadow-none border-none relative" :class="{ 'flex-1': !config.isGridView, 'flex-row mb-5 list-view': config.isGridView && (isFullWidthSearch || isDefaultSearchInput || searchPopupWidth > 900), 'flex-col w-full md:w-auto md:max-w-md': !config.isGridView && (!isFullWidthSearch || !isDefaultSearchInput || searchPopupWidth <= 900) }" x-data="{ isProductHovered: false }" @mouseenter="isProductHovered = true" @mouseleave="isProductHovered = false" ><div class="absolute top-4 right-4 flex lg:hidden flex-col gap-1" :class="{ 'lg:flex': isProductHovered, 'lg:hidden': !isProductHovered }">  <button aria-label="Lis&#xE4;&#xE4;&#x20;toivelistalle" x-on:click.prevent="addToWishlist(product)" class="px-2 py-1 flex gap-2 text-xs leading-[12px] font-bold items-center !bg-transparent !border-0" >Suosikit <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.37263 3.70601C3.40096 2.67768 4.79566 2.09998 6.24993 2.09998C7.07343 2.09998 7.82713 2.21781 8.56556 2.53942C9.06779 2.75817 9.53677 3.05978 9.99994 3.44573C10.4631 3.05978 10.9321 2.75817 11.4343 2.53942C12.1727 2.21781 12.9264 2.09998 13.7499 2.09998C15.2042 2.09998 16.5989 2.67768 17.6272 3.70601C18.6556 4.73433 19.2333 6.12904 19.2333 7.58331C19.2333 9.89821 17.7056 11.5917 16.4665 12.8062L12.0505 17.2222C10.918 18.3547 9.08184 18.3547 7.94932 17.2222L3.53556 12.8084C2.28152 11.5955 0.766602 9.90439 0.766602 7.58331C0.766602 6.12904 1.34431 4.73433 2.37263 3.70601ZM6.24993 3.89998C5.27305 3.89998 4.33618 4.28804 3.64542 4.9788C2.95467 5.66956 2.5666 6.60643 2.5666 7.58331C2.5666 9.09215 3.54723 10.3162 4.79212 11.5196L4.79761 11.5249L9.22212 15.9494C9.65169 16.3789 10.3482 16.3789 10.7778 15.9494L15.2033 11.5238C16.447 10.3052 17.4333 9.083 17.4333 7.58331C17.4333 6.60643 17.0452 5.66956 16.3544 4.9788C15.6637 4.28804 14.7268 3.89998 13.7499 3.89998C13.1068 3.89998 12.6105 3.99048 12.1531 4.18969C11.6898 4.39144 11.21 4.72933 10.6363 5.30304L9.99993 5.93943L9.36354 5.30304C8.78983 4.72933 8.31002 4.39144 7.84681 4.18969C7.3894 3.99048 6.8931 3.89998 6.24993 3.89998Z" fill="black"/>
<title>favorites</title></svg>
</button>    <button x-on:click.prevent="addToCompare(product)" aria-label="Lis&#xE4;&#xE4;&#x20;vertailuun" class="px-2 py-1 flex gap-2 text-xs leading-[12px] font-bold items-center !bg-transparent !border-0" >Vertaa <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.1001 19.375V0.625H10.9001V19.375H9.1001Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.6001 4.99998C1.6001 3.46739 2.84251 2.22498 4.3751 2.22498H9.3751V4.02498H4.3751C3.83662 4.02498 3.4001 4.4615 3.4001 4.99998V15C3.4001 15.5385 3.83662 15.975 4.3751 15.975H9.3751V17.775H4.3751C2.84251 17.775 1.6001 16.5326 1.6001 15V4.99998Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.3999 15C18.3999 16.5326 17.1575 17.775 15.6249 17.775L14.0624 17.775L14.0624 15.975L15.6249 15.975C16.1634 15.975 16.5999 15.5385 16.5999 15L16.5999 13.4375L18.3999 13.4375L18.3999 15ZM12.1874 17.775L10.6249 17.775L10.6249 15.975L12.1874 15.975L12.1874 17.775ZM18.3999 8.43752L18.3999 11.5625L16.5999 11.5625L16.5999 8.43752L18.3999 8.43752ZM18.3999 5.00002L18.3999 6.56252L16.5999 6.56252L16.5999 5.00002C16.5999 4.46155 16.1634 4.02502 15.6249 4.02502L14.0624 4.02502L14.0624 2.22502L15.6249 2.22502C17.1575 2.22503 18.3999 3.46743 18.3999 5.00002ZM10.6249 2.22502L12.1874 2.22502L12.1874 4.02502L10.6249 4.02502L10.6249 2.22502Z" fill="black"/>
<title>compare</title></svg>
</button> </div><a :href="getProductUrl(product)" class="photo product-item-photo block mb-3 flex justify-center align-center" tabindex="-1"  :class="{'md:w-1/6 md:mb-0 mr-5': config.isGridView}" ><img class="object-contain min-w-[311px] min-h-[311px] max-w-[311px] size-[311px] 2xl:min-w-[210px] 2xl:min-h-[210px] 2xl:max-w-[210px] 2xl:size-[210px]" :src="getProductImageUrl(product)" :alt="product.small_image.label"  width="210" height="210" /></a> <div class="product-info flex flex-col grow"><div class="mb-1 text-primary text-lg" :class="{'md:text-left': config.isGridView, 'text-left': !config.isGridView}" ><a class="product-item-link action link" :href="getProductUrl(product)" ><span x-html="product.name" class="amsearch-product-name font-bold text-xl leading-[25.6px]"></span></a> <template x-if="config.isShowSku"><div class="text-sm font-normal"><span>SKU:</span> <span x-html="product.sku"></span></div></template></div><div class="flex flex-col gap-3"> <div class="price-container flex justify-center items-center"><div class="final-price flex items-end"><template x-if="product.price_range.minimum_price.final_price.value < product.price_range.maximum_price.final_price.value"><span class="price-label mr-2 text-sm leading-[17.5px] text-gray-dark">Alkaen</span></template><template x-if="product.price_range.minimum_price.regular_price.value !== product.price_range.minimum_price.final_price.value"><span class="price-wrapper line-through text-gray-medium text-sm leading-[17.5px] mr-1" x-html="hyva.formatPrice(product.price_range.minimum_price.regular_price.value)"></span></template><span class="price-wrapper title-font font-bold text-base leading-[20px] text-black" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value)"></span></div></div> <div class="flex justify-between items-center"> <template x-if="product.preorder"><div class="flex items-center gap-2"><div class="p-1 bg-orange-500"></div><span class="text-sm leading-[17.5px] text-black">Ennakkotilaus</span></div></template><template x-if="!product.preorder && product.is_salable"><div class="flex items-center gap-2"><div class="p-1 bg-stock-available"></div><span class="text-sm leading-[17.5px] text-black">Varastossa</span></div></template><template x-if="!product.is_salable"><div class="flex items-center gap-2"><div class="p-1 bg-secondary-lighter"></div><span class="text-sm leading-[17.5px] text-black">Ei varastossa</span></div></template> <template x-if="config.isProductReviewsBlockEnabled"> <template x-if="product.rating_summary > 0"><div><div class="rating-summary cursor-pointer text-center flex items-center" :title="product.rating_summary === 0 ? 'Arvostele&#x20;t&#xE4;m&#xE4;&#x20;tuote&#x20;ensimm&#xE4;isen&#xE4;' : ''"><div class="flex pb-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="currentColor" class="size-3"><defs><linearGradient :id="'partialFill' + product.id"><stop offset="0%" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.rating_summary + '%'" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.rating_summary + '%'" :stop-color="product.ratingData.greyHex"/><stop offset="100%" :stop-color="product.ratingData.greyHex"/></linearGradient></defs><g :fill="'url(#partialFill' + product.id + ')'"><path d="M9.70294 11.5L5.99523 9.222L2.29706 11.5L3.33598 7.30619L0 4.5135L4.35584 4.19897L5.99523 0.205321L7.63463 4.19897L12 4.5135L8.65449 7.30619L9.70294 11.5Z" /></g></svg></div><span class="ml-1 text-sm text-black leading-[17.5px]" x-html="(product.rating_summary / 2 / 10).toFixed(1)"></span> <span class="ml-1 text-sm text-gray-dark leading-[17.5px]" x-html="'(' + product.reviews_count + ')'"></span></div></div></template></template></div></div><div class="pt-3 flex flex-col gap-2 w-full" :class="{ 'mt-auto justify-center': !config.isGridView , 'flex-wrap': config.isGridView && config.isProductAddToCartBlockEnabled && product.is_salable, 'justify-start': config.isGridView }"> <a :href="getLearnMoreUrl(product)" class="btn btn-tritical-reversed transition-all duration-300 h-9 md-lg:h-12 py-2 px-[18px] lg:py-[14px] lg:px-[30px] lg:flex-1 max-w-full" >Lue lisää</a>  <button class="btn btn-secondary transition-all duration-300 h-9 md-lg:h-12 py-2 px-[18px] lg:py-[14px] lg:px-[30px] lg:flex-1 max-w-full" data-addto="cart" x-on:click.prevent="addToCart(product)" ><span x-text="product.preorder ? 'Ennakkotilaus' : 'Lis\u00E4\u00E4\u0020ostoskoriin'"></span></button>   </div></div></div></template></div></div></template><div class="p-4 box-border w-full h-full flex" x-show="noResultsFound && !errorMessage" x-cloak><div class="flex justify-center content-center flex-row items-center flex-wrap align-center w-full h-full max-h-[90vh] text-center text-xl word-break bg-gray-100" x-html="'😔 Emme löytäneet mitään kohteelle&nbsp;<strong>&quot;%s&quot;</strong>'.replace('%s', latestQuery)"></div></div><div class="p-4 box-border w-full h-full flex" x-show="noResultsFound && errorMessage" x-cloak><div class="text-center flex align-center w-full text-xl justify-center content-center flex-row bg-gray-100 items-center flex-wrap h-full max-h-[90vh] word-break" x-html="errorMessage"></div></div></div></div></div></div></div><script>
    function updateStickyOffset() {
        const stickyBanner = document.querySelector('.sticky-navi-rw');
        if (!stickyBanner) {
            return;
        }

        const viewportWidth = window.innerWidth;

        let header = null;

        if (viewportWidth >= 768) {
            header = document.querySelector('#global-promo-banner');
            if (!header) {
                return;
            }
        } else {
            header = document.querySelector('header.page-header');
            if (!header) {
                return;
            }
        }

        const headerHeight = header.offsetHeight;

        stickyBanner.style.top = headerHeight + 'px';
    }

    document.addEventListener('DOMContentLoaded', () => {
        updateStickyOffset();

        window.addEventListener('resize', () => {
            updateStickyOffset();
        });

        window.addEventListener('scroll', () => {
            updateStickyOffset();
        });
    });</script></div></div></div><!--Cart Drawer--> <script>
    function initCartDrawer() {
        return {
            open: false,
            isLoading: false,
            cart: {},
            maxItemsToDisplay: 10,
            itemsCount: 0,
            shippingData: [],
            subtotal: '0.00',
            totalSavings: '0.00',
            grandTotal: '0.00',
            isOrderSummaryOpen: false,
            isUpsellOpen: true,
            skipRequestingUpsellProducts: false,
            currentSlide: 0,
            getData(data) {
                if (data.cart) {
                    this.cart = data.cart;
                    this.itemsCount = data.cart.items && data.cart.items.length || 0;
                    this.setCartItems();
                    this.shippingData = data.cart.shippingInformation || [];
                    this.subtotal = data.cart.noDiscountSubtotal || '0.00';
                    this.grandTotal = data.cart.grandTotal || '0.00';
                    this.totalSavings = data.cart.totalSavings || '0.00';

                    if (!this.skipRequestingUpsellProducts) {
                        this.loadUpsellProducts();
                    } else {
                        this.skipRequestingUpsellProducts = false;
                    }
                    this.updateLabels(data);
                }
            },
            nextSlide() {
                const totalSlides = Math.ceil(this.getTotalProducts() / 2);
                this.currentSlide = (this.currentSlide + 1) % totalSlides;
            },
            previousSlide() {
                const totalSlides = Math.ceil(this.getTotalProducts() / 2);
                this.currentSlide = (this.currentSlide - 1 + totalSlides) % totalSlides;
            },
            getTotalProducts() {
                return document.querySelectorAll('.upsell-product').length;
            },
            isLastSlide() {
                return this.currentSlide >= Math.ceil(this.getTotalProducts() / 2) - 1;
            },
            cartItems: [],
            getItemCountTitle() {
                return hyva.strf('\u00250\u0020\u00251\u003Ast\u00E4\u0020tuotteesta\u0020\u00251\u0020n\u00E4ytet\u00E4\u00E4n\u0020ostoskorissa', this.maxItemsToDisplay, this.itemsCount)
            },
            loadUpsellProducts() {
                this.isLoading = true;

                fetch(BASE_URL + 'minicart_upsell/upsell/index', {
                    headers: { 'X-Requested-With': 'XMLHttpRequest' }
                })
                    .then(response => response.json())
                    .then(data => {
                        const container = document.getElementById('upsell-container');
                        if (container) {
                            container.innerHTML = data.html;
                            Alpine.initTree(container);
                        }

                        this.isLoading = false;
                    });
            },
            async updateItemQuantity(itemId, newQty) {
                this.isLoading = true;
                const formKey = hyva.getFormKey();
                const postUrl = BASE_URL + 'checkout/sidebar/updateItemQty/';

                try {
                    const response = await fetch(postUrl, {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
                            'X-Requested-With': 'XMLHttpRequest'
                        },
                        body: new URLSearchParams({
                            'form_key': formKey,
                            'item_id': itemId,
                            'item_qty': newQty
                        }),
                        credentials: 'include'
                    });

                    if (response.redirected) {
                        window.location.href = response.url;
                        return;
                    }

                    if (!response.ok) {
                        throw new Error('Network response was not ok');
                    }

                    const result = await response.json();

                    if (result.success) {
                        this.skipRequestingUpsellProducts = true;
                        window.dispatchEvent(new Event('reload-customer-section-data'));
                        window.dispatchMessages && window.dispatchMessages([{
                            type: 'success',
                            text: 'Tuotteen\u0020m\u00E4\u00E4r\u00E4\u0020p\u00E4ivitetty.'
                        }], 5000);
                    } else {
                        window.dispatchMessages && window.dispatchMessages([{
                            type: 'error',
                            text: result.error_message || 'Tuotteen\u0020m\u00E4\u00E4r\u00E4\u00E4\u0020ei\u0020voitu\u0020p\u00E4ivitt\u00E4\u00E4.'
                        }]);
                    }
                } catch (error) {
                    console.error('Error:', error);
                    window.dispatchMessages && window.dispatchMessages([{
                        type: 'error',
                        text: 'M\u00E4\u00E4r\u00E4n\u0020p\u00E4ivitt\u00E4misess\u00E4\u0020oli\u0020ongelmia.'
                    }]);
                } finally {
                    this.isLoading = false;
                }
            },
            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 itemData = this.cart.items.filter((item) => item['item_id'] === itemId);
                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: 'Tuotetta\u0020ei\u0020voitu\u0020poistaa\u0020tarjouksesta.'
                        }]);
                        this.isLoading = false;
                    }
                }).then(result => {
                    window.dispatchMessages && window.dispatchMessages([{
                        type: result.success ? 'success' : 'error',
                        text: result.success
                            ? 'Poistit\u0020kohteen.'
                            : result.error_message
                    }], result.success ? 5000 : 0);

                    if (result.success && itemData) {
                        window.dispatchEvent(new CustomEvent('cart-item-removed', { detail: itemData }));
                    }
                    window.dispatchEvent(new Event('reload-customer-section-data'));
                });
            },
            isMobile() {
                return /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
            },
            getScrollbarWidth() {
                return this.isMobile() ? 0 : window.innerWidth - document.documentElement.clientWidth;
            },
            scrollLock(use = true) {
                if (use) {
                    const scrollbarWidth = this.getScrollbarWidth();
                    const scrollbarStyle = document.createElement('style');

                    
                    scrollbarStyle.setAttribute('id', 'scrollbar-style');
                    scrollbarStyle.textContent = `
                    body {
                        overflow: hidden !important;
                        scrollbar-gutter: none;

                        &::-webkit-scrollbar {
                            display: none;
                        }
                    }`;

                    document.body.classList.add('overflow-hidden');
                    document.body.style.paddingRight = scrollbarWidth + 'px';
                    document.head.appendChild(scrollbarStyle);
                } else {
                    const scrollbarStyle = document.getElementById('scrollbar-style');
                    document.body.classList.remove('overflow-hidden');
                    document.body.style.paddingRight = '';

                    if (scrollbarStyle) {
                        scrollbarStyle.remove();
                    }
                }
            },
            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() {
                const promoBanner = document.getElementById('global-promo-banner');
                if (promoBanner) {
                    promoBanner.style.zIndex = 'auto';
                }
                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 });
                setTimeout(() => {
                    const promoBanner = document.getElementById('global-promo-banner');

                    if (promoBanner) {
                        promoBanner.style.zIndex = '';
                    }
                }, 500);
            },
            getSectionDataExtraActions() {
                if (!this.cart.extra_actions) {
                    return '';
                }

                const contentNode = document.createElement('div');
                contentNode.innerHTML = this.cart.extra_actions;

                hyva.activateScripts(contentNode);

                return contentNode.innerHTML;
            },
            cartItemLabels: [],
            generateLabelInitFunction: function (labelConfig) {
                const functionName = `initAmlabel${labelConfig.productId}`;
                let labelFn = null;

                if(typeof this[functionName] !== 'undefined') {
                    return this[functionName];
                }

                labelFn = function () {
                    return {
                        element: null,
                        parent: null,
                        initialized: false,
                        wrapperClass: '',
                        labelContainer: null,
                        config: labelConfig,
                        initLabel: function ($el) {
                            this.element = $el;
                            this.labelContainer = this.$refs.amLabel;
                            this.parent = $el.parentElement;
                            this.wrapperClass = `.amlabel-position-${this.config.position}-${this.config.product}-${this.config.mode}`;
                            this.render();
                        },
                        render: function () {
                            if (this.element.dataset.amlabelObserved) {
                                return;
                            }
                            this.element.dataset.amlabelObserved = true;
                            this.parentContainerProcessor.process(this);
                            this.labelItemProcessor.process(this);
                            this.initialized = true;
                        },
                        resize: function () {
                            this.config.size && this.labelItemProcessor.setLabelSize(this);
                        }
                    };
                };
                this[functionName] = labelFn;

                return labelFn;
            },
            updateLabels: async function (data) {
                if (!data?.cart?.items) {
                    return;
                }

                const postUrl = BASE_URL + 'omhyva_amastylabel/ajax/minicartlabel/';

                return await fetch(postUrl, {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded',
                        'X-Requested-With': 'XMLHttpRequest'
                    }
                })
                .then(response => response.json())
                .then(result => {
                    if (result.labels) {
                        this.cartItemLabels = result.labels;
                    }
                })
                .catch(error => {
                    console.error('Failed to update labels:', error);
                    return {};
                });
            },
            async updateItemWarranty(item, warrantyValue) {
                const itemId = item.item_id;
                this.isLoading = true;
                const formKey = hyva.getFormKey();
                const postUrl = BASE_URL + 'checkout/sidebar/updateProductWarranty/';

                try {
                    const response = await fetch(postUrl, {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
                            'X-Requested-With': 'XMLHttpRequest'
                        },
                        body: new URLSearchParams({
                            'form_key': formKey,
                            'item_id': itemId,
                            'warranty': warrantyValue
                        }),
                        credentials: 'include'
                    });

                    if (response.redirected) {
                        window.location.href = response.url;
                        return;
                    }

                    if (!response.ok) {
                        throw new Error('Network response was not ok');
                    }

                    const result = await response.json();

                    if (result.success) {
                        this.skipRequestingUpsellProducts = true;
                        window.dispatchEvent(new Event('reload-customer-section-data'));
                        window.dispatchMessages && window.dispatchMessages([{
                            type: 'success',
                            text: 'Tuotetakuu\u0020p\u00E4ivitetty.'
                        }], 5000);
                    } else {
                        window.dispatchMessages && window.dispatchMessages([{
                            type: 'error',
                            text: result.error_message || 'Tuotetakuuta\u0020ei\u0020voitu\u0020p\u00E4ivitt\u00E4\u00E4.'
                        }]);
                    }
                } catch (error) {
                    console.error('Error:', error);
                    window.dispatchMessages && window.dispatchMessages([{
                        type: 'error',
                        text: 'Takuun\u0020p\u00E4ivitt\u00E4misess\u00E4\u0020oli\u0020ongelmia.'
                    }]);
                } finally {
                    this.isLoading = false;
                }
            },
        }
    }</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" x-show="open" class="fixed inset-y-0 right-0 z-30 flex w-full max-w-[500px] h-full" @keydown.escape.stop.prevent="closeCartDrawer"><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="Sulje&#x20;minivaunu"></div><div class="w-full relative 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="Ostoskori" @keydown.escape.stop.prevent="closeCartDrawer"><div class="bg-pallas flex flex-col h-full max-h-screen shadow-xl w-full overflow-x-hidden overflow-y-auto"> <header class="relative px-[24px] py-[16px]"><p id="cart-drawer-title" class="text-[18px] font-[500] leading-[28px] text-gray-900"><div class="flex items-center"><span @click="closeCartDrawer()" class="mr-[20px]" :class="{ 'rotate-180': !open, 'rotate-0': open }"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="cursor-pointer transition-transform duration-300" alt="Expand icon" role="img">
<g id="icon/arrow-redirect">
<path id="Vector 19 (Stroke)" fill-rule="evenodd" clip-rule="evenodd" d="M3.82849 10L9.62138 15.7929L8.20717 17.2072L1.00006 10L8.20717 2.79294L9.62138 4.20715L3.82849 10Z" fill="black"/>
<path id="Vector 20 (Stroke)" fill-rule="evenodd" clip-rule="evenodd" d="M19 11L3 11L3 9L19 9L19 11Z" fill="black"/>
</g>
<title>redirect</title></svg>
</span> <span class="text-h3-sm font-bold font-helvetica text-left text-black leading-[24px]">Ostoskori</span> <span x-show="!isCartEmpty()" x-text="cart.summary_count" class="inline-flex items-center justify-center text-pallas px-[6px] py-[2px] text-center min-w-[24px] min-h-[24px] gap-xxs rounded-full bg-primary text-caption font-bold leading-[20px] ml-[8px]"></span></div><span class="items-total text-[12px]" x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount" x-text="getItemCountTitle()"></span></p></header> <template x-if="!itemsCount"><div class="relative text-body px-[16px] py-[24px] border-bs sm:px-[24px] border-container">Ostoskori on tyhjä</div></template><template x-if="itemsCount"><div class="w-full h-full flex-col justify-start items-start gap-xs flex overflow-y-auto overscroll-y-contain hide-scrollbar box-content pr-[17px]"><template x-for="(item, index) in cartItems"><template x-if="!item.is_warranty_product"><div class="w-full"><template x-if="!item.is_free_gift"><div class="w-full self-stretch py-[16px] border-b border-gray-light"><div class="self-stretch flex-col justify-start items-start gap-m flex px-[20px]"><!-- Product Image & Details Row --><div class="self-stretch justify-start items-center gap-l inline-flex"><!-- Product Image --><template x-if="item.product_has_url && item.is_visible_in_site_visibility"><a :href="item.product_url" class="flex-col justify-start items-start inline-flex overflow-hidden" :aria-label="hyva.strf('Tuote\u0020\u0022\u00250\u0022', item.product_name)"><img class="self-stretch w-20 h-20 object-contain" :src="item.product_image.src" :width="item.product_image.width" :height="item.product_image.height" loading="lazy" :alt="item.product_name"/></a></template><template x-if="!item.product_has_url || !item.is_visible_in_site_visibility"><div class="flex-col justify-start items-start inline-flex overflow-hidden"><img class="self-stretch w-20 h-20 object-contain" :src="item.product_image.src" :width="item.product_image.width" :height="item.product_image.height" loading="lazy" :alt="item.product_name"/></div></template><!-- Product Details --><div class="grow shrink basis-0 flex-col justify-center items-start gap-xs inline-flex"><div class="self-stretch text-black text-caption font-bold font-helvetica leading-[20px]"><span class="line-clamp-2" x-html="item.product_name"></span></div><!-- Price Display --><div class="self-stretch justify-start items-center gap-xs inline-flex"><div class="justify-start items-end gap-xxs flex"><div class="text-black text-caption font-normal font-helvetica leading-[20px]">Hinta:</div><div class="font-helvetica"><template x-if="parseFloat(item.regular_price) > parseFloat(item.product_price_value)"><div class="flex gap-xxs height-[20px] items-end"><span class="line-through text-caption-sm font-normal leading-4.375 text-gray-medium" x-text="hyva.formatPrice(item.regular_price)"></span> <span class="text-black text-caption leading-[20px] font-bold" x-text="hyva.formatPrice(item.product_price_value)"></span></div></template><template x-if="!item.regular_price || parseFloat(item.regular_price) <= parseFloat(item.product_price_value)"><span class="text-black text-caption leading-[20px] font-bold" x-text="hyva.formatPrice(item.product_price_value)"></span></template></div></div></div></div></div><!-- Options/Discount Badges --><template x-for="option in item.options"><div class="self-stretch justify-start items-start gap-xxs inline-flex"><div class="px-[8px] py-[5px] bg-primary justify-center items-center gap-xxs flex"><p class="text-neutral-50 text-[12px] font-normal font-helvetica leading-[15px]" x-text="option.label + ': ' + option.value"></p></div></div></template><div class="flex items-center justify-start h-fit w-full"> <div class="flex items-center justify-start h-fit w-full gap-xxs flex-wrap"><template x-for="(productLabels, key) in cartItemLabels"><template x-for="(label) in productLabels"><template x-if="key === item.product_id"><div class="max-w-full h-fit-content w-fit-content z-5" x-data="{ ...generateLabelInitFunction(label.labelConfig)(), parentContainerProcessor: initParentContainerProcessor(), labelItemProcessor: initLabelItemProcessor() }" x-init="initLabel($el)"><div x-ref="amLabel" x-cloak x-show="initialized" x-transition:enter="transition ease-out duration-250" x-transition:enter-start="opacity-0 transform scale-90" x-transition:enter-end="opacity-100 transform scale-100" @resize.window.debounce="resize()" @click="labelItemProcessor.openLink($event, label.labelConfig.redirectUrl)" class="group relative amasty-label-container select-none h-fit" :class="'amasty-label-container-' + label.labelConfig.key + ' amasty-label-for-' + label.labelConfig.productId" :style="label.labelConfig.style + ' clip-path: none;'" :data-amlabel-order="label.labelConfig.priority" :aria-describedby="label.labelConfig.isShowTooltip ? 'label-tooltip-' + label.labelConfig.key : null"><template x-if="label.labelConfig.isShowTooltip && !!label.labelConfig.tooltipConfig"><div :id="'label-tooltip-' + label.labelConfig.key" x-ref="tooltip" class="absolute top-[-40px] invisible opacity-0 transition-opacity text-center rounded z-[-1] w-max max-w-[200px] mb-3 group-hover:z-30 shadow-md px-5 py-2 group-hover:visible group-hover:opacity-100 after:absolute after:border-color-inherit after:top-[calc(100%-theme(space.1))] after:left-1/2 after:-translate-x-1/2 after:border-4 after:rotate-45" :class="{ 'hidden lg:block': label.labelConfig.tooltipConfig.status === 3, 'hidden' : label.labelConfig.tooltipConfig.status === 1, }" :style="`background-color: ${label.labelConfig.tooltipConfig.color}; border-color: ${label.labelConfig.tooltipConfig.color}`" role="tooltip"><span :style="`color: ${label.labelConfig.tooltipConfig.text_color}`" x-text="label.labelConfig.tooltipConfig.text"></span></div></template><div class="amlabel-text text-center whitespace-nowrap flex flex-row items-center justify-center gap-2"><span x-text="label.labelConfig.text"></span> <template x-if="label.labelConfig.isShowTooltip && !!label.labelConfig.tooltipConfig"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 20 20" fill="none" role="img">
    <path d="M10.0011 0.000306159C11.3343 -0.0035786 12.6541 0.265599 13.8793 0.791246C15.0711 1.29154 16.1552 2.01686 17.0724 2.92751C17.9832 3.8446 18.7086 4.92864 19.2089 6.12029C19.7346 7.34532 20.0038 8.66503 19.9999 9.99807C20.0042 11.3113 19.7461 12.6122 19.2409 13.8243C18.7363 15.0375 17.9963 16.1387 17.0637 17.0643C16.138 17.9968 15.0367 18.7367 13.8234 19.2412C12.6111 19.7464 11.3101 20.0044 9.99674 20.0002C8.66356 20.0041 7.3437 19.7349 6.11854 19.2093C4.92676 18.709 3.8426 17.9836 2.92541 17.073C2.01466 16.1559 1.28926 15.0719 0.788913 13.8802C0.263665 12.6543 -0.00480539 11.3339 6.50998e-05 10.0002C-0.00418938 8.68702 0.253889 7.38616 0.759159 6.17399C1.26373 4.96082 2.00368 3.85964 2.93629 2.93404C3.86199 2.00153 4.9633 1.26165 6.1766 0.757141C7.38837 0.252955 8.6886 -0.00434762 10.0011 0.000306159ZM13.0883 17.4365C14.0623 17.0311 14.9467 16.4373 15.6907 15.6892C16.4396 14.9446 17.0318 14.0576 17.4324 13.0806C17.8353 12.1037 18.0412 11.0569 18.0384 10.0002C18.0486 8.58411 17.6763 7.19146 16.9607 5.96936C16.259 4.75337 15.2493 3.74373 14.0331 3.04216C12.8109 2.32659 11.4181 1.9543 10.0018 1.96459C8.94505 1.96172 7.89813 2.16763 6.92118 2.5705C5.94398 2.97104 5.0569 3.56319 4.31224 4.31201C3.56333 5.05659 2.97112 5.94358 2.57054 6.92067C2.16762 7.89751 1.96169 8.94432 1.96457 10.001C1.95427 11.4171 2.3266 12.8098 3.04225 14.0319C3.7442 15.2477 4.7542 16.2571 5.97049 16.9583C7.19273 17.6739 8.58552 18.0462 10.0018 18.0359C11.06 18.0401 12.1086 17.8364 13.0883 17.4365Z" fill="currentColor"/>
    <path d="M11.0391 11.2803C10.9844 11.4535 10.9548 11.7223 10.9502 12.0869H9.10449C9.13184 11.3168 9.20475 10.7859 9.32324 10.4943C9.44173 10.1981 9.74707 9.85858 10.2393 9.47581L10.7383 9.08621C10.9023 8.96317 11.0345 8.82875 11.1348 8.68293C11.3171 8.43231 11.4082 8.15662 11.4082 7.85587C11.4082 7.50955 11.3057 7.19514 11.1006 6.91261C10.9001 6.62554 10.5309 6.482 9.99316 6.482C9.46452 6.482 9.08854 6.65743 8.86523 7.00831C8.64648 7.35918 8.53711 7.72372 8.53711 8.10194H6.56152C6.61621 6.80325 7.06966 5.88278 7.92188 5.34052C8.45964 4.9942 9.12044 4.82104 9.9043 4.82104C10.9342 4.82104 11.7887 5.06711 12.4678 5.55925C13.1514 6.05138 13.4932 6.78047 13.4932 7.74651C13.4932 8.33889 13.3451 8.83786 13.0488 9.24342C12.8757 9.48948 12.543 9.8039 12.0508 10.1867L11.5654 10.5626C11.3011 10.7677 11.1257 11.0069 11.0391 11.2803ZM11.0938 14.9986H9.05664V13.0233H11.0938V14.9986Z" fill="currentColor"/>
<title>question</title></svg>
</template></div></div></div></template></template></template></div></div><div class="h-9 justify-between items-center flex w-full"><div class="h-9 justify-start items-center gap-l inline-flex"><!-- Trash Icon --><button type="button" @click="deleteItemFromCart(item.item_id)" class="hover:bg-transparent focus:bg-transparent hover:border-none focus:border-none hover:text-inherit w-9 h-9 justify-center items-center flex border-none" :aria-label="hyva.strf('Poista\u0020tuote\u0020\u0022\u00250\u0022\u0020ostoskorista', item.product_name)"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true">
  <path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/>
</svg>
</button> <!-- Quantity Changer --><div class="h-[36px] justify-center items-center gap-xs flex min-w-[124px]"> <template x-if="!(item.warranty_options_list !== undefined && item.warranty_options_list.length >= 1)"><button type="button" @click="updateItemQuantity(item.item_id, item.qty - 1)" :disabled="isLoading || item.qty <= 1 || (item.warranty_options_list !== undefined && item.warranty_options_list.length >= 1)" class="hover:bg-neutral-50 hover:border-black hover:text-inherit disabled:border-gray-light p-[8px] bg-neutral-50 focus:bg-neutral-50 focus:border-2 border-2 hover:border-2 border-gray-light justify-center items-center flex opacity-100 disabled:opacity-100"><div class="w-[16px] h-[16px] justify-center items-center flex overflow-hidden"><span x-show="!(isLoading || item.qty <= 1 || (item.warranty_options_list !== undefined && item.warranty_options_list.length >= 1))"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="24" viewBox="0 0 20 4" fill="none" role="img">
<g id="Group 273">
<path id="Path 209" d="M20 0.837402V3.16335L0 3.16252V0.837402H20Z" fill="black"/>
</g>
<title>collapse</title></svg>
</span> <!-- Show Collapse Icon When Disabled --><span x-show="isLoading || item.qty <= 1 || (item.warranty_options_list !== undefined && item.warranty_options_list.length >= 1)"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 16 2" fill="none" role="img">
<g id="Group 273_2">
<path id="Path 209_2" d="M16 0.0698242V1.93058L0 1.92992V0.0698242H16Z" fill="#CFCFD5"/>
</g>
<title>decrease</title></svg>
</span></div></button></template> <div class="w-[36px] text-center text-black text-h3-sm font-bold font-helvetica leading-6"><span x-text="item.qty"></span></div> <template x-if="!(item.warranty_options_list !== undefined && item.warranty_options_list.length >= 1)"><button type="button" @click="updateItemQuantity(item.item_id, item.qty + 1)" :disabled="isLoading || item.qty >= item.available_qty || (item.warranty_options_list !== undefined && item.warranty_options_list.length >= 1)" class="hover:bg-neutral-50 hover:border-black hover:text-inherit disabled:border-gray-light p-[8px] bg-neutral-50 focus:bg-neutral-50 focus:border-2 border-2 hover:border-2 border-gray-light justify-center items-center flex opacity-100 disabled:opacity-100"><span class="w-[16px] h-[16px] justify-center items-center flex overflow-hidden" x-show="!(isLoading || item.qty >= item.available_qty || (item.warranty_options_list !== undefined && item.warranty_options_list.length >= 1))"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" role="img">
<g id="Group 273_3">
<path id="Path 209_3" d="M20 8.83744V11.1634H11.1626V20H8.83744V11.1626H0V8.83744H8.83744V0H11.1634V8.83744H20Z" fill="black"/>
</g>
<title>expand</title></svg>
</span> <span class="w-[16px] h-[16px] justify-center items-center flex overflow-hidden" x-show="isLoading || item.qty >= item.available_qty || (item.warranty_options_list !== undefined && item.warranty_options_list.length >= 1)"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" role="img">
    <g id="Group 273_4">
        <path id="Path 209_4" d="M20 8.83744V11.1634H11.1626V20H8.83744V11.1626H0V8.83744H8.83744V0H11.1634V8.83744H20Z" fill="#CFCFD5"/>
    </g>
<title>expand-disabled</title></svg>
</span></button></template></div></div><!-- Subtotal --><div class="justify-end items-center gap-xxs flex"><div class="text-black text-h3-sm font-bold font-helvetica leading-[24px]"><span x-text="hyva.formatPrice(item.product_price_value * item.qty)"></span></div></div></div><template x-if="item.warranty_options_list"><div class="warranty-options-wrapper w-full mt-4"><div class="space-y-3"><div class="flex items-center"><input type="radio" :name="`cart_warranty_${item.item_id}`" :id="`cart_warranty_${item.item_id}_none`" value="false" x-model="item.selected_warranty_product" @change="updateItemWarranty(item, 'false')" class="radio mr-[6px] !block focus:!ring-0 focus:!ring-transparent !border-gray-dark w-[18px] h-[18px]"><label :for="`cart_warranty_${item.item_id}_none`" class="block font-normal text-xs leading-[13.8px] text-gray-dark mt-[3px] mb-0">Ei lisätakuuta</label></div><template x-for="warranty_option in item.warranty_options_list" :key="warranty_option.id"><div class="flex items-center justify-between"><div class="flex items-center flex-1"><input type="radio" :name="`cart_warranty_${item.item_id}`" :id="`cart_warranty_${item.item_id}_${warranty_option.id}`" :value="warranty_option.id" x-model="item.selected_warranty_product" @change="updateItemWarranty(item, warranty_option.id)" class="radio mr-[6px] !block focus:!ring-0 focus:!ring-transparent !border-gray-dark w-[18px] h-[18px]"><label :for="`cart_warranty_${item.item_id}_${warranty_option.id}`" class="mb-0 font-normal text-xs leading-[13.8px] text-gray-dark mt-[3px]" x-text="warranty_option.warranty_option_text || warranty_option.name"></label></div><div class="text-sm font-medium text-gray-900" x-text="`+ ${hyva.formatPrice(warranty_option.price)}`"></div></div></template></div></div></template></div></div></template><template x-if="item.is_free_gift"><div class="w-full py-[16px] border-b border-gray-light"><div class="bg-gray-light-25 gap-sm flex py-[16px] px-[20px] justify-between items-center"><!-- Product Image & Details Row --><div class="w-full items-center gap-xs flex justify-between"><div class="w-full items-center gap-sm flex"><!-- Product Image --><template x-if="item.product_has_url && item.is_visible_in_site_visibility"><a :href="item.product_url" class="shrink-0" :aria-label="hyva.strf('Tuote\u0020\u0022\u00250\u0022', item.product_name)"><img class="self-stretch h-14 w-14 object-contain" :src="item.product_image.src" :width="item.product_image.width" :height="item.product_image.height" loading="lazy" :alt="item.product_name"/></a></template><template x-if="!item.product_has_url || !item.is_visible_in_site_visibility"><div class="shrink-0"><img class="self-stretch h-14 w-14 object-contain" :src="item.product_image.src" :width="item.product_image.width" :height="item.product_image.height" loading="lazy" :alt="item.product_name"/></div></template><!-- Product Details --><div class="text-black text-caption-bold"><span class="line-clamp-2" x-html="item.product_name"></span></div></div><template x-if="item.free_message"><div x-data="{ showTooltip: false, hideOnScroll() { this.showTooltip = false; } }" x-init="window.addEventListener('scroll', hideOnScroll)" class="relative inline-block" ><div @mouseenter="showTooltip = true" @mouseleave="showTooltip = false" @click="showTooltip = !showTooltip" class="cursor-pointer text-center" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="mr-[8px]" aria-hidden="true">
    <path d="M10.0011 0.000306159C11.3343 -0.0035786 12.6541 0.265599 13.8793 0.791246C15.0711 1.29154 16.1552 2.01686 17.0724 2.92751C17.9832 3.8446 18.7086 4.92864 19.2089 6.12029C19.7346 7.34532 20.0038 8.66503 19.9999 9.99807C20.0042 11.3113 19.7461 12.6122 19.2409 13.8243C18.7363 15.0375 17.9963 16.1387 17.0637 17.0643C16.138 17.9968 15.0367 18.7367 13.8234 19.2412C12.6111 19.7464 11.3101 20.0044 9.99674 20.0002C8.66356 20.0041 7.3437 19.7349 6.11854 19.2093C4.92676 18.709 3.8426 17.9836 2.92541 17.073C2.01466 16.1559 1.28926 15.0719 0.788913 13.8802C0.263665 12.6543 -0.00480539 11.3339 6.50998e-05 10.0002C-0.00418938 8.68702 0.253889 7.38616 0.759159 6.17399C1.26373 4.96082 2.00368 3.85964 2.93629 2.93404C3.86199 2.00153 4.9633 1.26165 6.1766 0.757141C7.38837 0.252955 8.6886 -0.00434762 10.0011 0.000306159ZM13.0883 17.4365C14.0623 17.0311 14.9467 16.4373 15.6907 15.6892C16.4396 14.9446 17.0318 14.0576 17.4324 13.0806C17.8353 12.1037 18.0412 11.0569 18.0384 10.0002C18.0486 8.58411 17.6763 7.19146 16.9607 5.96936C16.259 4.75337 15.2493 3.74373 14.0331 3.04216C12.8109 2.32659 11.4181 1.9543 10.0018 1.96459C8.94505 1.96172 7.89813 2.16763 6.92118 2.5705C5.94398 2.97104 5.0569 3.56319 4.31224 4.31201C3.56333 5.05659 2.97112 5.94358 2.57054 6.92067C2.16762 7.89751 1.96169 8.94432 1.96457 10.001C1.95427 11.4171 2.3266 12.8098 3.04225 14.0319C3.7442 15.2477 4.7542 16.2571 5.97049 16.9583C7.19273 17.6739 8.58552 18.0462 10.0018 18.0359C11.06 18.0401 12.1086 17.8364 13.0883 17.4365Z" fill="currentColor"/>
    <path d="M11.0391 11.2803C10.9844 11.4535 10.9548 11.7223 10.9502 12.0869H9.10449C9.13184 11.3168 9.20475 10.7859 9.32324 10.4943C9.44173 10.1981 9.74707 9.85858 10.2393 9.47581L10.7383 9.08621C10.9023 8.96317 11.0345 8.82875 11.1348 8.68293C11.3171 8.43231 11.4082 8.15662 11.4082 7.85587C11.4082 7.50955 11.3057 7.19514 11.1006 6.91261C10.9001 6.62554 10.5309 6.482 9.99316 6.482C9.46452 6.482 9.08854 6.65743 8.86523 7.00831C8.64648 7.35918 8.53711 7.72372 8.53711 8.10194H6.56152C6.61621 6.80325 7.06966 5.88278 7.92188 5.34052C8.45964 4.9942 9.12044 4.82104 9.9043 4.82104C10.9342 4.82104 11.7887 5.06711 12.4678 5.55925C13.1514 6.05138 13.4932 6.78047 13.4932 7.74651C13.4932 8.33889 13.3451 8.83786 13.0488 9.24342C12.8757 9.48948 12.543 9.8039 12.0508 10.1867L11.5654 10.5626C11.3011 10.7677 11.1257 11.0069 11.0391 11.2803ZM11.0938 14.9986H9.05664V13.0233H11.0938V14.9986Z" fill="currentColor"/>
</svg>
</div><div x-show="showTooltip" x-transition:enter="transition-opacity duration-200" x-transition:leave="transition-opacity duration-200" class="absolute bottom-full mb-[16px] -right-[55px] w-64 p-[8px] bg-om-green text-white text-sm rounded shadow-lg text-center" @click.away="showTooltip = false" ><div x-text="item.free_message"></div></div></div></template></div><!-- Subtotal --><div class="h-9 items-end gap-xxs flex flex-col"><div class="text-black text-caption-bold"><span x-text="hyva.formatPrice(0)"></span></div><!-- Trash Icon --><button type="button" @click="deleteItemFromCart(item.item_id)" class="hover:bg-transparent focus:bg-transparent hover:border-none focus:border-none hover:text-inherit w-9 h-9 justify-center items-center flex border-none" :aria-label="hyva.strf('Poista\u0020tuote\u0020\u0022\u00250\u0022\u0020ostoskorista', item.product_name)"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true">
  <path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/>
</svg>
</button></div></div></div></template></div></template></template></div></template><!-- Upsell Section --><div id="upsell-container" class="bg-white"></div><template x-if="itemsCount"><div> <!-- Order Summary Section --><div class="font-helvetica"><!-- Summary Header --><div class="order-summary-header flex justify-between items-center cursor-pointer py-[16px] px-[20px]" @click="isOrderSummaryOpen = !isOrderSummaryOpen" @keydown.space.prevent.stop="isOrderSummaryOpen = !isOrderSummaryOpen" @keydown.enter.prevent.stop="isOrderSummaryOpen = !isOrderSummaryOpen" tabindex="0" role="button" :aria-expanded="isOrderSummaryOpen" aria-controls="order-summary-content"><span class="font-bold text-h3-sm text-black leading-[24px]">Tilaus yhteensä:</span> <div class="flex items-center ml-auto"><span class="text-h3-sm font-bold text-black leading-[25.6px]" x-text="hyva.formatPrice(grandTotal)"></span> <svg class="mx-[16px]" width="8px" height="30px" viewBox="0 0 1 24" xmlns="http://www.w3.org/2000/svg"><rect x="0" y="0" width="1" height="24" fill="#cfcfd5"/></svg><div class="relative w-[20px] h-[20px]"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="transform transition-transform duration-200" :class="{ 'rotate-180': isOrderSummaryOpen }" aria-hidden="true">
<g id="icon/chevron">
<path id="Vector" d="M10 15.7592L0 5.75921L1.56895 4.1665L10 12.5976L18.4231 4.1665L20 5.75921L10 15.7592Z" fill="black"/>
</g>
</svg>
</div></div></div><!-- Summary Content --><div id="order-summary-content" x-show="isOrderSummaryOpen" x-transition class="pt-[4px] pb-[20px] px-[20px] gap-sm flex flex-col text-caption leading-[20px] font-normal"><div class="flex justify-between"><span>Välisumma</span> <span class="font-bold" x-text="hyva.formatPrice(subtotal)"></span></div><template x-if="totalSavings > 0"><div class="flex justify-between"><span>Säästöt yhteensä</span> <span class="font-bold" x-text="'-' + hyva.formatPrice(totalSavings)"></span></div></template><template x-if="''"><div class="flex justify-between"><span>Vero</span> <span class="font-bold">Laskettava</span></div></template><div class="flex justify-between"><span>Toimitus</span> <template x-if="!!shippingData.shipping_method"><div class="font-bold" x-text="shippingData.shipping_amount > 0 ? hyva.formatPrice(shippingData.shipping_amount) : 'Veloitukseton'" ></div></template><template x-if="!shippingData.shipping_method"><div class="font-bold">Laskettava</div></template></div></div></div><div class="flex pb-[20px] px-[20px] bg-pallas mt-auto"><div class="w-full transition duration-150 ease-in-out rounded-lg flex flex-col xsm:flex-row gap-l items-center"><a href="https://explore.omsystem.com/fi/fi/checkout/cart/" class="btn btn-tritical-reversed w-full btn-size-lg shadow-none leading-[16px] px-11">Näytä ja muokkaa ostoskoria</a> <button @click.prevent.stop="closeCartDrawer; $dispatch('toggle-authentication', {url: 'https://explore.omsystem.com/fi/fi/checkout/'});" href="https://explore.omsystem.com/fi/fi/checkout/" class="btn btn-primary btn-size-lg w-full md:max-w-[200px] border-none">Kassa</button></div><div x-html="getSectionDataExtraActions()"></div></div></div></template></div></div></div></section> <!--Authentication Pop-Up--><!-- BLOCK authentication-popup --> <script>
    function initAuthentication() {
        return {
            open: false,
            forceAuthentication: false,
            checkoutUrl: 'https://explore.omsystem.com/fi/fi/checkout/index/',
            errors: 0,
            hasCaptchaToken: 0,
            displayErrorMessage: false,
            errorMessages: [],
            setErrorMessages: function setErrorMessages(messages) {
                this.errorMessages = [messages];
                this.displayErrorMessage = this.errorMessages.length;
            },
            submitForm: function() {
                
                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 = '';
                const recaptchaField = fieldName && form[fieldName];
                if (recaptchaField) {
                    bodyFields[fieldName] = recaptchaField.value;
                }
                fetch('https://explore.omsystem.com/fi/fi/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="Sulje&#x20;paneeli" 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>Sulje paneeli</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">Kassalle OMA TILI:n avulla</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>Sähköpostiosoite</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>Salasana</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">Kirjaudu sisään</button> <a href="https://explore.omsystem.com/fi/fi/customer/account/forgotpassword/">Unohditko salasanasi?</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">Kassalle UUSI</strong></p><div class="block-content"><p class="mb-1">Tilin luomisella on monia etuja:</p><ul class="list-disc pl-5"><li> Katso tilauksen ja toimituksen tila</li> <li> Seuraa tilaushistoriaa</li> <li> Tarkista nopeammin</li></ul><div class="actions-toolbar flex justify-between mt-6 mb-2 items-center"><a href="https://explore.omsystem.com/fi/fi/customer/account/create/" class="inline-flex btn btn-primary">Luo tili</a></div></div></div></div></template></div></div></section><!-- /BLOCK authentication-popup --></div> </header><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div><div class="columns"><div class="column main"> <div   class="h-dvh aspect-auto min-w-full md:max-h-[80dvh] md:min-h-[70vh]" x-data="{ headerHeight: 0, isMobile: true, hasCopy: false, init() { const matchMedia = window.matchMedia('(max-width: 767px)'); this.onChangeMedia(matchMedia); if (typeof matchMedia.onchange !== 'object') { matchMedia.addListener((event) => this.onChangeMedia(event)); } else { matchMedia.addEventListener('change', (event) => this.onChangeMedia(event)) } this.navigationActive = false; this.updateHeight(); window.addEventListener('resize', () => this.updateHeight()); }, onChangeMedia(mediaQuery) { if (this.isMobile !== mediaQuery.matches) { this.isMobile = mediaQuery.matches; } }, updateHeight() { if (window.innerWidth < 768) { if (this.hasCopy) { this.$el.style.removeProperty('height'); return; } const header = document.querySelector('.page-header'); if (header) { this.headerHeight = header.offsetHeight; this.$el.style.height = this.navigationActive ? `calc(100dvh - ${this.headerHeight}px - 44px)` : `calc(100dvh - ${this.headerHeight}px)`; } } else { this.$el.style.removeProperty('height'); } } }" data-id="7a6b0c96-61ea-43c1-aafb-47cb280ca106"><div class="h-full "><div x-ref="mainContainer"  data-new-url="false" x-init=" updateHeight(); updateBgHotspot('', '--mobile-background-image', $el); updateBgHotspot('', '--background-image', $el); " @resize.window="updateHeight();" alt="" style=" --mobile-background-image: url(''); --background-image: url(''); " class="bg-[image:var(--mobile-background-image)] md:bg-[image:var(--background-image)] h-full flex flex-col bg-center relative w-screen ms-[calc(50%-50vw)] bg-cover m-[0] font-extrabold md:justify-center flex justify-end text-center md:text-center md:items-center">  <div x-ref="bannerContent" style="--nav-bg-color: linear-gradient(180deg, rgba(0, 0, 0, 0.00) 0%,  100%);" class="w-full z-20 h-max min-h-max py-[20px]  pb-[44px] px-[16px] flex flex-col gap-l md:max-w-2xl md:mx-auto md:gap-[0] md:pb-[0] md:py-[0] md:px-[0] md:h-auto  absolute self-[anchor-center] self-end md:self-center justify-self-[anchor-center] md:align-center md:items-center md:text-center">  <div class="md:gap-xxxl md:p-0 md:pt-[40px] md:w-full flex flex-col gap-xl items-center md:max-w-videoHeroBanner "> <div class="font-neue flex flex-col gap-m text-pallas md:w-full md:gap-sm">  <h2 class="font-extrabold text-h2-sm md:text-h1">Tutki kaupunkia OM SYSTEMin kanssa</h2>   <h3 class="text-h3-sm md:text-h3 font-machina">It’s in our nature.</h3> </div>  <div class="gap-xs flex items-center flex-nowrap flex-col w-full md:w-auto md:flex-row md:gap-l md:self-center">    <a href="https://explore.omsystem.com/fi/fi/promotions?icid=explore_the_city_may26-internal-hp-cta-promos"  target="_self" class="btn btn-primary text-pallas btn-size-lg w-full max-w-[408px]">Osta nyt</a>   </div></div></div> <div class="relative w-full h-full"><div x-data="{ ...videoControls(true), ...viewportAutoplay(true), isMobile: false, setVideoSource() { const mediaQuery = window.matchMedia('(max-width: 767px)'); this.isMobile = mediaQuery.matches; const wasPlaying = !this.$refs.video.paused; this.$refs.video.src = this.isMobile ? 'https://cdn.sanity.io/files/ipox1240/live/571e70c3345c59d73b3e1df55ff05e25dbd72e7b.mp4' : 'https://cdn.sanity.io/files/ipox1240/live/37b61ff06905d8ad7e74c073f0157d41280151f8.mp4'; this.$refs.video.poster = this.isMobile ? '' : ''; this.$refs.video.load(); if (wasPlaying) { const playPromise = this.$refs.video.play(); if (playPromise !== undefined) { playPromise.catch(error => { console.warn('Could not resume video after source change:', error); }); } } } }" x-init="init(); setVideoSource(); updateVideoPosterHotspot( isMobile ? '' : '', $refs.video ); window.matchMedia('(max-width: 767px)').addEventListener('change', () => setVideoSource());" class="absolute inset-0"><video x-ref="video" class="w-full h-full object-cover absolute inset-0 md:!max-h-full" loop playsinline muted poster="" data-new-poster-url="false" alt="isMobile ? '' : ''"></video> <div class="actions-container absolute top-[16px] end-[16px] flex gap-4 z-20 md:bottom-[40px] md:end-[40px] md:top-[unset]"><button @click="togglePlay" class="cursor-pointer"> <template x-if="!isPlaying"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="text-white" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.2635 8.70436C17.2557 9.28318 17.2557 10.7169 16.2635 11.2957L5.75581 17.4252C4.75582 18.0085 3.5 17.2872 3.5 16.1295L3.5 3.87054C3.5 2.71286 4.75582 1.99155 5.75581 2.57488L16.2635 8.70436ZM14.5154 10L5.5 4.74106L5.5 15.259L14.5154 10Z" fill="#FAFAFA"/>
<title>play</title></svg>
</template> <template x-if="isPlaying"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="text-white" role="img">
<path d="M5 3H7V17H5V3Z" fill="#FAFAFA"/>
<path d="M13 3H15V17H13V3Z" fill="#FAFAFA"/>
<title>pause</title></svg>
</template></button> <button @click="toggleMute" class="cursor-pointer"><template x-if="isMuted"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="text-white" role="img">
<path d="M13 12.5L18 7.5" stroke="#FAFAFA" stroke-width="1.66667"/>
<path d="M18 12.5L13 7.5" stroke="#FAFAFA" stroke-width="1.66667"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 4.9207L5.8317 7.13851C5.49553 7.37383 5.09512 7.50005 4.68478 7.50005H3V12.5H4.68478C5.09512 12.5 5.49554 12.6263 5.8317 12.8616L9 15.0794V4.9207ZM8.63981 2.73153C9.63397 2.03561 11 2.74684 11 3.96037V16.0397C11 17.2533 9.63397 17.9645 8.63981 17.2686L4.68478 14.5H1.3C1.13431 14.5 1 14.3657 1 14.2V5.80005C1 5.63436 1.13431 5.50005 1.3 5.50005H4.68478L8.63981 2.73153Z" fill="#FAFAFA"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.03341 8.5C6.1991 8.5 6.33341 8.63431 6.33341 8.8V13.5H4.66675V8.8C4.66675 8.63431 4.80106 8.5 4.96675 8.5H6.03341Z" fill="#FAFAFA"/>
<title>sound-off</title></svg>
</template><template x-if="!isMuted"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="text-white" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 4.9207L5.8317 7.13851C5.49553 7.37383 5.09512 7.50005 4.68478 7.50005H3V12.5H4.68478C5.09512 12.5 5.49554 12.6263 5.8317 12.8616L9 15.0794V4.9207ZM8.63981 2.73153C9.63397 2.03561 11 2.74684 11 3.96037V16.0397C11 17.2533 9.63397 17.9645 8.63981 17.2686L4.68478 14.5H1.3C1.13431 14.5 1 14.3657 1 14.2V5.80005C1 5.63436 1.13431 5.50005 1.3 5.50005H4.68478L8.63981 2.73153Z" fill="#FAFAFA"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.03329 8.5C6.19898 8.5 6.33329 8.63431 6.33329 8.8V13.5H4.66663V8.8C4.66663 8.63431 4.80094 8.5 4.96663 8.5H6.03329Z" fill="#FAFAFA"/>
<path d="M15.5 16C16.7558 14.3287 17.5 12.2512 17.5 10C17.5 7.74879 16.7558 5.67132 15.5 4" stroke="#FAFAFA" stroke-width="2"/>
<path d="M13 13C13.6279 12.1643 14 11.1256 14 10C14 8.87439 13.6279 7.83566 13 7" stroke="#FAFAFA" stroke-width="2"/>
<title>sound-on</title></svg>
</template></button></div></div></div></div></div>  <script>
            document.addEventListener('alpine:init', () => {
                Alpine.data('videoControls', (autoplay) => ({
                    isPlaying: autoplay,
                    isMuted: autoplay,

                    init() {
                        this.$nextTick(() => {
                            const video = this.$refs.video;
                            video.muted = this.isMuted;

                            const attemptPlay = async () => {
                                if (!this.isPlaying) {
                                    return;
                                }

                                try {
                                    await video.play();
                                    this.isPlaying = true;
                                } catch (error) {
                                    if (error.name === 'AbortError') {
                                        
                                        document.addEventListener('click', () => {
                                            if (this.isPlaying) {
                                                video.play().catch(() => {});
                                            }
                                        }, { once: true });
                                    }

                                    this.isPlaying = false;
                                }
                            };

                            attemptPlay();
                        });
                    },

                    togglePlay() {
                        const video = this.$refs.video;
                        if (video.paused) {
                            video.play().then(() => {
                                this.isPlaying = true;
                            }).catch(error => {
                                console.error('Error playing video:', error);
                            });
                        } else {
                            video.pause();
                            this.isPlaying = false;
                        }
                    },

                    toggleMute() {
                        const video = this.$refs.video;
                        video.muted = !video.muted;
                        this.isMuted = video.muted;
                    }
                }));

                Alpine.data("viewportAutoplay", (autoPlayFlag) => ({
                    isPlaying: autoPlayFlag,
                    observer: null,

                    init() {
                        const video = this.$refs.video;

                        this.observer = new IntersectionObserver((entries) => {
                            entries.forEach(entry => {
                                if (entry.isIntersecting && entry.intersectionRatio >= 0.4) {
                                    if (this.isPlaying && video.paused) {
                                        video.play().catch(() => {});
                                    }
                                } else {
                                    if (this.isPlaying && !video.paused) {
                                        video.pause();
                                    }
                                }
                            });
                        }, {
                            threshold: [0, 0.4, 1]
                        });

                        this.observer.observe(video);
                    },
                }));
            });</script> </div> <div  style="--banner-image: url(); --banner-color: #000" alt="" data-new-url="" x-init="updateBgHotspot('','--banner-image', $el)" class="bannerWithText items-center bg-center bg-cover relative w-screen ms-[calc(50%-50vw)] text-pallas bg-[var(--banner-color)] bg-[image:var(--banner-image)]" data-id="07807233-16ea-431c-8aa4-b1e3984dcb82"><div class="w-full h-full flex flex-col max-w-2xl mx-auto gap-8 md:gap-10 pb-16 pt-10 md:py-25"><!-- Heading --> <div class="flex flex-col md:flex-row md:mx-auto md:items-center gap-5 md:gap-10"> <!-- Left Content --><div class="max-md:hidden h-auto flex flex-col gap-8 md:gap-xxxl max-md:px-4 md:pl-5 2xl:pl-10"><div class="flex flex-col gap-4 md:gap-5"><!-- Subheading -->  <h3 class="text-h2-sm md:text-h2 font-extrabold">Luonto. Kaiken ydin.</h3> <!-- Copies --> <p class='text-h3-sm font-normal leading-[120%]'>Luonto herättää uteliaisuuden meissä kaikissa. Siksi valmistamme tuotteita, jotka kannustavat sinua lähtemään ulos, tutkimaan luontoa ja löytämään uudelleen sen, kuka olet.</p> </div><!-- CTAS --> <div class="cta-container flex flex-col gap-4 items-center md:gap-5 md:items-start md:w-auto xl:items-center xl:flex-row ">    <a href="https://explore.omsystem.com/fi/fi/its-in-our-nature"  target="_self" class="max-w-[408px] font-helvetica w-full xl:w-auto 2xl:whitespace-nowrap btn btn-tritical text-pallas btn-size-lg">Opi meistä ja ehkä myös itsestäsikin</a>   </div></div> <!-- Image/ Video --><div class="flex-shrink-0 md:w-[429px] md:h-[273px] lg:w-[572px] lg:h-[364px] xl:h-[512px] xl:w-[805px]">  <div class="relative h-full w-full"><div class="relative h-full w-full" x-data="{ ...videoControls(false), ...viewportAutoplay(false), isMobile: false, setVideoSource() { const mediaQuery = window.matchMedia('(max-width: 767px)'); this.isMobile = mediaQuery.matches; const wasPlaying = !this.$refs.video.paused; this.$refs.video.load(); if (wasPlaying) { const playPromise = this.$refs.video.play(); if (playPromise !== undefined) { playPromise.catch(error => { console.warn('Could not resume video after source change:', error); }); } } } }" x-init="init(); setVideoSource(); window.matchMedia('(max-width: 767px)').addEventListener('change', () => setVideoSource());"><video class="inset-0 pointer-events-none w-full object-cover object-center h-[238px] md:h-full"  playsinline loop poster="https://cdn.sanity.io/images/ipox1240/live/cd95e5d96fc7e0198febcda21c55b3a322782a3d-1360x765.webp" x-ref="video" @click="togglePlay" alt="A person leaps with joy on a reflective black sand beach beneath dramatic mountains at sunset."> <source src="https://cdn.sanity.io/files/ipox1240/live/c9b4785fc48c64c63af2addd24abec5c4609b5de.mp4" type="video/mp4"> Your browser does not support this feature.</video><!-- Video Controls --><div class="absolute flex top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-30"><button @click="togglePlay" class="cursor-pointer"><template x-if="!isPlaying"><svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 20 20" fill="none" class="text-white" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.2635 8.70436C17.2557 9.28318 17.2557 10.7169 16.2635 11.2957L5.75581 17.4252C4.75582 18.0085 3.5 17.2872 3.5 16.1295L3.5 3.87054C3.5 2.71286 4.75582 1.99155 5.75581 2.57488L16.2635 8.70436ZM14.5154 10L5.5 4.74106L5.5 15.259L14.5154 10Z" fill="#FAFAFA"/>
<title>play</title></svg>
</template></button></div><div class="actions-container absolute bottom-4 end-4 z-10 flex gap-4 md:bottom-10 md:end-10 md:top-[unset]"><button @click="togglePlay" class="cursor-pointer" :aria-label="isPlaying ? 'Pause video' : 'Play video'" type="button"><template x-if="isPlaying"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="text-white" role="img">
<path d="M5 3H7V17H5V3Z" fill="#FAFAFA"/>
<path d="M13 3H15V17H13V3Z" fill="#FAFAFA"/>
<title>pause</title></svg>
</template></button> <button @click="toggleMute" class="cursor-pointer" :aria-label="isMuted ? 'Unmute video' : 'Mute video'" type="button"><template x-if="isMuted"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="text-white" role="img">
<path d="M13 12.5L18 7.5" stroke="#FAFAFA" stroke-width="1.66667"/>
<path d="M18 12.5L13 7.5" stroke="#FAFAFA" stroke-width="1.66667"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 4.9207L5.8317 7.13851C5.49553 7.37383 5.09512 7.50005 4.68478 7.50005H3V12.5H4.68478C5.09512 12.5 5.49554 12.6263 5.8317 12.8616L9 15.0794V4.9207ZM8.63981 2.73153C9.63397 2.03561 11 2.74684 11 3.96037V16.0397C11 17.2533 9.63397 17.9645 8.63981 17.2686L4.68478 14.5H1.3C1.13431 14.5 1 14.3657 1 14.2V5.80005C1 5.63436 1.13431 5.50005 1.3 5.50005H4.68478L8.63981 2.73153Z" fill="#FAFAFA"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.03341 8.5C6.1991 8.5 6.33341 8.63431 6.33341 8.8V13.5H4.66675V8.8C4.66675 8.63431 4.80106 8.5 4.96675 8.5H6.03341Z" fill="#FAFAFA"/>
<title>sound-off</title></svg>
</template><template x-if="!isMuted"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="text-white" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 4.9207L5.8317 7.13851C5.49553 7.37383 5.09512 7.50005 4.68478 7.50005H3V12.5H4.68478C5.09512 12.5 5.49554 12.6263 5.8317 12.8616L9 15.0794V4.9207ZM8.63981 2.73153C9.63397 2.03561 11 2.74684 11 3.96037V16.0397C11 17.2533 9.63397 17.9645 8.63981 17.2686L4.68478 14.5H1.3C1.13431 14.5 1 14.3657 1 14.2V5.80005C1 5.63436 1.13431 5.50005 1.3 5.50005H4.68478L8.63981 2.73153Z" fill="#FAFAFA"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.03329 8.5C6.19898 8.5 6.33329 8.63431 6.33329 8.8V13.5H4.66663V8.8C4.66663 8.63431 4.80094 8.5 4.96663 8.5H6.03329Z" fill="#FAFAFA"/>
<path d="M15.5 16C16.7558 14.3287 17.5 12.2512 17.5 10C17.5 7.74879 16.7558 5.67132 15.5 4" stroke="#FAFAFA" stroke-width="2"/>
<path d="M13 13C13.6279 12.1643 14 11.1256 14 10C14 8.87439 13.6279 7.83566 13 7" stroke="#FAFAFA" stroke-width="2"/>
<title>sound-on</title></svg>
</template></button></div></div></div> </div><!-- Right Content/ Mobile content --><div class="h-auto flex flex-col gap-8 md:gap-xxxl max-md:px-4 md:pr-5 2xl:pr-10 md:hidden"><div class="flex flex-col gap-4 md:gap-5"><!-- Subheading --> <h3 class="text-h2-sm md:text-h2 font-extrabold">Luonto. Kaiken ydin.</h3> <!-- Copies --> <p class='text-h3-sm font-normal leading-[120%]'>Luonto herättää uteliaisuuden meissä kaikissa. Siksi valmistamme tuotteita, jotka kannustavat sinua lähtemään ulos, tutkimaan luontoa ja löytämään uudelleen sen, kuka olet.</p> </div><!-- CTAS --> <div class="cta-container flex flex-col gap-4 items-center md:gap-5 md:items-start md:w-auto xl:items-center xl:flex-row ">    <a href="https://explore.omsystem.com/fi/fi/its-in-our-nature"  target="_self" class="max-w-[408px] font-helvetica w-full xl:w-auto 2xl:whitespace-nowrap btn btn-tritical text-pallas btn-size-lg">Opi meistä ja ehkä myös itsestäsikin</a>   </div></div></div></div></div><script>
    document.addEventListener('alpine:init', () => {
        Alpine.data("videoControls", (autoPlayFlag) => ({
            isPlaying: autoPlayFlag,
            isMuted: autoPlayFlag,
            init() {
                this.$nextTick(() => {
                    const video = this.$refs.video;
                    if (this.isPlaying) {
                        const playPromise = video.play();
                        if (playPromise !== undefined) {
                            playPromise.then(() => {
                                this.isPlaying = true;
                            }).catch(error => {
                                console.warn('Autoplay prevented:', error);
                                this.isPlaying = false;
                            });
                        }
                    }
                });
            },
            togglePlay() {
                const video = this.$refs.video;

                if (video.paused) {
                    const playPromise = video.play();
                    if (playPromise !== undefined) {
                        playPromise.then(() => {
                            this.isPlaying = true;
                        }).catch(error => {
                            console.error('Error playing video:', error);
                            this.isPlaying = false;
                        });
                    }
                } else {
                    video.pause();
                    this.isPlaying = false;
                }
            },
            toggleMute() {
                const video = this.$refs.video;
                video.muted = !video.muted;
                this.isMuted = video.muted;
            },
        }));

        Alpine.data("viewportAutoplay", (autoPlayFlag) => ({
            isPlaying: autoPlayFlag,
            observer: null,

            init() {
                const video = this.$refs.video;

                this.observer = new IntersectionObserver((entries) => {
                    entries.forEach(entry => {
                        if (entry.isIntersecting && entry.intersectionRatio >= 0.4) {
                            if (this.isPlaying && video.paused) {
                                video.play().catch(() => {});
                            }
                        } else {
                            if (this.isPlaying && !video.paused) {
                                video.pause();
                            }
                        }
                    });
                }, {
                    threshold: [0, 0.4, 1]
                });

                this.observer.observe(video);
            },
        }));
    });</script> <div  x-data="{ isMobile: true, init() { const matchMedia = window.matchMedia('(max-width: 767px)'); this.onChangeMedia(matchMedia); if (typeof matchMedia.onchange !== 'object') { matchMedia.addListener((event) => this.onChangeMedia(event)); } else { matchMedia.addEventListener('change', (event) => this.onChangeMedia(event)) } }, onChangeMedia(mediaQuery) { if (this.isMobile !== mediaQuery.matches) { this.isMobile = mediaQuery.matches; } }, }" :style="{ '--background-image': isMobile ? `url()` : `url()` }" style="--bg-color: #e4dece"  x-init="updateBgHotspot(isMobile ? '' : '', '--background-image', $el)" class="standaloneBlocksSet bg-cover bg-center w-screen ms-[calc(50%-50vw)] text-black bg-[image:var(--background-image)] bg-[var(--bg-color)] flex flex-col py-15 gap-xl md:gap-xxxl md:py-25" alt="" data-id="6324728f-7aea-4444-95e7-37e331d3ea3f"> <div  style="--banner-image: url(); --banner-color: invisible" class="headerAndCta bg-center bg-cover w-screen ms-[calc(50%-50vw)] text-black bg-[var(--banner-color)] bg-[image:var(--banner-image)] md:px-5 2xl:px-10 py-0 md:py-0" alt="" data-new-url= "" x-init="updateBgHotspot('', '--banner-image', $el)" data-id="0d21df2b-87fc-4397-a85b-26c9fa5d2534"><div class="text-center h-full max-md:px-4 flex flex-col mx-auto gap-xl md:gap-xxl max-w-md-lg"><div class="flex flex-col gap-m md:gap-l">  <h2 class="text-h2-sm md:text-h2 break-words">OM SYSTEMillä inspiroimme ihmisiä lähtemään liikkeelle ja tallentamaan elämän hetkiä</h2>  <p class='text-body break-words'>luomalla ainutlaatuisia kuvausmahdollisuuksia, jotka ovat mahdollisia käsivaralta kuvattaessa. Brändinä olemme sitoutuneet lunastamaan tämän lupauksen.</p></div> <div class="flex flex-col gap-xl md:gap-xxl items-center">  <a href="https://explore.omsystem.com/fi/fi/its-a-system?icid=om_day_oct25-internal-hp-link-system_lp"  target="_self" class="max-md:w-full btn-size-lg btn btn-tritical-reversed">Lisätietoja järjestelmästä</a>  </div> </div></div> <div  style="--banner-image: url(); --banner-color: invisible" class="headerAndCta bg-center bg-cover w-screen ms-[calc(50%-50vw)] text-black bg-[var(--banner-color)] bg-[image:var(--banner-image)] md:px-5 2xl:px-10 py-0 md:py-0" alt="" data-new-url= "" x-init="updateBgHotspot('', '--banner-image', $el)" data-id="a752fa77-bb05-4bee-a2e2-657ba9945614"><div class="text-center h-full max-md:px-4 flex flex-col mx-auto gap-xl md:gap-xxl max-w-md-lg"><div class="flex flex-col gap-m md:gap-l">  <h2 class="text-h2-sm md:text-h2 break-words">OM-teknologiat</h2>  </div> </div></div> <div  style="--background-image: url(); --bg-color: invisible" alt="" class="carouselColumnSet bg-cover bg-center ms-[calc(50%-50vw)] w-screen text-pallas bg-[var(--bg-color)] bg-[image:var(--background-image)] py-0 md:py-0" data-id="d2e12173-c893-4516-a7b3-f2c9cf707a65" data-new-url= "" x-init="updateBgHotspot('', '--background-image', $el)"><div class="max-w-2xl items-center mx-auto max-h-[420px]"><div class="slider-contain glider no-scrollbar invisible" x-data="initCarouselColumnSlider"><!-- Carousel --><div class="glider no-scrollbar !px-4 md:!px-5 2xl:!px-10">  <!-- Carousel Tile--><div style="--column-background: url(https://cdn.sanity.io/images/ipox1240/live/7ece0f902183cb15638d3a02a500c0915c68ac6d-384x630.webp);" data-new-url= "" x-init='updateBgHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/7ece0f902183cb15638d3a02a500c0915c68ac6d-384x630.webp", "--column-background", $el)' class="w-[256px] min-w-[256px] max-w-[256px] h-[420px] min-h-[420px] max-h-[420px] flex flex-col items-center text-center mt-0 mb-0 justify-start pt-5 px-4 md:px-5 pb-25 ml-0 last:mr-0 mr-5 bg-cover bg-center [background-image:theme(backgroundImage.topBlackGradient),var(--column-background)]" alt="Person holding an OM SYSTEM camera" tabindex="0" > <h3 class="text-xl/[25px] font-bold pb-5 md:text-[25px]/[32.5px] w-full hyphens-auto hyphenate-limit-chars-15 break-words">Kompakti ja kevyt järjestelmä</h3>  <p class='text-base/[20px] font-normal w-full hyphens-auto hyphenate-limit-chars-15 break-words'>Kompakti ja kevyt järjestelmä pitkiin kuvaussessioihin ja kohteiden etsintään.</p> </div>  <!-- Carousel Tile--><div style="--column-background: url(https://cdn.sanity.io/images/ipox1240/live/b2357390249a098d1715ef4a1d2d31fd4fe263db-512x840.webp);" data-new-url= "" x-init='updateBgHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/b2357390249a098d1715ef4a1d2d31fd4fe263db-512x840.webp", "--column-background", $el)' class="w-[256px] min-w-[256px] max-w-[256px] h-[420px] min-h-[420px] max-h-[420px] flex flex-col items-center text-center mt-0 mb-0 justify-start pt-5 px-4 md:px-5 pb-25 ml-0 last:mr-0 mr-5 bg-cover bg-center [background-image:theme(backgroundImage.topBlackGradient),var(--column-background)]" alt="Man using an OM SYSTEM camera and the M.Zuiko Digital ED 150-400mm F4.5 TC1.25X IS PRO during sunset" tabindex="0" > <h3 class="text-xl/[25px] font-bold pb-5 md:text-[25px]/[32.5px] w-full hyphens-auto hyphenate-limit-chars-15 break-words">Tehokas kuvanvakain</h3>  <p class='text-base/[20px] font-normal w-full hyphens-auto hyphenate-limit-chars-15 break-words'>Tehokas kuvanvakain, joka sopii erinomaisesti vakaaseen sommitteluun kuvattaessa superteleobjektiivilla sekä makrokuvaukseen, jossa kameran tärinä on yleistä.</p> </div>  <!-- Carousel Tile--><div style="--column-background: url(https://cdn.sanity.io/images/ipox1240/live/8440fffbf6aa4eacaaf85d1c9facab8b27936c86-512x840.webp);" data-new-url= "" x-init='updateBgHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/8440fffbf6aa4eacaaf85d1c9facab8b27936c86-512x840.webp", "--column-background", $el)' class="w-[256px] min-w-[256px] max-w-[256px] h-[420px] min-h-[420px] max-h-[420px] flex flex-col items-center text-center mt-0 mb-0 justify-start pt-5 px-4 md:px-5 pb-25 ml-0 last:mr-0 mr-5 bg-cover bg-center [background-image:theme(backgroundImage.topBlackGradient),var(--column-background)]" alt="Camera OM SYSTEM OM-1 Mark II on snow" tabindex="0" > <h3 class="text-xl/[25px] font-bold pb-5 md:text-[25px]/[32.5px] w-full hyphens-auto hyphenate-limit-chars-15 break-words">Säänkestävä suorituskyky</h3>  <p class='text-base/[20px] font-normal w-full hyphens-auto hyphenate-limit-chars-15 break-words'>Ylivoimainen, helposti mukana kulkeva ja säänkestävä kalusto kaikkialle, kylmistä ilmastoista aavikoille.</p> </div>  <!-- Carousel Tile--><div style="--column-background: url(https://cdn.sanity.io/images/ipox1240/live/05da47b4d069d46c71c49a8be6276657519acb3d-512x840.webp);" data-new-url= "" x-init='updateBgHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/05da47b4d069d46c71c49a8be6276657519acb3d-512x840.webp", "--column-background", $el)' class="w-[256px] min-w-[256px] max-w-[256px] h-[420px] min-h-[420px] max-h-[420px] flex flex-col items-center text-center mt-0 mb-0 justify-start pt-5 px-4 md:px-5 pb-25 ml-0 last:mr-0 mr-5 bg-cover bg-center [background-image:theme(backgroundImage.topBlackGradient),var(--column-background)]" alt="Person holding an OM SYSTEM camera and the M.Zuiko Digital ED 100-400mm F5.0-6.3 IS II lens" tabindex="0" > <h3 class="text-xl/[25px] font-bold pb-5 md:text-[25px]/[32.5px] w-full hyphens-auto hyphenate-limit-chars-15 break-words">Ainutlaatuinen objektiivivalikoima</h3>  <p class='text-base/[20px] font-normal w-full hyphens-auto hyphenate-limit-chars-15 break-words'>Ainutlaatuinen ja monipuolinen objektiivivalikoima, jonka ansiosta voit tallentaa jotain, mitä et ole koskaan ennen kuvannut.</p> </div>  <!-- Carousel Tile--><div style="--column-background: url(https://cdn.sanity.io/images/ipox1240/live/b8b651b3cfba0b974948890b8883d45f367f4a2b-800x600.webp);" data-new-url= "" x-init='updateBgHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/b8b651b3cfba0b974948890b8883d45f367f4a2b-800x600.webp", "--column-background", $el)' class="w-[256px] min-w-[256px] max-w-[256px] h-[420px] min-h-[420px] max-h-[420px] flex flex-col items-center text-center mt-0 mb-0 justify-start pt-5 px-4 md:px-5 pb-25 ml-0 last:mr-0 mr-5 bg-cover bg-center [background-image:theme(backgroundImage.topBlackGradient),var(--column-background)]" alt="" tabindex="0" > <h3 class="text-xl/[25px] font-bold pb-5 md:text-[25px]/[32.5px] w-full hyphens-auto hyphenate-limit-chars-15 break-words">Laskennallinen valokuvaus</h3>  <p class='text-base/[20px] font-normal w-full hyphens-auto hyphenate-limit-chars-15 break-words'>Laskennallinen valokuvaus mahdollistaa kuvien käsittelyn kamerassa ilman tietokonetta tai kuvankäsittelyohjelmistoa sekä lopputuloksen näkemisen jo kuvaushetkellä.</p> </div></div></div></div></div><script>
    'use strict';

    if (typeof window.initCarouselColumnSlider === 'undefined') {
        window.initCarouselColumnSlider = () => {
            return {
                sliderSelector: '.slider-contain',

                init() {
                    document.querySelectorAll(this.sliderSelector).forEach((el, index) => {
                        el.setAttribute('data-carousel-id', `carousel-${index}`);
                        this.initSlider(el);
                    });
                },

                initSlider(element) {
                    if (typeof Glider === 'undefined') {
                        addGliderJSScript(() => this.initSlider(element));
                        return;
                    }

                    new Glider(element, {
                        slidesToShow: 5,
                        draggable: true,
                        skipTrack: true,
                        responsive: [
                            {
                                breakpoint: 980,
                                settings: {
                                    slidesToShow: 5,
                                    draggable: false,
                                }
                            },
                        ]
                    });
                    element.classList.remove('invisible');
                }
            }
        }
    }</script></div> <div  style="--slider-text-color: #000;" class="relative productTabsCollection py-16 md:py-25 max-w-[1360px] w-full mx-auto px-4 md:px-0 dark" data-id="f702723d-a23f-4965-bdfa-6a1321492366" x-data="initProductTabs_6a1178b785770()" x-bind="eventListeners" ><div class="absolute left-[calc(50%-50vw)] top-0 w-screen h-full z-[-1]" style="background: #fafafa;" alt="" data-new-url= "" x-init="updateBgHotspot('', false, $el)"></div>  <h2 class="text-h2-sm md:text-h2 mb-6 md:mb-10 text-center text-[var(--slider-text-color)]">Löydä täydellinen kumppani polullesi</h2> <!-- Tab Titles Row --><div class="flex-wrap max-md:justify-start max-md:gap-3 md:gap-y-5 mb-6 flex items-center justify-center md:mb-10" role="tablist" aria-label="Product Tabs">  <button class="break-all min-h-[52px] hover:border-primary border-b-[3px] border-b-transparent max-md:hidden md:pb-5 cursor-pointer" @click="activeTab = 0; setTimeout(() => updateContainerHeight(), 500);" :class="{ '!border-primary': activeTab === 0 }" id="tab-0" role="tab" aria-controls="tab-content-0" aria-selected="true"><div class="md:px-5"><div :class="{ '!text-gray-dark': activeTab !== 0 }" class="text-base leading-[100%] md:text-h4-bold text-[var(--slider-text-color)]">Kamerat</div></div></button> <button class="break-all btn btn-tritical-reversed py-2.5 px-5 text-base font-bold md:hidden text-[var(--slider-text-color)] !border-[var(--slider-text-color)]" @click="activeTab = 0; setTimeout(() => updateContainerHeight(), 500);" :class="{ '!border-gray-light': activeTab !== 0 }" id="tab-mobile-0" role="tab" aria-controls="tab-content-0" :aria-selected="activeTab === 0 ? true : false">Kamerat</button>    <button class="break-all min-h-[52px] hover:border-primary border-b-[3px] border-b-transparent max-md:hidden md:pb-5 cursor-pointer" @click="activeTab = 1; setTimeout(() => updateContainerHeight(), 500);" :class="{ '!border-primary': activeTab === 1 }" id="tab-1" role="tab" aria-controls="tab-content-1" aria-selected="false"><div class="md:px-5"><div :class="{ '!text-gray-dark': activeTab !== 1 }" class="text-base leading-[100%] md:text-h4-bold text-[var(--slider-text-color)]">Objektiivit</div></div></button> <button class="break-all btn btn-tritical-reversed py-2.5 px-5 text-base font-bold md:hidden text-[var(--slider-text-color)] !border-[var(--slider-text-color)]" @click="activeTab = 1; setTimeout(() => updateContainerHeight(), 500);" :class="{ '!border-gray-light': activeTab !== 1 }" id="tab-mobile-1" role="tab" aria-controls="tab-content-1" :aria-selected="activeTab === 1 ? true : false">Objektiivit</button>    <button class="break-all min-h-[52px] hover:border-primary border-b-[3px] border-b-transparent max-md:hidden md:pb-5 cursor-pointer" @click="activeTab = 2; setTimeout(() => updateContainerHeight(), 500);" :class="{ '!border-primary': activeTab === 2 }" id="tab-2" role="tab" aria-controls="tab-content-2" aria-selected="false"><div class="md:px-5"><div :class="{ '!text-gray-dark': activeTab !== 2 }" class="text-base leading-[100%] md:text-h4-bold text-[var(--slider-text-color)]">Kiikarit</div></div></button> <button class="break-all btn btn-tritical-reversed py-2.5 px-5 text-base font-bold md:hidden text-[var(--slider-text-color)] !border-[var(--slider-text-color)]" @click="activeTab = 2; setTimeout(() => updateContainerHeight(), 500);" :class="{ '!border-gray-light': activeTab !== 2 }" id="tab-mobile-2" role="tab" aria-controls="tab-content-2" :aria-selected="activeTab === 2 ? true : false">Kiikarit</button>    <button class="break-all min-h-[52px] hover:border-primary border-b-[3px] border-b-transparent max-md:hidden md:pb-5 cursor-pointer" @click="activeTab = 3; setTimeout(() => updateContainerHeight(), 500);" :class="{ '!border-primary': activeTab === 3 }" id="tab-3" role="tab" aria-controls="tab-content-3" aria-selected="false"><div class="md:px-5"><div :class="{ '!text-gray-dark': activeTab !== 3 }" class="text-base leading-[100%] md:text-h4-bold text-[var(--slider-text-color)]">Audio</div></div></button> <button class="break-all btn btn-tritical-reversed py-2.5 px-5 text-base font-bold md:hidden text-[var(--slider-text-color)] !border-[var(--slider-text-color)]" @click="activeTab = 3; setTimeout(() => updateContainerHeight(), 500);" :class="{ '!border-gray-light': activeTab !== 3 }" id="tab-mobile-3" role="tab" aria-controls="tab-content-3" :aria-selected="activeTab === 3 ? true : false">Audio</button>  </div><!-- Tab Container --><div class="tab-content"> <template x-for="(copy, index) in productTabs[activeTab].copy" :key="index"><p class="text-body text-center mb-8 md:mb-10 max-w-md-lg mx-auto text-[var(--slider-text-color)]" x-html="copy"></p></template><!-- Pre-rendered Sliders --><div :class="{'!visible': isSliderLoaded}" class="invisible slider-container relative" x-ref="sliderContainer"> <div id="tab-content-0" class="slider-instance-6a1178b785770 z-[-1] opacity-0 absolute top-0 left-0 w-full transition-opacity duration-300 ease-in-out text-[var(--slider-text-color)]" :class="{'opacity-100 z-[1]': activeTab === 0}" x-ref="slider-0" role="tabpanel" aria-labelledby="tab-0" :aria-hidden="activeTab === 0 ? false : true" x-effect=" if (activeTab === 0) { $el.querySelectorAll('*').forEach(el => { if (el.classList.contains('product-item-link') || el.tagName.toLowerCase() === 'button' || el.getAttribute('type') === 'button') { el.setAttribute('tabindex', isSliderLoaded ? '0' : '-1'); } else { el.setAttribute('tabindex', '-1'); } }); } else { $el.querySelectorAll('*').forEach(el => { el.setAttribute('tabindex', '-1'); }); } " x-transition:enter="opacity-0" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="opacity-100" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" > <script>
    'use strict';

    function initSliderComponent() {
        return {
            active: 0,
            itemCount: 0,
            getSlider() {
                return this.$root.querySelector('.js_slides');
            },
            pageSize: 4,
            pageFillers: 0,
            isDesktop: window.innerWidth >= 768,
            calcPageSize() {
                const slider = this.getSlider();
                if (slider) {
                    this.itemCount = slider.querySelectorAll('.js_slide').length;
                    this.pageSize = Math.round(slider.clientWidth / slider.querySelector('.js_slide').clientWidth);
                    this.pageFillers = (
                        this.pageSize * Math.ceil(this.itemCount / this.pageSize)
                    ) - this.itemCount;
                }
            },
            calcActive() {
                const slider = this.getSlider();

                if (slider) {
                    const sliderItems = this.itemCount + this.pageFillers;
                    const calculatedActiveSlide = slider.scrollLeft / (slider.scrollWidth / sliderItems);
                    this.active = Math.round(calculatedActiveSlide / this.pageSize) * this.pageSize;
                }
            },
            scrollPrevious() {
                this.scrollTo(this.active - this.pageSize);
            },
            scrollNext() {
                this.scrollTo(this.active + this.pageSize);
            },
            scrollTo(idx) {
                const slider = this.getSlider();

                if (slider) {
                    const slideWidth = slider.scrollWidth / (this.itemCount + this.pageFillers);
                    slider.scrollLeft = Math.floor(slideWidth) * idx;
                    this.active = idx;
                }
            }
        }
    }</script><section class="text-gray-700 body-font" x-data="initSliderComponent()" x-defer="intersect" @resize.window.debounce="calcPageSize(); $nextTick( function() { calcActive() }); isDesktop = window.innerWidth >= 768;" x-init="calcPageSize();" role="group" aria-roledescription="Karuselli"  > <div class="relative"> <div class="flex-none relative w-full overflow-x-hidden"><div class="relative flex flex-nowrap gap-3 md:gap-5 w-full overflow-y-hidden overflow-x-auto js_slides snap" @scroll.debounce="calcActive" > <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/om-1-mark-ii-12-40mm-pro-ii-lens-kit" title="OM-1&#x20;Mark&#x20;II&#x20;&#x2B;&#x20;12-40mm&#x20;PRO&#x20;II&#x20;Kit" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/o/m/om-1-mark-ii-kit-hero-02.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="OM-1 Mark II + 12-40mm PRO II Kit" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/o/m/om-1-mark-ii-kit-hero-02.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="OM-1 Mark II + 12-40mm PRO II Kit" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/om-1-mark-ii-12-40mm-pro-ii-lens-kit" :id="`slide-desc-18684-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">OM-1 Mark II + 12-40mm PRO II Kit</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-18684.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="18684" data-price-box="product-id-18684">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-18684"   data-price-amount="2999" data-price-type="oldPrice" class="price-wrapper " >2 999,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-18684"   data-price-amount="2989" data-price-type="finalPrice" class="price-wrapper " >2 989,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-om-success " title="Saatavuus">Varastossa</p></div></div></div></div></div></div></div> <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/om-3-12-45mm-f4-0-pro-kit" title="OM-3&#x20;&#x2B;&#x20;12-45mm&#x20;f4.0&#x20;PRO&#x20;Kit" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/o/m/om-3-kit-hero-02.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="OM-3 + 12-45mm f4.0 PRO Kit" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/o/m/om-3-kit-hero-02.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="OM-3 + 12-45mm f4.0 PRO Kit" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/om-3-12-45mm-f4-0-pro-kit" :id="`slide-desc-19026-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">OM-3 + 12-45mm f4.0 PRO Kit</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-19026.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="19026" data-price-box="product-id-19026">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-19026"   data-price-amount="2399" data-price-type="oldPrice" class="price-wrapper " >2 399,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-19026"   data-price-amount="2299" data-price-type="finalPrice" class="price-wrapper " >2 299,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-om-success " title="Saatavuus">Varastossa</p></div></div></div></div></div></div></div> <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/om-5-mark-ii-silver-12-45mm-pro-lens-kit" title="OM-5&#x20;Mark&#x20;II&#x20;Hopea&#x20;&#x2B;&#x20;12-45mm&#x20;F4.0&#x20;PRO&#x20;Kit" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/o/m/om-5-mark-ii-12-45mm-silver-hero-02_1.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="OM-5 Mark II Hopea + 12-45mm F4.0 PRO Kit" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/o/m/om-5-mark-ii-12-45mm-silver-hero-02_1.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="OM-5 Mark II Hopea + 12-45mm F4.0 PRO Kit" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/om-5-mark-ii-silver-12-45mm-pro-lens-kit" :id="`slide-desc-19209-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">OM-5 Mark II Hopea + 12-45mm F4.0 PRO Kit</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-19209.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="19209" data-price-box="product-id-19209">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-19209"   data-price-amount="1699" data-price-type="oldPrice" class="price-wrapper " >1 699,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-19209"   data-price-amount="1599" data-price-type="finalPrice" class="price-wrapper " >1 599,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-om-success " title="Saatavuus">Varastossa</p></div></div></div></div></div></div></div> <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/e-p7-pancake-kit-white" title="E-P7&#x20;&#x2B;&#x20;14-42mm&#x20;Pancake&#x20;Zoom&#x20;Kit&#x20;&#x28;Valkoinen&#x2F;Hopea&#x29;" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/e/-/e-p7-14-42mm-kit-white-hero-02_1.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="E-P7 + 14-42mm Pancake Zoom Kit (Valkoinen/Hopea)" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/e/-/e-p7-14-42mm-kit-white-hero-02_1.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="E-P7 + 14-42mm Pancake Zoom Kit (Valkoinen/Hopea)" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/e-p7-pancake-kit-white" :id="`slide-desc-6451-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">E-P7 + 14-42mm Pancake Zoom Kit (Valkoinen/Hopea)</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-6451.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="6451" data-price-box="product-id-6451">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-6451"   data-price-amount="949" data-price-type="oldPrice" class="price-wrapper " >949,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-6451"   data-price-amount="799" data-price-type="finalPrice" class="price-wrapper " >799,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-om-success " title="Saatavuus">Varastossa</p></div></div></div></div></div></div></div> <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/om-d-e-m10-mark-iv-pancake-lens-kit-silver" title="E-M10&#x20;Mark&#x20;IV&#x20;Pancake&#x20;Kit&#x20;&#x28;Hopea&#x29;" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/e/-/e-m10-mark-iv-14-42mm-kit-silver-hero-02_1.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="E-M10 Mark IV Pancake Kit (Hopea)" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/e/-/e-m10-mark-iv-14-42mm-kit-silver-hero-02_1.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="E-M10 Mark IV Pancake Kit (Hopea)" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/om-d-e-m10-mark-iv-pancake-lens-kit-silver" :id="`slide-desc-5042-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">E-M10 Mark IV Pancake Kit (Hopea)</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-5042.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="5042" data-price-box="product-id-5042">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-5042"   data-price-amount="999" data-price-type="oldPrice" class="price-wrapper " >999,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-5042"   data-price-amount="829" data-price-type="finalPrice" class="price-wrapper " >829,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-om-success " title="Saatavuus">Varastossa</p></div></div></div></div></div></div></div> <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/tg-7-red" title="TG-7&#x20;Punainen" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/t/g/tg-7-red-front.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="TG-7 Punainen" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/t/g/tg-7-red-front.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="TG-7 Punainen" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/tg-7-red" :id="`slide-desc-18495-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">TG-7 Punainen</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-18495.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="18495" data-price-box="product-id-18495">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-18495"   data-price-amount="549" data-price-type="oldPrice" class="price-wrapper " >549,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-18495"   data-price-amount="489" data-price-type="finalPrice" class="price-wrapper " >489,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-om-success " title="Saatavuus">Varastossa</p></div></div></div></div></div></div></div>  <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >0 }"></div> <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >1 }"></div> <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >2 }"></div> <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >3 }"></div></div></div><template x-if="itemCount > pageSize"><div class="flex items-center justify-center"><div class="max-md:hidden absolute flex items-center z-10 md:left-0 lg:left-4 xl:-left-5 top-[40%]"><button type="button" aria-label="Edellinen&#x20;dia" :disabled="active === 0" class="text-primary-darker bg-gray-light-25 flex-none p-2.5" :class="{ 'opacity-25 pointer-events-none' : active === 0 }" @click="scrollPrevious" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img">
  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
<title>chevron-left</title></svg>
</button></div><div class="flex flex-wrap w-full gap-dots md:w-auto justify-center mt-10"> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(0 % pageSize)) }" :aria-current="active === 0" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (0 / pageSize) + 1)" @click="scrollTo(0)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 0, 'bg-gray-medium': active !== 0, 'hidden': (pageSize !== 1 && !!(0 % pageSize)) }" @click="scrollTo(0)" ></span></button>  <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(1 % pageSize)) }" :aria-current="active === 1" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (1 / pageSize) + 1)" @click="scrollTo(1)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 1, 'bg-gray-medium': active !== 1, 'hidden': (pageSize !== 1 && !!(1 % pageSize)) }" @click="scrollTo(1)" ></span></button>  <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(2 % pageSize)) }" :aria-current="active === 2" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (2 / pageSize) + 1)" @click="scrollTo(2)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 2, 'bg-gray-medium': active !== 2, 'hidden': (pageSize !== 1 && !!(2 % pageSize)) }" @click="scrollTo(2)" ></span></button>  <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(3 % pageSize)) }" :aria-current="active === 3" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (3 / pageSize) + 1)" @click="scrollTo(3)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 3, 'bg-gray-medium': active !== 3, 'hidden': (pageSize !== 1 && !!(3 % pageSize)) }" @click="scrollTo(3)" ></span></button>  <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(4 % pageSize)) }" :aria-current="active === 4" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (4 / pageSize) + 1)" @click="scrollTo(4)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 4, 'bg-gray-medium': active !== 4, 'hidden': (pageSize !== 1 && !!(4 % pageSize)) }" @click="scrollTo(4)" ></span></button>  <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(5 % pageSize)) }" :aria-current="active === 5" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (5 / pageSize) + 1)" @click="scrollTo(5)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 5, 'bg-gray-medium': active !== 5, 'hidden': (pageSize !== 1 && !!(5 % pageSize)) }" @click="scrollTo(5)" ></span></button> </div><div class="max-md:hidden absolute flex items-center z-10 top-[40%] md:right-0 lg:right-4 xl:-right-5"><button aria-label="Seuraava&#x20;dia" :disabled="active >= itemCount-pageSize" class="text-primary-darker bg-gray-light-25 flex-none p-2.5" :class="{ 'opacity-25 pointer-events-none' : active >= itemCount-pageSize }" @click="scrollNext" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img">
  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
<title>chevron-right</title></svg>
</button></div></div></template></div></section></div> <div id="tab-content-1" class="slider-instance-6a1178b785770 z-[-1] opacity-0 absolute top-0 left-0 w-full transition-opacity duration-300 ease-in-out text-[var(--slider-text-color)]" :class="{'opacity-100 z-[1]': activeTab === 1}" x-ref="slider-1" role="tabpanel" aria-labelledby="tab-1" :aria-hidden="activeTab === 1 ? false : true" x-effect=" if (activeTab === 1) { $el.querySelectorAll('*').forEach(el => { if (el.classList.contains('product-item-link') || el.tagName.toLowerCase() === 'button' || el.getAttribute('type') === 'button') { el.setAttribute('tabindex', isSliderLoaded ? '0' : '-1'); } else { el.setAttribute('tabindex', '-1'); } }); } else { $el.querySelectorAll('*').forEach(el => { el.setAttribute('tabindex', '-1'); }); } " x-transition:enter="opacity-0" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="opacity-100" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" > <script>
    'use strict';

    function initSliderComponent() {
        return {
            active: 0,
            itemCount: 0,
            getSlider() {
                return this.$root.querySelector('.js_slides');
            },
            pageSize: 4,
            pageFillers: 0,
            isDesktop: window.innerWidth >= 768,
            calcPageSize() {
                const slider = this.getSlider();
                if (slider) {
                    this.itemCount = slider.querySelectorAll('.js_slide').length;
                    this.pageSize = Math.round(slider.clientWidth / slider.querySelector('.js_slide').clientWidth);
                    this.pageFillers = (
                        this.pageSize * Math.ceil(this.itemCount / this.pageSize)
                    ) - this.itemCount;
                }
            },
            calcActive() {
                const slider = this.getSlider();

                if (slider) {
                    const sliderItems = this.itemCount + this.pageFillers;
                    const calculatedActiveSlide = slider.scrollLeft / (slider.scrollWidth / sliderItems);
                    this.active = Math.round(calculatedActiveSlide / this.pageSize) * this.pageSize;
                }
            },
            scrollPrevious() {
                this.scrollTo(this.active - this.pageSize);
            },
            scrollNext() {
                this.scrollTo(this.active + this.pageSize);
            },
            scrollTo(idx) {
                const slider = this.getSlider();

                if (slider) {
                    const slideWidth = slider.scrollWidth / (this.itemCount + this.pageFillers);
                    slider.scrollLeft = Math.floor(slideWidth) * idx;
                    this.active = idx;
                }
            }
        }
    }</script><section class="text-gray-700 body-font" x-data="initSliderComponent()" x-defer="intersect" @resize.window.debounce="calcPageSize(); $nextTick( function() { calcActive() }); isDesktop = window.innerWidth >= 768;" x-init="calcPageSize();" role="group" aria-roledescription="Karuselli"  > <div class="relative"> <div class="flex-none relative w-full overflow-x-hidden"><div class="relative flex flex-nowrap gap-3 md:gap-5 w-full overflow-y-hidden overflow-x-auto js_slides snap" @scroll.debounce="calcActive" > <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/m-zuiko-ed-8-25mm-f4-pro-black" title="M.Zuiko&#x20;Digital&#x20;ED&#x20;8-25mm&#x20;F4.0&#x20;PRO" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/8/-/8-25mm_f4.0_pro-om.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="M.Zuiko Digital ED 8-25mm F4.0 PRO" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/8/-/8-25mm_f4.0_pro-om.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="M.Zuiko Digital ED 8-25mm F4.0 PRO" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/m-zuiko-ed-8-25mm-f4-pro-black" :id="`slide-desc-17769-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">M.Zuiko Digital ED 8-25mm F4.0 PRO</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-17769.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="17769" data-price-box="product-id-17769">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-17769"   data-price-amount="1149" data-price-type="oldPrice" class="price-wrapper " >1 149,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-17769"   data-price-amount="989" data-price-type="finalPrice" class="price-wrapper " >989,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-om-success " title="Saatavuus">Varastossa</p></div></div></div></div></div></div></div> <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/m-zuiko-ed-40-150mm-f2-8-pro-black" title="M.Zuiko&#x20;Digital&#x20;ED&#x20;40-150mm&#x20;F2.8&#x20;PRO" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/4/0/40-150mm_f2.8_pro-om.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="M.Zuiko Digital ED 40-150mm F2.8 PRO" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/4/0/40-150mm_f2.8_pro-om.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="M.Zuiko Digital ED 40-150mm F2.8 PRO" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/m-zuiko-ed-40-150mm-f2-8-pro-black" :id="`slide-desc-18528-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">M.Zuiko Digital ED 40-150mm F2.8 PRO</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-18528.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="18528" data-price-box="product-id-18528">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-18528"   data-price-amount="1499" data-price-type="oldPrice" class="price-wrapper " >1 499,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-18528"   data-price-amount="1299" data-price-type="finalPrice" class="price-wrapper " >1 299,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-om-success " title="Saatavuus">Varastossa</p></div></div></div></div></div></div></div> <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/m-zuiko-ed-90mm-f3-5-macro-is-pro-black" title="M.Zuiko&#x20;Digital&#x20;ED&#x20;90mm&#x20;F3.5&#x20;Macro&#x20;IS&#x20;PRO" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/9/0/90mm_f3.5_macro_is_pro-om.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="M.Zuiko Digital ED 90mm F3.5 Macro IS PRO" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/9/0/90mm_f3.5_macro_is_pro-om.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="M.Zuiko Digital ED 90mm F3.5 Macro IS PRO" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/m-zuiko-ed-90mm-f3-5-macro-is-pro-black" :id="`slide-desc-5389-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">M.Zuiko Digital ED 90mm F3.5 Macro IS PRO</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-5389.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="5389" data-price-box="product-id-5389">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-5389"   data-price-amount="1499" data-price-type="oldPrice" class="price-wrapper " >1 499,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-5389"   data-price-amount="1299" data-price-type="finalPrice" class="price-wrapper " >1 299,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-om-success " title="Saatavuus">Varastossa</p></div></div></div></div></div></div></div> <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/m-zuiko-ed-150-400mm-f4-5-tc1-25x-is-pro-white" title="M.Zuiko&#x20;Digital&#x20;ED&#x20;150-400mm&#x20;F4.5&#x20;TC1.25X&#x20;IS&#x20;PRO" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/1/5/150-400mm_f4.5_tc1.25x_is_pro-om.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="M.Zuiko Digital ED 150-400mm F4.5 TC1.25X IS PRO" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/1/5/150-400mm_f4.5_tc1.25x_is_pro-om.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="M.Zuiko Digital ED 150-400mm F4.5 TC1.25X IS PRO" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/m-zuiko-ed-150-400mm-f4-5-tc1-25x-is-pro-white" :id="`slide-desc-18472-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">M.Zuiko Digital ED 150-400mm F4.5 TC1.25X IS PRO</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-18472.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="18472" data-price-box="product-id-18472">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-18472"   data-price-amount="7699" data-price-type="oldPrice" class="price-wrapper " >7 699,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-18472"   data-price-amount="6899" data-price-type="finalPrice" class="price-wrapper " >6 899,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-om-success " title="Saatavuus">Varastossa</p></div></div></div></div></div></div></div>  <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >0 }"></div> <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >1 }"></div> <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >2 }"></div> <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >3 }"></div></div></div><template x-if="itemCount > pageSize"><div class="flex items-center justify-center"><div class="max-md:hidden absolute flex items-center z-10 md:left-0 lg:left-4 xl:-left-5 top-[40%]"><button type="button" aria-label="Edellinen&#x20;dia" :disabled="active === 0" class="text-primary-darker bg-gray-light-25 flex-none p-2.5" :class="{ 'opacity-25 pointer-events-none' : active === 0 }" @click="scrollPrevious" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img">
  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
<title>chevron-left</title></svg>
</button></div><div class="flex flex-wrap w-full gap-dots md:w-auto justify-center mt-10"> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(0 % pageSize)) }" :aria-current="active === 0" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (0 / pageSize) + 1)" @click="scrollTo(0)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 0, 'bg-gray-medium': active !== 0, 'hidden': (pageSize !== 1 && !!(0 % pageSize)) }" @click="scrollTo(0)" ></span></button>  <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(1 % pageSize)) }" :aria-current="active === 1" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (1 / pageSize) + 1)" @click="scrollTo(1)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 1, 'bg-gray-medium': active !== 1, 'hidden': (pageSize !== 1 && !!(1 % pageSize)) }" @click="scrollTo(1)" ></span></button>  <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(2 % pageSize)) }" :aria-current="active === 2" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (2 / pageSize) + 1)" @click="scrollTo(2)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 2, 'bg-gray-medium': active !== 2, 'hidden': (pageSize !== 1 && !!(2 % pageSize)) }" @click="scrollTo(2)" ></span></button>  <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(3 % pageSize)) }" :aria-current="active === 3" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (3 / pageSize) + 1)" @click="scrollTo(3)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 3, 'bg-gray-medium': active !== 3, 'hidden': (pageSize !== 1 && !!(3 % pageSize)) }" @click="scrollTo(3)" ></span></button> </div><div class="max-md:hidden absolute flex items-center z-10 top-[40%] md:right-0 lg:right-4 xl:-right-5"><button aria-label="Seuraava&#x20;dia" :disabled="active >= itemCount-pageSize" class="text-primary-darker bg-gray-light-25 flex-none p-2.5" :class="{ 'opacity-25 pointer-events-none' : active >= itemCount-pageSize }" @click="scrollNext" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img">
  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
<title>chevron-right</title></svg>
</button></div></div></template></div></section></div> <div id="tab-content-2" class="slider-instance-6a1178b785770 z-[-1] opacity-0 absolute top-0 left-0 w-full transition-opacity duration-300 ease-in-out text-[var(--slider-text-color)]" :class="{'opacity-100 z-[1]': activeTab === 2}" x-ref="slider-2" role="tabpanel" aria-labelledby="tab-2" :aria-hidden="activeTab === 2 ? false : true" x-effect=" if (activeTab === 2) { $el.querySelectorAll('*').forEach(el => { if (el.classList.contains('product-item-link') || el.tagName.toLowerCase() === 'button' || el.getAttribute('type') === 'button') { el.setAttribute('tabindex', isSliderLoaded ? '0' : '-1'); } else { el.setAttribute('tabindex', '-1'); } }); } else { $el.querySelectorAll('*').forEach(el => { el.setAttribute('tabindex', '-1'); }); } " x-transition:enter="opacity-0" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="opacity-100" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" > <script>
    'use strict';

    function initSliderComponent() {
        return {
            active: 0,
            itemCount: 0,
            getSlider() {
                return this.$root.querySelector('.js_slides');
            },
            pageSize: 4,
            pageFillers: 0,
            isDesktop: window.innerWidth >= 768,
            calcPageSize() {
                const slider = this.getSlider();
                if (slider) {
                    this.itemCount = slider.querySelectorAll('.js_slide').length;
                    this.pageSize = Math.round(slider.clientWidth / slider.querySelector('.js_slide').clientWidth);
                    this.pageFillers = (
                        this.pageSize * Math.ceil(this.itemCount / this.pageSize)
                    ) - this.itemCount;
                }
            },
            calcActive() {
                const slider = this.getSlider();

                if (slider) {
                    const sliderItems = this.itemCount + this.pageFillers;
                    const calculatedActiveSlide = slider.scrollLeft / (slider.scrollWidth / sliderItems);
                    this.active = Math.round(calculatedActiveSlide / this.pageSize) * this.pageSize;
                }
            },
            scrollPrevious() {
                this.scrollTo(this.active - this.pageSize);
            },
            scrollNext() {
                this.scrollTo(this.active + this.pageSize);
            },
            scrollTo(idx) {
                const slider = this.getSlider();

                if (slider) {
                    const slideWidth = slider.scrollWidth / (this.itemCount + this.pageFillers);
                    slider.scrollLeft = Math.floor(slideWidth) * idx;
                    this.active = idx;
                }
            }
        }
    }</script><section class="text-gray-700 body-font" x-data="initSliderComponent()" x-defer="intersect" @resize.window.debounce="calcPageSize(); $nextTick( function() { calcActive() }); isDesktop = window.innerWidth >= 768;" x-init="calcPageSize();" role="group" aria-roledescription="Karuselli"  > <div class="relative"> <div class="flex-none relative w-full overflow-x-hidden"><div class="relative flex flex-nowrap gap-3 md:gap-5 w-full overflow-y-hidden overflow-x-auto js_slides snap" @scroll.debounce="calcActive" > <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/12-x-50-exps-i-with-case" title="12x50&#x20;EXPS&#x20;I" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/transparent/e/x/expsi_12x50__tl_1920x1080_1.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="12x50 EXPS I" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/transparent/e/x/expsi_12x50__tl_1920x1080_1.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="12x50 EXPS I" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/12-x-50-exps-i-with-case" :id="`slide-desc-10240-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">12x50 EXPS I</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-10240.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="10240" data-price-box="product-id-10240">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-10240"   data-price-amount="249" data-price-type="oldPrice" class="price-wrapper " >249,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-10240"   data-price-amount="239" data-price-type="finalPrice" class="price-wrapper " >239,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-secondary-lighter " title="Saatavuus">Ei varastossa</p></div></div></div></div></div></div></div>  <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >0 }"></div> <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >1 }"></div> <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >2 }"></div> <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >3 }"></div></div></div><template x-if="itemCount > pageSize"><div class="flex items-center justify-center"><div class="max-md:hidden absolute flex items-center z-10 md:left-0 lg:left-4 xl:-left-5 top-[40%]"><button type="button" aria-label="Edellinen&#x20;dia" :disabled="active === 0" class="text-primary-darker bg-gray-light-25 flex-none p-2.5" :class="{ 'opacity-25 pointer-events-none' : active === 0 }" @click="scrollPrevious" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img">
  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
<title>chevron-left</title></svg>
</button></div><div class="flex flex-wrap w-full gap-dots md:w-auto justify-center mt-10"> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(0 % pageSize)) }" :aria-current="active === 0" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (0 / pageSize) + 1)" @click="scrollTo(0)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 0, 'bg-gray-medium': active !== 0, 'hidden': (pageSize !== 1 && !!(0 % pageSize)) }" @click="scrollTo(0)" ></span></button> </div><div class="max-md:hidden absolute flex items-center z-10 top-[40%] md:right-0 lg:right-4 xl:-right-5"><button aria-label="Seuraava&#x20;dia" :disabled="active >= itemCount-pageSize" class="text-primary-darker bg-gray-light-25 flex-none p-2.5" :class="{ 'opacity-25 pointer-events-none' : active >= itemCount-pageSize }" @click="scrollNext" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img">
  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
<title>chevron-right</title></svg>
</button></div></div></template></div></section></div> <div id="tab-content-3" class="slider-instance-6a1178b785770 z-[-1] opacity-0 absolute top-0 left-0 w-full transition-opacity duration-300 ease-in-out text-[var(--slider-text-color)]" :class="{'opacity-100 z-[1]': activeTab === 3}" x-ref="slider-3" role="tabpanel" aria-labelledby="tab-3" :aria-hidden="activeTab === 3 ? false : true" x-effect=" if (activeTab === 3) { $el.querySelectorAll('*').forEach(el => { if (el.classList.contains('product-item-link') || el.tagName.toLowerCase() === 'button' || el.getAttribute('type') === 'button') { el.setAttribute('tabindex', isSliderLoaded ? '0' : '-1'); } else { el.setAttribute('tabindex', '-1'); } }); } else { $el.querySelectorAll('*').forEach(el => { el.setAttribute('tabindex', '-1'); }); } " x-transition:enter="opacity-0" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="opacity-100" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" > <script>
    'use strict';

    function initSliderComponent() {
        return {
            active: 0,
            itemCount: 0,
            getSlider() {
                return this.$root.querySelector('.js_slides');
            },
            pageSize: 4,
            pageFillers: 0,
            isDesktop: window.innerWidth >= 768,
            calcPageSize() {
                const slider = this.getSlider();
                if (slider) {
                    this.itemCount = slider.querySelectorAll('.js_slide').length;
                    this.pageSize = Math.round(slider.clientWidth / slider.querySelector('.js_slide').clientWidth);
                    this.pageFillers = (
                        this.pageSize * Math.ceil(this.itemCount / this.pageSize)
                    ) - this.itemCount;
                }
            },
            calcActive() {
                const slider = this.getSlider();

                if (slider) {
                    const sliderItems = this.itemCount + this.pageFillers;
                    const calculatedActiveSlide = slider.scrollLeft / (slider.scrollWidth / sliderItems);
                    this.active = Math.round(calculatedActiveSlide / this.pageSize) * this.pageSize;
                }
            },
            scrollPrevious() {
                this.scrollTo(this.active - this.pageSize);
            },
            scrollNext() {
                this.scrollTo(this.active + this.pageSize);
            },
            scrollTo(idx) {
                const slider = this.getSlider();

                if (slider) {
                    const slideWidth = slider.scrollWidth / (this.itemCount + this.pageFillers);
                    slider.scrollLeft = Math.floor(slideWidth) * idx;
                    this.active = idx;
                }
            }
        }
    }</script><section class="text-gray-700 body-font" x-data="initSliderComponent()" x-defer="intersect" @resize.window.debounce="calcPageSize(); $nextTick( function() { calcActive() }); isDesktop = window.innerWidth >= 768;" x-init="calcPageSize();" role="group" aria-roledescription="Karuselli"  > <div class="relative"> <div class="flex-none relative w-full overflow-x-hidden"><div class="relative flex flex-nowrap gap-3 md:gap-5 w-full overflow-y-hidden overflow-x-auto js_slides snap" @scroll.debounce="calcActive" > <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/ls-p5-black" title="LS-P5" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/transparent/c/0/c03_ls-p5_blk_front_e_1920x1080_2.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="LS-P5" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/transparent/c/0/c03_ls-p5_blk_front_e_1920x1080_2.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="LS-P5" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/ls-p5-black" :id="`slide-desc-5145-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">LS-P5</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-5145.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="5145" data-price-box="product-id-5145">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-5145"   data-price-amount="219" data-price-type="oldPrice" class="price-wrapper " >219,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-5145"   data-price-amount="199" data-price-type="finalPrice" class="price-wrapper " >199,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-secondary-lighter " title="Saatavuus">Ei varastossa</p></div></div></div></div></div></div></div> <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/ws-883-black" title="WS-883" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/transparent/w/s/ws-883_e_black_front.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="WS-883" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/transparent/w/s/ws-883_e_black_front.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="WS-883" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/ws-883-black" :id="`slide-desc-17961-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">WS-883</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-17961.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="17961" data-price-box="product-id-17961">   <span class="price-new text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-17961"   data-price-amount="89.9" data-price-type="finalPrice" class="price-wrapper " >89,90 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-secondary-lighter " title="Saatavuus">Ei varastossa</p></div></div></div></div></div></div></div> <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/vn-541pc-black" title="VN-541PC" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/transparent/v/n/vn-541pc_front_o_85.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="VN-541PC" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/transparent/v/n/vn-541pc_front_o_85.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="VN-541PC" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/vn-541pc-black" :id="`slide-desc-18531-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">VN-541PC</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-18531.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="18531" data-price-box="product-id-18531">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-18531"   data-price-amount="49.9" data-price-type="oldPrice" class="price-wrapper " >49,90 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-18531"   data-price-amount="46.9" data-price-type="finalPrice" class="price-wrapper " >46,90 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-secondary-lighter " title="Saatavuus">Ei varastossa</p></div></div></div></div></div></div></div> <div class="flex flex-col shrink-0 md:h-full js_slide max-md:max-w-[256px] md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]"> <div class="hover:bg-white group bg-white product-pod slider-product-item md:bg-transparent flex flex-col w-full"><a href="https://explore.omsystem.com/fi/fi/ds-2700-with-odms-r8-dictation-module" title="DS-2700&#x20;&#x28;&#x2B;&#x20;ODMS&#x20;R8&#x20;Sanelumoduuli&#x29;" class="h-full" tabindex="-1" ><div class="relative"><img class="aspect-square w-full object-contain object-center opacity-100 transition-opacity duration-700" :class="{ 'md:group-hover:opacity-0': true }" src="https://emea.explore.omsystem.com/media/catalog/product/transparent/d/s/ds-2700_product_main_o_85_v2.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="DS-2700 (+ ODMS R8 Sanelumoduuli)" loading="lazy" ><img class="aspect-square w-full object-contain object-center opacity-0 md:group-hover:opacity-100 absolute top-0 left-0 transition-opacity duration-700" src="https://emea.explore.omsystem.com/media/catalog/product/transparent/d/s/ds-2700_product_main_o_85_v2.webp?width=1000&height=1000&optimize=medium&fit=bounds" alt="DS-2700 (+ ODMS R8 Sanelumoduuli)" loading="lazy" ></div></a> <div class="flex flex-col grow pt-3 gap-3 md:gap-4 pb-4 px-4 md:p-5"><div class="items-center justify-center text-start product-header block"><a class="product-item-link block" href="https://explore.omsystem.com/fi/fi/ds-2700-with-odms-r8-dictation-module" :id="`slide-desc-18749-${$id('slider-id')}`" ><span class="text-[var(--slider-text-color)] text-h4-bold-sm md:text-h4-bold overflow-hidden text-ellipsis line-clamp-2 md:line-clamp-3 break-words">DS-2700 (+ ODMS R8 Sanelumoduuli)</span></a></div><div class="flex flex-col gap-2 md:gap-3"><div class="text-xl text-primary-darker group is-slider" x-data="initPriceBox()" x-defer="intersect" @update-prices-18749.window="updatePrice($event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="18749" data-price-box="product-id-18749">   <span class="mt-[3px] price-old inline-block text-sm leading-[17.5px] text-gray-600 md:text-base md:leading-5 font-normal mr-1 group-[.is-slider]:mr-0"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="old-price-18749"   data-price-amount="409" data-price-type="oldPrice" class="price-wrapper " >409,00 €</span>  </span></span> <span class="price-new inline-block text-base leading-5 md:text-xl md:leading-6 font-bold"> <span class="price-container price-final_price&#x20;tax&#x20;weee" ><span  id="product-price-18749"   data-price-amount="359" data-price-type="finalPrice" class="price-wrapper " >359,00 €</span>  </span></span>   </div></div><div class="flex flex-wrap items-center gap-y-4 gap-x-2"><div class="w-auto justify-center">  <div class="text-right"><p class="text-[14px] leading-[17.5px] text-primary-darker flex align-middle gap-x-2 stock before:w-2 before:h-2 before:shrink-0 before:mt-[3px]  before:bg-om-success " title="Saatavuus">Varastossa</p></div></div></div></div></div></div></div>  <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >0 }"></div> <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >1 }"></div> <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >2 }"></div> <div x-show="isDesktop" :class="{ 'js_dummy_slide flex-none w-full md:w-[calc(50%-15px)] lg:w-[calc(33.3%-15px)] xl:w-[calc(25%-15px)]' : pageFillers >3 }"></div></div></div><template x-if="itemCount > pageSize"><div class="flex items-center justify-center"><div class="max-md:hidden absolute flex items-center z-10 md:left-0 lg:left-4 xl:-left-5 top-[40%]"><button type="button" aria-label="Edellinen&#x20;dia" :disabled="active === 0" class="text-primary-darker bg-gray-light-25 flex-none p-2.5" :class="{ 'opacity-25 pointer-events-none' : active === 0 }" @click="scrollPrevious" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img">
  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
<title>chevron-left</title></svg>
</button></div><div class="flex flex-wrap w-full gap-dots md:w-auto justify-center mt-10"> <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(0 % pageSize)) }" :aria-current="active === 0" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (0 / pageSize) + 1)" @click="scrollTo(0)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 0, 'bg-gray-medium': active !== 0, 'hidden': (pageSize !== 1 && !!(0 % pageSize)) }" @click="scrollTo(0)" ></span></button>  <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(1 % pageSize)) }" :aria-current="active === 1" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (1 / pageSize) + 1)" @click="scrollTo(1)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 1, 'bg-gray-medium': active !== 1, 'hidden': (pageSize !== 1 && !!(1 % pageSize)) }" @click="scrollTo(1)" ></span></button>  <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(2 % pageSize)) }" :aria-current="active === 2" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (2 / pageSize) + 1)" @click="scrollTo(2)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 2, 'bg-gray-medium': active !== 2, 'hidden': (pageSize !== 1 && !!(2 % pageSize)) }" @click="scrollTo(2)" ></span></button>  <button type="button" :class="{ 'hidden': (pageSize !== 1 && !!(3 % pageSize)) }" :aria-current="active === 3" :aria-label="hyva.str('N\u00E4ytt\u00F6\u0020dia\u0020\u00251', (3 / pageSize) + 1)" @click="scrollTo(3)" ><span class="shrink-0 block w-10 h-1 cursor-pointer" :class="{ 'bg-primary': active === 3, 'bg-gray-medium': active !== 3, 'hidden': (pageSize !== 1 && !!(3 % pageSize)) }" @click="scrollTo(3)" ></span></button> </div><div class="max-md:hidden absolute flex items-center z-10 top-[40%] md:right-0 lg:right-4 xl:-right-5"><button aria-label="Seuraava&#x20;dia" :disabled="active >= itemCount-pageSize" class="text-primary-darker bg-gray-light-25 flex-none p-2.5" :class="{ 'opacity-25 pointer-events-none' : active >= itemCount-pageSize }" @click="scrollNext" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img">
  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
<title>chevron-right</title></svg>
</button></div></div></template></div></section></div></div> <!-- CTA Buttons --><template x-if="productTabs[activeTab].ctas.length > 0"><div class="flex flex-col gap-y-4 md:flex-row md:justify-center items-center md:gap-x-5 mt-8 md:mt-10"><template x-for="(cta, index) in productTabs[activeTab].ctas" :key="index"><button type="button" :id="'cta-' + activeTab + '-' + index" class="max-md:w-full tab-cta" :class="['btn', 'transition-all', 'duration-700', cta.ctaTypeClass]" @click=" if (cta.countrySelectionLayer) { $dispatch('country-selector-overlay'); } else if (cta.ctaLinkType === 'anchor') { window.location.hash = cta.ctaAnchorLink; } else if (cta.ctaLinkType === 'absolute') { window.open(cta.ctaAbsoluteUrl + (cta.anchorId || ''), cta.isOpenInSameTab ? '_self' : '_blank'); } else { window.open(directBaseUrl + (cta.ctaRelativeUrl.startsWith('/') ? cta.ctaRelativeUrl : '/'+cta.ctaRelativeUrl) + (cta.anchorId || ''), cta.isOpenInSameTab ? '_self' : '_blank'); } " x-text="cta.ctaText" ></button></template></div></template></div></div><script>
    window.directBaseUrl = 'https://explore.omsystem.com/fi/fi';
    function initProductTabs_6a1178b785770() {
        return {
            activeTab: 0,
            productTabs: [{"ApacProduct":[{"ProductId":5984,"ProductName":"OM-5 Mark II","SKU":"V210070SW000-base","_key":"85a79aab0d79","_type":"Product","url":"om-5-mark-ii"},{"ProductId":5669,"ProductName":"OM-3","SKU":"V210050SW000-base","_key":"4444e001e39d","_type":"Product","url":"om-3"},{"ProductId":5843,"ProductName":"OM-D E-M10 Mark IV","SKU":"V207130BU000-base","_key":"f49ef7069968","_type":"Product","url":"om-d-e-m10-mark-iv"},{"ProductId":5918,"ProductName":"OM-1 Mark II","SKU":"V210040-base","_key":"94112bea97b9","_type":"Product","url":"om-1-mark-ii"},{"ProductId":5846,"ProductName":"TG-7","SKU":"V110030RU000-base","_key":"85c8476b7cef","_type":"Product","url":"tg-7"}],"EmeaProduct":[{"ProductId":18684,"ProductName":"OM-1 Mark II 12-40mm PRO II Lens Kit","SKU":"V210041BE000","_key":"816f0861cbcc","_type":"Product","url":"om-1-mark-ii-12-40mm-pro-ii-lens-kit"},{"ProductId":19026,"ProductName":"OM-3 12-45mm f4.0 PRO Kit","SKU":"V210051SW000","_key":"fe244e792dc5","_type":"Product","url":"om-3-12-45mm-f4-0-pro-kit"},{"ProductId":19209,"ProductName":"OM-5 Mark II Silver with 12-45mm F4.0 PRO Lens Kit","SKU":"V210071SW000","_key":"21876c09279d","_type":"Product","url":"om-5-mark-ii-silver-12-45mm-pro-lens-kit"},{"ProductId":6451,"ProductName":"E-P7 14-42mm Pancake Zoom Kit (white\/silver)","SKU":"V205111WE000","_key":"e9def0ffecf4","_type":"Product","url":"e-p7-1442-ez-kit-wht-slv"},{"ProductId":5042,"ProductName":"E-M10 Mark IV Pancake Kit (Silver)","SKU":"V207132SE000","_key":"38ef19d09749","_type":"Product","url":"product-abcd-1595511070"},{"ProductId":18495,"ProductName":"TG-7 Red","SKU":"V110030RU000","_key":"0d9ca50dd0f1","_type":"Product","url":"tg-7-red"}],"NalaProduct":[{"ProductId":7621,"ProductName":"OM-1 Mark II 12-40mm PRO II Lens Kit","SKU":"V210041BU000-U410-AF01","_key":"3897ecbd8392","_type":"Product","url":"om-1-mark-ii-12-40mm-pro-ii-lens-kit"},{"ProductId":7878,"ProductName":"OM-3 12-45mm f4.0 PRO Kit","SKU":"V210051SW000-U410-AF01","_key":"86f5680ee2c1","_type":"Product","url":"om-3-12-45mm-f4-0-pro-kit"},{"ProductId":8004,"ProductName":"OM-5 Mark II Silver 14-150mm Lens Kit","SKU":"V210072SU000-U410-AF01","_key":"0580f4b93844","_type":"Product","url":"om-5-mark-ii-silver-14-150mm-lens-kit"},{"ProductId":5039,"ProductName":"OM-D E-M10 Mark IV Black","SKU":"V207130BU000-U410-AF01","_key":"b09a85c9d382","_type":"Product","url":"om-d-e-m10-mark-iv-body-black"},{"ProductId":7549,"ProductName":"TG-7 Red","SKU":"V110030RU000-U410-AF01","_key":"45a3028a2e51","_type":"Product","url":"tg-7-red"}],"_createdAt":"2025-04-23T17:00:57Z","_id":"a80c6512-fc07-4f8a-b3f5-356e163a345d","_rev":"tAsBDJwz7xVWniA1KjSdGo","_system":{"base":{"id":"a80c6512-fc07-4f8a-b3f5-356e163a345d","rev":"j6apwLR0IZJdXHLkr1Ki7S"}},"_type":"ProductTab","_updatedAt":"2026-05-01T15:56:39Z","copy":[],"ctas":[{"ctaText":"Osta kaikki kamerat","ctaTypeClass":"btn btn-primary text-pallas btn-size-lg","ctaLinkType":"relative","ctaRelativeUrl":"\/cameras","ctaAbsoluteUrl":"","anchorId":"","ctaAnchorLink":"#","isOpenInSameTab":true,"countrySelectionLayer":false}],"identifier":{"_type":"slug","current":"hp-product-tab-cameras"},"name":"HP product tab Cameras","rootScope":"global","tabTitle":"Kamerat","products":[{},{},{},{},{},{}]},{"ApacProduct":[{"ProductId":5993,"ProductName":"M.Zuiko Digital ED 50-200mm F2.8 IS PRO","SKU":"V336040WW000","_key":"d65d65236d09","_type":"Product","url":"m-zuiko-ed-50-200mm-f2-8-is-pro-white"},{"ProductId":5078,"ProductName":"M.Zuiko Digital ED 8-25mm F4.0 PRO","SKU":"V335330BW000","_key":"a294e6f5c502","_type":"Product","url":"m-zuiko-ed-8-25mm-f4-pro"},{"ProductId":5252,"ProductName":"M.Zuiko Digital ED 90mm F3.5 Macro IS PRO","SKU":"V335150BW000","_key":"e5b06b379b46","_type":"Product","url":"m-zuiko-ed-90mm-f3-5-macro-is-pro"},{"ProductId":5069,"ProductName":"M.Zuiko Digital ED 150-400mm F4.5 TC1.25X IS PRO","SKU":"V335300BW000","_key":"8aead3472bb8","_type":"Product","url":"m-zuiko-ed-150-400mm-f4-5-tc1-25x-is-pro"}],"EmeaProduct":[{"ProductId":17769,"ProductName":"M.Zuiko Digital ED 8-25mm F4.0 PRO","SKU":"V335330BW000","_key":"2a404cf6c1dd","_type":"Product","url":"m-zuiko-ed-8-25mm-f4-pro-simple"},{"ProductId":18528,"ProductName":"M.Zuiko Digital ED 40-150mm F2.8 PRO","SKU":"V335310BW000","_key":"24043b38fe28","_type":"Product","url":"m-zuiko-ed-40-150mm-f2-8-pro-simple"},{"ProductId":5389,"ProductName":"M.Zuiko Digital ED 90mm F3.5 Macro IS PRO","SKU":"V335150BW000","_key":"d4ea0b84fb1f","_type":"Product","url":"m-zuiko-ed-90mm-f3-5-macro-is-pro-simple"},{"ProductId":18472,"ProductName":"M.Zuiko Digital ED 150-400mm F4.5 TC1.25X IS PRO","SKU":"V335300BW000","_key":"33a326eaa9c9","_type":"Product","url":"m-zuiko-ed-150-400mm-f4-5-tc1-25x-is-pro-simple"}],"NalaProduct":[{"ProductId":7896,"ProductName":"M.Zuiko Digital ED 100-400mm F5.0-6.3 IS II","SKU":"V336000BW000-U410-AF01","_key":"691d04107b88","_type":"Product","url":"m-zuiko-ed-100-400mm-f5-0-6-3-is-ii-black"},{"ProductId":8068,"ProductName":"M.Zuiko Digital ED 50-200mm F2.8 IS PRO","SKU":"V336040WW000-U410-AF01","_key":"a5b05448812d","_type":"Product","url":"m-zuiko-ed-50-200mm-f2-8-is-pro-white"},{"ProductId":7812,"ProductName":"M.Zuiko Digital ED 8-25mm F4.0 PRO OM","SKU":"V335330BW000-U410-AF01","_key":"79a441f2107b","_type":"Product","url":"m-zuiko-ed-8-25mm-f4-pro-simple"},{"ProductId":7669,"ProductName":"M.Zuiko Digital ED 12-100mm F4.0 IS PRO OM","SKU":"V335270BW000-U410-AF01","_key":"24e0e2a0891d","_type":"Product","url":"m-zuiko-ed-12-100mm-f4-0-is-pro-black"}],"_createdAt":"2025-04-24T04:50:50Z","_id":"b352beab-a0f2-4b77-bc29-db6c936705e8","_rev":"ReSrd7SqmdV3lmrZOQHdtw","_system":{"base":{"id":"b352beab-a0f2-4b77-bc29-db6c936705e8","rev":"C8w6K7CB1vlv99wBNoBeEC"}},"_type":"ProductTab","_updatedAt":"2026-04-17T07:02:38Z","copy":[],"ctas":[{"ctaText":"Osta kaikki linssit","ctaTypeClass":"btn btn-primary text-pallas btn-size-lg","ctaLinkType":"relative","ctaRelativeUrl":"\/lenses","ctaAbsoluteUrl":"","anchorId":"","ctaAnchorLink":"#","isOpenInSameTab":true,"countrySelectionLayer":false}],"identifier":{"_type":"slug","current":"hp-product-tab-lenses"},"name":"HP product tab Lenses","rootScope":"global","tabTitle":"Objektiivit","products":[{},{},{},{}]},{"ApacProduct":[{"ProductId":2593,"ProductName":"8x42 PRO 11111111111111111111111111111111111111111111111111111111111111111111111111111111","SKU":"V501020BJ000","_key":"dfc32cc5f1b8","_type":"Product","url":"8x42-pro"},{"ProductId":2592,"ProductName":"10x42 PRO","SKU":"V501021BJ000","_key":"5c894ed8ae0a","_type":"Product","url":"10x42-pro"},{"ProductId":5050,"ProductName":"10x50 S","SKU":"V656017BJ000","_key":"d3ae462f798c","_type":"Product","url":"10x50-s"},{"ProductId":5051,"ProductName":"8-16x40 S Zoom","SKU":"V656018BJ000","_key":"d988e37f0bb5","_type":"Product","url":"8-16x40-s-zoom"}],"EmeaProduct":[{"ProductId":2593,"ProductName":"8x42 PRO","SKU":"V501020BU000","_key":"8b9571d73c4e","_type":"Product","url":"8x42-pro"},{"ProductId":10240,"ProductName":"12x50 EXPS I","SKU":"018797","_key":"5468b6eef8f8","_type":"Product","url":"12-x-50-exps-i-with-case"},{"ProductId":2602,"ProductName":"8x21 RC II WP (Green)","SKU":"V501013EE000","_key":"edcd64b9b0df","_type":"Product","url":"8x21-rc-ii-wp-green"},{"ProductId":5050,"ProductName":"10x50 S","SKU":"V501023BU000","_key":"77c72d26b1ed","_type":"Product","url":"10x50-s"}],"NalaProduct":[{"ProductId":8125,"ProductName":"10x50 S High-Power Binoculars OM","SKU":"V656017BU000-U410-AF01","_key":"aea468d69235","_type":"Product","url":"10x50-s"},{"ProductId":2599,"ProductName":"Roamer RC II 10x21 Roof Binocular (Silver)","SKU":"118801-U410-AF01","_key":"12cea5563367","_type":"Product","url":"10x21-rc-ii"},{"ProductId":5051,"ProductName":"8-16x40 S Zoom Binoculars","SKU":"V501024BU000-U410-AF01","_key":"849669e47d0a","_type":"Product","url":"8-16x40-s-zoom"},{"ProductId":2592,"ProductName":"10x42 PRO Waterproof Binoculars","SKU":"V501021BU000-U410-AF01","_key":"c7b00cd06701","_type":"Product","url":"10x42-pro"}],"_createdAt":"2025-04-24T04:58:32Z","_id":"678fee80-3858-427a-8afe-9d2840b8671f","_rev":"78PJzWsJRD7Nch1nOfLn0q","_system":{"base":{"id":"678fee80-3858-427a-8afe-9d2840b8671f","rev":"78PJzWsJRD7Nch1nOfLfea"}},"_type":"ProductTab","_updatedAt":"2026-04-09T20:27:28Z","copy":[],"ctas":[{"ctaText":"Katso kaikki kiikarit","ctaTypeClass":"btn btn-primary text-pallas btn-size-lg","ctaLinkType":"relative","ctaRelativeUrl":"\/binoculars","ctaAbsoluteUrl":"","anchorId":"","ctaAnchorLink":"#","isOpenInSameTab":true,"countrySelectionLayer":false}],"identifier":{"_type":"slug","current":"hp-product-tab-binos"},"name":"HP product tab Binos","rootScope":"global","tabTitle":"Kiikarit","products":[{}]},{"ApacProduct":[{"ProductId":5145,"ProductName":"LS-P5","SKU":"V409180BG000","_key":"3f940b24aff7","_type":"Product","url":"ls-p5"},{"ProductId":5270,"ProductName":"WS-883","SKU":"V420340BE000","_key":"2e9a5e472d23","_type":"Product","url":"ws-883"},{"ProductId":2590,"ProductName":"VN-541PC","SKU":"V420040BE000","_key":"63c9fc208b0a","_type":"Product","url":"vn-541pc"},{"ProductId":5074,"ProductName":"VP-20","SKU":"V413130BG000","_key":"b52e8f01dc91","_type":"Product","url":"vp-20"}],"EmeaProduct":[{"ProductId":5145,"ProductName":"LS-P5","SKU":"V409180BG000","_key":"4cc6b313f73e","_type":"Product","url":"ls-p5-simple"},{"ProductId":17961,"ProductName":"WS-883","SKU":"V420340BE000","_key":"23ebbd6118a9","_type":"Product","url":"ws-883-simple"},{"ProductId":18531,"ProductName":"VN-541PC","SKU":"V420040BE000","_key":"0eab53b014aa","_type":"Product","url":"vn-541pc-simple"},{"ProductId":18749,"ProductName":"DS-2700 (with ODMS R8 Dictation Module)","SKU":"V420370BE000","_key":"ee8a5d38cc0a","_type":"Product","url":"ds-2700-with-odms-r8-dictation-module"}],"NalaProduct":[{"ProductId":5145,"ProductName":"LS-P5","SKU":"V409180BG000-U410-AF01","_key":"5d7d2c689160","_type":"Product","url":"ls-p5-simple"},{"ProductId":7210,"ProductName":"WS-883","SKU":"V420340BU000-U410-AF01","_key":"63f831e32ec1","_type":"Product","url":"ws-883-simple"},{"ProductId":2586,"ProductName":"DM-720 High-Resolution Audio Recorder","SKU":"V414111SU000-U410-AF01","_key":"138e6965608b","_type":"Product","url":"dm-720-silver"},{"ProductId":7672,"ProductName":"TP-8 Telephone Pickup OM","SKU":"V4201400W000-U410-AF01","_key":"512607247c49","_type":"Product","url":"tp-8-telephone-pickup-om"}],"_createdAt":"2025-04-24T05:01:08Z","_id":"1cea594a-e27c-4731-ad65-68ac70c97447","_rev":"scW5aaj3rHKAD0yfYBjrjo","_system":{"base":{"id":"1cea594a-e27c-4731-ad65-68ac70c97447","rev":"VYBfqHTSfu1DrBlDugI4B3"}},"_type":"ProductTab","_updatedAt":"2026-05-06T14:32:39Z","copy":[],"ctas":[{"ctaText":"Katso kaikki audiotuotteet","ctaTypeClass":"btn btn-primary text-pallas btn-size-lg","ctaLinkType":"relative","ctaRelativeUrl":"\/audio","ctaAbsoluteUrl":"","anchorId":"","ctaAnchorLink":"#","isOpenInSameTab":true,"countrySelectionLayer":false}],"identifier":{"_type":"slug","current":"hp-product-tab-audio"},"name":"HP product tab Audio","rootScope":"global","tabTitle":"Audio","products":[{},{},{},{}]}],
            isSliderLoaded: false,
            isSticky: false,

            init() {
                this.$nextTick(() => {
                                            this.updateContainerHeight();
                        this.observeSliderItemChanges();
                     this.updateTextColor();
                    this.setProductTitleHeight();
                });
            },

            hideSecondFocusHighlighter() {
                if ('tab' === 'grid') {
                    const targetWidget = document.querySelector('access-widget-ui[data-acsb="widget"]');
                    if (targetWidget && targetWidget.nextElementSibling) {
                        const elementToHide = targetWidget.nextElementSibling;
                        if (elementToHide.style.display !== 'none') {
                            elementToHide.style.display = 'none';
                        }
                    }
                }
            },

            setProductTitleHeight() {
                const selector = '.slider-instance-6a1178b785770';
                const containers = Array.from(this.$root.querySelectorAll(selector));
                const headersContainer = containers.map(container => container.querySelectorAll('.product-header'));
                const type = 'slider';
                headersContainer.forEach(headers => window.setProductTitleHeight(type, headers));
            },

            handleGridProductTabClick() {
                setTimeout(() => {
                    this.hideSecondFocusHighlighter();
                    this.setProductTitleHeight();
                }, 30);
            },

                             updateContainerHeight() {
                    this.$nextTick(() => {
                        let maxSliderHeight = 0;
                        const sliders = document.querySelectorAll('.slider-instance-6a1178b785770');
                        const sliderContainer = this.$refs.sliderContainer;

                        sliders.forEach(slider => {
                            if (slider.offsetHeight > maxSliderHeight) {
                                maxSliderHeight = slider.offsetHeight;
                            }
                        });

                        sliderContainer.style.height = maxSliderHeight + 'px';

                        if (!this.isSliderLoaded) {
                            this.isSliderLoaded = true;
                        }
                    });
                },
                             observeSliderItemChanges() {
                    const sliders = document.querySelectorAll('.slider-instance-6a1178b785770');
                    const mutationObserver = new MutationObserver((mutationsList) => {
                        mutationsList.forEach(mutation => {
                            if (mutation.type === 'childList') {
                                this.updateContainerHeight();
                            }
                        });
                    });

                    sliders.forEach(slider => {
                        mutationObserver.observe(slider, {
                            childList: true,
                            subtree: true,
                        });
                    });
                },
             updateTextColor() {
                const container = this.$refs.sliderContainer || this.$refs.gridContainer;

                if (!container) {
                    return;
                }

                const newPriceElements = container.querySelectorAll('.stock');
                const stocksElements = container.querySelectorAll('.price-new');

                newPriceElements.forEach((element) => {
                    element.style.color = 'var(--slider-text-color)';
                });
                stocksElements.forEach((element) => {
                    element.style.color = 'var(--slider-text-color)';
                });
            },

            eventListeners: {
                ['@resize.window.debounce']() {
                                            this.updateContainerHeight();
                     },
                 },
        }
    }</script>        <!-- Main Div --><div  style="--background-image: url(); --bg-color: #fafafa" alt="" class=" bg-cover bg-center w-screen ms-[calc(50%-50vw)] text-black py-16 md:py-25 bg-[var(--bg-color)] bg-[image:var(--background-image)] " data-id="ff054d8a-78f0-4dc0-a46d-eedc7ea48bd3" x-data="columnSet('ff054d8a-78f0-4dc0-a46d-eedc7ea48bd3', false, '')" data-new-url= "" x-init="init(); updateBgHotspot('', '--background-image', $el);" @resize.window="onResize()"   ><div class="columnSet w-full max-w-2xl flex flex-col text-center mx-auto gap-8 px-4 md:gap-10 md:px-5 2xl:px-10 "><!-- Heading -->  <h2 class="text-h2-sm md:text-h2 max-w-md-lg mx-auto ">Säästä varusteista</h2> <!-- Tiles Block/Column --><div class="w-full flex flex-col gap-xl md:gap-l md:flex-row md:items-stretch mx-auto max-w-full  text-start"><!-- Special grid for 1/two/four column sets -->  <!-- Tile --><div class="md:flex-1 text-start  " > <div class="flex-1 flex flex-col h-full items-left "  ><div class="flex flex-col w-full h-full"><!-- Tile Image / Special Header --> <div class="flex-1"> <div class="relative w-full flex-shrink-0"> <a href = "https://explore.omsystem.com/fi/fi/explore-the-city-promotion?icid=explore_the_city_may26-internal-hp-link_shop-promo_lp" target="_self" class="group" > <img class=" w-full md:h-full group-focus-visible:ring-1 group-focus-visible:ring-black group-focus-visible:ring-opacity-50 object-cover md:min-h-[330px] max-h-[330px]  " alt="Explore The City Cashback" src="https://cdn.sanity.io/images/ipox1240/live/ebee754f76865a4cd0fe788ad15d1bac8d5e3159-833x495.jpg" data-new-url= "" x-init='() => { if ($el.complete) updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/ebee754f76865a4cd0fe788ad15d1bac8d5e3159-833x495.jpg", $el);}' @load='updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/ebee754f76865a4cd0fe788ad15d1bac8d5e3159-833x495.jpg", $el)'></img>  <!-- Badge --> <span class="max-md:p-1.5 text-pallas text-caption tile-badge md:w-auto md:absolute md:top-0 md:left-0 ">21.5.2026 - 14.6.2026</span>  <!-- Subheader on tile --> </a> </div></div> <!-- Tile Text Content --> <div class="flex flex-col h-full gap-6 md:p-5 md:gap-xxl  py-4 gap-6 md:gap-xxl    " ><div class="flex flex-col text-start gap-sm md:gap-l "  ><div class=""><!-- Icon --> <!-- Subheader --> <h3 class="flex colSetSubheader-ff054d8a-78f0-4dc0-a46d-eedc7ea48bd3  md:opacity-0  text-h3-sm md:text-h3 font-neue  justify-start   !font-helvetica" >Säästä jopa 300 € OM-3-kamerasta ja objektiiveista</h3></div><!-- Copy --> <!-- Additional Copy --></div><!-- CTA Section --> </div></div></div></div> <!-- Tile --><div class="md:flex-1 text-start  " > <div class="flex-1 flex flex-col h-full items-left "  ><div class="flex flex-col w-full h-full"><!-- Tile Image / Special Header --> <div class="flex-1"> <div class="relative w-full flex-shrink-0"> <a href = "https://explore.omsystem.com/fi/fi/adventure-cashback-promotion?icid=adventure_cashback_apr26-internal-hp-link_shop-promo_lp" target="_self" class="group" > <img class=" w-full md:h-full group-focus-visible:ring-1 group-focus-visible:ring-black group-focus-visible:ring-opacity-50 object-cover md:min-h-[330px] max-h-[330px]  " alt="Adventure Cashback Promotion" src="https://cdn.sanity.io/images/ipox1240/live/338045ef28f37d44d6dcf4c89bf165754806be28-833x495.jpg" data-new-url= "" x-init='() => { if ($el.complete) updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/338045ef28f37d44d6dcf4c89bf165754806be28-833x495.jpg", $el);}' @load='updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/338045ef28f37d44d6dcf4c89bf165754806be28-833x495.jpg", $el)'></img>  <!-- Badge --> <span class="max-md:p-1.5 text-pallas text-caption tile-badge md:w-auto md:absolute md:top-0 md:left-0 ">Lunasta jopa 31.5.2026</span>  <!-- Subheader on tile --> </a> </div></div> <!-- Tile Text Content --> <div class="flex flex-col h-full gap-6 md:p-5 md:gap-xxl  py-4 gap-6 md:gap-xxl    " ><div class="flex flex-col text-start gap-sm md:gap-l "  ><div class=""><!-- Icon --> <!-- Subheader --> <h3 class="flex colSetSubheader-ff054d8a-78f0-4dc0-a46d-eedc7ea48bd3  md:opacity-0  text-h3-sm md:text-h3 font-neue  justify-start   !font-helvetica" >Matkusta kevyesti. Mene pidemmälle. Säästä jopa 500€</h3></div><!-- Copy --><div class="copy-text md:flex-1   text-start"><p class='text-caption md:text-body text-start font-neue '><br></p></div> <!-- Additional Copy --></div><!-- CTA Section --> </div></div></div></div> <!-- Tile --><div class="md:flex-1 text-start  " > <div class="flex-1 flex flex-col h-full items-left "  ><div class="flex flex-col w-full h-full"><!-- Tile Image / Special Header --> <div class="flex-1"> <div class="relative w-full flex-shrink-0"> <a href = "https://my.omsystem.com/tradein/main" target="_blank" class="group" > <img class=" w-full md:h-full group-focus-visible:ring-1 group-focus-visible:ring-black group-focus-visible:ring-opacity-50 object-cover md:min-h-[330px] max-h-[330px]  " alt="" src="https://cdn.sanity.io/images/ipox1240/live/243d41a0cf0d368555fd6bb6fc1855c6e990e23b-833x495.jpg" data-new-url= "" x-init='() => { if ($el.complete) updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/243d41a0cf0d368555fd6bb6fc1855c6e990e23b-833x495.jpg", $el);}' @load='updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/243d41a0cf0d368555fd6bb6fc1855c6e990e23b-833x495.jpg", $el)'></img>  <!-- Badge --> <span class="max-md:p-1.5 text-pallas text-caption tile-badge md:w-auto md:absolute md:top-0 md:left-0 ">Vain valituissa maissa</span>  <!-- Subheader on tile --> </a> </div></div> <!-- Tile Text Content --> <div class="flex flex-col h-full gap-6 md:p-5 md:gap-xxl  py-4 gap-6 md:gap-xxl    " ><div class="flex flex-col text-start gap-sm md:gap-l "  ><div class=""><!-- Icon --> <!-- Subheader --> <h3 class="flex colSetSubheader-ff054d8a-78f0-4dc0-a46d-eedc7ea48bd3  md:opacity-0  text-h3-sm md:text-h3 font-neue  justify-start   !font-helvetica" >Vaihda vanha uuteen - Päivitys alkaa tästä</h3></div><!-- Copy --> <!-- Additional Copy --></div><!-- CTA Section --> </div></div></div></div> </div><!-- Main CTA --> <div class="mt-auto" > <a class="max-w-[408px] w-full mx-auto md:w-auto btn btn-primary text-pallas btn-size-lg " href="https://explore.omsystem.com/fi/fi/promotions"   target="_self" >Katso kaikki tarjoukset</a> </div></div></div><script>
    document.addEventListener('alpine:init', () => {
        Alpine.data('columnSet', (componentId, hideUntilSelection = false, kitDropdownId = '') => ({
            componentId: componentId,
            kitDropdownId: kitDropdownId,
            visible: !hideUntilSelection,
            resizeTimer: null,
            subheaderSelector: '',
            is124Block: false,

            equalizeColumnSetSubheaders() {
                const subheaders = document.querySelectorAll(this.subheaderSelector);

                subheaders.forEach(el => {
                    el.style.minHeight = '';

                    if (window.innerWidth < 768) {
                        el.classList.remove('md:opacity-0');
                    }
                });

                if (subheaders.length === 1) {
                    subheaders[0].classList.remove('md:opacity-0');

                    return;
                }

                if (window.innerWidth < 768 || subheaders.length === 0) {
                    return;
                }

                subheaders.forEach(el => el.style.minHeight = '');

                
                if (this.is124Block && subheaders.length > 1) {
                    const pairs = [];

                    for (let i = 0; i < subheaders.length; i += 2) {
                        const pair = [subheaders[i]];

                        if (i + 1 < subheaders.length) {
                            pair.push(subheaders[i + 1]);
                        }

                        pairs.push(pair);
                    }

                    pairs.forEach(pair => {
                        let pairMaxHeight = 0;
                        pair.forEach(el => {
                            pairMaxHeight = Math.max(pairMaxHeight, el.getBoundingClientRect().height);
                        });

                        if (pairMaxHeight > 0) {
                            pair.forEach(el => {
                                el.style.minHeight = pairMaxHeight + 'px';
                                el.classList.remove('md:opacity-0');
                            });
                        }
                    });
                } else {
                    let maxHeight = 0;
                    subheaders.forEach(el => {
                        maxHeight = Math.max(maxHeight, el.getBoundingClientRect().height);
                    });

                    if (maxHeight > 0) {
                        subheaders.forEach(el => {
                            el.style.minHeight = maxHeight + 'px';
                            el.classList.remove('md:opacity-0');
                        });
                    }
                }
            },

            init() {
                this.subheaderSelector = '.colSetSubheader-' + this.componentId + ':not(.md\\:hidden)';

                window.addEventListener('load', () => {
                    this.equalizeColumnSetSubheaders();
                });
            },

            onResize() {
                clearTimeout(this.resizeTimer);
                this.resizeTimer = setTimeout(() => this.equalizeColumnSetSubheaders(), 250);
            },

            onKitDropdownChange() {
                const detail = this.$event.detail;
                if (!detail) return;
                if (this.kitDropdownId && detail.kitDropdownId !== this.kitDropdownId) return;

                this.visible = true;

                const ctaMap = { 0: detail.firstCTA, 1: detail.secondCTA };
                for (const [index, ctaData] of Object.entries(ctaMap)) {
                    const el = this.$el.querySelector('[data-kit-cta-index="' + index + '"]');
                    if (!el) continue;

                    const wrapper = el.closest('[data-kit-cta-wrapper]');

                    if (!ctaData || !ctaData.text) {
                        if (wrapper) wrapper.classList.add('hidden');
                        continue;
                    }

                    const oldBtnClass = el.dataset.btnClass || '';
                    if (oldBtnClass) {
                        oldBtnClass.split(' ').filter(Boolean).forEach(function(c) { el.classList.remove(c); });
                    }
                    if (ctaData.className) {
                        ctaData.className.split(' ').filter(Boolean).forEach(function(c) { el.classList.add(c); });
                        el.dataset.btnClass = ctaData.className;
                    }

                    el.textContent = ctaData.text;
                    if (ctaData.href) el.href = ctaData.href;
                    el.target = ctaData.target || '_self';
                    if (wrapper) wrapper.classList.remove('hidden');
                }

                this.$nextTick(() => {
                    this.$nextTick(() => {
                        this.$el.scrollIntoView({ behavior: 'smooth' });
                    });
                });
            }
        }));
    });</script> <div  x-data="imageGallery49030704_0fda_439d_b52f_4fbac290dc3a()" style="--background-image: url(); --bg-color: #000" class="full-layer-container text-pallas bg-[var(--bg-color)] bg-[image:var(--background-image)] bg-cover bg-center bg-no-repeat" alt="" data-id="49030704-0fda-439d-b52f-4fbac290dc3a" data-new-url="" x-init="updateBgHotspot('', '--background-image', $el)" ><div class="imageGallery max-w-2xl w-full mx-auto px-4 md:px-5 2xl:px-10 pb-10 sm:pb-25 pt-16 sm:pt-15 flex flex-col justify-center items-center gap-8 sm:gap-10"><div class="flex flex-col gap-4 sm:gap-5 items-center max-w-md-lg">  <h2 class="text-center">Katso kuvia OM SYSTEM -käyttäjiltä</h2> <h3 class="text-center">Inspiroidu OM SYSTEM Ambassador -kuvaajien töistä</h3></div> <div class="images-collection flex items-stretch sm:gap-5 gap-3 sm:max-h-[670px] sm:flex-nowrap flex-wrap text-white"><button @click='setImageData({"_createdAt":"2025-03-17T12:16:45Z","_id":"226a00bf-23e6-42ba-b5ba-9c8d51c67db9","_rev":"DO4T4B2yvy9TUDs5gQ10qy","_type":"Image","_updatedAt":"2026-04-07T12:57:19Z","cta":null,"exifData":["OM-1 Mark II","M.Zuiko Digital ED 7-14mm F2.8 PRO","3.2s","F9.0","ISO200","Live GND"],"identifier":{"_type":"slug","current":"gallery-image-brooke-bartleson-bear"},"media":{"_type":"image","asset":{"url":"https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/4edb7b616ab79ca57609fa9b7db8d0b095ca9c71-800x600.jpg"}},"name":"Gallery image Matt Horspool Landscape","rootScope":"global","shotByName":"Matt Horspool"}, $el)' class="main-image-container sm:w-[calc(50%-10px)] max-h-[343px] min-h-[343px] sm:max-h-none sm:min-h-auto w-full group relative hover:cursor-pointer flex"><span class="sm:hidden block absolute top-4 right-4"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 21 21" fill="none" class="text-white" role="img">
    <path d="M4.76595 13.5732C5.98241 14.7897 7.44929 15.3979 9.16664 15.3979C10.884 15.3979 12.3509 14.7897 13.5674 13.5732C14.7838 12.3568 15.3777 10.9042 15.3777 9.18683C15.3777 7.46948 14.7767 6.00973 13.5674 4.78612C12.3438 3.57682 10.8768 2.97575 9.16664 2.97575C7.45644 2.97575 5.98238 3.57682 4.78023 4.78612C3.57809 5.99542 2.95555 7.46948 2.95555 9.18683C2.95555 10.9042 3.55665 12.3711 4.76595 13.5732ZM20.9448 19.5339L19.5209 20.9579L14.2257 15.6627C12.7445 16.8219 11.0557 17.4015 9.16664 17.4015C8.07898 17.4015 7.02714 17.194 6.02535 16.779C5.02356 16.3639 4.12907 15.77 3.34911 14.9972C2.5763 14.2244 1.98239 13.3371 1.56736 12.3353C1.15233 11.3335 0.944824 10.2816 0.944824 9.18683C0.944824 8.09202 1.15233 7.04014 1.56736 6.03836C1.98239 5.03657 2.5763 4.14927 3.34911 3.37646C4.12907 2.60365 5.01641 2.00974 6.02535 1.59471C7.03429 1.17968 8.07183 0.972168 9.16664 0.972168C10.2614 0.972168 11.3133 1.17968 12.3151 1.59471C13.3169 2.00974 14.2042 2.60365 14.977 3.37646C15.757 4.14927 16.3509 5.03657 16.7659 6.03836C17.1809 7.04014 17.3885 8.09202 17.3885 9.18683C17.3885 11.0616 16.8089 12.7503 15.6425 14.2459L20.9377 19.541L20.9448 19.5339Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M8.3999 13V5H9.9999V13H8.3999Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M13.2002 9.7998L5.2002 9.7998L5.2002 8.1998L13.2002 8.1998L13.2002 9.7998Z" fill="currentColor"/>
<title>zoom-in</title></svg>
</span> <img  class="w-full h-full object-cover" :src="zoomedImg === 'https://cdn.sanity.io/images/ipox1240/live/4edb7b616ab79ca57609fa9b7db8d0b095ca9c71-800x600.jpg' ? zoomedImg : 'https://cdn.sanity.io/images/ipox1240/live/4edb7b616ab79ca57609fa9b7db8d0b095ca9c71-800x600.jpg'" alt="Gallery image Matt Horspool Landscape" data-new-url="" @load='updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/4edb7b616ab79ca57609fa9b7db8d0b095ca9c71-800x600.jpg", $el)' /><div class="absolute left-0 bottom-0 pt-0 md:pt-15 pb-4 md:pb-5 px-4 md:px-5 w-full flex justify-between items-center sm:opacity-0 transition-opacity duration-300 group-hover:opacity-100 md:bg-gradient-to-b md:from-transparent md:to-black/20"><span class="font-helvetica font-bold text-base leading-5 transition-opacity duration-200 md:opacity-0 md:group-hover:opacity-100">Matt Horspool</span> <span class="sm:opacity-100 opacity-0 transition-transform duration-500 ease-in-out transform -translate-x-28 group-hover:translate-x-0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 21 21" fill="none" class="text-white" role="img">
    <path d="M4.76595 13.5732C5.98241 14.7897 7.44929 15.3979 9.16664 15.3979C10.884 15.3979 12.3509 14.7897 13.5674 13.5732C14.7838 12.3568 15.3777 10.9042 15.3777 9.18683C15.3777 7.46948 14.7767 6.00973 13.5674 4.78612C12.3438 3.57682 10.8768 2.97575 9.16664 2.97575C7.45644 2.97575 5.98238 3.57682 4.78023 4.78612C3.57809 5.99542 2.95555 7.46948 2.95555 9.18683C2.95555 10.9042 3.55665 12.3711 4.76595 13.5732ZM20.9448 19.5339L19.5209 20.9579L14.2257 15.6627C12.7445 16.8219 11.0557 17.4015 9.16664 17.4015C8.07898 17.4015 7.02714 17.194 6.02535 16.779C5.02356 16.3639 4.12907 15.77 3.34911 14.9972C2.5763 14.2244 1.98239 13.3371 1.56736 12.3353C1.15233 11.3335 0.944824 10.2816 0.944824 9.18683C0.944824 8.09202 1.15233 7.04014 1.56736 6.03836C1.98239 5.03657 2.5763 4.14927 3.34911 3.37646C4.12907 2.60365 5.01641 2.00974 6.02535 1.59471C7.03429 1.17968 8.07183 0.972168 9.16664 0.972168C10.2614 0.972168 11.3133 1.17968 12.3151 1.59471C13.3169 2.00974 14.2042 2.60365 14.977 3.37646C15.757 4.14927 16.3509 5.03657 16.7659 6.03836C17.1809 7.04014 17.3885 8.09202 17.3885 9.18683C17.3885 11.0616 16.8089 12.7503 15.6425 14.2459L20.9377 19.541L20.9448 19.5339Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M8.3999 13V5H9.9999V13H8.3999Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M13.2002 9.7998L5.2002 9.7998L5.2002 8.1998L13.2002 8.1998L13.2002 9.7998Z" fill="currentColor"/>
<title>zoom-in</title></svg>
</span></div></button> <div class="small-images-collection flex justify-center sm:w-[calc(50%-10px)] w-full flex-wrap sm:gap-5 gap-3">      <button @click='setImageData({"_createdAt":"2025-05-06T07:10:06Z","_id":"48fb984b-79b8-4736-8a9c-0b281dc4aa29","_rev":"DO4T4B2yvy9TUDs5gQ11gG","_type":"Image","_updatedAt":"2026-04-07T12:57:25Z","cta":null,"exifData":["OM-1 Mark II","M.Zuiko 90mm F3.5 Macro IS PRO","1\/200s","F7.1","ISO200"],"identifier":{"_type":"slug","current":"gallery-image-christian-brockes-spider"},"media":{"_type":"image","asset":{"url":"https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/2778148b2050215b86831590e17b68971468f5cc-1005x754.webp"}},"name":"Gallery image Christian Brockes spider","rootScope":"global","shotByName":"Christian Brockes"}, $el)' class="sm:w-[calc(50%-10px)] sm:h-[calc(50%-10px)] w-[calc(50%-8px)] h-[166px] sm:max-h-max group relative hover:cursor-pointer flex"><!-- Zoom In Icon (Hidden on Small Screens) --><span class="sm:hidden block absolute top-4 right-4"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 21 21" fill="none" class="text-white" role="img">
    <path d="M4.76595 13.5732C5.98241 14.7897 7.44929 15.3979 9.16664 15.3979C10.884 15.3979 12.3509 14.7897 13.5674 13.5732C14.7838 12.3568 15.3777 10.9042 15.3777 9.18683C15.3777 7.46948 14.7767 6.00973 13.5674 4.78612C12.3438 3.57682 10.8768 2.97575 9.16664 2.97575C7.45644 2.97575 5.98238 3.57682 4.78023 4.78612C3.57809 5.99542 2.95555 7.46948 2.95555 9.18683C2.95555 10.9042 3.55665 12.3711 4.76595 13.5732ZM20.9448 19.5339L19.5209 20.9579L14.2257 15.6627C12.7445 16.8219 11.0557 17.4015 9.16664 17.4015C8.07898 17.4015 7.02714 17.194 6.02535 16.779C5.02356 16.3639 4.12907 15.77 3.34911 14.9972C2.5763 14.2244 1.98239 13.3371 1.56736 12.3353C1.15233 11.3335 0.944824 10.2816 0.944824 9.18683C0.944824 8.09202 1.15233 7.04014 1.56736 6.03836C1.98239 5.03657 2.5763 4.14927 3.34911 3.37646C4.12907 2.60365 5.01641 2.00974 6.02535 1.59471C7.03429 1.17968 8.07183 0.972168 9.16664 0.972168C10.2614 0.972168 11.3133 1.17968 12.3151 1.59471C13.3169 2.00974 14.2042 2.60365 14.977 3.37646C15.757 4.14927 16.3509 5.03657 16.7659 6.03836C17.1809 7.04014 17.3885 8.09202 17.3885 9.18683C17.3885 11.0616 16.8089 12.7503 15.6425 14.2459L20.9377 19.541L20.9448 19.5339Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M8.3999 13V5H9.9999V13H8.3999Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M13.2002 9.7998L5.2002 9.7998L5.2002 8.1998L13.2002 8.1998L13.2002 9.7998Z" fill="currentColor"/>
<title>zoom-in</title></svg>
</span> <!-- Image Display --><img  class="w-full h-full object-cover" src="https://cdn.sanity.io/images/ipox1240/live/2778148b2050215b86831590e17b68971468f5cc-1005x754.webp" alt="Gallery image Christian Brockes spider" data-new-url="" x-init='() => { if ($el.complete) updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/2778148b2050215b86831590e17b68971468f5cc-1005x754.webp", $el);}' @load='updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/2778148b2050215b86831590e17b68971468f5cc-1005x754.webp", $el)' /><!-- Overlay with Photographer Info and Zoom Icon --><div class="absolute left-0 bottom-0 pt-0 md:pt-15 pb-4 md:pb-5 px-4 md:px-5 w-full flex justify-between items-center sm:opacity-0 transition-opacity duration-300 group-hover:opacity-100 md:bg-gradient-to-b md:from-transparent md:to-black/20"><span class="font-helvetica text-base font-bold leading-5 transition-opacity duration-200 md:opacity-0 md:group-hover:opacity-100">Christian Brockes</span> <span class="sm:opacity-100 opacity-0 transition-transform duration-500 ease-in-out transform -translate-x-20 group-hover:translate-x-0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 21 21" fill="none" class="text-white" role="img">
    <path d="M4.76595 13.5732C5.98241 14.7897 7.44929 15.3979 9.16664 15.3979C10.884 15.3979 12.3509 14.7897 13.5674 13.5732C14.7838 12.3568 15.3777 10.9042 15.3777 9.18683C15.3777 7.46948 14.7767 6.00973 13.5674 4.78612C12.3438 3.57682 10.8768 2.97575 9.16664 2.97575C7.45644 2.97575 5.98238 3.57682 4.78023 4.78612C3.57809 5.99542 2.95555 7.46948 2.95555 9.18683C2.95555 10.9042 3.55665 12.3711 4.76595 13.5732ZM20.9448 19.5339L19.5209 20.9579L14.2257 15.6627C12.7445 16.8219 11.0557 17.4015 9.16664 17.4015C8.07898 17.4015 7.02714 17.194 6.02535 16.779C5.02356 16.3639 4.12907 15.77 3.34911 14.9972C2.5763 14.2244 1.98239 13.3371 1.56736 12.3353C1.15233 11.3335 0.944824 10.2816 0.944824 9.18683C0.944824 8.09202 1.15233 7.04014 1.56736 6.03836C1.98239 5.03657 2.5763 4.14927 3.34911 3.37646C4.12907 2.60365 5.01641 2.00974 6.02535 1.59471C7.03429 1.17968 8.07183 0.972168 9.16664 0.972168C10.2614 0.972168 11.3133 1.17968 12.3151 1.59471C13.3169 2.00974 14.2042 2.60365 14.977 3.37646C15.757 4.14927 16.3509 5.03657 16.7659 6.03836C17.1809 7.04014 17.3885 8.09202 17.3885 9.18683C17.3885 11.0616 16.8089 12.7503 15.6425 14.2459L20.9377 19.541L20.9448 19.5339Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M8.3999 13V5H9.9999V13H8.3999Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M13.2002 9.7998L5.2002 9.7998L5.2002 8.1998L13.2002 8.1998L13.2002 9.7998Z" fill="currentColor"/>
<title>zoom-in</title></svg>
</span></div></button>     <button @click='setImageData({"_createdAt":"2025-05-06T07:12:29Z","_id":"fde88b28-da14-4e40-a73b-9d5d460121bd","_rev":"j6apwLR0IZJdXHLkr1Kkfy","_type":"Image","_updatedAt":"2026-04-07T12:57:45Z","cta":null,"exifData":["OM-1 Mark II","M.Zuiko 8-25mm F4.0 PRO","6s","F7.1","ISO800","Live ND"],"identifier":{"_type":"slug","current":"gallery-image-moises-cugat-tree-landscape"},"media":{"_type":"image","asset":{"url":"https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/fe4f8cb3b315bfa8b17a7b395eba865709b75fbe-1005x804.webp"}},"name":"Gallery image Moises Cugat tree landscape","rootScope":"global","shotByName":"Moises Cugat"}, $el)' class="sm:w-[calc(50%-10px)] sm:h-[calc(50%-10px)] w-[calc(50%-8px)] h-[166px] sm:max-h-max group relative hover:cursor-pointer flex"><!-- Zoom In Icon (Hidden on Small Screens) --><span class="sm:hidden block absolute top-4 right-4"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 21 21" fill="none" class="text-white" role="img">
    <path d="M4.76595 13.5732C5.98241 14.7897 7.44929 15.3979 9.16664 15.3979C10.884 15.3979 12.3509 14.7897 13.5674 13.5732C14.7838 12.3568 15.3777 10.9042 15.3777 9.18683C15.3777 7.46948 14.7767 6.00973 13.5674 4.78612C12.3438 3.57682 10.8768 2.97575 9.16664 2.97575C7.45644 2.97575 5.98238 3.57682 4.78023 4.78612C3.57809 5.99542 2.95555 7.46948 2.95555 9.18683C2.95555 10.9042 3.55665 12.3711 4.76595 13.5732ZM20.9448 19.5339L19.5209 20.9579L14.2257 15.6627C12.7445 16.8219 11.0557 17.4015 9.16664 17.4015C8.07898 17.4015 7.02714 17.194 6.02535 16.779C5.02356 16.3639 4.12907 15.77 3.34911 14.9972C2.5763 14.2244 1.98239 13.3371 1.56736 12.3353C1.15233 11.3335 0.944824 10.2816 0.944824 9.18683C0.944824 8.09202 1.15233 7.04014 1.56736 6.03836C1.98239 5.03657 2.5763 4.14927 3.34911 3.37646C4.12907 2.60365 5.01641 2.00974 6.02535 1.59471C7.03429 1.17968 8.07183 0.972168 9.16664 0.972168C10.2614 0.972168 11.3133 1.17968 12.3151 1.59471C13.3169 2.00974 14.2042 2.60365 14.977 3.37646C15.757 4.14927 16.3509 5.03657 16.7659 6.03836C17.1809 7.04014 17.3885 8.09202 17.3885 9.18683C17.3885 11.0616 16.8089 12.7503 15.6425 14.2459L20.9377 19.541L20.9448 19.5339Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M8.3999 13V5H9.9999V13H8.3999Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M13.2002 9.7998L5.2002 9.7998L5.2002 8.1998L13.2002 8.1998L13.2002 9.7998Z" fill="currentColor"/>
<title>zoom-in</title></svg>
</span> <!-- Image Display --><img  class="w-full h-full object-cover" src="https://cdn.sanity.io/images/ipox1240/live/fe4f8cb3b315bfa8b17a7b395eba865709b75fbe-1005x804.webp" alt="Gallery image Moises Cugat tree landscape" data-new-url="" x-init='() => { if ($el.complete) updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/fe4f8cb3b315bfa8b17a7b395eba865709b75fbe-1005x804.webp", $el);}' @load='updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/fe4f8cb3b315bfa8b17a7b395eba865709b75fbe-1005x804.webp", $el)' /><!-- Overlay with Photographer Info and Zoom Icon --><div class="absolute left-0 bottom-0 pt-0 md:pt-15 pb-4 md:pb-5 px-4 md:px-5 w-full flex justify-between items-center sm:opacity-0 transition-opacity duration-300 group-hover:opacity-100 md:bg-gradient-to-b md:from-transparent md:to-black/20"><span class="font-helvetica text-base font-bold leading-5 transition-opacity duration-200 md:opacity-0 md:group-hover:opacity-100">Moises Cugat</span> <span class="sm:opacity-100 opacity-0 transition-transform duration-500 ease-in-out transform -translate-x-20 group-hover:translate-x-0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 21 21" fill="none" class="text-white" role="img">
    <path d="M4.76595 13.5732C5.98241 14.7897 7.44929 15.3979 9.16664 15.3979C10.884 15.3979 12.3509 14.7897 13.5674 13.5732C14.7838 12.3568 15.3777 10.9042 15.3777 9.18683C15.3777 7.46948 14.7767 6.00973 13.5674 4.78612C12.3438 3.57682 10.8768 2.97575 9.16664 2.97575C7.45644 2.97575 5.98238 3.57682 4.78023 4.78612C3.57809 5.99542 2.95555 7.46948 2.95555 9.18683C2.95555 10.9042 3.55665 12.3711 4.76595 13.5732ZM20.9448 19.5339L19.5209 20.9579L14.2257 15.6627C12.7445 16.8219 11.0557 17.4015 9.16664 17.4015C8.07898 17.4015 7.02714 17.194 6.02535 16.779C5.02356 16.3639 4.12907 15.77 3.34911 14.9972C2.5763 14.2244 1.98239 13.3371 1.56736 12.3353C1.15233 11.3335 0.944824 10.2816 0.944824 9.18683C0.944824 8.09202 1.15233 7.04014 1.56736 6.03836C1.98239 5.03657 2.5763 4.14927 3.34911 3.37646C4.12907 2.60365 5.01641 2.00974 6.02535 1.59471C7.03429 1.17968 8.07183 0.972168 9.16664 0.972168C10.2614 0.972168 11.3133 1.17968 12.3151 1.59471C13.3169 2.00974 14.2042 2.60365 14.977 3.37646C15.757 4.14927 16.3509 5.03657 16.7659 6.03836C17.1809 7.04014 17.3885 8.09202 17.3885 9.18683C17.3885 11.0616 16.8089 12.7503 15.6425 14.2459L20.9377 19.541L20.9448 19.5339Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M8.3999 13V5H9.9999V13H8.3999Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M13.2002 9.7998L5.2002 9.7998L5.2002 8.1998L13.2002 8.1998L13.2002 9.7998Z" fill="currentColor"/>
<title>zoom-in</title></svg>
</span></div></button>     <button @click='setImageData({"_createdAt":"2025-05-06T07:14:45Z","_id":"824e8425-e866-4519-a0a4-3514323d68db","_rev":"j6apwLR0IZJdXHLkr1KfrE","_type":"Image","_updatedAt":"2026-04-07T12:57:33Z","cta":null,"exifData":["OM-1","M.Zuiko 8-25mm F4.0 PRO","1s","F5.6","ISO400","Live Composite"],"identifier":{"_type":"slug","current":"gallery-image-hannu-huhtamo-light-painting"},"media":{"_type":"image","asset":{"url":"https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/a687b34d19b717b5b3e3df50cf54983e1064d769-1005x754.webp"}},"name":"Gallery image Hannu Huhtamo light painting","rootScope":"global","shotByName":"Hannu Huhtamo"}, $el)' class="sm:w-[calc(50%-10px)] sm:h-[calc(50%-10px)] w-[calc(50%-8px)] h-[166px] sm:max-h-max group relative hover:cursor-pointer flex"><!-- Zoom In Icon (Hidden on Small Screens) --><span class="sm:hidden block absolute top-4 right-4"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 21 21" fill="none" class="text-white" role="img">
    <path d="M4.76595 13.5732C5.98241 14.7897 7.44929 15.3979 9.16664 15.3979C10.884 15.3979 12.3509 14.7897 13.5674 13.5732C14.7838 12.3568 15.3777 10.9042 15.3777 9.18683C15.3777 7.46948 14.7767 6.00973 13.5674 4.78612C12.3438 3.57682 10.8768 2.97575 9.16664 2.97575C7.45644 2.97575 5.98238 3.57682 4.78023 4.78612C3.57809 5.99542 2.95555 7.46948 2.95555 9.18683C2.95555 10.9042 3.55665 12.3711 4.76595 13.5732ZM20.9448 19.5339L19.5209 20.9579L14.2257 15.6627C12.7445 16.8219 11.0557 17.4015 9.16664 17.4015C8.07898 17.4015 7.02714 17.194 6.02535 16.779C5.02356 16.3639 4.12907 15.77 3.34911 14.9972C2.5763 14.2244 1.98239 13.3371 1.56736 12.3353C1.15233 11.3335 0.944824 10.2816 0.944824 9.18683C0.944824 8.09202 1.15233 7.04014 1.56736 6.03836C1.98239 5.03657 2.5763 4.14927 3.34911 3.37646C4.12907 2.60365 5.01641 2.00974 6.02535 1.59471C7.03429 1.17968 8.07183 0.972168 9.16664 0.972168C10.2614 0.972168 11.3133 1.17968 12.3151 1.59471C13.3169 2.00974 14.2042 2.60365 14.977 3.37646C15.757 4.14927 16.3509 5.03657 16.7659 6.03836C17.1809 7.04014 17.3885 8.09202 17.3885 9.18683C17.3885 11.0616 16.8089 12.7503 15.6425 14.2459L20.9377 19.541L20.9448 19.5339Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M8.3999 13V5H9.9999V13H8.3999Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M13.2002 9.7998L5.2002 9.7998L5.2002 8.1998L13.2002 8.1998L13.2002 9.7998Z" fill="currentColor"/>
<title>zoom-in</title></svg>
</span> <!-- Image Display --><img  class="w-full h-full object-cover" src="https://cdn.sanity.io/images/ipox1240/live/a687b34d19b717b5b3e3df50cf54983e1064d769-1005x754.webp" alt="Gallery image Hannu Huhtamo light painting" data-new-url="" x-init='() => { if ($el.complete) updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/a687b34d19b717b5b3e3df50cf54983e1064d769-1005x754.webp", $el);}' @load='updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/a687b34d19b717b5b3e3df50cf54983e1064d769-1005x754.webp", $el)' /><!-- Overlay with Photographer Info and Zoom Icon --><div class="absolute left-0 bottom-0 pt-0 md:pt-15 pb-4 md:pb-5 px-4 md:px-5 w-full flex justify-between items-center sm:opacity-0 transition-opacity duration-300 group-hover:opacity-100 md:bg-gradient-to-b md:from-transparent md:to-black/20"><span class="font-helvetica text-base font-bold leading-5 transition-opacity duration-200 md:opacity-0 md:group-hover:opacity-100">Hannu Huhtamo</span> <span class="sm:opacity-100 opacity-0 transition-transform duration-500 ease-in-out transform -translate-x-20 group-hover:translate-x-0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 21 21" fill="none" class="text-white" role="img">
    <path d="M4.76595 13.5732C5.98241 14.7897 7.44929 15.3979 9.16664 15.3979C10.884 15.3979 12.3509 14.7897 13.5674 13.5732C14.7838 12.3568 15.3777 10.9042 15.3777 9.18683C15.3777 7.46948 14.7767 6.00973 13.5674 4.78612C12.3438 3.57682 10.8768 2.97575 9.16664 2.97575C7.45644 2.97575 5.98238 3.57682 4.78023 4.78612C3.57809 5.99542 2.95555 7.46948 2.95555 9.18683C2.95555 10.9042 3.55665 12.3711 4.76595 13.5732ZM20.9448 19.5339L19.5209 20.9579L14.2257 15.6627C12.7445 16.8219 11.0557 17.4015 9.16664 17.4015C8.07898 17.4015 7.02714 17.194 6.02535 16.779C5.02356 16.3639 4.12907 15.77 3.34911 14.9972C2.5763 14.2244 1.98239 13.3371 1.56736 12.3353C1.15233 11.3335 0.944824 10.2816 0.944824 9.18683C0.944824 8.09202 1.15233 7.04014 1.56736 6.03836C1.98239 5.03657 2.5763 4.14927 3.34911 3.37646C4.12907 2.60365 5.01641 2.00974 6.02535 1.59471C7.03429 1.17968 8.07183 0.972168 9.16664 0.972168C10.2614 0.972168 11.3133 1.17968 12.3151 1.59471C13.3169 2.00974 14.2042 2.60365 14.977 3.37646C15.757 4.14927 16.3509 5.03657 16.7659 6.03836C17.1809 7.04014 17.3885 8.09202 17.3885 9.18683C17.3885 11.0616 16.8089 12.7503 15.6425 14.2459L20.9377 19.541L20.9448 19.5339Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M8.3999 13V5H9.9999V13H8.3999Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M13.2002 9.7998L5.2002 9.7998L5.2002 8.1998L13.2002 8.1998L13.2002 9.7998Z" fill="currentColor"/>
<title>zoom-in</title></svg>
</span></div></button>     <button @click='setImageData({"_createdAt":"2025-05-06T07:17:31Z","_id":"aa9ed675-2115-461d-acbd-e346a36937c4","_rev":"DO4T4B2yvy9TUDs5gQ12sd","_type":"Image","_updatedAt":"2026-04-07T12:57:38Z","cta":null,"exifData":["OM-1","M.Zuiko 150-400mm F4.5 TC1.25X IS PRO","1\/3200s","F4.5","ISO3200","Pro Capture"],"identifier":{"_type":"slug","current":"gallery-image-andrew-fusek-peters-bird-action"},"media":{"_type":"image","asset":{"url":"https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/e15a09442fe6ca99e08364f86cfbf435c3ad404f-1005x835.webp"}},"name":"Gallery image Andrew Fusek Peters Bird action","rootScope":"global","shotByName":"Andrew Fusek Peters"}, $el)' class="sm:w-[calc(50%-10px)] sm:h-[calc(50%-10px)] w-[calc(50%-8px)] h-[166px] sm:max-h-max group relative hover:cursor-pointer flex"><!-- Zoom In Icon (Hidden on Small Screens) --><span class="sm:hidden block absolute top-4 right-4"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 21 21" fill="none" class="text-white" role="img">
    <path d="M4.76595 13.5732C5.98241 14.7897 7.44929 15.3979 9.16664 15.3979C10.884 15.3979 12.3509 14.7897 13.5674 13.5732C14.7838 12.3568 15.3777 10.9042 15.3777 9.18683C15.3777 7.46948 14.7767 6.00973 13.5674 4.78612C12.3438 3.57682 10.8768 2.97575 9.16664 2.97575C7.45644 2.97575 5.98238 3.57682 4.78023 4.78612C3.57809 5.99542 2.95555 7.46948 2.95555 9.18683C2.95555 10.9042 3.55665 12.3711 4.76595 13.5732ZM20.9448 19.5339L19.5209 20.9579L14.2257 15.6627C12.7445 16.8219 11.0557 17.4015 9.16664 17.4015C8.07898 17.4015 7.02714 17.194 6.02535 16.779C5.02356 16.3639 4.12907 15.77 3.34911 14.9972C2.5763 14.2244 1.98239 13.3371 1.56736 12.3353C1.15233 11.3335 0.944824 10.2816 0.944824 9.18683C0.944824 8.09202 1.15233 7.04014 1.56736 6.03836C1.98239 5.03657 2.5763 4.14927 3.34911 3.37646C4.12907 2.60365 5.01641 2.00974 6.02535 1.59471C7.03429 1.17968 8.07183 0.972168 9.16664 0.972168C10.2614 0.972168 11.3133 1.17968 12.3151 1.59471C13.3169 2.00974 14.2042 2.60365 14.977 3.37646C15.757 4.14927 16.3509 5.03657 16.7659 6.03836C17.1809 7.04014 17.3885 8.09202 17.3885 9.18683C17.3885 11.0616 16.8089 12.7503 15.6425 14.2459L20.9377 19.541L20.9448 19.5339Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M8.3999 13V5H9.9999V13H8.3999Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M13.2002 9.7998L5.2002 9.7998L5.2002 8.1998L13.2002 8.1998L13.2002 9.7998Z" fill="currentColor"/>
<title>zoom-in</title></svg>
</span> <!-- Image Display --><img  class="w-full h-full object-cover" src="https://cdn.sanity.io/images/ipox1240/live/e15a09442fe6ca99e08364f86cfbf435c3ad404f-1005x835.webp" alt="Gallery image Andrew Fusek Peters Bird action" data-new-url="" x-init='() => { if ($el.complete) updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/e15a09442fe6ca99e08364f86cfbf435c3ad404f-1005x835.webp", $el);}' @load='updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/e15a09442fe6ca99e08364f86cfbf435c3ad404f-1005x835.webp", $el)' /><!-- Overlay with Photographer Info and Zoom Icon --><div class="absolute left-0 bottom-0 pt-0 md:pt-15 pb-4 md:pb-5 px-4 md:px-5 w-full flex justify-between items-center sm:opacity-0 transition-opacity duration-300 group-hover:opacity-100 md:bg-gradient-to-b md:from-transparent md:to-black/20"><span class="font-helvetica text-base font-bold leading-5 transition-opacity duration-200 md:opacity-0 md:group-hover:opacity-100">Andrew Fusek Peters</span> <span class="sm:opacity-100 opacity-0 transition-transform duration-500 ease-in-out transform -translate-x-20 group-hover:translate-x-0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 21 21" fill="none" class="text-white" role="img">
    <path d="M4.76595 13.5732C5.98241 14.7897 7.44929 15.3979 9.16664 15.3979C10.884 15.3979 12.3509 14.7897 13.5674 13.5732C14.7838 12.3568 15.3777 10.9042 15.3777 9.18683C15.3777 7.46948 14.7767 6.00973 13.5674 4.78612C12.3438 3.57682 10.8768 2.97575 9.16664 2.97575C7.45644 2.97575 5.98238 3.57682 4.78023 4.78612C3.57809 5.99542 2.95555 7.46948 2.95555 9.18683C2.95555 10.9042 3.55665 12.3711 4.76595 13.5732ZM20.9448 19.5339L19.5209 20.9579L14.2257 15.6627C12.7445 16.8219 11.0557 17.4015 9.16664 17.4015C8.07898 17.4015 7.02714 17.194 6.02535 16.779C5.02356 16.3639 4.12907 15.77 3.34911 14.9972C2.5763 14.2244 1.98239 13.3371 1.56736 12.3353C1.15233 11.3335 0.944824 10.2816 0.944824 9.18683C0.944824 8.09202 1.15233 7.04014 1.56736 6.03836C1.98239 5.03657 2.5763 4.14927 3.34911 3.37646C4.12907 2.60365 5.01641 2.00974 6.02535 1.59471C7.03429 1.17968 8.07183 0.972168 9.16664 0.972168C10.2614 0.972168 11.3133 1.17968 12.3151 1.59471C13.3169 2.00974 14.2042 2.60365 14.977 3.37646C15.757 4.14927 16.3509 5.03657 16.7659 6.03836C17.1809 7.04014 17.3885 8.09202 17.3885 9.18683C17.3885 11.0616 16.8089 12.7503 15.6425 14.2459L20.9377 19.541L20.9448 19.5339Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M8.3999 13V5H9.9999V13H8.3999Z" fill="currentColor"/>
    <path fill-rule="evenodd" clip-rule="evenodd" d="M13.2002 9.7998L5.2002 9.7998L5.2002 8.1998L13.2002 8.1998L13.2002 9.7998Z" fill="currentColor"/>
<title>zoom-in</title></svg>
</span></div></button>  </div></div> <div class="flex sm:flex-row flex-col sm:gap-5 gap-4 justify-center w-full items-center">     <a class="max-w-[408px] w-full sm:w-auto btn btn-tritical text-pallas btn-size-lg" href="https://omsystem.com/gallery/"  target="_blank" ><span> Vieraile Global PRO -galleriassamme</span></a>    </div></div><!-- Zoomed Image Modal --><div class="overflow-hidden opacity-0" x-ref="modal" ><div x-show="open" @click.self="close()" @keydown.escape.window="close()" @keydown.tab.prevent="trapFocus($event)" :class="{'z-50': open, '-z-10': !open}" class="fixed inset-0 bg-black bg-opacity-80 flex justify-center items-start overflow-scroll -z-10 h-dvh py-15 md:py-[42px] w-screen text-white px-4"><div class="relative max-w-full flex flex-col justify-center items-center my-auto w-full md:w-auto" x-ref="modalContent" ><!-- Desktop Exit --><div class="pb-4 flex justify-end w-full" @click="close()"><button x-ref="closeBtn" aria-label="Sulje"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="text-white" role="img">
    <path d="M19.7321 2.49992L12.1731 10.0589L19.7321 17.6179L17.7461 19.6039L10.1871 12.0449L2.62909 19.6039L0.64209 17.6169L8.20109 10.0579L0.64209 2.49992L2.62809 0.513916L10.1871 8.07292L17.7461 0.513916L19.7321 2.49992Z" fill="currentColor"/>
<title>exit</title></svg>
</button></div><img :src="zoomedImg" class="object-fill md:max-h-[60vh] max-h-screen w-full md:w-auto" x-ref="imgAsset" /><div class="flex flex-col justify-between w-full font-helvetica text-caption-sm leading-4.375 px-4 py-3 bg-black" :class="{ 'items-center': !isMobileLayout, 'px-5 py-[13px]': !isMobileLayout, 'hidden': exifData.length === 0 && !shotByName && !(ctaData && ctaData.ctaText) }" x-ref="imgCaption" ><div class="flex items-center"><span class="md:py-0 border-b md:border-b-0 border-gray-dark w-full flex gap-1" :class="{ 'border-b pb-2.5 mb-2.5': exifData.length > 0, 'hidden': !shotByName }" ><template x-if="shotByTitle === 'ambassador'"><span>Kuvan on ottanut OM SYSTEM Ambassador</span></template><template x-if="shotByTitle === 'user'"><span>Kuvan on ottanut OM SYSTEM -käyttäjä</span></template><span x-text="shotByName"></span></span></div><div class="flex" x-ref="detailsTab" :class="{'flex-row': !isMobileLayout, 'flex-col gap-y-2.5': isMobileLayout}" ><template x-for="(item, index) in exifData" :key="index"><span class="flex items-center" :class="{ 'py-0 ps-2': !isMobileLayout, 'border-r border-gray-dark border-b-0 px-2': index < exifData.length - 1 && !isMobileLayout, 'border-b border-gray-dark pb-2.5': index < exifData.length - 1 && isMobileLayout, '!ps-0': index == 0 && !isMobileLayout }" x-text="item"></span></template></div><template x-if="ctaData && ctaData.ctaText && ctaData.resolvedUrl"><div class="py-4 flex justify-center"><a :href="ctaData.resolvedUrl" :target="ctaData.resolvedTarget || '_blank'" :class="ctaData.resolvedClass" x-text="ctaData.ctaText"></a></div></template></div></div></div></div></div><script>
    function imageGallery49030704_0fda_439d_b52f_4fbac290dc3a() {
        return {
            open: false,
            zoomedImg: '',
            shotByName: '',
            shotByTitle: '',
            ctaData: null,
            exifData: [],
            maxDesktopWidth: 0,
            isMobileLayout: false,
            visibleCount: 10,
            totalImages: 5,
            _triggerEl: null,
            init() {
                this.$refs.imgAsset.addEventListener('load', () => {
                    setTimeout(() => {
                        this.handleImageLoad();
                    }, 50);
                }, false);

                if (this.$refs.masonryGrid) {
                    this.initMasonry();
                }
            },
            setImageData(image, triggerEl) {
                const modal = this.$refs.modalContent;
                this._triggerEl = triggerEl || null;
                this.isMobileLayout = false;
                this.zoomedImg = image.media.asset.url;
                this.shotByName = image.shotByName;
                this.shotByTitle = 'shotByTitle' in image ? image.shotByTitle : 'ambassador';
                this.ctaData = image.cta || null;
                this.exifData = Array.isArray(image.exifData)
                    ? image.exifData.filter(item => item && item.trim && item.trim() !== '')
                    : [];
                this.open = true;
                this.$refs.modal.classList.remove('opacity-0')
                modal.classList.add('opacity-0')
                document.body.style.top = `-${window.scrollY}px`;
                document.body.classList.add('fixed');
                document.body.classList.add('w-screen');
                document.body.classList.add('overflow-hidden');
                window.addEventListener('resize', () => this.resizeImgCaption());
                this.$nextTick(() => {
                    if (this.$refs.closeBtn) this.$refs.closeBtn.focus();
                });
            },
            trapFocus(e) {
                const modal = this.$refs.modal;
                const focusable = [...modal.querySelectorAll(
                    'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
                )].filter(el => !el.disabled && el.offsetParent !== null);
                if (!focusable.length) return;
                const first = focusable[0];
                const last = focusable[focusable.length - 1];
                const current = document.activeElement;
                const idx = focusable.indexOf(current);
                if (e.shiftKey) {
                    (idx <= 0 ? last : focusable[idx - 1]).focus();
                } else {
                    (idx >= focusable.length - 1 || idx === -1 ? first : focusable[idx + 1]).focus();
                }
            },
            close() {
                const scrollY = document.body.style.top;
                this.open = false;
                this.zoomedImg = '';

                document.body.classList.remove('fixed');
                document.body.classList.remove('w-screen');
                document.body.classList.remove('overflow-hidden');
                document.body.style.top = '';
                window.scrollTo(0, parseInt(scrollY || '0') * -1);
                window.removeEventListener('resize', () => this.resizeImgCaption());
                if (this._triggerEl) {
                    this.$nextTick(() => this._triggerEl.focus({ preventScroll: true }));
                }
            },
            setMaxDesktopWidth() {
                this.maxDesktopWidth = this.$refs.detailsTab.offsetWidth;
            },
            resizeImgCaption() {
                if (!this.open) {
                    return;
                }

                const imgAsset = this.$refs.imgAsset;
                const imgCaption = this.$refs.imgCaption;

                if (imgAsset && imgCaption) {

                    if (window.innerWidth < 768) {
                        this.isMobileLayout = true;

                        return;
                    }

                    if (imgAsset.offsetWidth > this.maxDesktopWidth) {
                        this.isMobileLayout = false;
                    } else {
                        this.isMobileLayout = true;
                    }
                }
            },
            loadMore() {
                const prevCount = this.visibleCount;
                this.visibleCount = this.totalImages;
                this.$nextTick(() => {
                    this.layoutMasonry();
                    const items = this.$refs.masonryGrid
                        ? this.$refs.masonryGrid.querySelectorAll('[data-masonry-item]')
                        : [];
                    if (items[prevCount]) items[prevCount].focus({ preventScroll: true });
                });
            },
            initMasonry() {
                const grid = this.$refs.masonryGrid;
                grid.addEventListener('load', (e) => {
                    if (e.target.tagName === 'IMG') {
                        this.scheduleLayout();
                    }
                }, true);
                this.$nextTick(() => this.layoutMasonry());

                window.addEventListener('resize', () => this.scheduleLayout());
            },
            scheduleLayout() {
                if (this._layoutRaf) cancelAnimationFrame(this._layoutRaf);
                this._layoutRaf = requestAnimationFrame(() => this.layoutMasonry());
            },
            layoutMasonry() {
                const grid = this.$refs.masonryGrid;
                if (!grid) return;

                const gap = window.innerWidth >= 640 ? 20 : 12;
                const cols = window.innerWidth >= 640 ? 3 : 2;
                const containerWidth = grid.offsetWidth;
                const colWidth = (containerWidth - gap * (cols - 1)) / cols;
                const colHeights = new Array(cols).fill(0);

                grid.querySelectorAll('[data-masonry-item]').forEach(item => {
                    if (item.style.display === 'none') return;

                    const isFeatured = item.dataset.featured === 'true';
                    const span = isFeatured ? Math.min(2, cols) : 1;
                    const itemWidth = span * colWidth + (span > 1 ? (span - 1) * gap : 0);

                    const img = item.querySelector('img');
                    let itemHeight;
                    if (img && img.naturalWidth > 0 && img.naturalHeight > 0) {
                        itemHeight = Math.round((img.naturalHeight / img.naturalWidth) * itemWidth);
                    } else {
                        itemHeight = Math.round(itemWidth * 0.75);
                    }

                    let bestCol = 0;
                    if (span === 1) {
                        bestCol = colHeights.indexOf(Math.min(...colHeights));
                    } else {
                        let minHeight = Infinity;
                        for (let i = 0; i <= cols - span; i++) {
                            const maxH = Math.max(...colHeights.slice(i, i + span));
                            if (maxH < minHeight) {
                                minHeight = maxH;
                                bestCol = i;
                            }
                        }
                    }

                    const y = span === 1
                        ? colHeights[bestCol]
                        : Math.max(...colHeights.slice(bestCol, bestCol + span));

                    item.style.left = (bestCol * (colWidth + gap)) + 'px';
                    item.style.top = y + 'px';
                    item.style.width = itemWidth + 'px';
                    item.style.height = itemHeight + 'px';

                    for (let i = bestCol; i < bestCol + span; i++) {
                        colHeights[i] = y + itemHeight + gap;
                    }
                });

                const maxHeight = Math.max(...colHeights);
                grid.style.height = Math.max(0, maxHeight - gap) + 'px';
            },
            handleImageLoad() {
                this.setMaxDesktopWidth();
                this.resizeImgCaption();
                setTimeout(() => {
                    this.$refs.modalContent.classList.remove('opacity-0');
                }, 200);
            }
        }
    }</script>        <!-- Main Div --><div  style="--background-image: url(); --bg-color: #fafafa" alt="" class=" bg-cover bg-center w-screen ms-[calc(50%-50vw)] text-black py-16 md:py-25 bg-[var(--bg-color)] bg-[image:var(--background-image)] " data-id="0ec9565f-c99a-44cf-889f-d2fc553c8261" x-data="columnSet('0ec9565f-c99a-44cf-889f-d2fc553c8261', false, '')" data-new-url= "" x-init="init(); updateBgHotspot('', '--background-image', $el);" @resize.window="onResize()"   ><div class="columnSet w-full max-w-2xl flex flex-col text-center mx-auto gap-8 px-4 md:gap-10 md:px-5 2xl:px-10 "><!-- Heading -->  <h2 class="text-h2-sm md:text-h2 max-w-md-lg mx-auto ">Liity mukaan</h2> <!-- Tiles Block/Column --><div class="w-full flex flex-col gap-xl md:gap-l md:flex-row md:items-stretch mx-auto max-w-full  text-center"><!-- Special grid for 1/two/four column sets -->  <!-- Tile --><div class="md:flex-1 text-center  " > <div class="flex-1 flex flex-col h-full items-center "  ><div class="flex flex-col w-full h-full"><!-- Tile Image / Special Header --> <div class="flex-1"> <div class="relative w-full flex-shrink-0"> <img class=" w-full md:h-full group-focus-visible:ring-1 group-focus-visible:ring-black group-focus-visible:ring-opacity-50 object-cover md:min-h-[330px] max-h-[330px]  " alt="" src="https://cdn.sanity.io/images/ipox1240/live/16e0cd660d90ac3217b098c7cd938cb423eed2c9-686x514.webp" data-new-url= "" x-init='() => { if ($el.complete) updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/16e0cd660d90ac3217b098c7cd938cb423eed2c9-686x514.webp", $el);}' @load='updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/16e0cd660d90ac3217b098c7cd938cb423eed2c9-686x514.webp", $el)'></img>  <!-- Badge --> <!-- Subheader on tile --> </div></div> <!-- Tile Text Content --> <div class="flex flex-col h-full gap-6 md:p-5 md:gap-xxl  py-4 gap-6 md:gap-xxl md:justify-between   " ><div class="flex flex-col text-center gap-sm md:gap-l "  ><div class=""><!-- Icon --> <!-- Subheader --> <h3 class="flex colSetSubheader-0ec9565f-c99a-44cf-889f-d2fc553c8261  md:opacity-0  text-h4-bold-sm md:text-h4-bold  justify-center   !font-helvetica" >Tapahtumat &amp; työpajat</h3></div><!-- Copy --><div class="copy-text md:flex-1   text-center"><p class='text-caption md:text-body text-center font-helvetica '>Osallistu asiantuntijoiden johtamiin tapahtumiin ja työpajoihin kehittääksesi valokuvaustaitojasi ja ollaksesi yhteydessä OM SYSTEM -yhteisöön.</p></div> <!-- Additional Copy --></div><!-- CTA Section --> <div class="mt-auto" > <a class="max-w-[408px] w-full mx-auto md:w-auto btn btn-tritical-reversed text-black btn-size-lg " href="https://events.eao.omsystem.com/"   target="_blank" >Tutustu tapahtumiin</a> </div> </div></div></div></div> <!-- Tile --><div class="md:flex-1 text-center  " > <div class="flex-1 flex flex-col h-full items-center "  ><div class="flex flex-col w-full h-full"><!-- Tile Image / Special Header --> <div class="flex-1"> <div class="relative w-full flex-shrink-0"> <img class=" w-full md:h-full group-focus-visible:ring-1 group-focus-visible:ring-black group-focus-visible:ring-opacity-50 object-cover md:min-h-[330px] max-h-[330px]  " alt="" src="https://cdn.sanity.io/images/ipox1240/live/f99bea992a98967647ed59bf9c7b397a52a36c0a-686x514.webp" data-new-url= "1" x-init='() => { if ($el.complete) updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/f99bea992a98967647ed59bf9c7b397a52a36c0a-686x514.webp?rect=0,0,686,514&fit=crop&crop=focalpoint&fp-x=0.490582984038514&fp-y=0.2920579442329", $el);}' @load='updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/f99bea992a98967647ed59bf9c7b397a52a36c0a-686x514.webp?rect=0,0,686,514&fit=crop&crop=focalpoint&fp-x=0.490582984038514&fp-y=0.2920579442329", $el)'></img>  <!-- Badge --> <!-- Subheader on tile --> </div></div> <!-- Tile Text Content --> <div class="flex flex-col h-full gap-6 md:p-5 md:gap-xxl  py-4 gap-6 md:gap-xxl md:justify-between   " ><div class="flex flex-col text-center gap-sm md:gap-l "  ><div class=""><!-- Icon --> <!-- Subheader --> <h3 class="flex colSetSubheader-0ec9565f-c99a-44cf-889f-d2fc553c8261  md:opacity-0  text-h4-bold-sm md:text-h4-bold  justify-center   !font-helvetica" >TEST &amp; WOW</h3></div><!-- Copy --><div class="copy-text md:flex-1   text-center"><p class='text-caption md:text-body text-center font-helvetica '>Oletko kiinnostunut kamerasta tai objektiivista? Kokeile OM SYSTEM -kalustoa ennen ostamista - saatavilla vain tietyissä maissa.</p></div> <!-- Additional Copy --></div><!-- CTA Section --> <div class="mt-auto" > <a class="max-w-[408px] w-full mx-auto md:w-auto btn btn-tritical-reversed text-black btn-size-lg " href="https://my.omsystem.com/test-and-wow"   target="_blank" >Kokeile nyt</a> </div> </div></div></div></div> <!-- Tile --><div class="md:flex-1 text-center  " > <div class="flex-1 flex flex-col h-full items-center "  ><div class="flex flex-col w-full h-full"><!-- Tile Image / Special Header --> <div class="flex-1"> <div class="relative w-full flex-shrink-0"> <img class=" w-full md:h-full group-focus-visible:ring-1 group-focus-visible:ring-black group-focus-visible:ring-opacity-50 object-cover md:min-h-[330px] max-h-[330px]  " alt="" src="https://cdn.sanity.io/images/ipox1240/live/fc7dde31ddc743683a3cf06a2ad83fa3feea8988-686x514.webp" data-new-url= "" x-init='() => { if ($el.complete) updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/fc7dde31ddc743683a3cf06a2ad83fa3feea8988-686x514.webp", $el);}' @load='updateImageHotspot("https:\/\/cdn.sanity.io\/images\/ipox1240\/live\/fc7dde31ddc743683a3cf06a2ad83fa3feea8988-686x514.webp", $el)'></img>  <!-- Badge --> <!-- Subheader on tile --> </div></div> <!-- Tile Text Content --> <div class="flex flex-col h-full gap-6 md:p-5 md:gap-xxl  py-4 gap-6 md:gap-xxl md:justify-between   " ><div class="flex flex-col text-center gap-sm md:gap-l "  ><div class=""><!-- Icon --> <!-- Subheader --> <h3 class="flex colSetSubheader-0ec9565f-c99a-44cf-889f-d2fc553c8261  md:opacity-0  text-h4-bold-sm md:text-h4-bold  justify-center   !font-helvetica" >Rekisteröidy vinkkejä ja säästöjä varten</h3></div><!-- Copy --><div class="copy-text md:flex-1   text-center"><p class='text-caption md:text-body text-center font-helvetica '>Tilaa uutiskirjeemme niin saat OM SYSTEM -uutisia, inspiraatiota, erikoistarjouksia, valokuvausvinkkejä ja paljon muuta.</p></div> <!-- Additional Copy --></div><!-- CTA Section --> <div class="mt-auto" > <a class="max-w-[408px] w-full mx-auto md:w-auto btn btn-tritical-reversed text-black btn-size-lg " href="https://my.omsystem.com/p/newsletter-subscribe"   target="_blank" >Rekisteröidy</a> </div> </div></div></div></div> </div><!-- Main CTA --></div></div><script>
    document.addEventListener('alpine:init', () => {
        Alpine.data('columnSet', (componentId, hideUntilSelection = false, kitDropdownId = '') => ({
            componentId: componentId,
            kitDropdownId: kitDropdownId,
            visible: !hideUntilSelection,
            resizeTimer: null,
            subheaderSelector: '',
            is124Block: false,

            equalizeColumnSetSubheaders() {
                const subheaders = document.querySelectorAll(this.subheaderSelector);

                subheaders.forEach(el => {
                    el.style.minHeight = '';

                    if (window.innerWidth < 768) {
                        el.classList.remove('md:opacity-0');
                    }
                });

                if (subheaders.length === 1) {
                    subheaders[0].classList.remove('md:opacity-0');

                    return;
                }

                if (window.innerWidth < 768 || subheaders.length === 0) {
                    return;
                }

                subheaders.forEach(el => el.style.minHeight = '');

                
                if (this.is124Block && subheaders.length > 1) {
                    const pairs = [];

                    for (let i = 0; i < subheaders.length; i += 2) {
                        const pair = [subheaders[i]];

                        if (i + 1 < subheaders.length) {
                            pair.push(subheaders[i + 1]);
                        }

                        pairs.push(pair);
                    }

                    pairs.forEach(pair => {
                        let pairMaxHeight = 0;
                        pair.forEach(el => {
                            pairMaxHeight = Math.max(pairMaxHeight, el.getBoundingClientRect().height);
                        });

                        if (pairMaxHeight > 0) {
                            pair.forEach(el => {
                                el.style.minHeight = pairMaxHeight + 'px';
                                el.classList.remove('md:opacity-0');
                            });
                        }
                    });
                } else {
                    let maxHeight = 0;
                    subheaders.forEach(el => {
                        maxHeight = Math.max(maxHeight, el.getBoundingClientRect().height);
                    });

                    if (maxHeight > 0) {
                        subheaders.forEach(el => {
                            el.style.minHeight = maxHeight + 'px';
                            el.classList.remove('md:opacity-0');
                        });
                    }
                }
            },

            init() {
                this.subheaderSelector = '.colSetSubheader-' + this.componentId + ':not(.md\\:hidden)';

                window.addEventListener('load', () => {
                    this.equalizeColumnSetSubheaders();
                });
            },

            onResize() {
                clearTimeout(this.resizeTimer);
                this.resizeTimer = setTimeout(() => this.equalizeColumnSetSubheaders(), 250);
            },

            onKitDropdownChange() {
                const detail = this.$event.detail;
                if (!detail) return;
                if (this.kitDropdownId && detail.kitDropdownId !== this.kitDropdownId) return;

                this.visible = true;

                const ctaMap = { 0: detail.firstCTA, 1: detail.secondCTA };
                for (const [index, ctaData] of Object.entries(ctaMap)) {
                    const el = this.$el.querySelector('[data-kit-cta-index="' + index + '"]');
                    if (!el) continue;

                    const wrapper = el.closest('[data-kit-cta-wrapper]');

                    if (!ctaData || !ctaData.text) {
                        if (wrapper) wrapper.classList.add('hidden');
                        continue;
                    }

                    const oldBtnClass = el.dataset.btnClass || '';
                    if (oldBtnClass) {
                        oldBtnClass.split(' ').filter(Boolean).forEach(function(c) { el.classList.remove(c); });
                    }
                    if (ctaData.className) {
                        ctaData.className.split(' ').filter(Boolean).forEach(function(c) { el.classList.add(c); });
                        el.dataset.btnClass = ctaData.className;
                    }

                    el.textContent = ctaData.text;
                    if (ctaData.href) el.href = ctaData.href;
                    el.target = ctaData.target || '_self';
                    if (wrapper) wrapper.classList.remove('hidden');
                }

                this.$nextTick(() => {
                    this.$nextTick(() => {
                        this.$el.scrollIntoView({ behavior: 'smooth' });
                    });
                });
            }
        }));
    });</script> <script>
    function updateBgHotspot(url, bgVar = false, el) {
        if (el.getAttribute('hotspot-processed') || !url) return;

        const displayedWidth = el.offsetWidth;
        const displayedHeight = el.offsetHeight;
        const isNewUrl = el.getAttribute('data-new-url');

        if (isNewUrl) {
            const newBackgroundUrl = url + `&w=${Math.round(displayedWidth)}&h=${Math.round(displayedHeight)}`;
            bgVar ? el.style.setProperty(bgVar, `url(${newBackgroundUrl})`) : el.style.backgroundImage = `url(${newBackgroundUrl})`;
            el.setAttribute('hotspot-processed', 'true');
        }
    }

    function updateImageHotspot(url, img) {
        if (img.getAttribute('hotspot-processed')) return;

        const renderWidth = img.naturalWidth;
        let displayedWidth = img.offsetWidth;
        let displayedHeight = img.offsetHeight;
        const isNewUrl = img.getAttribute('data-new-url');

        if (isNewUrl) {
            displayedHeight = displayedHeight / displayedWidth * renderWidth;
            displayedWidth = renderWidth;
            img.src = url + `&w=${Math.round(displayedWidth)}&h=${Math.round(displayedHeight)}`;
            img.setAttribute('hotspot-processed', 'true');
        }

    }

    function updateVideoPosterHotspot(url, video) {
        if (!url) return;
        if (video.getAttribute('hotspot-processed')) return;

        const renderWidth = video.videoWidth || video.offsetWidth;
        let displayedWidth = video.offsetWidth;
        let displayedHeight = video.offsetHeight;
        const isNewUrl = video.getAttribute('data-new-poster-url');

        if (isNewUrl) {
            displayedHeight = displayedHeight / displayedWidth * renderWidth;
            displayedWidth = renderWidth;
            video.poster = url + `&w=${Math.round(displayedWidth)}&h=${Math.round(displayedHeight)}`;
            video.setAttribute('hotspot-processed', 'true');
        }
    }</script>  <script>    require(['magentoStorefrontEvents'], function (magentoStorefrontEvents) {
        if (!magentoStorefrontEvents) return;

        window.magentoStorefrontEvents = magentoStorefrontEvents;

        let eventForwardingContext = magentoStorefrontEvents.context.getEventForwarding() || {};
        eventForwardingContext.aep = false;
        magentoStorefrontEvents.context.setEventForwarding(eventForwardingContext);

        magentoStorefrontEvents.context.setAEP({
            imsOrgId: "9ADB2C1060AB504B0A495FC6\u0040AdobeOrg",
            datastreamId: "1df8a6c2\u002De9f9\u002D4e77\u002Da092\u002D9a35b62c46aa",
            webSdkName: "alloy_omd"
        });

        magentoStorefrontEvents.context.setExperiencePlatformConnectorExtension({
            version: "3.5.0"
        });
    });</script></div></div></main><footer class="page-footer"><div class="footer content"> <div class="footer" data-id="Footer-global">   <div class="bg-secondary text-pallas py-10 flex justify-center"><div class="flex flex-col gap-8 lg:gap-0 lg:grid lg:grid-cols-[11fr,_6fr] lg:justify-center lg:items-center w-full max-w-2xl px-4 md:px-5 2xl:px-10"><div class="text-center md:text-left flex gap-8 md:gap-5 flex-col md:items-center"><h2 class="text-pallas font-bold text-xl text-center" tabindex="0">Tilaa uutiskirjeemme</h2><div class="flex flex-col gap-5 md:grid md:grid-cols-3"> <div class="flex flex-col gap-3"><p class="flex gap-2.5" tabindex="0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" role="img">
<g clip-path="url(#clip0_19787_2413)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 18C14.4096 18 18 14.4096 18 10C18 5.5904 14.4096 2 10 2C5.5904 2 2 5.5904 2 10C2 14.4096 5.5904 18 10 18ZM20 10C20 15.5142 15.5142 20 10 20C4.48583 20 0 15.5142 0 10C0 4.48583 4.48583 0 10 0C15.5142 0 20 4.48583 20 10Z" fill="#FAFAFA"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.6811 6.78058L9.40154 15.2143L5.05811 9.88148L6.60884 8.61846L9.18837 11.7856L12.9859 5.71936L14.6811 6.78058Z" fill="#FAFAFA"/>
</g>
<defs>
<clipPath id="clip0_19787_2413">
<rect width="20" height="20" fill="white"/>
</clipPath>
</defs>
<title>checkmark</title></svg>
 <span class="text-caption-bold text-pallas text-start">Uudet tuotteet</span></p><p class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight text-start" tabindex="0">Varhaiset päivitykset uusimmista tuotteista.</p></div> <div class="flex flex-col gap-3"><p class="flex gap-2.5" tabindex="0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" role="img">
<g clip-path="url(#clip0_19787_2413_2)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 18C14.4096 18 18 14.4096 18 10C18 5.5904 14.4096 2 10 2C5.5904 2 2 5.5904 2 10C2 14.4096 5.5904 18 10 18ZM20 10C20 15.5142 15.5142 20 10 20C4.48583 20 0 15.5142 0 10C0 4.48583 4.48583 0 10 0C15.5142 0 20 4.48583 20 10Z" fill="#FAFAFA"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.6811 6.78058L9.40154 15.2143L5.05811 9.88148L6.60884 8.61846L9.18837 11.7856L12.9859 5.71936L14.6811 6.78058Z" fill="#FAFAFA"/>
</g>
<defs>
<clipPath id="clip0_19787_2413_2">
<rect width="20" height="20" fill="white"/>
</clipPath>
</defs>
<title>checkmark</title></svg>
 <span class="text-caption-bold text-pallas text-start">Kampanjat</span></p><p class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight text-start" tabindex="0">Ilmoitukset kaikista uusimmista tuotannoista ja erikoistarjouksista.</p></div> <div class="flex flex-col gap-3"><p class="flex gap-2.5" tabindex="0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" role="img">
<g clip-path="url(#clip0_19787_2413_3)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 18C14.4096 18 18 14.4096 18 10C18 5.5904 14.4096 2 10 2C5.5904 2 2 5.5904 2 10C2 14.4096 5.5904 18 10 18ZM20 10C20 15.5142 15.5142 20 10 20C4.48583 20 0 15.5142 0 10C0 4.48583 4.48583 0 10 0C15.5142 0 20 4.48583 20 10Z" fill="#FAFAFA"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.6811 6.78058L9.40154 15.2143L5.05811 9.88148L6.60884 8.61846L9.18837 11.7856L12.9859 5.71936L14.6811 6.78058Z" fill="#FAFAFA"/>
</g>
<defs>
<clipPath id="clip0_19787_2413_3">
<rect width="20" height="20" fill="white"/>
</clipPath>
</defs>
<title>checkmark</title></svg>
 <span class="text-caption-bold text-pallas text-start">Erikoistarjoukset </span></p><p class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight text-start" tabindex="0">Yksinoikeudella alennuksia ja tarjouksia vain tilaajille!</p></div></div></div> <div class="lg:pl-10"><form class="form subscribe [&_.grecaptcha-badge]:hidden" action="https://explore.omsystem.com/fi/fi/newsletter/subscriber/new/" method="post" x-data="initNewsletterForm()" @submit.prevent="submitForm()" id="newsletter-validate-detail" aria-label="Tilaa&#x20;uutiskirjeeseen"  ><div class="flex flex-col justify-center gap-4 md:gap-5 md:justify-start md:flex-row"><div class="grow overflow-hidden relative" id="email-newsletter-field"><label for="newsletter-subscribe" class="sr-only">Sähköpostiosoite</label> <div class="control relative"><input name="email" type="email" required x-model="email" @input.debounce="validateEmail" id="newsletter-subscribe" placeholder="S&#xE4;hk&#xF6;postiosoite" class="peer form-input !h-12 inline-flex w-full !placeholder-transparent !text-secondary !caret-secondary !leading-none !font-normal" aria-describedby="footer-newsletter-heading" ><span class="invisible overflow-hidden w-[calc(100%-26px)] whitespace-nowrap text-ellipsis absolute top-1/2 left-3.5 -translate-y-1/2 text-gray-600 text-sm peer-placeholder-shown:visible pointer-events-none" >Sähköpostiosoite <span class="text-azure font-bold">*</span></span></div><div x-show="emailError" class="field mt-1"><span class="messages text-red text-sm" x-text="emailErrorMessage"></span></div></div> <input class="honeyspam-input hidden" type="text" name="honeyspam_newsletter_registration_form" autocomplete="off" autofill="off" />  <input type="hidden" id="honey_spam_form" name="honey_spam_form" value="newsletter_registration_form">  <input name="form_key" type="hidden" value="2Tl4tVxtNGjV11Sr" /> <button type="submit"  form="newsletter-validate-detail" :disabled="emailError || !email" class="border-none focus:border-none hover:border-none active:border-none focus:bg-primary active:bg-primary focus:text-pallas active:text-pallas inline-flex shrink-0 xl:mt-0 btn btn-primary max-w-none w-full md:w-auto" >Rekisteröidy</button></div>  <div class="field choice w-full text-xs text-pallas !mt-4 flex !flex-nowrap !items-start"><input type="checkbox" id="privacy-policy" class="checkbox mr-1.5" required><label for="privacy-policy" x-data="initFinePrint()" x-bind="eventListeners" class="!items-start"><span class="text-xs text-pallas">Tilaa uutiskirjeemme. <div class="overflow-hidden transition-[max-height] duration-300 ease-in-out" :style="{ maxHeight: showFullText ? contentHeight + 'px' : collapsedHeight + 'px' }" x-ref="textContent"><p :class="!showFullText && !transitioning ? 'line-clamp-2' : ''" class="text-caption-sm text-pallas md-lg:text-[10px] mt-3 md-lg:mt-1.5 md:leading-snug"> * Lisätietoja tietojenkäsittelystä, mukaan lukien käyttäytymisen seuranta, säilytysajat sekä oikeutesi henkilötietojesi käsittelyyn liittyen, löydät kohdista <a class="!underline font-bold hover:text-inherit" href="https://explore.omsystem.com/fi/fi/privacy/">Tietosuojailmoitus</a> ja <a class="!underline font-bold hover:text-inherit" href="https://explore.omsystem.com/fi/fi/cookies/">Evästekäytäntö</a>. Jos et enää halua vastaanottaa sähköpostimarkkinointiamme, voit peruuttaa suostumuksesi milloin tahansa maksutta napsauttamalla tästä. Voit myös peruuttaa uutiskirjeen tilauksen klikkaamalla uutiskirjeen lopussa olevaa peruutuslinkkiä. Huomaa, että suostumuksen peruuttaminen ei vaikuta ennen sen peruuttamista suoritetun käsittelyn lainmukaisuuteen.</p></div><button type="button" class="underline font-bold mt-2 text-pallas border-none hover:border-none hover:bg-transparent hover:text-pallas active:border-none active:bg-transparent active:text-pallas focus:border-none focus:bg-transparent focus:text-pallas" @click="toggle()" x-text="showFullText ? 'N\u00E4yt\u00E4\u0020v\u00E4hemm\u00E4n' : 'N\u00E4yt\u00E4\u0020lis\u00E4\u00E4'"></button></span></label></div></form><script>
        function initNewsletterForm() {
            return {
                email: '',
                emailError: false,
                emailErrorMessage: '',
                displayErrorMessage: false,
                errorMessages: [],
                validateEmail() {
                    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/;
                    const emailField = document.getElementById("email-newsletter-field");

                    if (!this.email) {
                        this.emailError = true;
                        emailField.classList.add('field-error');
                        this.emailErrorMessage = 'T\u00E4m\u00E4\u0020on\u0020pakollinen\u0020kentt\u00E4.';

                        return false;
                    } else if (!emailRegex.test(this.email)) {
                        this.emailError = true;
                        emailField.classList.add('field-error');
                        this.emailErrorMessage = 'Kirjoita\u0020voimassa\u0020oleva\u0020S\u00E4hk\u00F6posti\u0020Postiosoite.';

                        return false;
                    } else {
                        this.emailError = false;
                        emailField.classList.remove('field-error');
                        this.emailErrorMessage = '';

                        return true;
                    }
                },
                setErrorMessages(messages) {
                    this.errorMessages = [messages]
                    this.displayErrorMessage = this.errorMessages.length
                },
                submitForm() {
                    
                    const $form = this.$el;
                    this.validateEmail();

                    if (this.emailError) {
                        this.setErrorMessages(this.emailErrorMessage);

                        return;
                    }

                                        $form.submit();
                }
            }
        }
        function initFinePrint() {
            return {
                showFullText: false,
                transitioning: false,
                transitionDuration: 300,
                contentHeight: 0,
                collapsedHeight: 0,
                init() {
                    this.updateHeights();
                    this.$refs.textContent.style.maxHeight = this.collapsedHeight + 'px';
                    this.$refs.textContent.querySelector('p').classList.add('line-clamp-2');
                },
                updateHeights() {
                    const newsLetterContent = this.$refs.textContent;
                    const newsLetterText = newsLetterContent.querySelector('p');

                    newsLetterContent.style.transition = 'none';
                    newsLetterContent.style.maxHeight = 'none';
                    newsLetterText.classList.remove('line-clamp-2');
                    this.contentHeight = newsLetterContent.scrollHeight;
                    newsLetterText.classList.add('line-clamp-2');
                    this.collapsedHeight = newsLetterContent.offsetHeight;
                    newsLetterContent.style.maxHeight = this.showFullText ? this.contentHeight + 'px' : this.collapsedHeight + 'px';
                    newsLetterContent.style.transition = 'max-height 300ms ease-in-out';

                    if (!this.showFullText) {
                        newsLetterText.classList.add('line-clamp-2');
                    } else {
                        newsLetterText.classList.remove('line-clamp-2');
                    }
                },
                toggle() {
                    this.transitioning = true;
                    this.updateHeights();
                    this.showFullText = !this.showFullText;

                    if (this.showFullText) {
                        this.$refs.textContent.querySelector('p').classList.remove('line-clamp-2');
                    }

                    this.$refs.textContent.offsetHeight;
                    this.$refs.textContent.style.maxHeight = this.showFullText ? this.contentHeight + 'px' : this.collapsedHeight + 'px';

                    if (!this.showFullText) {
                        setTimeout(() => {
                            this.$refs.textContent.querySelector('p').classList.add('line-clamp-2');
                        }, this.transitionDuration);
                    }

                    setTimeout(() => {
                        this.transitioning = false;
                    }, this.transitionDuration);
                },
                eventListeners: {
                    ['@resize.window.100']() {
                        this.updateHeights();
                    },
                }
            }
        }</script></div></div></div>    <div class="bg-taiga text-white px-4 py-6 md:py-[18px] md:px-0"><div class="flex flex-col gap-5 md:flex-row items-start md:items-center md:justify-between md:px-5 2xl:px-10 md:m-auto md:max-w-2xl">   <div class="flex items-center md:justify-center md:first:justify-start md:last:justify-end gap-4 md:basis-[280px]"><img src="https://cdn.sanity.io/images/ipox1240/live/adde7b6ad7810791794cafcba56a8dda822a09d7-24x24.png" alt="Ilmainen toimitus yli 30€ tilauksille" class="w-6 h-6"><span class="text-caption-bold text-pallas pt-0.5">Ilmainen toimitus yli 30€ tilauksille</span></div>   <div class="flex items-center md:justify-center md:first:justify-start md:last:justify-end gap-4 md:basis-[280px]"><img src="https://cdn.sanity.io/images/ipox1240/live/5d2cc7c1146f02218afae9a173d57b837260dc90-24x24.png" alt="Helppo palautus" class="w-6 h-6"><span class="text-caption-bold text-pallas pt-0.5">Helppo palautus</span></div>   <div class="flex items-center md:justify-center md:first:justify-start md:last:justify-end gap-4 md:basis-[280px]"><img src="https://cdn.sanity.io/images/ipox1240/live/144627541b835951605e5b1d9164f1525959c443-24x24.png" alt="Joustavat maksutavat" class="w-6 h-6"><span class="text-caption-bold text-pallas pt-0.5">Joustavat maksutavat</span></div>  </div></div>   <div class="flex flex-col md:flex-row justify-center items-center bg-secondary p-4 md:px-5 2xl:px-10 gap-5"><span class="text-gray-light text-sm leading-tight font-normal pt-[3px] min-w-fit">Turvallinen maksu:</span> <div class="flex gap-2.5 items-center justify-center flex-wrap">   <img src="https://cdn.sanity.io/images/ipox1240/live/627f9cb4a5947983b30d04608ffde56e6c14881c-44x28.png" alt="VISA" class="h-5">    <img src="https://cdn.sanity.io/images/ipox1240/live/ef1ad11493ff391db7ca0b6453d96a77fd97d75a-44x28.png" alt="MasterCard" class="h-5">    <img src="https://cdn.sanity.io/images/ipox1240/live/fce549df9365180c711d0e48e516fb7658d76628-2560x1050.png" alt="ApplePay" class="h-5">    <img src="https://cdn.sanity.io/images/ipox1240/live/59b1e7d5c2ef10b639c5fa5c7135def83b8ffd2d-200x51.png" alt="Paypal" class="h-5">    <img src="https://cdn.sanity.io/images/ipox1240/live/8b8ea7657b94c37e3d81080edf29c1e6def024d6-3222x1566.png" alt="Klarna" class="h-5">    <img src="https://cdn.sanity.io/images/ipox1240/live/4c09b2a0ca93a761e4f6a99300f13255919fcf45-752x400.png" alt="Google Pay" class="h-5"> </div></div> <div x-data="{ openSections: {} }" class="bg-secondary border-y border-gray-dark py-10 px-4 md:px-5 2xl:px-10 flex flex-col md:flex-row md:justify-center md:gap-10 gap-5">  <div class="flex flex-col gap-5 md:flex-1 md:basis-60 2xl:grow-0" x-data="{ open: false }"><div @click="open = !open" class="flex justify-between items-center w-full md:w-auto"><span class="text-caption-bold text-pallas text-start">Verkkokauppa</span> <div class="md:hidden" :class="{'rotate-180': open, 'rotate-0': !open}"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="12" viewBox="0 0 20 12" fill="none" class="[&amp;&gt;path]:fill-pallas" role="img">
<path d="M10 11.7593L0 1.75934L1.56895 0.166626L10 8.59769L18.4231 0.166626L20 1.75934L10 11.7593Z" fill="black"/>
<title>chevron-down</title></svg>
</div></div><ul x-show="open || window.innerWidth >= 768" x-transition:enter="transition-all duration-300 ease-out" x-transition:enter-start="opacity-0 max-h-0 overflow-hidden" x-transition:enter-end="opacity-100 max-h-96 overflow-visible" x-transition:leave="transition-all duration-200 ease-in" x-transition:leave-start="opacity-100 max-h-96 overflow-visible" x-transition:leave-end="opacity-0 max-h-0 overflow-hidden" class="flex flex-col gap-5 md:gap-3 p-0 list-none"> <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/cameras" target="_self" tabindex="0" >Kamerat</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/lenses" target="_self" tabindex="0" >Objektiivit</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/audio" target="_self" tabindex="0" >Audiotuotteet</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/binoculars" target="_self" tabindex="0" >Kiikarit</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/accessories" target="_self" tabindex="0" >Tarvikkeet</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/reconditioned" target="_self" tabindex="0" >Tehdashuolletut </a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/promotions" target="_self" tabindex="0" >Tarjoukset</a> </li> </ul></div>   <div class="flex flex-col gap-5 md:flex-1 md:basis-60 2xl:grow-0" x-data="{ open: false }"><div @click="open = !open" class="flex justify-between items-center w-full md:w-auto"><span class="text-caption-bold text-pallas text-start">Yrityksemme</span> <div class="md:hidden" :class="{'rotate-180': open, 'rotate-0': !open}"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="12" viewBox="0 0 20 12" fill="none" class="[&amp;&gt;path]:fill-pallas" role="img">
<path d="M10 11.7593L0 1.75934L1.56895 0.166626L10 8.59769L18.4231 0.166626L20 1.75934L10 11.7593Z" fill="black"/>
<title>chevron-down</title></svg>
</div></div><ul x-show="open || window.innerWidth >= 768" x-transition:enter="transition-all duration-300 ease-out" x-transition:enter-start="opacity-0 max-h-0 overflow-hidden" x-transition:enter-end="opacity-100 max-h-96 overflow-visible" x-transition:leave="transition-all duration-200 ease-in" x-transition:leave-start="opacity-100 max-h-96 overflow-visible" x-transition:leave-end="opacity-0 max-h-0 overflow-hidden" class="flex flex-col gap-5 md:gap-3 p-0 list-none"> <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/creativity-its-in-our-nature" target="_self" tabindex="0" >It's in our nature.</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://omsystem.com/en/" target="_blank" tabindex="0" >Globaali brändisivusto</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://www.om-digitalsolutions.com/" target="_blank" tabindex="0" >Yritysfilosofia</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/stores" target="_self" tabindex="0" >Etsi jälleenmyyjä</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://my.omsystem.com/ambassadors" target="_blank" tabindex="0" >Ambassador-kuvaajat</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://om-digitalsolutions.career.softgarden.de/" target="_blank" tabindex="0" >Ura</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="tg-7-industry" target="_blank" tabindex="0" >B2B</a> </li> </ul></div>   <div class="flex flex-col gap-5 md:flex-1 md:basis-60 2xl:grow-0" x-data="{ open: false }"><div @click="open = !open" class="flex justify-between items-center w-full md:w-auto"><span class="text-caption-bold text-pallas text-start">Inspiroidu</span> <div class="md:hidden" :class="{'rotate-180': open, 'rotate-0': !open}"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="12" viewBox="0 0 20 12" fill="none" class="[&amp;&gt;path]:fill-pallas" role="img">
<path d="M10 11.7593L0 1.75934L1.56895 0.166626L10 8.59769L18.4231 0.166626L20 1.75934L10 11.7593Z" fill="black"/>
<title>chevron-down</title></svg>
</div></div><ul x-show="open || window.innerWidth >= 768" x-transition:enter="transition-all duration-300 ease-out" x-transition:enter-start="opacity-0 max-h-0 overflow-hidden" x-transition:enter-end="opacity-100 max-h-96 overflow-visible" x-transition:leave="transition-all duration-200 ease-in" x-transition:leave-start="opacity-100 max-h-96 overflow-visible" x-transition:leave-end="opacity-0 max-h-0 overflow-hidden" class="flex flex-col gap-5 md:gap-3 p-0 list-none"> <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/its-a-system" target="_self" tabindex="0" >Tutustu järjestelmään.</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://my.omsystem.com" target="_blank" tabindex="0" >MyOMSYSTEM</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://my.omsystem.com/gallery" target="_blank" tabindex="0" >OM SYSTEM -käyttäjägalleria</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/top-photo-genres" target="_self" tabindex="0" >Suosituimmat valokuvausaiheet</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://events.eao.omsystem.com" target="_blank" tabindex="0" >Tapahtumat & työpajat</a> </li> </ul></div>   <div class="flex flex-col gap-5 md:flex-1 md:basis-60 2xl:grow-0" x-data="{ open: false }"><div @click="open = !open" class="flex justify-between items-center w-full md:w-auto"><span class="text-caption-bold text-pallas text-start">Tuki</span> <div class="md:hidden" :class="{'rotate-180': open, 'rotate-0': !open}"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="12" viewBox="0 0 20 12" fill="none" class="[&amp;&gt;path]:fill-pallas" role="img">
<path d="M10 11.7593L0 1.75934L1.56895 0.166626L10 8.59769L18.4231 0.166626L20 1.75934L10 11.7593Z" fill="black"/>
<title>chevron-down</title></svg>
</div></div><ul x-show="open || window.innerWidth >= 768" x-transition:enter="transition-all duration-300 ease-out" x-transition:enter-start="opacity-0 max-h-0 overflow-hidden" x-transition:enter-end="opacity-100 max-h-96 overflow-visible" x-transition:leave="transition-all duration-200 ease-in" x-transition:leave-start="opacity-100 max-h-96 overflow-visible" x-transition:leave-end="opacity-0 max-h-0 overflow-hidden" class="flex flex-col gap-5 md:gap-3 p-0 list-none"> <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/service-and-support" target="_self" tabindex="0" >Huolto ja tuki</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://my.omsystem.com/login?ReturnUrl=%2Fp%2Fdashboard-products-add" target="_blank" tabindex="0" >Tuotteen rekisteröinti</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/pro-service" target="_self" tabindex="0" >PRO-palvelu</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/software" target="_self" tabindex="0" >Ohjelmistot & sovellukset</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/faqs" target="_self" tabindex="0" >UKK</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/faq-reconditioned-products" target="_self" tabindex="0" >UKK Tehdashuolletut</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/easy-order" target="_self" tabindex="0" >Helppo tilaus</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/delivery" target="_self" tabindex="0" >Toimitus</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/easy-returns" target="_self" tabindex="0" >Palautuspyyntö</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/secure-shopping" target="_self" tabindex="0" >Turvallinen ostos</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/disposal-of-electronic-equipment" target="_self" tabindex="0" >Sähkölaitteiden hävittäminen</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://omdscs.zendesk.com/hc/requests/new" target="_blank" tabindex="0" >Ota yhteyttä</a> </li> </ul></div>   <div class="flex flex-col gap-5 md:flex-1 md:basis-60 2xl:grow-0" x-data="{ open: false }"><div @click="open = !open" class="flex justify-between items-center w-full md:w-auto"><span class="text-caption-bold text-pallas text-start">Lakitiedot</span> <div class="md:hidden" :class="{'rotate-180': open, 'rotate-0': !open}"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="12" viewBox="0 0 20 12" fill="none" class="[&amp;&gt;path]:fill-pallas" role="img">
<path d="M10 11.7593L0 1.75934L1.56895 0.166626L10 8.59769L18.4231 0.166626L20 1.75934L10 11.7593Z" fill="black"/>
<title>chevron-down</title></svg>
</div></div><ul x-show="open || window.innerWidth >= 768" x-transition:enter="transition-all duration-300 ease-out" x-transition:enter-start="opacity-0 max-h-0 overflow-hidden" x-transition:enter-end="opacity-100 max-h-96 overflow-visible" x-transition:leave="transition-all duration-200 ease-in" x-transition:leave-start="opacity-100 max-h-96 overflow-visible" x-transition:leave-end="opacity-0 max-h-0 overflow-hidden" class="flex flex-col gap-5 md:gap-3 p-0 list-none"> <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/privacy" target="_self" tabindex="0" >Tietosuojakäytäntö</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="/cookies" tabindex="0" >Evästeet</a> <!-- Cookie Links --></li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="ot-sdk-show-settings cursor-pointer hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" tabindex="0">Evästeasetukset</a> <!-- URL Links --></li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://my.omsystem.com/company/imprint/" target="_blank" tabindex="0" >Julkaisutiedot</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/termsofuse" target="_self" tabindex="0" >Käyttöehdot & Peruutusoikeus</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://explore.omsystem.com/fi/fi/whistleblowing-reporting-channel" target="_self" tabindex="0" >Ilmoituskanava väärinkäytöksistä</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="https://www.om-digitalsolutions.com/en/product_security/vulnerability_disclosure.html" target="_blank" tabindex="0" >Tuoteturvallisuus</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="eu-data-act" target="_blank" tabindex="0" >Asetus (EU)</a> </li>  <li class="text-gray-light text-caption font-normal md:text-sm leading-tight md:leading-tight"><!-- OneTrust Cookie Popup Link --> <a class="hover:underline hover:text-gray-light visited:text-gray-light active:text-gray-light" href="/fraudulent-fake-websites" target="_blank" tabindex="0" >Huijausvaroitus</a> </li> </ul></div> </div><div class="bg-secondary px-4 pb-6 pt-5 md:px-0 md:py-4"><div class="flex flex-col md:flex-row justify-center md:justify-between items-center text-center md:text-left gap-9 md:gap-0 md:px-5 2xl:px-10 md:m-auto md:max-w-2xl"><div class="order-3 md:order-1"><p class="text-gray-light text-sm leading-tight font-normal">© 2026 OM Digital Solutions Corporation</p></div><div class="order-1 md:order-2"><a href="https://www.om-digitalsolutions.com/" target="_blank" rel="noopener noreferrer"><svg xmlns="http://www.w3.org/2000/svg" width="110" height="24" viewBox="0 0 111 24" fill="none" role="img">
<g clip-path="url(#clip0_32686_7877)">
<path d="M35.5127 13.4632L30.2444 0.780232H23.4151V9.56072C22.0493 3.1217 15.6102 -0.975865 9.36634 0.389989C3.12244 1.75584 -1.17024 8.19487 0.19561 14.4388C1.36634 19.9022 6.24439 23.8046 11.7078 23.8046C17.3663 23.8046 22.2444 19.9022 23.4151 14.2436V22.829H28.8785V10.9266L33.5615 23.0241H37.659L42.342 10.9266V23.0241H47.8054V0.780232H40.9761L35.5127 13.4632ZM11.9029 18.5363C8.19561 18.5363 5.26878 15.6095 5.26878 12.0973C5.26878 8.38999 8.19561 5.46316 11.9029 5.46316C15.6102 5.46316 18.5371 8.38999 18.5371 12.0973C18.342 15.6095 15.4151 18.5363 11.9029 18.5363Z" fill="white"/>
<path d="M51.9028 0.780273H56.0004C56.5858 0.780273 57.1711 0.780273 57.7565 1.17052C58.9272 1.56076 59.7077 2.34125 60.098 3.51198C60.2931 4.09735 60.4882 4.87783 60.4882 5.4632C60.4882 6.04857 60.4882 6.82905 60.2931 7.41442C60.098 7.99979 59.9028 8.39003 59.5126 8.78027C58.9272 9.17052 58.537 9.56076 57.9516 9.75588C57.3662 9.951 56.5858 10.1461 56.0004 10.1461H51.9028V0.780273ZM54.0492 8.39003H56.0004C56.3906 8.39003 56.5858 8.39003 56.976 8.19491C57.1711 7.99979 57.5614 7.99979 57.7565 7.80466C57.9516 7.60954 58.1467 7.2193 58.3419 7.02418C58.537 6.63393 58.537 6.24369 58.537 5.65832C58.537 5.26808 58.537 4.87783 58.3419 4.48759C58.3419 4.09735 58.1467 3.7071 57.9516 3.51198C57.7565 3.31686 57.3662 3.12174 56.976 2.92661C56.5858 2.73149 56.1955 2.73149 55.6101 2.73149H54.0492V8.39003Z" fill="white"/>
<path d="M63.6104 2.34125H61.6592V0.780273H63.6104V2.34125ZM61.6592 3.31686H63.6104V9.951H61.6592V3.31686Z" fill="white"/>
<path d="M75.3174 2.34125H73.3662V0.780273H75.3174V2.34125ZM73.3662 3.31686H75.3174V9.951H73.3662V3.31686Z" fill="white"/>
<path d="M79.4156 3.31694H80.7815V4.48767H79.4156V7.80475C79.4156 7.99987 79.4156 8.19499 79.6107 8.39011C79.6107 8.58524 80.001 8.58524 80.1961 8.58524H80.7815V9.95109C80.5863 9.95109 80.3912 9.95109 80.1961 9.95109H79.6107C79.4156 9.95109 79.0254 9.95109 78.8302 9.95109C78.6351 9.95109 78.44 9.75597 78.0497 9.75597C78.0497 9.75597 77.8546 9.56085 77.8546 9.36572C77.6595 9.1706 77.6595 8.78036 77.6595 8.58524V4.6828H76.4888V3.31694H77.6595V1.36572H79.6107L79.4156 3.31694Z" fill="white"/>
<path d="M89.7563 0.780273H91.7076V9.951H89.7563V0.780273Z" fill="white"/>
<path d="M53.4637 19.9024C53.4637 20.0975 53.4637 20.4878 53.6588 20.6829C53.854 20.878 53.854 21.0731 54.0491 21.2683C54.2442 21.4634 54.6345 21.4634 54.8296 21.4634C55.0247 21.4634 55.4149 21.6585 55.6101 21.6585C55.8052 21.6585 56.0003 21.6585 56.1954 21.6585C56.3906 21.6585 56.5857 21.6585 56.7808 21.4634C56.9759 21.4634 57.171 21.2683 57.171 21.0731C57.3662 20.878 57.3662 20.6829 57.3662 20.4878C57.3662 20.2926 57.3662 20.0975 57.171 19.9024C56.9759 19.7073 56.7808 19.5122 56.5857 19.5122C56.1954 19.317 56.0003 19.317 55.6101 19.317L54.6345 18.9268C54.2442 18.9268 53.854 18.7317 53.6588 18.5365C53.2686 18.3414 53.0735 18.3414 52.6832 18.1463C52.4881 17.9512 52.0979 17.7561 52.0979 17.3658C51.9028 16.9756 51.9028 16.5853 51.9028 16.1951C51.9028 15.8048 51.9027 15.4146 52.293 15.0244C52.4881 14.6341 52.8784 14.439 53.0735 14.2439C53.4637 14.0487 53.854 13.8536 54.2442 13.6585C54.6345 13.4634 55.0247 13.4634 55.6101 13.4634C56.1954 13.4634 56.5857 13.4634 57.171 13.6585C57.5613 13.6585 57.9515 13.8536 58.3418 14.2439C58.732 14.439 58.9271 14.8292 59.1223 15.2195C59.3174 15.6097 59.5125 16.1951 59.5125 16.5853H57.3662C57.3662 16.3902 57.3662 16.1951 57.171 15.8048C57.171 15.6097 56.9759 15.4146 56.7808 15.4146C56.5857 15.2195 56.3906 15.2195 56.1954 15.2195C56.0003 15.2195 55.8052 15.2195 55.4149 15.2195H54.8296C54.6345 15.2195 54.4393 15.2195 54.4393 15.4146C54.2442 15.4146 54.2442 15.6097 54.0491 15.8048C54.0491 16 53.854 16.1951 53.854 16.1951C53.854 16.3902 53.854 16.5853 54.0491 16.5853C54.2442 16.7805 54.2442 16.7805 54.4393 16.9756C54.6345 17.1707 55.0247 17.1707 55.4149 17.1707L56.7808 17.5609L57.171 17.7561L57.7564 17.9512C57.9515 17.9512 58.1467 18.1463 58.3418 18.3414C58.5369 18.5365 58.732 18.7317 58.9271 18.7317C59.1223 18.9268 59.3174 19.1219 59.3174 19.5122C59.5125 19.7073 59.5125 20.0975 59.5125 20.4878C59.5125 20.878 59.5125 21.2683 59.3174 21.6585C59.1223 22.0487 58.9271 22.2439 58.5369 22.6341C58.1467 22.8292 57.7564 23.2195 57.3662 23.2195C56.7808 23.4146 56.1954 23.4146 55.6101 23.4146C55.0247 23.4146 54.6345 23.4146 54.0491 23.2195C53.6588 23.0244 53.0735 22.8292 52.6832 22.6341C52.293 22.439 51.9028 22.0487 51.7076 21.6585C51.5125 21.2683 51.3174 20.6829 51.3174 20.0975L53.4637 19.9024Z" fill="white"/>
<path d="M60.4883 19.7068C60.4883 19.1215 60.4883 18.7312 60.6834 18.1459C60.8785 17.7556 61.0736 17.3654 61.4639 16.9751C61.8541 16.5849 62.2444 16.3898 62.6346 16.1946C63.0249 15.9995 63.6102 15.9995 64.1956 15.9995C64.781 15.9995 65.1712 15.9995 65.7566 16.1946C66.1468 16.3898 66.5371 16.5849 66.9273 16.9751C67.3175 17.3654 67.5127 17.7556 67.7078 18.1459C67.9029 18.5361 67.9029 19.1215 67.9029 19.7068C67.9029 20.2922 67.9029 20.6824 67.7078 21.0727C67.5127 21.4629 67.3175 21.8532 66.9273 22.2434C66.5371 22.6337 66.1468 22.8288 65.7566 23.0239C65.3663 23.219 64.781 23.219 64.1956 23.219C63.6102 23.219 63.22 23.219 62.6346 23.0239C62.2444 22.8288 61.8541 22.6337 61.4639 22.2434C61.0736 21.8532 60.8785 21.4629 60.6834 21.0727C60.4883 20.6824 60.4883 20.0971 60.4883 19.7068ZM62.4395 19.7068C62.4395 19.902 62.4395 20.2922 62.4395 20.4873C62.4395 20.6824 62.6346 20.8776 62.6346 21.2678C62.8297 21.4629 63.0249 21.658 63.22 21.658C63.4151 21.8532 63.8054 21.8532 64.0005 21.8532C64.1956 21.8532 64.5858 21.8532 64.781 21.658C64.9761 21.4629 65.1712 21.4629 65.3663 21.2678C65.5615 21.0727 65.5614 20.8776 65.5614 20.4873C65.5614 20.2922 65.5614 19.902 65.5614 19.7068C65.5614 19.5117 65.5614 19.1215 65.5614 18.9263C65.5614 18.7312 65.3663 18.5361 65.3663 18.1459C65.1712 17.7556 64.5858 17.5605 64.0005 17.5605C63.8054 17.5605 63.4151 17.5605 63.22 17.7556C63.0249 17.9507 62.8297 17.9507 62.6346 18.1459C62.6346 18.341 62.4395 18.7312 62.4395 18.9263C62.4395 19.1215 62.4395 19.3166 62.4395 19.7068Z" fill="white"/>
<path d="M68.6841 13.8535H70.6353V23.0242H68.6841V13.8535Z" fill="white"/>
<path d="M78.4393 23.0243H76.6832V22.0487C76.4881 22.4389 76.0979 22.634 75.7076 22.8292C75.3174 23.0243 74.9271 23.0243 74.5369 23.0243C74.1466 23.0243 73.7564 23.0243 73.171 22.8292C72.7808 22.634 72.5857 22.4389 72.3905 22.2438C72.1954 22.0487 72.1954 21.8536 72.0003 21.4633C72.0003 21.0731 71.8052 20.6828 71.8052 20.2926V16.3901H73.7564V20.0975C73.7564 20.4877 73.7564 20.8779 73.9515 21.2682C74.1466 21.4633 74.5369 21.6584 74.9271 21.6584C75.3174 21.6584 75.7076 21.4633 76.0979 21.2682C76.293 20.8779 76.4881 20.2926 76.4881 19.7072V16.3901H78.4393V23.0243Z" fill="white"/>
<path d="M82.7323 16.3902H84.0982V17.5609H82.7323V20.878C82.7323 21.0731 82.7323 21.2682 82.9274 21.4634C83.1225 21.6585 83.3177 21.6585 83.5128 21.6585C83.7079 21.6585 83.903 21.6585 84.0982 21.6585V23.0243H83.5128H82.9274C82.7323 23.0243 82.3421 23.0243 82.1469 23.0243C81.9518 23.0243 81.7567 22.8292 81.3665 22.8292C81.1713 22.6341 80.9762 22.6341 80.9762 22.439C80.7811 22.2438 80.7811 21.8536 80.7811 21.6585V17.5609H79.6104V16.3902H80.7811V14.439H82.7323V16.3902Z" fill="white"/>
<path d="M87.2208 15.2194H85.2695V13.8535H87.2208V15.2194ZM85.2695 16.3901H87.2208V23.0242H85.2695V16.3901Z" fill="white"/>
<path d="M88.1963 19.7072C88.1963 19.1219 88.1963 18.7316 88.3914 18.1462C88.5865 17.756 88.7817 17.3658 89.1719 16.9755C89.5621 16.5853 89.9524 16.3901 90.3426 16.195C91.3182 15.8048 92.2938 15.8048 93.2695 16.195C93.6597 16.3901 94.0499 16.5853 94.4402 16.9755C94.8304 17.3658 95.0256 17.756 95.2207 18.1462C95.4158 18.5365 95.4158 19.1219 95.4158 19.7072C95.4158 20.2926 95.4158 20.6828 95.2207 21.0731C95.0256 21.4633 94.8304 21.8536 94.4402 22.2438C94.0499 22.634 93.6597 22.8292 93.2695 23.0243C92.2938 23.4145 91.3182 23.4145 90.3426 23.0243C89.9524 22.8292 89.5621 22.634 89.1719 22.2438C88.7817 21.8536 88.5865 21.4633 88.3914 21.0731C88.3914 20.6828 88.1963 20.0975 88.1963 19.7072ZM90.1475 19.7072C90.1475 19.9023 90.1475 20.2926 90.1475 20.4877C90.1475 20.6828 90.3426 20.878 90.3426 21.2682C90.5377 21.4633 90.7329 21.6584 90.928 21.6584C91.1231 21.8536 91.5134 21.8536 91.7085 21.8536C91.9036 21.8536 92.2939 21.8536 92.489 21.6584C92.6841 21.4633 92.8792 21.4633 93.0743 21.2682C93.2695 21.0731 93.2695 20.878 93.2695 20.4877C93.2695 20.2926 93.2695 19.9023 93.2695 19.7072C93.2695 19.5121 93.2695 19.1219 93.2695 18.9267C93.2695 18.7316 93.0743 18.5365 93.0743 18.1462C92.8792 17.9511 92.6841 17.756 92.489 17.756C92.489 17.5609 92.0987 17.5609 91.9036 17.5609C91.7085 17.5609 91.3182 17.5609 91.1231 17.756C90.928 17.9511 90.7329 17.9511 90.5378 18.1462C90.3426 18.3414 90.3426 18.5365 90.3426 18.9267C90.1475 19.1219 90.1475 19.317 90.1475 19.7072Z" fill="white"/>
<path d="M96.5857 16.3901H98.3418V17.3657C98.537 16.9755 98.9272 16.7804 99.3175 16.5853C99.7077 16.3901 100.098 16.3901 100.488 16.3901C100.878 16.3901 101.269 16.3901 101.854 16.5853C102.244 16.7804 102.439 16.9755 102.635 17.1706C102.83 17.3657 103.025 17.756 103.025 17.9511C103.025 18.3414 103.22 18.7316 103.22 19.1218V23.2194H101.269V19.1218C101.269 18.7316 101.269 18.3414 101.074 17.9511C100.683 17.756 100.293 17.5609 99.9028 17.5609C99.5126 17.5609 99.1223 17.756 98.7321 17.9511C98.537 18.3414 98.3418 18.9267 98.3418 19.5121V23.0243H96.3906L96.5857 16.3901Z" fill="white"/>
<path d="M70.0492 3.31689V4.2925C69.8541 3.90226 69.4639 3.70714 69.0736 3.51202C68.6834 3.31689 68.2931 3.31689 67.9029 3.31689C67.5127 3.31689 66.9273 3.31689 66.537 3.51202C66.3419 3.70714 65.9517 3.90226 65.7566 4.2925C65.5614 4.68275 65.3663 4.87787 65.1712 5.26811C64.9761 5.65836 64.9761 6.0486 64.9761 6.43885C64.9761 6.82909 64.9761 7.41446 65.1712 7.8047C65.3663 8.19494 65.3663 8.58519 65.7566 8.97543C65.9517 9.36567 66.3419 9.5608 66.7322 9.75592C67.1224 9.95104 67.7078 9.95104 68.098 9.95104C68.4883 9.95104 68.8785 9.95104 69.2688 9.75592C69.659 9.5608 70.0492 9.36567 70.2444 8.97543V9.75592C70.2444 10.1462 70.0492 10.5364 69.8541 10.9267C69.4639 11.3169 69.0736 11.512 68.6834 11.3169C68.2932 11.3169 68.098 11.3169 67.7078 11.1218C67.5127 10.9267 67.3175 10.9267 67.3175 10.5364H65.3663C65.3663 10.7315 65.5614 11.1218 65.7566 11.3169C65.7566 11.7071 65.9517 11.9023 66.3419 12.0974C66.7322 12.2925 66.9273 12.2925 67.3175 12.4876C67.7078 12.4876 68.098 12.6827 68.2931 12.6827C68.6834 12.6827 69.2688 12.6827 69.659 12.4876C70.0492 12.4876 70.2444 12.2925 70.6346 12.0974C70.8297 11.9023 71.0249 11.7071 71.22 11.512C71.4151 11.3169 71.4151 11.1218 71.6102 10.9267C71.6102 10.7315 71.8053 10.5364 71.8053 10.3413C71.8053 10.1462 71.8053 9.95104 71.8053 9.75592V3.31689H70.0492ZM70.0492 7.21933C70.0492 7.41446 69.8541 7.60958 69.659 7.8047C69.4639 7.99982 69.2688 8.19494 69.0736 8.19494C68.8785 8.39006 68.6834 8.39007 68.2931 8.39007C68.098 8.39007 67.7078 8.39006 67.5127 8.19494C67.3175 8.19494 67.1224 7.99982 66.9273 7.8047C66.7322 7.60958 66.7322 7.41446 66.7322 7.21933C66.7322 7.02421 66.7322 6.82909 66.7322 6.43885C66.7322 6.24372 66.7322 6.0486 66.7322 5.65836C66.7322 5.46324 66.9273 5.26811 67.1224 5.07299C67.3175 4.87787 67.5127 4.68275 67.5127 4.68275C67.7078 4.48763 67.9029 4.48763 68.2931 4.48763C68.4883 4.48763 68.8785 4.48763 69.0736 4.68275C69.2688 4.87787 69.4639 4.87787 69.659 5.07299C69.8541 5.26811 69.8541 5.46324 69.8541 5.65836C69.8541 5.85348 69.8541 6.24372 69.8541 6.43885C70.0492 6.82909 70.0492 7.02421 70.0492 7.21933Z" fill="white"/>
<path d="M88.391 9.36567C88.391 9.17055 88.391 8.78031 88.391 8.58519V5.07299C88.391 4.68275 88.391 4.2925 88.1959 4.09738C88.0007 3.90226 87.8056 3.70714 87.4154 3.51202C87.0251 3.31689 86.83 3.31689 86.4398 3.31689C86.0495 3.31689 85.6593 3.31689 85.4641 3.31689C85.0739 3.31689 84.6837 3.31689 84.2934 3.31689C83.9032 3.31689 83.5129 3.51202 83.3178 3.70714C82.9276 3.90226 82.7324 4.09738 82.5373 4.2925C82.3422 4.68275 82.1471 4.87787 82.1471 5.26811H84.0983C84.0983 5.07299 84.2934 4.68275 84.4885 4.48763C84.6837 4.2925 85.0739 4.2925 85.4641 4.2925H85.8544C86.0495 4.2925 86.0495 4.2925 86.2446 4.48763C86.4398 4.48763 86.4398 4.68275 86.4398 4.68275C86.4398 4.87787 86.4398 5.07299 86.4398 5.07299C86.4398 5.26811 86.4398 5.46324 86.2446 5.65836C86.0495 5.85348 85.8544 5.85348 85.6593 5.85348L84.8788 6.0486H84.0983C83.9032 6.0486 83.5129 6.0486 83.3178 6.24372C83.1227 6.24372 82.7324 6.43885 82.5373 6.63397C82.3422 6.82909 82.1471 7.02421 81.952 7.21933C81.7568 7.41446 81.7568 7.8047 81.7568 8.19494C81.7568 8.58519 81.7568 8.78031 81.952 9.17055C82.1471 9.5608 82.1471 9.75592 82.5373 9.75592C82.7324 9.95104 83.1227 9.95104 83.3178 10.1462C83.7081 10.1462 83.9032 10.3413 84.2934 10.3413C84.6837 10.3413 85.0739 10.3413 85.6593 10.1462C85.8544 9.95104 86.2446 9.75592 86.4398 9.5608C86.4398 9.75592 86.4398 9.75592 86.4398 9.95104C86.4398 10.1462 86.4398 10.1462 86.4398 10.3413H88.391C88.391 9.95104 88.391 9.75592 88.391 9.36567ZM86.4398 7.41445C86.4398 7.60958 86.4398 7.60958 86.4398 7.8047C86.4398 7.99982 86.2446 8.19494 86.2446 8.39007C86.0495 8.58519 86.0495 8.78031 85.8544 8.78031C85.6593 8.97543 85.269 8.97543 84.8788 8.97543H84.4885C84.2934 8.97543 84.2934 8.97543 84.0983 8.78031C83.9032 8.78031 83.9032 8.78031 83.9032 8.58519C83.9032 8.39007 83.9032 8.39006 83.9032 8.19494C83.9032 7.99982 83.9032 7.99982 83.9032 7.8047C83.9032 7.60958 84.0983 7.60958 84.0983 7.41445C84.2934 7.41445 84.2934 7.21933 84.4885 7.21933H84.8788H85.269C85.4642 7.21933 85.4642 7.21933 85.6593 7.21933H86.0495C86.2446 7.21933 86.2446 7.21933 86.4398 7.02421V7.41445Z" fill="white"/>
<path d="M109.854 19.5117C109.659 19.3166 109.464 19.3166 109.269 19.1215L108.488 18.9263L107.708 18.7312L106.927 18.5361C106.732 18.5361 106.537 18.341 106.537 18.341C106.342 18.1459 106.342 17.7556 106.537 17.5605L106.732 17.3654H107.122H107.318C107.708 17.3654 107.903 17.3654 108.293 17.5605C108.488 17.7556 108.683 17.9507 108.683 18.1459H110.44C110.44 17.7556 110.244 17.5605 110.049 17.1702C109.854 16.9751 109.659 16.5849 109.464 16.5849C109.074 16.3898 108.879 16.3898 108.488 16.1946C108.098 16.1946 107.708 15.9995 107.318 15.9995C106.927 15.9995 106.537 15.9995 106.147 16.1946C105.757 16.1946 105.561 16.3898 105.171 16.5849C104.586 16.9751 104.196 17.5605 104.196 18.341C104.196 18.5361 104.196 18.9263 104.391 19.1215C104.586 19.3166 104.781 19.5117 104.976 19.7068C105.171 19.902 105.366 19.902 105.757 20.0971C105.952 20.0971 106.342 20.2922 106.537 20.2922L107.513 20.4873C107.708 20.4873 107.903 20.6824 108.098 20.6824C108.293 20.6824 108.488 20.8776 108.488 20.8776C108.488 20.8776 108.683 21.0727 108.683 21.2678C108.683 21.4629 108.683 21.4629 108.488 21.658C108.488 21.8532 108.293 21.8532 108.098 21.8532L107.708 22.0483H107.318C107.122 22.0483 106.927 22.0483 106.732 22.0483C106.537 22.0483 106.342 21.8532 106.342 21.8532C106.147 21.8532 106.147 21.658 105.952 21.4629C105.952 21.2678 105.757 21.0727 105.757 20.8776H104C104 21.2678 104.196 21.658 104.391 22.0483C104.586 22.2434 104.781 22.6337 105.171 22.8288C105.561 23.0239 105.757 23.219 106.147 23.219C106.537 23.219 106.927 23.4141 107.318 23.4141C107.708 23.4141 108.098 23.4141 108.488 23.219C108.879 23.219 109.269 23.0239 109.464 22.8288C109.854 22.6337 110.049 22.4385 110.244 22.0483C110.44 21.658 110.635 21.2678 110.44 20.8776C110.44 20.6824 110.44 20.2922 110.244 20.0971C110.244 19.902 110.049 19.7068 109.854 19.5117Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_32686_7877">
<rect width="110.634" height="24" fill="white"/>
</clipPath>
</defs>
<title>omd-logo</title></svg>
</a></div><div class="order-2 w-full md:w-auto"><div class="flex flex-row justify-between md:justify-center items-center gap-4 md:gap-10"><div class="flex gap-4 md:gap-5 justify-center">  <a href="https://www.youtube.com/@omsystemcameras" target="_blank"><img src="https://cdn.sanity.io/images/ipox1240/live/905996a4abac7b2e691fe5286fba6b83caad44f8-25x24.png" alt="YouTube" class="w-6 h-6" tabindex="0"></a>    <a href="https://www.instagram.com/omsystem.cameras" target="_blank"><img src="https://cdn.sanity.io/images/ipox1240/live/b23bd384a0fe0ca35654479c1ed1fa69dd44841f-24x24.png" alt="Instagram" class="w-6 h-6" tabindex="0"></a>    <a href="https://www.facebook.com/omsystem.global" target="_blank"><img src="https://cdn.sanity.io/images/ipox1240/live/d1f860b675f26f66efedcb93c0aaf37494c4f12b-24x24.png" alt="Facebook" class="w-6 h-6" tabindex="0"></a>  </div><div><button type="button" x-data @click="$dispatch('country-selector-overlay')" class="flex gap-2.5 items-center py-1 border-0 mb-0 bg-transparent cursor-pointer" tabindex="0" aria-label="Valitse&#x20;maa"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="size-5 text-white" aria-hidden="true">
  <path d="M15.6894 15.6967C16.9739 14.4122 17.7358 12.8592 17.9753 11.0305H14.6734C14.5791 13.2221 14.209 15.1306 13.5486 16.7489C13.4398 17.0029 13.3454 17.2061 13.2656 17.3512C14.1509 16.9666 14.9565 16.4224 15.6894 15.7039V15.6967ZM2.02468 11.0305C2.26416 12.8592 3.02613 14.4122 4.3106 15.6967C5.04354 16.4078 5.84905 16.9594 6.7344 17.344C6.65457 17.1988 6.5675 17.0029 6.45139 16.7417C5.79827 15.1234 5.4209 13.2221 5.32656 11.0232H2.02468V11.0305ZM4.3106 4.31785C3.02613 5.60232 2.26416 7.15529 2.02468 8.98403H5.32656C5.4209 6.79245 5.79101 4.88389 6.45139 3.2656C6.55298 3.01161 6.64731 2.80841 6.7344 2.65602C5.81277 3.06966 5.00726 3.62844 4.3106 4.31785ZM9.209 17.5617C9.51379 17.8882 9.78229 18.0479 10 18.0479C10.2177 18.0479 10.4862 17.881 10.7837 17.5544C11.0813 17.2279 11.3788 16.7199 11.6546 16.0305C12.2061 14.6589 12.5326 12.9971 12.627 11.0305H7.37301C7.46734 12.9608 7.78665 14.6299 8.34543 16.0305C8.62844 16.7199 8.91873 17.2279 9.21626 17.5617H9.209ZM10 1.96662H9.97096C9.73874 1.98113 9.48477 2.1553 9.19449 2.48186C8.90422 2.80842 8.62118 3.30914 8.33816 3.98403C7.78664 5.38461 7.46008 7.0537 7.36574 8.98403H12.6197C12.5254 7.01741 12.2061 5.35559 11.6473 3.98403L11.5602 3.80261C12.5036 4.03483 13.3599 4.46299 14.1219 5.1016C14.4122 6.28447 14.5864 7.5762 14.6589 8.97678H17.9608C17.7213 7.14804 16.9594 5.59507 15.6749 4.3106C14.9202 3.55588 14.0494 2.97533 13.0697 2.56894C12.09 2.16255 11.0595 1.96662 9.98549 1.96662H10ZM13.8244 0.769229C15.0435 1.26995 16.1176 1.99565 17.061 2.93904C18.0044 3.88244 18.73 4.96372 19.238 6.17562C19.746 7.38752 20 8.66473 20 10C20 11.3353 19.746 12.6125 19.238 13.8244C18.73 15.0363 18.0044 16.1176 17.061 17.061C16.1176 18.0044 15.0363 18.73 13.8244 19.238C12.6125 19.746 11.3353 20 10 20C8.66473 20 7.38752 19.746 6.17562 19.238C4.96372 18.73 3.88243 18.0044 2.93903 17.061C1.99564 16.1176 1.26995 15.0363 0.761965 13.8244C0.253982 12.6125 0 11.3353 0 10C0 8.66473 0.253982 7.38752 0.761965 6.17562C1.26995 4.96372 1.99564 3.88244 2.93903 2.93904C3.88243 1.99565 4.96372 1.26996 6.17562 0.761976C7.38752 0.253993 8.66473 0 10 0C11.3353 0 12.6125 0.253993 13.8244 0.761976V0.769229Z" fill="currentColor"/>
</svg>
 <span class="text-sm text-white pt-1">Finland</span></button></div></div></div></div></div></div> <script>
    'use strict';

    function amBrandsPopup() {
        let cached = false;

        const displayError = (error) => {
            console.error(error);
            typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
                [{
                    type: "error",
                    text: "Jokin\u0020meni\u0020pieleen.\u0020Yrit\u00E4\u0020uudelleen."
                }], 10000
            );
        };

        let letters = [
            "A","B","C","D",
            "E","F","G","H","I","J","K","L","M",
            "N","O","P","Q","R","S","T","U","V","W","X","Y","Z","#"
        ];

        return {
            hoverPanelActiveId: null,
            selectedLetter: null,
            items: [],
            letters: [],
            showCount: null,
            showFilter: null,
            showImages: true,
            showSearch: null,
            loading: false,
            label: 'Brands',
            isPopupEnabled: false,
            isTopMenuItemEnabled: false,
            cache: false,
            isMobile: false,

            initErrorMessages(errors) {
                const messages = [];
                for (let error in Object.keys(errors)) {
                    messages.push({type: 'error', text: errors[error].message});
                }
                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(messages, 10000);
            },

            chooseLetter(letter) {
                this.selectedLetter = this.selectedLetter === letter ? null : letter;
            },

            getQuery() {
                return "query BrandsPopupQuery { ambrandlist(\n                    showCount: true\n                    displayZero: true\n                  ) {\n                    all_letters,\n                    items {\n                      alt\n                      brandId\n                      cnt\n                      image\n                      img\n                      label\n                      letter\n                      url\n                    }\n                  }\n                  storeConfig {\n                    amshopby_brand_general_brands_brands_popup,\n                    amshopby_brand_general_menu_item_label,\n                    amshopby_brand_general_brands_page,\n                    amshopby_brand_general_topmenu_enabled,\n                    amshopby_brand_general_brands_popup_config {\n                      show_images,\n                      display_zero,\n                      filter_display_all,\n                      image_width,\n                      image_height,\n                      show_filter,\n                      show_count\n                    }\n                  } }"            },

            /**
             * Retrieve media url for given path
             *
             * @param path
             * @returns {string}
             */
            getMediaUrl(path) {
                const baseUrl = BASE_URL.replace('index.php/', '');
                if (path.includes('://')) {
                    return path;
                }

                let productImageUrl = `${baseUrl}${path}`;
                const regexDuplicateDomain = new RegExp(`^(https?:\/\/[^/]+).*\\1`);
                productImageUrl = productImageUrl.replace(regexDuplicateDomain, '$1');

                return productImageUrl.includes('/product/placeholder/')
                    ? productImageUrl.replace(/\/media(?=\/static)/, '')
                    : productImageUrl;
            },

            checkIsMobileResolution() {
                this.isMobile = window.matchMedia('(max-width: 1023px)').matches;
            },

            getBrandUrl(url){
                return BASE_URL + url;
            },

            init() {
                this.checkIsMobileResolution();

                                this.$watch('hoverPanelActiveId', (value) => {
                    if (value === 'am-brand') {
                        this.sendRequest();
                    }
                });
                 },

            /**
             * Get brands by letter
             *
             * @param result
             * @returns {{imageWidth: *, isTopMenuItemEnabled: *, showCount: *, displayAll: *, showFilter: *, showImages: *, isPopupEnabled: *, label: *, imageHeight: *, filterDisplayAll: *, brandsPage: *}}
             */
            settingsMapper(result) {
                const config = result.data.storeConfig?.amshopby_brand_general_brands_popup_config;
                return {
                    showImages: config.show_images,
                    showCount: config.show_count,
                    showFilter: config.show_filter,
                    imageWidth: config.image_width,
                    imageHeight: config.image_height,
                    filterDisplayAll: config.filter_display_all,
                    displayAll: config.display_zero,
                    isPopupEnabled: result.data.storeConfig?.amshopby_brand_general_brands_brands_popup,
                    label: result.data.storeConfig?.amshopby_brand_general_menu_item_label,
                    isTopMenuItemEnabled: result.data.storeConfig?.amshopby_brand_general_topmenu_enabled,
                    brandsPage: result.data.storeConfig?.amshopby_brand_general_brands_page,
                }
            },

            /**
             * Send request to graphql
             *
             * @returns {Promise<any>}
             */
            async sendRequest() {
                if (this.isMobile) {
                    return false;
                }

                this.loading = true;

                try {
                    if (cached) {
                        this.loading = false;
                        return false;
                    }

                    const response = await fetch('https://explore.omsystem.com/fi/fi/graphql', {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/json',
                            'Store': 'fi_FI'
                        },
                        credentials: 'include',
                        body: JSON.stringify({query: this.getQuery(), variables: {}})
                    });
                    const result = await response.json();

                    if (result?.errors) {
                        this.initErrorMessages(result.errors);
                        return;
                    }

                    const data = result.data?.ambrandlist;
                    const mapper = this.settingsMapper(result);

                    
                    Object.keys(mapper).forEach(config => {
                        this[config] = mapper[config];
                    });

                    if (!this.filterDisplayAll) {
                        letters = data.all_letters.split(',');
                    }

                    const items = data.items.map(brand => {
                        brand.image = brand.img
                            ? this.getMediaUrl(brand.img) : (brand.image ? this.getMediaUrl(brand.image) : null);
                        return brand;
                    });

                    this.letters = letters.map(letter => ({
                        letter,
                        brands: this.getLetterItems(items, letter),
                    }));

                    this.items = this.letters.filter(row => row.brands?.length > 0);

                    cached = true;
                } catch (error) {
                    displayError(error);
                } finally {
                    this.loading = false;
                }
            },

            /**
             * Get brands by letter
             *
             * @param items
             * @param letter
             * @returns {*}
             */
            getLetterItems(items, letter) {
                return items.filter(row => row.letter === letter);
            },

            convertHtml(text) {
                let textField = document.createElement("textarea");
                textField.innerHTML = text;
                return textField.value;
            }
        }
    }</script></div></footer> <script>
    function dataServicesShoppingCartContextData() {
        return {
            initContext() {
                const cartData = this.$event.detail.data.cart;
                let contextCartItems = [];

                if (cartData && cartData.items) {
                    cartData.items.forEach(function (item) {
                        contextCartItems.push({
                            id: item.item_id,
                            formattedPrice: parseFloat(item.product_price_value ? item.product_price_value : 0),
                            quantity: item.qty,
                            product: {
                                productType: item.product_type,
                                productId: item.product_id,
                                name: item.product_name,
                                sku: item.product_sku,
                                mainImageUrl: item.product_image.src
                            },
                            prices: {
                                price: {
                                    value: parseFloat(item.product_price_value ? item.product_price_value : 0)
                                }
                            }
                        });
                    });

                    magentoStorefrontEvents.context.setShoppingCart({
                        id: cartData.dsCartId,
                        totalQuantity: cartData.summary_count,
                        prices: {
                            subtotalExcludingTax: {
                                value: parseFloat(cartData.subtotalAmountExclTax ? cartData.subtotalAmountExclTax : 0)
                            },
                            subtotalIncludingTax: {
                                value: parseFloat(cartData.subtotalAmount ? cartData.subtotalAmount : 0)
                            }
                        },
                        items: contextCartItems,
                        possibleOnepageCheckout: cartData.possible_onepage_checkout,
                        giftMessageSelected : false,
                        giftWrappingSelected : false
                    });
                }
                
                localStorage.setItem("ds-cart", JSON.stringify({
                    cart: {
                        items: cartData.items
                    }
                }));

                window.dispatchEvent(new Event("shoppingCartContextSet"));
            }
        }
    }

    window.addEventListener('alpine:init', () => Alpine.data('dataServicesShoppingCartContextData', dataServicesShoppingCartContextData), {once: true});</script> <div x-data="dataServicesShoppingCartContextData" @private-content-loaded.window="initContext"></div><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Organization","@id":"https:\/\/explore.omsystem.com\/fi\/fi\/","url":"https:\/\/explore.omsystem.com\/fi\/fi\/","logo":"https:\/\/emea.explore.omsystem.com\/static\/version1779261903\/frontend\/OMDigital\/Hyva\/default\/images\/logo.svg","name":"OM SYSTEM | Olympus","description":"OM SYSTEM valmistaa suorituskykyisi\u00e4 kameroita, objektiiveja, kiikareita ja audiotuotteita. Luonto keski\u00f6ss\u00e4, OM SYSTEM tarjoaa kompakteja, kevyit\u00e4 ja s\u00e4\u00e4nkest\u00e4vi\u00e4 kameroita, jotka antavat kuvaajille mahdollisuuden tallentaa maailma selke\u00e4sti ja luotettavasti.","contactPoint":[{"@type":"ContactPoint","type":"Customer Service","contactType":"Customer Support","name":"Contact Us","id":"https:\/\/my.omsystem.com\/fi\/p\/contact-customer-support"}],"sameAs":["https:\/\/www.youtube.com\/@OMSYSTEMCameras","https:\/\/www.facebook.com\/omsystem.global\/","https:\/\/www.linkedin.com\/company\/om-digital-solutions-corporation","https:\/\/www.instagram.com\/OMSYSTEM.Cameras\/","https:\/\/x.com\/OMSYSTEMcameras"]}</script> <script nonce="aWZzMWwzYWNmMXlqdG94bGZsenV4eHpkZ2N1bmcza2Y="> (function () {
        var s = document.createElement('script');
        var h = document.querySelector('head') || document.body;
        s.src = 'https://acsbapp.com/apps/app/dist/js/app.js';
        s.async = true;
        s.onload = function () {
            acsbJS.init();
        };
        h.appendChild(s);
    })();</script> <script>
    'use strict';

    function initParentContainerProcessor() {
        const selectors = {
            labelContainer: '.amasty-label-container',
            galleryImg: '#gallery img:not(.amasty-label-image)'
        }

        return {
            /**
             * @param {AmlabelComponent} label
             * @return {void}
             */
            process: function (label) {
                this.moveLabelToParent(label);
                this.setParentStyles(label);
            },

            /**
             * @param {AmlabelComponent} label
             * @return {void}
             */
            moveLabelToParent: function (label) {
                const newParent = this.getNewParent(label);

                if (!newParent) {
                    return;
                }

                const wrapperElement = newParent.querySelector(label.wrapperClass);
                label.parent = newParent;

                
                if (wrapperElement && !wrapperElement.isSameNode(label.element)) {
                    this.insertLabelByPriority(label, wrapperElement);
                } else {
                    newParent.prepend(label.element);
                }
            },

            /**
             * @param {AmlabelComponent} label
             * @return {HTMLElement|undefined}
             */
            getNewParent: function (label) {
                
                let newParent = label.element.closest(label.config.path)
                    || this.findPreviousNodeExcludingScriptsAndDifferentLabels(label.element)?.querySelector(label.config.path)
                    || label.parent.querySelector(label.config.path);

                if (!newParent) {
                    newParent = this.fallbackParentSearch(label);
                }

                return newParent;
            },

            fallbackParentSearch: function (label) {
                switch (true) {
                    case label.config.move !== 1 && label.config.mode === 'prod':
                        
                        return document.querySelector(selectors.galleryImg)?.parentElement;
                    case label.config.mode === 'cart':
                        const potentialParent
                            = label.element.closest(':not([data-teleport-target]):not(.amlabel-position-wrapper)');

                        
                        return potentialParent?.querySelector(':scope > img')
                            ? potentialParent
                            : undefined;
                    default:
                        return undefined;
                }
            },

            /**
             * @param {HTMLElement} element
             * @return {HTMLElement|null}
             */
            findPreviousNodeExcludingScriptsAndDifferentLabels: function (element) {
                const previousElement = element?.previousElementSibling;
                if (!previousElement) {
                    return null;
                }

                if (previousElement?.tagName !== 'SCRIPT'
                    && !previousElement?.className?.includes?.('amlabel-position-wrapper')
                ) {
                    return previousElement;
                }

                return this.findPreviousNodeExcludingScriptsAndDifferentLabels(previousElement);
            },

            /**
             * @param {AmlabelComponent} label
             * @param {HTMLElement} wrapperElement
             * @return {void}
             */
            insertLabelByPriority: function (label, wrapperElement) {
                const labelContainers = wrapperElement.querySelectorAll(selectors.labelContainer);
                const currentLabelOrder = label.labelContainer.dataset.amlabelOrder;
                let insertAfterContainer = null;

                
                labelContainers.forEach(labelContainer => {
                    if (labelContainer.dataset.amlabelOrder < currentLabelOrder) {
                        insertAfterContainer = labelContainer;
                    }
                });

                insertAfterContainer === null
                    ? wrapperElement.prepend(label.labelContainer)
                    : insertAfterContainer.after(label.labelContainer);

                label.element.remove();
                label.element = wrapperElement;
            },

            /**
             * @param {AmlabelComponent} label
             * @return {void}
             */
            setParentStyles: function (label) {
                const parent = label.parent.hasAttribute('data-teleport-target')
                    ? label.parent.parentElement
                    : label.parent;

                /* required for child position absolute */
                !(parent.style.position === 'absolute') && (parent.style.position = 'relative');
                !parent.style.width && parent.classList.add('w-fit-content');
                !parent.style.marginLeft && parent.classList.add('ml-auto');
                !parent.style.marginRight && parent.classList.add('mr-auto');
            },
        }
    }</script> <script>
    'use strict';

    function initLabelItemProcessor() {
        /**
         * @typedef {Object} AmlabelComponent
         *
         * @property {HTMLElement} element Label wrapper element
         * @property {HTMLElement} parent Element where label should be placed
         * @property {boolean} initialized Is label initialized
         * @property {string} wrapperClass Dynamic class for label wrapper to place multiple labels properly by position
         * @property {HTMLElement} labelContainer Container for label text image and tooltip
         * @property {Config} config Label Configuration
         * @property {Object} parentContainerProcessor
         * @property {Object} labelItemProcessor
         */

        /**
         * @typedef {Object} AmLabelConfig
         *
         * @property {0|1} alignment Labels Alignment config value (0 - Horizontal| 1 - Vertical)
         * @property {number} label Label Id
         * @property {number} margin Margin between labels config value
         * @property {('cat'|'prod')} mode Label mode
         * @property {number} move
         * @property {number} order Label order
         * @property {string} path The css selector to which label should place
         * @property {string} position Label position
         * @property {string} product Product Id
         * @property {string} redirect_url
         * @property {string} size Label size
         * @property {{
         *     backgroundColor: string,
         *     color: string,
         *     content: string,
         *     status: 1|2|3
         * }} tooltip
         */

        return {
            /**
             * @param {AmlabelComponent} label
             * @return {void}
             */
            process: function(label) {
                this.setLabelSize(label);
                this.setLinkProps(label);
            },

            /**
             * @param {AmlabelComponent} label
             * @return {void}
             */
            setLabelSize: function (label) {
                if (!label.config.size) {
                    return;
                }

                label.labelContainer.style.width = label.parent.offsetWidth * label.config.size / 100 + 'px';
            },

            /**
             *
             * @param {Object} $event
             * @param {HTMLElement} tooltipNode
             */
            placeTooltip: function() {
                const labelNode = this.$event.target;
                const tooltipNode = document.getElementById(`label-tooltip-${this.$el.dataset.labelId}-${this.$el.dataset.productId}`);
                const labelNodeRect = labelNode.getBoundingClientRect();

                tooltipNode.style.bottom = (window.innerHeight - labelNodeRect.top)  + 'px';
                tooltipNode.style.left = (labelNodeRect.left + labelNode.offsetWidth / 2 ) + 'px';
            },

            /**
             * @param {AmlabelComponent} label
             * @return {void}
             */
            setLinkProps: function (label) {
                !!label.config.redirect_url && label.labelContainer.classList.add('-link', 'cursor-pointer');
            },

            /**
             * @param {Object} $event Click event
             * @param {string} redirectUrl
             */
            openLink: function($event, redirectUrl) {
                if (redirectUrl.length === 0) {
                    return;
                }

                $event.preventDefault();
                window.open(redirectUrl, '_blank');
            }
        }
    }</script>  <style> :root { --amlabel-margin-between: 0px; }</style> <script>
    (function () {
        'use strict';

        const observedEvent = 'amlabel-swatch-product-changed';
        const selectors = {
            swatchOptions: 'div[x-data^=initConfigurable][x-data*=Options]',
            addToCartFormOnListing: 'form.product_addtocart_form',
            galleryImage: '#gallery img:not(.amasty-label-image)',
            labelWrapper: '.amlabel-position-wrapper'
        }

        /**
         * @return {void}
         */
        const injectLabelObserver = function () {
            const swatches = document.querySelectorAll(selectors.swatchOptions);

            swatches.forEach(swatch => {
                const isListing = !!swatch.closest(selectors.addToCartFormOnListing);
                const injectedDispatch = `$dispatch('${observedEvent}', `
                    + `{productIndex: productIndex, element: $el, optionConfig: optionConfig, isListing: ${isListing ? 1 : 0}})`;

                let mutatedInitAttribute = swatch.getAttribute('x-init');
                mutatedInitAttribute += `; $watch('productIndex', (productIndex) => { ${injectedDispatch} });`;
                swatch.setAttribute('x-init', mutatedInitAttribute);
            });
        }

        /**
         * @param {{
         *  productIndex: number,
         *  element: HTMLElement,
         *  optionConfig: Object,
         *  isListing: 0|1
         * }} payload
         * @return {void}
         */
        const updateLabel = function ({detail: payload}) {
            const {productIndex, element, optionConfig, isListing} = payload;

            if (!productIndex) {
                return;
            }

            const reloadUrl = optionConfig.label_reload;
            const headers = {
                "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
            };
            const body = new URLSearchParams({
                product_ids: productIndex,
                in_product_list: isListing
            });
            const labelContainerSelector = isListing ? optionConfig.label_category : optionConfig.label_product;

            fetch(`${reloadUrl}?${body.toString()}`, {headers: headers, method: 'GET'}).then((response) => {
                if (response.ok) {
                    return response.json();
                }
            }).then((result) => {
                const labelHtml = result.labels && result.labels[productIndex];
                let labelContainer = findClosest(element, labelContainerSelector);

                
                if (labelContainer === null && isListing === 0) {
                    labelContainer = document.querySelector(selectors.galleryImage)?.parentElement;
                }

                if (!!labelContainer) {
                    !!labelHtml ? replaceLabels(labelContainer, labelHtml) : clearLabelWrapper(labelContainer);
                }
            }).catch((error) => {
                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
                    [{
                        type: 'error',
                        text: error
                    }],
                    5000
                );
            });
        }

        /**
         * @param {HTMLElement} labelContainer
         * @param {string} labelHtml
         * @return {void}
         */
        function replaceLabels(labelContainer, labelHtml) {
            const parser = new DOMParser();
            const doc = parser.parseFromString(labelHtml, 'text/html');
            const nodes = doc.querySelectorAll(selectors.labelWrapper);

            if (!nodes) {
                return;
            }

            clearLabelWrapper(labelContainer);
            labelContainer.append(...nodes);
        }

        /**
         * @param {HTMLElement} labelContainer
         * @return {void}
         */
        function clearLabelWrapper(labelContainer) {
            labelContainer.querySelectorAll(selectors.labelWrapper).forEach(wrapper => wrapper.remove());
        }

        /**
         * @param {HTMLElement} currentElement
         * @param {string} selector
         * @return {HTMLElement|null}
         */
        function findClosest(currentElement, selector) {
            
            const maxDepth = 3;
            let counter = 0;
            let closest = null;

            while (currentElement.parentNode && closest === null && counter < maxDepth) {
                ++counter;
                currentElement = currentElement.parentNode;
                closest = currentElement.querySelector(selector);
            }

            return closest;
        }

        injectLabelObserver();
        window.addEventListener(observedEvent, updateLabel);
    })();</script> <script>
    (function () {
        'use strict';

        const selectors = {
            body: '.catalog-product-view',
            productItem: 'product-item',
            productGalleryImage: '#gallery img'
        }

        window.addEventListener('alpine:init', () => {
            Alpine.directive('amintersect', (el, { expression }, { evaluate, cleanup }) => {
                const observer = new IntersectionObserver(entries => {
                    entries.forEach(entry => {
                        if (entry.isIntersecting) {
                            evaluate(expression);
                            observer.disconnect();
                        }
                    })
                },  { threshold: 0.5 });

                observer.observe(getElement());

                cleanup(() => {
                    observer.disconnect()
                });

                function getElement() {
                    return !!document.querySelector(selectors.body) ? getImageProductBlock(el) : getCategoryProductBlock(el);
                }

                function getCategoryProductBlock(el) {
                    if (el.previousElementSibling === null) {
                        return el;
                    }

                    if (!el.previousElementSibling.classList.contains(selectors.productItem)) {
                        return getCategoryProductBlock(el.previousElementSibling);
                    }

                    return el.previousElementSibling;
                }

                function getImageProductBlock(el) {
                    return el.parentNode.querySelector(selectors.productGalleryImage)?.parentNode ?? el.parentNode;
                }
            });
        });
    })();</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"WebSite","name":"OM SYSTEM Suomi","alternateName":"OM SYSTEM FI","url":"https:\/\/explore.omsystem.com\/fi\/fi\/","potentialAction":{"@type":"SearchAction","target":"https:\/\/explore.omsystem.com\/fi\/fi\/catalogsearch\/result\/?q={search_term_string}","query-input":"required name=search_term_string"}}</script> <section x-cloak x-data="initCountrySelectorModal" x-bind="eventListeners" x-show="isVisible" data-store-paths="&#x5B;&quot;&#x5C;&#x2F;nl&#x5C;&#x2F;nl&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;be&#x5C;&#x2F;nl&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;be&#x5C;&#x2F;fr&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;bg&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;es&#x5C;&#x2F;es&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;ie&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;it&#x5C;&#x2F;it&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;at&#x5C;&#x2F;de&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;lv&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;lt&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;no&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;pt&#x5C;&#x2F;pt&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;pl&#x5C;&#x2F;pl&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;fr&#x5C;&#x2F;fr&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;se&#x5C;&#x2F;sv&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;de&#x5C;&#x2F;de&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;sk&#x5C;&#x2F;cs&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;fi&#x5C;&#x2F;fi&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;ch&#x5C;&#x2F;fr&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;ch&#x5C;&#x2F;de&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;dk&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;cz&#x5C;&#x2F;cs&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;hu&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;ee&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;gb&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;ca&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;ca&#x5C;&#x2F;fr&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;la&#x5C;&#x2F;es&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;us&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;au&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;hk&#x5C;&#x2F;zh&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;in&#x5C;&#x2F;en&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;tw&#x5C;&#x2F;zh&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;th&#x5C;&#x2F;th&#x5C;&#x2F;&quot;,&quot;&#x5C;&#x2F;c&#x5C;&#x2F;en&#x5C;&#x2F;&quot;&#x5D;" @keydown.escape.stop.prevent="close"><div role="dialog" aria-labelledby="country-selector-title" aria-modal="true" :aria-hidden="isNotVisible" x-show="isVisible" class="fixed inset-y-0 right-0 z-50 flex w-full max-w-[575px] h-full"><div class="backdrop" x-show="isVisible" 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="close" aria-label="Sulje&#x20;maan&#x20;valitsin"></div><div class="w-full relative shadow-2xl" x-show="isVisible" 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="drawerContent" role="region" :tabindex="isVisible ? 0 : -1" aria-label="Maan&#x20;valitsin"><div class="bg-white flex flex-col h-full max-h-screen shadow-xl w-full overflow-x-hidden overflow-y-auto"><div class="relative py-[11px] mt-2.5 mx-[15px] flex items-center justify-end"><button type="button" @click="close" class="p-1 hover:bg-transparent focus:bg-transparent border-none" aria-label="Sulje"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" role="img">
<path d="M19.09 1.986L11.531 9.545L19.09 17.104L17.104 19.09L9.545 11.531L1.987 19.09L0 17.103L7.559 9.544L0 1.986L1.986 0L9.545 7.559L17.104 0L19.09 1.986Z" fill="currentColor"/>
<title>cross</title></svg>
</button></div><div class="pt-5 px-[15px] pb-2.5 flex-1 flex flex-col gap-5 overflow-y-auto"><div class="flex flex-col gap-2.5"> <span class="text-base text-[15px]">Tarkastelet parhaillaan OM SYSTEM -verkkosivustoa alueelle:</span>   <div class="text-black flex items-center gap-2.5"><svg xmlns="http://www.w3.org/2000/svg" width="27" height="27" viewBox="0 0 20 20" fill="none" class="text-black" aria-hidden="true">
  <path d="M15.6894 15.6967C16.9739 14.4122 17.7358 12.8592 17.9753 11.0305H14.6734C14.5791 13.2221 14.209 15.1306 13.5486 16.7489C13.4398 17.0029 13.3454 17.2061 13.2656 17.3512C14.1509 16.9666 14.9565 16.4224 15.6894 15.7039V15.6967ZM2.02468 11.0305C2.26416 12.8592 3.02613 14.4122 4.3106 15.6967C5.04354 16.4078 5.84905 16.9594 6.7344 17.344C6.65457 17.1988 6.5675 17.0029 6.45139 16.7417C5.79827 15.1234 5.4209 13.2221 5.32656 11.0232H2.02468V11.0305ZM4.3106 4.31785C3.02613 5.60232 2.26416 7.15529 2.02468 8.98403H5.32656C5.4209 6.79245 5.79101 4.88389 6.45139 3.2656C6.55298 3.01161 6.64731 2.80841 6.7344 2.65602C5.81277 3.06966 5.00726 3.62844 4.3106 4.31785ZM9.209 17.5617C9.51379 17.8882 9.78229 18.0479 10 18.0479C10.2177 18.0479 10.4862 17.881 10.7837 17.5544C11.0813 17.2279 11.3788 16.7199 11.6546 16.0305C12.2061 14.6589 12.5326 12.9971 12.627 11.0305H7.37301C7.46734 12.9608 7.78665 14.6299 8.34543 16.0305C8.62844 16.7199 8.91873 17.2279 9.21626 17.5617H9.209ZM10 1.96662H9.97096C9.73874 1.98113 9.48477 2.1553 9.19449 2.48186C8.90422 2.80842 8.62118 3.30914 8.33816 3.98403C7.78664 5.38461 7.46008 7.0537 7.36574 8.98403H12.6197C12.5254 7.01741 12.2061 5.35559 11.6473 3.98403L11.5602 3.80261C12.5036 4.03483 13.3599 4.46299 14.1219 5.1016C14.4122 6.28447 14.5864 7.5762 14.6589 8.97678H17.9608C17.7213 7.14804 16.9594 5.59507 15.6749 4.3106C14.9202 3.55588 14.0494 2.97533 13.0697 2.56894C12.09 2.16255 11.0595 1.96662 9.98549 1.96662H10ZM13.8244 0.769229C15.0435 1.26995 16.1176 1.99565 17.061 2.93904C18.0044 3.88244 18.73 4.96372 19.238 6.17562C19.746 7.38752 20 8.66473 20 10C20 11.3353 19.746 12.6125 19.238 13.8244C18.73 15.0363 18.0044 16.1176 17.061 17.061C16.1176 18.0044 15.0363 18.73 13.8244 19.238C12.6125 19.746 11.3353 20 10 20C8.66473 20 7.38752 19.746 6.17562 19.238C4.96372 18.73 3.88243 18.0044 2.93903 17.061C1.99564 16.1176 1.26995 15.0363 0.761965 13.8244C0.253982 12.6125 0 11.3353 0 10C0 8.66473 0.253982 7.38752 0.761965 6.17562C1.26995 4.96372 1.99564 3.88244 2.93903 2.93904C3.88243 1.99565 4.96372 1.26996 6.17562 0.761976C7.38752 0.253993 8.66473 0 10 0C11.3353 0 12.6125 0.253993 13.8244 0.761976V0.769229Z" fill="currentColor"/>
</svg>
 <span class="font-bold text-xl">Suomi | suomi</span></div></div><div class="flex flex-col gap-5"> <p class="py-5 text-[28px] leading-[34px]">Valitse toinen sijainti tai kieli:</p>   <div x-data="{ isOpen: true }" class="flex flex-col" ><button @click="isOpen = !isOpen" class="flex justify-between gap-2.5 p-2.5 w-full items-center" ><span class="text-xl font-bold">Eurooppa</span> <div class="relative"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="3" viewBox="0 0 16 2" fill="currentColor" role="img">
    <g id="Group 273_5">
        <path id="Path 209_5" d="M16 0.0698242V1.93058L0 1.92992V0.0698242H16Z"/>
    </g>
<title>minus</title></svg>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="3" viewBox="0 0 16 2" fill="currentColor" class="absolute left-1/2 -translate-x-1/2 top-1/2 -translate-y-1/2 rotate-90 transition-transform" :class="{ &quot;rotate-90&quot;: !isOpen }" role="img">
    <g id="Group 273_6">
        <path id="Path 209_6" d="M16 0.0698242V1.93058L0 1.92992V0.0698242H16Z"/>
    </g>
<title>minus</title></svg>
</div></button> <div class="grid transition-[grid-template-rows] grid-rows-[1fr]" :class="{ 'grid-rows-[1fr]': isOpen, 'grid-rows-[0fr]': !isOpen }" ><div class="overflow-hidden"><div class="flex flex-col gap-2.5 px-2.5 pt-2.5"> <a href="/nl/nl" class="text-base font-normal" title="Alankomaat&#x20;&#x7C;&#x20;hollanti"  :href="resolveStoreUrl('/nl/nl')"  >Alankomaat | hollanti</a>  <a href="/be/nl" class="text-base font-normal" title="Belgia&#x20;&#x7C;&#x20;hollanti"  :href="resolveStoreUrl('/be/nl')"  >Belgia | hollanti</a>  <a href="/be/fr" class="text-base font-normal" title="Belgia&#x20;&#x7C;&#x20;ranska"  :href="resolveStoreUrl('/be/fr')"  >Belgia | ranska</a>  <a href="/bg/en" class="text-base font-normal" title="Bulgaria&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/bg/en')"  >Bulgaria | englanti</a>  <a href="/es/es" class="text-base font-normal" title="Espanja&#x20;&#x7C;&#x20;espanja"  :href="resolveStoreUrl('/es/es')"  >Espanja | espanja</a>  <a href="/ie/en" class="text-base font-normal" title="Irlanti&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/ie/en')"  >Irlanti | englanti</a>  <a href="/it/it" class="text-base font-normal" title="Italia&#x20;&#x7C;&#x20;italia"  :href="resolveStoreUrl('/it/it')"  >Italia | italia</a>  <a href="/at/de" class="text-base font-normal" title="It&#xE4;valta&#x20;&#x7C;&#x20;saksa"  :href="resolveStoreUrl('/at/de')"  >Itävalta | saksa</a>  <a href="/lv/en" class="text-base font-normal" title="Latvia&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/lv/en')"  >Latvia | englanti</a>  <a href="/lt/en" class="text-base font-normal" title="Liettua&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/lt/en')"  >Liettua | englanti</a>  <a href="/no/en" class="text-base font-normal" title="Norja&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/no/en')"  >Norja | englanti</a>  <a href="/pt/pt" class="text-base font-normal" title="Portugali&#x20;&#x7C;&#x20;portugali"  :href="resolveStoreUrl('/pt/pt')"  >Portugali | portugali</a>  <a href="/pl/pl" class="text-base font-normal" title="Puola&#x20;&#x7C;&#x20;puola"  :href="resolveStoreUrl('/pl/pl')"  >Puola | puola</a>  <a href="/fr/fr" class="text-base font-normal" title="Ranska&#x20;&#x7C;&#x20;ranska"  :href="resolveStoreUrl('/fr/fr')"  >Ranska | ranska</a>  <a href="/se/sv" class="text-base font-normal" title="Ruotsi&#x20;&#x7C;&#x20;ruotsi"  :href="resolveStoreUrl('/se/sv')"  >Ruotsi | ruotsi</a>  <a href="/de/de" class="text-base font-normal" title="Saksa&#x20;&#x7C;&#x20;saksa"  :href="resolveStoreUrl('/de/de')"  >Saksa | saksa</a>  <a href="/sk/cs" class="text-base font-normal" title="Slovakian&#x20;tasavalta&#x20;&#x7C;&#x20;t&#x0161;ekki"  :href="resolveStoreUrl('/sk/cs')"  >Slovakian tasavalta | tšekki</a>  <a href="/ch/fr" class="text-base font-normal" title="Sveitsi&#x20;&#x7C;&#x20;ranska"  :href="resolveStoreUrl('/ch/fr')"  >Sveitsi | ranska</a>  <a href="/ch/de" class="text-base font-normal" title="Sveitsi&#x20;&#x7C;&#x20;saksa"  :href="resolveStoreUrl('/ch/de')"  >Sveitsi | saksa</a>  <a href="/dk/en" class="text-base font-normal" title="Tanska&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/dk/en')"  >Tanska | englanti</a>  <a href="/cz/cs" class="text-base font-normal" title="T&#x0161;ekin&#x20;tasavalta&#x20;&#x7C;&#x20;t&#x0161;ekki"  :href="resolveStoreUrl('/cz/cs')"  >Tšekin tasavalta | tšekki</a>  <a href="/hu/en" class="text-base font-normal" title="Unkari&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/hu/en')"  >Unkari | englanti</a>  <a href="/ee/en" class="text-base font-normal" title="Viro&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/ee/en')"  >Viro | englanti</a>  <a href="/gb/en" class="text-base font-normal" title="Yhdistynyt&#x20;kuningaskunta&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/gb/en')"  >Yhdistynyt kuningaskunta | englanti</a> </div></div></div></div>  <div x-data="{ isOpen: false }" class="flex flex-col" ><button @click="isOpen = !isOpen" class="flex justify-between gap-2.5 p-2.5 w-full items-center" ><span class="text-xl font-bold">Amerikka</span> <div class="relative"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="3" viewBox="0 0 16 2" fill="currentColor" role="img">
    <g id="Group 273_7">
        <path id="Path 209_7" d="M16 0.0698242V1.93058L0 1.92992V0.0698242H16Z"/>
    </g>
<title>minus</title></svg>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="3" viewBox="0 0 16 2" fill="currentColor" class="absolute left-1/2 -translate-x-1/2 top-1/2 -translate-y-1/2 rotate-90 transition-transform" :class="{ &quot;rotate-90&quot;: !isOpen }" role="img">
    <g id="Group 273_8">
        <path id="Path 209_8" d="M16 0.0698242V1.93058L0 1.92992V0.0698242H16Z"/>
    </g>
<title>minus</title></svg>
</div></button> <div class="grid transition-[grid-template-rows] grid-rows-[0fr]" :class="{ 'grid-rows-[1fr]': isOpen, 'grid-rows-[0fr]': !isOpen }" ><div class="overflow-hidden"><div class="flex flex-col gap-2.5 px-2.5 pt-2.5"> <a href="/ca/en" class="text-base font-normal" title="Kanada&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/ca/en')"  >Kanada | englanti</a>  <a href="/ca/fr" class="text-base font-normal" title="Kanada&#x20;&#x7C;&#x20;ranska"  :href="resolveStoreUrl('/ca/fr')"  >Kanada | ranska</a>  <a href="/la/es" class="text-base font-normal" title="Latinalainen&#x20;Amerikka&#x20;&#x7C;&#x20;espanja"  :href="resolveStoreUrl('/la/es')"  >Latinalainen Amerikka | espanja</a>  <a href="/us/en" class="text-base font-normal" title="Yhdysvallat&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/us/en')"  >Yhdysvallat | englanti</a> </div></div></div></div>  <div x-data="{ isOpen: false }" class="flex flex-col" ><button @click="isOpen = !isOpen" class="flex justify-between gap-2.5 p-2.5 w-full items-center" ><span class="text-xl font-bold">Aasia ja Tyynenmeren alue</span> <div class="relative"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="3" viewBox="0 0 16 2" fill="currentColor" role="img">
    <g id="Group 273_9">
        <path id="Path 209_9" d="M16 0.0698242V1.93058L0 1.92992V0.0698242H16Z"/>
    </g>
<title>minus</title></svg>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="3" viewBox="0 0 16 2" fill="currentColor" class="absolute left-1/2 -translate-x-1/2 top-1/2 -translate-y-1/2 rotate-90 transition-transform" :class="{ &quot;rotate-90&quot;: !isOpen }" role="img">
    <g id="Group 273_10">
        <path id="Path 209_10" d="M16 0.0698242V1.93058L0 1.92992V0.0698242H16Z"/>
    </g>
<title>minus</title></svg>
</div></button> <div class="grid transition-[grid-template-rows] grid-rows-[0fr]" :class="{ 'grid-rows-[1fr]': isOpen, 'grid-rows-[0fr]': !isOpen }" ><div class="overflow-hidden"><div class="flex flex-col gap-2.5 px-2.5 pt-2.5"> <a href="/au/en" class="text-base font-normal" title="Australia&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/au/en')"  >Australia | englanti</a>  <a href="/hk/zh" class="text-base font-normal" title="Hongkong&#x20;&#x7C;&#x20;Perinteinen&#x20;kiina"  :href="resolveStoreUrl('/hk/zh')"  >Hongkong | Perinteinen kiina</a>  <a href="https://doss.co.id/" class="text-base font-normal" title="Indonesia&#x20;&#x7C;&#x20;englanti"  >Indonesia | englanti</a>  <a href="/in/en" class="text-base font-normal" title="Intia&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/in/en')"  >Intia | englanti</a>  <a href="https://omdworldimaging.com/" class="text-base font-normal" title="Malesia&#x20;&#x7C;&#x20;englanti"  >Malesia | englanti</a>  <a href="https://www.master-d.com.sg/" class="text-base font-normal" title="Singapore&#x20;&#x7C;&#x20;englanti"  >Singapore | englanti</a>  <a href="/tw/zh" class="text-base font-normal" title="Taiwan&#x20;&#x7C;&#x20;perinteinen&#x20;kiina"  :href="resolveStoreUrl('/tw/zh')"  >Taiwan | perinteinen kiina</a>  <a href="/th/th" class="text-base font-normal" title="Thaimaa&#x20;&#x7C;&#x20;thai"  :href="resolveStoreUrl('/th/th')"  >Thaimaa | thai</a>  <a href="https://explore.omsystem.com/c/en/promotions-new-zealand" class="text-base font-normal" title="Uusi-Seelanti&#x20;&#x7C;&#x20;englanti"  >Uusi-Seelanti | englanti</a>  <a href="https://www.bhasia.com.vn/" class="text-base font-normal" title="Vietnam&#x20;&#x7C;&#x20;vietnam"  >Vietnam | vietnam</a> </div></div></div></div>  <div x-data="{ isOpen: false }" class="flex flex-col" ><button @click="isOpen = !isOpen" class="flex justify-between gap-2.5 p-2.5 w-full items-center" ><span class="text-xl font-bold">Maailmanlaajuinen</span> <div class="relative"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="3" viewBox="0 0 16 2" fill="currentColor" role="img">
    <g id="Group 273_11">
        <path id="Path 209_11" d="M16 0.0698242V1.93058L0 1.92992V0.0698242H16Z"/>
    </g>
<title>minus</title></svg>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="3" viewBox="0 0 16 2" fill="currentColor" class="absolute left-1/2 -translate-x-1/2 top-1/2 -translate-y-1/2 rotate-90 transition-transform" :class="{ &quot;rotate-90&quot;: !isOpen }" role="img">
    <g id="Group 273_12">
        <path id="Path 209_12" d="M16 0.0698242V1.93058L0 1.92992V0.0698242H16Z"/>
    </g>
<title>minus</title></svg>
</div></button> <div class="grid transition-[grid-template-rows] grid-rows-[0fr]" :class="{ 'grid-rows-[1fr]': isOpen, 'grid-rows-[0fr]': !isOpen }" ><div class="overflow-hidden"><div class="flex flex-col gap-2.5 px-2.5 pt-2.5"> <a href="/c/en" class="text-base font-normal" title="Maailmanlaajuinen&#x20;&#x7C;&#x20;englanti"  :href="resolveStoreUrl('/c/en')"  >Maailmanlaajuinen | englanti</a> </div></div></div></div> </div></div></div></div></div></section><script>
    function initCountrySelectorModal() {
        return {
            isVisible: false,
            currentRelativePath: '',

            init() {
                let storePaths = [];
                try {
                    storePaths = JSON.parse(this.$el.dataset.storePaths || '[]');
                } catch (e) {
                    storePaths = [];
                }
                storePaths.sort((a, b) => b.length - a.length);

                const currentPath = window.location.pathname;
                this.currentRelativePath = currentPath.replace(/^\//, '');

                for (const storePath of storePaths) {
                    if (currentPath.startsWith(storePath)) {
                        this.currentRelativePath = currentPath.substring(storePath.length);
                        break;
                    }
                }
            },

            resolveStoreUrl(baseUrl) {
                const targetBase = baseUrl.endsWith('/') ? baseUrl : baseUrl + '/';
                return targetBase + this.currentRelativePath + window.location.search;
            },

            isNotVisible() {
                return !this.isVisible;
            },

            isMobile() {
                return /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
            },

            getScrollbarWidth() {
                return this.isMobile() ? 0 : window.innerWidth - document.documentElement.clientWidth;
            },

            scrollLock(use) {
                if (use) {
                    const scrollbarWidth = this.getScrollbarWidth();
                    const scrollbarStyle = document.createElement('style');
                    scrollbarStyle.setAttribute('id', 'country-selector-scrollbar-style');
                    scrollbarStyle.textContent = 'body { overflow: hidden !important; scrollbar-gutter: none; } body::-webkit-scrollbar { display: none; }';
                    document.body.classList.add('overflow-hidden');
                    document.body.style.paddingRight = scrollbarWidth + 'px';
                    document.head.appendChild(scrollbarStyle);
                } else {
                    const scrollbarStyle = document.getElementById('country-selector-scrollbar-style');
                    document.body.classList.remove('overflow-hidden');
                    document.body.style.paddingRight = '';
                    if (scrollbarStyle) {
                        scrollbarStyle.remove();
                    }
                }
            },

            open() {
                this.isVisible = true;
                this.scrollLock(true);
                this.$nextTick(() => {
                    this.$refs && this.$refs.drawerContent && hyva.trapFocus(this.$refs.drawerContent);
                });
            },

            close() {
                this.$refs && this.$refs.drawerContent && hyva.releaseFocus(this.$refs.drawerContent);
                this.isVisible = false;
                this.scrollLock(false);
            },

            eventListeners: {
                ['@country-selector-overlay.window']() {
                    this.open();
                },
                ['@keydown.window.escape']() {
                    if (!this.isVisible) return;
                    this.close();
                }
            }
        };
    }

    window.addEventListener(
        'alpine:init',
        () => Alpine.data('initCountrySelectorModal', initCountrySelectorModal),
        { once: true }
    );</script>   <script>
    (() => {
        
        function dialog_default(Alpine) {
            Alpine.directive("htmldialog", fylgjaAlpineDialog);
            function fylgjaAlpineDialog(el, { expression, modifiers }, { evaluateLater, cleanup }) {
            const evaluate = expression.length ? evaluateLater(expression) : () => {};
            const canEvaluate = expression.length > 0;
            const lockPageScroll = modifiers.includes("noscroll");
            const closeBy = el.getAttribute("closeby") || modifierValue(modifiers, "closeby", "closerequest");
            el.style.display = null;
            el.style.length === 0 && el.removeAttribute("style");
            if (el._x_isShown) {
                open();
            }
            const closeBySupported = (() => {
                return "closedBy" in HTMLDialogElement.prototype;
            })();
            function scrollLock(use = true) {
                document.body.style.overflow = use ? "hidden" : "";
            }
            function dialogSubmit(event) {
                if (event.target.getAttribute("method") === "dialog" || event.submitter?.getAttribute("formmethod") === "dialog") {
                event.preventDefault();
                evaluate();
                }
            }
            function escapeDialog(event) {
                if (event.key !== "Escape") return;
                event.preventDefault();
                if (closeBy === "none") return;
                evaluate();
            }
            function handleCloseByEvent(event) {
                if (event.target !== el) return;
                const rect = el.getBoundingClientRect();
                const isInDialog = rect.top <= event.clientY && event.clientY <= rect.top + rect.height && rect.left <= event.clientX && event.clientX <= rect.left + rect.width;
                if (!isInDialog) {
                if (closeBy === "any") {
                    if (closeBySupported) {
                    event.preventDefault();
                    }
                    evaluate();
                }
                }
            }
            function handleCloseEvent() {
                evaluate();
            }
            function open() {
                if (el.hasAttribute("open")) return;
                el.showModal();
                scrollLock(lockPageScroll);
            }
            function close() {
                if (!el.hasAttribute("open")) return;
                el.close();
                scrollLock(false);
            }
            el._x_doShow = () => open();
            el._x_doHide = () => close();
            el.addEventListener("keydown", escapeDialog);
            el.addEventListener("submit", dialogSubmit);
            el.addEventListener("click", handleCloseByEvent);
            el.addEventListener("cancel", handleCloseEvent);
            cleanup(() => {
                el.removeEventListener("keydown", escapeDialog);
                el.removeEventListener("submit", dialogSubmit);
                el.removeEventListener("click", handleCloseByEvent);
                el.removeEventListener("cancel", handleCloseEvent);
                scrollLock(false);
            });
            }
        }
        function modifierValue(modifiers, key, fallback) {
            if (modifiers.indexOf(key) === -1) return fallback;
            const rawValue = modifiers[modifiers.indexOf(key) + 1];
            if (!rawValue) return fallback;
            if (key === "closeby") {
            const allowedValues = ["auto", "none", "closerequest", "any"];
            const options = allowedValues.join(", ");
            if (!allowedValues.includes(rawValue)) {
                console.warn(
                `"${rawValue}" is not one of the allowed values for closeby: ${options}`
                );
                return fallback;
            }
            }
            return rawValue;
        }

        
        document.addEventListener("alpine:init", () => {
            window.Alpine.plugin(dialog_default);
        });
    })();</script>  <script>
    (() => {
        function src_default(Alpine) {
            Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
                let evaluate = evaluateLater(expression);
                let options = {
                    rootMargin: getRootMargin(modifiers),
                    threshold: getThreshold(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 getThreshold(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({".product-slider section[x-data]":"intersect",".product-info [x-data]":"intersect","#filters-content [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]":"intersect","#notice-cookie-block":"idle"})) {
        document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`));
    }</script>   <script>
    (() => {
        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>
    function addAjaxLoader(button) {
        button.disabled = true;
    }

    function removeAjaxLoader(button) {
        button.disabled = false;
    }

    async function addAjaxCartForm(form, extraDelay = 500) {
        if (!form) {
            return;
        }

        event.preventDefault();

        if (form.hasAttribute('enctype') || !form.reportValidity()) {
            return form.submit();
        }

        const formData = new FormData(form);
        const button = form.querySelector('button:not([type=button], [type=reset])')
            ? form.querySelector('button:not([type=button], [type=reset])')
            : document.getElementById('product-addtocart-button');
        const stickyBarButton = document.getElementById('product-addtocart-sticky-bar-button');
        const formUenc = hyva.getUenc();
        const postUrl = event.target.action.replace('%25uenc%25', formUenc);

        let bodyUrl = new URLSearchParams(formData);
        bodyUrl.append('uenc', formUenc);
        addAjaxLoader(button);

        if (stickyBarButton) {
            addAjaxLoader(stickyBarButton);
        }

        try {
            const skipPopup = Boolean(formData.get('skip_popup')) ?? false;
            const requests = [
                fetch(postUrl, {
                    method: 'POST',
                    body: bodyUrl.toString(),
                    mode: 'cors',
                    credentials: 'include',
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
                        'X-Requested-With': 'XMLHttpRequest',
                    },
                }),
            ];

            if (!skipPopup) {
                requests.push(fetch(BASE_URL + `checkout/sidebar/getUpsellProducts/`, {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
                        'X-Requested-With': 'XMLHttpRequest',
                    },
                    body: bodyUrl.toString(),
                    credentials: 'include',
                }).then(res => res.json()));
            }

            const responses = await Promise.all(requests);
            const response = responses[0];
            const upsellProducts = !skipPopup ? responses[1] : null;

            if (!response.ok) {
                return form.submit();
            }

            if (response.redirected) {
                return window.location.href = response.url;
            }

            window.dispatchEvent(new CustomEvent('reload-customer-section-data'));

            if (!skipPopup && upsellProducts && upsellProducts.products.length) {
                const productFormData = {
                    productId: formData.get('product'),
                    options: {},
                };

                for (const formEntry of formData.entries()) {
                    if (!formEntry[0].startsWith('super_attribute')) {
                        continue;
                    }

                    const formEntryOption = { [formEntry[0].match(/\[(\d+)\]/)[1]]: formEntry[1] };
                    productFormData.options = { ...productFormData.options, ...formEntryOption };
                }

                productFormData.upsells_title = upsellProducts.title;
                productFormData.upsells_products = upsellProducts.products;

                window.dispatchEvent(new CustomEvent('open-ajax-cart', { detail: productFormData }));
            }
        } catch (err) {
            window.dispatchEvent(new CustomEvent('product-addtocart-error'));

            if (typeof window.dispatchMessages === 'undefined') {
                return;
            }

            window.dispatchMessages([{
                text: 'Ongelmia\u0020tuotteen\u0020lis\u00E4\u00E4misess\u00E4\u0020ostoskoriin.',
                type: 'error',
            }], 5000);
        } finally {
            setTimeout(() => {
                removeAjaxLoader(button)

                if (stickyBarButton) {
                    removeAjaxLoader(stickyBarButton);
                }
            }, extraDelay);
        }
    }

    document.addEventListener('submit', function (event) {
        if (!event.target.matches('#product_addtocart_form, .product_addtocart_form')) {
            return;
        }

        addAjaxCartForm(event.target, 500);
    });</script><section x-cloak x-show="cartItem" id="ajax-cart-drawer" x-data="initAjaxCartModal()" @open-ajax-cart.window="setNewCartData($event)"><div x-show="open" class="fixed inset-y-0 right-0 z-[70] flex w-full max-w-[960px] h-full"><div class="backdrop bg-black bg-opacity-80" 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="closeAjaxCartDrawer()" aria-label="Sulje&#x20;Upsell&#x20;Popup"></div><div class="w-full relative 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" role="region" :tabindex="open ? 0 : -1" aria-label="Upsell-tuotteet" x-ref="ajaxCartContent"><template x-if="cartItem"><div class="bg-pallas flex flex-col h-full max-h-screen shadow-xl w-full overflow-x-hidden overflow-y-auto"><header class="relative p-4 md:p-5"><div id="ajax-cart-title" class="flex items-center cursor-pointer mr-4 md:mr-0"><span @click="closeAjaxCartDrawer()" class="mr-4 md:mr-5" :class="{ 'rotate-180': !open, 'rotate-0': open }"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="transition-transform duration-300" alt="Expand icon" role="img">
<g id="icon/arrow-redirect_2">
<path id="Vector 19 (Stroke)_2" fill-rule="evenodd" clip-rule="evenodd" d="M3.82849 10L9.62138 15.7929L8.20717 17.2072L1.00006 10L8.20717 2.79294L9.62138 4.20715L3.82849 10Z" fill="black"/>
<path id="Vector 20 (Stroke)_2" fill-rule="evenodd" clip-rule="evenodd" d="M19 11L3 11L3 9L19 9L19 11Z" fill="black"/>
</g>
<title>redirect</title></svg>
</span> <span class="text-caption-bold w-full text-center md:text-start">JATKA</span></div></header><div class="px-4 md:px-5 pt-5 md:pt-0"><div class="font-neue text-h3-sm md:text-h3 text-center">Hyvä valinta! Tuote lisätty ostoskoriin</div><div class="flex flex-wrap md-sm:flex-nowrap justify-between gap-5 md:gap-10 pt-5 pb-8 md:py-10"><div class="flex gap-4 md:gap-10 items-center w-full"><div class="shrink-0"><img class="w-[80px] h-[80px] object-cover object-center md:w-[108px] md:h-[108px]" loading="lazy" :src="cartItem.product_image.src" :width="cartItem.product_image.width" :height="cartItem.product_image.height" :alt="hyva.str('Product\u0020\u0022\u00251\u0022', cartItem.product_name)" ></div><div class="grow flex gap-2 md:gap-3 flex-col"><div class="text-h4-bold-sm md:text-h4-bold max-w-[504px] text-ellipsis line-clamp-3" x-html="cartItem.product_name"></div><template x-if="parseFloat(cartItem.regular_price) > parseFloat(cartItem.product_price_value)"><div class="flex gap-xxs height-[20px] items-end"><span class="line-through text-caption text-gray-medium" x-text="hyva.formatPrice(cartItem.regular_price)"></span> <span class="text-body-bold" x-text="hyva.formatPrice(cartItem.product_price_value)"></span></div></template><template x-if="!cartItem.regular_price || parseFloat(cartItem.regular_price) <= parseFloat(cartItem.product_price_value)"><span class="text-body-bold" x-text="hyva.formatPrice(cartItem.product_price_value)"></span></template></div></div><div class="flex flex-col gap-3 w-full md-sm:max-w-[228px] items-center"><a href="https://explore.omsystem.com/fi/fi/checkout/" @click.prevent.stop="closeAjaxCartDrawer(); $dispatch('toggle-authentication', { url: 'https://explore.omsystem.com/fi/fi/checkout/' });" class="btn btn-primary transition-all duration-300 px-8 py-4 h-auto w-full border-none">Kassalle nyt</a> <a href="https://explore.omsystem.com/fi/fi/checkout/cart/" @click.prevent.stop="closeAjaxCartDrawer(); $dispatch('toggle-authentication', { url: 'https://explore.omsystem.com/fi/fi/checkout/cart/' });" class="btn btn-tritical-reversed transition-all duration-300 px-8 py-3.5 h-auto w-full btn-size-lg shadow-none leading-[16px]">Näytä ja muokkaa ostoskoria</a></div></div></div><div class="h-full bg-gray-light-50 px-4 pt-8 pb-16 md:px-5 lg:p-10 relative"><div class="font-neue text-h3-sm md:text-h3 text-center" x-html="upsellTitle"></div><!-- Upsell Slider --><div class="glider-contain py-5"><div class="glider add-to-cart-upsell" x-ref="upsellSlider"></div><div class="absolute top-[35%] flex items-center z-10 -left-3 md:-left-5"><button x-ref="addToCartPrevBtn" aria-label="Edellinen" class="glider-prev-upsell p-[10px] bg-gray-light-25 border-none group" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="text-black group-[.disabled]:text-gray-medium" width="20" height="20" role="img">
  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
<title>chevron-left</title></svg>
</button></div><div class="absolute top-[35%] flex items-center z-10 -right-3 md:-right-5"><button x-ref="addToCartNextBtn" aria-label="Seuraava" class="glider-next-upsell p-[10px] bg-gray-light-25 border-none group" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="text-black group-[.disabled]:text-gray-medium" width="20" height="20" role="img">
  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
<title>chevron-right</title></svg>
</button></div></div><!-- Slide Indicators --><div x-ref="addToCartUpsellDots" class="dots-container-upsell flex justify-center gap-[10px]"></div></div></div></template></div></div></section><script>
    function initAjaxCartModal() {
        return {
            open: false,
            cart: {},
            cartItem: null,
            upsellTitle: null,
            upsellItems: [],
            glider: null,
            sortObjectByNumberKey(obj) {
                let keys = Object.keys(obj).map(Number).sort((a, b) => a - b);
                let sortedObj = {};
                keys.forEach(key => sortedObj[key] = obj[key]);

                return sortedObj;
            },
            setNewCartData(event) {
                const productData = event.detail;
                window.addEventListener('private-content-loaded', (event) => {
                    const cartData = event.detail.data && event.detail.data.cart;

                    if (!cartData) {
                        return;
                    }

                    this.cart = cartData;

                    if (!productData) {
                        return;
                    }

                    this.upsellTitle = productData.upsells_title;
                    this.upsellItems = productData.upsells_products;

                    this.getCurrentProductFromCart(productData);
                    this.openAjaxCartDrawer();
                }, { once: true });
            },
            getCurrentProductFromCart(productData) {
                if (!this.cart.items) {
                    return;
                }

                this.cartItem = this.cart.items.filter((item) => {
                    if (item.product_id !== productData.productId) {
                        return;
                    }

                    if (item.product_type !== 'configurable') {
                        return item;
                    }

                    let cartItemOptions = {};
                    for (const option of item.options) {
                        const filterOptions = { [option.option_id]: option.option_value };
                        cartItemOptions = { ...cartItemOptions, ...filterOptions };
                    }

                    const cartItemOptionsCompare = JSON.stringify(this.sortObjectByNumberKey(cartItemOptions));
                    const productDataOptionsCompare = JSON.stringify(this.sortObjectByNumberKey(productData.options));

                    if (cartItemOptionsCompare === productDataOptionsCompare) {
                        return item;
                    }
                });

                if (this.cartItem > 1) {
                    this.cartItem = this.cartItem.slice(0, 1);
                }

                this.cartItem = this.cartItem[0];
            },
            renderSlides() {
                this.$refs.upsellSlider.innerHTML = '';
                this.upsellItems.forEach(product => {
                    const div = document.createElement('div');
                    div.classList.add('group', 'bg-pallas', 'slider-product-item', 'flex', 'flex-col', 'w-full', 'max-w-none');

                    div.innerHTML = `
                        <a href="${'https\u003A\u002F\u002Fexplore.omsystem.com\u002Ffi\u002Ffi\u002F' + product.url_key}"
                           title="${product.name}" class="px-4 pt-4 md:px-5 md:pt-5 h-[194px]" tabindex="-1">
                            <div class="relative">
                                <img class="h-[174px] lg:min-w-[174px] mx-auto object-contain object-center opacity-100 lg:group-hover:opacity-0 relative lg:absolute top-0 transition-opacity duration-700"
                                     src="${product.image}" alt="${product.name}" loading="lazy"/>
                                <img class="h-[174px] lg:min-w-[174px] mx-auto object-contain object-center opacity-0 lg:group-hover:opacity-100 absolute top-0 transition-opacity duration-700"
                                     src="${product.product_column_image}" alt="${product.name}" loading="lazy"/></div></a>
                        <div class="flex flex-col justify-between grow gap-3 md:gap-4 p-4 md:p-5">
                            <div class="items-center justify-center text-start product-item-link block">
                                <a class="product-item-link block min-h-[72px]"
                                   href="${' https\u003A\u002F\u002Fexplore.omsystem.com\u002Ffi\u002Ffi\u002F' + product.url_key}">
                                    <span class="text-primary-darker font-bold text-body-bold overflow-hidden text-ellipsis line-clamp-3">
                                        ${product.name}</span></a></div>
                            <div class="flex flex-col gap-3 md:gap-4">
                                <div class="text-xl text-primary-darker font-extrabold flex flex-col gap-2 md:gap-3">
                                    <template x-if="${parseFloat(product.final_price)} !== ${parseFloat(product.price)}">
                                        <div class="price-box price-final_price">
                                            <span class="mt-[3px] inline-block line-through text-caption text-gray-600"
                                                  x-html="hyva.formatPrice(${product.price})"></span>
                                            <span class="text-body-bold"
                                                  x-html="hyva.formatPrice(${product.final_price})"></span></div></template>
                                    <template x-if="${parseFloat(product.final_price)} === ${parseFloat(product.price)}">
                                        <div class="price-box price-final_price">
                                            <span class="text-body-bold"
                                                  x-html="hyva.formatPrice(${product.final_price})"></span></div></template></div>
                                <form data-role="tocart-form" class="product_addtocart_form"
                                      action="https://explore.omsystem.com/fi/fi/checkout/cart/add/" method="post">
                                    <input type="hidden" name="form_key" :value="hyva.getFormKey()"/>
                                    <input type="hidden" name="product" :value="${product.id}">
                                    <input type="hidden" name="skip_popup" value="1">
                                    <button type="submit"
                                            class="w-full btn btn-secondary transition-all duration-300 focus:bg-black hover:!bg-white hover:!text-black hover:shadow-none hover:border-2 focus:text-pallas">
                                        Lisää ostoskoriin</button></form></div></div>
                    `;

                    
                    this.$refs.upsellSlider.appendChild(div);
                    Alpine.initTree(this.$refs.upsellSlider);
                });
            },
            openAjaxCartDrawer() {
                if (!this.cartItem) {
                    return;
                }

                this.open = true;
                this.scrollLock(true);
                this.$nextTick(() => {
                    if (typeof Glider === 'undefined') {
                        addGliderJSScript(() => this.openAjaxCartDrawer());
                        return;
                    }

                    if (!this.glider) {
                        this.renderSlides();

                        this.glider = new Glider(this.$refs.upsellSlider, {
                            slidesToShow: '1.5',
                            slidesToScroll: 1,
                            draggable: false,
                            dots: this.$refs.addToCartUpsellDots,
                            arrows: {
                                prev: this.$refs.addToCartPrevBtn,
                                next: this.$refs.addToCartNextBtn,
                            },
                            responsive: [
                                {
                                    breakpoint: 700,
                                    settings: {
                                        slidesToShow: 3,
                                        slidesToScroll: 3,
                                    },
                                },
                                {
                                    breakpoint: 1024,
                                    settings: {
                                        slidesToShow: 4,
                                        slidesToScroll: 4,
                                    },
                                },
                            ],
                        });

                        this.$refs.upsellSlider && Glider(this.$refs.upsellSlider).refresh();
                    }

                    setTimeout(() => {
                        window.dispatchEvent(new Event('resize'));
                    }, 100);
                });
            },
            closeAjaxCartDrawer() {
                this.open = false;
                this.scrollLock(false);
                if (this.glider) {
                    this.glider.scrollItem(0);
                }
            },
            isMobileDevice() {
                return /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
            },
            getScrollbarWidth() {
                return this.isMobileDevice() ? 0 : window.innerWidth - document.documentElement.clientWidth;
            },
            scrollLock(use = true) {
                if (use) {
                    const scrollbarWidth = this.getScrollbarWidth();
                    const scrollbarStyle = document.createElement('style');

                    
                    scrollbarStyle.setAttribute('id', 'scrollbar-style');
                    scrollbarStyle.textContent = `
                    body {
                        overflow: hidden !important;
                        scrollbar-gutter: none;

                        &::-webkit-scrollbar {
                            display: none;
                        }
                    }`;

                    document.body.classList.add('overflow-hidden');
                    document.body.style.paddingRight = scrollbarWidth + 'px';
                    document.head.appendChild(scrollbarStyle);
                } else {
                    document.body.classList.remove('overflow-hidden');
                    document.body.style.paddingRight = '';
                    const scrollbarStyle = document.getElementById('scrollbar-style');

                    if (scrollbarStyle) {
                        scrollbarStyle.remove();
                    }
                }
            },
        };
    }</script> <script>

(_ => {
    document.addEventListener('DOMContentLoaded', event => {
        
        if (!Alpine.version.startsWith('2')) {
            return;
        }

        const teleportDirective = (el, expression) => {
            let target = document.querySelector(expression)
            let clone = el.content.cloneNode(true).firstElementChild;

            target.appendChild(clone);
            setTimeout(() => {
                target.querySelectorAll('[x-data]')
                    .forEach(el => Alpine.initializeComponent(el));
            }, 0)
        };

        document.querySelectorAll('template').forEach(el => {
            if (!el.hasAttribute('x-teleport')) {
                return;
            }

            teleportDirective(el, el.getAttribute('x-teleport'));
        });

        document.querySelectorAll('[x-data]').forEach(el => {
            if (el.hasAttribute('x-init')) {
                return;
            }

            setTimeout(() => {
                Alpine.initializeComponent(el);
            }, 0);
        });
    });
})()</script> <script type="module"
        src="https://emea.explore.omsystem.com/static/version1779261903/base/Magento/base/default/Hyva_Theme/js/alpine3.min.js"
        defer
        crossorigin
></script> <script>
    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);

                 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>
    /* Custom code line below - resolve issues on iOS 16 */
    '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: "Ota LocalStorage käyttöön selaimessasi."
                    }]
                );
                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);

         window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data);

        function dispatchPrivateContent(data) {

            const privateContentEvent = new CustomEvent("private-content-loaded", {
                detail: {
                    data: window.processSectionDataBeforeDispatch(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.ok && response.json())
                .then(
                    data => {
                        if (data) {
                            try {
                                const browserStorage = hyva.getBrowserStorage();

                                
                                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);

                                
                                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);

                                
                                
                                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', 'mousemove', 'wheel', 'scroll', 'keydown']);</script> <script>
    let SnapSlider = class {
        constructor(el, {
            labelSepparator = 'of',
            autoPager,
            groupPager
        } = {}) {
            this.el = el;
            this.track = this.el.querySelector("[data-track]");
            if (!this.track) {
                console.warn(
                    "No Slider track defined, reverting back to CSS slider.\nPlease create a wrapper for your slides with the attribute data-track",
                    this.el
                );
                return;
            }
            this.initialLoad = true;
            this.slides = [];
            this.inViewObserver;
            this.mutationObserver;
            this.resizeObserver;
            this.pager = this.el.querySelector("[data-pager]");
            this.navBtns = Array.from(
                this.el.querySelectorAll("[data-next], [data-prev]")
            );
            this.slideLabelSepparator = this.el.dataset.slideLabelSepparator || labelSepparator;
            this.useAutoPager = autoPager || this.el.hasAttribute("data-auto-pager") || false;
            this.useGroupPager = groupPager || this.el.hasAttribute("data-group-pager") || false;
            this.sliderLabel = this.el.hasAttribute("aria-label") && this.el.getAttribute("aria-label").toLowerCase().trim().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
            this.sliderId = this.el.id || this.sliderLabel || "slider";
            this.markerIdName = "data-target-id";
            this.pagerClasses = this.el.dataset.pagerClass || "snap-pager";
            this.markerClasses = this.el.dataset.markerClass || "snap-marker";
            this.init();
        }
        init() {
            this.setupSlides();
            this.setupNav();
            if (this.useAutoPager) {
                this.createPager();
            } else {
                this.setupPager();
            }
            this.setupObservers();
            this.setupMutationObserver();
            this.setupResizeObserver();
            this.el.addEventListener("click", this.eventHandler.bind(this));
            this.el.addEventListener("keydown", this.eventHandler.bind(this));
        }
        destroy() {
            this.inViewObserver?.disconnect();
            this.mutationObserver?.disconnect();
            this.resizeObserver?.disconnect();
            this.el.removeEventListener("click", this.eventHandler.bind(this));
            this.el.removeEventListener("keydown", this.eventHandler.bind(this));
        }
        roundUpIfGreaterThan(number, min = 8) {
            const decimalPart = number - Math.floor(number);
            return decimalPart >= min ? Math.ceil(number) : Math.floor(number);
        }
        getInViewItems() {
            const inViewSlides = this.track.querySelectorAll("[data-in-view]");
            const firstInViewSlide = inViewSlides[0] || null;
            const lastInViewSlide = inViewSlides[inViewSlides.length - 1] || null;
            const isAtStart = firstInViewSlide === this.slides[0];
            const isAtEnd = lastInViewSlide === this.slides[this.slides.length - 1];
            return {
                inViewSlides,
                totalInViewSlides: inViewSlides.length,
                firstInViewSlide,
                lastInViewSlide,
                isAtStart,
                isAtEnd,
                hasNoOverflow: isAtStart && isAtEnd
            };
        }
        groupPagerMarkers() {
            if (this.slides.length === 0 || !this.pager || !this.useGroupPager) return;
            const totalVisibleSlides = this.roundUpIfGreaterThan(
                this.track.offsetWidth / this.slides[0].offsetWidth
            );
            const markers = Array.from(this.pager.querySelectorAll("a, button"));
            markers.forEach((marker, index) => {
                marker.style.display = index % totalVisibleSlides === 0 ? null : "none";
            });
        }
        handleInView(entries) {
            entries.forEach((entry) => {
                const marker = this.pager && (this.pager.querySelector(`[href="#${entry.target.id}"]`) || this.pager.querySelector(
                    `[${this.markerIdName}="${entry.target.id}"]`
                ));
                entry.target.toggleAttribute("data-in-view", entry.isIntersecting);
                entry.target.toggleAttribute("inert", !entry.isIntersecting);
                marker?.setAttribute("aria-current", entry.isIntersecting);
                marker?.setAttribute("tabindex", entry.isIntersecting ? "0" : "-1");
            });
            const {
                isAtStart,
                isAtEnd,
                hasNoOverflow
            } = this.getInViewItems();
            this.navBtns.forEach((btn) => {
                if (btn.hasAttribute("data-next")) {
                    btn.style.visibility = hasNoOverflow ? "hidden" : null;
                    isAtEnd ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
                }
                if (btn.hasAttribute("data-prev")) {
                    btn.style.visibility = hasNoOverflow ? "hidden" : null;
                    isAtStart ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
                }
            });
            if (this.pager) {
                this.pager.style.visibility = hasNoOverflow ? "hidden" : null;
            }
            if (!this.initialLoad) {
                this.el.dispatchEvent(
                    new CustomEvent("slideChange", {
                        detail: this.getInViewItems()
                    })
                );
            } else {
                this.initialLoad = false;
            }
            if (document.activeElement.parentElement.hasAttribute("data-pager")) {
                const activeItems = this.pager.querySelectorAll('[tabindex="0"]');
                if (activeItems.length) {
                    activeItems[0].focus({ preventScroll: true });
                }
            }
        }
        getSlides() {
            if (!this.track) return [];
            return Array.from(this.track.children).filter(
                (child) => child.tagName.toLowerCase() !== "template" && child.tagName.toLowerCase() !== "style" && child.tagName.toLowerCase() !== "script"
            );
        }
        refreshSlides() {
            this.initialLoad = true;
            this.slides = this.getSlides();
            this.setupSlides();
            if (this.useAutoPager) {
                this.createPager();
            } else {
                this.setupPager();
            }
            this.groupPagerMarkers();
            this.setupObservers();
        }
        setupSlides() {
            this.slides = this.getSlides();
            this.slides.forEach((slide, index) => {
                const totalSlides = this.slides.length;
                const currentSlide = index + 1;
                const existingLabel = slide.getAttribute("aria-label") || "";
                const isImage = slide.tagName.toLowerCase() === "img" || slide.tagName.toLowerCase() === "picture";
                const slideLabelTag = isImage ? "alt" : "aria-label";
                const hasAutoLabel = existingLabel.startsWith(
                    `${currentSlide} ${this.slideLabelSepparator} `
                );
                if (!slide.hasAttribute("id")) {
                    slide.setAttribute(
                        "id",
                        `${this.sliderId}-item-${currentSlide}`
                    );
                }
                if (!slide.hasAttribute(slideLabelTag) || slide.getAttribute(slideLabelTag) === "" || hasAutoLabel) {
                    slide.setAttribute(
                        slideLabelTag,
                        `${currentSlide} ${this.slideLabelSepparator} ${totalSlides}`
                    );
                }
                if (slide.tagName.toLowerCase() === "div" && !slide.hasAttribute("role")) {
                    slide.setAttribute("role", "group");
                }
                if (this.pager && !isImage) {
                    slide.setAttribute("role", "tabpanel");
                }
                if (slide.getAttribute("role") === "group") {
                    slide.setAttribute("aria-roledescription", "item");
                }
            });
            if (!this.el.hasAttribute("role") && this.el.tagName !== "SECTION") {
                this.el.setAttribute("role", "region");
            }
            if (!this.el.hasAttribute("aria-roledescription")) {
                this.el.setAttribute("aria-roledescription", "carousel");
            }
            this.track.setAttribute("tabindex", 0);
            this.track.setAttribute("aria-live", "polite");
        }
        setupNav() {
            this.navBtns.forEach((btn) => {
                btn.setAttribute("disabled", "");
                btn.removeAttribute("hidden");
                btn.classList.remove("invisible");
                btn.style.visibility = null;
            });
        }
        createPager() {
            const newPager = document.createElement("nav");
            newPager.setAttribute("data-pager", "");
            newPager.setAttribute("role", "tablist");
            newPager.classList.add(...this.pagerClasses.split(" "));
            this.slides.forEach((slide, index) => {
                const marker = document.createElement("button");
                const slideId = slide.id || `${this.sliderId}-item-${index + 1}`;
                marker.setAttribute(this.markerIdName, slideId);
                marker.classList.add(...this.markerClasses.split(" "));
                this.setupPagerMarker(marker, index);
                newPager.appendChild(marker);
                if (slide.tagName.toLowerCase() !== "img" && slide.tagName.toLowerCase() !== "picture") {
                    slide.removeAttribute("aria-roledescription");
                    slide.setAttribute("role", "tabpanel");
                }
            });
            if (this.pager) {
                this.pager.setAttribute("role", "tablist");
                this.pager.replaceChildren(...newPager.children);
            } else {
                this.track.after(newPager);
                this.pager = this.el.querySelector("[data-pager]");
            }
        }
        setupPager() {
            if (!this.pager) return;
            this.pager.setAttribute("role", "tablist");
            const items = Array.from(this.pager.querySelectorAll("a, button"));
            items.forEach((marker, index) => this.setupPagerMarker(marker, index));
        }
        setupPagerMarker(marker, index) {
            const markerId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName);
            const slideId = markerId || `${this.sliderId}-item-${index + 1}`;
            if (!markerId) {
                marker.setAttribute(this.markerIdName, slideId);
            }
            marker.setAttribute("role", "tab");
            marker.setAttribute("aria-controls", slideId);
            marker.setAttribute("aria-posinset", index + 1);
            marker.setAttribute("aria-setsize", this.slides.length);
            marker.setAttribute("tabindex", "-1");
            if (!marker.hasAttribute("aria-label")) {
                marker.setAttribute("aria-label", `Slide ${index + 1}`);
            }
        }
        setupObservers() {
            if (this.inViewObserver) {
                this.inViewObserver.disconnect();
            }
            this.inViewObserver = new IntersectionObserver(
                this.handleInView.bind(this), {
                    root: this.track,
                    threshold: 0.4
                }
            );
            this.slides.forEach((slide) => this.inViewObserver.observe(slide));
        }
        setupMutationObserver() {
            this.mutationObserver = new MutationObserver(
                this.refreshSlides.bind(this)
            );
            this.mutationObserver.observe(this.track, {
                childList: true,
                subtree: false
            });
        }
        setupResizeObserver() {
            this.resizeObserver = new ResizeObserver(
                this.groupPagerMarkers.bind(this)
            );
            this.resizeObserver.observe(this.el);
        }
        goToSlideDir(dir = "next") {
            const {
                firstInViewSlide,
                lastInViewSlide
            } = this.getInViewItems();
            const isPrev = dir === "prev";
            let targetSlide = isPrev ? firstInViewSlide?.previousElementSibling : lastInViewSlide?.nextElementSibling;
            if (!targetSlide) return;
            if (targetSlide.tagName.toLowerCase() === "template") {
                targetSlide = isPrev ? targetSlide?.previousElementSibling : targetSlide?.nextElementSibling;
            }
            targetSlide.scrollIntoView({ block: "nearest", inline: isPrev ? "end" : "start" });
        }
        pagerToSlide(event) {
            if (!event.target.closest("[data-pager]")) return;
            const marker = event.target.closest("a, button");
            if (!marker) return;
            event.preventDefault();
            const slideId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName);
            const targetSlide = this.track.querySelector(`#${slideId}`);
            targetSlide?.scrollIntoView({ block: "nearest", inline: "start" });
        }
        eventHandler(event) {
            const target = event.target.closest(
                "[data-next], [data-prev], [data-pager]"
            );
            if (!target) return;
            if (event.type === "click") {
                if (target.hasAttribute("data-next")) {
                    this.goToSlideDir("next");
                } else if (target.hasAttribute("data-prev")) {
                    this.goToSlideDir("prev");
                } else if (target.closest("[data-pager]")) {
                    this.pagerToSlide(event);
                }
            }
            if (event.type === "keydown" && target.closest("[data-pager]")) {
                if (event.key === "ArrowRight") {
                    this.goToSlideDir("next");
                } else if (event.key === "ArrowLeft") {
                    this.goToSlideDir("prev");
                }
            }
        }
    };

    (() => {
        function alpineSnapSlider(Alpine) {
            Alpine.directive("snap-slider", (el, {
                modifiers
            }, {
                cleanup
            }) => {
                const autoPager = modifiers.includes("auto-pager");
                const groupPager = modifiers.includes("group-pager");
                const slider = new SnapSlider(el, {
                    autoPager,
                    groupPager
                });
                cleanup(() => {
                    slider.destroy();
                });
            });
        }

        document.addEventListener("alpine:init", () => {
            window.Alpine.plugin(alpineSnapSlider);
        });
    })();</script> <!--JmXmbDvcsCpQ7oC74kGVzCZkc1oqfXy9--> <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 + '');
                        }
                    }
                    this.preselectQuerystringItems();
                    this.preselectLocationHashItems();
                });
            },
            productIndex: 0,
            productIndexForPrice: 0,
            optionIsActive(attributeId, optionId) {
                                return !!this.getAllowedAttributeOptions(attributeId).find(
                    option => option.id === optionId
                )
            },
            optionIsEnabled(attributeId, optionId) {
                                for (const productId in this.optionConfig.index) {
                    if (this.optionConfig.index[productId][attributeId] === optionId) {
                        return true;
                    }
                }
                return false;
            },
            findSimpleIndex() {
                                this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues);
                this.productIndexForPrice = this.findCheapestProductForPartialSelection(this.selectedValues);
            },
            calculateSimpleIndexForPartialSelection(selectedValues) {
                if (selectedValues.length === 0) return 0;
                return this.findProductIdsForPartialSelection(selectedValues)[0];
            },
            calculateSimpleIndexForFullSelection(selectedValues) {
                if (! this.isFullSelection(selectedValues)) return false;

                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;
                });
            },
            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] || []
            },
            getAllAttributeOptions(attributeId) {
                return (
                    this.optionConfig.attributes[attributeId] &&
                    this.optionConfig.attributes[attributeId].options
                ) || []
            },
            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.productIndexForPrice)) {
                    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.productIndexForPrice]) {
                    return this.optionConfig.optionPrices[this.productIndexForPrice].finalPrice.amount
                }
                return 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();

                const candidates = this.findProductIdsForPartialSelection(this.selectedValues);

                                window.dispatchEvent(
                    new CustomEvent(
                        'configurable-selection-changed',
                        {
                            detail: {
                                productId: this.productId,
                                optionId: attributeId,
                                value: value,
                                productIndex: this.productIndex,
                                selectedValues: this.selectedValues,
                                candidates: candidates,
                                skuCandidates: Object.values(candidates).map(id => this.optionConfig.sku?.[id] ?? null).filter(Boolean),
                            }
                        }
                    )
                );
            },
            calculateIsMinimalPrice() {
                return ! this.isFullSelection(this.selectedValues);
            },
            isFullSelection(selectedValues) {
                return Object.values(selectedValues).length === Object.keys(this.optionConfig.attributes).length;
            },
            updatePrices() {
                const value = this.optionConfig.optionPrices[this.productIndexForPrice] || 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 => {
                    const v = getLocationValue(attribute);
                    v && this.changeOption(attribute.id, v)
                });
            }
        }
    }
</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;
            },
            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: #fff 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;
            }
        }
    }
</script>
 <script>
    (function () {
        const modals = [];
        const excludedFromFocusTrapping = new Set();

        function trapFocusInNextModalWithOverlay() {
            for (let idx = modals.length -1; idx >= 0; idx--) {
                const nextOnStack = modals[idx];
                const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name];
                if (! isOverlayDisabled(nextDialogElement)) {
                    hyva.trapFocus(nextDialogElement);
                    break;
                }
            }
        }

        function focusables(dialogElement) {
            const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])';
            return Array.from(dialogElement.querySelectorAll(selector))
                .filter(el => !el.hasAttribute('disabled'));
        }

        function firstVisible(elements) {
            const a = Array.from(elements);
            for (let i = 0; i < a.length; i++) {
                if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i];
            }
            return null;
        }

        function isInViewport(element) {
            const rect = element && element.getBoundingClientRect();
            return rect &&
                rect.top >= 0 &&
                rect.left >= 0 &&
                rect.right <= window.innerWidth &&
                rect.bottom <= window.innerHeight;
        }

        function setFocusAfterTransition(dialogElement, duration) {
             const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]'));
            const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]'));
            next: for (let candidate of candidates) {
                for (let child of nested) {
                    if (child.contains(candidate)) continue next;
                }
                setTimeout(() => candidate.focus(), 50);
                break;
            }
            window.setTimeout(() => {
                const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) ||
                    focusables(dialogElement)[0] ||
                    null;
                focusElement && isInViewport(focusElement) && focusElement.focus();
            }, Math.max(1, duration));
        }

        function determineTrigger($refs, dialog, trigger) {
             if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) {
                return dialog.target;
            }
             if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) {
                return trigger.target;
            }
             if (typeof trigger === 'string') {
                try {
                    return $refs[trigger] || document.querySelector(trigger)
                } catch (e) {}
            }
             if (trigger instanceof Element) {
                return trigger;
            }

             return null;
        }

        function isOverlayDisabled(dialog) {
            return dialog && dialog.hasAttribute('x-no-overlay')
        }

        function areRemainingModalsWithoutOverlay(modals)
        {
            const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled);

            return overflowDisabled.length === modals.length;
        }

        window.hyva.modal = function(options = {}) {
             if (this.$el && this.$el.dataset && this.$el.dataset.options) {
                try {
                    options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}'));
                } catch (e) {
                    throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON');
                }
            }

            const config = Object.assign({
                dialog: 'dialog',  duration: 300,  transitionEnter: 'transition ease-out duration-300',
                transitionEnterStart: 'opacity-0',
                transitionEnterEnd: 'opacity-100',
                transitionLeave: 'transition ease-in duration-300',
                transitionLeaveStart: 'opacity-100',
                transitionLeaveEnd: 'opacity-0',
            }, options);
            let lastHide = 0;

            return {
                opened: {},
                show(dialog, trigger) {
                    const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger);
                    const name = typeof dialog === 'string' ? dialog : config.dialog;
                    const dialogElement = this.$refs[name];
                    if (! dialogElement) {
                         return;
                    }
                    const useOverlay = ! dialogElement.hasAttribute('x-no-overlay');

                    dialogElement.scrollTop = 0;

                     if (this.opened[name]) {
                        return;
                    }

                    if (focusTargetAfterHide) {
                        focusTargetAfterHide.setAttribute('aria-expanded', 'true');
                    }

                    this.opened[name] = true;
                    useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement));
                    setFocusAfterTransition(dialogElement, config.duration);

                    const frame = {name, instance: this, focusTarget: focusTargetAfterHide, time: Date.now()};

                    modals.push(frame);
                    if (useOverlay) {
                        document.body.classList.add('overflow-hidden');
                    }
                    return new Promise(resolve => frame.resolve = resolve);
                },
                cancel() {
                    this.hide(false);
                },
                ok() {
                    this.hide(true);
                },
                hide(value) {
                     if (Date.now() - lastHide < config.duration) {
                        return;
                    }
                    lastHide = Date.now();

                    const modal = modals.pop() || {};
                    if (! modal.instance) {
                        return;
                    }

                    const name = modal.name;
                    this.opened[name] = false;
                    hyva.releaseFocus(modal.instance.$refs[modal.name])
                    trapFocusInNextModalWithOverlay();

                    const nextFocusAfterHide = modal.focusTarget;
                    nextFocusAfterHide && setTimeout(() => {
                        nextFocusAfterHide.setAttribute('aria-expanded', 'false');
                        nextFocusAfterHide.focus()
                    }, config.duration);

                    if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) {
                        document.body.classList.remove('overflow-hidden');
                    }

                    modal.resolve(value);
                },
                overlay(dialog) {
                    dialog = this.$el.dataset.dialogRefName || dialog;
                    const name = typeof dialog === 'string' ? dialog : config.dialog;
                    return {
                        ['x-show']() {
                            return this.opened[name]
                        },
                        ['x-transition:enter']: config.transitionEnter,
                        ['x-transition:enter-start']: config.transitionEnterStart,
                        ['x-transition:enter-end']: config.transitionEnterEnd,
                        ['x-transition:leave']: config.transitionLeave,
                        ['x-transition:leave-start']: config.transitionLeaveStart,
                        ['x-transition:leave-end']: config.transitionLeaveEnd,
                        ['@hyva-modal-show.window'](event) {
                            event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
                        }
                    };
                },
                showDialogOnInit() {
                    const parent = this.$el.closest('[data-dialog-ref-name]');
                    if (parent && parent.dataset.dialogRefName) {
                        this.$dispatch('hyva-modal-show', {dialog: parent.dataset.dialogRefName})
                    }
                }
            };
        }

        window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1]

        window.hyva.modal.pop = function () {
            if (modals.length > 0) {
                const modal = modals[modals.length -1];
                modal.instance.hide();
            }
        }

        window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) {
            typeof selectors === 'string' || selectors instanceof String
                ? excludedFromFocusTrapping.add(selectors)
                : selectors.map(selector => excludedFromFocusTrapping.add(selector));
        }

        window.hyva.modal.eventListeners = {
            keydown: event => {
                if (event.key === 'Escape') {
                    window.hyva.modal.pop();
                }
            },
             click: event => {
                if (modals.length > 0) {
                    const modal = modals[modals.length -1];
                    const dialog = modal.instance.$refs[modal.name];
                    if (modal.time + 50 < Date.now() && 
                        ! isOverlayDisabled(dialog) && 
                        ! dialog.contains(event.target)) { 
                        modal.instance.hide();
                    }
                }
            }
        };

        document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown);

        document.addEventListener('click', window.hyva.modal.eventListeners.click);
    })();
    window.addEventListener('alpine:init', () => {
        Alpine.data('hyvaModal', window.hyva.modal);
    }, {once: true});</script> <script>
    'use strict';

    const grecaptchaV2LoadCallbacks = [];

    function executeRecaptchaLoadCallbacks () {
        while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) {
            const callback = grecaptchaV2LoadCallbacks.pop();
            typeof callback === 'string' ? window[callback]() : callback();
        }
    }

    (function() {
        const loadRecaptchaScript = (event) => {

            if (window.grecaptcha || !event.target.form) {
                return;
            }

            Array.from(document.querySelectorAll('button[data-recaptcha-btn]')).forEach((btn) => {
                btn.classList.toggle('loader-cover', true);
                btn.setAttribute('disabled', 'disabled');
            });

            const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks';
            const siteKey = '6LfS4acpAAAAABXLnUjpiYr_E7pO98O8lu1UTJGn';
            const script = document.createElement('script');
            script.type = 'text/javascript';
            script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`;
            script.async = true;
            document.head.appendChild(script);

            script.addEventListener('load', () => {
                Array.from(document.querySelectorAll('button[data-recaptcha-btn]')).forEach((btn) => {
                    btn.classList.toggle('loader-cover', false);
                    btn.removeAttribute('disabled');
                });
            });
        }

        window.forceLoadRecaptchaScript = (form) => {
            loadRecaptchaScript({target: {form: form || 'dummy'}});
            executeRecaptchaLoadCallbacks();
        };

        document.body.addEventListener('input', loadRecaptchaScript, { once: true });
        document.body.addEventListener('focus', loadRecaptchaScript, { once: true });

    }());</script> <script>
    function initAmBundlePackGallery() {
        return {
            "active": 0,
            "initialImages": [],
            "images": [],
            "isSelected" : false,
            "currentElement": false,
            "appendOnReceiveImages": false,
            receiveImages(images) {
                if (this.appendOnReceiveImages) {
                    const initialUrls = this.initialImages.map(image => image.full);
                    const newImages = images.filter(image => ! initialUrls.includes(image.full));
                    this.images = [].concat(this.initialImages, newImages);
                    this.setActive(newImages.length ? this.initialImages.length : 0);
                } else {
                    this.images = images;
                }
            },
            init() {
                this.appendOnReceiveImages = this.$el.dataset.appendOnReceiveImages;
                this.currentElement = this.$el;
                let active = this.images.findIndex(function(image) {
                    return image.isMain === true
                });
                if (active === -1) {
                    active = 0;
                }
                this.setActive(active);
            },
            setActive(index) {
                this.active = index;
            },
            resetGallery() {
                this.images = this.initialImages;
                this.setActive(0);
            },
            imageCaption() {
                return this.image.caption || this.$el.dataset.productName;
            },
            imageSrc() {
                return this.image.img;
            },
            typeLoading() {
                return this.active !== this.index ? 'lazy' : 'eager';
            },
            showImg() {
                return this.active === this.index;
            },
            eventListeners: {
                ['@update-gallery.window'](event) {
                    setTimeout(() => {
                        if (this.isSelected) {
                            this.receiveImages(event.detail);
                        }
                        this.isSelected = false;
                    }, 0)
                },
                ['@bundle-popup-gallery-option-selected.window'](event) {
                    let product = this.currentElement.closest('.amrelated-product-info');
                    let currentId = event.detail.getAttribute('id');
                    if (product.querySelector('#' + currentId)){
                        this.isSelected = true;
                    }
                },
                ['@reset-gallery.window'](event) {
                    this.resetGallery();
                }
            }
        }
    }

    window.addEventListener(
        'alpine:init',
        () => Alpine.data('initAmBundlePackGallery', initAmBundlePackGallery),
        { once: true }
    );</script> <script>
        function amBundlePackAddPopupData() {
            return {
                popupData: '',
                forms: false,
                formsData: '',
                popupWrapper: '',
                selectors: {
                    forms: '.amrelated-product-info form.info-container-form',
                    innerForm: 'form[id*="product_addtocart_form"]',
                    body: 'body',
                    productPageClass: 'catalog-product-view',
                    cartPageClass: 'checkout-cart-index',
                    popupWrapper: '[x-ref="bundlePopup"]',
                    hidePopupButtonClass: '.hide-bundle-popup',
                    swatchInputs: '.amrelated-product-info.configurable .product-option-value-input, .amrelated-product-info.configurable select'
                },

                init() {
                    this.popupData = JSON.parse(this.$el.dataset.config);
                    this.isOsnHyvaEnabled = Boolean(Number(this.$el.dataset.isOsnHyvaEnabled));
                    this.forms = this.$el.querySelectorAll(this.selectors.forms);
                    this.popupWrapper = this.$el.closest(this.selectors.popupWrapper);
                    this.$nextTick(() => {
                        this.$el.addEventListener('change', (event) => {
                            if (event.target.closest(this.selectors.swatchInputs)) {
                                window.dispatchEvent(new CustomEvent('bundle-popup-gallery-option-selected', { detail: event.target }));
                            }
                        });
                    })
                },

                serializeForm(form) {
                    const data = new FormData(form)
                    let array = [];
                    this._setInputsToArray(data, array);

                    if (this.isOsnHyvaEnabled) {
                        if (form.querySelector(this.selectors.innerForm)) {
                            const data = new FormData(form.querySelector(this.selectors.innerForm));
                            this._setInputsToArray(data, array);
                        }
                    }

                    return array;
                },

                _setInputsToArray(data, arrayToSet) {
                    for (let [key, value] of data) {
                        arrayToSet.push({
                            name: key,
                            value: value
                        });
                    }
                },

                getIsProductPage() {
                    return !!document.querySelector(this.selectors.body)
                        .classList.contains(this.selectors.productPageClass);
                },

                getIsCartPage() {
                    return !!document.querySelector(this.selectors.body)
                        .classList.contains(this.selectors.cartPageClass);
                },

                scrollToElement(el) {
                    el.scrollIntoView({
                        behavior: "smooth",
                        block: "start"
                    });
                },

                scrollToTop() {
                    window.scrollTo({ top: 0, behavior: 'smooth' });
                },

                validateProductForm(form) {
                    let flag = false;
                    let isValid = form.reportValidity();
                    if (isValid) {
                        flag = true;
                    } else {
                        this.scrollToElement(form);
                    }
                    return flag;
                },

                prepareData() {
                    const inCartResponse = this.popupData.productsInCart;
                    let data = false;
                    let serializedForms = [];
                    let formsData = '';
                    let isFormsValid = true;

                    this.forms.forEach((form) => {
                        if (this.isOsnHyvaEnabled) {
                            if (form.querySelector(this.selectors.innerForm)) {
                                if (!this.validateProductForm(form.querySelector(this.selectors.innerForm))) {
                                    isFormsValid = false;
                                    return false;
                                }
                            }
                        }

                        if (!this.validateProductForm(form)) {
                            isFormsValid = false;
                            return false;
                        }
                    });

                    if (isFormsValid) {
                        
                        this.forms.forEach((form) => {
                            serializedForms.push(this.serializeForm(form));
                        });

                        serializedForms.forEach((form) => {
                            formsData += 'amrelated_products_popup[]=';
                            form.forEach((fileld, index, currentForm) => {
                                formsData += fileld.name + '=' + fileld.value
                                    + (currentForm.length > (index + 1) ? encodeURIComponent('&') : '');
                            })
                            formsData += '&';
                        })

                        data = formsData;

                        
                        for (let productId in inCartResponse) {
                            data += 'products_in_cart[' + productId + '][qty]=' + inCartResponse[productId]['qty'] + '&';
                        }

                        data += 'ajax_cart=' + this.popupData.isAjaxCartEnabled;
                        data += '&form_key=' + hyva.getFormKey();
                        data += '&product_page=' + this.getIsProductPage();
                        data += '&pack_id=' + this.popupData.packId;
                    }

                    return data;
                },

                addToCart() {
                    const data = this.prepareData();
                    if (!data) {
                        return;
                    }
                    this.isLoading = true;
                    fetch(this.popupData.url, {
                        headers: {
                            "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                        },
                        body: new URLSearchParams(data),
                        method: "POST",
                        mode: "cors",
                        credentials: "include"
                    }).then(
                        response => response.json()
                    ).then((result) => {
                        if (result.backUrl) {
                            window.location.href = result.backUrl;
                        } else {
                            window.dispatchEvent(new CustomEvent('mostviewed-items-added'));
                            const ref = this.$el.closest('[x-ref]').getAttribute('x-ref');
                            if (ref) {
                                window.dispatchEvent(new CustomEvent('amrelated-modal-hide', {detail: ref}));
                            }
                        }
                    }).catch(() => {
                        dispatchMessages([{
                            type: "error",
                            text: "Jokin meni pieleen. Yritä myöhemmin uudelleen."
                        }], 2000);
                        const ref = this.$el.closest('[x-ref]').getAttribute('x-ref');
                        if (ref) {
                            window.dispatchEvent(new CustomEvent('amrelated-modal-hide', {detail: ref}));
                        }
                    }).finally(() => {
                        this.isLoading = false;
                        this.scrollToTop();
                    })
                }
            }
        }

        window.addEventListener(
            'alpine:init',
            () => Alpine.data('amBundlePackAddPopupData', amBundlePackAddPopupData),
            { once: true }
        );</script>        <script>
    function initAmBundlePackWishlist() {
        return {
            addToWishlist() {
                const productId = this.$el.dataset.productId;
                const postParams =                 {
                    action: BASE_URL + "wishlist/index/add/",
                        data: {
                    product: productId,
                        uenc: hyva.getUenc()
                }
                }
                 postParams.data['form_key'] = hyva.getFormKey();
                postParams.data['qty'] = document.getElementById(`qty[${productId}]`)
                    ? document.getElementById(`qty[${productId}]`).value || 1
                    : 1;

                let postData = Object.keys(postParams.data).map(key => {
                    return `${key}=${postParams.data[key]}`;
                }).join('&');

                
                
                Array.from(document.querySelectorAll(
                    '[name^=options], [name^=super_attribute], [name^=bundle_option], [name^=super_group], [name^=links]')
                ).map(input => {
                    if (input.type === "select-multiple") {
                        Array.from(input.selectedOptions).forEach(option => {
                            postData += `&${input.name}=${option.value}`
                        })
                    } else {
                        
                        if(!(['radio', 'checkbox', 'select'].includes(input.type) && !input.checked)) {
                            postData += `&${input.name}=${input.value}`
                        }
                    }
                });
                fetch(postParams.action, {
                    "headers": {
                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
                    },
                    "body": postData,
                    "method": "POST",
                    "mode": "cors",
                    "credentials": "include"
                }).then((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: "Tuotetta ei voitu lisätä toivelistalle."
                            }], 5000
                        );
                    }
                }).then((response) => {
                    if (!response) {
                        return;
                    }
                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
                        [{
                            type: (response.success) ? "success" : "error",
                            text: (response.success)
                                ? "Tuote on lisätty toivelistallesi."
                                : response.error_message
                        }], 5000
                    );
                    const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
                    window.dispatchEvent(reloadCustomerDataEvent);
                }).catch((error) => {
                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
                        [{
                            type: "error",
                            text: error
                        }], 5000
                    );
                });
            }
        }
    }
    window.addEventListener('alpine:init', () => Alpine.data('initAmBundlePackWishlist', initAmBundlePackWishlist), {once: true})</script>  <script>
        function initAmBundlePackCompareOnProductView() {
            return {
                addToCompare: function () {
                    const productId = 1;
                    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
                        );
                    });
                }
            };
        }
        window.addEventListener('alpine:init', () => Alpine.data('initAmBundlePackCompareOnProductView', initAmBundlePackCompareOnProductView), {once: true})</script>  <script>
    function initAmBundlePackCompareOnProductList() {
        return {
            addToCompare() {
                const productId = this.$el.dataset.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
                    );
                });
            }
        };
    }
    window.addEventListener('alpine:init', () => Alpine.data('initAmBundlePackCompareOnProductList', initAmBundlePackCompareOnProductList), {once: true});</script>  <script>
    'use strict';

    (function () {
        window.amLabels = {
            productLabelsUrl: 'amasty_label/ajax/label',
            /**
             * @param {Array} productIds
             * @return {Promise<any>}
             */
            getLabelsHtml: function (productIds) {
                const headers = {
                    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
                };
                const body = new URLSearchParams({
                    product_ids: productIds,
                    in_product_list: true
                });

                return fetch(BASE_URL + this.productLabelsUrl + '?' + body.toString(), {
                    headers: headers,
                    method: 'GET'
                }).then((response) => {
                    if (response.ok) {
                        return response.json();
                    }
                }).then((result) => {
                    return Object.values(result.labels);
                }).catch((error) => {
                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
                        [{
                            type: 'error',
                            text: error
                        }],
                        5000
                    );
                });
            }
        };
    })();</script> <script>
    'use strict';

    (function () {
        window.initAmRecentlyViewedLabels = window.initAmRecentlyViewedLabels || {
            selectors: {
                recentlyViewedContainer: '[x-data^=initRecentlyViewedProductsComponent]',
                productPhoto: '.product-item-photo'
            },
            recentlyViewedProductsKey: 'recently_viewed_products',

            /**
             * @return number[]
             */
            getProductIds: function () {
                const startIndex = '' === '' ? 0 : 1;

                return JSON.parse(hyva.getBrowserStorage().getItem(this.recentlyViewedProductsKey) ?? '[]')
                    .slice(startIndex)
                    .map((item) => item.id);
            },

            /**
             * @return {void}
             */
            mutationObserver: function () {
                const recentlyViewedContainers = document.querySelectorAll(this.selectors.recentlyViewedContainer);

                recentlyViewedContainers.forEach(recentlyViewedContainer => {
                    const mutationObserver = new MutationObserver((mutationsList, observer) => {
                        for(let mutation of mutationsList) {
                            if (mutation.type === 'childList') {
                                this.addLabels(recentlyViewedContainer, this.getProductIds());
                                observer.disconnect();
                            }
                        }
                    });

                    mutationObserver.observe(recentlyViewedContainer, {childList: true});
                })
            },

            /**
             * @param {HTMLElement} element
             * @param {Array} productIds
             * @return {void}
             */
            addLabels: function (element, productIds) {
                if (!productIds.length) {
                    return;
                }

                const productPhotos = element.querySelectorAll(this.selectors.productPhoto);

                window.amLabels.getLabelsHtml(productIds).then(
                    (result) => {
                        result.length && productPhotos?.forEach((productPhoto, index) => {
                            !!result[index] && this.appendLabel({
                                productPhoto: productPhoto,
                                labelHtml: result[index],
                                productId: productIds[index]
                            });
                        })
                    }
                );
            },

            /**
             * @param {{
             *  productContainer: Element,
             *  labelHtml: string,
             *  productId: number,
             * }} labelConfig
             * @return {void}
             */
            appendLabel: function (labelConfig) {
                const {productPhoto, labelHtml, productId} = labelConfig;
                const labelClass = 'am-label-product-id-' + productId;

                productPhoto.innerHTML += labelHtml;
                productPhoto.classList.add(labelClass);
                this.overrideParentLabelStyle(productPhoto);
                hyva.replaceDomElement(
                    '.' + labelClass,
                    productPhoto.outerHTML
                );
            },

            /**
             * @param {HTMLElement} productPhoto
             * @return {void}
             */
            overrideParentLabelStyle: function (productPhoto) {
                productPhoto.classList.add('!w-auto');
            }
        };

        window.initAmRecentlyViewedLabels.mutationObserver();
    })();</script> <script>
    'use strict';

    function initAmlabel() {
        return {
            element: null,
            parent: null,
            initialized: false,
            wrapperClass: '',
            labelContainer: null,
            config: '',
            parentContainerProcessor: initParentContainerProcessor(),
            labelItemProcessor: initLabelItemProcessor(),

            /**
             * @return {void}
             */
            init() {
                this.config = JSON.parse(this.$el.dataset.amlabelConfig);

                if (this.hasGliderParent(this.$el)) {
                    this.$el.removeAttribute('x-amintersect');
                }
            },

            /**
             * @return {void}
             */
            initLabel: function () {
                this.element = this.$el;
                this.labelContainer = this.$refs.amLabel;
                this.parent = this.$el.parentElement;
                this.wrapperClass = `.amlabel-position-${this.config.position}-${this.config.product}-${this.config.mode}`;
                if (this.hasGliderParent(this.$el)) {
                    this.render(this.$el);
                }
            },

            /**
             * @return {void}
             */
            render: function (el) {
                if (el) {
                    this.element = el;
                }

                if (this.element.dataset.amlabelObserved) {
                    return;
                }

                this.element.dataset.amlabelObserved = true;
                this.parentContainerProcessor.process(this);
                this.labelItemProcessor.process(this);
                this.initialized = true;
            },

            /**
             * @return {void}
             */
            resize: function () {
                this.config.size && this.labelItemProcessor.setLabelSize(this);
            },

            /**
             * @return {Object}
             */
            labelClasses() {
                return {
                    'top-0': this.config.position.includes('top'),
                    'top-0 bottom-0': this.config.position.includes('middle'),
                    'bottom-0': this.config.position.includes('bottom'),
                    'left-0': this.config.position.includes('left'),
                    'left-0 right-0': this.config.position.includes('center'),
                    'right-0': this.config.position.includes('right')
                }
            },

            /**
             * @return {void}
             */
            labelClick: function () {
                this.labelItemProcessor.openLink(this.$event, this.config.redirect_url);
            },

            /**
             * @param {Object} el
             * @return {boolean}
             */
            hasGliderParent: function (el) {
                return !!el.closest('[data-role="glider-content"]');
            }
        }
    }
    (() => {
        const initFn = () => Alpine.data('initAmlabel', initAmlabel);
        window.Alpine ? initFn() : window.addEventListener('alpine:init', initFn, {once: true})
    })()</script> <script>
    'use strict';

    let isAmlabelGliderLoad = false;

    window.addEventListener('glider-loaded', (e) => {
        if (isAmlabelGliderLoad) {
            return;
        }

        let gliderPrototype = Glider.prototype;
        let originalInit = gliderPrototype.init;
        let originalRemoveItem = gliderPrototype.removeItem;
        let originalAddItem = gliderPrototype.addItem;
        let originalUpdateControls = gliderPrototype.updateControls;

        document.querySelectorAll('.glider-track .amlabel-position-wrapper').forEach((el) => {
            el.classList.remove('glider-slide');
            el.removeAttribute('style');
        })

        gliderPrototype.init = function (refresh, paging) {
            let _ = this;
            let track = this.track;

            _.track = {
                children: Array.from(_.track.children).filter(
                    (el) => { return !el.classList.contains('amlabel-position-wrapper') }
                ),
                style: { width: '' }
            }
            originalInit.call(_, refresh, paging);
            track.style.width = _.track.style.width;
        };

        gliderPrototype.removeItem = function (index) {
            let _ = this;

            _.track = _.ele.querySelector('.glider-track');
            originalRemoveItem.call(_, index);
        }

        gliderPrototype.addItem = function (ele) {
            let _ = this;

            _.track = _.ele.querySelector('.glider-track');
            originalAddItem.call(_, ele);
        }

        gliderPrototype.updateControls = function (event) {
            let _ = this;

            _.slides = Array.from(_.slides).filter(
                (el) => { return !el.classList.contains('amlabel-position-wrapper') }
            );
            originalUpdateControls.call(_, event);
        }

        isAmlabelGliderLoad = true;
    })

    window.addEventListener('glider-loaded', (e) => {
        Glider(e.srcElement).refresh(true);
    })</script> <script>
    function updateBgHotspot(url, bgVar = false, el) {
        if (el.getAttribute('hotspot-processed') || !url) return;

        const displayedWidth = el.offsetWidth;
        const displayedHeight = el.offsetHeight;
        const isNewUrl = el.getAttribute('data-new-url');

        if (isNewUrl) {
            const newBackgroundUrl = url + `&w=${Math.round(displayedWidth)}&h=${Math.round(displayedHeight)}`;
            bgVar ? el.style.setProperty(bgVar, `url(${newBackgroundUrl})`) : el.style.backgroundImage = `url(${newBackgroundUrl})`;
            el.setAttribute('hotspot-processed', 'true');
        }
    }

    function updateImageHotspot(url, img) {
        if (img.getAttribute('hotspot-processed')) return;

        const renderWidth = img.naturalWidth;
        let displayedWidth = img.offsetWidth;
        let displayedHeight = img.offsetHeight;
        const isNewUrl = img.getAttribute('data-new-url');

        if (isNewUrl) {
            displayedHeight = displayedHeight / displayedWidth * renderWidth;
            displayedWidth = renderWidth;
            img.src = url + `&w=${Math.round(displayedWidth)}&h=${Math.round(displayedHeight)}`;
            img.setAttribute('hotspot-processed', 'true');
        }

    }

    function updateVideoPosterHotspot(url, video) {
        if (!url) return;
        if (video.getAttribute('hotspot-processed')) return;

        const renderWidth = video.videoWidth || video.offsetWidth;
        let displayedWidth = video.offsetWidth;
        let displayedHeight = video.offsetHeight;
        const isNewUrl = video.getAttribute('data-new-poster-url');

        if (isNewUrl) {
            displayedHeight = displayedHeight / displayedWidth * renderWidth;
            displayedWidth = renderWidth;
            video.poster = url + `&w=${Math.round(displayedWidth)}&h=${Math.round(displayedHeight)}`;
            video.setAttribute('hotspot-processed', 'true');
        }
    }</script> <script type="text/json" id="default-section-data">
    {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"AT":{"name":"It\u00e4valta","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Vorarlberg"},"95":{"code":"WI","name":"Wien"}}},"BE":{"name":"Belgia","regions":{"674":{"code":"VAN","name":"Antwerpen"},"675":{"code":"WBR","name":"Brabant wallon"},"676":{"code":"BRU","name":"Brussels-Capital Region"},"677":{"code":"WHT","name":"Hainaut"},"679":{"code":"WLG","name":"Li\u00e8ge"},"678":{"code":"VLI","name":"Limburg"},"680":{"code":"WLX","name":"Luxembourg"},"681":{"code":"WNA","name":"Namur"},"682":{"code":"VOV","name":"Oost-Vlaanderen"},"683":{"code":"VBR","name":"Vlaams-Brabant"},"684":{"code":"VWV","name":"West-Vlaanderen"}}},"BG":{"name":"Bulgaria","regions":{"694":{"code":"BG-01","name":"Blagoevgrad"},"695":{"code":"BG-02","name":"Burgas"},"701":{"code":"BG-08","name":"Dobrich"},"700":{"code":"BG-07","name":"Gabrovo"},"719":{"code":"BG-26","name":"Haskovo"},"702":{"code":"BG-09","name":"Kardzhali"},"703":{"code":"BG-10","name":"Kyustendil"},"704":{"code":"BG-11","name":"Lovech"},"705":{"code":"BG-12","name":"Montana"},"706":{"code":"BG-13","name":"Pazardzhik"},"707":{"code":"BG-14","name":"Pernik"},"708":{"code":"BG-15","name":"Pleven"},"709":{"code":"BG-16","name":"Plovdiv"},"710":{"code":"BG-17","name":"Razgrad"},"711":{"code":"BG-18","name":"Ruse"},"720":{"code":"BG-27","name":"Shumen"},"712":{"code":"BG-19","name":"Silistra"},"713":{"code":"BG-20","name":"Sliven"},"714":{"code":"BG-21","name":"Smolyan"},"715":{"code":"BG-22","name":"Sofia City"},"716":{"code":"BG-23","name":"Sofia Province"},"717":{"code":"BG-24","name":"Stara Zagora"},"718":{"code":"BG-25","name":"Targovishte"},"696":{"code":"BG-03","name":"Varna"},"697":{"code":"BG-04","name":"Veliko Tarnovo"},"698":{"code":"BG-05","name":"Vidin"},"699":{"code":"BG-06","name":"Vratsa"},"721":{"code":"BG-28","name":"Yambol"}}},"CY":{"name":"Kypros"},"CZ":{"name":"T\u0161ekki","regions":{"1159":{"code":"CZ-31","name":"Jiho\u010desk\u00fd kraj"},"1183":{"code":"CZ-64","name":"Jihomoravsk\u00fd kraj"},"1165":{"code":"CZ-41","name":"Karlovarsk\u00fd kraj"},"1180":{"code":"CZ-63","name":"Kraj Vyso\u010dina"},"1174":{"code":"CZ-52","name":"Kr\u00e1lov\u00e9hradeck\u00fd kraj"},"1171":{"code":"CZ-51","name":"Libereck\u00fd kraj"},"1192":{"code":"CZ-80","name":"Moravskoslezsk\u00fd kraj"},"1186":{"code":"CZ-71","name":"Olomouck\u00fd kraj"},"1177":{"code":"CZ-53","name":"Pardubick\u00fd kraj"},"1162":{"code":"CZ-32","name":"Plze\u0148sk\u00fd kraj"},"1153":{"code":"CZ-10","name":"Praha, Hlavn\u00ed m\u011bsto"},"1156":{"code":"CZ-20","name":"St\u0159edo\u010desk\u00fd kraj"},"1168":{"code":"CZ-42","name":"\u00dasteck\u00fd kraj"},"1189":{"code":"CZ-72","name":"Zl\u00ednsk\u00fd kraj"}}},"DE":{"name":"Saksa","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":"Tanska","regions":{"804":{"code":"DK-84","name":"Hovedstaden"},"805":{"code":"DK-82","name":"Midtjylland"},"806":{"code":"DK-81","name":"Nordjylland"},"807":{"code":"DK-85","name":"Sj\u00e6lland"},"808":{"code":"DK-83","name":"Syddanmark"}}},"EE":{"name":"Viro","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":"Espanja","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":"Suomi","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":"Ranska","regions":{"182":{"code":"1","name":"Ain"},"183":{"code":"2","name":"Aisne"},"184":{"code":"3","name":"Allier"},"185":{"code":"4","name":"Alpes-de-Haute-Provence"},"187":{"code":"6","name":"Alpes-Maritimes"},"188":{"code":"7","name":"Ard\u00e8che"},"189":{"code":"8","name":"Ardennes"},"190":{"code":"9","name":"Ari\u00e8ge"},"191":{"code":"10","name":"Aube"},"192":{"code":"11","name":"Aude"},"193":{"code":"12","name":"Aveyron"},"249":{"code":"67","name":"Bas-Rhin"},"194":{"code":"13","name":"Bouches-du-Rh\u00f4ne"},"195":{"code":"14","name":"Calvados"},"196":{"code":"15","name":"Cantal"},"197":{"code":"16","name":"Charente"},"198":{"code":"17","name":"Charente-Maritime"},"199":{"code":"18","name":"Cher"},"200":{"code":"19","name":"Corr\u00e8ze"},"201":{"code":"2A","name":"Corse-du-Sud"},"203":{"code":"21","name":"C\u00f4te-d'Or"},"204":{"code":"22","name":"C\u00f4tes-d'Armor"},"205":{"code":"23","name":"Creuse"},"261":{"code":"79","name":"Deux-S\u00e8vres"},"206":{"code":"24","name":"Dordogne"},"207":{"code":"25","name":"Doubs"},"208":{"code":"26","name":"Dr\u00f4me"},"273":{"code":"91","name":"Essonne"},"209":{"code":"27","name":"Eure"},"210":{"code":"28","name":"Eure-et-Loir"},"211":{"code":"29","name":"Finist\u00e8re"},"212":{"code":"30","name":"Gard"},"214":{"code":"32","name":"Gers"},"215":{"code":"33","name":"Gironde"},"250":{"code":"68","name":"Haut-Rhin"},"202":{"code":"2B","name":"Haute-Corse"},"213":{"code":"31","name":"Haute-Garonne"},"225":{"code":"43","name":"Haute-Loire"},"234":{"code":"52","name":"Haute-Marne"},"252":{"code":"70","name":"Haute-Sa\u00f4ne"},"256":{"code":"74","name":"Haute-Savoie"},"269":{"code":"87","name":"Haute-Vienne"},"186":{"code":"5","name":"Hautes-Alpes"},"247":{"code":"65","name":"Hautes-Pyr\u00e9n\u00e9es"},"274":{"code":"92","name":"Hauts-de-Seine"},"216":{"code":"34","name":"H\u00e9rault"},"217":{"code":"35","name":"Ille-et-Vilaine"},"218":{"code":"36","name":"Indre"},"219":{"code":"37","name":"Indre-et-Loire"},"220":{"code":"38","name":"Is\u00e8re"},"221":{"code":"39","name":"Jura"},"222":{"code":"40","name":"Landes"},"223":{"code":"41","name":"Loir-et-Cher"},"224":{"code":"42","name":"Loire"},"226":{"code":"44","name":"Loire-Atlantique"},"227":{"code":"45","name":"Loiret"},"228":{"code":"46","name":"Lot"},"229":{"code":"47","name":"Lot-et-Garonne"},"230":{"code":"48","name":"Loz\u00e8re"},"231":{"code":"49","name":"Maine-et-Loire"},"232":{"code":"50","name":"Manche"},"233":{"code":"51","name":"Marne"},"235":{"code":"53","name":"Mayenne"},"236":{"code":"54","name":"Meurthe-et-Moselle"},"237":{"code":"55","name":"Meuse"},"238":{"code":"56","name":"Morbihan"},"239":{"code":"57","name":"Moselle"},"240":{"code":"58","name":"Ni\u00e8vre"},"241":{"code":"59","name":"Nord"},"242":{"code":"60","name":"Oise"},"243":{"code":"61","name":"Orne"},"257":{"code":"75","name":"Paris"},"244":{"code":"62","name":"Pas-de-Calais"},"245":{"code":"63","name":"Puy-de-D\u00f4me"},"246":{"code":"64","name":"Pyr\u00e9n\u00e9es-Atlantiques"},"248":{"code":"66","name":"Pyr\u00e9n\u00e9es-Orientales"},"251":{"code":"69","name":"Rh\u00f4ne"},"253":{"code":"71","name":"Sa\u00f4ne-et-Loire"},"254":{"code":"72","name":"Sarthe"},"255":{"code":"73","name":"Savoie"},"259":{"code":"77","name":"Seine-et-Marne"},"258":{"code":"76","name":"Seine-Maritime"},"275":{"code":"93","name":"Seine-Saint-Denis"},"262":{"code":"80","name":"Somme"},"263":{"code":"81","name":"Tarn"},"264":{"code":"82","name":"Tarn-et-Garonne"},"272":{"code":"90","name":"Territoire-de-Belfort"},"277":{"code":"95","name":"Val-d'Oise"},"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":"Kreikka","regions":{"846":{"code":"GR-69","name":"\u00c1gion \u00d3ros"},"833":{"code":"GR-A","name":"Anatolik\u00ed Makedon\u00eda kai Thr\u00e1ki"},"834":{"code":"GR-I","name":"Attik\u00ed"},"835":{"code":"GR-G","name":"Dytik\u00ed Ell\u00e1da"},"836":{"code":"GR-C","name":"Dytik\u00ed Makedon\u00eda"},"837":{"code":"GR-F","name":"Ion\u00eda N\u00edsia"},"838":{"code":"GR-D","name":"\u00cdpeiros"},"839":{"code":"GR-B","name":"Kentrik\u00ed Makedon\u00eda"},"840":{"code":"GR-M","name":"Kr\u00edti"},"841":{"code":"GR-L","name":"N\u00f3tio Aiga\u00edo"},"842":{"code":"GR-J","name":"Pelop\u00f3nnisos"},"843":{"code":"GR-H","name":"Stere\u00e1 Ell\u00e1da"},"844":{"code":"GR-E","name":"Thessal\u00eda"},"845":{"code":"GR-K","name":"V\u00f3reio Aiga\u00edo"}}},"HR":{"name":"Kroatia","regions":{"518":{"code":"HR-07","name":"Bjelovarsko-bilogorska \u017eupanija"},"523":{"code":"HR-12","name":"Brodsko-posavska \u017eupanija"},"530":{"code":"HR-19","name":"Dubrova\u010dko-neretvanska \u017eupanija"},"532":{"code":"HR-21","name":"Grad Zagreb"},"529":{"code":"HR-18","name":"Istarska \u017eupanija"},"515":{"code":"HR-04","name":"Karlova\u010dka \u017eupanija"},"517":{"code":"HR-06","name":"Koprivni\u010dko-kri\u017eeva\u010dka \u017eupanija"},"513":{"code":"HR-02","name":"Krapinsko-zagorska \u017eupanija"},"520":{"code":"HR-09","name":"Li\u010dko-senjska \u017eupanija"},"531":{"code":"HR-20","name":"Me\u0111imurska \u017eupanija"},"525":{"code":"HR-14","name":"Osje\u010dko-baranjska \u017eupanija"},"522":{"code":"HR-11","name":"Po\u017ee\u0161ko-slavonska \u017eupanija"},"519":{"code":"HR-08","name":"Primorsko-goranska \u017eupanija"},"526":{"code":"HR-15","name":"\u0160ibensko-kninska \u017eupanija"},"514":{"code":"HR-03","name":"Sisa\u010dko-moslava\u010dka \u017eupanija"},"528":{"code":"HR-17","name":"Splitsko-dalmatinska \u017eupanija"},"516":{"code":"HR-05","name":"Vara\u017edinska \u017eupanija"},"521":{"code":"HR-10","name":"Viroviti\u010dko-podravska \u017eupanija"},"527":{"code":"HR-16","name":"Vukovarsko-srijemska \u017eupanija"},"524":{"code":"HR-13","name":"Zadarska \u017eupanija"},"512":{"code":"HR-01","name":"Zagreba\u010dka \u017eupanija"}}},"HU":{"name":"Unkari"},"IE":{"name":"Irlanti"},"IT":{"name":"Italia","regions":{"865":{"code":"AG","name":"Agrigento"},"866":{"code":"AL","name":"Alessandria"},"867":{"code":"AN","name":"Ancona"},"868":{"code":"AO","name":"Aosta"},"870":{"code":"AR","name":"Arezzo"},"871":{"code":"AP","name":"Ascoli-Piceno"},"872":{"code":"AT","name":"Asti"},"873":{"code":"AV","name":"Avellino"},"874":{"code":"BA","name":"Bari"},"875":{"code":"BT","name":"Barletta-Andria-Trani"},"876":{"code":"BL","name":"Belluno"},"877":{"code":"BN","name":"Benevento"},"878":{"code":"BG","name":"Bergamo"},"879":{"code":"BI","name":"Biella"},"880":{"code":"BO","name":"Bologna"},"881":{"code":"BZ","name":"Bolzano"},"882":{"code":"BS","name":"Brescia"},"883":{"code":"BR","name":"Brindisi"},"884":{"code":"CA","name":"Cagliari"},"885":{"code":"CL","name":"Caltanissetta"},"886":{"code":"CB","name":"Campobasso"},"887":{"code":"CI","name":"Carbonia Iglesias"},"888":{"code":"CE","name":"Caserta"},"889":{"code":"CT","name":"Catania"},"890":{"code":"CZ","name":"Catanzaro"},"891":{"code":"CH","name":"Chieti"},"892":{"code":"CO","name":"Como"},"893":{"code":"CS","name":"Cosenza"},"894":{"code":"CR","name":"Cremona"},"895":{"code":"KR","name":"Crotone"},"896":{"code":"CN","name":"Cuneo"},"897":{"code":"EN","name":"Enna"},"898":{"code":"FM","name":"Fermo"},"899":{"code":"FE","name":"Ferrara"},"900":{"code":"FI","name":"Firenze"},"901":{"code":"FG","name":"Foggia"},"902":{"code":"FC","name":"Forli-Cesena"},"903":{"code":"FR","name":"Frosinone"},"904":{"code":"GE","name":"Genova"},"905":{"code":"GO","name":"Gorizia"},"906":{"code":"GR","name":"Grosseto"},"907":{"code":"IM","name":"Imperia"},"908":{"code":"IS","name":"Isernia"},"869":{"code":"AQ","name":"L'Aquila"},"909":{"code":"SP","name":"La-Spezia"},"910":{"code":"LT","name":"Latina"},"911":{"code":"LE","name":"Lecce"},"912":{"code":"LC","name":"Lecco"},"913":{"code":"LI","name":"Livorno"},"914":{"code":"LO","name":"Lodi"},"915":{"code":"LU","name":"Lucca"},"916":{"code":"MC","name":"Macerata"},"917":{"code":"MN","name":"Mantova"},"918":{"code":"MS","name":"Massa-Carrara"},"919":{"code":"MT","name":"Matera"},"920":{"code":"VS","name":"Medio Campidano"},"921":{"code":"ME","name":"Messina"},"922":{"code":"MI","name":"Milano"},"923":{"code":"MO","name":"Modena"},"924":{"code":"MB","name":"Monza-Brianza"},"925":{"code":"NA","name":"Napoli"},"926":{"code":"NO","name":"Novara"},"927":{"code":"NU","name":"Nuoro"},"928":{"code":"OG","name":"Ogliastra"},"929":{"code":"OT","name":"Olbia Tempio"},"930":{"code":"OR","name":"Oristano"},"931":{"code":"PD","name":"Padova"},"932":{"code":"PA","name":"Palermo"},"933":{"code":"PR","name":"Parma"},"934":{"code":"PV","name":"Pavia"},"935":{"code":"PG","name":"Perugia"},"936":{"code":"PU","name":"Pesaro-Urbino"},"937":{"code":"PE","name":"Pescara"},"938":{"code":"PC","name":"Piacenza"},"939":{"code":"PI","name":"Pisa"},"940":{"code":"PT","name":"Pistoia"},"941":{"code":"PN","name":"Pordenone"},"942":{"code":"PZ","name":"Potenza"},"943":{"code":"PO","name":"Prato"},"944":{"code":"RG","name":"Ragusa"},"945":{"code":"RA","name":"Ravenna"},"946":{"code":"RC","name":"Reggio-Calabria"},"947":{"code":"RE","name":"Reggio-Emilia"},"948":{"code":"RI","name":"Rieti"},"949":{"code":"RN","name":"Rimini"},"950":{"code":"RM","name":"Roma"},"951":{"code":"RO","name":"Rovigo"},"952":{"code":"SA","name":"Salerno"},"953":{"code":"SS","name":"Sassari"},"954":{"code":"SV","name":"Savona"},"955":{"code":"SI","name":"Siena"},"956":{"code":"SR","name":"Siracusa"},"957":{"code":"SO","name":"Sondrio"},"958":{"code":"TA","name":"Taranto"},"959":{"code":"TE","name":"Teramo"},"960":{"code":"TR","name":"Terni"},"961":{"code":"TO","name":"Torino"},"962":{"code":"TP","name":"Trapani"},"963":{"code":"TN","name":"Trento"},"964":{"code":"TV","name":"Treviso"},"965":{"code":"TS","name":"Trieste"},"966":{"code":"UD","name":"Udine"},"967":{"code":"VA","name":"Varese"},"968":{"code":"VE","name":"Venezia"},"969":{"code":"VB","name":"Verbania"},"970":{"code":"VC","name":"Vercelli"},"971":{"code":"VR","name":"Verona"},"972":{"code":"VV","name":"Vibo-Valentia"},"973":{"code":"VI","name":"Vicenza"},"974":{"code":"VT","name":"Viterbo"}}},"LT":{"name":"Liettua","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":"Latvia","regions":{"471":{"code":"\u0100da\u017eu novads","name":"\u0100da\u017eu novads"},"366":{"code":"Aglonas novads","name":"Aglonas novads"},"367":{"code":"LV-AI","name":"Aizkraukles novads"},"368":{"code":"Aizputes novads","name":"Aizputes novads"},"369":{"code":"Akn\u012bstes novads","name":"Akn\u012bstes novads"},"370":{"code":"Alojas novads","name":"Alojas novads"},"371":{"code":"Alsungas novads","name":"Alsungas novads"},"372":{"code":"LV-AL","name":"Al\u016bksnes novads"},"373":{"code":"Amatas novads","name":"Amatas novads"},"374":{"code":"Apes novads","name":"Apes novads"},"375":{"code":"Auces novads","name":"Auces novads"},"376":{"code":"Bab\u012btes novads","name":"Bab\u012btes novads"},"377":{"code":"Baldones novads","name":"Baldones novads"},"378":{"code":"Baltinavas novads","name":"Baltinavas novads"},"379":{"code":"LV-BL","name":"Balvu novads"},"380":{"code":"LV-BU","name":"Bauskas novads"},"381":{"code":"Bever\u012bnas novads","name":"Bever\u012bnas novads"},"382":{"code":"Broc\u0113nu novads","name":"Broc\u0113nu novads"},"383":{"code":"Burtnieku novads","name":"Burtnieku novads"},"384":{"code":"Carnikavas novads","name":"Carnikavas novads"},"387":{"code":"LV-CE","name":"C\u0113su novads"},"385":{"code":"Cesvaines novads","name":"Cesvaines novads"},"386":{"code":"Ciblas novads","name":"Ciblas novads"},"388":{"code":"Dagdas novads","name":"Dagdas novads"},"355":{"code":"LV-DGV","name":"Daugavpils"},"389":{"code":"LV-DA","name":"Daugavpils novads"},"390":{"code":"LV-DO","name":"Dobeles novads"},"391":{"code":"Dundagas novads","name":"Dundagas novads"},"392":{"code":"Durbes novads","name":"Durbes novads"},"393":{"code":"Engures novads","name":"Engures novads"},"472":{"code":"\u0112rg\u013cu novads","name":"\u0112rg\u013cu novads"},"394":{"code":"Garkalnes novads","name":"Garkalnes novads"},"395":{"code":"Grobi\u0146as novads","name":"Grobi\u0146as novads"},"396":{"code":"LV-GU","name":"Gulbenes novads"},"397":{"code":"Iecavas novads","name":"Iecavas novads"},"398":{"code":"Ik\u0161\u0137iles novads","name":"Ik\u0161\u0137iles novads"},"399":{"code":"Il\u016bkstes novads","name":"Il\u016bkstes novads"},"400":{"code":"In\u010dukalna novads","name":"In\u010dukalna novads"},"401":{"code":"Jaunjelgavas novads","name":"Jaunjelgavas novads"},"402":{"code":"Jaunpiebalgas novads","name":"Jaunpiebalgas novads"},"403":{"code":"Jaunpils novads","name":"Jaunpils novads"},"357":{"code":"J\u0113kabpils","name":"J\u0113kabpils"},"405":{"code":"LV-JK","name":"J\u0113kabpils novads"},"356":{"code":"LV-JEL","name":"Jelgava"},"404":{"code":"LV-JL","name":"Jelgavas novads"},"358":{"code":"LV-JUR","name":"J\u016brmala"},"406":{"code":"Kandavas novads","name":"Kandavas novads"},"412":{"code":"K\u0101rsavas novads","name":"K\u0101rsavas novads"},"473":{"code":"\u0136eguma novads","name":"\u0136eguma novads"},"474":{"code":"\u0136ekavas novads","name":"\u0136ekavas novads"},"407":{"code":"Kokneses novads","name":"Kokneses novads"},"410":{"code":"LV-KR","name":"Kr\u0101slavas novads"},"408":{"code":"Krimuldas novads","name":"Krimuldas novads"},"409":{"code":"Krustpils novads","name":"Krustpils novads"},"411":{"code":"LV-KU","name":"Kuld\u012bgas novads"},"413":{"code":"Lielv\u0101rdes novads","name":"Lielv\u0101rdes novads"},"359":{"code":"LV-LPX","name":"Liep\u0101ja"},"360":{"code":"LV-LE","name":"Liep\u0101jas novads"},"417":{"code":"L\u012bgatnes novads","name":"L\u012bgatnes novads"},"414":{"code":"LV-LM","name":"Limba\u017eu novads"},"418":{"code":"L\u012bv\u0101nu novads","name":"L\u012bv\u0101nu novads"},"415":{"code":"Lub\u0101nas novads","name":"Lub\u0101nas novads"},"416":{"code":"LV-LU","name":"Ludzas novads"},"419":{"code":"LV-MA","name":"Madonas novads"},"421":{"code":"M\u0101lpils novads","name":"M\u0101lpils novads"},"422":{"code":"M\u0101rupes novads","name":"M\u0101rupes novads"},"420":{"code":"Mazsalacas novads","name":"Mazsalacas novads"},"423":{"code":"Nauk\u0161\u0113nu novads","name":"Nauk\u0161\u0113nu novads"},"424":{"code":"Neretas novads","name":"Neretas novads"},"425":{"code":"N\u012bcas novads","name":"N\u012bcas novads"},"426":{"code":"LV-OG","name":"Ogres novads"},"427":{"code":"Olaines novads","name":"Olaines novads"},"428":{"code":"Ozolnieku novads","name":"Ozolnieku novads"},"432":{"code":"P\u0101rgaujas novads","name":"P\u0101rgaujas novads"},"433":{"code":"P\u0101vilostas novads","name":"P\u0101vilostas novads"},"434":{"code":"P\u013cavi\u0146u novads","name":"P\u013cavi\u0146u novads"},"429":{"code":"LV-PR","name":"Prei\u013cu novads"},"430":{"code":"Priekules novads","name":"Priekules novads"},"431":{"code":"Prieku\u013cu novads","name":"Prieku\u013cu novads"},"435":{"code":"Raunas novads","name":"Raunas novads"},"361":{"code":"LV-REZ","name":"R\u0113zekne"},"442":{"code":"LV-RE","name":"R\u0113zeknes novads"},"436":{"code":"Riebi\u0146u novads","name":"Riebi\u0146u novads"},"362":{"code":"LV-RIX","name":"R\u012bga"},"363":{"code":"LV-RI","name":"R\u012bgas novads"},"437":{"code":"Rojas novads","name":"Rojas novads"},"438":{"code":"Ropa\u017eu novads","name":"Ropa\u017eu novads"},"439":{"code":"Rucavas novads","name":"Rucavas novads"},"440":{"code":"Rug\u0101ju novads","name":"Rug\u0101ju novads"},"443":{"code":"R\u016bjienas novads","name":"R\u016bjienas novads"},"441":{"code":"Rund\u0101les novads","name":"Rund\u0101les novads"},"444":{"code":"Salacgr\u012bvas novads","name":"Salacgr\u012bvas novads"},"445":{"code":"Salas novads","name":"Salas novads"},"446":{"code":"Salaspils novads","name":"Salaspils novads"},"447":{"code":"LV-SA","name":"Saldus novads"},"448":{"code":"Saulkrastu novads","name":"Saulkrastu novads"},"455":{"code":"S\u0113jas novads","name":"S\u0113jas novads"},"449":{"code":"Siguldas novads","name":"Siguldas novads"},"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":"Alankomaat"},"PL":{"name":"Puola","regions":{"1019":{"code":"PL-02","name":"dolno\u015bl\u0105skie"},"1020":{"code":"PL-04","name":"kujawsko-pomorskie"},"1021":{"code":"PL-06","name":"lubelskie"},"1022":{"code":"PL-08","name":"lubuskie"},"1025":{"code":"PL-14","name":"mazowieckie"},"1024":{"code":"PL-12","name":"ma\u0142opolskie"},"1026":{"code":"PL-16","name":"opolskie"},"1027":{"code":"PL-18","name":"podkarpackie"},"1028":{"code":"PL-20","name":"podlaskie"},"1029":{"code":"PL-22","name":"pomorskie"},"1030":{"code":"PL-24","name":"\u015bl\u0105skie"},"1031":{"code":"PL-26","name":"\u015bwi\u0119tokrzyskie"},"1032":{"code":"PL-28","name":"warmi\u0144sko-mazurskie"},"1033":{"code":"PL-30","name":"wielkopolskie"},"1034":{"code":"PL-32","name":"zachodniopomorskie"},"1023":{"code":"PL-10","name":"\u0142\u00f3dzkie"}}},"PT":{"name":"Portugali","regions":{"1035":{"code":"PT-01","name":"Aveiro"},"1036":{"code":"PT-02","name":"Beja"},"1037":{"code":"PT-03","name":"Braga"},"1038":{"code":"PT-04","name":"Bragan\u00e7a"},"1039":{"code":"PT-05","name":"Castelo Branco"},"1040":{"code":"PT-06","name":"Coimbra"},"1041":{"code":"PT-07","name":"\u00c9vora"},"1042":{"code":"PT-08","name":"Faro"},"1043":{"code":"PT-09","name":"Guarda"},"1044":{"code":"PT-10","name":"Leiria"},"1045":{"code":"PT-11","name":"Lisboa"},"1046":{"code":"PT-12","name":"Portalegre"},"1047":{"code":"PT-13","name":"Porto"},"1054":{"code":"PT-30","name":"Regi\u00e3o Aut\u00f3noma da Madeira"},"1053":{"code":"PT-20","name":"Regi\u00e3o Aut\u00f3noma dos A\u00e7ores"},"1048":{"code":"PT-14","name":"Santar\u00e9m"},"1049":{"code":"PT-15","name":"Set\u00fabal"},"1050":{"code":"PT-16","name":"Viana do Castelo"},"1051":{"code":"PT-17","name":"Vila Real"},"1052":{"code":"PT-18","name":"Viseu"}}},"RO":{"name":"Romania","regions":{"278":{"code":"AB","name":"Alba"},"279":{"code":"AR","name":"Arad"},"280":{"code":"AG","name":"Arge\u015f"},"281":{"code":"BC","name":"Bac\u0103u"},"282":{"code":"BH","name":"Bihor"},"283":{"code":"BN","name":"Bistri\u0163a-N\u0103s\u0103ud"},"284":{"code":"BT","name":"Boto\u015fani"},"286":{"code":"BR","name":"Br\u0103ila"},"285":{"code":"BV","name":"Bra\u015fov"},"287":{"code":"B","name":"Bucure\u015fti"},"288":{"code":"BZ","name":"Buz\u0103u"},"290":{"code":"CL","name":"C\u0103l\u0103ra\u015fi"},"289":{"code":"CS","name":"Cara\u015f-Severin"},"291":{"code":"CJ","name":"Cluj"},"292":{"code":"CT","name":"Constan\u0163a"},"293":{"code":"CV","name":"Covasna"},"294":{"code":"DB","name":"D\u00e2mbovi\u0163a"},"295":{"code":"DJ","name":"Dolj"},"296":{"code":"GL","name":"Gala\u0163i"},"297":{"code":"GR","name":"Giurgiu"},"298":{"code":"GJ","name":"Gorj"},"299":{"code":"HR","name":"Harghita"},"300":{"code":"HD","name":"Hunedoara"},"301":{"code":"IL","name":"Ialomi\u0163a"},"302":{"code":"IS","name":"Ia\u015fi"},"303":{"code":"IF","name":"Ilfov"},"304":{"code":"MM","name":"Maramure\u015f"},"305":{"code":"MH","name":"Mehedin\u0163i"},"306":{"code":"MS","name":"Mure\u015f"},"307":{"code":"NT","name":"Neam\u0163"},"308":{"code":"OT","name":"Olt"},"309":{"code":"PH","name":"Prahova"},"311":{"code":"SJ","name":"S\u0103laj"},"310":{"code":"SM","name":"Satu-Mare"},"312":{"code":"SB","name":"Sibiu"},"313":{"code":"SV","name":"Suceava"},"314":{"code":"TR","name":"Teleorman"},"315":{"code":"TM","name":"Timi\u015f"},"316":{"code":"TL","name":"Tulcea"},"318":{"code":"VL","name":"V\u00e2lcea"},"317":{"code":"VS","name":"Vaslui"},"319":{"code":"VN","name":"Vrancea"}}},"SE":{"name":"Ruotsi","regions":{"1065":{"code":"SE-K","name":"Blekinge l\u00e4n"},"1066":{"code":"SE-W","name":"Dalarnas l\u00e4n"},"1068":{"code":"SE-X","name":"G\u00e4vleborgs l\u00e4n"},"1067":{"code":"SE-I","name":"Gotlands l\u00e4n"},"1069":{"code":"SE-N","name":"Hallands l\u00e4n"},"1070":{"code":"SE-Z","name":"J\u00e4mtlands l\u00e4n"},"1071":{"code":"SE-F","name":"J\u00f6nk\u00f6pings l\u00e4n"},"1072":{"code":"SE-H","name":"Kalmar l\u00e4n"},"1073":{"code":"SE-G","name":"Kronobergs l\u00e4n"},"1074":{"code":"SE-BD","name":"Norrbottens l\u00e4n"},"1084":{"code":"SE-T","name":"\u00d6rebro l\u00e4n"},"1085":{"code":"SE-E","name":"\u00d6sterg\u00f6tlands l\u00e4n"},"1075":{"code":"SE-M","name":"Sk\u00e5ne l\u00e4n"},"1077":{"code":"SE-D","name":"S\u00f6dermanlands l\u00e4n"},"1076":{"code":"SE-AB","name":"Stockholms l\u00e4n"},"1078":{"code":"SE-C","name":"Uppsala l\u00e4n"},"1079":{"code":"SE-S","name":"V\u00e4rmlands l\u00e4n"},"1080":{"code":"SE-AC","name":"V\u00e4sterbottens l\u00e4n"},"1081":{"code":"SE-Y","name":"V\u00e4sternorrlands l\u00e4n"},"1082":{"code":"SE-U","name":"V\u00e4stmanlands l\u00e4n"},"1083":{"code":"SE-O","name":"V\u00e4stra G\u00f6talands l\u00e4n"}}},"SI":{"name":"Slovenia"},"SK":{"name":"Slovakia"},"data_id":1779554415},"captcha":[],"wishlist":{"items":[]},"instant-purchase":[],"loggedAsCustomer":[],"multiplewishlist":[],"persistent":[],"review":[],"payments":[],"ammessages":[],"hyva_enterprise":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"paypal-buyer-country":[]}</script> <div x-data="amMessage()" x-bind="eventListeners"></div><script>
    function amMessage() {
        let lastProcessedDataId = null;
        const processedMessageHashes = new Set();
        let debounceTimer;

        return {
            init() {
                this.processStoredMessages();

                window.addEventListener('beforeunload', () => {
                    processedMessageHashes.clear();
                    lastProcessedDataId = null;
                });
            },

            eventListeners: {
                ['@private-content-loaded.window'](event) {
                    const { ammessages } = event.detail.data;

                    clearTimeout(debounceTimer);
                    debounceTimer = setTimeout(() => {
                        if (ammessages?.data_id && ammessages.data_id === lastProcessedDataId) {
                            return;
                        }

                        lastProcessedDataId = ammessages?.data_id;

                        
                        if (ammessages?.messages) {
                            const messageHash = JSON.stringify(ammessages.messages);
                            if (processedMessageHashes.has(messageHash)) {
                                return;
                            }
                            processedMessageHashes.add(messageHash);
                        }

                        const isCartPage = document.body.classList.contains('checkout-cart-index');
                        const isCheckoutPage = document.body.classList.contains('hyva_checkout-index-index');
                        const onePageSuccessPage = document.body.classList.contains('hyva_checkout_onepage_success');

                        if (!isCartPage && !isCheckoutPage && !onePageSuccessPage && ammessages?.messages) {
                            this.processMessages(ammessages.messages);
                        }
                    }, 500);
                },
                ['@am-promo:initialized.window']() {
                    this.processStoredMessages();
                },
                ['@am-promo-products-recollect.window']() {
                    this.processStoredMessages();
                }
            },

            processStoredMessages() {
                try {
                    const messages = JSON.parse(localStorage.getItem('amFreeGiftCartMessages'));
                    if (messages?.length) {
                        messages.forEach(message => dispatchMessages([message], 5000));
                        localStorage.removeItem('amFreeGiftCartMessages');
                    }
                } catch (e) {
                    console.error('Error processing stored messages:', e);
                }
            },

            processMessages(messages) {
                if (messages?.notice) {
                    this.handleNoticeMessage(messages.notice);
                }
            },

            handleNoticeMessage(notice) {
                if (!notice) return;
                dispatchMessages([{ type: notice.type, text: notice.text }]);
            }
        }
    }</script></div> <script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a008e0f3f9eb82a0',t:'MTc3OTU4OTgyOQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
</html>