CINXE.COM

Amasty: Magento 2 Extensions Development Company | Magento Plugin Store | Hyva-compatible Products | Development Company Associative

<!doctype html><html lang="en"><head prefix="og: http://ogp.me/ns# cms: http://ogp.me/ns/cms#"> <meta charset="utf-8"/> <meta name="title" property="og:title" content="Amasty: Magento 2 Extensions Development Company | Magento Plugin Store | Hyva-compatible Products | Development Company Associative"/> <meta name="description" content="Choose from 100+ Magento 2 Hyva-compatible plugins professionally developed by Amasty, First Premier Magento Extension Builder Company. We know how to make your ecommerce store better!"/> <meta name="robots" content="INDEX,FOLLOW"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="format-detection" content="telephone=no"/> <meta name="image" content="https://cdn.amasty.com/media/amasty/seo/meta_image/default/banner_1.png" property="og:image"/> <title>Amasty: Magento 2 Extensions Development Company | Magento Plugin Store | Hyva-compatible Products | Development Company Associative</title> <link rel="stylesheet" type="text/css" media="all" href="https://cdn.amasty.com/static/version1739349122/_cache/merged/6d62023d5670ec0df992e073445b8011.min.css" /> <link rel="stylesheet" type="text/css" media="screen and (min-width: 320px)" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/css/styles.min.css" /> <link rel="stylesheet" type="text/css" media="screen and (min-width: 769px)" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/css/source/bundle-module/cms-pages/cms-page-bundle-l.min.css" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/fonts/gilroy/bold/Gilroy-Bold.woff2" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/fonts/Blank-Theme-Icons/Blank-Theme-Icons.woff2" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/fonts/roboto/bold/Roboto-700.woff2" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/fonts/roboto/regular/Roboto-400.woff2" /> <link rel="icon" type="image/x-icon" href="https://cdn.amasty.com/media/favicon/stores/1/amasty_logo.png" /> <link rel="shortcut icon" type="image/x-icon" href="https://cdn.amasty.com/media/favicon/stores/1/amasty_logo.png" /> <!-- Start: SEO Health Checker --> <!--f7e98322c1f2996ae54a6b854c29c3a4--> <!-- End: SEO Health Checker --> <meta name="google-site-verification" content="mrsBMEhSCRX5SA9IdwUbGNSuWUUTTAHJ1r0K-cA0OZk" /> <!-- Some event from google tag manager call facebook pixel event. But facebook pixel init only on 'https://amasty.com/' If facebook pixel events called on stagings and local environment then errors fall into the console. Fix it. --> <script data-info="not-move-to-bottom"> (function initAmsiteAnalytics() { let initGTM = (w, d, s, l, i) => { w[l] = w[l] || []; w[l].push({'gtm.start': new Date().getTime(), event: 'gtm.js'}); let f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = `https://www.googletagmanager.com/gtm.js?id=${i}${dl}`; f.parentNode.insertBefore(j, f); }; let declareGlobalVariables = () => { window.dataLayer = window.dataLayer || []; window.gtag = function() { dataLayer.push(arguments) }; } let addGoogleAnalytics = () => { initAmsiteCookieConsent(); initGTM(window, document, 'script', 'dataLayer', 'GTM-N84742B'); } declareGlobalVariables(); window.addEventListener('init-external-scripts', () => { addGoogleAnalytics(); }); }())</script> <style> @media (min-width: 1260px) { .magezon-builder .mgz-container {width: 1260px;} } </style> <!-- Start VWO Async SmartCode --><!-- End VWO Async SmartCode --> <script data-info="not-move-to-bottom"> 'use strict'; const AmsiteUtils = function () { return { throttle(func, delay) { let lastCall = 0; return function() { let now = Date.now(); if (now - lastCall < delay) { return; } lastCall = now; return func.apply(this, arguments); } }, isCustomerLoggedIn(privateData) { return !!(privateData?.customer?.firstname); }, isMobile(breakpoint) { return window.matchMedia(breakpoint).matches; }, setAnimationToPopup(context) { const origHide = context.hide; context.hide = (...args) => { const overlay = context.$root.querySelector('.am-overlay-popup'); overlay.classList.add('-popup-closed'); origHide.call(context, args); setTimeout(() => { overlay.classList.remove('-popup-closed'); }, 400) } } } }</script> <style>.xpo50wy-s{padding:0!important}.f25yc4m-s{background-color:#fff0fa !important}@media screen and (min-width:1024px){.amsite-top-promotion-main-banner br{display:none}} .amsite-top-promotion-main-banner{display:block;padding:22px 0}.pbuilder-top-promo-html-version > .mgz-element-inner > .inner-content{width:100%}.mgz-element.a3nkgpd .image-content{width:100%;text-align:center}.mgz-element.a3nkgpd .image-title{font-size:16px}.pvyjkrv-s{padding:0!important}.mgz-element.vnhicm1 .image-content{width:100%;text-align:center}.mgz-element.vnhicm1 .image-title{font-size:16px}.a29nay5-s{padding:0!important}.mgz-element.jktxill .image-content{width:100%;text-align:center}.mgz-element.jktxill .image-title{font-size:16px}.o8ymv9v-s{padding:0!important}.mgz-element.qt1hi6b .image-content{width:100%;text-align:center}.mgz-element.qt1hi6b .image-title{font-size:16px}.x5hg6i3-s{padding:0!important}.mgz-element.x9mpqgr .image-content{width:100%;text-align:center}.mgz-element.x9mpqgr .image-title{font-size:16px}.yayunkw-s{padding:0!important}.pyxw755-s{margin-bottom:40px !important}.wj1ketj-s{margin-bottom:10px !important}.rw0lbv7-s{margin-bottom:60px !important}@media (max-width:768px){.rw0lbv7-s{margin-bottom:40px !important}}.cyiixvr-s{padding:0!important}.dwmy38u-s{padding:0!important;margin-top:70px !important}@media (max-width:768px){.dwmy38u-s{margin-top:60px !important}}.muln7w4-s{padding:80px 30px 60px 30px!important;background-color:#18184a !important}@media (max-width:991px){.muln7w4-s{padding-top:70px !important;padding-bottom:55px !important}}@media (max-width:768px){.muln7w4-s{padding-bottom:70px !important}}@media (max-width:575px){.muln7w4-s{padding-right:25px !important;padding-left:25px !important}}.tuh2hpj-s{margin-bottom:0 !important}.j6555ld-s{padding:0 30px 0 30px!important;margin-bottom:0 !important}@media (max-width:575px){.j6555ld-s{padding-right:25px !important;padding-left:25px !important}}.homepage-logo-block-content .mgz-child:not(:last-child)>.mgz-element-inner{margin-bottom:0}.q9nk3y9-s{padding:0!important}.xnh5m5b-s{margin-top:100px !important;margin-bottom:100px !important}@media (max-width:991px){.xnh5m5b-s{margin-top:50px !important}}.gcdpdh2-s{padding:0 30px 0 30px!important;margin-bottom:30px !important}@media (max-width:768px){.gcdpdh2-s{margin-bottom:100px !important}}@media (max-width:575px){.gcdpdh2-s{padding-right:25px !important;padding-left:25px !important}}.w9wpxwl-s{padding-top:70px !important}.r9nyul6-s{padding:0 30px 0 30px!important;margin-bottom:150px !important}@media (max-width:768px){.r9nyul6-s{margin-bottom:100px !important}}@media (max-width:575px){.r9nyul6-s{padding-right:25px !important;padding-left:25px !important}}.fglide1-s{padding:0 30px 0 30px!important;margin-bottom:10px !important}@media (max-width:768px){.fglide1-s{padding-right:25px !important;padding-left:25px !important;margin-bottom:0 !important}}.jbp4gwj-s{margin-bottom:20px !important}.mgz-element.jbp4gwj .image-content{width:100%;text-align:center}.mgz-element.jbp4gwj .image-title{font-size:16px}.nwevwo3-s{margin-bottom:10px !important}.hydg8bd-s{margin-bottom:20px !important}.w8j53o0-s{margin-bottom:25px !important}.pxm0k53-s{text-align:center;margin-bottom:20px !important}.mgz-element.pxm0k53 .mgz-element-separator-line{border-color:#d3d8f4;border-top-style:solid;border-top-width:1px}.mgz-element.mex43su .image-content{width:100%;text-align:center}.mgz-element.mex43su .image-title{font-size:16px}.uyvvy8o-s{padding:0!important}.rgnhygr-s{padding:0!important}.bdmqa04-s{margin-top:30px !important}@media (max-width:991px){.bdmqa04-s{margin-top:20px !important}}.dx3j2mh-s{padding:70px 0 70px 0!important}@media (max-width:991px){.dx3j2mh-s{padding-top:60px !important;padding-bottom:60px !important}}@media (max-width:768px){.dx3j2mh-s{padding-top:40px !important;padding-bottom:40px !important}}.it9ssir-s{margin-bottom:20px !important}.mgz-element.it9ssir .image-content{width:100%;text-align:center}.mgz-element.it9ssir .image-title{font-size:16px}.u0t4n80-s{margin-bottom:10px !important}.mmb3xtj-s{margin-bottom:20px !important}.syxbbmk-s{margin-bottom:25px !important}.ommuhol-s{text-align:center;margin-bottom:20px !important}.mgz-element.ommuhol .mgz-element-separator-line{border-color:#d3d8f4;border-top-style:solid;border-top-width:1px}.mgz-element.j2k34m8 .image-content{width:100%;text-align:center}.mgz-element.j2k34m8 .image-title{font-size:16px}.xgrel37-s{padding:0!important}.w9fhysk-s{padding:0!important}.uppdfl3-s{margin-top:30px !important}@media (max-width:991px){.uppdfl3-s{margin-top:20px !important}}.anoi6bk-s{padding:70px 0 70px 0!important}@media (max-width:991px){.anoi6bk-s{padding-top:60px !important;padding-bottom:60px !important}}@media (max-width:768px){.anoi6bk-s{padding-top:40px !important;padding-bottom:40px !important}}.vpof7d0-s{margin-bottom:20px !important}.mgz-element.vpof7d0 .image-content{width:100%;text-align:center}.mgz-element.vpof7d0 .image-title{font-size:16px}.gqah5sd-s{margin-bottom:10px !important}.auv5dop-s{margin-bottom:20px !important}.w24vk3q-s{margin-bottom:25px !important}.d8nj1j7-s{text-align:center;margin-bottom:20px !important}.mgz-element.d8nj1j7 .mgz-element-separator-line{border-color:#d3d8f4;border-top-style:solid;border-top-width:1px}.mgz-element.ipwxqr7 .image-content{width:100%;text-align:center}.mgz-element.ipwxqr7 .image-title{font-size:16px}.ed51pfn-s{padding:0!important}.vfp0ykm-s{padding:0!important}.qqj271u-s{margin-top:30px !important}@media (max-width:991px){.qqj271u-s{margin-top:20px !important}}.l0udw63-s{padding:70px 0 70px 0!important}@media (max-width:991px){.l0udw63-s{padding-top:60px !important;padding-bottom:60px !important}}@media (max-width:768px){.l0udw63-s{padding-top:40px !important;padding-bottom:40px !important}}.w5ek32o-s{margin-bottom:20px !important}.mgz-element.w5ek32o .image-content{width:100%;text-align:center}.mgz-element.w5ek32o .image-title{font-size:16px}.oxr65c3-s{margin-bottom:10px !important}.rt8r828-s{margin-bottom:20px !important}.h4m2b8m-s{margin-bottom:25px !important}.y51y75p-s{text-align:center;margin-bottom:20px !important}.mgz-element.y51y75p .mgz-element-separator-line{border-color:#d3d8f4;border-top-style:solid;border-top-width:1px}.mgz-element.n7k01ak .image-content{width:100%;text-align:center}.mgz-element.n7k01ak .image-title{font-size:16px}.tt6829p-s{padding:0!important}.xiudi6f-s{padding:0!important}.hl86dpk-s{margin-top:30px !important}@media (max-width:991px){.hl86dpk-s{margin-top:20px !important}}.gtdla0m-s{padding:70px 0 70px 0!important}@media (max-width:991px){.gtdla0m-s{padding-top:60px !important;padding-bottom:60px !important}}@media (max-width:768px){.gtdla0m-s{padding-top:40px !important;padding-bottom:40px !important}}.d5aoib4-s{margin-bottom:20px !important}.mgz-element.d5aoib4 .image-content{width:100%;text-align:center}.mgz-element.d5aoib4 .image-title{font-size:16px}.j0ge6rg-s{margin-bottom:10px !important}.pq84y41-s{margin-bottom:20px !important}.tqxsab8-s{margin-bottom:25px !important}.xpy02c9-s{text-align:center;margin-bottom:20px !important}.mgz-element.xpy02c9 .mgz-element-separator-line{border-color:#d3d8f4;border-top-style:solid;border-top-width:1px}.mgz-element.r85jgvc .image-content{width:100%;text-align:center}.mgz-element.r85jgvc .image-title{font-size:16px}.qtuq76j-s{padding:0!important}.xex40dk-s{padding:0!important}.flupbcf-s{margin-top:30px !important}@media (max-width:991px){.flupbcf-s{margin-top:20px !important}}.w1mabt4-s{padding:70px 0 70px 0!important}@media (max-width:991px){.w1mabt4-s{padding-top:60px !important;padding-bottom:60px !important}}@media (max-width:768px){.w1mabt4-s{padding-top:40px !important;padding-bottom:40px !important}}.nkqoi6q-s{margin-bottom:20px !important}.mgz-element.nkqoi6q .image-content{width:100%;text-align:center}.mgz-element.nkqoi6q .image-title{font-size:16px}.aypdenp-s{margin-bottom:10px !important}.t6swlug-s{margin-bottom:20px !important}.ruc6j8p-s{margin-bottom:25px !important}.g2asfa0-s{text-align:center;margin-bottom:20px !important}.mgz-element.g2asfa0 .mgz-element-separator-line{border-color:#d3d8f4;border-top-style:solid;border-top-width:1px}.mgz-element.jbucoed .image-content{width:100%;text-align:center}.mgz-element.jbucoed .image-title{font-size:16px}.iylgf1j-s{padding:0!important}.ltdws59-s{padding:0!important}.bq9hpjl-s{margin-top:30px !important}@media (max-width:991px){.bq9hpjl-s{margin-top:20px !important}}.avpy04s-s{padding:70px 0 70px 0!important}@media (max-width:991px){.avpy04s-s{padding-top:60px !important;padding-bottom:60px !important}}@media (max-width:768px){.avpy04s-s{padding-top:40px !important;padding-bottom:40px !important}}.ysm6ise-s{margin-bottom:20px !important}.mgz-element.ysm6ise .image-content{width:100%;text-align:center}.mgz-element.ysm6ise .image-title{font-size:16px}.sfcm10m-s{margin-bottom:10px !important}.pt51jxa-s{margin-bottom:20px !important}.f9otol5-s{margin-bottom:25px !important}.obi1cf9-s{text-align:center;margin-bottom:20px !important}.mgz-element.obi1cf9 .mgz-element-separator-line{border-color:#d3d8f4;border-top-style:solid;border-top-width:1px}.mgz-element.btwaym8 .image-content{width:100%;text-align:center}.mgz-element.btwaym8 .image-title{font-size:16px}.o20obws-s{padding:0!important}.ufptt1j-s{padding:0!important}.j8ujh8h-s{margin-top:30px !important}@media (max-width:991px){.j8ujh8h-s{margin-top:20px !important}}.md5pn3a-s{padding:70px 0 70px 0!important}@media (max-width:991px){.md5pn3a-s{padding-top:60px !important;padding-bottom:60px !important}}@media (max-width:768px){.md5pn3a-s{padding-top:40px !important;padding-bottom:40px !important}}.s4f3mcc-s{margin-bottom:20px !important}.mgz-element.s4f3mcc .image-content{width:100%;text-align:center}.mgz-element.s4f3mcc .image-title{font-size:16px}.olrk0ak-s{margin-bottom:10px !important}.g24ugr5-s{margin-bottom:20px !important}.b9tn6yo-s{margin-bottom:25px !important}.yl7apqy-s{text-align:center;margin-bottom:20px !important}.mgz-element.yl7apqy .mgz-element-separator-line{border-color:#d3d8f4;border-top-style:solid;border-top-width:1px}.mgz-element.s8kikwh .image-content{width:100%;text-align:center}.mgz-element.s8kikwh .image-title{font-size:16px}.d83l8vf-s{padding:0!important}.edok3oa-s{padding:0!important}.nt3fuhf-s{margin-top:30px !important}@media (max-width:991px){.nt3fuhf-s{margin-top:20px !important}}.wrll76x-s{padding:70px 0 70px 0!important}@media (max-width:991px){.wrll76x-s{padding-top:60px !important;padding-bottom:60px !important}}@media (max-width:768px){.wrll76x-s{padding-top:40px !important;padding-bottom:40px !important}}.rcqa0ct-s{margin-bottom:20px !important}.mgz-element.rcqa0ct .image-content{width:100%;text-align:center}.mgz-element.rcqa0ct .image-title{font-size:16px}.mqdcod3-s{margin-bottom:10px !important}.gafgvtx-s{margin-bottom:20px !important}.n5818x6-s{margin-bottom:25px !important}.sb9yuxp-s{text-align:center;margin-bottom:20px !important}.mgz-element.sb9yuxp .mgz-element-separator-line{border-color:#d3d8f4;border-top-style:solid;border-top-width:1px}.mgz-element.av4kbt4 .image-content{width:100%;text-align:center}.mgz-element.av4kbt4 .image-title{font-size:16px}.ikoapkq-s{padding:0!important}.fo7s56i-s{padding:0!important}.rntpisd-s{margin-top:30px !important}@media (max-width:991px){.rntpisd-s{margin-top:20px !important}}.o09on5k-s{padding:70px 0 70px 0!important}@media (max-width:991px){.o09on5k-s{padding-top:60px !important;padding-bottom:60px !important}}@media (max-width:768px){.o09on5k-s{padding-top:40px !important;padding-bottom:40px !important}}.cgs402l-s{margin-bottom:20px !important}.mgz-element.cgs402l .image-content{width:100%;text-align:center}.mgz-element.cgs402l .image-title{font-size:16px}.kj7pp1f-s{margin-bottom:10px !important}.x8esshd-s{margin-bottom:20px !important}.cf3oi0e-s{margin-bottom:25px !important}.xnegwkb-s{text-align:center;margin-bottom:20px !important}.mgz-element.xnegwkb .mgz-element-separator-line{border-color:#d3d8f4;border-top-style:solid;border-top-width:1px}.mgz-element.jxyq6fb .image-content{width:100%;text-align:center}.mgz-element.jxyq6fb .image-title{font-size:16px}.wxgf9q8-s{padding:0!important}.ybd4a8c-s{padding:0!important}.k9bs0ht-s{margin-top:30px !important}@media (max-width:991px){.k9bs0ht-s{margin-top:20px !important}}.t9j1akm-s{padding:70px 0 70px 0!important}@media (max-width:991px){.t9j1akm-s{padding-top:60px !important;padding-bottom:60px !important}}@media (max-width:768px){.t9j1akm-s{padding-top:40px !important;padding-bottom:40px !important}}.pcly6ix-s{background-color:#eceffe !important}.inm1k5b-s{padding:0!important}.u3hn3oc-s{margin-top:0 !important;margin-bottom:15px !important}@media (max-width:768px){.u3hn3oc-s{margin-bottom:10px !important}}.ltx2bkk-s{padding:0!important}.b0eicyn-s{padding:0!important}.gjw9st5-s{padding:0!important}.y8dgd47-s{padding:0!important}.dp6dv48-s{padding:0!important}.odcnhd3-s{padding:0!important}.s2m7vgi-s{padding:100px 30px 100px 30px!important;background-color:#0f0635 !important}@media (max-width:768px){.s2m7vgi-s{padding-top:70px !important;padding-bottom:70px !important}}@media (max-width:575px){.s2m7vgi-s{padding-right:25px !important;padding-left:25px !important}}.ac942ow-s{margin-top:0 !important;margin-bottom:10px !important}.g69g6bq-s{margin-bottom:30px !important}.mgz-element.g69g6bq .image-content{width:100%;text-align:center}.mgz-element.g69g6bq .image-title{font-size:16px}.yk6ao0u-s{margin-bottom:30px !important}.mgz-element.l3p9fs1 .image-content{width:100%;text-align:center}.mgz-element.l3p9fs1 .image-title{font-size:16px}.d6dhs7j-s{padding:0!important;margin-bottom:0 !important}@media (max-width:768px){.d6dhs7j-s{margin-bottom:25px !important}}.cgnxf3g-s{padding:0!important}.wgda4s8-s{padding:0!important}.n60k0p8-s{margin-bottom:30px !important}.mgz-element.n60k0p8 .image-content{width:100%;text-align:center}.mgz-element.n60k0p8 .image-title{font-size:16px}.aqktybh-s{margin-bottom:30px !important}.mgz-element.f4sd51o .image-content{width:100%;text-align:center}.mgz-element.f4sd51o .image-title{font-size:16px}.l2nvqea-s{padding:0!important;margin-bottom:0 !important}@media (max-width:768px){.l2nvqea-s{margin-bottom:25px !important}}.khn9p76-s{padding:0!important}.c9lhhob-s{padding:0!important}.v8p7jec-s{margin-bottom:30px !important}.mgz-element.v8p7jec .image-content{width:100%;text-align:center}.mgz-element.v8p7jec .image-title{font-size:16px}.yg074f4-s{margin-bottom:30px !important}.mgz-element.sjuekfi .image-content{width:100%;text-align:center}.mgz-element.sjuekfi .image-title{font-size:16px}.v4wy6pg-s{padding:0!important;margin-bottom:0 !important}@media (max-width:768px){.v4wy6pg-s{margin-bottom:25px !important}}.pcnuftg-s{padding:0!important}.j5gsh47-s{padding:0!important}.hfi697c-s{margin-bottom:30px !important}.mgz-element.hfi697c .image-content{width:100%;text-align:center}.mgz-element.hfi697c .image-title{font-size:16px}.q96m24c-s{margin-bottom:30px !important}.mgz-element.pev8may .image-content{width:100%;text-align:center}.mgz-element.pev8may .image-title{font-size:16px}.rpxa28e-s{padding:0!important;margin-bottom:0 !important}@media (max-width:768px){.rpxa28e-s{margin-bottom:25px !important}}.nno6vja-s{padding:0!important}.p38mrjj-s{padding:0!important}.smmx3gt-s{margin-bottom:30px !important}.mgz-element.smmx3gt .image-content{width:100%;text-align:center}.mgz-element.smmx3gt .image-title{font-size:16px}.jvcsrme-s{margin-bottom:30px !important}.mgz-element.ji1dx7h .image-content{width:100%;text-align:center}.mgz-element.ji1dx7h .image-title{font-size:16px}.s0wq2eo-s{padding:0!important;margin-bottom:0 !important}@media (max-width:768px){.s0wq2eo-s{margin-bottom:25px !important}}.pgwhdwx-s{padding:0!important}.v1ml6l3-s{padding:0!important}.ge9q9j4-s{margin-bottom:30px !important}.mgz-element.ge9q9j4 .image-content{width:100%;text-align:center}.mgz-element.ge9q9j4 .image-title{font-size:16px}.mit7aal-s{margin-bottom:30px !important}.mgz-element.e8md1bq .image-content{width:100%;text-align:center}.mgz-element.e8md1bq .image-title{font-size:16px}.a6urm7u-s{padding:0!important;margin-bottom:0 !important}@media (max-width:768px){.a6urm7u-s{margin-bottom:25px !important}}.ka06oqm-s{padding:0!important}.jd2lc6x-s{padding:0!important}.k6va3k7-s{padding:100px 30px 100px 30px!important;background-color:#ffe26e !important}@media (max-width:768px){.k6va3k7-s{padding-top:70px !important;padding-bottom:70px !important}}@media (max-width:575px){.k6va3k7-s{padding-right:25px !important;padding-left:25px !important}}</style></head><body data-container="body" data-mage-init='{"loaderAjax": {}, "loader": { "icon": "https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/images/loader-2.gif"}}' id="html-body" ontouchstart="() => {}" class="amasty-jet-theme amasty-mega-menu cms-home cms-index-index page-layout-1column-fullwidth"> <div id="cookie-status" style="position: absolute; display: none;">The store will not work correctly in the case when cookies are disabled.</div> <noscript><div class="message global noscript"><div class="content"><p><strong>JavaScript seems to be disabled in your browser.</strong> <span> For the best experience on our site, be sure to turn on Javascript in your browser.</span></p></div></div></noscript> <!-- Google Tag Manager (noscript) --><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-N84742B" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><!-- End Google Tag Manager (noscript) --> <!-- Matomo Tag Manager --><script data-info="not-move-to-bottom"> (function initMatomoAnalytics() { const _mtm = window._mtm = window._mtm || []; _mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'}); let initMatomo = () => { const d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src='https://cdn.matomo.cloud/amasty.matomo.cloud/container_oFfxxYMe.js'; s.parentNode.insertBefore(g,s); setTimeout(() => window.dispatchEvent(new CustomEvent("matomo-has-loaded")), 1000); }; window.addEventListener('init-external-scripts', () => { initMatomo(); }); }())</script><!-- End Matomo Tag Manager --> <div class="page-wrapper"> <style>.cmsb282-block { display: block }</style> <div class="magezon-builder magezon-builder-preload"><div class="f25yc4m mgz-element mgz-element-row pbuilder-top-promo-html-version full_width_row"><div class="mgz-element-inner f25yc4m-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax f25yc4m-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="xpo50wy mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner xpo50wy-s"><div class="j6pog2p mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner j6pog2p-s"><p style="text-align: center;"><a class="amsite-top-promotion-main-banner" title="Go to Special Offers page" href="/amasty-promo.html" data-promo-id="banner_product_pages" data-promo-name="Banner at product pages" data-promo-creative="so_feb25_product_pages"><span style="color: #012644;">Heart to cart ❤️ Enjoy exceptional <strong>Valentine’s Day gifts!</strong> →</span></a></p></div></div></div></div></div></div></div></div><header id="ammenu-header-container" class="ammenu-header-container page-header group"> <div id="header" class="relative max-lg:mb-6 z-30 w-full shadow-md bg-container-white lg:shadow-real-none" x-data="initHeader()" @private-content-loaded.window="getData(event.detail.data)" ><div class="flex flex-wrap lg:flex-nowrap lg:gap-12 2xl:gap-24 max-lg:max-h-[70px] max-w-[1920px] items-center justify-between w-full px-7 py-4 lg:pb-3 lg:pt-9 2xl:px-20 lg:px-7 md:px-5 max-xs:px-6 mx-auto"><!-- Mega menu toggle --> <!-- ko scope: 'index = ammenu_hamburger_toggle' --><!-- ko if: $data.source.isMobile() || false --><span data-ammenu-js="menu-toggle" class="ammenu-menu-toggle -hamburger" title="Toggling menu" aria-controls="ammenu-sidebar" aria-haspopup="menu" data-bind=" style: { color: color_settings.hamburger_icon_color }, event: { click: toggling }, attr: { 'aria-expanded': isOpen().toString(), 'aria-hidden': $data.source.isMobile() ? 'true' : 'false' }, css: { '-active': isOpen() }"><span class="ammenu-icon"></span> <span class="ammenu-icon"></span> <span class="ammenu-icon"></span></span> <!-- /ko --><!-- /ko --> <!--Logo--> <a class="logo flex max-w-[130px] max-xs:max-w-[119px] lg:max-w-fit lg:w-[inherit]" href="https://amasty.com/" title="" aria-label="store logo"><img src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/images/logo.svg" title="" alt="" class="lazy logo-image" width="158" height="40" /></a> <!--Logo--> <!-- Search wrapper --> <div class="main-form-wrapper lg:mt-0 hidden" :class="{ '-active': showOverlay, 'container': !config.isFullScreenMode, 'lg:!block relative w-full order-1 lg:order-[inherit] z-20 mt-4': true, 'max-w-none px-0': isHyvaUiHeader() && isFullWidthSearch, 'px-0': isHyvaUiHeader() && isHorizontalView }" x-data="Object.assign( {amXsearchCarouselComponent}, amXsearchProductsComponent(), amXsearchAutocompleteComponent(), amXsearchAutocompleteHyvaUIHeaderCompat(), )" x-cloak x-init="dynamicLayout($el)"><div x-show="showOverlay" class="max-lg:hidden am-overlay-popup z-20" @click.prevent="closeSearch()" @keydown.window.escape="closeSearch()"></div><div class="form mini-search z-20 relative -mx-[30px] lg:mx-0" :class="{ 'right-0': !isHyvaUiHeader(), 'md:flex md:justify-center': checkHyvaUiHeaderVariant('c') && !isDefaultSearchInput && !isFullWidthSearch }" ><form id="search_mini_form" @submit.prevent="redirect()" action="https://amasty.com/catalogsearch/result/?q=" :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>Search</span></label> <div class="w-full flex align-center justify-center" :style="`max-width: ${!isDefaultSearchInput && !isFullWidthSearch ? searchPopupWidth + 'px' : '100%'}`"><button class="btn-icon absolute z-[21] top-4 left-6 inline-block no-underline hover:text-black lg:right-5 lg:top-2" type="submit" :class="showOverlay || isLoading ? 'lg:right-auto lg:left-4' : 'lg:left-auto'" :disabled="!isProductsShown" aria-label="Open&#x20;search&#x20;page" x-ref="openSearchPageResult" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" class="p-1" aria-hidden="true"> <g id="heroicons-outline/magnifying-glass"> <path id="Vector" d="M21 21L15.8033 15.8033M15.8033 15.8033C17.1605 14.4461 18 12.5711 18 10.5C18 6.35786 14.6421 3 10.5 3C6.35786 3 3 6.35786 3 10.5C3 14.6421 6.35786 18 10.5 18C12.5711 18 14.4461 17.1605 15.8033 15.8033Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> </svg> </button> <input id="search" x-ref="searchInput" maxlength="128" form="search_mini_form" type="search" name="q" autocomplete="off" placeholder="What&#x20;are&#x20;you&#x20;looking&#x20;for&#x3F;" class="!py-4 !px-16 transition appearance-none relative z-20 !h-auto focus:outline-none focus:!border-primary !placeholder-gray-600 focus:!placeholder-transparent lg:!h-10 lg:!px-5 lg:!py-[10px] lg:!rounded-3xl transition-[all]" :class="{ 'lg:!pl-12 lg:!pr-16 lg:!rounded-bl-none lg:!rounded-br-none lg:!bg-container': showOverlay, 'lg:!bg-container-lighter': !showOverlay, 'rounded-tl': isHyvaUiHeader(), 'rounded-tr': !'' && isHyvaUiHeader() }" :style="`width: ${checkHyvaUiHeaderVariant('c') && !isDefaultSearchInput && !isFullWidthSearch ? searchPopupWidth + 'px' : '100%'}`" @focus="doSearch()" @search="checkSearchInput()" @input.debounce.500="doSearch()" x-intersect:enter.once="applyHyvaUiHeaderConfig()" @keydown.arrow-down.prevent="focusElement($el.querySelector('[tabindex]'))"/><button type="button" x-show="showOverlay && !isLoading" class="am-close-popup z-[21] top-4 right-6 lg:top-2 text-secondary hover:text-primary" aria-label="Close&#x20;search" x-on:click="closeSearch(); $refs.searchInput.value = ''" ><svg xmlns="http://www.w3.org/2000/svg" stroke="currentColor" viewBox="0 0 24 24" class="stroke-[1.5]" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <div x-show="isLoading" class="absolute z-[21] top-4 right-6 lg:top-2"><img alt="" src="data:image/gif;base64,R0lGODlhEAALAPQAAP///wAAANra2tDQ0Orq6gYGBgAAAC4uLoKCgmBgYLq6uiIiIkpKSoqKimRkZL6+viYmJgQEBE5OTubm5tjY2PT09Dg4ONzc3PLy8ra2tqCgoMrKyu7u7gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA" /></div></div></form><template x-if="searchInitialized"><div class="w-full top-15 bg-white max-h-[90vh] h-screen lg:h-auto lg:rounded-b-3xl overflow-auto text-sm amsearch-container lg:border lg:border-primary lg:border-t-0" :class="{ '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="`${!isDefaultSearchInput && !isFullWidthSearch ? 'max-width:' + searchPopupWidth + 'px' : ''}; ${!isHorizontalView && checkHyvaUiHeaderVariant('a') ? 'top: 44px; margin-top: 1px;' : ''}`" x-show="!isLoading && showOverlay"><div class="flex w-full content-start flex-wrap box-border relative" :class="{ 'flex-col': isHorizontalView, 'flex-col md:flex-row': !isHorizontalView, }"><div class="md:flex w-full md:border-r px-6 py-5 md:px-7 md:py-6 am-search-sidebar" :class="{ 'border-gray-600 md:hidden': showSideBar(), 'hidden': latestQuery.length < minSearchLength && ( !showOnFirstClick('recentSearches') && !showOnFirstClick('popularSearches') && !showOnFirstClick('browsingHistory') ) || isSidebarSectionsDisabled(), 'am-search-horizontal-view': isHorizontalView, }" x-show="!noResultsFound" > <template x-if=" sections?.blog?.items?.length"><div class="md:w-full" x-show="showHandler('blog')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.blog.title"></h3><div><template x-for="(item, index) in sections.blog.items" :key="index"><div><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="window.BASE_URL + item.url"><span x-html="item.title" class="font-semibold"></span></a> <span class="text-black block mt-1 px-4 block" x-html="item.description"></span></div></template></div></div></div></template> <template x-if=" sections?.faq?.items?.length"><div class="md:w-full" x-show="showHandler('faq')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.faq.title"></h3><template x-for="(item, index) in sections.faq.items" :key="index"><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="window.BASE_URL + item.url" x-html="item.name"></a></template></div></div></template> <template x-if=" sections?.brand?.items?.length"><div class="md:w-full" x-show="showHandler('brand')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.brand.title"></h3><template x-for="(item, index) in sections.brand.items" :key="index"><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="`${BASE_URL + item.url}`" x-html="item.name"></a></template></div></div></template> <template x-if=" sections?.landingPage?.items?.length"><div class="md:w-full" x-show="showHandler('landingPage')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.landingPage.title"></h3><template x-for="(item, index) in sections.landingPage.items" :key="index"><a class="w-full block hover:bg-gray-100 py-2 px-4" :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="md:w-full" x-show="showHandler('products')" x-cloak> <div class="w-full pb-20 md:pb-0 md:pt-5 md:px-7 lg:px-5"><div class="relative flex flex-wrap w-full group" :class="{'without-see-more': sections.products.items?.length === 1}" ><template x-for="(product, index) in (sections.products.items || [])" :key="index"> <div class="flex w-full mb-5 pb-5 border-b group-[.without-see-more]:border-0 group-[.without-see-more]:mb-0 group-[.without-see-more]:pb-0"><div class="hidden md:!block md:pr-5"><a :href="getProductUrl(product)" class="flex justify-center align-center w-[111px] h-[111px] p-3 bg-indigo-100 rounded leading-4" x-ref="amLabelParent" ><img class="lazy hover:shadow-sm object-contain min-w-52" :src="getProductImageUrl(product)" :alt="product.small_image.label" x-ref="amLabelImgParent" width="111" height="111" /> <template x-if="product.product_label?.length > 0"><div class="flex absolute flex-col" style="gap:7px" x-ref="amLabelWrapper"><template x-for="label in product.product_label"><div :class="`amlabel-position-wrapper relative max-w-full h-fit-content w-fit-content flex gap-amlabel-margin z-20${elementStyle}${amLabelStyle}`" :style="`order: ${label.priority}`" x-data="{...initAmlabel_67be1e232daab(), parentContainerProcessor: initParentContainerProcessor(), labelItemProcessor: initLabelItemProcessor()}" x-init="initLabel($el)" x-intersect.once="render()" x-ref="amLabelElement" :data-position="label.frontend_settings.position" :data-size="label.frontend_settings.image_size" :data-wrapper-class="`amlabel-position-${label.frontend_settings.position}-${product.id}-cat`" ><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" @click.prevent="labelRedirect(label.frontend_settings.redirect_url)" :class="`group relative amasty-label-container amasty-label-for-${product.id} amasty-label-container-${label.label_id}-${product.id}-cat`" :style="label.frontend_settings.style" :data-amlabel-order="label.priority" :aria-describedby="'label-tooltip-' + label.label_id"><template x-if="label.tooltip.content?.length > 0"><div :id="'label-tooltip-' + label.label_id" x-ref="tooltip" class="absolute -top-full invisible opacity-0 transition-opacity -translate-x-1/2 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" :style="`background-color: ${label.tooltip.background_color}; border-color: ${label.tooltip.background_color}`" role="tooltip"><span :style="`color: ${label.tooltip.color}`" x-html="label.tooltip.content"></span></div></template><template x-if="label.frontend_settings.label_text"><div class="amlabel-text text-center whitespace-nowrap" :class="{'absolute left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2': label.frontend_settings.image}" x-text="label.frontend_settings.label_text" :style="label.frontend_settings.style"></div></template><template x-if="label.frontend_settings.image"><img :id="`amasty-label-image-${label.label_id}-${product.id}-cat`" class="lazy amasty-label-image opacity-100 align-top h-full" :src="getImgLabelPath(label.frontend_settings.image)" :title="label.frontend_settings.alt_tag" :width="getImageSize()" :alt="label.frontend_settings.alt_tag" /></template></div></div></template></div></template> </a> <template x-if="config.isProductReviewsBlockEnabled"> <template x-if="product.rating_summary !== 0"><div class="mt-1"><div class="flex flex-col"><div class="flex gap-x-2 items-center"><span class="am-text-small font-bold" x-text="product.ratingData.averageRating"></span> <div class="flex"><template x-for="starFilled in product.ratingData.starsFilled"><svg xmlns="http://www.w3.org/2000/svg" class="fill-current w-4 h-4" viewBox="3 0 20 20" :style="`color: ${product.ratingData.yellowHex}`" fill="currentColor"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg></template><template x-if="product.ratingData.starFragment > 0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="3 0 20 20" fill="currentColor" class="w-4 h-4"><defs><linearGradient :id="'partialFill' + product.id"><stop offset="0%" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.ratingData.starFragment * 100 + '%'" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.ratingData.starFragment * 100 + '%'" :stop-color="product.ratingData.greyHex"/><stop offset="100%" :stop-color="product.ratingData.greyHex"/></linearGradient></defs><g :fill="'url(#partialFill' + product.id + ')'"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg></template><template x-for="starEmpty in product.ratingData.starsEmpty"><svg xmlns="http://www.w3.org/2000/svg" class="fill-current w-4 h-4" :style="`color: ${product.ratingData.greyHex}`" viewBox="3 0 20 20" fill="currentColor"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" /></svg></template></div></div><template x-if="product.rating_summary > 0"><a :href="`${getProductUrl(product)}#reviews`" class="am-text-small"><span class="text-sm" x-html="product.reviews_count"></span> reviews</a></template></div></div></template></template></div><div class="product-info flex flex-col grow"><div class="relative items-center justify-center text-primary text-lg pb-2"><a class="link-as-text font-bold amsearch-product-name block text-lg leading-6" x-html="product.name" :href="getProductUrl(product)" :class="{'pr-12': product.hyva_compatible}" ></a> <img x-show="product.hyva_compatible" class="lazy amsite-ignore-lazy-load absolute right-0 -top-5" src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva&#x20;compatibility"></div><div class="am-text-small" x-html="truncateWithDots(product.short_description.html, config.shortDescriptionLength)" ></div><div class="pt-2 flex items-center gap-3"><!-- ordinary m2 product --><template x-if="config.isProductAddToCartBlockEnabled && product.is_salable && !isService(product) && !isCalcurates(product)"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span x-show="isM1(product)" class="type">M1</span> <span x-show="!isM1(product)" class="type">M2</span> <span class="price-wrapper text-white"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span></span></a></template><!-- when m2 product has m1 product --><template x-if="product.opposite_product_data && product.opposite_product_data.is_salable && !isService(product)"><a :href="getProductUrl(product.opposite_product_data)" class="btn btn-primary !px-4 !py-2 !bg-transparent hover:!bg-orange-50 text-primary hover:!text-primary border border-orange-500 leading-4 tracking-basePx min-w-[92px]" ><span x-show="isM1(product.opposite_product_data)" class="type">M1</span> <span x-show="!isM1(product.opposite_product_data)" class="type">M2</span> <span class="price-wrapper text-primary"><span class="price" x-html="hyva.formatPrice(product.opposite_product_data.price_range.minimum_price.final_price.value, false, {maximumFractionDigits: 0})"></span></span></a></template><!-- service without price --><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable_service && isService(product)"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" >See details</a></template><!-- service with price --><template x-if="config.isProductAddToCartBlockEnabled && isService(product) && product.is_salable_service"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span class="price-wrapper text-white"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span></span></a></template><!-- calcurates and Saas --><template x-if="config.isProductAddToCartBlockEnabled && product.is_salable && (isCalcurates(product) || isSaas(product))"><a :href="getProductUrl(product)" class="btn btn-primary flex gap-2 !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" >From <span class="price-wrapper text-white flex"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span>/Month</span></a></template><!-- revising demand --><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable && (isRevisingDemand(product) || isRequestQuote(product))"><a :href="getProductUrl(product)" class="btn btn-primary flex gap-2 !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span class="price-wrapper text-white flex"><span class="amsite-stock-status" x-html="product.custom_stock_status"></span></span></a></template><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable && (!isRevisingDemand(product) && !isRequestQuote(product))"><div class="w-auto justify-center text-sm text-left"><span class="inline-block w-3 h-3 bg-red-500 rounded-full flex-shrink-0"></span> <span class="text-sm text-gray-700 text-left">Out of stock</span></div></template></div></div></div></template></div><div class="pb-6 text-center"><div class="am-search-view-all" x-show="getResultProductsCount() >= 1"><a :href="resultPageUrl + latestQuery" class="link-as-text am-text-small uppercase font-bold">More results <span x-show="getResultProductsCount() > 0">(<span x-text="sections.products.total_count"></span>)</span></a></div></div></div></div></template> <template x-if=" sections?.page?.items?.length"><div class="md:w-full" x-show="showHandler('page')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.page.title"></h3><template x-for="(item, index) in sections.page.items" :key="index"><div><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="`${BASE_URL + item.url}`"><span x-html="item.title" class="font-semibold"></span></a> <span class="text-black block mt-1 px-4 block" x-html="item.description"></span></div></template></div></div></template> <template x-if=" sections?.recentSearches?.items?.length"><div class="md:w-full" x-show="showHandler('recentSearches')" x-cloak> <div class="w-full mb-4 am-search-item-list"><span class="block am-text-caption font-bold uppercase mb-2" x-text="sections.recentSearches.title"></span> <div><template x-for="(searchItem, index) in sections.recentSearches.items" :key="index"><a class="block mb-2 last:mb-0 text-secondary hover:text-primary am-text-small" :href="resultPageUrl + searchItem.name.toLowerCase().replace(/<[^>]*>?/gm, '')" x-html="searchItem.name"></a></template></div></div></div></template> <template x-if=" sections?.category?.items?.length"><div class="md:w-full" x-show="showHandler('category')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.category.title"></h3><template x-for="(item, index) in sections.category.items" :key="index"><div><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="window.BASE_URL + item.url"><span x-html="item.name" class="font-semibold"></span></a> <span class="text-black block mt-1 px-4 block" x-html="item.description" x-show="item.description"></span></div></template></div></div></template> <template x-if=" sections?.popularSearches?.items?.length"><div class="md:w-full" x-show="showHandler('popularSearches')" x-cloak> <div class="w-full mb-4 am-search-item-list"><span class="block am-text-caption font-bold uppercase mb-2" x-text="sections.popularSearches.title"></span> <div><template x-for="(searchItem, index) in sections.popularSearches.items" :key="index"><a class="block mb-2 last:mb-0 text-secondary hover:text-primary am-text-small" :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="md:w-full" x-show="showHandler('browsingHistory')" x-cloak> <div class="w-full mb-4 am-search-item-list"><span class="block am-text-caption font-bold uppercase mb-2" x-text="sections.browsingHistory.title"></span> <div><template x-for="(searchItem, index) in sections.browsingHistory.items" :key="index"><a class="block mb-2 last:mb-0 text-secondary hover:text-primary am-text-small" :href="resultPageUrl + searchItem.name.toLowerCase().replace(/<[^>]*>?/gm, '')" x-html="searchItem.name"></a></template></div></div></div></template></div><div class="relative" :class="{ 'am-search-content': 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, '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 pb-20 md:pb-0 md:pt-5 md:px-7 lg:px-5"><div class="relative flex flex-wrap w-full group" :class="{'without-see-more': sections.products.items?.length === 1}" ><template x-for="(product, index) in (sections.products.items || [])" :key="index"> <div class="flex w-full mb-5 pb-5 border-b group-[.without-see-more]:border-0 group-[.without-see-more]:mb-0 group-[.without-see-more]:pb-0"><div class="hidden md:!block md:pr-5"><a :href="getProductUrl(product)" class="flex justify-center align-center w-[111px] h-[111px] p-3 bg-indigo-100 rounded leading-4" x-ref="amLabelParent" ><img class="lazy hover:shadow-sm object-contain min-w-52" :src="getProductImageUrl(product)" :alt="product.small_image.label" x-ref="amLabelImgParent" width="111" height="111" /> <template x-if="product.product_label?.length > 0"><div class="flex absolute flex-col" style="gap:7px" x-ref="amLabelWrapper"><template x-for="label in product.product_label"><div :class="`amlabel-position-wrapper relative max-w-full h-fit-content w-fit-content flex gap-amlabel-margin z-20${elementStyle}${amLabelStyle}`" :style="`order: ${label.priority}`" x-data="{...initAmlabel_67be1e232dc85(), parentContainerProcessor: initParentContainerProcessor(), labelItemProcessor: initLabelItemProcessor()}" x-init="initLabel($el)" x-intersect.once="render()" x-ref="amLabelElement" :data-position="label.frontend_settings.position" :data-size="label.frontend_settings.image_size" :data-wrapper-class="`amlabel-position-${label.frontend_settings.position}-${product.id}-cat`" ><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" @click.prevent="labelRedirect(label.frontend_settings.redirect_url)" :class="`group relative amasty-label-container amasty-label-for-${product.id} amasty-label-container-${label.label_id}-${product.id}-cat`" :style="label.frontend_settings.style" :data-amlabel-order="label.priority" :aria-describedby="'label-tooltip-' + label.label_id"><template x-if="label.tooltip.content?.length > 0"><div :id="'label-tooltip-' + label.label_id" x-ref="tooltip" class="absolute -top-full invisible opacity-0 transition-opacity -translate-x-1/2 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" :style="`background-color: ${label.tooltip.background_color}; border-color: ${label.tooltip.background_color}`" role="tooltip"><span :style="`color: ${label.tooltip.color}`" x-html="label.tooltip.content"></span></div></template><template x-if="label.frontend_settings.label_text"><div class="amlabel-text text-center whitespace-nowrap" :class="{'absolute left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2': label.frontend_settings.image}" x-text="label.frontend_settings.label_text" :style="label.frontend_settings.style"></div></template><template x-if="label.frontend_settings.image"><img :id="`amasty-label-image-${label.label_id}-${product.id}-cat`" class="lazy amasty-label-image opacity-100 align-top h-full" :src="getImgLabelPath(label.frontend_settings.image)" :title="label.frontend_settings.alt_tag" :width="getImageSize()" :alt="label.frontend_settings.alt_tag" /></template></div></div></template></div></template> </a> <template x-if="config.isProductReviewsBlockEnabled"> <template x-if="product.rating_summary !== 0"><div class="mt-1"><div class="flex flex-col"><div class="flex gap-x-2 items-center"><span class="am-text-small font-bold" x-text="product.ratingData.averageRating"></span> <div class="flex"><template x-for="starFilled in product.ratingData.starsFilled"><svg xmlns="http://www.w3.org/2000/svg" class="fill-current w-4 h-4" viewBox="3 0 20 20" :style="`color: ${product.ratingData.yellowHex}`" fill="currentColor"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg></template><template x-if="product.ratingData.starFragment > 0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="3 0 20 20" fill="currentColor" class="w-4 h-4"><defs><linearGradient :id="'partialFill' + product.id"><stop offset="0%" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.ratingData.starFragment * 100 + '%'" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.ratingData.starFragment * 100 + '%'" :stop-color="product.ratingData.greyHex"/><stop offset="100%" :stop-color="product.ratingData.greyHex"/></linearGradient></defs><g :fill="'url(#partialFill' + product.id + ')'"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg></template><template x-for="starEmpty in product.ratingData.starsEmpty"><svg xmlns="http://www.w3.org/2000/svg" class="fill-current w-4 h-4" :style="`color: ${product.ratingData.greyHex}`" viewBox="3 0 20 20" fill="currentColor"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" /></svg></template></div></div><template x-if="product.rating_summary > 0"><a :href="`${getProductUrl(product)}#reviews`" class="am-text-small"><span class="text-sm" x-html="product.reviews_count"></span> reviews</a></template></div></div></template></template></div><div class="product-info flex flex-col grow"><div class="relative items-center justify-center text-primary text-lg pb-2"><a class="link-as-text font-bold amsearch-product-name block text-lg leading-6" x-html="product.name" :href="getProductUrl(product)" :class="{'pr-12': product.hyva_compatible}" ></a> <img x-show="product.hyva_compatible" class="lazy amsite-ignore-lazy-load absolute right-0 -top-5" src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva&#x20;compatibility"></div><div class="am-text-small" x-html="truncateWithDots(product.short_description.html, config.shortDescriptionLength)" ></div><div class="pt-2 flex items-center gap-3"><!-- ordinary m2 product --><template x-if="config.isProductAddToCartBlockEnabled && product.is_salable && !isService(product) && !isCalcurates(product)"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span x-show="isM1(product)" class="type">M1</span> <span x-show="!isM1(product)" class="type">M2</span> <span class="price-wrapper text-white"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span></span></a></template><!-- when m2 product has m1 product --><template x-if="product.opposite_product_data && product.opposite_product_data.is_salable && !isService(product)"><a :href="getProductUrl(product.opposite_product_data)" class="btn btn-primary !px-4 !py-2 !bg-transparent hover:!bg-orange-50 text-primary hover:!text-primary border border-orange-500 leading-4 tracking-basePx min-w-[92px]" ><span x-show="isM1(product.opposite_product_data)" class="type">M1</span> <span x-show="!isM1(product.opposite_product_data)" class="type">M2</span> <span class="price-wrapper text-primary"><span class="price" x-html="hyva.formatPrice(product.opposite_product_data.price_range.minimum_price.final_price.value, false, {maximumFractionDigits: 0})"></span></span></a></template><!-- service without price --><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable_service && isService(product)"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" >See details</a></template><!-- service with price --><template x-if="config.isProductAddToCartBlockEnabled && isService(product) && product.is_salable_service"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span class="price-wrapper text-white"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span></span></a></template><!-- calcurates and Saas --><template x-if="config.isProductAddToCartBlockEnabled && product.is_salable && (isCalcurates(product) || isSaas(product))"><a :href="getProductUrl(product)" class="btn btn-primary flex gap-2 !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" >From <span class="price-wrapper text-white flex"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span>/Month</span></a></template><!-- revising demand --><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable && (isRevisingDemand(product) || isRequestQuote(product))"><a :href="getProductUrl(product)" class="btn btn-primary flex gap-2 !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span class="price-wrapper text-white flex"><span class="amsite-stock-status" x-html="product.custom_stock_status"></span></span></a></template><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable && (!isRevisingDemand(product) && !isRequestQuote(product))"><div class="w-auto justify-center text-sm text-left"><span class="inline-block w-3 h-3 bg-red-500 rounded-full flex-shrink-0"></span> <span class="text-sm text-gray-700 text-left">Out of stock</span></div></template></div></div></div></template></div><div class="pb-6 text-center"><div class="am-search-view-all" x-show="getResultProductsCount() >= 1"><a :href="resultPageUrl + latestQuery" class="link-as-text am-text-small uppercase font-bold">More results <span x-show="getResultProductsCount() > 0">(<span x-text="sections.products.total_count"></span>)</span></a></div></div></div></template><div class="px-6 py-5" x-show="noResultsFound && !errorMessage" x-cloak><div class="am-text-small text-secondary" x-html="'Your search returned no results'"</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></template></div></div> <div class="flex items-center header-icons-container group-[.page-header.-sticky]:lg:fixed group-[.page-header.-sticky]:lg:top-6 group-[.page-header.-sticky]:lg:right-8 group-[.page-header.-sticky]:2xl:right-20"><!-- Authorization link --> <nav class="am-authorization-link hidden lg:!block" aria-labelledby="customer-menu" ><a href="https://amasty.com/customer/account/index/" class="flex p-1 text-primary hover:text-primary hover:bg-gray-50" aria-label="Log&#x20;in" ><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="mr-1" role="img"> <g id="heroicons-outline/user-circle"> <path id="Vector_2" d="M17.9815 18.7248C16.6121 16.9175 14.4424 15.75 12 15.75C9.55761 15.75 7.38789 16.9175 6.01846 18.7248M17.9815 18.7248C19.8335 17.0763 21 14.6744 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 14.6744 4.1665 17.0763 6.01846 18.7248M17.9815 18.7248C16.3915 20.1401 14.2962 21 12 21C9.70383 21 7.60851 20.1401 6.01846 18.7248M15 9.75C15 11.4069 13.6569 12.75 12 12.75C10.3431 12.75 9 11.4069 9 9.75C9 8.09315 10.3431 6.75 12 6.75C13.6569 6.75 15 8.09315 15 9.75Z" stroke="#030712" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>user-circle</title></svg> <span class="whitespace-nowrap">Log in</span></a></nav> <!--Search Icon--><button id="menu-search-icon" class="btn-icon inline-block ml-1 no-underline sm:ml-3 hover:text-black lg:hidden group-[.page-header.-sticky]:lg:block" @click.prevent="searchOpen = !searchOpen;" aria-label="Toggle&#x20;search&#x20;form" x-on:set-search-open-status.window="searchOpen = event.detail" aria-haspopup="true" :aria-expanded="searchOpen" x-ref="searchButton" ><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="p-1" aria-hidden="true"> <g id="heroicons-outline/magnifying-glass_2"> <path id="Vector_3" d="M21 21L15.8033 15.8033M15.8033 15.8033C17.1605 14.4461 18 12.5711 18 10.5C18 6.35786 14.6421 3 10.5 3C6.35786 3 3 6.35786 3 10.5C3 14.6421 6.35786 18 10.5 18C12.5711 18 14.4461 17.1605 15.8033 15.8033Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> </svg> </button> <!-- Currency --> <nav class="am-currency-link relative hidden lg:!block mx-5" x-data="initCurrencySwitcher()" @keyup.escape="open = false"><button type="button" id="currency-menu" class="flex items-center p-1 !bg-transparent !text-primary tracking-basePx hover:!bg-gray-50" @click="open = !open" @click.outside="open = false" :aria-expanded="open ? 'true' : 'false'" aria-label="My&#x20;Account" aria-haspopup="true" ><template x-if="currentCurrencyCode === 'USD'"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" role="img"> <g id="heroicons-outline/currency-dollar"> <path id="Vector_4" d="M12 6V18M9 15.1818L9.87887 15.841C11.0504 16.7197 12.9498 16.7197 14.1214 15.841C15.2929 14.9623 15.2929 13.5377 14.1214 12.659C13.5355 12.2196 12.7677 12 11.9999 12C11.275 12 10.5502 11.7804 9.99709 11.341C8.891 10.4623 8.891 9.03772 9.9971 8.15904C11.1032 7.28036 12.8965 7.28036 14.0026 8.15904L14.4175 8.48863M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>currency/currency-dollar</title></svg> </template><template x-if="currentCurrencyCode === 'EUR'"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" role="img"> <g id="heroicons-outline/currency-euro"> <path id="Vector_5" d="M14.25 7.75625C12.667 7.19798 10.8341 7.5519 9.56802 8.81802C7.81066 10.5754 7.81066 13.4246 9.56802 15.182C10.8341 16.4481 12.667 16.802 14.25 16.2437M7.5 10.5H12.75M7.5 13.5H12.75M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>currency/currency-euro</title></svg> </template><template x-if="currentCurrencyCode === 'GBP'"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" role="img"> <g id="heroicons-outline/currency-pound"> <path id="Vector_6" d="M14.1213 7.62877C12.9497 6.45719 11.0503 6.45719 9.87868 7.62877C9.37424 8.13321 9.08699 8.7726 9.01694 9.43073C8.9944 9.64251 9.01512 9.85582 9.04524 10.0667L9.5512 13.6084C9.68065 14.5146 9.5307 15.4386 9.12135 16.2573L9 16.5L10.5385 15.9872C11.0003 15.8332 11.4997 15.8332 11.9615 15.9872L12.6158 16.2053C13.182 16.394 13.7999 16.3501 14.3336 16.0832L15 15.75M8.25 12H12M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>currency/currency-pound</title></svg> </template><span class="ml-1" x-text="currentCurrencyCode"></span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </button> <nav class="*:border-sky-100 absolute right-0 z-20 p-1 border rounded min-w-[160px] mt-2 -mr-4 px-1 overflow-auto shadow-lg lg:mt-3 bg-white" x-cloak x-show="open" aria-labelledby="currency-menu" @click.outside="open = false" > <a class="am-text-small bold !text-primary block px-2 py-1 hover:bg-gray-50" href="#" :class="{ 'font-bold': currentCurrencyCode === 'USD'}" aria-label="Switch&#x20;Currency" data-post='{"action":"https:\/\/amasty.com\/directory\/currency\/switch\/","data":{"currency":"USD"}}'>US Dollar - USD</a> <a class="am-text-small bold !text-primary block px-2 py-1 hover:bg-gray-50" href="#" :class="{ 'font-bold': currentCurrencyCode === 'EUR'}" aria-label="Switch&#x20;Currency" data-post='{"action":"https:\/\/amasty.com\/directory\/currency\/switch\/","data":{"currency":"EUR"}}'>Euro - EUR</a> <a class="am-text-small bold !text-primary block px-2 py-1 hover:bg-gray-50" href="#" :class="{ 'font-bold': currentCurrencyCode === 'GBP'}" aria-label="Switch&#x20;Currency" data-post='{"action":"https:\/\/amasty.com\/directory\/currency\/switch\/","data":{"currency":"GBP"}}'>British Pound - GBP</a> </nav></nav><script data-info="not-move-to-bottom"> function initCurrencySwitcher() { "use strict"; const currentCurrencyCode = 'USD'; return { open: false, currentCurrencyCode: '', init() { this.getCurrencyCode(); }, getCurrencyCode () { this.currentCurrencyCode = currentCurrencyCode; } } }</script> <!--Cart --><div class="relative -top-0.5"> <button id="menu-cart-icon" class="btn-icon relative inline-block no-underline hover:text-black" x-ref="cartButton" data-amtheme-js="minicart" :aria-disabled="isCartEmpty()" title="Cart" @click.prevent.stop="openShoppingCart()" @toggle-cart.window="toggleCart($event)" @mouseenter.prevent.stop="() => {$dispatch('toggle-cart', { isOpen: true })}" @mouseleave.prevent.stop="() => {$dispatch('close-cart-with-delay')}" :aria-expanded="isCartOpen" aria-haspopup="dialog" data-href="https://amasty.com/checkout/cart/" ><span class="sr-only label" x-text="` View cart, ${isCartEmpty() ? 'Cart is empty' : 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 24 24" fill="none" role="img"> <g id="heroicons-outline/shopping-bag"> <path id="Vector_7" d="M15.7505 10.5V6C15.7505 3.92893 14.0716 2.25 12.0005 2.25C9.92942 2.25 8.25048 3.92893 8.25048 6V10.5M19.6065 8.50723L20.8697 20.5072C20.9396 21.1715 20.4188 21.75 19.7508 21.75H4.25012C3.58221 21.75 3.06138 21.1715 3.1313 20.5072L4.39446 8.50723C4.45473 7.93466 4.93755 7.5 5.51328 7.5H18.4877C19.0634 7.5 19.5462 7.93466 19.6065 8.50723ZM8.62548 10.5C8.62548 10.7071 8.45759 10.875 8.25048 10.875C8.04338 10.875 7.87548 10.7071 7.87548 10.5C7.87548 10.2929 8.04338 10.125 8.25048 10.125C8.45759 10.125 8.62548 10.2929 8.62548 10.5ZM16.1255 10.5C16.1255 10.7071 15.9576 10.875 15.7505 10.875C15.5434 10.875 15.3755 10.7071 15.3755 10.5C15.3755 10.2929 15.5434 10.125 15.7505 10.125C15.9576 10.125 16.1255 10.2929 16.1255 10.5Z" stroke="#030712" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>shopping-bag</title></svg> <span x-cloak class="absolute -bottom-[2px] -right-[7px] h-[15px] min-w-[15px] text-xs rounded-full font-bold" :class="isCartEmpty() ? 'bg-gray-200 text-primary' : 'bg-rose-500 text-white'" aria-hidden="true" x-show="cart.summary_count !== undefined" ><span x-text="cart.summary_count" class="px-[2px] tracking-normal" ></span></span></button> <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)" @close-cart-with-delay.window="closeCartWithDelay($event)" @keydown.escape="closeCartDrawer" ><div role="dialog" aria-labelledby="cart-drawer-title" aria-modal="true" :aria-hidden="!open" class="absolute top-8 right-0 z-30 flex"><div class="relative w-screen max-w-[363px] max-h-0 rounded shadow-xl transition-maxHeight overflow-hidden duration-300 ease-linear" :class="{'max-h-screen': open}" @mouseenter.prevent.stop="isGlobalOpen = true" @mouseleave.prevent.stop="closeCartWithDelay()" x-show="open" x-transition:enter-start="!max-h-0" x-transition:enter-end="!max-h-screen" x-transition:leave-start="!max-h-screen" x-transition:leave-end="!max-h-0" x-ref="cartDialogContent" role="region" :tabindex="open ? 0 : -1" aria-label="My&#x20;Cart" ><div class="flex flex-col border rounded bg-white" x-show="itemsCount"><template x-if="itemsCount"><div class="relative grid gap-2 max-h-[50vh] overflow-y-auto pt-5 px-5" ><div class="hidden bg-gray-100 text-center py-3" data-amsite-js="removeBlock">Item deleted</div><template x-for="item in cartItems"><div class="border-b last:border-0 last:pb-5" :data-amsite-js="item.item_id"><div class="relative flex flex-col items-start pb-3" data-amsite-js="item-main-block"><div class="flex items-center min-h-9 gap-3 justify-between w-full"><template x-if="item.product_has_url"><a :href="item.product_url" x-html="item.product_name" class="link-as-text font-bold" :aria-label="hyva.strf('Product\u0020\u0022\u00250\u0022', item.product_name)" ></a></template><template x-if="!item.product_has_url"><span x-html="item.product_name" class="font-bold"></span></template><button type="button" class="btn-icon hover:text-secondary focus:text-secondary inline-flex -mr-2 px-2" @delete-item-from-cart-called-outside.window="deleteItemFromCart($event.detail.item, $event.detail.target)" @click="item.is_transfered || item.is_lp_free_gift ? $dispatch('minicart-popup-show-notification', {detail: {item, $el}}) : deleteItemFromCart(item, $event.target)" :aria-label="hyva.strf('Remove\u0020product\u0020\u0022\u00250\u0022\u0020from\u0020cart', item.product_name)" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="20" height="20" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/></svg> </button></div><!-- conventional products --><template x-if="item.product_type !== 'virtual'"><template x-for="option in item.options"><div class="pt-1 am-text-caption text-secondary"><span x-text="option.label + ':'"></span> <span x-html="option.value"></span></div></template></template><!-- support subscriptions--><template x-if="item.product_type === 'virtual'"><ul class="ul-reset pt-1 am-text-caption text-secondary minicart-subscription-options"><template x-if="item.subscription_type"><li> <span>Subscription type:</span> <span x-html="item.subscription_type"></span></li></template><template x-if="item.partner_level"><li> <span>Partner level:</span> <span x-html="item.partner_level"></span></li></template><template x-if="item.product_trial"><li> <span>Free trial:</span> <span x-html="item.product_trial + ' days'"></span></li></template><template x-if="item.product_subscription_start_date"><li> <span>Start date:</span> <span x-html="item.product_subscription_start_date"></span></li></template><template x-if="item.product_subscription_version === 'Pro' || item.product_subscription_version === 'Premium' || item.product_subscription_version === 'Amasty One'"><li> <span class="block mb-2">Additional options:</span> <span x-html="getAdditionalOptions(item)"></span></li></template></ul></template><p class="m-0 pt-2" >1 x <template x-if="item.subscription_product_price"><span x-html="hyva.formatPrice(item.subscription_product_price, false, {maximumFractionDigits: 0})"></span></template><template x-if="!item.subscription_product_price"><span x-html="item.product_price"></span></template></p></div></div></template></div></template><template x-if="itemsCount"><div class="rounded"><div class="relative grid py-3 pb-6 px-5 bg-container-lighter"><div class="text-right"><p class="m-0">Subtotal <span class="text-right inline-block min-w-24" x-html="cart.subtotal"></span></p><template x-if="cart.discounts.length"><template x-for="discount in cart.discounts"><template x-if="discount.value"><p class="m-0"><span class="inline-flex flex-col leading-4"><span> Discount</span> <span class="text-secondary" x-html="discount.name"></span></span> <span class="text-right inline-block min-w-24" x-html="discount.amount"></span></p></template></template></template><template x-if="cart.storecredit.length"><template x-for="credit in cart.storecredit"><template x-if="credit.value"><p class="m-0"><span x-html="credit.name"></span> <span class="text-right inline-block min-w-24" x-html="credit.amount"></span></p></template></template></template><template x-if="cart.taxes.length"><template x-for="tax in cart.taxes"><template x-if="tax.value"><p class="m-0"><span x-html="tax.name"></span> <span class="text-right inline-block min-w-24" x-html="tax.amount"></span></p></template></template></template><p class="m-0 font-bold">Grand Total <span class="text-right inline-block min-w-24" x-html="cart.grand_total[0].amount"></span></p></div><div class="flex justify-between items-center mt-5"><a href="https://amasty.com/checkout/cart/" class="btn btn-as-text ml-5" data-metrics-element="mini-cart-view-cart" aria-label="View&#x20;Cart" >View Cart</a> <a href="https://amasty.com/checkout/" class="btn btn-primary" data-metrics-element="mini-cart-view-checkout" aria-label="Checkout" >Checkout</a></div></div></div></template></div> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></section> <div x-data="Object.assign({}, hyva.modal(), AmMiniCartPopupNotification())" x-on:minicart-popup-show-notification.window="showNotification($event.detail)" > <div x-cloak x-bind="overlay('minicart-popup-notification')" x-spread="overlay('minicart-popup-notification')" class="am-overlay-popup"><div class="am-container-popup inset-0"><div x-ref="minicart-popup-notification" role="dialog" aria-modal="true" class="am-dialog-popup max-w-[480px]"> <div class="text-center"><button type="button" class="am-close-popup" aria-label="Close" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <div class="text-4xl">⚠️</div><div class="mt-5 mb-7" x-ref="minicartNotificationContent"></div><div><button class="btn btn-primary !mr-7" x-on:click="$dispatch('delete-item-from-cart-called-outside', {item, target})" >Yes, delete it</button> <button class="btn btn-as-text" x-on:click="hide()" aria-label="Close" >No, keep it</button></div></div></div></div></div></div></div></div></div></div><div data-amsite-js="fake-empty-block-for-sticky-menu" class="hidden h-16"></div> <section class="ammenu-robots-navigation"><nav class="navigation" data-action="navigation" aria-disabled="true" aria-hidden="true" tabindex="-1"><ul aria-disabled="true" aria-hidden="true"> <li class="category-item nav-0" role="presentation"><a href="https://amasty.com/magento-2-extensions.html" tabindex="-1" title="Magento&#x20;2&#x20;Extensions">Magento 2 Extensions</a> <ul class="submenu"> <li class="category-item nav-0-0" role="presentation"><a href="https://amasty.com/hyva-theme-extensions-for-magento-2.html" tabindex="-1" title="Hyva&#x20;Theme&#x20;Extensions">Hyva Theme Extensions</a> </li> <li class="category-item nav-0-1" role="presentation"><a href="https://amasty.com/hyva-checkout-ready-extensions-for-magento-2.html" tabindex="-1" title="Hyva&#x20;Checkout&#x20;Ready">Hyva Checkout Ready</a> </li> <li class="category-item nav-0-2" role="presentation"><a href="https://amasty.com/usability-navigation-extensions-for-magento-2.html" tabindex="-1" title="Navigation&#x20;&amp;&#x20;Search">Navigation &amp; Search</a> </li> <li class="category-item nav-0-3" role="presentation"><a href="https://amasty.com/catalog-management-extensions-for-magento-2.html" tabindex="-1" title="Catalog&#x20;Management">Catalog Management</a> </li> <li class="category-item nav-0-4" role="presentation"><a href="https://amasty.com/checkout-extensions-for-magento-2.html" tabindex="-1" title="Checkout">Checkout</a> </li> <li class="category-item nav-0-5" role="presentation"><a href="https://amasty.com/law-based-extensions-for-magento-2.html" tabindex="-1" title="Law-Based&#x20;Extensions">Law-Based Extensions</a> </li> <li class="category-item nav-0-6" role="presentation"><a href="https://amasty.com/shipping-extensions-for-magento-2.html" tabindex="-1" title="Shipping">Shipping</a> </li> <li class="category-item nav-0-7" role="presentation"><a href="https://amasty.com/seo-optimization-extensions-for-magento-2.html" tabindex="-1" title="SEO">SEO</a> </li> <li class="category-item nav-0-8" role="presentation"><a href="https://amasty.com/promotions-extensions-for-magento-2.html" tabindex="-1" title="Promotions">Promotions</a> </li> <li class="category-item nav-0-9" role="presentation"><a href="https://amasty.com/images-media-extensions-for-magento-2.html" tabindex="-1" title="Images&#x20;&amp;&#x20;Media">Images &amp; Media</a> </li> <li class="category-item nav-0-10" role="presentation"><a href="https://amasty.com/administration-extensions-for-magento-2.html" tabindex="-1" title="Administration">Administration</a> </li> <li class="category-item nav-0-11" role="presentation"><a href="https://amasty.com/b2b-extensions-for-magento-2.html" tabindex="-1" title="B2B&#x20;Products">B2B Products</a> </li> <li class="category-item nav-0-12" role="presentation"><a href="https://amasty.com/ai-extensions-for-magento-2.html" tabindex="-1" title="AI-Powered&#x20;Extensions">AI-Powered Extensions</a> </li> <li class="category-item nav-0-13" role="presentation"><a href="https://amasty.com/free-magento-2-extensions.html" tabindex="-1" title="Free&#x20;Magento&#x20;2&#x20;Extensions">Free Magento 2 Extensions</a> </li> <li class="category-item nav-0-14" role="presentation"><a href="https://amasty.com/contacts" tabindex="-1" title="Support&#x20;Packs">Support Packs</a> </li> <li class="category-item nav-0-15" role="presentation"><a href="https://amasty.com/research-product-demand.html" tabindex="-1" title="Research&#x20;Product&#x20;Demand">Research Product Demand</a> </li> <li class="category-item nav-0-16" role="presentation"><a href="https://trello.com/b/mGKdSV3a/%F0%9F%9A%A9-amasty-product-roadmap-%F0%9F%9A%A9" tabindex="-1" title="Public&#x20;Roadmap">Public Roadmap</a> </li> </ul></li> <li class="category-item nav-1" role="presentation"><a href="https://amasty.com/magento-2-solutions.html" tabindex="-1" title="Suites">Suites</a> <ul class="submenu"> <li class="category-item nav-1-0" role="presentation"><a href="https://amasty.com/hyva-solutions-for-magento-2.html" tabindex="-1" title="Hyva&#x20;Solutions">Hyva Solutions</a> </li> <li class="category-item nav-1-1" role="presentation"><a href="https://amasty.com/usability-navigation-solutions-for-magento-2.html" tabindex="-1" title="Enhanced&#x20;Navigation">Enhanced Navigation</a> </li> <li class="category-item nav-1-2" role="presentation"><a href="https://amasty.com/packs-for-magento-2.html" tabindex="-1" title="Packs">Packs</a> </li> <li class="category-item nav-1-3" role="presentation"><a href="https://amasty.com/suites-for-magento-2.html" tabindex="-1" title="Suites">Suites</a> </li> <li class="category-item nav-1-4" role="presentation"><a href="https://amasty.com/sales-and-marketing-solutions-for-magento-2.html" tabindex="-1" title="Sales&#x20;&amp;&#x20;Marketing">Sales &amp; Marketing</a> </li> <li class="category-item nav-1-5" role="presentation"><a href="https://amasty.com/user-experience-solutions-for-magento-2.html" tabindex="-1" title="User&#x20;Experience">User Experience</a> </li> <li class="category-item nav-1-6" role="presentation"><a href="https://amasty.com/order-management-solutions-for-magento-2.html" tabindex="-1" title="Order&#x20;Management">Order Management</a> </li> </ul></li> <li class="category-item nav-2" role="presentation"><a href="https://amasty.com/contacts/" tabindex="-1" title="Support">Support</a> </li> <li class="category-item nav-3" role="presentation"><a href="https://amasty.com/magento-services.html" tabindex="-1" title="Services">Services</a> <ul class="submenu"> <li class="category-item nav-3-0" role="presentation"><a href="https://amasty.com/magento-development-services.html" tabindex="-1" title="High-Demand&#x20;Services">High-Demand Services</a> </li> <li class="category-item nav-3-1" role="presentation"><a href="https://amasty.com/magento-development-services.html" tabindex="-1" title="Magento&#x20;Development&#x20;Services">Magento Development Services</a> </li> <li class="category-item nav-3-2" role="presentation"><a href="https://amasty.com/magento-hyva-theme-development-service.html" tabindex="-1" title="Hyva&#x20;Development&#x20;Services">Hyva Development Services</a> </li> <li class="category-item nav-3-3" role="presentation"><a href="https://amasty.com/magento-optimization-service.html" tabindex="-1" title="Magento&#x20;Optimization&#x20;Services">Magento Optimization Services</a> </li> <li class="category-item nav-3-4" role="presentation"><a href="https://amasty.com/magento-2-support-and-maintenance-service.html" tabindex="-1" title="Magento&#x20;Maintenance&#x20;Services">Magento Maintenance Services</a> </li> <li class="category-item nav-3-5" role="presentation"><a href="https://amasty.com/magento-2-upgrade-service.html" tabindex="-1" title="Magento&#x20;Upgrade&#x20;Services">Magento Upgrade Services</a> </li> <li class="category-item nav-3-6" role="presentation"><a href="https://amasty.com/magento-integration-service.html" tabindex="-1" title="Magento&#x20;Integration&#x20;Services">Magento Integration Services</a> </li> <li class="category-item nav-3-7" role="presentation"><a href="https://amasty.com/managed-it-service.html" tabindex="-1" title="Managed&#x20;Services">Managed Services</a> </li> <li class="category-item nav-3-8" role="presentation"><a href="https://amasty.com/shopify-website-development-service.html" tabindex="-1" title="Shopify&#x20;Services">Shopify Services</a> </li> <li class="category-item nav-3-9" role="presentation"><a href="https://amasty.com/magento-services.html" tabindex="-1" title="E-Commerce&#x20;Services">E-Commerce Services</a> </li> <li class="category-item nav-3-10" role="presentation"><a href="https://amasty.com/qa-testing-services.html" tabindex="-1" title="QA&#x20;Testing&#x20;Services">QA Testing Services</a> </li> <li class="category-item nav-3-11" role="presentation"><a href="https://amasty.com/hire-developers.html" tabindex="-1" title="Hire&#x20;Developers">Hire Developers</a> </li> </ul></li> <li class="category-item nav-4" role="presentation"><a href="https://amasty.com/shopify-apps.html" tabindex="-1" title="Shopify&#x20;Apps">Shopify Apps</a> </li> <li class="category-item nav-5" role="presentation"><a href="https://amasty.com/amasty-promo.html" tabindex="-1" title="Special&#x20;Offers">Special Offers</a> </li> <li class="category-item nav-6" role="presentation"><a href="https://amasty.com/amasty-loyalty-program.html" tabindex="-1" title="Loyalty&#x20;Programs">Loyalty Programs</a> </li> <li class="category-item nav-7" role="presentation"><a href="https://amasty.com/blog/" tabindex="-1" title="Blog">Blog</a> </li> <li class="category-item nav-8" role="presentation"><a href="https://amasty.com/knowledge-base/" tabindex="-1" title="FAQ">FAQ</a> </li> </ul></nav></section> <section class="ammenu-menu-wrapper" data-nosnippet data-bind=" scope: 'ammenu_wrapper', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_wrapper': { component: 'Amasty_MegaMenuLite/js/wrapper', data: {&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:700,&quot;mobile_font&quot;:700,&quot;elems&quot;:[{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:&quot;&lt;div class=\&quot;ammenu-view-all-mobile-link\&quot;&gt;\r\n &lt;a class=\&quot;ammenu-link view-all\&quot;\r\n href=\&quot;\/magento-2-extensions.html\&quot;\r\n aria-label=\&quot;Go to All Magento 2 Extensions\&quot;\r\n title=\&quot;Go to All Magento 2 Extensions\&quot;\r\n role=\&quot;link\&quot;\r\n tabindex=\&quot;0\&quot;\r\n &gt;\r\n All Magento 2 Extensions\r\n &lt;\/a&gt;\r\n&lt;\/div&gt;\r\n\r\n &lt;div class=\&quot;ammenu-widget-wrapper block widget mega-menu-products-list\&quot; data-amsite-js=\&quot;top-product-widget\&quot;&gt; &lt;div class=\&quot;block-title\&quot;&gt;Popular right now&lt;\/div&gt; &lt;div class=\&quot;block-content\&quot;&gt;&lt;ul class=\&quot;widget-product-items\&quot;&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/cookie-consent-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Cookie&#x20;Consent&#x20;&#x28;GDPR&#x29;\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/c\/o\/cookie-consent-for-magento-2_6253b4c79f9ab.png\&quot; alt=\&quot;Cookie Consent (GDPR) for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Cookie Consent (GDPR)&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Improved&#x20;Layered&#x20;Navigation\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/m\/improved-layered-navigation-for-magento-2_5.png\&quot; alt=\&quot;Improved Layered Navigation for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;amasty-label-container amasty-label-container-13-506-cat amasty-label-for-506\&quot; style=\&quot;display: none; width:111px;\&quot; data-mage-init=&#039;{\&quot;Amasty_Label\/js\/initLabel\&quot;:{ \&quot;mode\&quot;: \&quot;cat\&quot;, \&quot;isAdminArea\&quot;: \&quot;\&quot;, \&quot;config\&quot;: {\&quot;position\&quot;:\&quot;top-center\&quot;,\&quot;size\&quot;:\&quot;\&quot;,\&quot;path\&quot;:\&quot;.product-image-container, .product-item-photo, .cdz-product-top\&quot;,\&quot;mode\&quot;:\&quot;prod\&quot;,\&quot;move\&quot;:0,\&quot;product\&quot;:\&quot;506\&quot;,\&quot;label\&quot;:13,\&quot;margin\&quot;:7,\&quot;alignment\&quot;:0,\&quot;order\&quot;:5,\&quot;redirect_url\&quot;:\&quot;\&quot;,\&quot;tooltip\&quot;:{\&quot;backgroundColor\&quot;:\&quot;\&quot;,\&quot;color\&quot;:\&quot;\&quot;,\&quot;status\&quot;:1,\&quot;content\&quot;:\&quot;\&quot;}}, \&quot;productId\&quot;: \&quot;506\&quot;, \&quot;selector\&quot;: \&quot;.amasty-label-container-13-506-cat\&quot; }}&#039;&gt;&lt;div class=\&quot;amlabel-text\&quot;&gt;&lt;\/div&gt; &lt;img id=\&quot;amasty-label-image-13-506-cat\&quot; class=\&quot;amasty-label-image\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\&quot; style=\&quot;opacity: 1 !important;vertical-align: top;\&quot; title=\&quot;Improved&#x20;Layered&#x20;Navigation&#x20;for&#x20;Magento&#x20;2\&quot; alt=\&quot;Improved&#x20;Layered&#x20;Navigation&#x20;for&#x20;Magento&#x20;2\&quot; &gt;&lt;\/div&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Improved Layered Navigation&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/google-tag-manager-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Google&#x20;Analytics&#x20;4&#x20;with&#x20;GTM&#x20;Support\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon-google-tag-manager-for-magento-2.png\&quot; alt=\&quot;Google Analytics 4 with GTM Support for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Google Analytics 4 with GTM Support&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;\/ul&gt;&lt;\/div&gt; &lt;a href=\&quot;\/featured-extensions-for-magento-2.html\&quot; class=\&quot;block-link-below\&quot; tabindex=\&quot;0\&quot; title=\&quot;View&#x20;All&#x20;BestSellers\&quot;&gt;View All BestSellers&lt;\/a&gt; &lt;\/div&gt;\r\n\r\n\r\n&lt;div class=\&quot;ammenu-m2-dropdown-banners\&quot; data-amsite-js=\&quot;ammenu-m2-dropdown-banners\&quot;&gt;\r\n &lt;a class=\&quot;amsite-menu-picker-btn action secondary\&quot; href=\&quot;\/latest-updates-magento-2-extensions.html?utm_source=menu&amp;utm_medium=widget&amp;utm_campaign=recent_updates\&quot; title=\&quot;Go to this page\&quot;&gt;\r\n Check Module Updates\r\n &lt;\/a&gt;\r\n &lt;img src=\&quot;https:\/\/cdn.amasty.com\/media\/amsite\/adobe-partner-badge-2x.png\&quot; alt=\&quot;Adobe partner logo\&quot; width=\&quot;180\&quot; \r\n height=\&quot;46\&quot;&gt;\r\n&lt;\/div&gt; &quot;,&quot;type&quot;:{&quot;value&quot;:1,&quot;label&quot;:&quot;vertical&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:3,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Hyva Theme Extensions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-83&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/hyva-theme-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:162,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/custom-form-for-magento-2.html&quot;,&quot;name&quot;:&quot;Custom Form&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/social-login-for-magento-2.html&quot;,&quot;name&quot;:&quot;Social Login&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/google-tag-manager-for-magento-2.html&quot;,&quot;name&quot;:&quot;Google Analytics 4 with GTM&quot;}],&quot;label&quot;:{&quot;label&quot;:&quot;HOT&quot;,&quot;label_text_color&quot;:&quot;#ffffff&quot;,&quot;label_background_color&quot;:&quot;#ff2f7a&quot;},&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Hyva Checkout Ready&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-109&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/hyva-checkout-ready-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:135,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/out-of-stock-notification-for-magento-2.html&quot;,&quot;name&quot;:&quot;Out of Stock Notification&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/order-attributes-for-magento-2.html&quot;,&quot;name&quot;:&quot;Order Attributes&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shipping-restrictions-for-magento-2.html&quot;,&quot;name&quot;:&quot;Shipping Restrictions &quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Navigation &amp; Search&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-26&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/usability-navigation-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:21,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html&quot;,&quot;name&quot;:&quot;Improved Layered Navigation&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;TOP&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/mega-menu-for-magento-2.html&quot;,&quot;name&quot;:&quot;Mega Menu Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/elasticsearch-for-magento-2.html&quot;,&quot;name&quot;:&quot;Elastic Search&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Catalog Management&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-28&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/catalog-management-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:34,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/product-feed-for-magento-2.html&quot;,&quot;name&quot;:&quot;Product Feed&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/improved-sorting-for-magento-2.html&quot;,&quot;name&quot;:&quot;Improved Sorting&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shop-by-brand-for-magento-2.html&quot;,&quot;name&quot;:&quot;Shop by Brand&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Checkout&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-35&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/checkout-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:27,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/one-step-checkout-for-magento-2.html&quot;,&quot;name&quot;:&quot;One Step Checkout Pro&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;TOP&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/customer-attributes-for-magento-2.html&quot;,&quot;name&quot;:&quot;Customer Attributes&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/delivery-date-manager-for-magento-2.html&quot;,&quot;name&quot;:&quot;Delivery Date Manager&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Law-Based Extensions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-112&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/law-based-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:8,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/cookie-consent-for-magento-2.html&quot;,&quot;name&quot;:&quot;Cookie Consent&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/omnibus-price-tracker-for-magento-2.html&quot;,&quot;name&quot;:&quot;Omnibus Price Tracker&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/age-verification-for-magento-2.html&quot;,&quot;name&quot;:&quot;Age Verification&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;NEW&quot;,&quot;label_text_color&quot;:&quot;#ffffff&quot;,&quot;label_background_color&quot;:&quot;#4d91f8&quot;}}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Shipping&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-30&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/shipping-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:19,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/shipping-rules-for-magento-2.html&quot;,&quot;name&quot;:&quot;Shipping Rules&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shipping-table-rates-for-magento-2.html&quot;,&quot;name&quot;:&quot;Shipping Table Rates&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/store-pickup-with-locator-for-magento-2.html&quot;,&quot;name&quot;:&quot;Store Pickup with Locator&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;SEO&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-33&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/seo-optimization-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:29,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/seo-toolkit-for-magento-2.html&quot;,&quot;name&quot;:&quot;SEO Toolkit Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/google-indexing-api-for-magento-2.html&quot;,&quot;name&quot;:&quot;Google Indexing API&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;NEW&quot;,&quot;label_text_color&quot;:&quot;#ffffff&quot;,&quot;label_background_color&quot;:&quot;#4d91f8&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/google-page-speed-optimizer-for-magento-2.html&quot;,&quot;name&quot;:&quot;Google Page Speed Optimizer Pro&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Promotions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-29&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/promotions-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:44,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/free-gift-for-magento-2.html&quot;,&quot;name&quot;:&quot;Free Gift&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;TOP&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/special-promotions-pro-for-magento-2.html&quot;,&quot;name&quot;:&quot;Special Promotions Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/automatic-related-products-for-magento-2.html&quot;,&quot;name&quot;:&quot;Automatic Related Products&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Images &amp; Media&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-36&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/images-media-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:15,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/product-labels-for-magento-2.html&quot;,&quot;name&quot;:&quot;Product Labels&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/promo-banners-for-magento-2.html&quot;,&quot;name&quot;:&quot;Promo Banners&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/color-swatches-pro-for-magento-2.html&quot;,&quot;name&quot;:&quot;Color Swatches Pro&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Administration&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-82&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/administration-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:25,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/admin-actions-log-for-magento-2.html&quot;,&quot;name&quot;:&quot;Admin Actions Log&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/advanced-permissions-for-magento-2.html&quot;,&quot;name&quot;:&quot;Advanced Permissions&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/payment-restrictions-for-magento-2.html&quot;,&quot;name&quot;:&quot;Payment Restrictions&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;B2B Products&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-61&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/b2b-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:27,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html&quot;,&quot;name&quot;:&quot;B2B E-commerce Premium Suite&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/import-and-export-for-magento-2.html&quot;,&quot;name&quot;:&quot;Import and Export Premium&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/b2b-company-account-for-magento-2.html&quot;,&quot;name&quot;:&quot;B2B Company Account&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;AI-Powered Extensions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-103&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/ai-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:3,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/blog-pro-for-magento-2.html&quot;,&quot;name&quot;:&quot;Blog Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/chatgpt-ai-content-for-magento-2.html&quot;,&quot;name&quot;:&quot;ChatGPT AI Content Generator&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/google-automated-discounts-for-magento-2.html&quot;,&quot;name&quot;:&quot;Google Automated Discounts&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Free Magento 2 Extensions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-43&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/free-magento-2-extensions.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:8,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/google-page-speed-optimizer-lite-for-magento-2.html&quot;,&quot;name&quot;:&quot;Google Page Speed Optimizer&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/recently-viewed-products-popup-for-magento-2.html&quot;,&quot;name&quot;:&quot;Recently Viewed Products&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/mega-menu-lite-for-magento-2.html&quot;,&quot;name&quot;:&quot;Mega Menu&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:700,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Support Packs&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-79&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/contacts&quot;,&quot;current&quot;:false,&quot;items_count&quot;:0,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:null},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:700,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Research Product Demand&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-69&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/research-product-demand.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:57,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:null},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Public Roadmap&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-97&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/trello.com\/b\/mGKdSV3a\/%F0%9F%9A%A9-amasty-product-roadmap-%F0%9F%9A%A9&quot;,&quot;current&quot;:false,&quot;items_count&quot;:0,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;}],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Magento 2 Extensions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-25&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;0&quot;,&quot;content&quot;:&quot;&lt;div class=\&quot;ammenu-dropdown-wrapper -desktop\&quot;&gt;\r\n &lt;div class=\&quot;left-side\&quot;&gt;\r\n &lt;div class=\&quot;ammenu-widget-wrapper block widget mega-menu-products-list\&quot; data-amsite-js=\&quot;top-product-widget\&quot;&gt; &lt;div class=\&quot;block-title\&quot;&gt;Popular right now&lt;\/div&gt; &lt;div class=\&quot;block-content\&quot;&gt;&lt;ul class=\&quot;widget-product-items\&quot;&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/cookie-consent-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Cookie&#x20;Consent&#x20;&#x28;GDPR&#x29;\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/c\/o\/cookie-consent-for-magento-2_6253b4c79f9ab.png\&quot; alt=\&quot;Cookie Consent (GDPR) for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Cookie Consent (GDPR)&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Improved&#x20;Layered&#x20;Navigation\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/m\/improved-layered-navigation-for-magento-2_5_png.webp\&quot; alt=\&quot;Improved Layered Navigation for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;amasty-label-container amasty-label-container-13-506-cat amasty-label-for-506\&quot; style=\&quot;display: none; width:111px;\&quot; data-mage-init=&#039;{\&quot;Amasty_Label\/js\/initLabel\&quot;:{ \&quot;mode\&quot;: \&quot;cat\&quot;, \&quot;isAdminArea\&quot;: \&quot;\&quot;, \&quot;config\&quot;: {\&quot;position\&quot;:\&quot;top-center\&quot;,\&quot;size\&quot;:\&quot;\&quot;,\&quot;path\&quot;:\&quot;.product-image-container, .product-item-photo, .cdz-product-top\&quot;,\&quot;mode\&quot;:\&quot;prod\&quot;,\&quot;move\&quot;:0,\&quot;product\&quot;:\&quot;506\&quot;,\&quot;label\&quot;:13,\&quot;margin\&quot;:7,\&quot;alignment\&quot;:0,\&quot;order\&quot;:5,\&quot;redirect_url\&quot;:\&quot;\&quot;,\&quot;tooltip\&quot;:{\&quot;backgroundColor\&quot;:\&quot;\&quot;,\&quot;color\&quot;:\&quot;\&quot;,\&quot;status\&quot;:1,\&quot;content\&quot;:\&quot;\&quot;}}, \&quot;productId\&quot;: \&quot;506\&quot;, \&quot;selector\&quot;: \&quot;.amasty-label-container-13-506-cat\&quot; }}&#039;&gt;&lt;div class=\&quot;amlabel-text\&quot;&gt;&lt;\/div&gt; &lt;img id=\&quot;amasty-label-image-13-506-cat\&quot; class=\&quot;amasty-label-image\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\&quot; style=\&quot;opacity: 1 !important;vertical-align: top;\&quot; title=\&quot;Improved&#x20;Layered&#x20;Navigation&#x20;for&#x20;Magento&#x20;2\&quot; alt=\&quot;Improved&#x20;Layered&#x20;Navigation&#x20;for&#x20;Magento&#x20;2\&quot; &gt;&lt;\/div&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Improved Layered Navigation&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/google-tag-manager-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Google&#x20;Analytics&#x20;4&#x20;with&#x20;GTM&#x20;Support\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon-google-tag-manager-for-magento-2_png.webp\&quot; alt=\&quot;Google Analytics 4 with GTM Support for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Google Analytics 4 with GTM Support&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;\/ul&gt;&lt;\/div&gt; &lt;a href=\&quot;\/hyva-theme-extensions-for-magento-2.html?utm_source=menu&amp;utm_medium=widget&amp;utm_campaign=hyva_extensions\&quot; class=\&quot;block-link-below\&quot; tabindex=\&quot;0\&quot; title=\&quot;View&#x20;All&#x20;Hyva&#x20;Extensions\&quot;&gt;View All Hyva Extensions&lt;\/a&gt; &lt;\/div&gt;\r\n\r\n &lt;div class=\&quot;ammenu-m2-dropdown-banners\&quot; data-amsite-js=\&quot;ammenu-m2-dropdown-banners\&quot;&gt;\r\n &lt;a class=\&quot;amsite-menu-picker-btn action secondary\&quot; href=\&quot;\/latest-updates-magento-2-extensions.html?utm_source=menu&amp;utm_medium=widget&amp;utm_campaign=recent_updates\&quot; title=\&quot;Go to this page\&quot;&gt;\r\n Check Module Updates\r\n &lt;\/a&gt;\r\n &lt;img src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/amsite\/adobe-partner-badge-2x_png.webp\&quot; alt=\&quot;Adobe partner logo\&quot; width=\&quot;180\&quot; \r\n height=\&quot;46\&quot;&gt;\r\n&lt;\/div&gt; \r\n\r\n &lt;\/div&gt;\r\n &lt;div class=\&quot;right-side\&quot;&gt;\r\n &lt;!-- ko scope: \&quot;index = ammenu_columns_wrapper\&quot; --&gt; &lt;!-- ko template: getTemplate() --&gt;&lt;!-- \/ko --&gt; &lt;!-- \/ko --&gt;\r\n &lt;\/div&gt;\r\n&lt;\/div&gt;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-extensions.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:261,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/tier-price-for-magento-2.html&quot;,&quot;name&quot;:&quot;Tier Price for Magento 2&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;fade_in&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:&quot;&lt;div class=\&quot;ammenu-view-all-mobile-link\&quot;&gt;\r\n &lt;a class=\&quot;ammenu-link view-all\&quot;\r\n href=\&quot;\/magento-2-solutions.html\&quot;\r\n aria-label=\&quot;Go to Solutions\&quot;\r\n title=\&quot;Go to Solutions\&quot;\r\n role=\&quot;link\&quot;\r\n tabindex=\&quot;0\&quot;\r\n &gt;\r\n All Solutions\r\n &lt;\/a&gt;\r\n&lt;\/div&gt;\r\n\r\n &lt;div class=\&quot;ammenu-widget-wrapper block widget mega-menu-products-list\&quot; data-amsite-js=\&quot;top-product-widget\&quot;&gt; &lt;div class=\&quot;block-title\&quot;&gt;Featured Products&lt;\/div&gt; &lt;div class=\&quot;block-content\&quot;&gt;&lt;ul class=\&quot;widget-product-items\&quot;&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to B2B&#x20;E-commerce&#x20;Premium&#x20;Solution\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon_b2b_premium_2.png\&quot; alt=\&quot;B2B E-commerce Premium Solution for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;B2B E-commerce Premium Solution&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Google&#x20;Page&#x20;Speed&#x20;Optimizer&#x20;Powered&#x20;by&#x20;SpeedSize&#x2122;&#x20;AI&#x20;Pro\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/g\/o\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2_629ed9b6e2f0e.png\&quot; alt=\&quot;Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;amasty-label-container amasty-label-container-13-2699-cat amasty-label-for-2699\&quot; style=\&quot;display: none; width:111px;\&quot; data-mage-init=&#039;{\&quot;Amasty_Label\/js\/initLabel\&quot;:{ \&quot;mode\&quot;: \&quot;cat\&quot;, \&quot;isAdminArea\&quot;: \&quot;\&quot;, \&quot;config\&quot;: {\&quot;position\&quot;:\&quot;top-center\&quot;,\&quot;size\&quot;:\&quot;\&quot;,\&quot;path\&quot;:\&quot;.product-image-container, .product-item-photo, .cdz-product-top\&quot;,\&quot;mode\&quot;:\&quot;prod\&quot;,\&quot;move\&quot;:0,\&quot;product\&quot;:\&quot;2699\&quot;,\&quot;label\&quot;:13,\&quot;margin\&quot;:7,\&quot;alignment\&quot;:0,\&quot;order\&quot;:5,\&quot;redirect_url\&quot;:\&quot;\&quot;,\&quot;tooltip\&quot;:{\&quot;backgroundColor\&quot;:\&quot;\&quot;,\&quot;color\&quot;:\&quot;\&quot;,\&quot;status\&quot;:1,\&quot;content\&quot;:\&quot;\&quot;}}, \&quot;productId\&quot;: \&quot;2699\&quot;, \&quot;selector\&quot;: \&quot;.amasty-label-container-13-2699-cat\&quot; }}&#039;&gt;&lt;div class=\&quot;amlabel-text\&quot;&gt;&lt;\/div&gt; &lt;img id=\&quot;amasty-label-image-13-2699-cat\&quot; class=\&quot;amasty-label-image\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\&quot; style=\&quot;opacity: 1 !important;vertical-align: top;\&quot; title=\&quot;Google&#x20;Page&#x20;Speed&#x20;Optimizer&#x20;Powered&#x20;by&#x20;SpeedSize&#x2122;&#x20;AI&#x20;Pro&#x20;for&#x20;Magento&#x20;2\&quot; alt=\&quot;Google&#x20;Page&#x20;Speed&#x20;Optimizer&#x20;Powered&#x20;by&#x20;SpeedSize&#x2122;&#x20;AI&#x20;Pro&#x20;for&#x20;Magento&#x20;2\&quot; &gt;&lt;\/div&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;\/ul&gt;&lt;\/div&gt; &lt;a href=\&quot;\/magento-2-extensions.html\&quot; class=\&quot;block-link-below\&quot; tabindex=\&quot;0\&quot; title=\&quot;View&#x20;All&#x20;BestSellers\&quot;&gt;View All BestSellers&lt;\/a&gt; &lt;\/div&gt;\r\n&quot;,&quot;type&quot;:{&quot;value&quot;:1,&quot;label&quot;:&quot;vertical&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:3,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Hyva Solutions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-104&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/hyva-solutions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:8,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/gdpr-for-magento-2.html&quot;,&quot;name&quot;:&quot;GDPR Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/gift-card-for-magento-2.html&quot;,&quot;name&quot;:&quot;Gift Card Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/product-attachments-for-magento-2.html&quot;,&quot;name&quot;:&quot;Product Attachments&quot;}],&quot;label&quot;:{&quot;label&quot;:&quot;HOT&quot;,&quot;label_text_color&quot;:&quot;#ffffff&quot;,&quot;label_background_color&quot;:&quot;#ff2f7a&quot;},&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:1,&quot;label&quot;:&quot;vertical&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:0,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Enhanced Navigation&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-72&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;99999&quot;,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/usability-navigation-solutions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:5,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/premium-custom-layered-navigation-for-magento-2.html&quot;,&quot;name&quot;:&quot;Layered Navigation Premium&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/advanced-search-for-magento-2.html&quot;,&quot;name&quot;:&quot;Advanced Search&quot;}],&quot;label&quot;:{&quot;label&quot;:&quot;TOP&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;},&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Packs&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-113&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/packs-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:2,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/ultimate-sale-booster-for-magento-2.html&quot;,&quot;name&quot;:&quot;Sale Booster Pack&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/elastic-layered-navigation-for-magento-2.html&quot;,&quot;name&quot;:&quot;Elastic Layered Navigation&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Suites&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-114&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/suites-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:4,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/promotion-suite-middle-for-magento-2.html&quot;,&quot;name&quot;:&quot;Promotion Suite Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/security-suite-for-magento-2.html&quot;,&quot;name&quot;:&quot;Security Suite &quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shipping-suite-for-magento-2.html&quot;,&quot;name&quot;:&quot;Shipping Suite Pro&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Sales &amp; Marketing&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-73&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;99999&quot;,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/sales-and-marketing-solutions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:11,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/abandoned-cart-email-for-magento-2.html&quot;,&quot;name&quot;:&quot;Abandoned Cart Email&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/reward-points-for-magento-2.html&quot;,&quot;name&quot;:&quot;Reward Points&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/special-promotions-for-magento-2.html&quot;,&quot;name&quot;:&quot;Special Promotions&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/facebook-pixel-for-magento-2.html&quot;,&quot;name&quot;:&quot;Facebook Pixel&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/advanced-product-reviews-for-magento-2.html&quot;,&quot;name&quot;:&quot;Advanced Product Reviews&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;User Experience&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-77&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/user-experience-solutions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:5,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/request-a-quote-for-magento-2.html&quot;,&quot;name&quot;:&quot;Request a Quote&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/google-page-speed-optimizer-premium-for-magento-2.html&quot;,&quot;name&quot;:&quot;Google Page Speed Optimizer Premium&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/store-locator-for-magento-2.html&quot;,&quot;name&quot;:&quot;Store Locator&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Order Management&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-74&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/order-management-solutions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:5,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/rma-for-magento-2.html&quot;,&quot;name&quot;:&quot;RMA&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/pre-order-for-magento-2.html&quot;,&quot;name&quot;:&quot;Pre Order&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/advanced-reports-for-magento-2.html&quot;,&quot;name&quot;:&quot;Advanced Reports&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;}],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Suites&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-71&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;1&quot;,&quot;content&quot;:&quot;&lt;div class=\&quot;ammenu-dropdown-wrapper -desktop\&quot;&gt;\r\n &lt;div class=\&quot;left-side\&quot;&gt;\r\n &lt;div class=\&quot;ammenu-widget-wrapper block widget mega-menu-products-list\&quot; data-amsite-js=\&quot;top-product-widget\&quot;&gt; &lt;div class=\&quot;block-title\&quot;&gt;Featured Products&lt;\/div&gt; &lt;div class=\&quot;block-content\&quot;&gt;&lt;ul class=\&quot;widget-product-items\&quot;&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/google-automated-discounts-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Google&#x20;Automated&#x20;Discounts&#x20;Premium\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/g\/o\/google-automated-discounts-for-magento-2_6568768b9b091.png\&quot; alt=\&quot;Google Automated Discounts Premium for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Google Automated Discounts Premium&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to B2B&#x20;E-commerce&#x20;Premium&#x20;Solution\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon_b2b_premium_2_png.webp\&quot; alt=\&quot;B2B E-commerce Premium Solution for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;B2B E-commerce Premium Solution&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Google&#x20;Page&#x20;Speed&#x20;Optimizer&#x20;Powered&#x20;by&#x20;SpeedSize&#x2122;&#x20;AI&#x20;Pro\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/g\/o\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2_629ed9b6e2f0e_png.webp\&quot; alt=\&quot;Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;amasty-label-container amasty-label-container-13-2699-cat amasty-label-for-2699\&quot; style=\&quot;display: none; width:111px;\&quot; data-mage-init=&#039;{\&quot;Amasty_Label\/js\/initLabel\&quot;:{ \&quot;mode\&quot;: \&quot;cat\&quot;, \&quot;isAdminArea\&quot;: \&quot;\&quot;, \&quot;config\&quot;: {\&quot;position\&quot;:\&quot;top-center\&quot;,\&quot;size\&quot;:\&quot;\&quot;,\&quot;path\&quot;:\&quot;.product-image-container, .product-item-photo, .cdz-product-top\&quot;,\&quot;mode\&quot;:\&quot;prod\&quot;,\&quot;move\&quot;:0,\&quot;product\&quot;:\&quot;2699\&quot;,\&quot;label\&quot;:13,\&quot;margin\&quot;:7,\&quot;alignment\&quot;:0,\&quot;order\&quot;:5,\&quot;redirect_url\&quot;:\&quot;\&quot;,\&quot;tooltip\&quot;:{\&quot;backgroundColor\&quot;:\&quot;\&quot;,\&quot;color\&quot;:\&quot;\&quot;,\&quot;status\&quot;:1,\&quot;content\&quot;:\&quot;\&quot;}}, \&quot;productId\&quot;: \&quot;2699\&quot;, \&quot;selector\&quot;: \&quot;.amasty-label-container-13-2699-cat\&quot; }}&#039;&gt;&lt;div class=\&quot;amlabel-text\&quot;&gt;&lt;\/div&gt; &lt;img id=\&quot;amasty-label-image-13-2699-cat\&quot; class=\&quot;amasty-label-image\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\&quot; style=\&quot;opacity: 1 !important;vertical-align: top;\&quot; title=\&quot;Google&#x20;Page&#x20;Speed&#x20;Optimizer&#x20;Powered&#x20;by&#x20;SpeedSize&#x2122;&#x20;AI&#x20;Pro&#x20;for&#x20;Magento&#x20;2\&quot; alt=\&quot;Google&#x20;Page&#x20;Speed&#x20;Optimizer&#x20;Powered&#x20;by&#x20;SpeedSize&#x2122;&#x20;AI&#x20;Pro&#x20;for&#x20;Magento&#x20;2\&quot; &gt;&lt;\/div&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;\/ul&gt;&lt;\/div&gt; &lt;a href=\&quot;\/all-magento-2-bundles\&quot; class=\&quot;block-link-below\&quot; tabindex=\&quot;0\&quot; title=\&quot;View&#x20;ready-made&#x20;bundles&#x20;list\&quot;&gt;View ready-made bundles list&lt;\/a&gt; &lt;\/div&gt;\r\n\r\n &lt;\/div&gt;\r\n &lt;div class=\&quot;right-side\&quot;&gt;\r\n &lt;!-- ko scope: \&quot;index = ammenu_columns_wrapper\&quot; --&gt; &lt;!-- ko template: getTemplate() --&gt;&lt;!-- \/ko --&gt; &lt;!-- \/ko --&gt;\r\n &lt;\/div&gt;\r\n&lt;\/div&gt;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-solutions.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:43,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html&quot;,&quot;name&quot;:&quot;Improved Layered Navigation&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;TOP&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/elasticsearch-for-magento-2.html&quot;,&quot;name&quot;:&quot;Elastic Search&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/mega-menu-for-magento-2.html&quot;,&quot;name&quot;:&quot;Mega Menu Pro&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;fade_in&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:700,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Support&quot;,&quot;is_category&quot;:false,&quot;id&quot;:&quot;custom-node-4&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;2&quot;,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/contacts\/&quot;,&quot;current&quot;:false,&quot;items_count&quot;:null,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:null},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:&quot;&lt;div class=\&quot;ammenu-view-all-mobile-link\&quot;&gt;\r\n &lt;a class=\&quot;ammenu-link view-all\&quot;\r\n href=\&quot;\/magento-services.html\&quot;\r\n aria-label=\&quot;Go to All Services\&quot;\r\n title=\&quot;Go to All Services\&quot;\r\n role=\&quot;link\&quot;\r\n tabindex=\&quot;0\&quot;\r\n &gt;\r\n All Services\r\n &lt;\/a&gt;\r\n&lt;\/div&gt;\r\n\r\n &lt;div class=\&quot;ammenu-widget-wrapper block widget mega-menu-products-list\&quot; data-amsite-js=\&quot;top-product-widget\&quot;&gt; &lt;div class=\&quot;block-title\&quot;&gt;Featured Services&lt;\/div&gt; &lt;div class=\&quot;block-content\&quot;&gt;&lt;ul class=\&quot;widget-product-items\&quot;&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-optimization-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;Optimization&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-optimization-service_63f5d17699021.png\&quot; alt=\&quot;Magento Optimization Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento Optimization Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;2&#x20;Support&#x20;and&#x20;Maintenance&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-support-and-maintenance-service_64c2674727566.png\&quot; alt=\&quot;Magento 2 Support and Maintenance Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento 2 Support and Maintenance Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-website-development-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;Website&#x20;Development\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-website-development-service_64be2084385cb.png\&quot; alt=\&quot;Magento Website Development\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento Website Development&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-2-upgrade-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;2&#x20;Upgrade&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-upgrade-service_61a5e5cfefab3.png\&quot; alt=\&quot;Magento 2 Upgrade Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento 2 Upgrade Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-to-shopify-migration-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;to&#x20;Shopify&#x20;Migration&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon-magento-to-shopify-migration-for-magento-2.png\&quot; alt=\&quot;Magento to Shopify Migration Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento to Shopify Migration Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;\/ul&gt;&lt;\/div&gt; &lt;a href=\&quot;\/magento-services.html\&quot; class=\&quot;block-link-below\&quot; tabindex=\&quot;0\&quot; title=\&quot;View&#x20;All&#x20;BestSellers\&quot;&gt;View All BestSellers&lt;\/a&gt; &lt;\/div&gt;\r\n\r\n\r\n&quot;,&quot;type&quot;:{&quot;value&quot;:1,&quot;label&quot;:&quot;vertical&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;High-Demand Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-111&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-development-services.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:4,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-development.html&quot;,&quot;name&quot;:&quot;Magento Custom Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-optimization-service.html&quot;,&quot;name&quot;:&quot;Magento Optimization&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-upgrade-service.html&quot;,&quot;name&quot;:&quot;Magento 2 Upgrade Service&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;10%&quot;,&quot;label_text_color&quot;:&quot;#ffffff&quot;,&quot;label_background_color&quot;:&quot;#f9425a&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/website-development-service.html&quot;,&quot;name&quot;:&quot;Custom Website Development Services&quot;}],&quot;label&quot;:{&quot;label&quot;:&quot;TOP&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;},&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Magento Development Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-84&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-development-services.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:17,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-website-development-service.html&quot;,&quot;name&quot;:&quot;Magento Website Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-mobile-app-development-service.html&quot;,&quot;name&quot;:&quot;Magento Mobile App Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-code-audit-service.html&quot;,&quot;name&quot;:&quot;Magento Code Audit&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-outsourcing-services.html&quot;,&quot;name&quot;:&quot;Magento Outsourcing Services&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Hyva Development Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-108&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-hyva-theme-development-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:3,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-hyva-theme-development-service.html&quot;,&quot;name&quot;:&quot;Hyva Theme Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/hyva-theme-migration-service.html&quot;,&quot;name&quot;:&quot;Hyva Theme Migration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-hyva-theme-customization-service.html&quot;,&quot;name&quot;:&quot;Hyva Theme Customization&quot;}],&quot;label&quot;:{&quot;label&quot;:&quot;HOT&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;},&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Magento Optimization Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-85&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-optimization-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:6,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-performance-audit.html&quot;,&quot;name&quot;:&quot;Magento Performance Audit&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;FREE&quot;,&quot;label_text_color&quot;:&quot;#ffffff&quot;,&quot;label_background_color&quot;:&quot;#4d91f8&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-seo-services.html&quot;,&quot;name&quot;:&quot;Magento SEO Services&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/website-ui-ux-audit.html&quot;,&quot;name&quot;:&quot;Website UI\/UX Audit&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Magento Maintenance Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-86&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:6,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html&quot;,&quot;name&quot;:&quot;Magento 2 Support and Maintenance&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/installation-service.html&quot;,&quot;name&quot;:&quot;Installation Service&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-security-patch.html&quot;,&quot;name&quot;:&quot;Magento Security Patch Installation&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Magento Upgrade Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-87&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-upgrade-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:5,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-1-to-2-migration-service.html&quot;,&quot;name&quot;:&quot;Magento 1 to 2 Migration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-server-configuration-and-migration-service.html&quot;,&quot;name&quot;:&quot;Magento Server Configuration and Migration&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Magento Integration Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-89&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-integration-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:7,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/amazon-integration-for-magento-2.html&quot;,&quot;name&quot;:&quot;Magento 2 Amazon Integration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-microsoft-dynamics-integration-service.html&quot;,&quot;name&quot;:&quot;Magento 2 Microsoft Integration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/sap-integration-services-magento.html&quot;,&quot;name&quot;:&quot;Magento 2 SAP Integration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-salesforce-integration-service.html&quot;,&quot;name&quot;:&quot;Magento 2 Salesforce Integration&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Managed Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-115&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/managed-it-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:4,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/managed-ecommerce-service.html&quot;,&quot;name&quot;:&quot;E-commerce Managed Services&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/managed-security-service.html&quot;,&quot;name&quot;:&quot;Managed Security Services&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/managed-magento-service.html&quot;,&quot;name&quot;:&quot;Magento Managed Services&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Shopify Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-90&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/shopify-website-development-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:11,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-to-shopify-migration-service.html&quot;,&quot;name&quot;:&quot;Magento to Shopify Migration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/custom-shopify-theme-development-service.html&quot;,&quot;name&quot;:&quot;Custom Shopify Theme Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shopify-app-development-service.html&quot;,&quot;name&quot;:&quot;Shopify App Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shopify-site-speed-optimization-service.html&quot;,&quot;name&quot;:&quot;Shopify Speed Optimization&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shopify-to-woocommerce-migration-service.html&quot;,&quot;name&quot;:&quot;Shopify to WooCommerce Migration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shopify-integration-service.html&quot;,&quot;name&quot;:&quot;Shopify Integration&quot;}],&quot;label&quot;:{&quot;label&quot;:&quot;HOT&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;},&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;E-Commerce Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-92&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-services.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:5,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/e-commerce-site-development-service.html&quot;,&quot;name&quot;:&quot;E-commerce Site Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/hire-magento-experts-business-models.html&quot;,&quot;name&quot;:&quot;Service Pricing Models&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/ecommerce-website-redesign-services.html&quot;,&quot;name&quot;:&quot;E-commerce Website Redesign&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;QA Testing Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-93&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/qa-testing-services.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:2,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/qa-for-ecommerce-business-service.html&quot;,&quot;name&quot;:&quot;E-commerce QA testing&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Hire Developers&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-94&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/hire-developers.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:7,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/hire-php-developer.html&quot;,&quot;name&quot;:&quot;Hire PHP Developer&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/hire-certified-magento-2-developers.html&quot;,&quot;name&quot;:&quot;Hire Magento 2 Developer&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/hire-shopify-developers.html&quot;,&quot;name&quot;:&quot;Hire Shopify Developers&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;}],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-37&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;3&quot;,&quot;content&quot;:&quot;&lt;div class=\&quot;ammenu-dropdown-wrapper -desktop\&quot;&gt;\r\n &lt;div class=\&quot;left-side\&quot;&gt;\r\n &lt;a href=\&quot;https:\/\/amasty.com\/magento-2-upgrade-service.html?utm_source=menu&amp;utm_medium=widget&amp;utm_campaign=services_banner\&quot;&gt;&lt;img src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/wysiwyg\/amasty\/banner-upgrade-service_png.webp\&quot; alt=\&quot;banner-review\&quot; style=\&quot;margin-bottom: 30px;\&quot;&gt;&lt;\/a&gt;\r\n &lt;!-- &lt;div class=\&quot;ammenu-widget-wrapper block widget mega-menu-products-list\&quot; data-amsite-js=\&quot;top-product-widget\&quot;&gt; &lt;div class=\&quot;block-title\&quot;&gt;TOP-4 Amasty services&lt;\/div&gt; &lt;div class=\&quot;block-content\&quot;&gt;&lt;ul class=\&quot;widget-product-items\&quot;&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-optimization-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;Optimization&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-optimization-service_63f5d17699021_png.webp\&quot; alt=\&quot;Magento Optimization Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento Optimization Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;2&#x20;Support&#x20;and&#x20;Maintenance&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-support-and-maintenance-service_64c2674727566_png.webp\&quot; alt=\&quot;Magento 2 Support and Maintenance Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento 2 Support and Maintenance Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-website-development-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;Website&#x20;Development\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-website-development-service_64be2084385cb_png.webp\&quot; alt=\&quot;Magento Website Development\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento Website Development&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-2-upgrade-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;2&#x20;Upgrade&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-upgrade-service_61a5e5cfefab3_png.webp\&quot; alt=\&quot;Magento 2 Upgrade Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento 2 Upgrade Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;\/ul&gt;&lt;\/div&gt;&lt;\/div&gt; --&gt;\r\n &lt;button class=\&quot;amform-show-popup-imitation\&quot;&gt;Show Form&lt;\/button&gt;\r\n &lt;\/div&gt;\r\n &lt;div class=\&quot;right-side\&quot;&gt;\r\n &lt;!-- ko scope: \&quot;index = ammenu_columns_wrapper\&quot; --&gt; &lt;!-- ko template: getTemplate() --&gt;&lt;!-- \/ko --&gt; &lt;!-- \/ko --&gt;\r\n &lt;\/div&gt;\r\n&lt;\/div&gt;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-services.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:75,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;fade_in&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:700,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Shopify Apps&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-107&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;4&quot;,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/shopify-apps.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:0,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:null},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;icon&quot;:&quot;https:\/\/cdn.amasty.com\/media\/amasty\/ammegamenu\/Heart_2x_1.jpg&quot;,&quot;icon_extension&quot;:&quot;jpg&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Special Offers&quot;,&quot;is_category&quot;:false,&quot;id&quot;:&quot;custom-node-1&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;6&quot;,&quot;content&quot;:&quot;&lt;div class=\&quot;ammenu-custom-container -full -loyalty\&quot; &gt;\r\n &lt;ul class=\&quot;ammenu-items\&quot;&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Amasty Special Offers page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuOffers\&quot; href=\&quot;\/amasty-promo.html\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Special Offers&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to AmastyAll Bundles page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuOffers\&quot; href=\&quot;\/all-magento-2-bundles\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;All Bundles&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Replace Third-Party Modules Offer page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuOffers\&quot; href=\&quot;\/amasty-only-offer\/\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Replace Modules Offer&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Custom Bundle page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuOffers\&quot; href=\&quot;\/custom-bundle.html\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Custom Bundle Offer&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n&lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Free Resources page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuOffers\&quot; href=\&quot;\/free-magento-resources\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Free Resources&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n &lt;\/ul&gt;\r\n&lt;\/div&gt;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/amasty-promo.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:&quot;0&quot;,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;400&quot;,&quot;mobile_font&quot;:&quot;400&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Loyalty Programs&quot;,&quot;is_category&quot;:false,&quot;id&quot;:&quot;custom-node-11&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;7&quot;,&quot;content&quot;:&quot;&lt;div class=\&quot;ammenu-custom-container -full -loyalty\&quot; &gt;\r\n &lt;ul class=\&quot;ammenu-items\&quot;&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Amasty Loyalty Program page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuLoyalty\&quot; href=\&quot;\/amasty-loyalty-program.html\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Amasty Loyalty Program&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Partner Program page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuLoyalty\&quot; href=\&quot;\/partnership-program.html\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Partner Program&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Affiliate Program page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuLoyalty\&quot; href=\&quot;\/affiliate-program.html\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Affiliate Program&lt;\/span&gt;&lt;\/a&gt;&lt;\/li&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Official Partners page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuLoyalty\&quot; href=\&quot;\/partners.html\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Official Partners&lt;\/span&gt;&lt;\/a&gt;&lt;\/li&gt;\r\n &lt;\/ul&gt;\r\n&lt;\/div&gt;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/amasty-loyalty-program.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:&quot;0&quot;,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;400&quot;,&quot;mobile_font&quot;:&quot;400&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Blog&quot;,&quot;is_category&quot;:false,&quot;id&quot;:&quot;custom-node-2&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;8&quot;,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/blog\/&quot;,&quot;current&quot;:true,&quot;items_count&quot;:&quot;0&quot;,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;400&quot;,&quot;mobile_font&quot;:&quot;400&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;FAQ&quot;,&quot;is_category&quot;:false,&quot;id&quot;:&quot;custom-node-10&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;9&quot;,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/knowledge-base\/&quot;,&quot;current&quot;:false,&quot;items_count&quot;:&quot;0&quot;,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;}],&quot;__disableTmpl&quot;:true,&quot;name&quot;:null,&quot;is_category&quot;:null,&quot;id&quot;:null,&quot;status&quot;:0,&quot;sort_order&quot;:null,&quot;content&quot;:null,&quot;url&quot;:null,&quot;current&quot;:true,&quot;items_count&quot;:null,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:null}, config: {&quot;is_hamburger&quot;:false,&quot;color_settings&quot;:{&quot;color_template&quot;:&quot;custom&quot;,&quot;main_menu_background&quot;:&quot;#fff&quot;,&quot;main_menu_background_hover&quot;:&quot;#FFFFFF&quot;,&quot;main_menu_text&quot;:&quot;#1a1a1a&quot;,&quot;main_menu_text_hover&quot;:&quot;#FF5B0F&quot;,&quot;submenu_background_color&quot;:&quot;#fff&quot;,&quot;submenu_background_image&quot;:&quot;&quot;,&quot;submenu_text&quot;:&quot;#1a1a1a&quot;,&quot;submenu_text_hover&quot;:&quot;#FF5B0F&quot;,&quot;current_category_color&quot;:&quot;#ff5b0f&quot;,&quot;toggle_icon_color&quot;:&quot;#1a1a1a&quot;,&quot;hamburger_icon_color&quot;:&quot;#1a1a1a&quot;},&quot;mobile_menu_title&quot;:&quot;&quot;,&quot;mobile_menu_width&quot;:1023,&quot;welcome_message&quot;:{&quot;message&quot;:&quot;Default welcome msg!&quot;},&quot;invitation_url&quot;:&quot;&quot;,&quot;hide_view_all_link&quot;:true,&quot;mobile_class&quot;:&quot;drill&quot;,&quot;is_sticky&quot;:1,&quot;is_icons_available&quot;:&quot;both&quot;,&quot;animation_time&quot;:0.2,&quot;hamburger_animation&quot;:&quot;none&quot;}, children: [], settings: {&quot;account&quot;:{&quot;is_logged_in&quot;:false,&quot;login&quot;:&quot;https:\/\/amasty.com\/customer\/account\/login\/&quot;,&quot;create&quot;:&quot;https:\/\/amasty.com\/customer\/account\/create\/&quot;,&quot;logout&quot;:&quot;https:\/\/amasty.com\/customer\/account\/logout\/&quot;,&quot;account&quot;:&quot;https:\/\/amasty.com\/customer\/account\/&quot;},&quot;switcher&quot;:{&quot;current_code&quot;:&quot;default&quot;,&quot;current_name&quot;:&quot;Amasty Store&quot;,&quot;current_store_id&quot;:&quot;1&quot;,&quot;items&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/stores\/store\/redirect\/___store\/default\/___from_store\/default\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL2Jsb2cvdG9wLWFmZmlsaWF0ZS1tYXJrZXRpbmctb3Bwb3J0dW5pdGllcy8~\/&quot;,&quot;code&quot;:&quot;default&quot;,&quot;name&quot;:&quot;Amasty Store&quot;}]},&quot;currency&quot;:[{&quot;data-post&quot;:&quot;{\&quot;action\&quot;:\&quot;https:\\\/\\\/amasty.com\\\/directory\\\/currency\\\/switch\\\/\&quot;,\&quot;data\&quot;:{\&quot;currency\&quot;:\&quot;GBP\&quot;}}&quot;,&quot;name&quot;:&quot;British Pound&quot;,&quot;code&quot;:&quot;GBP&quot;,&quot;code_title&quot;:&quot;GBP&quot;,&quot;current_currency&quot;:false},{&quot;data-post&quot;:&quot;{\&quot;action\&quot;:\&quot;https:\\\/\\\/amasty.com\\\/directory\\\/currency\\\/switch\\\/\&quot;,\&quot;data\&quot;:{\&quot;currency\&quot;:\&quot;EUR\&quot;}}&quot;,&quot;name&quot;:&quot;Euro&quot;,&quot;code&quot;:&quot;EUR&quot;,&quot;code_title&quot;:&quot;EUR&quot;,&quot;current_currency&quot;:false},{&quot;data-post&quot;:&quot;{\&quot;action\&quot;:\&quot;https:\\\/\\\/amasty.com\\\/directory\\\/currency\\\/switch\\\/\&quot;,\&quot;data\&quot;:{\&quot;currency\&quot;:\&quot;USD\&quot;}}&quot;,&quot;name&quot;:&quot;US Dollar&quot;,&quot;code&quot;:&quot;USD&quot;,&quot;code_title&quot;:&quot;USD&quot;,&quot;current_currency&quot;:true}]}, links: [] } } } }"> <!-- ko if: !$data.isMobile() --><section class="ammenu-nav-sections -topmenu "><nav class="ammenu-main-container" aria-label="Main Menu" role="navigation" data-action="navigation" style=" background: &#x23;fff; color: &#x23;1a1a1a;"><ul class="ammenu-items -root" role="menubar"> <li class="ammenu-item category-item magento® 2 extensions" data-bind=" scope: 'ammenu_topmenu_item_0', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_0': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 0, id: 'category-node-25' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Magento® 2 Extensions</span> <span class="ammenu-count">261</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item suites" data-bind=" scope: 'ammenu_topmenu_item_1', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_1': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 1, id: 'category-node-71' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Suites</span> <span class="ammenu-count">43</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item support" data-bind=" scope: 'ammenu_topmenu_item_2', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_2': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 2, id: 'custom-node-4' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Support</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item services" data-bind=" scope: 'ammenu_topmenu_item_3', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_3': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 3, id: 'category-node-37' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Services</span> <span class="ammenu-count">75</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item shopify apps" data-bind=" scope: 'ammenu_topmenu_item_4', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_4': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 4, id: 'category-node-107' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Shopify Apps</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item special offers" data-bind=" scope: 'ammenu_topmenu_item_5', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_5': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 5, id: 'custom-node-1' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <figure class="ammenu-icon-block -icon" style=" -webkit-mask-image: url&#x28;https&#x3A;&#x2F;&#x2F;cdn.amasty.com&#x2F;media&#x2F;amasty&#x2F;ammegamenu&#x2F;Heart_2x_1.jpg&#x29;; maskImage: url&#x28;https&#x3A;&#x2F;&#x2F;cdn.amasty.com&#x2F;media&#x2F;amasty&#x2F;ammegamenu&#x2F;Heart_2x_1.jpg&#x29;; background-color: &#x23;1a1a1a; background-image: url&#x28;https&#x3A;&#x2F;&#x2F;cdn.amasty.com&#x2F;media&#x2F;amasty&#x2F;ammegamenu&#x2F;Heart_2x_1.jpg&#x29;; " data-bind=" style: { 'background-color': item.color() && item.icon ? item.color() : '' } "></figure> <p class="ammenu-text-block"><span class="ammenu-text">Special Offers</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item loyalty programs" data-bind=" scope: 'ammenu_topmenu_item_6', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_6': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 6, id: 'custom-node-11' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 400" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Loyalty Programs</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item blog" data-bind=" scope: 'ammenu_topmenu_item_7', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_7': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 7, id: 'custom-node-2' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 400" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Blog</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item faq" data-bind=" scope: 'ammenu_topmenu_item_8', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_8': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 8, id: 'custom-node-10' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 400" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">FAQ</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> </ul></nav></section><!-- /ko --> <!-- ko if: $data.isMobile() || $data.is_hamburger --><!-- ko scope: 'index = ammenu_sidebar_menu_wrapper' --><!-- ko template: getTemplate() --><!-- /ko --><!-- /ko --><!-- /ko --></section></header> <main id="maincontent" class="page-main"><div class="page messages"> <div data-placeholder="messages"></div> <div data-bind="scope: 'messages'" data-amtheme-js="page-messages"><div class="amtheme-messages" data-amtheme-js="amtheme-messages" data-bind="css: { '-sticky-message': isMessageSticky(), '-visible': isVisible() }"><!-- ko if: cookieMessages && cookieMessages.length > 0 --><div aria-atomic="true" role="alert" class="messages" data-bind="foreach: { data: cookieMessages, as: 'message' }"><div data-amtheme-js="message" data-bind="afterRender: $parent.autoHideMessage($element), attr: { class: 'message-' + message.type + ' ' + message.type + ' message', 'data-ui-id': 'message-' + message.type }"><div class="flex items-center max-w-78 mx-auto"><!-- ko if: message.type === 'success' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#064E3B" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" /></svg><!-- /ko --><!-- ko if: message.type === 'error' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#881337" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg><!-- /ko --><!-- ko if: message.type === 'notice' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#1E3A8A" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><!-- ko if: message.type === 'info' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#1E3A8A" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><!-- ko if: message.type === 'warning' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#78350F" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><div data-bind="html: $parent.prepareMessageForHtml(message.text)" class="message-text"></div><button type="button" aria-label="Close Message" class="message-close hover:text-black message-svg-icon" data-amtheme-js="message-close" data-bind="click: $parent.hideMessage.bind($parent, $element), css: { 'text-red-900': message.type === 'error', 'text-emerald-900': message.type === 'success', 'text-amber-900': message.type === 'warning', 'text-blue-900': (message.type === 'info' || message.type === 'notice')}"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /></svg></button></div></div></div><!-- /ko --><!-- ko if: messages().messages && messages().messages.length > 0 --><div aria-atomic="true" role="alert" class="messages" data-bind="foreach: { data: messages().messages, as: 'message' }"><div data-amtheme-js="message" data-bind="afterRender: $parent.autoHideMessage($element), attr: { class: 'message-' + message.type + ' ' + message.type + ' message', 'data-ui-id': 'message-' + message.type }"><div class="flex items-center max-w-78 mx-auto"><!-- ko if: message.type === 'success' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#064E3B" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" /></svg><!-- /ko --><!-- ko if: message.type === 'error' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#881337" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg><!-- /ko --><!-- ko if: message.type === 'notice' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#1E3A8A" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><!-- ko if: message.type === 'info' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#1E3A8A" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><!-- ko if: message.type === 'warning' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#78350F" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><span data-bind="html: $parent.prepareMessageForHtml(message.text)" class="message-text"></span> <button type="button" aria-label="Close Message" class="message-close hover:text-black message-svg-icon" data-amtheme-js="message-close" data-bind="click: $parent.hideMessage.bind($parent, $element), css: { 'text-red-900': message.type === 'error', 'text-emerald-900': message.type === 'success', 'text-amber-900': message.type === 'warning', 'text-blue-900': (message.type === 'info' || message.type === 'notice')}"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /></svg></button></div></div></div><!-- /ko --></div></div> <script data-info="not-move-to-bottom"> function initMessages() { "use strict"; return { messages: window.mageMessages || [], isEmpty() { return this.messages.reduce( function (isEmpty, message) { return isEmpty && message === undefined }, true ) }, removeMessage(messageIndex) { this.messages[messageIndex] = undefined; }, addMessages(messages, hideAfter) { messages.map((message) => { this.messages = this.messages.concat(message); if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) { hideAfter = window.defaultSuccessMessageTimeout; } if (hideAfter) { this.setHideTimeOut(this.messages.length -1, hideAfter); } }); }, setHideTimeOut(messageIndex, hideAfter) { setTimeout((messageIndex) => { this.removeMessage(messageIndex); }, hideAfter, messageIndex); }, eventListeners: { ['@messages-loaded.window'](event) { this.addMessages(event.detail.messages, event.detail.hideAfter) }, ['@private-content-loaded.window'](event) { const data = event.detail.data; if ( data.messages && data.messages.messages && data.messages.messages.length ) { this.addMessages(data.messages.messages); } }, ['@clear-messages.window']() { this.messages = []; } } } }</script><section id="messages" x-data="initMessages()" x-bind="eventListeners" aria-live="assertive" role="alert" ><template x-if="!isEmpty()"><div class="w-full"><div class="messages mx-auto"><template x-for="(message, index) in messages" :key="index"><div><template x-if="message"><div class="message" :class="message.type" :ui-id="'message-' + message.type" ><div class="flex items-center max-w-78 mx-auto"><template x-if="message.type === 'success'"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-emerald-900" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 12 2 2 4-4m6 2a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><title>check-circle</title></svg> </template><template x-if="message.type === 'error'"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-rose-900" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3Z"/><title>exclamation</title></svg> </template><template x-if="message.type === 'warning'"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-amber-900" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><title>exclamation-circle</title></svg> </template><template x-if="message.type === 'info' || message.type === 'notice'"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-blue-900" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><title>information-circle</title></svg> </template><span class="ml-2" x-html="message.text"></span> <button type="button" class="ml-auto p-0" :class="{ 'text-red-900': message.type === 'error', 'text-emerald-900': message.type === 'success', 'text-amber-900': message.type === 'warning', 'text-blue-900': (message.type === 'info' || message.type === 'notice') }" aria-label="Close message" @click.prevent="removeMessage(index)" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-current" width="20" height="20" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/></svg> </button></div></div></template></div></template></div></div></template></section></div> <a id="contentarea" tabindex="-1"></a> <div class="columns"><div class="column main"><input name="form_key" type="hidden" value="LyhLWGUTC10mVoyy" /> <div id="authenticationPopup" data-bind="scope:'authenticationPopup', style: {display: 'none'}"> <!-- ko template: getTemplate() --><!-- /ko --> </div> <div class="amform-parent" x-data="{...hyva.modal()}" @amcform-hide-modal-188.window="hide"><button type="button" @click="show" data-amform-show="188" aria-label="Show&#x20;form" class="btn btn-primary inline-flex">Free Consultation</button> <div x-cloak x-spread="overlay()" x-bind="overlay()" class="am-overlay-popup"><div class="am-container-popup inset-0 max-md:!top-10"><div x-ref="dialog" role="dialog" class="am-dialog-popup rounded-lg w-full md:w-1/2 xl:w-5/12 max-h-[80vh] max-w-[80vw] group"><button @click="hide" aria-label="Close&#x20;form" class="am-close-popup"><svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg></button> <form class="rendered-form amform-form mb-12 mx-auto group-[.am-dialog-popup]:mb-0 default" id="amform-form-188" action="https://amasty.com/amasty_customform/form/submit/" enctype="multipart/form-data" method="post"><input name="form_key" type="hidden" value="LyhLWGUTC10mVoyy" /><input name="form_id" type="hidden" value="188" /><input name="is_survey" type="hidden" value="0" /><div class="flex flex-col max-w-md group-[.am-dialog-popup]:max-w-3xl m-auto amform-wrapper" data-element="form-content"> <div class="grid grid-cols-6 gap-x-2 gap-y-6 items-start" id="page-1" x-ref="page1188"> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" x-data="{ focused: false, value: '' }"> <input type="text" id="first-name-form-188" name="first-name" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" data-errormsg="Please use only letters (a-z or A-Z) or numbers (0-9) in this field.No spaces or other characters are allowed." maxlength="40" pattern="^[a-zA-Z0-9 ]+$" required placeholder="Type&#x20;here..." ><label class=" label " for="first-name-form-188">First Name</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" style="default;" x-data="{ focused: false, value: '' }"> <input type="text" id="last-name-form-188" name="last-name" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" style="default;" data-errormsg="Please use only letters (a-z or A-Z) or numbers (0-9) in this field.No spaces or other characters are allowed." maxlength="255" pattern="^[a-zA-Z0-9 ]+$" required placeholder="Type&#x20;here..." ><label class=" label " for="last-name-form-188">Last Name</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" style="default;" x-data="{ focused: false, value: '' }"> <input type="email" id="email-form-188" name="email" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" style="default;" maxlength="255" required placeholder="Type&#x20;here..." ><label class=" label " for="email-form-188">Email</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" x-data="{ focused: false, value: '' }"> <input type="text" id="company-form-188" name="company" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" placeholder="Type&#x20;here..." ><label class="field-optional after:text-secondary-lighter label " for="company-form-188">Company</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" x-data="{ focused: false, value: '' }"> <textarea id="description-form-188" name="description" class="focus:border-gray-500 border-gray-300 w-full border-gray-300 w-full py-1 " maxlength="255" required x-model="value" @focus="focused = true" @blur="focused = value" rows="5" placeholder="Type&#x20;here..." ></textarea> <label class=" label " for="description-form-188">Your Message</label></div><!-- Checkboxes --> <div class="col-span-6 amcform-toolbar flex align-center items-center gap-x-2 justify-center mt-4"> <button type="submit" x-data class="btn btn-primary justify-center w-64" @click.prevent="initFormEvents188().processSubmit( $refs.page1188, $refs.tab1188, $event)">CONTACT US</button> </div></div> </div> <!--Validations--><!--Dependencies--><!--Survey--> <!--Default values--><!--Init google map--></form> </div></div></div></div> <div class="magezon-builder magezon-builder-preload"><div class="nouo1g4 mgz-element mgz-element-row homepage-builder-main-block full_width_row"><div class="mgz-element-inner nouo1g4-s"><div class="inner-content mgz-container"><div class="d3bs0eu mgz-element mgz-element-column homepage-top-promotion mgz-col-xs-12 mgz-element-column-empty"><div class="mgz-element-inner d3bs0eu-s"></div></div><div class="muln7w4 mgz-element mgz-element-column homepage-first-block mgz-col-xs-12"><div class="mgz-element-inner muln7w4-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax muln7w4-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="h582ci1 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner h582ci1-s homepage-first-screen-row-inner"><div class="inner-content mgz-container"><div class="cyiixvr mgz-element mgz-element-column homepage-first-block-first-part mgz-col-xs-12"><div class="mgz-element-inner cyiixvr-s"><div class="pyxw755 mgz-element mgz-element-row homepage-first-block-logos full_width_row"><div class="mgz-element-inner pyxw755-s"><div class="inner-content mgz-container"><div class="pvyjkrv mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner pvyjkrv-s"><div class="a3nkgpd mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner a3nkgpd-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/adobe_gold_partner_2x.png" alt="Adobe Technology Partner" width="155" height="36" title="" /></div></div></div></div></div></div><div class="a29nay5 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner a29nay5-s"><div class="vnhicm1 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner vnhicm1-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/Adobe_Solution_Partner_Bronze_white_1.png" alt="Adobe Solution Partner" width="102" height="36" title="" /></div></div></div></div></div></div><div class="o8ymv9v mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner o8ymv9v-s"><div class="jktxill mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner jktxill-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/adobe_expert_2x.png" alt="Adobe Solution Partner" width="143" height="36" title="" /></div></div></div></div></div></div><div class="x5hg6i3 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner x5hg6i3-s"><div class="qt1hi6b mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner qt1hi6b-s amsite-ignore-lazy-load"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/sliverhorizontalmonochrome.png" alt="Silver member" width="154" height="36" title="" /></div></div></div></div></div></div><div class="yayunkw mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner yayunkw-s"><div class="x9mpqgr mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner x9mpqgr-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/Hyva_Full_Logo_-_Mono_White_1_1.png" alt="Huva Partner" width="80" height="26" title="" /></div></div></div></div></div></div></div></div></div><div class="wj1ketj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner wj1ketj-s"><h1 class="default-size-on-cms"><span style="color: #ffffff;">#1 Magento Solutions Provider</span></h1></div></div><div class="rw0lbv7 mgz-element mgz-child mgz-element-raw_html"><div class="mgz-element-inner rw0lbv7-s"><div class="homepage-first-block-btn-block"><a href="/magento-2-extensions.html" class="action secondary" title="Open this page">Magento 2 extensions</a> <a href="/magento-services.html" class="action secondary" title="Open this page">Services</a> </div></div></div><div class="fu29ex8 mgz-element mgz-child mgz-element-raw_html"><div class="mgz-element-inner fu29ex8-s"><div class="homepage-first-block-advantages"><span class="text-item"><span class="item-gilroy">16+</span>Years</span> <span class="text-item"><span class="item-gilroy">96%</span>CSAT score</span> <span class="text-item"><span class="item-gilroy">1700+</span>Projects</span> <span class="text-item"><span class="item-gilroy">300+</span>Extensions</span> </div></div></div></div></div><div class="dwmy38u mgz-element mgz-element-column homepage-main-slider mgz-col-xs-12"><div class="mgz-element-inner dwmy38u-s"><div class="tv75s7t mgz-element mgz-child mgz-element-magento_widget"><div class="mgz-element-inner tv75s7t-s"><div class="ambanner-slider-container arrow-position-1 homepagemaincentralmodebanner central-mode "><div class="ambanner-slider-wrap -alignment-left" data-ambanner-js="slider-wrapper" style="max-width: 636px;" ><style> .homepagemaincentralmodebanner .ambanner-slider-dots > li > button { background: #42496d !important; } .homepagemaincentralmodebanner .ambanner-slider-dots > li.slick-active > button { background: #ffffff !important; } .homepagemaincentralmodebanner.ambanner-slider-container .ambanner-slider-block .ambanner-arrow-button.slick-arrow > svg > path { fill: #ffffff; } .homepagemaincentralmodebanner.ambanner-slider-container .ambanner-slider-block .ambanner-arrow-button.slick-arrow > svg > rect { stroke: #ffffff; } .homepagemaincentralmodebanner.ambanner-slider-container .ambanner-slider-block .ambanner-arrow-button.slick-arrow.slick-disabled > svg > path { fill: #ffffff; } .homepagemaincentralmodebanner.ambanner-slider-container .ambanner-slider-block .ambanner-arrow-button.slick-arrow.slick-disabled > svg > rect { stroke: #ffffff; } .homepagemaincentralmodebanner .slider-counter { color: #ffffff; }</style><div class="ambanner-slider-block -ambanner-arrows&#x20;-ambanner-dots&#x20;&#x20;-arrows-1&#x20;-dots-1 " data-ambanner-js="slider" data-mage-init='{"amSlider":{ "sliderBlockWidth": 636, "sliderAnimationEffect": 0, "transitionSpeed": 500, "isAutoplay": true, "isLazyload": false, "sliderOptions": { "slidesToShow": 1, "slidesToScroll": 1, "showCounter": 0, "infinite": true, "arrows": true, "dots": true, "autoplay": true, "autoplaySpeed": 3500, "speed": 500, "responsive": [ { "breakpoint": 1024, "settings": { "infinite": false, "arrows": false, "dots": true, "slidesToShow": 1.3, "slidesToScroll": 1 } }, { "breakpoint": 769, "settings": { "infinite": false, "arrows": false, "dots": true, "slidesToShow": 2.1, "slidesToScroll": 1 } }, { "breakpoint": 640, "settings": { "infinite": false, "arrows": false, "dots": true, "slidesToShow": 1.7, "slidesToScroll": 1 } }, { "breakpoint": 480, "settings": { "infinite": false, "arrows": false, "dots": true, "slidesToShow": 1.1, "slidesToScroll": 1 } } ] } }}' ><div class="ambanner-item-block" data-ambanner-js="item" data-promo-id="banner_homepage_valrntinesgifts_promo" data-promo-name="SO Valentines Gifts Homepage 1" data-promo-creative="valentinesgifts_home_page_1" data-mage-init='{"amAnalytic":{ "elementId": "1", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><picture class="ambanner-image-block -overlay" ><source media="(max-width: 769px)" srcset="https://cdn.amasty.com/media/amasty/bannerslider/cache/B/a/300/320/Banner1__mobile_2x_feb25.png 1x, https://cdn.amasty.com/media/amasty/bannerslider/Banner1__mobile_2x_feb25.png 2x" /><img class="lazy ambanner-image amsite-ignore-lazy-load" data-ambanner-js="image" src="https://cdn.amasty.com/media/amasty/bannerslider/cache/B/a/636/298/Banner1_desktop_2x_feb25.png" srcset="https://cdn.amasty.com/media/amasty/bannerslider/Banner1_desktop_2x_feb25.png 2x" alt="" /></picture><div class="ambanner-content-overlay"><div class="ambanner-content-block" data-ambanner-js="content-block"><div class="ambanner-inner" data-ambanner-js="content-inner"><div class="magezon-builder magezon-builder-preload"><div class="ijlfuf7 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner ijlfuf7-s"><div class="inner-content mgz-container"><div class="rjbsi1t mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner rjbsi1t-s"><div class="m77vpnd mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner m77vpnd-s"><p><a href="/amasty-promo.html" class="action secondary" title="Read now">Explore now</a></p></div></div></div></div></div></div></div></div></div></div></div><a class="ambanner-link" title="" target="_self" href="https://amasty.com/amasty-promo.html#valentines_gifts"></a> </div><div class="ambanner-item-block" data-ambanner-js="item" data-promo-id="banner_anniversary_bonus_homepage" data-promo-name="SO Anniversary Bonus Homepage 2" data-promo-creative="so_anniversary_homepage" data-mage-init='{"amAnalytic":{ "elementId": "2", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><picture class="ambanner-image-block -overlay" ><source media="(max-width: 769px)" srcset="https://cdn.amasty.com/media/amasty/bannerslider/cache/B/a/300/320/Banner2__mobile_2x_feb25.png 1x, https://cdn.amasty.com/media/amasty/bannerslider/Banner2__mobile_2x_feb25.png 2x" /><img class="lazy ambanner-image amsite-ignore-lazy-load" data-ambanner-js="image" src="https://cdn.amasty.com/media/amasty/bannerslider/cache/B/a/636/298/Banner2_desktop_2x_feb25.png" srcset="https://cdn.amasty.com/media/amasty/bannerslider/Banner2_desktop_2x_feb25.png 2x" alt="" /></picture><div class="ambanner-content-overlay"><div class="ambanner-content-block" data-ambanner-js="content-block"><div class="ambanner-inner" data-ambanner-js="content-inner"><div class="magezon-builder magezon-builder-preload"><div class="jtl1t0p mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner jtl1t0p-s"><div class="inner-content mgz-container"><div class="q37q5kk mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner q37q5kk-s"><div class="d4w2cwc mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner d4w2cwc-s"><p><a class="action secondary" title="Shop Now" href="https://amasty.com/amasty-promo.html">Explore now</a></p></div></div></div></div></div></div></div></div></div></div></div><a class="ambanner-link" title="" target="_self" href="https://amasty.com/amasty-promo.html#anniversary_bonus"></a> </div><div class="ambanner-item-block" data-ambanner-js="item" data-promo-id="Banner Replace Homepage 3" data-promo-name="Banner Replace Homepage 3" data-promo-creative="homepage_banner_3_replace" data-mage-init='{"amAnalytic":{ "elementId": "3", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><picture class="ambanner-image-block -overlay" ><source media="(max-width: 769px)" srcset="https://cdn.amasty.com/media/amasty/bannerslider/cache/B/a/300/320/Banner3__mobile_2x_feb25.png 1x, https://cdn.amasty.com/media/amasty/bannerslider/Banner3__mobile_2x_feb25.png 2x" /><img class="lazy ambanner-image amsite-ignore-lazy-load" data-ambanner-js="image" src="https://cdn.amasty.com/media/amasty/bannerslider/cache/B/a/636/298/Banner3_desktop_2x_feb25.png" srcset="https://cdn.amasty.com/media/amasty/bannerslider/Banner3_desktop_2x_feb25.png 2x" alt="" /></picture><div class="ambanner-content-overlay"><div class="ambanner-content-block" data-ambanner-js="content-block"><div class="ambanner-inner" data-ambanner-js="content-inner"><div class="magezon-builder magezon-builder-preload"><div class="va1n53e mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner va1n53e-s"><div class="inner-content mgz-container"><div class="ijp8770 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner ijp8770-s"><div class="q9n0mb2 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner q9n0mb2-s"><p><a class="action secondary" title="Read now" href="https://amasty.com/amasty-promo.html#renew-discount">Explore now</a></p></div></div></div></div></div></div></div></div></div></div></div><a class="ambanner-link" title="" target="_self" href="https://amasty.com/amasty-promo.html#replace"></a> </div></div></div></div></div></div></div></div></div></div></div></div></div><div class="xnh5m5b mgz-element mgz-element-column homepage-logo-block mgz-col-xs-12"><div class="mgz-element-inner xnh5m5b-s"><div class="q9nk3y9 mgz-element mgz-child mgz-element-static_block"><div class="mgz-element-inner q9nk3y9-s"><div class="magezon-builder magezon-builder-preload"><div class="n3shedk mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner n3shedk-s infinity-scroll-block"><div class="inner-content mgz-container"><div class="j6555ld mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner j6555ld-s infinity-block-content"><div class="tuh2hpj mgz-element mgz-child mgz-element-raw_html"><div class="mgz-element-inner tuh2hpj-s"><div class="logos-slide" data-amsite-js="copy-infinity-slide"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/ebay-logo.png" width="98" height="40" alt="Ebay logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/canon-logo.png" width="128" height="27" alt="Canon logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/olympus-logo.png" width="143" height="27" alt="Olympus logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/nestle-logo.png" width="128" height="34" alt="Nestle logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/3M-logo.png" width="75" height="39" alt="3M logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/blizzard-logo.png" width="97" height="51" alt="Blizzard logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/yamaha.png" width="143" height="30" alt="Yamaha logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/nike.png" width="128" height="45" alt="Nike logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/Carrefour.png" width="97" height="78" alt="Carrefour logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/puma.png" width="98" height="49" alt="Puma logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/jti.png" width="62" height="46" alt="Jti logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/pg.png" width="75" height="32" alt="Pg logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/minisp.png" width="62" height="53" alt="Minisp logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/bodyshop.png" width="128" height="64" alt="Bodyshop logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/ebay-logo.png" width="98" height="40" alt="Ebay logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/canon-logo.png" width="128" height="27" alt="Canon logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/olympus-logo.png" width="143" height="27" alt="Olympus logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/nestle-logo.png" width="128" height="34" alt="Nestle logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/3M-logo.png" width="75" height="39" alt="3M logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/blizzard-logo.png" width="97" height="51" alt="Blizzard logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/yamaha.png" width="143" height="30" alt="Yamaha logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/nike.png" width="128" height="45" alt="Nike logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/Carrefour.png" width="97" height="78" alt="Carrefour logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/puma.png" width="98" height="49" alt="Puma logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/jti.png" width="62" height="46" alt="Jti logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/pg.png" width="75" height="32" alt="Pg logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/minisp.png" width="62" height="53" alt="Minisp logo"><img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/bodyshop.png" width="128" height="64" alt="Bodyshop logo"></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="gcdpdh2 mgz-element mgz-element-column homepage-related-block mgz-col-xs-12"><div class="mgz-element-inner gcdpdh2-s"><div class="udk37f0 mgz-element mgz-child mgz-element-magento_widget"><div class="mgz-element-inner udk37f0-s"><div class="amrelated-slider-new-design block widget amrelated-grid-wrapper block-products-list grid" id="amrelated-block-11"><h2 class="block-title">Popular right now</h2><div class="block-content"><div class="products-grid grid"><div class="product-items widget-product-grid" data-mage-init='{"slickSlider": { "isOnMobile": true, "sliderOptions": { "dots": true, "arrows": true, "infinite": false, "slidesToShow": 4, "slidesToScroll": 1, "showCounter": true, "responsive": [ { "breakpoint": 1200, "settings": { "slidesToShow": 3.2, "dots": true } }, { "breakpoint": 1024, "settings": { "slidesToShow": 2.3, "dots": false } }, { "breakpoint": 769, "settings": { "slidesToShow": 2.2, "dots": false } }, { "breakpoint": 480, "settings": { "slidesToShow": 1.5, "dots": false } }, { "breakpoint": 376, "settings": { "slidesToShow": 1.2, "dots": false } } ]} }}' data-amrelated-js="slider"><div class="product-item"><div class="product-item-info"><img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva&#x20;compatibility" ><a href="https://amasty.com/special-promotions-pro-for-magento-2.html" class="product-item-photo"><span class="product-image-container" style="width:160px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/4e759f6dd520f03226056bcaf7c201bf/s/p/special-promotions-pro-for-magento-2_64d0cf2c44caf.png" alt="Special Promotions Pro for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-649-cat amasty-label-for-649" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"649","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "649", "selector": ".amasty-label-container-13-649-cat" }}'><div class="amlabel-text"></div><img id="amasty-label-image-13-649-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" alt="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="product-item-details"><span class="product-item-name"><a title="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" aria-label="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" href="https://amasty.com/special-promotions-pro-for-magento-2.html" class="product-item-link">Special Promotions Pro for Magento 2</a></span> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.9</p><a href="https://amasty.com/special-promotions-pro-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg></a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/special-promotions-pro-for-magento-2.html#reviews" aria-label="Reviews" >17&nbsp;<span>Reviews</span></a></div><div class="product-item-actions"><div class="price-box price-final_price" data-role="priceBox" data-product-id="649" data-price-box="product-id-649"><span class="normal-price"><span class="price-container price-final_price&#x20;tax&#x20;weee" ><span id="product-price-649" data-price-amount="319" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$319</span></span> </span></span> </div><div class="actions-primary"><button class="action tocart primary" type="button" data-amsite-analytics-js="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tLw&#x7E;&#x7E;&#x5C;&#x2F;product&#x5C;&#x2F;649&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;649&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tLw&#x7E;&#x7E;&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></div></div><div class="product-item"><div class="product-item-info"><img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva&#x20;compatibility" ><a href="https://amasty.com/seo-toolkit-for-magento-2.html" class="product-item-photo"><span class="product-image-container" style="width:160px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/4e759f6dd520f03226056bcaf7c201bf/s/e/seo-toolkit-for-magento-2_61a0985238d1b.png" alt="SEO Toolkit Pro for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-793-cat amasty-label-for-793" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"793","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "793", "selector": ".amasty-label-container-13-793-cat" }}'><div class="amlabel-text"></div><img id="amasty-label-image-13-793-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="SEO&#x20;Toolkit&#x20;Pro&#x20;for&#x20;Magento&#x20;2" alt="SEO&#x20;Toolkit&#x20;Pro&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="product-item-details"><span class="product-item-name"><a title="SEO&#x20;Toolkit&#x20;Pro&#x20;for&#x20;Magento&#x20;2" aria-label="SEO&#x20;Toolkit&#x20;Pro&#x20;for&#x20;Magento&#x20;2" href="https://amasty.com/seo-toolkit-for-magento-2.html" class="product-item-link">SEO Toolkit Pro for Magento 2</a></span> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">5.0</p><a href="https://amasty.com/seo-toolkit-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="95%" stop-color="&#x23;fcd34d"/><stop offset="95%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg></a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/seo-toolkit-for-magento-2.html#reviews" aria-label="Reviews" >18&nbsp;<span>Reviews</span></a></div><div class="product-item-actions"><div class="price-box price-final_price" data-role="priceBox" data-product-id="793" data-price-box="product-id-793"><span class="normal-price"><span class="price-container price-final_price&#x20;tax&#x20;weee" ><span id="product-price-793" data-price-amount="349" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$349</span></span> </span></span> </div><div class="actions-primary"><button class="action tocart primary" type="button" data-amsite-analytics-js="SEO&#x20;Toolkit&#x20;Pro&#x20;for&#x20;Magento&#x20;2" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tLw&#x7E;&#x7E;&#x5C;&#x2F;product&#x5C;&#x2F;793&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;793&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tLw&#x7E;&#x7E;&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></div></div><div class="product-item"><div class="product-item-info"><img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva&#x20;compatibility" ><a href="https://amasty.com/product-feed-for-magento-2.html" class="product-item-photo"><span class="product-image-container" style="width:160px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/4e759f6dd520f03226056bcaf7c201bf/p/r/product-feed-for-magento-2_63f6257390eef.png" alt="Product Feed for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-521-cat amasty-label-for-521" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"521","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "521", "selector": ".amasty-label-container-13-521-cat" }}'><div class="amlabel-text"></div><img id="amasty-label-image-13-521-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Product&#x20;Feed&#x20;for&#x20;Magento&#x20;2" alt="Product&#x20;Feed&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="product-item-details"><span class="product-item-name"><a title="Product&#x20;Feed&#x20;for&#x20;Magento&#x20;2" aria-label="Product&#x20;Feed&#x20;for&#x20;Magento&#x20;2" href="https://amasty.com/product-feed-for-magento-2.html" class="product-item-link">Product Feed for Magento 2</a></span> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.9</p><a href="https://amasty.com/product-feed-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="85%" stop-color="&#x23;fcd34d"/><stop offset="85%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg></a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/product-feed-for-magento-2.html#reviews" aria-label="Reviews" >21&nbsp;<span>Reviews</span></a></div><div class="product-item-actions"><div class="price-box price-final_price" data-role="priceBox" data-product-id="521" data-price-box="product-id-521"><span class="normal-price"><span class="price-container price-final_price&#x20;tax&#x20;weee" ><span id="product-price-521" data-price-amount="229" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$229</span></span> </span></span> </div><div class="actions-primary"><button class="action tocart primary" type="button" data-amsite-analytics-js="Product&#x20;Feed&#x20;for&#x20;Magento&#x20;2" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tLw&#x7E;&#x7E;&#x5C;&#x2F;product&#x5C;&#x2F;521&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;521&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tLw&#x7E;&#x7E;&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></div></div><div class="product-item"><div class="product-item-info"><img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva&#x20;compatibility" ><a href="https://amasty.com/b2b-ecommerce-suite-for-magento-2.html" class="product-item-photo"><span class="product-image-container" style="width:160px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/4e759f6dd520f03226056bcaf7c201bf/i/c/icon_b2b_premium_2.png" alt="B2B E-commerce Premium Solution for Magento 2"/></span></span></a> <div class="product-item-details"><span class="product-item-name"><a title="B2B&#x20;E-commerce&#x20;Premium&#x20;Solution&#x20;for&#x20;Magento&#x20;2" aria-label="B2B&#x20;E-commerce&#x20;Premium&#x20;Solution&#x20;for&#x20;Magento&#x20;2" href="https://amasty.com/b2b-ecommerce-suite-for-magento-2.html" class="product-item-link">B2B E-commerce Premium Solution for Magento 2</a></span> <div class="product-item-actions"><div class="price-box price-final_price" data-role="priceBox" data-product-id="1634" data-price-box="product-id-1634"><span class="normal-price"><span class="price-container price-final_price&#x20;tax&#x20;weee" ><span id="product-price-1634" data-price-amount="2529" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$2,529</span></span> </span></span> </div><div class="actions-primary"><button class="action tocart primary" type="button" data-amsite-analytics-js="B2B&#x20;E-commerce&#x20;Premium&#x20;Solution&#x20;for&#x20;Magento&#x20;2" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tLw&#x7E;&#x7E;&#x5C;&#x2F;product&#x5C;&#x2F;1634&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;1634&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tLw&#x7E;&#x7E;&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></div></div></div></div></div></div><div class="amasty-label-container amasty-label-container-13-649-cat amasty-label-for-649" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":1,"product":"649","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "649", "selector": ".amasty-label-container-13-649-cat" }}'><div class="amlabel-text"></div><img id="amasty-label-image-13-649-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" alt="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" ></div><div class="amasty-label-container amasty-label-container-13-793-cat amasty-label-for-793" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":1,"product":"793","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "793", "selector": ".amasty-label-container-13-793-cat" }}'><div class="amlabel-text"></div><img id="amasty-label-image-13-793-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="SEO&#x20;Toolkit&#x20;Pro&#x20;for&#x20;Magento&#x20;2" alt="SEO&#x20;Toolkit&#x20;Pro&#x20;for&#x20;Magento&#x20;2" ></div><div class="amasty-label-container amasty-label-container-13-521-cat amasty-label-for-521" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":1,"product":"521","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "521", "selector": ".amasty-label-container-13-521-cat" }}'><div class="amlabel-text"></div><img id="amasty-label-image-13-521-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Product&#x20;Feed&#x20;for&#x20;Magento&#x20;2" alt="Product&#x20;Feed&#x20;for&#x20;Magento&#x20;2" ></div></div></div></div></div><div class="r9nyul6 mgz-element mgz-element-column homepage-related-block mgz-col-xs-12"><div class="mgz-element-inner r9nyul6-s"><div class="w9wpxwl mgz-element mgz-child mgz-element-magento_widget"><div class="mgz-element-inner w9wpxwl-s"></div></div></div></div><div class="iy0t21h mgz-element mgz-element-column homepage-scroll-block mgz-col-xs-12"><div class="mgz-element-inner iy0t21h-s"><div class="vrhvemx mgz-element mgz-child mgz-element-static_block"><div class="mgz-element-inner vrhvemx-s"><div class="magezon-builder magezon-builder-preload"><div class="abijsyb mgz-element mgz-element-row inner-homepage-reviews-block full_width_row"><div class="mgz-element-inner abijsyb-s"><div class="inner-content mgz-container"><div class="fglide1 mgz-element mgz-element-column homepage-scroll-block-head mgz-col-xs-12"><div class="mgz-element-inner fglide1-s"><div class="b3qbo4i mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner b3qbo4i-s"><h2 class="default-size-on-cms">Customers reviews <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/homepage-scroll.png" width="35" height="21" alt="" /></h2></div></div></div></div><div class="inm1k5b mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner inm1k5b-s"><div class="pcly6ix mgz-element mgz-element-row homepage-scroll-block-content-row full_width_row"><div class="mgz-element-inner pcly6ix-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax pcly6ix-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="dx3j2mh mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner dx3j2mh-s"><div class="jbp4gwj mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner jbp4gwj-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quotes.png" alt="quotes" width="19" height="15" title="" /></div></div></div></div><div class="nwevwo3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner nwevwo3-s"><p><strong>Stable and useful</strong></p></div></div><div class="hydg8bd mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hydg8bd-s"><div data-nosnippet=""><p>The extension is highly stable, easy to use, and certainly worth recommending to other e-commerce businesses seeking to enhance their navigation.</p></div></div></div><div class="w8j53o0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner w8j53o0-s"><p><strong><span style="color: #666666; font-size: 10px;">REVIEW BY HARLEY BROOKS</span></strong></p></div></div><div class="pxm0k53 mgz-element mgz-child mgz-element-separator homepage-scroll-block-separator mgz-element-title-align-center"><div class="mgz-element-inner pxm0k53-s"><div class="mgz-element-separator-wrapper mgz-text-center"><div class="mgz-element-separator-line"></div></div></div></div><div class="smx1buh mgz-element mgz-element-row homepage-scroll-block-bottom-content full_width_row"><div class="mgz-element-inner smx1buh-s"><div class="inner-content mgz-container"><div class="uyvvy8o mgz-element mgz-element-column picture mgz-col-md-6"><div class="mgz-element-inner uyvvy8o-s"><div class="mex43su mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner mex43su-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-image-link"><a class="" href="/improved-layered-navigation-for-magento-2.html" data-type="image" data-title="Visit this page" data-zoom="1" ><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/improved-layered-navigation-pro-for-magento-2.png" alt="improved-layered-navigation-pro-for-magento-2" width="46" height="46" title="Visit this page" /></a> </div></div></div></div></div></div><div class="rgnhygr mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner rgnhygr-s"><div class="vrpxtbf mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner vrpxtbf-s"><p style="margin-bottom: -5px;"><span style="color: #1a1a1a;"><a href="/improved-layered-navigation-for-magento-2.html" style="color: #1a1a1a;" title="Visit this page"><span style="font-size: 14px;"><strong>Improved Layered Navigation</strong></span></a></span></p><p><a href="/improved-layered-navigation-for-magento-2.html" title="Visit this page"><span style="font-size: 12px; color: #666666;">for Magento 2</span></a></p></div></div></div></div></div></div></div><div class="bdmqa04 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner bdmqa04-s"><p><a href="/improved-layered-navigation-for-magento-2.html#reviews" title="See all reviews">See all reviews</a></p><br/></div></div></div></div><div class="anoi6bk mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner anoi6bk-s"><div class="it9ssir mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner it9ssir-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quotes.png" alt="quotes" width="19" height="15" title="" /></div></div></div></div><div class="u0t4n80 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner u0t4n80-s"><p><b>Сart abandonment rate reduced by 40%</b></p></div></div><div class="mmb3xtj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner mmb3xtj-s"><div data-nosnippet=""><p><span style="font-weight: 400;">With Amasty’s One Step Checkout we reduced the cart abandonment rate by 40%. The module is easy to use and very friendly for customers. </span></p></div></div></div><div class="syxbbmk mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner syxbbmk-s"><p><strong><span style="color: #666666; font-size: 10px;">REVIEW BY LABINOT</span></strong></p></div></div><div class="ommuhol mgz-element mgz-child mgz-element-separator homepage-scroll-block-separator mgz-element-title-align-center"><div class="mgz-element-inner ommuhol-s"><div class="mgz-element-separator-wrapper mgz-text-center"><div class="mgz-element-separator-line"></div></div></div></div><div class="anewno8 mgz-element mgz-element-row homepage-scroll-block-bottom-content full_width_row"><div class="mgz-element-inner anewno8-s"><div class="inner-content mgz-container"><div class="xgrel37 mgz-element mgz-element-column picture mgz-col-md-6"><div class="mgz-element-inner xgrel37-s"><div class="j2k34m8 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner j2k34m8-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-image-link"><a class="" href="/one-step-checkout-for-magento-2.html" data-type="image" data-title="Visit this page" data-zoom="1" ><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/icon-one-step-checkout-pro-for-magento-2.png" alt="icon-one-step-checkout-pro-for-magento-2" width="46" height="46" title="Visit this page" /></a> </div></div></div></div></div></div><div class="w9fhysk mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner w9fhysk-s"><div class="wtlxjmx mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner wtlxjmx-s"><p style="margin-bottom: -5px;"><span style="color: #1a1a1a;"><a href="/one-step-checkout-for-magento-2.html" style="color: #1a1a1a;" title="Visit this page"><span style="font-size: 14px;"><strong>One Step Checkout Pro</strong></span></a></span></p><p><a href="/one-step-checkout-for-magento-2.html" title="Visit this page"><span style="font-size: 12px; color: #666666;">for Magento 2</span></a></p></div></div></div></div></div></div></div><div class="uppdfl3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner uppdfl3-s"><p><a href="/one-step-checkout-for-magento-2.html#reviews" title="See all reviews">See all reviews</a></p><br/></div></div></div></div><div class="l0udw63 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner l0udw63-s"><div class="vpof7d0 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner vpof7d0-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quotes.png" alt="quotes" width="19" height="15" title="" /></div></div></div></div><div class="gqah5sd mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner gqah5sd-s"><p><b>Nicely integrated content generation into Magento</b></p></div></div><div class="auv5dop mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner auv5dop-s"><div data-nosnippet=""><p>We bought the module as addition to some other, just in order to test/try first. And since we started using it, we just love the results.</p></div></div></div><div class="w24vk3q mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner w24vk3q-s"><p><strong><span style="color: #666666; font-size: 10px;">REVIEW BY MARTIN</span></strong></p></div></div><div class="d8nj1j7 mgz-element mgz-child mgz-element-separator homepage-scroll-block-separator mgz-element-title-align-center"><div class="mgz-element-inner d8nj1j7-s"><div class="mgz-element-separator-wrapper mgz-text-center"><div class="mgz-element-separator-line"></div></div></div></div><div class="wxi5uw4 mgz-element mgz-element-row homepage-scroll-block-bottom-content full_width_row"><div class="mgz-element-inner wxi5uw4-s"><div class="inner-content mgz-container"><div class="ed51pfn mgz-element mgz-element-column picture mgz-col-md-6"><div class="mgz-element-inner ed51pfn-s"><div class="ipwxqr7 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner ipwxqr7-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-image-link"><a class="" href="/chatgpt-ai-content-for-magento-2.html" data-type="image" data-title="Visit this page" data-zoom="1" ><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/chatgpt-ai-content-generator-light-for-magento-2_1_.png" alt="chatgpt-ai-content-generator-light-for-magento-2_1_" width="46" height="46" title="Visit this page" /></a> </div></div></div></div></div></div><div class="vfp0ykm mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner vfp0ykm-s"><div class="e7njn96 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner e7njn96-s"><p style="margin-bottom: -5px;"><span style="color: #1a1a1a;"><a href="/chatgpt-ai-content-for-magento-2.html" style="color: #1a1a1a;" title="Visit this page"><span style="font-size: 14px;"><strong>ChatGPT AI Content Generator</strong></span></a></span></p><p><a href="/chatgpt-ai-content-for-magento-2.html" title="Visit this page"><span style="font-size: 12px; color: #666666;">for Magento 2</span></a></p></div></div></div></div></div></div></div><div class="qqj271u mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner qqj271u-s"><p><a href="/chatgpt-ai-content-for-magento-2.html#reviews" title="See all reviews">See all reviews</a></p><br/></div></div></div></div><div class="gtdla0m mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner gtdla0m-s"><div class="w5ek32o mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner w5ek32o-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quotes.png" alt="quotes" width="19" height="15" title="" /></div></div></div></div><div class="oxr65c3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner oxr65c3-s"><p><strong><b>Simple &amp; Powerful</b></strong></p></div></div><div class="rt8r828 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner rt8r828-s"><div data-nosnippet=""><p><span style="font-weight: 400;">The Amasty plugin for Google Analytics integration is simply fantastic! It effortlessly connects my Magento 2 to Google Analytics and Google Tag Manager, providing valuable insights into customer behavior and website performance.</span></p></div></div></div><div class="h4m2b8m mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner h4m2b8m-s"><p><strong><span style="color: #666666; font-size: 10px;">REVIEW BY JOÃO PAULO</span></strong></p></div></div><div class="y51y75p mgz-element mgz-child mgz-element-separator homepage-scroll-block-separator mgz-element-title-align-center"><div class="mgz-element-inner y51y75p-s"><div class="mgz-element-separator-wrapper mgz-text-center"><div class="mgz-element-separator-line"></div></div></div></div><div class="y1ya1wn mgz-element mgz-element-row homepage-scroll-block-bottom-content full_width_row"><div class="mgz-element-inner y1ya1wn-s"><div class="inner-content mgz-container"><div class="tt6829p mgz-element mgz-element-column picture mgz-col-md-6"><div class="mgz-element-inner tt6829p-s"><div class="n7k01ak mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner n7k01ak-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-image-link"><a class="" href="/google-tag-manager-for-magento-2.html" data-type="image" data-title="Visit this page" data-zoom="1" ><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/google-tag-manager-for-magento-2_1_.png" alt="google-tag-manager-for-magento-2_1_" width="46" height="46" title="Visit this page" /></a> </div></div></div></div></div></div><div class="xiudi6f mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner xiudi6f-s"><div class="bm4098a mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner bm4098a-s"><p style="margin-bottom: -5px;"><a href="/google-tag-manager-for-magento-2.html"><span style="color: #1a1a1a;"><b>Google Analytics 4 with GTM Support</b></span></a></p><p><a href="/google-tag-manager-for-magento-2.html" title="Visit this page"><span style="font-size: 12px; color: #666666;">for Magento 2</span></a></p></div></div></div></div></div></div></div><div class="hl86dpk mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hl86dpk-s"><p><a href="/google-tag-manager-for-magento-2.html#reviews" title="See all reviews">See all reviews</a></p><br/></div></div></div></div><div class="w1mabt4 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner w1mabt4-s"><div class="d5aoib4 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner d5aoib4-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quotes.png" alt="quotes" width="19" height="15" title="" /></div></div></div></div><div class="j0ge6rg mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner j0ge6rg-s"><p><b>27% boost in purchases</b></p></div></div><div class="pq84y41 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner pq84y41-s"><div data-nosnippet=""><p>The extension is simple and easy to install. One of the best solutions for promotion of sales and increasing customer satisfaction. The result is a 27% increase in purchases.</p></div></div></div><div class="tqxsab8 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner tqxsab8-s"><p><strong><span style="color: #666666; font-size: 10px;">REVIEW BY SUZANNE BROWNING</span></strong></p></div></div><div class="xpy02c9 mgz-element mgz-child mgz-element-separator homepage-scroll-block-separator mgz-element-title-align-center"><div class="mgz-element-inner xpy02c9-s"><div class="mgz-element-separator-wrapper mgz-text-center"><div class="mgz-element-separator-line"></div></div></div></div><div class="a67xoa9 mgz-element mgz-element-row homepage-scroll-block-bottom-content full_width_row"><div class="mgz-element-inner a67xoa9-s"><div class="inner-content mgz-container"><div class="qtuq76j mgz-element mgz-element-column picture mgz-col-md-6"><div class="mgz-element-inner qtuq76j-s"><div class="r85jgvc mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner r85jgvc-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-image-link"><a class="" href="/free-gift-for-magento-2.html" data-type="image" data-title="Visit this page" data-zoom="1" ><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/free-gift-pro-for-magento-2.png" alt="free-gift-pro-for-magento-2" width="46" height="46" title="Visit this page" /></a> </div></div></div></div></div></div><div class="xex40dk mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner xex40dk-s"><div class="ofbaebs mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ofbaebs-s"><p style="margin-bottom: -5px;"><span style="color: #1a1a1a;"><a href="/free-gift-for-magento-2.html" style="color: #1a1a1a;" title="Visit this page"><span style="font-size: 14px;"><strong>Free Gift </strong></span></a></span></p><p><a href="/free-gift-for-magento-2.html" title="Visit this page"><span style="font-size: 12px; color: #666666;">for Magento 2</span></a></p></div></div></div></div></div></div></div><div class="flupbcf mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner flupbcf-s"><p><a href="/free-gift-for-magento-2.html#reviews" title="See all reviews">See all reviews</a></p><br/></div></div></div></div><div class="avpy04s mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner avpy04s-s"><div class="nkqoi6q mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner nkqoi6q-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quotes.png" alt="quotes" width="19" height="15" title="" /></div></div></div></div><div class="aypdenp mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner aypdenp-s"><p><b>Would definitely recommend</b></p></div></div><div class="t6swlug mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner t6swlug-s"><div data-nosnippet=""><p><span style="font-weight: 400;">5 stars! The extension offers the search features I need for a large catalogue, so would definitely recommend for any e-commerce store.</span></p></div></div></div><div class="ruc6j8p mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ruc6j8p-s"><p><strong><span style="color: #666666; font-size: 10px;">REVIEW BY BILLY McGILL</span></strong></p></div></div><div class="g2asfa0 mgz-element mgz-child mgz-element-separator homepage-scroll-block-separator mgz-element-title-align-center"><div class="mgz-element-inner g2asfa0-s"><div class="mgz-element-separator-wrapper mgz-text-center"><div class="mgz-element-separator-line"></div></div></div></div><div class="axa80ag mgz-element mgz-element-row homepage-scroll-block-bottom-content full_width_row"><div class="mgz-element-inner axa80ag-s"><div class="inner-content mgz-container"><div class="iylgf1j mgz-element mgz-element-column picture mgz-col-md-6"><div class="mgz-element-inner iylgf1j-s"><div class="jbucoed mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner jbucoed-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-image-link"><a class="" href="/elasticsearch-for-magento-2.html" data-type="image" data-title="Visit this page" data-zoom="1" ><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/elastic-search-pro-for-magento-2_2x.png" alt="elastic-search-pro-for-magento-2_2x" width="46" height="46" title="Visit this page" /></a> </div></div></div></div></div></div><div class="ltdws59 mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner ltdws59-s"><div class="yylhkxk mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner yylhkxk-s"><p style="margin-bottom: -5px;"><a href="/elasticsearch-for-magento-2.html"><span style="color: #1a1a1a;"><b>Elastic Search</b></span></a></p><p><a href="/elasticsearch-for-magento-2.html" title="Visit this page"><span style="font-size: 12px; color: #666666;">for Magento 2</span></a></p></div></div></div></div></div></div></div><div class="bq9hpjl mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner bq9hpjl-s"><p><a href="/elasticsearch-for-magento-2.html#reviews" title="See all reviews">See all reviews</a></p><br/></div></div></div></div><div class="md5pn3a mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner md5pn3a-s"><div class="ysm6ise mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner ysm6ise-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quotes.png" alt="quotes" width="19" height="15" title="" /></div></div></div></div><div class="sfcm10m mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner sfcm10m-s"><p><b>15% increase in conversions</b></p></div></div><div class="pt51jxa mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner pt51jxa-s"><div data-nosnippet=""><p><span style="font-weight: 400;">It has allowed our company to communicate with our customers on a regular basis. the conversion ratio has increased by 15%.</span></p></div></div></div><div class="f9otol5 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner f9otol5-s"><p><strong><span style="color: #666666; font-size: 10px;">REVIEW BY JAVIER CASTRO</span></strong></p></div></div><div class="obi1cf9 mgz-element mgz-child mgz-element-separator homepage-scroll-block-separator mgz-element-title-align-center"><div class="mgz-element-inner obi1cf9-s"><div class="mgz-element-separator-wrapper mgz-text-center"><div class="mgz-element-separator-line"></div></div></div></div><div class="g37bjtf mgz-element mgz-element-row homepage-scroll-block-bottom-content full_width_row"><div class="mgz-element-inner g37bjtf-s"><div class="inner-content mgz-container"><div class="o20obws mgz-element mgz-element-column picture mgz-col-md-6"><div class="mgz-element-inner o20obws-s"><div class="btwaym8 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner btwaym8-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-image-link"><a class="" href="/blog-pro-for-magento-2.html" data-type="image" data-title="Visit this page" data-zoom="1" ><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/blog-pro-for-magento-2_2x.png" alt="blog-pro-for-magento-2_2x" width="46" height="46" title="Visit this page" /></a> </div></div></div></div></div></div><div class="ufptt1j mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner ufptt1j-s"><div class="p4ldkeg mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner p4ldkeg-s"><p style="margin-bottom: -5px;"><a href="/blog-pro-for-magento-2.html"><span style="color: #1a1a1a;"><b>Blog Pro</b></span></a></p><p><a href="/blog-pro-for-magento-2.html" title="Visit this page"><span style="font-size: 12px; color: #666666;">for Magento 2</span></a></p></div></div></div></div></div></div></div><div class="j8ujh8h mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner j8ujh8h-s"><p><a href="/blog-pro-for-magento-2.html#reviews" title="See all reviews">See all reviews</a></p><br/></div></div></div></div><div class="wrll76x mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner wrll76x-s"><div class="s4f3mcc mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner s4f3mcc-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quotes.png" alt="quotes" width="19" height="15" title="" /></div></div></div></div><div class="olrk0ak mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner olrk0ak-s"><p><b>2x better results</b></p></div></div><div class="g24ugr5 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner g24ugr5-s"><div data-nosnippet=""><p><span style="font-weight: 400;">We managed to improve on average, in desktop environment, from 30/40 to 75/85, without needing a considerable effort for installation or configuration. </span></p></div></div></div><div class="b9tn6yo mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner b9tn6yo-s"><p><strong><span style="color: #666666; font-size: 10px;">REVIEW BY GIANNI</span></strong></p></div></div><div class="yl7apqy mgz-element mgz-child mgz-element-separator homepage-scroll-block-separator mgz-element-title-align-center"><div class="mgz-element-inner yl7apqy-s"><div class="mgz-element-separator-wrapper mgz-text-center"><div class="mgz-element-separator-line"></div></div></div></div><div class="fgns3c9 mgz-element mgz-element-row homepage-scroll-block-bottom-content full_width_row"><div class="mgz-element-inner fgns3c9-s"><div class="inner-content mgz-container"><div class="d83l8vf mgz-element mgz-element-column picture mgz-col-md-6"><div class="mgz-element-inner d83l8vf-s"><div class="s8kikwh mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner s8kikwh-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-image-link"><a class="" href="/google-page-speed-optimizer-for-magento-2.html" data-type="image" data-title="Visit this page" data-zoom="1" ><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/google-page-speed-optimizer-pro-for-magento-2_2x.png" alt="google-page-speed-optimizer-pro-for-magento-2_2x" width="46" height="46" title="Visit this page" /></a> </div></div></div></div></div></div><div class="edok3oa mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner edok3oa-s"><div class="a0mga6s mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner a0mga6s-s"><p style="margin-bottom: -5px;"><a href="/google-page-speed-optimizer-for-magento-2.html"><span style="color: #1a1a1a;"><b>Google Page Speed Optimizer</b></span></a></p><p><a href="/google-page-speed-optimizer-for-magento-2.html" title="Visit this page"><span style="font-size: 12px; color: #666666;">for Magento 2</span></a></p></div></div></div></div></div></div></div><div class="nt3fuhf mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner nt3fuhf-s"><p><a href="/google-page-speed-optimizer-for-magento-2.html#reviews" title="See all reviews">See all reviews</a></p><br/></div></div></div></div><div class="o09on5k mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner o09on5k-s"><div class="rcqa0ct mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner rcqa0ct-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quotes.png" alt="quotes" width="19" height="15" title="" /></div></div></div></div><div class="mqdcod3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner mqdcod3-s"><p><b>Simple and practical</b></p></div></div><div class="gafgvtx mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner gafgvtx-s"><div data-nosnippet=""><p><span style="font-weight: 400;">Nice custom labels for all pages. The extension is full of useful features, and support is fast!</span></p></div></div></div><div class="n5818x6 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner n5818x6-s"><p><strong><span style="color: #666666; font-size: 10px;">REVIEW BY JAXON WILLIAMSON</span></strong></p></div></div><div class="sb9yuxp mgz-element mgz-child mgz-element-separator homepage-scroll-block-separator mgz-element-title-align-center"><div class="mgz-element-inner sb9yuxp-s"><div class="mgz-element-separator-wrapper mgz-text-center"><div class="mgz-element-separator-line"></div></div></div></div><div class="khcfb9m mgz-element mgz-element-row homepage-scroll-block-bottom-content full_width_row"><div class="mgz-element-inner khcfb9m-s"><div class="inner-content mgz-container"><div class="ikoapkq mgz-element mgz-element-column picture mgz-col-md-6"><div class="mgz-element-inner ikoapkq-s"><div class="av4kbt4 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner av4kbt4-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-image-link"><a class="" href="/product-labels-for-magento-2.html" data-type="image" data-title="Visit this page" data-zoom="1" ><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/product-labels-for-magento-2_2x.png" alt="product-labels-for-magento-2_2x" width="46" height="46" title="Visit this page" /></a> </div></div></div></div></div></div><div class="fo7s56i mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner fo7s56i-s"><div class="nfus4wm mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner nfus4wm-s"><p style="margin-bottom: -5px;"><a href="/product-labels-for-magento-2.html"><span style="color: #1a1a1a;"><b>Product Labels</b></span></a></p><p><a href="/product-labels-for-magento-2.html" title="Visit this page"><span style="font-size: 12px; color: #666666;">for Magento 2</span></a></p></div></div></div></div></div></div></div><div class="rntpisd mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner rntpisd-s"><p><a href="/product-labels-for-magento-2.html#reviews" title="See all reviews">See all reviews</a></p><br/></div></div></div></div><div class="t9j1akm mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner t9j1akm-s"><div class="cgs402l mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner cgs402l-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quotes.png" alt="quotes" width="19" height="15" title="" /></div></div></div></div><div class="kj7pp1f mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner kj7pp1f-s"><p><b>Must-have tool for e-commerce stores</b></p></div></div><div class="x8esshd mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner x8esshd-s"><div data-nosnippet=""><p><span style="font-weight: 400;">Greatly helped us to improve our visibility on Google. Despite being a complex solution, it is quite intuitive and easy to use.</span></p></div></div></div><div class="cf3oi0e mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner cf3oi0e-s"><p><strong><span style="color: #666666; font-size: 10px;">REVIEW BY BENJAMIN</span></strong></p></div></div><div class="xnegwkb mgz-element mgz-child mgz-element-separator homepage-scroll-block-separator mgz-element-title-align-center"><div class="mgz-element-inner xnegwkb-s"><div class="mgz-element-separator-wrapper mgz-text-center"><div class="mgz-element-separator-line"></div></div></div></div><div class="uygerma mgz-element mgz-element-row homepage-scroll-block-bottom-content full_width_row"><div class="mgz-element-inner uygerma-s"><div class="inner-content mgz-container"><div class="wxgf9q8 mgz-element mgz-element-column picture mgz-col-md-6"><div class="mgz-element-inner wxgf9q8-s"><div class="jxyq6fb mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner jxyq6fb-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-image-link"><a class="" href="/seo-toolkit-for-magento-2.html" data-type="image" data-title="Visit this page" data-zoom="1" ><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/seo-toolkit-pro-for-magento-2_2x.png" alt="seo-toolkit-pro-for-magento-2_2x" width="46" height="46" title="Visit this page" /></a> </div></div></div></div></div></div><div class="ybd4a8c mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner ybd4a8c-s"><div class="hnnatrw mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hnnatrw-s"><p style="margin-bottom: -5px;"><a href="/seo-toolkit-for-magento-2.html"><span style="color: #1a1a1a;"><b>SEO Toolkit</b></span></a></p><p><a href="/seo-toolkit-for-magento-2.html" title="Visit this page"><span style="font-size: 12px; color: #666666;">for Magento 2</span></a></p></div></div></div></div></div></div></div><div class="k9bs0ht mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner k9bs0ht-s"><p><a href="/seo-toolkit-for-magento-2.html#reviews" title="See all reviews">See all reviews</a></p><br/></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="s2m7vgi mgz-element mgz-element-column homepage-slides-block mgz-col-xs-12"><div class="mgz-element-inner s2m7vgi-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax s2m7vgi-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="u3hn3oc mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner u3hn3oc-s"><h2 class="default-size-on-cms"><span style="color: #ffffff;">Recent posts</span></h2></div></div><div class="wconabn mgz-element mgz-child mgz-element-magento_widget"><div class="mgz-element-inner wconabn-s"><div class="ambanner-slider-container arrow-position-2 homepagerecentpostslider default-mode -more-one-slide "><div class="ambanner-slider-wrap -alignment-left" data-ambanner-js="slider-wrapper" style="max-width: 1250px;" ><style> .homepagerecentpostslider .ambanner-slider-dots > li > button { background: #42496d !important; } .homepagerecentpostslider .ambanner-slider-dots > li.slick-active > button { background: #ffffff !important; } .homepagerecentpostslider.ambanner-slider-container .ambanner-slider-block .ambanner-arrow-button.slick-arrow > svg > path { fill: #ffffff; } .homepagerecentpostslider.ambanner-slider-container .ambanner-slider-block .ambanner-arrow-button.slick-arrow > svg > rect { stroke: #ffffff; } .homepagerecentpostslider.ambanner-slider-container .ambanner-slider-block .ambanner-arrow-button.slick-arrow.slick-disabled > svg > path { fill: #42496d; } .homepagerecentpostslider.ambanner-slider-container .ambanner-slider-block .ambanner-arrow-button.slick-arrow.slick-disabled > svg > rect { stroke: #42496d; } .homepagerecentpostslider .slider-counter { color: #ffffff; }</style><div class="ambanner-slider-block -ambanner-arrows&#x20;-ambanner-dots&#x20;&#x20;-arrows-1&#x20;-dots-1 -ambanner-preloader" data-ambanner-js="slider" data-mage-init='{"amSlider":{ "sliderBlockWidth": 1250, "sliderAnimationEffect": 0, "transitionSpeed": 500, "isAutoplay": true, "isLazyload": true, "sliderOptions": { "slidesToShow": 2, "slidesToScroll": 1, "showCounter": 1, "infinite": false, "arrows": true, "dots": true, "autoplay": true, "autoplaySpeed": 65535, "speed": 500, "responsive": [ { "breakpoint": 1024, "settings": { "infinite": false, "arrows": true, "dots": false, "slidesToShow": 1.5, "slidesToScroll": 1 } }, { "breakpoint": 769, "settings": { "infinite": false, "arrows": true, "dots": false, "slidesToShow": 2.2, "slidesToScroll": 1 } }, { "breakpoint": 640, "settings": { "infinite": false, "arrows": true, "dots": false, "slidesToShow": 1.7, "slidesToScroll": 1 } }, { "breakpoint": 480, "settings": { "infinite": false, "arrows": true, "dots": false, "slidesToShow": 1.3, "slidesToScroll": 1 } } ] } }}' ><div class="ambanner-item-block" data-ambanner-js="item" data-mage-init='{"amAnalytic":{ "elementId": "7", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><picture class="ambanner-image-block -overlay" ><source media="(max-width: 769px)" srcset="https://cdn.amasty.com/media/amasty/bannerslider/cache/i/s/300/320/is_shopify_legit_3_.png 1x, https://cdn.amasty.com/media/amasty/bannerslider/is_shopify_legit_3_.png 2x" /><img class="lazy ambanner-image amsite-ignore-lazy-load" data-ambanner-js="image" loading="lazy" src="https://cdn.amasty.com/media/amasty/bannerslider/cache/i/s/615/291/is_shopify_legit_2_.png" srcset="https://cdn.amasty.com/media/amasty/bannerslider/is_shopify_legit_2_.png 2x" alt="Is&#x20;Shopify&#x20;Trustworthy&#x3F;" /></picture><div class="ambanner-content-overlay"><div class="ambanner-content-block" data-ambanner-js="content-block"><div class="ambanner-inner" data-ambanner-js="content-inner"><div class="magezon-builder magezon-builder-preload"><div class="u1ic9vb mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner u1ic9vb-s"><div class="inner-content mgz-container"><div class="pmuvdaa mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner pmuvdaa-s"><div class="ufmyryl mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ufmyryl-s"><p><a href="#" class="action secondary" title="Read now">Read now</a></p></div></div></div></div></div></div></div></div></div></div></div><div class="ambanner-image-on-text-wrapper"><div class="magezon-builder magezon-builder-preload"><div class="d51th58 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner d51th58-s"><div class="inner-content mgz-container"><div class="ltx2bkk mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner ltx2bkk-s"><div class="poqi1na mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner poqi1na-s"><p><span style="color: #ffffff;"><strong><span style="font-size: 18px;">Is Shopify Trustworthy? Platform Security Overview for Sellers</span></strong></span></p><p><span style="font-size: 14px; color: #9199c8; display: block; margin-top: -10px;">February 18, 2025</span></p></div></div></div></div></div></div></div></div></div><a class="ambanner-link" title="Is&#x20;Shopify&#x20;Trustworthy&#x3F;" target="_self" href="https://amasty.com/blog/is-shopify-legit/"></a> </div><div class="ambanner-item-block" data-ambanner-js="item" data-mage-init='{"amAnalytic":{ "elementId": "15", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><picture class="ambanner-image-block -overlay" ><source media="(max-width: 769px)" srcset="https://cdn.amasty.com/media/amasty/bannerslider/cache/m/a/300/320/mageOS_and_magento_2_extension_compatibility_3_.png 1x, https://cdn.amasty.com/media/amasty/bannerslider/mageOS_and_magento_2_extension_compatibility_3_.png 2x" /><img class="lazy ambanner-image amsite-ignore-lazy-load" data-ambanner-js="image" loading="lazy" src="https://cdn.amasty.com/media/amasty/bannerslider/cache/m/a/615/291/mage_os_magento_modules_amasty_1.png" srcset="https://cdn.amasty.com/media/amasty/bannerslider/mage_os_magento_modules_amasty_1.png 2x" alt="Amasty&#x20;Magento&#x20;2&#x20;Modules&#x20;and&#x20;Mage-OS&#x3A;&#x20;Ensuring&#x20;Full&#x20;Compatibility" /></picture><div class="ambanner-content-overlay"><div class="ambanner-content-block" data-ambanner-js="content-block"><div class="ambanner-inner" data-ambanner-js="content-inner"><div class="magezon-builder magezon-builder-preload"><div class="y72w34i mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner y72w34i-s"><div class="inner-content mgz-container"><div class="rgmjwy1 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner rgmjwy1-s"><div class="w5of3r1 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner w5of3r1-s"><p><a href="#" class="action secondary" title="Read now">Read now</a></p></div></div></div></div></div></div></div></div></div></div></div><div class="ambanner-image-on-text-wrapper"><div class="magezon-builder magezon-builder-preload"><div class="en7dnir mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner en7dnir-s"><div class="inner-content mgz-container"><div class="b0eicyn mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner b0eicyn-s"><div class="rphpdtw mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner rphpdtw-s"><p><span style="color: #ffffff;"><strong><span style="font-size: 18px;">Amasty Magento 2 Modules and Mage-OS Compatibility</span></strong></span></p><p><span style="font-size: 14px; color: #9199c8; display: block; margin-top: -10px;">February 12, 2025</span></p></div></div></div></div></div></div></div></div></div><a class="ambanner-link" title="Amasty&#x20;Magento&#x20;2&#x20;Modules&#x20;and&#x20;Mage-OS&#x3A;&#x20;Ensuring&#x20;Full&#x20;Compatibility" target="_self" href="https://amasty.com/blog/amasty-modules-mage-os-compatibility/"></a> </div><div class="ambanner-item-block" data-ambanner-js="item" data-mage-init='{"amAnalytic":{ "elementId": "4", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><picture class="ambanner-image-block -overlay" ><source media="(max-width: 769px)" srcset="https://cdn.amasty.com/media/amasty/bannerslider/cache/b/e/300/320/best_product_ideas_for_e-commerce_3_.png 1x, https://cdn.amasty.com/media/amasty/bannerslider/best_product_ideas_for_e-commerce_3_.png 2x" /><img class="lazy ambanner-image amsite-ignore-lazy-load" data-ambanner-js="image" loading="lazy" src="https://cdn.amasty.com/media/amasty/bannerslider/cache/b/e/615/291/best_product_ideas_for_e-commerce_2_.png" srcset="https://cdn.amasty.com/media/amasty/bannerslider/best_product_ideas_for_e-commerce_2_.png 2x" alt="10&#x20;Best&#x20;Product&#x20;Ideas&#x20;to&#x20;Sell&#x20;Online&#x20;in&#x20;2025" /></picture><div class="ambanner-content-overlay"><div class="ambanner-content-block" data-ambanner-js="content-block"><div class="ambanner-inner" data-ambanner-js="content-inner"><div class="magezon-builder magezon-builder-preload"><div class="nhr06t4 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner nhr06t4-s"><div class="inner-content mgz-container"><div class="v598exl mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner v598exl-s"><div class="t4r64s0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner t4r64s0-s"><p><a href="#" class="action secondary" title="Read now">Read now</a></p></div></div></div></div></div></div></div></div></div></div></div><div class="ambanner-image-on-text-wrapper"><div class="magezon-builder magezon-builder-preload"><div class="ajc9k1r mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner ajc9k1r-s"><div class="inner-content mgz-container"><div class="gjw9st5 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner gjw9st5-s"><div class="gsto4mw mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner gsto4mw-s"><p><span style="color: #ffffff;"><strong><span style="font-size: 18px;">10 Best Product Ideas to Sell Online in 2025</span></strong></span></p><p><span style="font-size: 14px; color: #9199c8; display: block; margin-top: -10px;">February 19, 2025</span></p></div></div></div></div></div></div></div></div></div><a class="ambanner-link" title="10&#x20;Best&#x20;Product&#x20;Ideas&#x20;to&#x20;Sell&#x20;Online&#x20;in&#x20;2025" target="_self" href="https://amasty.com/blog/best-product-ideas-to-sell-online/"></a> </div><div class="ambanner-item-block" data-ambanner-js="item" data-mage-init='{"amAnalytic":{ "elementId": "14", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><picture class="ambanner-image-block -overlay" ><source media="(max-width: 769px)" srcset="https://cdn.amasty.com/media/amasty/bannerslider/cache/j/a/300/320/jan2025upd_3_.png 1x, https://cdn.amasty.com/media/amasty/bannerslider/jan2025upd_3_.png 2x" /><img class="lazy ambanner-image amsite-ignore-lazy-load" data-ambanner-js="image" loading="lazy" src="https://cdn.amasty.com/media/amasty/bannerslider/cache/j/a/615/291/jan2025upd_2_.png" srcset="https://cdn.amasty.com/media/amasty/bannerslider/jan2025upd_2_.png 2x" alt="Fresh&#x20;Updates&#x20;to&#x20;Amasty&#x20;Extensions&#x20;&#x2013;&#x20;January&#x20;2025" /></picture><div class="ambanner-content-overlay"><div class="ambanner-content-block" data-ambanner-js="content-block"><div class="ambanner-inner" data-ambanner-js="content-inner"><div class="magezon-builder magezon-builder-preload"><div class="xccygx5 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner xccygx5-s"><div class="inner-content mgz-container"><div class="s8sq2t3 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner s8sq2t3-s"><div class="dg6e9qk mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner dg6e9qk-s"><p><a href="#" class="action secondary" title="Read now">Read now</a></p></div></div></div></div></div></div></div></div></div></div></div><div class="ambanner-image-on-text-wrapper"><div class="magezon-builder magezon-builder-preload"><div class="wahvlos mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner wahvlos-s"><div class="inner-content mgz-container"><div class="y8dgd47 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner y8dgd47-s"><div class="ywhoyjb mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ywhoyjb-s"><p><span style="color: #ffffff;"><strong><span style="font-size: 18px;">Fresh Updates to Amasty Extensions – January 2025</span></strong></span></p><p><span style="font-size: 14px; color: #9199c8; display: block; margin-top: -10px;">February 11, 2025</span></p></div></div></div></div></div></div></div></div></div><a class="ambanner-link" title="Fresh&#x20;Updates&#x20;to&#x20;Amasty&#x20;Extensions&#x20;&#x2013;&#x20;January&#x20;2025" target="_self" href="https://amasty.com/blog/fresh-updates-to-amasty-extensions-january-2025/"></a> </div><div class="ambanner-item-block" data-ambanner-js="item" data-mage-init='{"amAnalytic":{ "elementId": "5", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><picture class="ambanner-image-block -overlay" ><source media="(max-width: 769px)" srcset="https://cdn.amasty.com/media/amasty/bannerslider/cache/e/-/300/320/e-commerce_countdowns_2_1_.png 1x, https://cdn.amasty.com/media/amasty/bannerslider/e-commerce_countdowns_2_1_.png 2x" /><img class="lazy ambanner-image amsite-ignore-lazy-load" data-ambanner-js="image" loading="lazy" src="https://cdn.amasty.com/media/amasty/bannerslider/cache/e/-/615/291/e-commerce_countdowns_2_2_.png" srcset="https://cdn.amasty.com/media/amasty/bannerslider/e-commerce_countdowns_2_2_.png 2x" alt="5&#x20;Best&#x20;Use&#x20;Cases&#x20;for&#x20;Countdown&#x20;Timers&#x20;to&#x20;Boost&#x20;E-commerce&#x20;Sales" /></picture><div class="ambanner-content-overlay"><div class="ambanner-content-block" data-ambanner-js="content-block"><div class="ambanner-inner" data-ambanner-js="content-inner"><div class="magezon-builder magezon-builder-preload"><div class="ksegdg9 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner ksegdg9-s"><div class="inner-content mgz-container"><div class="t1jdkc8 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner t1jdkc8-s"><div class="s9euc9f mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner s9euc9f-s"><p><a href="#" class="action secondary" title="Read now">Read now</a></p></div></div></div></div></div></div></div></div></div></div></div><div class="ambanner-image-on-text-wrapper"><div class="magezon-builder magezon-builder-preload"><div class="k1qcor6 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner k1qcor6-s"><div class="inner-content mgz-container"><div class="dp6dv48 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner dp6dv48-s"><div class="mw4obkd mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner mw4obkd-s"><p><span style="color: #ffffff;"><strong><span style="font-size: 18px;">5 Best Use Cases for Countdown Timers in E-commerce</span></strong></span></p><p><span style="font-size: 14px; color: #9199c8; display: block; margin-top: -10px;">February 5, 2025</span></p></div></div></div></div></div></div></div></div></div><a class="ambanner-link" title="5&#x20;Best&#x20;Use&#x20;Cases&#x20;for&#x20;Countdown&#x20;Timers&#x20;to&#x20;Boost&#x20;E-commerce&#x20;Sales" target="_self" href="https://amasty.com/blog/countdown-timers-best-use-cases-for-e-commerce/"></a> </div><div class="ambanner-item-block" data-ambanner-js="item" data-mage-init='{"amAnalytic":{ "elementId": "6", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><picture class="ambanner-image-block -overlay" ><source media="(max-width: 769px)" srcset="https://cdn.amasty.com/media/amasty/bannerslider/cache/h/o/300/320/how_to_sell_on_amazon_3_.png 1x, https://cdn.amasty.com/media/amasty/bannerslider/how_to_sell_on_amazon_3_.png 2x" /><img class="lazy ambanner-image amsite-ignore-lazy-load" data-ambanner-js="image" loading="lazy" src="https://cdn.amasty.com/media/amasty/bannerslider/cache/h/o/615/291/how_to_sell_on_amazon_2_.png" srcset="https://cdn.amasty.com/media/amasty/bannerslider/how_to_sell_on_amazon_2_.png 2x" alt="How&#x20;to&#x20;Sell&#x20;on&#x20;Amazon&#x3A;&#x20;The&#x20;Ultimate&#x20;Beginner&#x27;s&#x20;Guide&#x20;for&#x20;2025" /></picture><div class="ambanner-content-overlay"><div class="ambanner-content-block" data-ambanner-js="content-block"><div class="ambanner-inner" data-ambanner-js="content-inner"><div class="magezon-builder magezon-builder-preload"><div class="dyne47b mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner dyne47b-s"><div class="inner-content mgz-container"><div class="cp504u8 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner cp504u8-s"><div class="xe3mt7e mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner xe3mt7e-s"></div></div></div></div></div></div></div></div></div></div></div><div class="ambanner-image-on-text-wrapper"><div class="magezon-builder magezon-builder-preload"><div class="kl4g0eu mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner kl4g0eu-s"><div class="inner-content mgz-container"><div class="odcnhd3 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner odcnhd3-s"><div class="wutr103 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner wutr103-s"><p><span style="color: #ffffff;"><strong><span style="font-size: 18px;">How to Sell on Amazon: The Ultimate Beginner's Guide for 2025</span></strong></span></p><p><span style="font-size: 14px; color: #9199c8; display: block; margin-top: -10px;">February 13, 2025</span></p></div></div></div></div></div></div></div></div></div><a class="ambanner-link" title="How&#x20;to&#x20;Sell&#x20;on&#x20;Amazon&#x3A;&#x20;The&#x20;Ultimate&#x20;Beginner&#x27;s&#x20;Guide&#x20;for&#x20;2025" target="_self" href="https://amasty.com/blog/how-to-sell-on-amazon/"></a> </div></div></div></div></div></div></div></div><div class="k6va3k7 mgz-element mgz-element-column homepage-review-block mgz-col-xs-12"><div class="mgz-element-inner k6va3k7-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax k6va3k7-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="ac942ow mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ac942ow-s"><h2 class="default-size-on-cms">Testimonials</h2></div></div><div class="dptneli mgz-element mgz-child mgz-element-magento_widget"><div class="mgz-element-inner dptneli-s homepage-review-block-padding"><div class="ambanner-slider-container arrow-position-1 homepagereviewshtmlslider default-mode "><div class="ambanner-slider-wrap -alignment-left" data-ambanner-js="slider-wrapper" style="max-width: 1250px;" ><style> .homepagereviewshtmlslider .ambanner-slider-dots > li > button { background: #9f8a57 !important; } .homepagereviewshtmlslider .ambanner-slider-dots > li.slick-active > button { background: #0f0635 !important; } .homepagereviewshtmlslider.ambanner-slider-container .ambanner-slider-block .ambanner-arrow-button.slick-arrow > svg > path { fill: #0f0635; } .homepagereviewshtmlslider.ambanner-slider-container .ambanner-slider-block .ambanner-arrow-button.slick-arrow > svg > rect { stroke: #0f0635; } .homepagereviewshtmlslider.ambanner-slider-container .ambanner-slider-block .ambanner-arrow-button.slick-arrow.slick-disabled > svg > path { fill: #9f8a57; } .homepagereviewshtmlslider.ambanner-slider-container .ambanner-slider-block .ambanner-arrow-button.slick-arrow.slick-disabled > svg > rect { stroke: #9f8a57; } .homepagereviewshtmlslider .slider-counter { color: #0f0635; }</style><div class="ambanner-slider-block -ambanner-arrows&#x20;-ambanner-dots&#x20;&#x20;-arrows-1&#x20;-dots-1 " data-ambanner-js="slider" data-mage-init='{"amSlider":{ "sliderBlockWidth": 1250, "sliderAnimationEffect": 0, "transitionSpeed": 500, "isAutoplay": true, "isLazyload": false, "sliderOptions": { "slidesToShow": 1, "slidesToScroll": 1, "showCounter": 0, "infinite": false, "arrows": true, "dots": true, "autoplay": true, "autoplaySpeed": 3500, "speed": 500, "responsive": [ { "breakpoint": 1024, "settings": { "infinite": false, "arrows": false, "dots": true, "slidesToShow": 1, "slidesToScroll": 1 } }, { "breakpoint": 769, "settings": { "infinite": false, "arrows": false, "dots": true, "slidesToShow": 1, "slidesToScroll": 1 } }, { "breakpoint": 640, "settings": { "infinite": false, "arrows": false, "dots": true, "slidesToShow": 1, "slidesToScroll": 1 } }, { "breakpoint": 480, "settings": { "infinite": false, "arrows": false, "dots": true, "slidesToShow": 1, "slidesToScroll": 1 } } ] } }}' ><div class="ambanner-item-block" data-ambanner-js="item" data-mage-init='{"amAnalytic":{ "elementId": "8", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><div class="magezon-builder magezon-builder-preload"><div class="w5e2qnr mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner w5e2qnr-s"><div class="inner-content mgz-container"><div class="wgda4s8 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner wgda4s8-s"><div class="g69g6bq mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner g69g6bq-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quote-review.png" alt="quote-review" width="26" height="20" title="" /></div></div></div></div><div class="yk6ao0u mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner yk6ao0u-s"><div data-nosnippet=""><p><span style="font-size: 20px;">Amasty has proven to be a reliable partner with outstanding support and has a stack of very useful modules which suits our merchants needs. After meeting Amasty at the Magento Imagine conference we decided to close the partnership which makes our fit even better.</span></p></div></div></div><div class="ptby4gg mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner ptby4gg-s homepage-review-block-bottom"><div class="inner-content mgz-container"><div class="d6dhs7j mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner d6dhs7j-s"><div class="l3p9fs1 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner l3p9fs1-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/gijs.png" alt="gijs" width="80" height="80" title="" /></div></div></div></div></div></div><div class="cgnxf3g mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner cgnxf3g-s"><div class="hcjpix0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hcjpix0-s"><p><strong>Gijs Bitter, E-commerce consultant at Redkiwi</strong></p><p><span style="font-size: 14px; margin-top: -5px; display: block;"><a href="https://redkiwi.nl" rel="nofollow">www.redkiwi.nl</a></span></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="ambanner-item-block" data-ambanner-js="item" data-mage-init='{"amAnalytic":{ "elementId": "9", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><div class="magezon-builder magezon-builder-preload"><div class="mjqc0fm mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner mjqc0fm-s"><div class="inner-content mgz-container"><div class="c9lhhob mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner c9lhhob-s"><div class="n60k0p8 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner n60k0p8-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quote-review.png" alt="quote-review" width="26" height="20" title="" /></div></div></div></div><div class="aqktybh mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner aqktybh-s"><div data-nosnippet=""><p><span style="font-size: 20px;">We have been working with Amasty since 2015. Their Magento extensions have provided real value to our eCommerce clients, and extensive support has allowed our developers to work rapidly. We would thoroughly recommend Amasty to other agencies.</span></p></div></div></div><div class="cchlcbt mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner cchlcbt-s homepage-review-block-bottom"><div class="inner-content mgz-container"><div class="l2nvqea mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner l2nvqea-s"><div class="f4sd51o mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner f4sd51o-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/sam.png" alt="sam" width="80" height="80" title="" /></div></div></div></div></div></div><div class="khn9p76 mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner khn9p76-s"><div class="y660m17 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner y660m17-s"><p><strong>Sam Rutley, Managing Director at PushON</strong></p><p><span style="font-size: 14px; margin-top: -5px; display: block;"><a href="https://PushON.co.uk" rel="nofollow">www.PushON.co.uk </a></span></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="ambanner-item-block" data-ambanner-js="item" data-mage-init='{"amAnalytic":{ "elementId": "10", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><div class="magezon-builder magezon-builder-preload"><div class="d06bwo0 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner d06bwo0-s"><div class="inner-content mgz-container"><div class="j5gsh47 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner j5gsh47-s"><div class="v8p7jec mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner v8p7jec-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quote-review.png" alt="quote-review" width="26" height="20" title="" /></div></div></div></div><div class="yg074f4 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner yg074f4-s"><div data-nosnippet=""><p><span style="font-size: 20px;">We have been using Amasty's modules for the past few years and are very satisfied with their quality and support. Recently, we signed up for their partnership program and would highly recommend it to get the best out of their service.</span></p></div></div></div><div class="deyt8bc mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner deyt8bc-s homepage-review-block-bottom"><div class="inner-content mgz-container"><div class="v4wy6pg mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner v4wy6pg-s"><div class="sjuekfi mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner sjuekfi-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/mayank.png" alt="mayank" width="80" height="80" title="" /></div></div></div></div></div></div><div class="pcnuftg mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner pcnuftg-s"><div class="qbah7ec mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner qbah7ec-s"><p><strong>Mayank Agrawal, CTO &amp; Co-Founder at Dotcomweavers</strong></p><p><span style="font-size: 14px; margin-top: -5px; display: block;"><a href="https://dotcomweavers.com" rel="nofollow">www.dotcomweavers.com</a></span></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="ambanner-item-block" data-ambanner-js="item" data-mage-init='{"amAnalytic":{ "elementId": "11", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><div class="magezon-builder magezon-builder-preload"><div class="bpxb40t mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner bpxb40t-s"><div class="inner-content mgz-container"><div class="p38mrjj mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner p38mrjj-s"><div class="hfi697c mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner hfi697c-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quote-review.png" alt="quote-review" width="26" height="20" title="" /></div></div></div></div><div class="q96m24c mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner q96m24c-s"><div data-nosnippet=""><p><span style="font-size: 20px;">We've enjoyed the extra attention and service we get as Amasty partners. Amasty helps us keep merchant costs down by providing great products and assisting in addressing technical issues.</span></p></div></div></div><div class="kye3ec1 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner kye3ec1-s homepage-review-block-bottom"><div class="inner-content mgz-container"><div class="rpxa28e mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner rpxa28e-s"><div class="pev8may mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner pev8may-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/Paul_Byrne_President_Razoyo.png" alt="Paul_Byrne_President_Razoyo" width="80" height="80" title="" /></div></div></div></div></div></div><div class="nno6vja mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner nno6vja-s"><div class="j5ucrgl mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner j5ucrgl-s"><p><strong>Paul Byrne, President at Razoyo constalant at Redkiwi</strong></p><p><span style="font-size: 14px; margin-top: -5px; display: block;"><a href="https://razoyo.com" rel="nofollow">www.razoyo.com</a></span></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="ambanner-item-block" data-ambanner-js="item" data-mage-init='{"amAnalytic":{ "elementId": "12", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><div class="magezon-builder magezon-builder-preload"><div class="do4wmh1 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner do4wmh1-s"><div class="inner-content mgz-container"><div class="v1ml6l3 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner v1ml6l3-s"><div class="smmx3gt mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner smmx3gt-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quote-review.png" alt="quote-review" width="26" height="20" title="" /></div></div></div></div><div class="jvcsrme mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner jvcsrme-s"><div data-nosnippet=""><p><span style="font-size: 20px;">Amasty is a great ally and important partner when we develop complex webshops. They not only have a big assortment of finished modules but also flexible on expanding and customizing them as well as offering other professional Magento services</span></p></div></div></div><div class="xouq80a mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner xouq80a-s homepage-review-block-bottom"><div class="inner-content mgz-container"><div class="s0wq2eo mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner s0wq2eo-s"><div class="ji1dx7h mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner ji1dx7h-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/Thomas_Sorensen.png" alt="Thomas_Sorensen" width="80" height="80" title="" /></div></div></div></div></div></div><div class="pgwhdwx mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner pgwhdwx-s"><div class="u56u4vc mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner u56u4vc-s"><p><strong>Thomas Sørensen, vConnect, Technical Director &amp; Co-owner</strong></p><p><span style="font-size: 14px; margin-top: -5px; display: block;"><a href="https://vconnect.dk" rel="nofollow">www.vconnect.dk</a></span></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="ambanner-item-block" data-ambanner-js="item" data-mage-init='{"amAnalytic":{ "elementId": "13", "url": { "view": "https://amasty.com/ambannerslider/analytic/view/", "click": "https://amasty.com/ambannerslider/analytic/click/" } }}' ><div class="magezon-builder magezon-builder-preload"><div class="a20q6u8 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner a20q6u8-s"><div class="inner-content mgz-container"><div class="jd2lc6x mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner jd2lc6x-s"><div class="ge9q9j4 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner ge9q9j4-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/quote-review.png" alt="quote-review" width="26" height="20" title="" /></div></div></div></div><div class="mit7aal mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner mit7aal-s"><div data-nosnippet=""><p><span style="font-size: 20px;">When choosing an extension Amasty was always our first choice due to their consistent quality and brilliant documentation. That’s why becoming a partner of Amasty was a complete no-brainer for me and it has helped us deliver great quality to our clients. When things do go wrong they have a brilliant support network that means issues get resolved in a timely manner.</span></p></div></div></div><div class="bkdniok mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner bkdniok-s homepage-review-block-bottom"><div class="inner-content mgz-container"><div class="a6urm7u mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner a6urm7u-s"><div class="e8md1bq mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner e8md1bq-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/home-page-new/Andrew_Pemberton.png" alt="Andrew_Pemberton" width="80" height="80" title="" /></div></div></div></div></div></div><div class="ka06oqm mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner ka06oqm-s"><div class="r0pddog mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner r0pddog-s"><p><strong>Andrew Pemberton, Development Director at iWeb</strong></p><p><span style="font-size: 14px; margin-top: -5px; display: block;"><a href="https://iweb.co.uk" rel="nofollow">www.iweb.co.uk</a></span></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div> </div></div></main><footer class="page-footer"> <div class="bg-indigo-800"><div class="p-6 text-white text-center lg:flex lg:items-center lg:justify-between lg:px-12 max-w-screen-3xl xl:px-20 xl:mx-auto"><div><h4 class="m-0 mb-2 mx-auto font-gilr max-xs:max-w-xs !text-lg xs:!text-2xl lg:mb-0 lg:text-left">Never miss an update, join our newsletter club!</h4><p class="m-0 lg:text-left">Get the news, special offers, digests in your inbox</p></div><div class="lg:ml-5 lg:grow"><form class="form subscribe" action="https://amasty.com/newsletter/subscriber/new/" method="post" x-data="Object.assign(hyva.formValidation($el), initNewsletterForm())" @submit.prevent="submitForm()" id="newsletter-validate-detail" aria-label="Subscribe&#x20;to&#x20;Newsletter" ><div class="flex max-xs:flex-col justify-center gap-2 lg:justify-end"><div class="am-input field field-reserved !mb-0 light-error-text min-w-56 lg:w-full lg:max-w-sm"><input name="email" type="email" required id="newsletter-subscribe" placeholder="Enter&#x20;your&#x20;email&#x20;address" aria-describedby="footer-newsletter-heading" ><label for="newsletter-subscribe">Email Address</label> <input name="form_key" type="hidden" value="LyhLWGUTC10mVoyy" /></div> <button class="btn btn-secondary h-fit max-xs:mt-5" type="submit">Subscribe</button></div></form><script data-info="not-move-to-bottom"> function initNewsletterForm() { return { errors: 0, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#newsletter-validate-detail'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); } } }</script></div></div></div> <div x-data="initAmBackToTopBtn()" x-cloak @keyup.enter="$el.click()" class="p-4 bg-gray-600 transition-all hover:bg-gray-500 text-white text-center font-bold cursor-pointer am-text-small md:fixed md:right-0 md:bottom-[313px] md:z-[999] md:py-4 md:pl-2 md:pr-2 md:text-xs md:rounded-bl-xl md:rounded-tl-xl md:flex md:flex-col md:items-center md:gap-2 md:opacity-0" tabindex="0" data-role="button"><svg xmlns="http://www.w3.org/2000/svg" width="26" height="18" viewBox="0 0 30 30" fill="none" class="fill-white hidden md:!inline-block md:rotate-90" role="img"> <path fill-rule="evenodd" clip-rule="evenodd" d="M7.65685 22.0711L1.29289 15.7071C0.902369 15.3166 0.902369 14.6834 1.29289 14.2929L7.65685 7.92893C8.04738 7.53841 8.68054 7.53841 9.07107 7.92893C9.46159 8.31946 9.46159 8.95262 9.07107 9.34315L4.41421 14L28 14V16L4.41421 16L9.07107 20.6569C9.46159 21.0474 9.46159 21.6805 9.07107 22.0711C8.68054 22.4616 8.04738 22.4616 7.65685 22.0711Z"/> <title>arrow-left</title></svg> <div class="tracking-widest md:[writing-mode:tb-rl] md:rotate-180">BACK TO TOP</div></div><script data-info="not-move-to-bottom"> function initAmBackToTopBtn() { const SCROLL_THRESHOLD = 600; const CSS_CLASSES = { visibleClass: 'md:opacity-100' }; return { isMobile: true, init() { const matchMedia = window.matchMedia('(max-width: 768px)'); this.isMobile = matchMedia.matches; if (!this.isMobile) { this._addScrollListener(); } this._initClickOnBtnListeners(); }, _initClickOnBtnListeners() { this.$el.addEventListener('click', () => window.scrollTo({ top: 0, behavior: 'smooth' })); }, _addScrollListener() { window.addEventListener('scroll', this.throttle(() => { if (window.scrollY > SCROLL_THRESHOLD) { this.$el.classList.add(CSS_CLASSES.visibleClass); } else { this.$el.classList.remove(CSS_CLASSES.visibleClass); } }, 100)); }, ...AmsiteUtils() } }</script><div class="footer content"> <div class="bg-gray-800"><div class="pt-9 px-8 max-xs:px-6 lg:px-12 xl:px-20 lg:flex lg:pt-16 max-w-screen-3xl xl:mx-auto"><div class="flex lg:flex-col items-start justify-between mb-8"><div class="lg:mb-5"><div class="max-w-36 lg:max-w-none"> <a class="logo flex" href="https://amasty.com/" title="1" aria-label="store logo"><img src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/images/footer-logo.svg" title="Amasty&#x20;logo" alt="Amasty&#x20;logo" class="lazy logo-image" width="198" height="48" /></a></div> <ul class="flex items-center ul-reset mt-4 lg:mt-5"><li class="m-0"><a href="https://www.youtube.com/user/AmastyTeam?sub_confirmation=1" class="inline-block" target="_blank" aria-label="Youtube" rel="nofollow" ><svg xmlns="http://www.w3.org/2000/svg" width="23" height="28" fill="none" class="fill-gray-400 hover:fill-gray-300" role="img"><path d="M19.455 20.481H17.94l.007-.893a.72.72 0 01.713-.72h.097a.72.72 0 01.715.72l-.017.893zm-5.682-1.913c-.384 0-.698.262-.698.583v4.341c0 .32.314.581.698.581.386 0 .7-.26.7-.581v-4.34c0-.322-.314-.584-.7-.584zM23 16.14v8.258C23 26.38 21.307 28 19.237 28H3.763C1.693 28 0 26.38 0 24.398V16.14c0-1.98 1.693-3.602 3.763-3.602h15.474c2.07 0 3.763 1.621 3.763 3.602zM4.795 25.295v-8.7l1.917.002v-1.29L1.6 15.3v1.267l1.596.005v8.723h1.6zm5.75-7.403H8.946v4.645c0 .672.04 1.008-.002 1.126-.13.36-.715.743-.943.04-.038-.124-.004-.496-.005-1.134l-.006-4.677H6.4l.004 4.604c.001.705-.016 1.231.006 1.47.039.423.025.915.41 1.196.72.526 2.1-.078 2.444-.83l-.003.96 1.285.001v-7.401zm5.117 5.32l-.004-3.867c-.001-1.473-1.088-2.356-2.562-1.164l.006-2.874-1.597.002-.008 9.922 1.314-.02.12-.617c1.678 1.562 2.733.491 2.73-1.383zm5.005-.513l-1.2.006-.003.165v.679a.66.66 0 01-.655.659h-.235a.66.66 0 01-.656-.66v-1.785h2.746v-1.048c0-.767-.02-1.532-.082-1.97-.196-1.386-2.114-1.606-3.082-.897a1.83 1.83 0 00-.671.916c-.136.399-.204.943-.204 1.635v2.305c0 3.832 4.589 3.29 4.042-.005zm-6.152-12.516c.083.204.211.369.385.493.172.123.391.184.654.184.231 0 .435-.063.613-.193.177-.13.327-.324.449-.582l-.03.636h1.782v-7.69h-1.403v5.985c0 .324-.263.59-.585.59a.59.59 0 01-.584-.59V3.03h-1.464v5.188c0 .66.011 1.101.03 1.324.02.222.071.435.153.641zM9.113 5.84c0-.739.06-1.315.181-1.73.122-.415.34-.748.656-.999.315-.252.718-.379 1.208-.379.413 0 .766.083 1.061.243.297.162.526.372.684.631.162.26.271.528.33.801.06.277.09.696.09 1.26v1.945c0 .713-.029 1.238-.084 1.571-.054.334-.17.644-.351.935a1.676 1.676 0 01-.686.64 2.164 2.164 0 01-.968.206c-.406 0-.748-.057-1.03-.176a1.418 1.418 0 01-.658-.534 2.386 2.386 0 01-.335-.862c-.067-.336-.099-.842-.099-1.516l.001-2.036zm1.396 3.055c0 .435.32.79.71.79.389 0 .707-.355.707-.79V4.8c0-.434-.318-.79-.708-.79-.389 0-.709.356-.709.79v4.095zm-4.933 2.067h1.682l.001-5.899L9.247.01h-1.84L6.351 3.764 5.279 0H3.46l2.114 5.066.003 5.896z"/><title>social/social-youtube</title></svg> </a></li> <li class="m-0 ml-5"><a href="https://www.linkedin.com/company/amasty" class="inline-block" target="_blank" aria-label="Linkedin" rel="nofollow" ><svg xmlns="http://www.w3.org/2000/svg" width="23" height="23" fill="none" class="fill-gray-400 hover:fill-gray-300" role="img"><path d="M2.778 0c1.51.001 2.754 1.25 2.75 2.771C5.526 4.364 4.208 5.564 2.76 5.53 1.29 5.559-.001 4.329 0 2.761A2.775 2.775 0 012.778 0zM4.381 22.997H1.147a.76.76 0 01-.76-.762V8.405c0-.42.34-.76.76-.76h3.234c.42 0 .76.34.76.76v13.83a.76.76 0 01-.76.762zM23 12.502c0-2.9-2.345-5.25-5.237-5.25h-.83a4.646 4.646 0 00-4.076 2.411.348.348 0 00-.043-.005V7.96a.316.316 0 00-.316-.316H8.463a.316.316 0 00-.315.316v14.72c0 .175.141.317.315.317h4.123a.316.316 0 00.316-.315v-8.505c0-1.47 1.17-2.69 2.636-2.707a2.667 2.667 0 012.698 2.673v8.54c0 .174.141.316.315.316l4.133.001a.316.316 0 00.316-.316V12.5z"/><title>social/social-linkedin</title></svg> </a></li> <li class="m-0 ml-5"><a href="https://www.facebook.com/Amasty.Ltd" class="inline-block" target="_blank" aria-label="Facebook" rel="nofollow" ><svg xmlns="http://www.w3.org/2000/svg" width="13" height="25" fill="none" class="fill-gray-400 hover:fill-gray-300" role="img"><path d="M8.503 25.484V14.266h3.765l.564-4.372h-4.33V7.103c0-1.266.352-2.129 2.167-2.129h2.315V1.062C12.584 1.01 11.21.89 9.611.89 6.273.89 3.988 2.928 3.988 6.67v3.224H.213v4.372h3.775v11.218h4.515z"/><title>social/social-facebook</title></svg> </a></li> <li class="m-0 ml-5"><a href="https://twitter.com/AmastyTeam" class="inline-block" target="_blank" aria-label="Twitter" rel="nofollow" ><svg xmlns="http://www.w3.org/2000/svg" width="28" height="22" fill="none" class="fill-gray-400 hover:fill-gray-300" role="img"><path d="M8.805 22c10.567 0 16.346-8.465 16.346-15.805 0-.24 0-.48-.017-.718A11.482 11.482 0 0028 2.6c-1.049.45-2.16.744-3.3.874A5.611 5.611 0 0027.227.403a11.754 11.754 0 01-3.648 1.348 5.813 5.813 0 00-3.26-1.678 5.921 5.921 0 00-3.642.585 5.641 5.641 0 00-2.523 2.606 5.392 5.392 0 00-.365 3.553A16.748 16.748 0 017.23 5.133a16.22 16.22 0 01-5.281-4.12 5.4 5.4 0 00-.63 4.049 5.562 5.562 0 002.408 3.367 5.851 5.851 0 01-2.607-.695v.07c0 1.282.46 2.525 1.3 3.518a5.784 5.784 0 003.309 1.927 5.927 5.927 0 01-2.594.096 5.571 5.571 0 002.044 2.76 5.88 5.88 0 003.323 1.097 11.78 11.78 0 01-7.134 2.383c-.458-.001-.914-.028-1.368-.08a16.67 16.67 0 008.805 2.49"/><title>social/social-twitter</title></svg> </a></li></ul></div> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/new-trustpilot.svg" alt="Trustpilot logo" width="120" height="52"></div> <div x-data="initFooterLinksAccordion()" data-amsite-js="footer-links-accordion" class="lg:flex lg:justify-between lg:ml-24 xl:ml-32 lg:flex-grow lg:max-w-4xl"><details class="py-3 lg:p-0 border-b border-primary-darker lg:border-none"><summary x-data="{ isOpen: false }" @click="isOpen = $event.target.open && window.matchMedia('(max-width: 1023px)') ? true : !isOpen" class="flex justify-between items-center"><h3 class="m-0 text-gray-50">Legal</h3><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray w-5 h-5 lg:hidden" width="20" height="20" :class="{ 'rotate-180': isOpen }" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </summary><ul class="ul-reset pt-3"><li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Terms and conditions page" href="https://amasty.com/terms-and-conditions.html"> Terms &amp; Conditions </a></li> <li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Data processing consent page" href="https://amasty.com/data-processing-consent.html"> Data Processing Consent </a></li> <li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Privacy policy page" href="https://amasty.com/privacy-policy.html"> Privacy Policy </a></li> <li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to License agreement page" href="https://amasty.com/license.html"> License Agreement </a></li> <li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Support License Agreement page" href="https://amasty.com/support-license-agreement.html"> Support License Agreement </a></li></ul></details><details class="py-3 lg:p-0 border-b border-primary-darker lg:border-none"><summary x-data="{ isOpen: false }" @click="isOpen = $event.target.open && window.matchMedia('(max-width: 1023px)') ? true : !isOpen" class="flex justify-between items-center"><h3 class="m-0 text-gray-50">Knowledge Base</h3><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray w-5 h-5 lg:hidden" width="20" height="20" :class="{ 'rotate-180': isOpen }" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </summary><ul class="ul-reset pt-3"><li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Knowledge page" href="https://amasty.com/knowledge-base/"> FAQ </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Support Knowledge Base page" target="_blank" href="https://support.amasty.com/portal/en/kb"> Support Knowledge Base </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Product Comparison page" href="https://amasty.com/extension-comparisons.html"> Product Comparison </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to User Guides page" href="https://amasty.com/docs/doku.php?id=magento_2"> User Guides </a> </li></ul></details><details class="py-3 lg:p-0 border-b border-primary-darker lg:border-none"><summary x-data="{ isOpen: false }" @click="isOpen = $event.target.open && window.matchMedia('(max-width: 1023px)') ? true : !isOpen" class="flex justify-between items-center"><h3 class="m-0 text-gray-50">Corporate</h3><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray w-5 h-5 lg:hidden" width="20" height="20" :class="{ 'rotate-180': isOpen }" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </summary><ul class="ul-reset pt-3"><li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to About Us page" href="https://amasty.com/about.html"> About Us </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Media Kit page" href="https://amasty.com/about.html#media-kit"> Media Kit </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Blog" href="https://amasty.com/blog/"> Blog </a> </li></ul></details></div><script data-info="not-move-to-bottom"> 'use strict'; function initFooterLinksAccordion() { const detailsElements = document.querySelectorAll('[data-amsite-js="footer-links-accordion"] details'); const matchMedia = window.matchMedia('(max-width: 1023px)'); function detectMobile() { return matchMedia.matches; } function setBehavior() { const isMobile = detectMobile(); if (!isMobile) { detailsElements.forEach((details) => { details.setAttribute('open', ''); details.addEventListener('click', preventClose); }); } else { detailsElements.forEach((details) => { details.removeAttribute('open'); details.removeEventListener('click', preventClose); }); } } function preventClose(e) { if (e.target.nodeName !== 'A') { e.preventDefault(); } } matchMedia.addEventListener('change', setBehavior); return { init() { setBehavior(); } } }</script></div><div class="flex gap-2 pt-7 px-6 xs:px-8 max-xs:px-6 bg-gray-800 lg:pt-16 lg:justify-center"> <img class="lazy amsite-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/paypal.svg" alt="Paypal card" ><img class="lazy amsite-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/american.svg" alt="American Express card" ><img class="lazy amsite-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/discover.svg" alt="Discover card" ><img class="lazy amsite-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/mastercard.svg" alt="Mastercard" ><img class="lazy amsite-image" src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/visa.svg" alt="Visa card" ></div><!-- styles for cms block --><div class="hidden text-gray hover:text-gray-300 mb-1"></div></div> <div class="amtheme-footer-section"> </div></div></footer> <div x-data="{...hyva.modal(), ...initAmGdprPolicyPopup()}" x-init="initGdprPopup()" x-spread="eventListeners" x-bind="eventListeners"><div x-cloak x-spread="overlay('amgdpr-policy-popup')" x-bind="overlay('amgdpr-policy-popup')" class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-50 z-40"><div x-ref="amgdpr-policy-popup" role="dialog" aria-labelledby="amgdpr-policy-content" class="flex flex-col bg-white shadow-xl rounded-lg p-10 max-h-[95vh] max-w-6xl relative"><div tabindex="0" @focusin="focusAcceptButton()"></div><button @click="$dispatch('amgdpr-close-policy')" x-ref="amgdpr-close-policy" aria-label="Close" class="absolute right-4 top-4 text-gray-300 transition hover:text-black focus:drop-shadow-md hover:drop-shadow-md"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="h-6 w-6" width="24" height="24" role="img"><path fill-rule="evenodd" d="M4.293 4.293a1 1 0 0 1 1.414 0L10 8.586l4.293-4.293a1 1 0 1 1 1.414 1.414L11.414 10l4.293 4.293a1 1 0 0 1-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 0 1-1.414-1.414L8.586 10 4.293 5.707a1 1 0 0 1 0-1.414Z" clip-rule="evenodd"/><title>x</title></svg> </button> <div class="flex w-full"><p class="w-full text-blue-500 text-3xl mb-5 ml-3" x-text="title"></p></div><div x-show="notificationText && policyData.versionChanged" class="flex w-full"><p class="mb-4 p-4 bg-yellow-100 w-full" x-text="notificationText"></p></div><div id="amgdpr-policy-content" class="max-h-[500px] overflow-auto first:mx-0 child:mx-0" tabindex="0" x-html="policyText"></div><div class="mt-8 flex w-full justify-center"><button x-focus-first @click="$dispatch('amgdpr-accept-policy')" x-ref="amgdpr-accept-policy" type="button" class="btn btn-primary uppercase font-bold" aria-label="I&#x20;have&#x20;read&#x20;and&#x20;accept">I have read and accept</button></div><div tabindex="0" @focusin="focusCloseButton()"></div></div></div></div> <style> :root { /* Bar Color Settings */ --ambar-background: #fff; --ambar-links-color: #326ed1; --ambar-policy-text: #374151; /* Buttons Color Settings */ --ambar-button-accept-color: #337ab7; --ambar-button-accept-hover-color: #337ab7; --ambar-button-accept-text: #fff; --ambar-button-accept-hover-text: #fff; --ambar-button-allow-color: #337ab7; --ambar-button-allow-hover-color: #337ab7; --ambar-button-allow-text: #fff; --ambar-button-allow-hover-text: #fff; --ambar-button-decline-color: #337ab7; --ambar-button-decline-hover-color: #337ab7; --ambar-button-decline-text: #fff; --ambar-button-decline-hover-text: #fff; --ambar-button-settings-color: #337ab7; --ambar-button-settings-hover-color: #337ab7; --ambar-button-settings-text: #fff; --ambar-button-settings-hover-text: #fff; /* Buttons Order Settings */ --ambar-button-accept-order: 0; --ambar-button-allow-order: 0; --ambar-button-settings-order: 0; --ambar-button-decline-order: 0; }</style> <section x-cloak x-data="{isLoading: false}" @amcaptcha-loading-start.window="isLoading = true" @amcaptcha-loading-stop.window="isLoading = false"> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></section> <style> :root { --amlabel-margin-between: 7px; }</style> <div x-data="{ ...hyva.modal({ duration: 150, transitionEnter: 'transform duration-150', transitionLeave: 'transform duration-150' }), ...initAmastyCookieBar() }" x-init="initBar()" x-spread="eventListeners" x-bind="eventListeners" x-cloak id="am-cookie-bar" > <div x-cloak x-bind="overlay('am-cookie-bar')" x-spread="overlay('am-cookie-bar')" class=""><div class="fixed flex justify-center items-center text-left z-10 inset-0"><div x-ref="am-cookie-bar" role="dialog" aria-modal="true" x-no-overlay aria-label="Cookie&#x20;Bar" class="flex w-[90%] max-w-screen-md shadow-xl rounded-lg relative p-12 overflow-auto bg-container"> <div class="flex flex-col max-w-[740px] justify-center"><div class="flex w-full justify-end"><button type="button" @click="$dispatch('close-cookie-bar')" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button></div><div class="flex w-full justify-center flex-col"> <div class="w-full"><p class="text-ambar-policy-text am-text-small text-center">We use cookies to help improve our services, make personal offers, and enhance your experience. If you do not accept optional cookies below, your experience may be affected. If you want to know more, please read the <a href="/privacy-policy.html" title="Cookie Policy">Cookie Policy</a></p></div> <div class="flex flex-wrap w-full justify-center gap-4 mt-6"> <button @click.prevent="$dispatch(&#x27;cookiebar-action-allow&#x27;)" class="ambar-btn-accept&#x20;btn&#x20;btn-secondary" data-role="action">Accept Cookies</button> <button @click.prevent="$dispatch(&#x27;cookiebar-action-settings&#x27;)" class="ambar-btn-settings&#x20;btn&#x20;btn-as-text&#x20;&#x21;px-4" data-role="action">Custom Settings</button> </div></div></div></div></div></div></div> <div x-data="{...hyva.modal(), ...initCookieBarSettings()}" x-spread="eventListeners" x-bind="eventListeners"><div x-cloak x-spread="overlay('am-cookie-bar-settings')" x-bind="overlay('am-cookie-bar-settings')" class="am-overlay-popup"><div class="am-container-popup inset-0 items-center"><div x-ref="am-cookie-bar-settings" role="dialog" aria-labelledby="cookiebar-groups" class="am-dialog-popup max-w-3xl max-h-[92vh] max-xs:!mx-4 max-lg:mx-16 !rounded-xl"><div tabindex="0" @focusin="focusDoneButton()"></div><button type="button" @click="$dispatch(hide('close-am-cookie-bar-settings'))" x-ref="ambar-settings-close" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <p class="mb-7">Please select and accept your Cookies Group</p><div id="cookiebar-groups" class="max-h-[500px] overflow-auto mb-6 pr-7"> <div class="w-full flex flex-col"><template x-for="group in $store.AmastyCookieGroups.groupData" :key="group.groupId"><div class="mb-10"><div class="flex justify-between items-start mb-2"><h3 class="!text-base md:!text-xl ambar-group-title" x-text="group.name"></h3><div class="am-pretty-checkbox"><input type="checkbox" name="groups[]" x-model="group.checked" :id="`amcookie-popup-group-${group.groupId}`" :disabled="group.isEssential" :value="group.groupId" :aria-label="group.name" ><label :for="`amcookie-popup-group-${group.groupId}`"></label></div></div><p class="am-text-caption md:!text-sm ambar-group-description" x-html="group.description"></p><button class="btn btn-as-link md:!text-sm md:am-text-small" type="button" aria-label="More Information" @click="$dispatch('popup\u002Dopen\u002Dam\u002Dcookie\u002Dgroup\u002Dinfo', group)">More Information</button></div></template></div> <div x-data="{...hyva.modal(), ...initCookieGroupInfo_67be1e2370b17()}" x-spread="eventListeners" x-bind="eventListeners"><div x-cloak x-spread="overlay('popup-am-cookie-group-info')" x-bind="overlay('popup-am-cookie-group-info')" class="am-overlay-popup"><div class="am-container-popup inset-0 items-center"><div x-ref="popup-am-cookie-group-info" role="dialog" aria-labelledby="the-label" class="am-dialog-popup max-w-7xl max-h-[92vh] max-xs:!mx-4 max-lg:mx-16 !rounded-xl"><template x-if="group"><div x-focus-first><button type="button" @click="$dispatch('popup-close-am-cookie-group-info')" x-ref="ambar-settings-close" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <div class="md:flex md:justify-start pb-4"><h3 class="text-xl font-semibold" x-text="group.name"></h3></div><template x-if="group.description"><p class="mb-4" x-html="group.description"></p></template><div class="overflow-x-scroll md:overflow-x-auto"><table class="table-auto w-full mb-4 text-left"><thead><tr class="table table-fixed w-full"><th class="am-text-caption">Cookie Name</th><th class="am-text-caption">Cookie Provider</th><th class="am-text-caption">Cookie Description</th><th class="am-text-caption">Cookie Lifetime</th><th class="am-text-caption">Cookie Type</th></tr></thead><tbody class="block max-h-[500px] overflow-auto"><template x-for="(item, index) in group.cookies" :key="index"><tr class="table table-fixed w-full"><td x-text="item.name" class="break-words"></td><td x-text="item.provider" class=""></td><td x-html="item.description" class=""></td><td x-text="item.lifetime" class=""></td><td x-text="item.type" class=""></td></tr></template></tbody></table></div></div></template><button @click="$dispatch('popup-close-am-cookie-group-info')" aria-label="Done" class="btn btn-secondary w-full">Done</button></div></div></div></div></div><div class="w-full flex"><button class="btn btn-secondary w-full" x-ref="ambar-settings-done" x-focus-first @click="$dispatch('cookiebar-action-accept', $store.AmastyCookieGroups.getCheckedGroupIds())">Done</button></div><div tabindex="0" @focusin="focusCloseButton()"></div></div></div></div></div> <script data-info="not-move-to-bottom"> (function() { const PROMOTION_SELECTOR = '[data-promo-id]'; _trackPromotions(PROMOTION_SELECTOR); _initListener(); setTimeout(function () { console.log('delay_backstopjs_ready'); }, 7000); function _initListener () { document.body.addEventListener('initAnalyticsPromotion', function (e) { _trackPromotions(e.detail.element); }); } function _trackPromotions(selector) { const ecommerceAttributes = ['id', 'name', 'creative', 'position']; const elements = document.querySelectorAll(selector); [...elements].forEach((element) => { const elementPromotion = element; const params = {}; ecommerceAttributes.forEach((item) => { params[item] = elementPromotion.getAttribute('data-promo-' + item); }); _trackPromotionViews(elementPromotion, params); _trackPromotionClick(elementPromotion, params); }); } function _trackPromotionViews(element, params) { const observer = new IntersectionObserver(function (entries, observerer) { entries.forEach(function (entry) { if (entry.isIntersecting && entry.target.offsetHeight !== 0) { window.dataLayer.push({ 'event': 'view_promotion', any_transmitted_info: params.creative, any_transmitted_info_2: params.id, any_transmitted_info_3: params.name }); observerer.unobserve(entry.target); } }); }); observer.observe(element); } function _trackPromotionClick (element, params) { element.addEventListener('click', function () { if (!window.hasOwnProperty('google_tag_manager')) { return; } window.dataLayer.push({ 'event': 'select_promotion', 'any_transmitted_info': params.creative, 'any_transmitted_info_2': params.id, 'any_transmitted_info_3': params.name }); }); } }())</script> <script data-info="not-move-to-bottom"> 'use strict'; (function () { _initListeners(); function _initListeners() { _triggerAddToCartEvents(); } function _triggerDefaultAddToCartMatomo(productObject) { productObject.items.forEach(function(item) { window._mtm.push({ 'event': 'SuccessfulAddCart', 'any_transmitted_info': item.item_name }); }); } function _triggerAddToCartEvents() { let isAddCartFromPopup = false; let isAddCartFromProductPageFirstScree = false; const addCartBtn = document.querySelector('.amtheme-product-wrap [data-amtheme-js="addtocart-button"]'); if (addCartBtn) { addCartBtn.addEventListener('click', function () { if (!addCartBtn.closest('.amtheme-popup-block')) { isAddCartFromProductPageFirstScree = true; } }); } document.body.addEventListener('addProductFromBundlePopup', function () { isAddCartFromPopup = true; }); document.body.addEventListener('am.popupOpened', function () { const btnInPopup = document.querySelector('.amtheme-popup-block [data-amtheme-js="addtocart-button"]'); if (btnInPopup) { document.querySelector('.amtheme-popup-block [data-amtheme-js="addtocart-button"]').addEventListener('click', function () { isAddCartFromPopup = true; }); } }); document.body.addEventListener('successfulAddCart', (e) => { e.detail.forEach(function (productObject) { if (productObject.product_name) { if (isAddCartFromPopup) { window.dataLayer.push( { 'event': 'AddCartPopup', 'product_name': productObject.product_name } ); window._mtm.push({ 'event': 'AddCartPopup', 'any_transmitted_info': productObject.product_name }); } else if (isAddCartFromProductPageFirstScree) { window.dataLayer.push( { 'event': 'AddCartProduct', 'product_name': productObject.product_name } ); window._mtm.push({ 'event': 'AddCartProduct', 'any_transmitted_info': productObject.product_name, }); } } window.dataLayer.push({ event: 'SuccessfulAddCart', ecommerce: { value: productObject.value, items: productObject.items } }); _triggerDefaultAddToCartMatomo(productObject); }); isAddCartFromPopup = false; }); } }())</script> <script data-info="not-move-to-bottom"> (function() { const sentAnalyticsData = function (data) { data.forEach((item) => { if (item.event && item.event === 'triggerCustomSubmitForm') { window.dataLayer.push({ 'event': item.data }); } if (item.event && item.event === 'successfulAddCart') { document.body.dispatchEvent(new CustomEvent('successfulAddCart', { detail: item.data })); checkUpdateMiniCart(); } }); }; document.addEventListener('DOMContentLoaded', function () { const urlString = `${window.BASE_URL}rest/V1/amasty_gtm/get-analytics-data`; fetch(urlString) .then(response => response.json()) .then(function (response) { if (response.length) { const data = JSON.parse(response); if (typeof window.dataLayer === 'undefined') { window.dataLayer = []; } const interval = setInterval(() => { if (window.MatomoTagManager) { clearInterval(interval); sentAnalyticsData(data); } }, 1000); } }); }); function checkUpdateMiniCart() { window.dispatchEvent(new CustomEvent('reload-customer-section-data')); } }())</script> <script data-info="not-move-to-bottom"> 'use strict'; (function() { const SELECTORS = { footerSubscriptionForm: '#newsletter-validate-detail', customerAccountSubscriptionForm: '[data-amsite-js="customer-account-newsletter-form"]', customerAccountCheckboxNewsletter: '[data-amsite-js="checkbox-newsletter-customer-account"]', requestQuoteTopForm: '#amform-form-51', requestQuoteDescriptionForm: '#amform-form-52' }; _checkSubmitSubscribeInFooter(); _checkSubmitSubscribeInCustomerAccount(); _submitCustomOneVariableForms(SELECTORS.requestQuoteTopForm, 'SendFormPDPRequestQuote', 'SendFormPDPRequestQuote'); _submitCustomOneVariableForms(SELECTORS.requestQuoteDescriptionForm, 'SendFormPDPRequestQuote', 'SendAdditionalFormPDPRequestQuote'); _universalTrackingSubmitForm(); function _checkSubmitSubscribeInFooter() { const subscriptionForm = document.querySelector(SELECTORS.footerSubscriptionForm); if (subscriptionForm) { subscriptionForm.addEventListener('submit', () => { window.hyva.formValidation(subscriptionForm).validate() .then(() => { window.dataLayer.push( { 'event': 'setPositionToSubscribeNewsletter', 'subscribe_newsletter_position': 'SubscriptionFooter' }); }) .catch(() => { return false; }); }); } } function _checkSubmitSubscribeInCustomerAccount() { const subscriptionForm = document.querySelector(SELECTORS.customerAccountSubscriptionForm); if (subscriptionForm) { subscriptionForm.addEventListener('submit', () => { hyva.formValidation(subscriptionForm).validate() .then(() => { if (subscriptionForm.querySelector(SELECTORS.customerAccountCheckboxNewsletter).checked) { window.dataLayer.push( { 'event': 'setPositionToSubscribeNewsletter', 'subscribe_newsletter_position': 'SubscriptionCustomerAccount' }); } }) .catch(() => { return false; }); }); } } function _submitCustomOneVariableForms(formSelector, eventName, variableValue = '') { const form = document.querySelector(formSelector); if (form) { form.addEventListener('submit', () => { if (jQuery(form).validation('isValid')) { window.dataLayer.push( { 'event': eventName, 'any_transmitted_info': variableValue }); } }); } } function _universalTrackingSubmitForm() { window.addEventListener('amcform-success-submitted', () => { setTimeout(() => { fetch(`${window.BASE_URL}rest/V1/amasty_gtm/get-analytics-data`) .then((response) => { return response.json(); }) .then((data) => { if (data) { _checkFormAnalytics(JSON.parse(data)); } }) .catch(function(error) { console.log(error.message); }); }, 1000); }); } function _checkFormAnalytics(data) { data.forEach(function(item) { if (item.event && item.event === 'triggerCustomSubmitForm') { window.dataLayer.push({ 'event': item.data }); } }); } })();</script> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002] hidden" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-data="{ isLoading: false }" x-on:show-global-loader.window="isLoading = true; $root.classList.remove('hidden');" x-on:hide-global-loader.window="isLoading = false; $root.classList.add('hidden');" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div> <script data-info="not-move-to-bottom"> 'use strict'; (function() { _trackNewHomepageEvents(); function _trackNewHomepageEvents() { const body = document.body; body.addEventListener('click_bestsellers_homepage', function (e) { const productName = e.detail; window.dataLayer.push({ 'event': 'click_bestsellers_homepage', 'any_transmitted_info': productName }); }); body.addEventListener('add_to_cart_bestsellers_homepage', function (e) { const productName = e.detail; window.dataLayer.push({ 'event': 'add_to_cart_bestsellers_homepage', 'any_transmitted_info': productName }); }); } })();</script> <div x-data="AmAuthPopup()" x-on:private-content-loaded.window="initializeAuthPopup(event.detail)" x-on:amsl-show-popup.window="showOnExternalEvent(event)" x-on:amsl-hide-popup.window="hide(modalName)" x-on:amsl-content-updated.window="bindLinksEvents()" > <div x-cloak x-bind="overlay('social-login-popup')" x-spread="overlay('social-login-popup')" class="am-overlay-popup z-60"><div class="am-container-popup inset-0"><div x-ref="social-login-popup" role="dialog" aria-modal="true" aria-labelledby="social-login-popup" class="am-dialog-popup w-full sm:max-w-[560px]"> <div id="social-login-popup" class="amsl-hyva-popup-block group relative focus:outline-none focus-within:outline-none -social-bottom" role="dialog" aria-labelledby="amsl-popup-dialog" tabindex="0" x-on:click.stop ><h2 class="amsl-dialog-title sr-only" id="amsl-popup-dialog" >Login and Registration Form</h2><div class="amsl-tabs-wrapper" title="Login and Registration Form" ><ul class="amsl-hyva-tablist flex mb-6 font-gilr am-title-h2 ul-reset text-secondary-lighter" role="tablist" x-on:keydown="onKeypress($event)" x-show="activeTab !== 'amsl-forgot'" ><li class="amsl-title grow m-0 pb-4 text-center border-b border-primary" id="tab-amsl-login" role="tab" aria-controls="amsl-login-content" tabindex="0" :class="{ '-active text-primary !border-black': activeTab === 'amsl-login' }" ><span class="amsl-link cursor-pointer" data-toggle="switch" x-on:click.prevent=" activeTab = 'amsl-login' " >Login</span></li> <li class="amsl-title grow m-0 pb-4 text-center border-b border-primary" id="tab-amsl-register" role="tab" aria-controls="amsl-register-content" tabindex="0" :class="{ '-active text-primary !border-black': activeTab == 'amsl-register' }" ><span class="amsl-link cursor-pointer" x-on:click.prevent=" activeTab = 'amsl-register' " >Register</span></li></ul><div id="amsl-login-content" x-show="activeTab === 'amsl-login'" x-cloak role="tabpanel" aria-labelledby="tab-amsl-login" ><template x-if="formMessages.has('amsl-login')"><div class="mt-4"><template x-for="message in formMessages.get('amsl-login')" :key="message" ><div class="message error"><span x-html="message"></span></div></template></div></template><div class="amsl-content amsl-login-content amsl-position-variations "><template x-if="!isLogged"><div class="amsl-form"> <div class="max-w-[480px] mx-auto my-0"><strong class="block mb-2 text-center group-[.amsl-hyva-popup-block]:hidden am-title-h2" role="heading" aria-level="2">Log in to Amasty</strong> <div class="card"><div aria-labelledby="am-block-customer-login-heading"><form class="form form-login" action="https://amasty.com/customer/account/loginPost/" method="post" x-data="Object.assign(hyva.formValidation($el), initCustomerLoginForm())" @submit.prevent="submitForm()" id="customer-login-form"><input name="form_key" type="hidden" value="LyhLWGUTC10mVoyy" /> <fieldset class="fieldset login"><legend class="mb-3"><h2 class="text-xl font-medium title-font text-primary">Login</h2></legend><div class="text-secondary-darker mb-6 text-center group-[.amsl-hyva-popup-block]:text-left">If you have an account with us, please log in.</div><div class="am-input field field-reserved email required"><input name="login[username]" class="form-input" required value="" autocomplete="off" id="email" type="email" placeholder="Email" /><label class="label" for="email">Email</label></div><div class="am-input field password field-reserved required control !mt-6 peer"><input name="login[password]" class="form-input" required :type="customer_form_login_popup_showPassword ? 'text' : 'password'" placeholder="Password" autocomplete="off" id="am-pass" /><label for="am-pass" class="label">Password</label></div><a class="am-text-caption block -mt-5 peer-[.field-error]:-mt-2" href="https://amasty.com/customer/account/forgotpassword/">Forgot password?</a> <button type="submit" class="btn btn-primary mt-6 w-full disabled:opacity-75" name="send" >Log In</button> <div><template x-if="displayErrorMessage"><p class="text-red flex items-center"><span class="inline-block w-8 h-8 mr-3"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><title>exclamation-circle</title></svg> </span> <template x-for="errorMessage in errorMessages"><span x-html="errorMessage"></span></template></p></template></div></fieldset></form></div></div></div> </div></template> <div class="am-social-icons max-w-[480px] mx-auto" data-amsite-js="am-social-icons"><span class="amsl-separator flex items-center justify-center my-7 w-full h-px bg-gray-200"><span class="am-text-caption text-secondary-lighter uppercase font-bold bg-white px-2">or continue with</span></span> <div class="amsl-social-wrapper&#x20;with-labels" ><div class="amsl-social-login -labeled-buttons"><template x-if="socialErrorMessage"><p class="amsl-error -social message error mb-4" x-text="socialErrorMessage"></p></template><div class="amsl-buttons flex flex-col xs:flex-row gap-3" :class="{'-show-all': canShowAllSocialIcons()}" > <div class="amsl-button-wrapper w-full group google with-label"><a class="amsl-button -google&#x20;-rectangular group-[.facebook]:bg-blue-800 hover:opacity-80 group-[.google]:bg-blue-500 flex items-center px-3 py-2 rounded transition" x-on:click="socialLoginClick($event)" href="https://amasty.com/amsociallogin/social/login/?type=google" title="Sign in with Google" role="link" ><span class="amsl-social-icon pointer-events-none bg-white rounded group-[.facebook]:text-blue-800" role="img" aria-label="Sign in with Google" ><svg xmlns="http://www.w3.org/2000/svg" xmlns:v="https://vecta.io/nano" viewBox="0 0 31 33" fill="none" width="24" height="24" role="img"><path d="M1.125 10.662c-.726 1.85-1.1 3.841-1.023 5.869-.061 3.005.825 5.947 2.383 8.465l4.781-3.654c-.261-.501-.478-1.03-.643-1.586-.625-1.678-.712-3.469-.371-5.174l-5.127-3.92z" fill="#fbbc05"/><path d="M15.832.502l-.775.045c-6.14.075-11.7 4.435-13.93 10.115l5.125 3.918c.711-3.552 3.289-6.733 6.809-7.75 3.23-1.155 6.557.145 9.322 1.85 1.399-1.331 2.71-2.751 3.998-4.189C23.437 1.989 19.706.395 15.832.502zm.016 13.736v.041l.047-.041c-.016 0-.031 0-.047 0z" fill="#ea4335"/><path d="M23.387 14.219c-2.298-.001-4.595.006-6.891.01l-.648.496.008 4.953 9.035.107c-.76 2.645-2.493 5.106-5.121 6.061-4.56 2.039-10.247-.148-12.514-4.533l-4.777 3.662c1.906 3.086 4.822 5.537 8.256 6.682 5.873 2.003 13.093.505 17.002-4.602 2.853-3.577 3.502-8.348 3.193-12.805l-7.543-.031z" fill="#34a853"/><path d="M23.385 14.219c-2.514-.001-5.026.006-7.537.01l.008 5.449 9.035.107c-.69 2.401-2.185 4.647-4.42 5.756l4.959 3.84c.852-.669 1.63-1.442 2.307-2.326 2.853-3.577 3.502-8.348 3.193-12.805l-7.545-.031z" fill="#4285f4"/><title>google</title></svg> </span> <span class="amsl-text pointer-events-none text-white am-text-small w-[80%] xs:w-[85%] text-center">Google</span> </a></div></div></div></div> </div></div></div><div id="amsl-register-content" x-show="activeTab === 'amsl-register'" x-cloak role="tabpanel" aria-labelledby="tab-amsl-register" ><template x-if="formMessages.has('amsl-register')"><div class="mt-4"><template x-for="message in formMessages.get( 'amsl-register' )" :key="message" ><div class="message error"><span x-html="message"></span></div></template></div></template><div class="amsl-content amsl-register-content"><template x-if="!isLogged"><div class="amsl-form"> <div class="mb-8 max-w-[480px] mx-auto"><form class="form create hyva-account form-create-account" action="https://amasty.com/customer/account/createpost/" x-data="Object.assign(hyva.formValidation($el), initForm())" id="accountcreate" @submit.prevent="submitForm()" method="post" id="form-validate" enctype="multipart/form-data" autocomplete="off" ><input name="form_key" type="hidden" value="LyhLWGUTC10mVoyy" /> <div class="flex flex-col"><p class="text-center group-[.amsl-hyva-popup-block]:text-left mb-0">Use your customer account to view all invoices and purchases for one-clickdownloads, update extensions to the latest versions for free, and extend your support period.</p><fieldset class="mt-6 card"><legend class="hidden"><span> Personal Information</span></legend><input type="hidden" name="success_url" value=""><input type="hidden" name="error_url" value=""><div class="group-[.amsl-hyva-popup-block]:flex gap-2"><div class="am-input field field-reserved w-full"><input type="text" id="firstname" name="firstname" value="" placeholder="First&#x20;Name" minlength="2" data-validate='{"validate-not-only-special": true}' required @input.debounce="onChange"><label for="firstname">First Name</label></div><div class="am-input field field-reserved w-full"><input type="text" id="lastname" name="lastname" value="" placeholder="Last&#x20;Name" minlength="2" data-validate='{"validate-not-only-special": true}' required @input.debounce="onChange"><label for="lastname">Last Name</label></div></div></fieldset><fieldset class="my-5 card group-[.amsl-hyva-popup-block]:mt-0 !mb-2"><legend class="hidden"><span> Sign-in Information</span></legend><div class="am-input field field-reserved"><input type="email" name="email" autocomplete="email" id="am-email-address" placeholder="Email" required value="" class="form-input" data-validate-hidden @input.debounce="onChange" /><label for="am-email-address">Email</label></div><div class="flex xs:gap-2 flex-col xs:flex-row"><div class="am-input field field-reserved w-full sm:!mb-0"> <input :type="customer_form_register_popup_showPassword ? 'text' : 'password'" type="password" data-validate-hidden id="password" name="password" minlength="8" class="form-input" placeholder="Password" data-validate='{"password-strength": {"minCharacterSets": 3}}' @input.debounce="onChange" autocomplete="off" ><label for="password">Password</label> <span class="option">8 or more characters</span> <div id="password-strength-meter-container" data-role="password-strength-meter" aria-live="polite" class="hidden" ><div id="password-strength-meter" class="password-strength-meter">Strength: <span id="password-strength-meter-label" data-role="password-strength-meter-label">No Password</span></div></div></div><div class="am-input field field-reserved w-full !mb-0"><input :type="customer_form_register_popup_showPasswordConfirm ? 'text' : 'password'" type="password" name="password_confirmation" title="Confirm&#x20;Password" id="password-confirmation" placeholder="Confirm&#x20;Password" data-validate='{"equalTo": "password"}' @input.debounce="onChange" required class="form-input" autocomplete="off" ><label for="password-confirmation">Confirm Password</label></div></div> <div class="mt-6"> <div class="field field-reserved choice choice-wrapper gdpr !mb-4" data-role="amasty-gdpr-consent" data-amgdpr-content-from="registration"><input type="hidden" name="amgdpr_agreement[privacy_checkbox]" value="0"><input type="checkbox" name="amgdpr_agreement[privacy_checkbox]" title="Privacy&#x20;Checkbox" id="amprivacy-checkbox-67be1e237270b" class="amgdpr-checkbox" data-consent-id="1" required value="1"><label for="amprivacy-checkbox-67be1e237270b" class="label amgdpr-label"><span class="amgdpr-text">I have read and accepted the <a href="/terms-and-conditions.html" target="_blank" title="Go to this page">Terms & Conditions</a>, <a href="/privacy-policy.html" target="_blank" title="Go to this page">Privacy Policy</a>, <a href="/license.html" target="_blank" title="Go to this page">License Agreement</a>, and <a href="/support-license-agreement.html" target="_blank" title="Go to this page">Support License Agreement</a></span></label> </div> <div class="field field-reserved choice choice-wrapper gdpr !mb-4" data-role="amasty-gdpr-consent" data-amgdpr-content-from="registration"><input type="hidden" name="amgdpr_agreement[data_processing_consent]" value="0"><input type="checkbox" name="amgdpr_agreement[data_processing_consent]" title="Processing&#x20;of&#x20;my&#x20;personal&#x20;data" id="amprivacy-checkbox-67be1e237272c" class="amgdpr-checkbox" data-consent-id="2" value="1"><label for="amprivacy-checkbox-67be1e237272c" class="label amgdpr-label"><span class="amgdpr-text">I hereby give my consent with <a href="/data-processing-consent.html" target="_blank" title="Go to this page">processing of my personal data</a> for marketing purposes</span></label> <span class="optional">Optional</span> </div> <input type="hidden" name="am-gdpr-checkboxes-from" value="registration" /></div></fieldset></div><button type="submit" class="action submit primary btn btn-primary disabled:opacity-75 w-full" >Create an Account</button></form></div> </div></template> <div class="am-social-icons max-w-[480px] mx-auto" data-amsite-js="am-social-icons"><span class="amsl-separator flex items-center justify-center my-7 w-full h-px bg-gray-200"><span class="am-text-caption text-secondary-lighter uppercase font-bold bg-white px-2">or continue with</span></span> <div class="amsl-social-wrapper&#x20;with-labels" ><div class="amsl-social-login -labeled-buttons"><template x-if="socialErrorMessage"><p class="amsl-error -social message error mb-4" x-text="socialErrorMessage"></p></template><div class="amsl-buttons flex flex-col xs:flex-row gap-3" :class="{'-show-all': canShowAllSocialIcons()}" > <div class="amsl-button-wrapper w-full group google with-label"><a class="amsl-button -google&#x20;-rectangular group-[.facebook]:bg-blue-800 hover:opacity-80 group-[.google]:bg-blue-500 flex items-center px-3 py-2 rounded transition" x-on:click="socialLoginClick($event)" href="https://amasty.com/amsociallogin/social/login/?type=google" title="Sign in with Google" role="link" ><span class="amsl-social-icon pointer-events-none bg-white rounded group-[.facebook]:text-blue-800" role="img" aria-label="Sign in with Google" ><svg xmlns="http://www.w3.org/2000/svg" xmlns:v="https://vecta.io/nano" viewBox="0 0 31 33" fill="none" width="24" height="24" role="img"><path d="M1.125 10.662c-.726 1.85-1.1 3.841-1.023 5.869-.061 3.005.825 5.947 2.383 8.465l4.781-3.654c-.261-.501-.478-1.03-.643-1.586-.625-1.678-.712-3.469-.371-5.174l-5.127-3.92z" fill="#fbbc05"/><path d="M15.832.502l-.775.045c-6.14.075-11.7 4.435-13.93 10.115l5.125 3.918c.711-3.552 3.289-6.733 6.809-7.75 3.23-1.155 6.557.145 9.322 1.85 1.399-1.331 2.71-2.751 3.998-4.189C23.437 1.989 19.706.395 15.832.502zm.016 13.736v.041l.047-.041c-.016 0-.031 0-.047 0z" fill="#ea4335"/><path d="M23.387 14.219c-2.298-.001-4.595.006-6.891.01l-.648.496.008 4.953 9.035.107c-.76 2.645-2.493 5.106-5.121 6.061-4.56 2.039-10.247-.148-12.514-4.533l-4.777 3.662c1.906 3.086 4.822 5.537 8.256 6.682 5.873 2.003 13.093.505 17.002-4.602 2.853-3.577 3.502-8.348 3.193-12.805l-7.543-.031z" fill="#34a853"/><path d="M23.385 14.219c-2.514-.001-5.026.006-7.537.01l.008 5.449 9.035.107c-.69 2.401-2.185 4.647-4.42 5.756l4.959 3.84c.852-.669 1.63-1.442 2.307-2.326 2.853-3.577 3.502-8.348 3.193-12.805l-7.545-.031z" fill="#4285f4"/><title>google</title></svg> </span> <span class="amsl-text pointer-events-none text-white am-text-small w-[80%] xs:w-[85%] text-center">Google</span> </a></div></div></div></div> </div></div></div></div><div class="amsl-tabs-wrapper -forgot" x-show="activeTab === 'amsl-forgot'" title="Forgot Your Password Form" x-cloak ><ul class="amsl-tablist mb-12 ul-reset text-center" role="tablist" ><li class="amsl-title" id="tab-amsl-forgot" role="tab" aria-controls="amsl-forgot-content" ><span class="amsl-link -active am-title-h2 font-bold" @click.prevent >Forgot your password?</span></li></ul><div id="amsl-forgot-content" role="tabpanel" aria-labelledby="tab-amsl-forgot"><template x-if="formMessages.has('amsl-forgot')"><div class="mt-4"><template x-for="message in formMessages.get('amsl-forgot')" :key="message" ><div class="message error"><span x-html="message"></span></div></template></div></template><div class="amsl-content amsl-forgot-content"><template x-if="!isLogged"><div class="amsl-form"> <div class="max-w-[480px] mx-auto my-0"><div class=""><form action="https://amasty.com/cms/index/forgotpasswordpost/" method="post" class="!max-w-[inherit] !mb-7" id="user_forgotpassword" x-data="Object.assign(hyva.formValidation($el), initPasswordForm())" @submit.prevent="submitForm();"><input name="form_key" type="hidden" value="LyhLWGUTC10mVoyy" /> <input type="hidden" name="formId" value="user_forgotpassword"/> <fieldset class="fieldset mb-6"><div class="text-center mb-6">Please enter your email address below to receive a password reset link.</div><div class="am-input field field-reserved email required !mb-0"><input type="email" name="email" alt="email" id="email_address" class="form-input" placeholder="Email&#x20;address" required value="" /><label class="label" for="email_address">Email address</label></div></fieldset><button type="submit" class="action submit w-full primary disabled:opacity-75" >Reset My Password</button></form><div class="text-center">or go back to <a class="back" href="https://amasty.com/customer/account/login/" aria-label="Login&#x20;page" >Login page</a></div></div></div> </div></template></div></div></div></div><button type="button" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> </div></div></div></div> <div x-data="AmAuthPopupNotification()" x-init="initialize()" x-on:amsl-popup-show-notification.window="showNotification($event.detail)" > <div x-cloak x-bind="overlay('amsl-popup-notification')" x-spread="overlay('amsl-popup-notification')" class="am-overlay-popup"><div class="amsl-popup-notification am-container-popup inset-0"><div x-ref="amsl-popup-notification" role="dialog" aria-modal="true" class="am-dialog-popup w-full sm:max-w-[560px] !bg-green-50"> <span class="absolute top-0 left-0 pt-1 w-full rounded-tl-md rounded-tr-md bg-lime-500"></span> <div class="py-10 text-center"><div class="mb-8"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="45" viewBox="0 0 34 35" fill="none" role="img"> <path d="M0 34.38H34V0.38H0V34.38Z" fill="url(#pattern0)"/> <defs> <pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> <use xlink:href="#image0" transform="scale(0.015625)"/> </pattern> <image id="image0" width="64" height="64" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAP90lEQVR4AeyZA5CtRxCFpyqFZ9u2bdu2bduvrGfbtm2bq9hO1kbnnP8iU/fdODPhrfp6d6/7/NPdZ2aV5dv/NwnonTb+WoV58rDBDXnW8jN53uobedL0efLdWktxf0mgbMJgDQkamSPiVIGPUu7XFXnVVSRggEjgQPzsJ/Kyg0AUibtafjpQtmCwxle7M52JuVRKUh7UE3ndG8kPA8NdPwP6iLxoKykP60vMxVJbgbIBgxUkaFSmL3dnksgzhV0CBPR1JR80Aj/JUIjSXVAWknyvtkScLrQcKNMwWAFXOcNXezInfn8kFxPkFfcIAEa6fgagHF52FHncSBJuVJLvD+dsApRJGKwRfrLAtW/2Z5XE29VEXvf0EQDw79c9vKsg7HjeD4EyCYM10PzmYhUIGqLIq85vCsDfWRrPWzsNMfZSaQk9mrspUKZgsAaWeNPPtqaT2Mul0fDaOc3PVwBOBTZDedRQEm9Wka/3ZtkOlCkYrIFGmBGTIDHqbBFnmUvgEKALAAIHewVIulNDvj2YPRgoUzBYJfRYntfhJ/KJPGmiCaA1Ql2A29UpQDTKIT1QJmCwCUfi/sjThdjpmSwY7iPAoB9L4FY1CsB+UPBfIwAs74Koc0VpePwLEMAe0IZewRmFaJqcCAWBMgGDVVIe1O0VcaogryoF0EuAv9MWe8cgm+WXuzLGJN6qmhEoEzBYBXO+UcRpCPC4sR8BhtMiu5d/VWGpfLAu9YdAmYLBKnB6zTgFOOu1MagJ0I3LH16hvHx3KIeELE19AShTMFgFdT037kpZkZed/DpBGiQu/5iLJYSe4eNNaeYAZQoGm9AOv5t8r5ZmhUfqAnAvgPlf09k0fbg+Ne1wpX+NFcbsr8ftMGucZwG8+v4FqOHU//trUn8BlEkYbEE7fJ3NjXMe9a8lP8qnBGoJ+8RHG9OcBsokDFZIeVC/fvT5Yhx/3AprFniUJsAwbw+IvlBcPt2SdhNQJmGwQuiR3F9xacvL9lrt+wow2CkBeAV4gDL0AHuAMgmDcWBnj8VdLef2/4O02h+l4d4HvOrkrJKEm1XYAD/6x58HwPYujjpbVHAW4O78/pIfqQnQ1REKllkoGk6QJgFlCgZjIPGx4Sfzs6trc3/kzwgwhCLRJNEMcTfIwxNOhI14v0L/KAHwxYeEHctDS8uEmByT9Ff7mgA8He7vNEJ52pS9gCJwU8TTocSIkwW2fHc4Z0Og/iwY/nTg9IaFHnUn/6y5Xve++Agw3PEHzipgKTxv5bwHN0XcP6Ck3OTDmUL+eVhdzaLOFWuDhtkTAg1GuY2IvVRqbMzFkqOx+vh3B0yeynjsLaD8wfCngi8zIvSYnvzAX5m8R4D+oA+Txygs4ewHWEZIhv80kaS7NWmk+N6Eq4uT5U3oNZ618DTUj+EsFwHlC8OfBr5cb1hd1rz7yGug/2XvmzwJ1ErgaTPBFRb6Bgjq9IFElALPEHCW6P6fwlAw/Bfg+/VzzhfoLbAqzgClo35o3p7DJGmSMIDX+Xr82bZt27Zt27Zt27Zt27Zt5MXv6Yt5ajGzu5//eKfQ1VnheDOzx5+eEKG3dszd9w3sEFg7vLBYhNdM4YkJw8MjxnZWa6CCqNjTxjNeREjKZ8UfoAHS+80usDhBdYDw9rSMCboCb+IJmVIJ4/Ru1CeXDaPOxYglUnPbQJXwp7/47taJLzIl/e7WSQKTBsD5xDxiuvrTNzeN/3EI+uJX1451T+Tmt1qdPk7AVH7A6FaeZxU9S+HFWDoBgzKEY7BJoe25VLwn5XPc3HFSVBnS2F9HJP03UIE//SBCcJ98aVMQmBEIwRMgFw3MWwZXvLLaD5LyDEYpypkFxgZq+ene6Y0JjALk8U4FksEGHP5keWo5KUBuDrTEppZM3ePmaITo+HJNyPiicOZVoenFlBRSBpZfWpbwdM+LB015WJ3yxmbs8v45g/OScFW8AjCZPQI7Sp5R+LyP4fqGLkIu8llcoQNnKcqMG/OLthJdaqZABf5AN0LRW2xPEcoCJQGz4PQv55ovHZhK32PRo7yiGf1+MhOg8tap7VKMpwirEDq6Z6VYJIoWxvdd4CTQASjNgaKFwXi+BIcob8e4LxzW+Dmc3BGowJ86xqA4werK/maoKZ+hn3uBBI0eXl4/vqU8uksDBdb6eE1RhBI9v1hPYCjpwBCi1RGkjfvSRuRITd//8Lwhy2vHNcpjuzW8Y7tAlcgTYIBdBk7pdWFQlO5H+cxPKSZEeZawb5zYWu7YqL3cvVmb9QAzwkiLIUKJocpH5w8tPVDj8nVwhOhIGGIB11GMizGiFdtZLu+c1lFeOLRRHt6xUe7Zoq18cM4QxweqOrpPIAS+/bf1eM8GkKvqip7Pc8IU27MO+MhOjXL+Ml3lrCW7yp2btJdHd26Ux3dvlCf3apSn92tQympReTW8yrMM5fjSkY3y7IGN8kg8z4hXr9pZzli8q5y+WNdHLx7emC9Q9Y084f3/REh++Tsqnwbox/vWAOU7A7xzemd57qBGuXPj9nLNap3loe1bKGV5vLx0RFP5Fw8PxDk4f/6QRnlm/6aBntij4egeo6j60umLmJKfEoaaqqcVIQaYIAnGoCs5cMrX254Kje5qsaq7Iie0hftL4d0Ht2spb5zQKuTlvnAHz8lxU2a/K6oVvgWyayFLCqTPnKPMURumV0xttc3fv81RBpgvq3nP6FnBgff+GtoU4UKJOYrwV7C+CcWsA1JYePMegxBa0dMGPUd5+4oiyFi1no8bYKA6i3foZNo2AyUPiNow7I8xu+wIVOAPMMCqBjEgEPi3RI3uEp5QFMHy9Hmexf1NfBjAJIjygHkmGELU8Cwl1ZKawstTGLA/NcZzIk2X0RUUUgVy3b5/IsMAW7Iea7Ks429liHrlJ6zwR2a0MLO7NIBKzgDyWiSYBsdusiqv/UE8NyFWaGstU0C4U9S1VABKC31RFnxg5iJydAk14a1T2o8JVFDlSeTl3qk81IzwGyieyvPWcgQ2VRWWCqAQZwAKIiy2wxRDuS8qACeQIowklKUOokNBnURNYBT3kqrjBjyPqYoe7VGXibE79g1UUOVJeOUoSgtRwvZlhEBvSkL/7tXzc1VhKjx5rdsAPJMG4GkzymBr0e6kwTAMYmpsEQR8rhhKBaSnP5iWwqIE/VU3mstqYbxo9eXloxuibJpABVWehFdOTy8xAvRrhIGD5+uFKfk5/o62yn9UNVOAkEJbBCQZun+r1vLUPo0I17agsB2B9vJ2EJv3ztTWhvWcaPAdhst6AdLGvoKoUUitIvmtka023OHiQJXoPom8OTsnJvK0X0P0hNV6wKp1xQM8T/lm25KfwpTXeArPJ7xw91M6yl+/Zme5IYATYIb3bhmG2boVUdLr8QPRgiPoGjZSm/g/MeLt54M3PLVvAz/w2UU9bo5GDz0l1+PkKUMQnjG0R0jl8jqrr+fzO5DXdcWzImfPZgBdQI5KA3ktDYS3kMfybt+wqTgyhMc/vEOj3LtFa7ltg45yw1qd5cqVu8plKzaBNN20Tke5df0On2OQvgtY4dMx5lSBqm90n4SwB6awqrRJShqjv6Cc5zxfr8Z1pLdrCENDGkAaZBSkEYQ372J92pacDaPAiI4mRp7zvPzW3kSQcyvIoK44useob0ZXGbG33wlqgxsliyI4UKJfLEphymSrUYFVY3mtuNXgGmr3H53Hc+6p2tIgo0A7JDCFFUHLV9KCgmZx2pijAuh73q+d5hFEl6N36Q65FqAmfPfVNWO2B6o68oQBZqOEAfrF/F5i2poK17w3vYoLuXrkfh25ekRhIFie9ycKJkZUFEJCZ+/HCawSO3ouqXAdnJNwTW7jM67vKp5b9LQxwgDtYbUfAzwEKahBKEBQrau7t+Lw3986KaGErZB0T29X3YFiejboy2kQY9bH9TkjGiOK4JBpAII78r6qnjzAWJxCSd52bh4ASYTIb2wGkzbGvTRQ1dF9ApH3t/WlcC409NNfLZLGoijBzOJUbuxNbgpjQspDLc7zlrgYhkHqxug2qnvZEi1goMOIC8EZVzvDAZx7h2cxPMhxyFw3rHeQ20zz06gf0UavClR11C9EwWYpWK6uhNAWKwimqGS7UlgwMwMrVOhlMQWNnSHCamfytR+DMAYjMqb0yehwTinPmAdog5bH1IFPLxmhxPa6EPY+UeE5shlHiPuuczKDe96lfjAcCmxR5ZBAVUf9ggGG8sUUplaZkQtK8QCPq8gE4nmWRTKsvFjOQlrksRf7DqJiDOCNfoyRcM1YDKBva3mMqre/GRQ2CFEQmsFEmnFFIAWNm0giJDKxSGMxJL6guI4VqOroPknEjOr0bC8Gw8cpYqMTNbVqi6cTiGBIiMGf2LO5CnPRcl36tc9Y3BK33CWQqFHUagaZsBYd9h2a7yS0MXM8fMD6AKM8c0CT+DAyr6oXUgY+CHCI/0wRkchQTKx859NYWltsoH4g4RfdYd0fcm1NSHuRF1IKu8oVGAIRDNm4db2Oct0aneXMJSxBdZUHtmkRFSgoKiot8HHG6J7k5LoejzGMc/cZQBE09rWrd5Yb1w4E8cEMXSNAiE9+dnMs8t4S70eCHH126QpdX4YBrwoDbRekbchA1T/07yYjzELp9DSLW6biZWF+z+ZtxcuuCEHOWSrW7kJpip+9ZCi/eJwv3vUtpnbfVq0MRRnRwBDCUFSIKkaRUoE4xrnU8rma8kaE7WO7NgojksPiKK9a1zceumuJ7NmICI5Aj+t4aIfGp8ElOgJVb+jpA0aYJxT/JAenNC+gnRQ9ZdGm0hcs0/VGhOi1T+3dOCiEXD0K1AzBJ4aOQjTfXZu2fZXhK2piKioiclFCDZHP4JrnLVl5hoJ4fDPfRUxz1Vf6qBXZSbLgKdQIknQSTWaOova8QNUbev0wprZDh2DHxWTkmytW6ipXrdr1YZzf8mQoG5GxXBSZ8aIr/D1Q9Q/BFkeL1dy7pIaIET0iIgzLi2Z65ubh3S5HxZTQINXUAcYSLTqO1FEjKIyf1MgZ7jJHkqokPowp6jp+9W+EwtLDhlUnD5bXEqgGFbHQuX7UiVflrNRQMxhDdKG80ouyVnkprngpdj5nGJGhFUoPNQJl5vlsn7mBmq1PgRU5UmZAP63x5w9BeOmf4en1btug/f5Llu8ql0YqqSEZHTnzUzyzzty3ZSuDMILuQxm1AvPUNQAh00myVYsUz2l99gm+jgj+z1/m3+YSEf7ThZIHRrV+qrlx0awppwZca32XR8pFxChmWpnNDx5VTOW3gik19HotWpQkJ1EcTZ/VruMCVW/w509FdISxYwtr0WcPamwZxfKwwLkRCdfHVta9ERlPPLh9y4tP7l1Ll4N1BmkCLfVeb5GE0kU0Pb5H4/pYg2gEqt7gz18ekfczhpH2jwL6ZBjj82jHnwdV/jwU/jyKbPM87scW2ifRQc6J1FggUA0M/gfsGVXkq95xtgAAAABJRU5ErkJggg=="/> </defs> <title>thumb</title></svg> </div><template x-if="notification"><div x-html="notification"></div></template></div></div></div></div></div> <div class="copyright px-6 xs:px-8 pt-4 lg:pt-5 lg:pb-12 pb-9 bg-gray-800 text-secondary-lighter lg:text-center text-sm"><span>© 2009-2025 Amasty. All Rights Reserved.</span></div> </div><script> var LOCALE = 'en\u002DUS'; var BASE_URL = 'https\u003A\u002F\u002Famasty.com\u002F'; var require = { 'baseUrl': 'https\u003A\u002F\u002Fcdn.amasty.com\u002Fstatic\u002Fversion1739349122\u002Ffrontend\u002FAmasty\u002FAmTheme\u002Fen_US' };</script><script type="text/javascript" src="https://cdn.amasty.com/static/version1739349122/_cache/merged/a8e74fc4cdd09bf931fffde57aa260af.min.js"></script><script type="text/x-magento-init"> { "*": { "Magento_PageCache/js/form-key-provider": { "isPaginationCacheEnabled": 0 } } }</script><script> const initAmsiteCookieConsent = function () { let isFirstVisit = false; let allCookiesAllowed = false; let analyticsCookiesAllowed = false; let statisticsCookiesAllowed = false; let advertisingCookiesAllowed = false; const ACTION_DEFAULT = 'default'; const ACTION_UPDATE = 'update'; const CONSENT_GRANTED = 'granted'; const CONSENT_DENIED = 'denied'; const COOKIE_TYPES = { analytics_storage: 'analytics_storage', ad_personalization: 'ad_personalization', ad_storage: 'ad_storage', ad_user_data: 'ad_user_data' }; _setConsentValue(ACTION_DEFAULT); _setAdditionData(); _listenCookieUpdate(); function _getCookie(name) { let matches = document.cookie.match(new RegExp( "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)" )); return matches ? decodeURIComponent(matches[1]) : undefined; } function _checkCookieAnalyticIsAllowed() { const amCookieAllowed = _getCookie('amcookie_allowed'); const ID_ADVERTISING = '2'; const ID_ANALYTICS_GROUP = '3'; const ID_STATISTICS = '4'; isFirstVisit = !amCookieAllowed; allCookiesAllowed = amCookieAllowed && amCookieAllowed === '0'; analyticsCookiesAllowed = amCookieAllowed && amCookieAllowed.includes(ID_ANALYTICS_GROUP); statisticsCookiesAllowed = amCookieAllowed && amCookieAllowed.includes(ID_STATISTICS); advertisingCookiesAllowed = amCookieAllowed && amCookieAllowed.includes(ID_ADVERTISING); } function _listenCookieUpdate() { window.addEventListener('cookiebar-action-accept-finish', () => _setConsentValue(ACTION_UPDATE)); window.addEventListener('cookiebar-action-allow-finish', () => _setConsentValue(ACTION_UPDATE)); } function _setConsentValue(action) { let consentTypes = ["ad_storage","ad_user_data","ad_personalization","analytics_storage"]; _checkCookieAnalyticIsAllowed(); if (action === ACTION_DEFAULT && isFirstVisit) { _setDefaultValues(consentTypes); } else if (action === ACTION_DEFAULT && !isFirstVisit) { _updateValues(consentTypes, ACTION_DEFAULT); } else { _updateValues(consentTypes, ACTION_UPDATE); } } function _setAdditionData() { if (1) { gtag('set', 'url_passthrough', true); } if (1) { gtag('set', 'ads_data_redaction', true); } } function _setDefaultValues(consentTypes) { let config = {}; consentTypes.forEach(key => config[key] = CONSENT_GRANTED); gtag('consent', ACTION_DEFAULT, config); let configForCountryWithRestrictions = {...config}; consentTypes.forEach(key => configForCountryWithRestrictions[key] = CONSENT_DENIED); configForCountryWithRestrictions.region = ['AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR','DE','EL','HU','IS','IE','IT','LV','LI','LT','LU','MT','NL','NO','PL','PT','RO','SK','SI','ES','SE','UK','US-CA','US-CO','US-CT','US-VA','US-UT'] gtag('consent', ACTION_DEFAULT, configForCountryWithRestrictions); } function _updateValues(consentTypes, action) { let isAnalyticsStoragePresent = consentTypes.includes(COOKIE_TYPES.analytics_storage); let isPersonalizationStoragePresent = consentTypes.includes(COOKIE_TYPES.ad_personalization); let isStoragePresent = consentTypes.includes(COOKIE_TYPES.ad_storage); let isUserDataPresent = consentTypes.includes(COOKIE_TYPES.ad_user_data); let config = {}; consentTypes.forEach(key => config[key] = CONSENT_DENIED); if (allCookiesAllowed) { consentTypes.forEach(key => config[key] = CONSENT_GRANTED); } if (isAnalyticsStoragePresent && analyticsCookiesAllowed || isAnalyticsStoragePresent && statisticsCookiesAllowed) { config[COOKIE_TYPES.analytics_storage] = CONSENT_GRANTED; } if (isPersonalizationStoragePresent && advertisingCookiesAllowed) { config[COOKIE_TYPES.ad_personalization] = CONSENT_GRANTED; } if (isStoragePresent && advertisingCookiesAllowed) { config[COOKIE_TYPES.ad_storage] = CONSENT_GRANTED; } if (isUserDataPresent && advertisingCookiesAllowed) { config[COOKIE_TYPES.ad_user_data] = CONSENT_GRANTED; } gtag('consent', action, config); } }</script><script> window._vwo_code = window._vwo_code || (function(){ var account_id=634212, settings_tolerance=2000, library_tolerance=2500, use_existing_jquery=false, is_spa=1, hide_element='body', /* DO NOT EDIT BELOW THIS LINE */ f=false,d=document,code={use_existing_jquery:function(){return use_existing_jquery;},library_tolerance:function(){return library_tolerance;},finish:function(){if(!f){f=true;var a=d.getElementById('_vis_opt_path_hides');if(a)a.parentNode.removeChild(a);}},finished:function(){return f;},load:function(a){var b=d.createElement('script');b.src=a;b.type='text/javascript';b.innerText;b.onerror=function(){_vwo_code.finish();};d.getElementsByTagName('head')[0].appendChild(b);},init:function(){ window.settings_timer=setTimeout(function () {_vwo_code.finish() },settings_tolerance);var a=d.createElement('style'),b=hide_element?hide_element+'{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}':'',h=d.getElementsByTagName('head')[0];a.setAttribute('id','_vis_opt_path_hides');a.setAttribute('type','text/css');if(a.styleSheet)a.styleSheet.cssText=b;else a.appendChild(d.createTextNode(b));h.appendChild(a);this.load('https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&f='+(+is_spa)+'&r='+Math.random());return settings_timer; }};window._vwo_settings_timer = code.init(); return code; }());</script><script> var BASE_URL = 'https://amasty.com/'; var THEME_PATH = 'https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US'; var COOKIE_CONFIG = { "expires": null, "path": "\u002F", "domain": ".amasty.com", "secure": true, "lifetime": "31556952", "cookie_restriction_enabled": false }; var CURRENT_STORE_CODE = 'default'; var CURRENT_WEBSITE_ID = '1'; window.hyva = window.hyva || {} window.cookie_consent_groups = window.cookie_consent_groups || {} window.cookie_consent_groups['necessary'] = true; window.cookie_consent_config = window.cookie_consent_config || {}; window.cookie_consent_config['necessary'] = [].concat( window.cookie_consent_config['necessary'] || [], [ 'user_allowed_save_cookie', 'form_key', 'mage-messages', 'private_content_version', 'mage-cache-sessid', 'last_visited_store', 'section_data_ids' ] );</script><script> 'use strict'; (function( hyva, undefined ) { function lifetimeToExpires(options, defaults) { const lifetime = options.lifetime || defaults.lifetime; if (lifetime) { const date = new Date; date.setTime(date.getTime() + lifetime * 1000); return date; } return null; } function generateRandomString() { const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', length = 16; let formKey = '', charactersLength = allowedCharacters.length; for (let i = 0; i < length; i++) { formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] } return formKey; } const sessionCookieMarker = {noLifetime: true} const cookieTempStorage = {}; const internalCookie = { get(name) { const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); return v ? v[2] : null; }, set(name, value, days, skipSetDomain) { let expires, path, domain, secure, samesite; const defaultCookieConfig = { expires: null, path: '/', domain: null, secure: false, lifetime: null, samesite: 'lax' }; const cookieConfig = window.COOKIE_CONFIG || {}; expires = days && days !== sessionCookieMarker ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; path = cookieConfig.path || defaultCookieConfig.path; domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); secure = cookieConfig.secure || defaultCookieConfig.secure; samesite = cookieConfig.samesite || defaultCookieConfig.samesite; document.cookie = name + "=" + encodeURIComponent(value) + (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + (path ? '; path=' + path : '') + (domain ? '; domain=' + domain : '') + (secure ? '; secure' : '') + (samesite ? '; samesite=' + samesite : 'lax'); }, isWebsiteAllowedToSaveCookie() { const allowedCookies = this.get('user_allowed_save_cookie'); if (allowedCookies) { const allowedWebsites = JSON.parse(unescape(allowedCookies)); return allowedWebsites[CURRENT_WEBSITE_ID] === 1; } return false; }, getGroupByCookieName(name) { const cookieConsentConfig = window.cookie_consent_config || {}; let group = null; for (let prop in cookieConsentConfig) { if (!cookieConsentConfig.hasOwnProperty(prop)) continue; if (cookieConsentConfig[prop].includes(name)) { group = prop; break; } } return group; }, isCookieAllowed(name) { const cookieGroup = this.getGroupByCookieName(name); return cookieGroup ? window.cookie_consent_groups[cookieGroup] : this.isWebsiteAllowedToSaveCookie(); }, saveTempStorageCookies() { for (const [name, data] of Object.entries(cookieTempStorage)) { if (this.isCookieAllowed(name)) { this.set(name, data['value'], data['days'], data['skipSetDomain']); delete cookieTempStorage[name]; } } } }; hyva.getCookie = (name) => { const cookieConfig = window.COOKIE_CONFIG || {}; if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; } return internalCookie.get(name); } hyva.setCookie = (name, value, days, skipSetDomain) => { const cookieConfig = window.COOKIE_CONFIG || {}; if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { cookieTempStorage[name] = {value, days, skipSetDomain}; return; } return internalCookie.set(name, value, days, skipSetDomain); } hyva.setSessionCookie = (name, value, skipSetDomain) => { return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) } hyva.getBrowserStorage = () => { const browserStorage = window.localStorage || window.sessionStorage; if (!browserStorage) { console.warn('Browser Storage is unavailable'); return false; } try { browserStorage.setItem('storage_test', '1'); browserStorage.removeItem('storage_test'); } catch (error) { console.warn('Browser Storage is not accessible', error); return false; } return browserStorage; } hyva.postForm = (postParams) => { const form = document.createElement("form"); let data = postParams.data; if (! postParams.skipUenc && ! data.uenc) { data.uenc = btoa(window.location.href); } form.method = "POST"; form.action = postParams.action; Object.keys(postParams.data).map(key => { const field = document.createElement("input"); field.type = 'hidden' field.value = postParams.data[key]; field.name = key; form.appendChild(field); }); const form_key = document.createElement("input"); form_key.type = 'hidden'; form_key.value = hyva.getFormKey(); form_key.name="form_key"; form.appendChild(form_key); document.body.appendChild(form); form.submit(); } hyva.getFormKey = function () { let formKey = hyva.getCookie('form_key'); if (!formKey) { formKey = generateRandomString(); hyva.setCookie('form_key', formKey); } return formKey; } hyva.formatPrice = (value, showSign) => { const formatter = new Intl.NumberFormat( 'en\u002DUS', { style: 'currency', currency: 'USD', signDisplay: showSign ? "always" : "auto" } ); return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? formatter.formatToParts(value).map(({type, value}) => { switch (type) { case 'currency': return '$' || value; case 'minusSign': return '- '; case 'plusSign': return '+ '; default : return value; } }).reduce((string, part) => string + part) : formatter.format(value); } const formatStr = function (str, nStart) { const args = Array.from(arguments).slice(2); return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { const idx = parseInt(n) - nStart; if (args[idx] === null || args[idx] === void 0) { return m; } return p.length % 2 ? p.slice(0, -1).replace('%%', '%') + args[idx] : p.replace('%%', '%') + n; }) } hyva.str = function (string) { const args = Array.from(arguments); args.splice(1, 0, 1); return formatStr.apply(undefined, args); } hyva.strf = function () { const args = Array.from(arguments); args.splice(1, 0, 0); return formatStr.apply(undefined, args); } /** * Take a html string as `content` parameter and * extract an element from the DOM to replace in * the current page under the same selector, * defined by `targetSelector` */ hyva.replaceDomElement = (targetSelector, content) => { const parser = new DOMParser(); const doc = parser.parseFromString(content, 'text/html'); const contentNode = doc.querySelector(targetSelector); if (!contentNode) { return; } const tmpScripts = contentNode.getElementsByTagName('script'); if (tmpScripts.length > 0) { const scripts = []; for (let i = 0; i < tmpScripts.length; i++) { scripts.push(tmpScripts[i]); } for (let i = 0; i < scripts.length; i++) { let script = document.createElement('script'); script.innerHTML = scripts[i].innerHTML; document.head.appendChild(script); scripts[i].parentNode.removeChild(scripts[i]); } } document.querySelector(targetSelector).replaceWith(contentNode); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); hyva.initMessages(); } 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'; return Array.from(rootElement.querySelectorAll(selector)) .filter(el => el.style.display !== 'none' && !el.disabled && el.tabIndex !== -1) } const focusTrap = (e) => { const isTabPressed = e.key === 'Tab' || e.keyCode === 9; if (!isTabPressed) return; const focusable = focusableElements(currentTrap) const firstFocusableElement = focusable[0] const lastFocusableElement = focusable[focusable.length - 1] e.shiftKey ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) }; hyva.releaseFocus = (rootElement) => { if (currentTrap && (!rootElement || rootElement === currentTrap)) { currentTrap.removeEventListener('keydown', focusTrap) currentTrap = null } } hyva.trapFocus = (rootElement) => { if (!rootElement) return; hyva.releaseFocus() currentTrap = rootElement rootElement.addEventListener('keydown', focusTrap) const firstElement = focusableElements(rootElement)[0] firstElement && firstElement.focus() } hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) }( window.hyva = window.hyva || {} ));</script><script> (function() { const proLargeOption = 'Maintenance included for all products purchased before Feb 1, 2022 ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + '- <a href="/knowledge-base/what-magento-versions-amasty-supports.html">Compatibility with Magento</a>' + ' versions supported by Adobe <br>' + '- Bug fixes <br>' + '- Security patches</span></span>'; const trainingSession = 'Training sessions ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-left">' + '<span class="tooltip-toggle"></span><span class="tooltip-content large">' + 'Extensions covered by the training:<br>' + '<span class="for-tooltip-left-indent -dot"> Promotion Suite for Magento 2</span><br>' + '<span class="for-tooltip-left-indent">Special Promotions Pro for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Loyalty Program for Magento 2</span><br>' + '<span class="for-tooltip-left-indent">Free Gift for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot">Reward Points for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Google Page Speed Optimizer for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> SEO Toolkit for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Suite for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Table Rates for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Restrictions for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Rules for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Delivery Date Manager for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping & Payment By Customer Groups for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Cost Calculator for Magento 2</span><br>' + '<span class="for-tooltip-left-indent">Free Shipping Bar for Magento 2</span><br>' + '</span></span>'; const configurationSession = 'Free configuration service ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content large">' + 'Extension covered within the configuration service:<br>' + '<span class="for-tooltip-left-indent -dot"> Google Page Speed Optimizer</span><br>' + '<span class="for-tooltip-left-indent -dot">Free Gift</span><br>' + '<span class="for-tooltip-left-indent -dot">Special Promotions (Pro)</span><br>' + '<span class="for-tooltip-left-indent -dot">Shipping Suite</span><br>' + '<span class="for-tooltip-left-indent -dot">SEO Toolkit</span><br>' + '<span class="for-tooltip-left-indent -dot">Import and Export</span><br>' + '</span></span>' + '<span class="option-caption"> on request</span>'; const litePerfomance = 'Lite Performance Audit ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-left">' + '<span class="tooltip-toggle"></span><span class="tooltip-content large">' + 'In terms of the Performance Audit (Lite version) we will:<br>' + '<span class="for-tooltip-left-indent -dot"> scan your website using Google PageSpeed Insights</span><br>' + '<span class="for-tooltip-left-indent -dot"> analyse Core web Vitals</span><br>' + '<span class="for-tooltip-left-indent -dot"> offer basic technical guidance in alignment with Magento code' + ' standards and overall coding practices</span><br>' + '<span class="for-tooltip-left-indent -dot"> provide recommendations for optimizing your Magento usage ' + '(version management, updates, security patches, module usage)</span><br>' + '<span class="for-tooltip-left-indent -dot"> furnish general recommendations for server and cache' + ' management</span><br>' + '</span></span>' + '<br><span class="option-caption">once per quarter</span>'; const litePerfomanceCoreWebVitals = 'Lite Performance Audit + special offer for Core Web Vitals optimization ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-left">' + '<span class="tooltip-toggle"></span><span class="tooltip-content large">' + 'In terms of the Performance Audit (Lite version) we will:<br>' + '<span class="for-tooltip-left-indent -dot"> scan your website using Google PageSpeed Insights</span><br>' + '<span class="for-tooltip-left-indent -dot"> analyse Core web Vitals</span><br>' + '<span class="for-tooltip-left-indent -dot"> offer basic technical guidance in alignment with Magento code' + ' standards and overall coding practices</span><br>' + '<span class="for-tooltip-left-indent -dot"> provide recommendations for optimizing your Magento usage ' + '(version management, updates, security patches, module usage)</span><br>' + '<span class="for-tooltip-left-indent -dot"> furnish general recommendations for server and cache' + ' management</span><br>' + '</span></span>' + '<br><span class="option-caption">once per quarter</span>'; const partnerPricePro = '<span class="special-partner">Special price for partners</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get annual subscription by a special price based on your partner level:<br>' + '<span class="for-tooltip-left-indent -dot"> Bronze - $2199</span><br>' + '<span class="for-tooltip-left-indent -dot"> Silver - $2069</span><br>' + '<span class="for-tooltip-left-indent -dot"> Gold - $1939</span><br>' + '<span class="for-tooltip-left-indent -dot"> Platinum - $1809</span><br>' + '</span></span>'; const partnerPricePremium = '<span class="special-partner">Special price for partners</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get annual subscription by a special price based on your partner level:<br>' + '<span class="for-tooltip-left-indent -dot"> Bronze - $2439</span><br>' + '<span class="for-tooltip-left-indent -dot"> Silver - $2299</span><br>' + '<span class="for-tooltip-left-indent -dot"> Gold - $2149</span><br>' + '<span class="for-tooltip-left-indent -dot"> Platinum - $2009</span><br>' + '</span></span>'; const partnerPriceAmastyOne = '<span class="special-partner">Special price for partners</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get annual subscription by a special price based on your partner level:<br>' + '<span class="for-tooltip-left-indent -dot"> Bronze - $2929</span><br>' + '<span class="for-tooltip-left-indent -dot"> Silver - $2759</span><br>' + '<span class="for-tooltip-left-indent -dot"> Gold - $2589</span><br>' + '<span class="for-tooltip-left-indent -dot"> Platinum - $2409</span><br>' + '</span></span>'; const partnerPriceAgencyPremium = '<span class="special-partner"><a href="/partnership-program.html">Partner ' + 'Program</a> Discounts</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get a <b>20% discount</b> on <br>' + 'the deposit of any level.' + '</span></span><br><span class="option-caption">for agencies only</span>'; const partnerPriceAgencyAmastyOne = '<span class="special-partner"><a href="/partnership-program.html">Partner ' + 'Program</a> Discounts</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get a <b>30% discount</b> on <br>' + 'the deposit of any level.' + '</span></span><br><span class="option-caption">for agencies only</span>'; window.dataForSubscriptions = Object.freeze({ individual: { month: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>' ], 'Amasty One': [ 'Premium included', 'Personal account manager', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals ] }, annual: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', litePerfomance ], 'Amasty One': [ 'Premium included', 'Personal account manager', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals ] } }, corporate: { month: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession, partnerPricePro ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', '<span class="special-partner">Personal account manager</span>', partnerPricePremium, partnerPriceAgencyPremium ], 'Amasty One': [ 'Premium included', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals, '<span class="special-partner">Support for 10 clients is included in the annual ' + 'subscription</span>', partnerPriceAmastyOne, partnerPriceAgencyAmastyOne ] }, annual: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession, partnerPricePro ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', litePerfomance, '<span class="special-partner">Personal account manager</span>', partnerPricePremium, partnerPriceAgencyPremium ], 'Amasty One': [ 'Premium included', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals, '<span class="special-partner">Support for 10 clients is included in the annual ' + 'subscription</span>', partnerPriceAmastyOne, partnerPriceAgencyAmastyOne ] } }, partner: { month: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession, partnerPricePro ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', '<span class="special-partner">Personal account manager</span>', partnerPricePremium, partnerPriceAgencyPremium ], 'Amasty One': [ 'Premium included', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals, '<span class="special-partner">Support for 10 clients is included in the annual ' + 'subscription</span>', partnerPriceAmastyOne, partnerPriceAgencyAmastyOne ] }, annual: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession, partnerPricePro ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', litePerfomance, '<span class="special-partner">Personal account manager</span>', partnerPricePremium, partnerPriceAgencyPremium ], 'Amasty One': [ 'Premium included', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals, '<span class="special-partner">Support for 10 clients is included in the annual ' + 'subscription</span>', partnerPriceAmastyOne, partnerPriceAgencyAmastyOne ] } } }); })();</script><script> 'use strict'; (() => { hyva.formatPrice = (value, showSign, options = {}) => { const formatter = new Intl.NumberFormat( 'en\u002DUS', Object.assign({ style: 'currency', currency: 'USD', signDisplay: showSign ? 'always' : 'auto' }, options) ); return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? formatter.formatToParts(value).map(({type, value}) => { switch (type) { case 'currency': return '\u0024' || value; case 'minusSign': return '- '; case 'plusSign': return '+ '; default : return value; } }).reduce((string, part) => string + part) : formatter.format(value); } })()</script><script src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/js/utils/svg-amasty-sprite.min.js" async></script><script type="text/x-magento-init"> { "body": { "addToWishlist": {"productType":["simple","virtual","downloadable","bundle","grouped","configurable"]} } }</script><script type="text/x-magento-init"> { "*": { "cookieStatus": {} } }</script><script type="text/x-magento-init"> { "*": { "mage/cookies": { "expires": null, "path": "\u002F", "domain": ".amasty.com", "secure": true, "lifetime": "31556952" } } }</script><script> window.cookiesConfig = window.cookiesConfig || {}; window.cookiesConfig.secure = true; </script><script> require.config({ map: { '*': { wysiwygAdapter: 'mage/adminhtml/wysiwyg/tiny_mce/tinymce5Adapter' } } });</script><script> (function () { 'use strict'; window.amRecaptchaModel = { formsToProtect: "\u0023form\u002Dforgotpassword,\u0023user_forgotpassword,form\u005Baction\u002A\u003D\u0022createpost\u0022\u005D,\u0023review_form,\u0023adyen\u002Dcc\u002Dform,\u005Bdata\u002Damsite\u002Djs\u003D\u0022billing\u002Daddress\u002Dform\u0022\u005D,.form.form\u002Dlogin,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fcreatepost\u0022\u005D,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002FloginPost\u0022\u005D,form\u005Baction\u002A\u003D\u0022newsletter\u002Fsubscriber\u002Fnew\u0022\u005D,form\u005Baction\u002A\u003D\u0022contact\u002Findex\u002Fpost\u0022\u005D,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fforgotpasswordpost\u0022\u005D,\u0023review_form,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fresetpasswordpost\u0022\u005D,form\u005Baction\u002A\u003D\u0022checkout_payment_captcha\u0022\u005D,form\u005Baction\u002A\u003D\u0022amasty_customform\u002Fform\u002Fsubmit\u0022\u005D,form\u005Baction\u002A\u003D\u0022faq\u002Findex\u002Fsave\u0022\u005D,.form.password.forget", isEnabledOnPayments: "1", checkoutRecaptchaValidateUrl: "https://amasty.com/amcapthca/checkout/validate/", invisibleCaptchaCustomForm: "1", recaptchaConfig: { lang: "hl\u003Den" || 'hl=en', theme: "light", badge: "bottomleft", sitekey: "6LcoY6UZAAAAAP7Dqjtr6MPM8yGySn617oAlWVSx", size: "invisible" }, url: 'https://www.google.com/recaptcha/api.js', isCaptchaScriptLoaded: false, isInvisible: "invisible" === 'invisible', /** * Submit event * * @param {Object} $event * @return {void} */ execute: function ($event) { const eventTarget = $event?.target; if (this.isCaptchaScriptLoaded) { this.executeCaptcha(eventTarget); } else { window.addEventListener('amcaptcha-script-loaded', () => { this.isCaptchaScriptLoaded = true; this.executeCaptcha(eventTarget); this.initAmcaptchaBadges(); }); this.loadRecaptchaScript(); } }, /** * Execute original submit * * @param {Object} $event * @param {HTMLElement} $el * @return {void} */ recaptchaCallback: function ($event, $el) { this.shouldExecuteCallback($event, $el) && $el.dispatchEvent(new CustomEvent('amrecaptcha-executable-callback')); }, /** * Reset captcha * * @param {Object} $event * @param {HTMLElement} $el */ expiredCallback: function($event, $el) { this.shouldExecuteCallback($event, $el) && grecaptcha.reset($event.detail.widgetId); }, /** * Checks if event is fired on submitted element * * @param {Object} $event * @param {HTMLElement} $el * @return {boolean} */ shouldExecuteCallback: function($event, $el) { const eventWidgetId = $event.detail.widgetId; const elementWidgetId = $el.dataset.amCaptchaWidgetId || $el.closest('form')?.dataset.amCaptchaWidgetId; return eventWidgetId === elementWidgetId; }, /** * Run captcha for widget by id * * @param {HTMLElement} eventTarget * @return {void} */ executeCaptcha: function(eventTarget) { if (!eventTarget.dataset.hasOwnProperty('amCaptchaRendered')) { this.bindCaptchaGlobalCallbacks(eventTarget); this.renderCaptcha(eventTarget); eventTarget.dataset.amCaptchaRendered = ''; } const widgetId = this.getWidgetId(eventTarget); if (!widgetId) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: 'Recaptcha\u0020cannot\u0020properly\u0020validate\u0020form.' } ]); return; } window.dispatchEvent(new CustomEvent('amcaptcha-loading-start')); grecaptcha.reset(widgetId); if (!this.isInvisible) { this.stopAmcaptchaLoading(); return; } grecaptcha.execute(widgetId) .then(() => this.stopAmcaptchaLoading()) .catch(() => this.stopAmcaptchaLoading()); }, /** * Add recaptcha script to page * * @return {void} */ loadRecaptchaScript: function () { const lang = window.amRecaptchaModel.recaptchaConfig.lang; const url = `${window.amRecaptchaModel.url}?onload=amRecaptchaLoadCallback&render=explicit&${lang}`; const script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; script.async = true; document.head.appendChild(script); }, /** * Stop loader on page * * @return {void} */ stopAmcaptchaLoading: function () { window.dispatchEvent(new CustomEvent('amcaptcha-loading-stop')); }, /** * Add attributes to hide captcha badge * * @return {void} */ initAmcaptchaBadges: function () { if (!this.isInvisible) { return; } document.querySelectorAll('.grecaptcha-badge')?.forEach(captchaBadge => { captchaBadge?.setAttribute('x-data', '{ visible: true }'); captchaBadge?.setAttribute('x-on:amcaptcha-loading-start.window', 'visible = true'); captchaBadge?.setAttribute('x-on:amcaptcha-loading-stop.window', 'visible = false'); captchaBadge?.setAttribute(':class', '!visible && "invisible"'); }); }, /** * Get form widgetId * * @param {HTMLElement} eventTarget * @return {string} */ getWidgetId: function (eventTarget) { return eventTarget.dataset.amCaptchaWidgetId || eventTarget.closest('form')?.dataset.amCaptchaWidgetId; }, /** * Add captcha badge or checkbox to protected form. * Store widgetId in dataset to pass this info in callbacks * * @param {HTMLElement} eventTarget * @return {void} */ renderCaptcha: function (eventTarget) { const captchaElement = document.createElement('div'); const formContent = eventTarget.closest('form')?.querySelector('[data-element="form-content"]') ?? eventTarget.closest('form'); formContent?.appendChild(captchaElement); eventTarget.dataset.amCaptchaWidgetId = grecaptcha.render(captchaElement, { ...window.amRecaptchaModel?.recaptchaConfig, callback: () => { window.dispatchEvent(new CustomEvent( 'amrecaptcha-callback', { detail: this.getCaptchaCallbackDetail(eventTarget) })); }, 'expired-callback': () => { window.dispatchEvent(new CustomEvent( 'amrecaptcha-expired-callback', { detail: this.getCaptchaCallbackDetail(eventTarget) })); } }); }, /** * Get detail property for callback event * * @param {HTMLElement} eventTarget * @return {object} */ getCaptchaCallbackDetail: function (eventTarget) { return { widgetId: eventTarget.dataset.amCaptchaWidgetId, form: eventTarget } }, /** * Add functions that will be called on the global state * * @param {HTMLElement} eventTarget * @return {void} */ bindCaptchaGlobalCallbacks: function (eventTarget) { eventTarget.setAttribute( 'x-on:amrecaptcha-callback.window', `amRecaptchaModel.recaptchaCallback($event, $el)` ); eventTarget.setAttribute( 'x-on:amrecaptcha-expired-callback.window', 'amRecaptchaModel.expiredCallback($event, $el)' ); } }; })(window.amRecaptchaModel = window.amRecaptchaModel || {}); window.amRecaptchaLoadCallback = function () { window.dispatchEvent(new CustomEvent('amcaptcha-script-loaded')); }</script><script> (function (hyva) { 'use strict'; /** * We use multiple Store objects depending on which Alpine version is */ const isAlpineV3 = true; /** * @returns {string} */ function getInitEventName() { return isAlpineV3 ? 'alpine:init' : 'spruce:init'; } /** * @returns {Object} */ function getStoreObject() { return isAlpineV3 ? Alpine : Spruce; } hyva.amStorage = { /** * @param {string} key * @param {Object} object * @returns {void} */ create: (key, object) => { const eventName = key.toLowerCase() + '-created'; document.addEventListener(getInitEventName(), () => { getStoreObject().store(key, object); document.dispatchEvent(new Event(eventName)); }); }, /** * @param {string} key * @returns {Object} */ getStorage: (key) => { return getStoreObject().store(key); }, /** * @param {string} key * @param {Object} object * @returns {void} */ reInit: (key, object) => { isAlpineV3 ? getStoreObject().store(key, object) : getStoreObject().reset(key, object); } }; }(window.hyva = window.hyva || {}));</script><script> window.amastyCookieManager = window.amastyCookieManager || {};</script><script> window.amRecaptchaModel = window.amRecaptchaModel || {};</script><script> 'use strict'; (function(hyva) { const formValidationRules = { required(value, options, field, context) { const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element, msg = 'This\u0020is\u0020a\u0020required\u0020field.'; 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) { return n === 1 ? hyva.strf('Please\u0020enter\u0020no\u0020more\u0020than\u00201\u0020character.') : hyva.strf('Please\u0020enter\u0020no\u0020more\u0020than\u0020\u00250\u0020characters.', options) } return true; }, minlength(value, options, field, context) { const n = Number(options) if (value.length > 0 && value.length < n) { return n === 1 ? hyva.strf('Please\u0020enter\u0020at\u0020least\u00201\u0020character.') : hyva.strf('Please\u0020enter\u0020at\u0020least\u0020\u00250\u0020characters.', options) } return true; }, max(value, options, field, context) { field.element.setAttribute('max', options); field.element.checkValidity(); if (field.element.validity.rangeOverflow) { return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020less\u0020than\u0020or\u0020equal\u0020to\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) { return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020greater\u0020than\u0020or\u0020equal\u0020to\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(options); return hyva.strf('Please\u0020enter\u0020a\u0020valid\u0020value.\u0020The\u0020two\u0020nearest\u0020valid\u0020values\u0020are\u0020\u0022\u00250\u0022\u0020and\u0020\u0022\u00251\u0022.', Math.floor(val), Math.ceil(val)); } return true; }, pattern(value, options, field, context) { field.element.setAttribute('pattern', options); field.element.checkValidity(); if (field.element.validity.patternMismatch) { return field.element.title ? hyva.strf('Please\u0020match\u0020the\u0020requested\u0020format\u003A\u0020\u00250.', field.element.title) : 'Please\u0020match\u0020the\u0020requested\u0020format.' } 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)) { return 'Please\u0020enter\u0020a\u0020valid\u0020email\u0020address.'; } return true; }, password(value, options, field, context) { const rule = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/; if (value.length > 0 && !rule.test(value)) { return 'Please\u0020provide\u0020at\u0020least\u0020one\u0020upper\u0020case,\u0020one\u0020lower\u0020case,\u0020one\u0020digit\u0020and\u0020one\u0020special\u0020character\u0020\u0028\u0023\u003F\u0021\u0040\u0024\u0025\u005E\u0026\u002A\u002D\u0029'; } 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; return hyva.strf('This\u0020field\u0020value\u0020must\u0020be\u0020the\u0020same\u0020as\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(formElement, options) { 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]); } } } 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; }(window.hyva = window.hyva || {}));</script><script> function initHeader () { return { searchOpen: false, cart: {}, isCartOpen: false, getData(data) { if (data.cart) { this.cart = data.cart } }, isCartEmpty() { return !this.cart.summary_count }, toggleCart(event) { if (event.detail && event.detail.isOpen !== undefined) { this.isCartOpen = event.detail.isOpen if (!this.isCartOpen && this.$refs && this.$refs.cartButton) { this.$refs.cartButton.focus() } } else { this.isCartOpen = true } }, openShoppingCart() { window.location.href = this.$el.getAttribute('data-href'); } } }</script><script> 'use strict'; function amXsearchProductsComponent() { return { 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) { if (query.trim() !== "") { const regex = new RegExp(`(?!<[^>]*)(${query})(?![^<]*>)`, "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) { return window.BASE_URL + product.url_key + (product.url_suffix || ''); }, getProductImageUrl(product) { const imageUrl = product.small_image.url; let mediaURL = this.config.customMediaUrl || imageUrl; if (mediaURL.includes('/media') && imageUrl.startsWith('media/')) { mediaURL = mediaURL.replace('/media', ''); } return (imageUrl.includes('://') ? '' : mediaURL) + imageUrl; }, /** * * @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: '#FE9901', greyHex: '#cbd5e0', averageRating: (rating_summary / 20).toFixed(1) }; return product; }, isM1(product) { return product.type === 1 }, isSaas(product) { return product.custom_stock_status === 'Saas' }, isService(product) { return product.type === +'99' }, isRequestQuote(product) { return product.custom_stock_status === 'Request a quote' }, isRevisingDemand(product) { return product.custom_stock_status === 'Revising demand' }, isCalcurates(product) { return product.id === 1490 } } }</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: 100, resultPageUrl: 'https://amasty.com/catalogsearch/result/?q=', minSearchLength: 3, maxSearchLength: 128, isDefaultSearchInput: true, isFullWidthSearch: false, searchPopupWidth: 900, showOverlay: false, config: {}, slider: { bestsellers: false, recentlyViewed: false }, isHorizontalView: true, noResultsFound: false, errorMessage: null, isProductsShown: false, regex: { tags: /(<([^>]+)>)/gi }, 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 && this.isMobile('(max-width: 1023px)')) { document.body.classList.remove('amxsearch-open'); $el.classList.add('hidden'); return; } if (this.isMobile('(max-width: 1023px)')) { $el.classList.remove('hidden'); document.body.classList.add('amxsearch-open'); } else { if (val) { $el.classList.add('show-search-wrapper'); } } if (document.body.classList.contains('-ammenu-opened')) { const event = new Event('click'); document.querySelector('[data-ammenu-js="menu-toggle"]').dispatchEvent(event); } 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); }, showHandler(blockName) { if (this.isProductsShown) { if (blockName === 'products') { return true; } else { return false } } else { return this.latestQuery.length >= this.minSearchLength || this.showOnFirstClick(blockName); } }, 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 = this.stripTags(html) || ''; return txt.innerHTML; }, stripTags: function (string) { if (this.regex.tags.test(string)) { return string.replace(this.regex.tags, ''); } return string; }, 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.showOverlay = true; 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 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 } } } type hyva_compatible custom_stock_status opposite_product is_salable_service show_in_ajax_search opposite_product_data { name type is_salable url_key url_suffix price_range { minimum_price { regular_price { value currency } final_price { value currency } } maximum_price { final_price { value currency } } } } product_label { label_id name status priority is_single use_for_parent frontend_settings { label_text type image image_size position style alt_tag redirect_url } tooltip { status color background_color content } } } 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': 'default' }, credentials: 'include', body: JSON.stringify({query, variables}), }); req.catch(reason => console.error(reason)); 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; }); }, 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://amasty.com/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.$root.classList.remove('show-search-wrapper'); } 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) { this.isProductsShown = false; 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; } if (rows.products?.total_count) { this.isProductsShown = true; } 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); } } }, ...AmsiteUtils() } } })();</script><script> 'use strict'; /** * 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 { 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 || columnMain) { searchHeader.classList.add(headerTypeClass); columnMain.classList.add(headerTypeClass); } if (this.checkHyvaUiHeaderVariant('a')) { searchContent.className = 'container'; } } } }</script><script> 'use strict'; function initAmlabel_67be1e232daab() { return { element: null, elementStyle: null, parent: null, parentWidth: null, initialized: false, wrapperClass: '', wrapperStyle: null, labelContainer: null, labelWidth: null, amLabelStyle: null, /** * @param $el */ initLabel($el) { this.element = $el; this.labelContainer = this.$refs.amLabel; this.labelWidth = Number(this.$refs.amLabelElement.dataset.size); this.parent = this.$refs.amLabelParent; this.parentWidth = this.$refs.amLabelImgParent.width; this.wrapperClass = `[data-wrapper-class=${this.$refs.amLabelElement.dataset.wrapperClass}]`; this.wrapperStyle = this.$refs.amLabelWrapper.classList; switch ($el.dataset.position) { case '0': this.elementStyle = ' top-0 left-0'; this.amLabelStyle = ' items-start' break; case '1': this.elementStyle = ' top-0 mx-auto'; this.amLabelStyle = ' items-start' break; case '2': this.elementStyle = ' top-0 right-0'; this.amLabelStyle = ' items-end' break; case '3': this.elementStyle = ' top-1/2 -translate-y-1/2 left-0'; this.amLabelStyle = ' items-start' break; case '4': this.elementStyle = ' top-1/2 -translate-y-1/2 mx-auto'; this.amLabelStyle = ' items-start' break; case '5': this.elementStyle = ' top-1/2 -translate-y-1/2 right-0'; this.amLabelStyle = ' items-end' break; case '6': this.elementStyle = ' bottom-0 left-0'; this.amLabelStyle = ' items-start' break; case '7': this.elementStyle = ' bottom-0 mx-auto'; this.amLabelStyle = ' items-start' break; case '8': this.elementStyle = ' bottom-0 right-0'; this.amLabelStyle = ' items-end' break; } this.$refs.amLabelWrapper.classList = this.wrapperStyle + this.elementStyle; if ('0' === '0') { this.$refs.amLabelWrapper.classList = this.$refs.amLabelWrapper.classList + this.amLabelStyle; } }, /** * @return {void} */ render() { if (this.element.dataset.amlabelObserved) { return; } this.element.dataset.amlabelObserved = true; this.parentContainerProcessor.process(this); this.labelItemProcessor.process(this); this.initialized = true; }, /** * @param url * @returns {string} */ getImgLabelPath(url) { const baseUrl = BASE_URL.replace('index.php/', ''); return `${baseUrl}media/amasty/amlabel/${url}`; }, /** * @param url */ labelRedirect(url) { return window.location.assign(`${BASE_URL + url}`); }, /** * @returns {string|string} */ getImageSize() { return this.labelWidth ? this.parentWidth * this.labelWidth / 100 + 'px': ''; } } }</script><script> 'use strict'; function initAmlabel_67be1e232dc85() { return { element: null, elementStyle: null, parent: null, parentWidth: null, initialized: false, wrapperClass: '', wrapperStyle: null, labelContainer: null, labelWidth: null, amLabelStyle: null, /** * @param $el */ initLabel($el) { this.element = $el; this.labelContainer = this.$refs.amLabel; this.labelWidth = Number(this.$refs.amLabelElement.dataset.size); this.parent = this.$refs.amLabelParent; this.parentWidth = this.$refs.amLabelImgParent.width; this.wrapperClass = `[data-wrapper-class=${this.$refs.amLabelElement.dataset.wrapperClass}]`; this.wrapperStyle = this.$refs.amLabelWrapper.classList; switch ($el.dataset.position) { case '0': this.elementStyle = ' top-0 left-0'; this.amLabelStyle = ' items-start' break; case '1': this.elementStyle = ' top-0 mx-auto'; this.amLabelStyle = ' items-start' break; case '2': this.elementStyle = ' top-0 right-0'; this.amLabelStyle = ' items-end' break; case '3': this.elementStyle = ' top-1/2 -translate-y-1/2 left-0'; this.amLabelStyle = ' items-start' break; case '4': this.elementStyle = ' top-1/2 -translate-y-1/2 mx-auto'; this.amLabelStyle = ' items-start' break; case '5': this.elementStyle = ' top-1/2 -translate-y-1/2 right-0'; this.amLabelStyle = ' items-end' break; case '6': this.elementStyle = ' bottom-0 left-0'; this.amLabelStyle = ' items-start' break; case '7': this.elementStyle = ' bottom-0 mx-auto'; this.amLabelStyle = ' items-start' break; case '8': this.elementStyle = ' bottom-0 right-0'; this.amLabelStyle = ' items-end' break; } this.$refs.amLabelWrapper.classList = this.wrapperStyle + this.elementStyle; if ('0' === '0') { this.$refs.amLabelWrapper.classList = this.$refs.amLabelWrapper.classList + this.amLabelStyle; } }, /** * @return {void} */ render() { if (this.element.dataset.amlabelObserved) { return; } this.element.dataset.amlabelObserved = true; this.parentContainerProcessor.process(this); this.labelItemProcessor.process(this); this.initialized = true; }, /** * @param url * @returns {string} */ getImgLabelPath(url) { const baseUrl = BASE_URL.replace('index.php/', ''); return `${baseUrl}media/amasty/amlabel/${url}`; }, /** * @param url */ labelRedirect(url) { return window.location.assign(`${BASE_URL + url}`); }, /** * @returns {string|string} */ getImageSize() { return this.labelWidth ? this.parentWidth * this.labelWidth / 100 + 'px': ''; } } }</script><script> function initCartDrawer() { return { isGlobalOpen: false, open: false, isLoading: false, cart: {}, maxItemsToDisplay: 10, itemsCount: 0, isHoverOnCartWrapper: false, totalCartAmount: 0, removedBlock: [], mainBlock: [], getData(data) { if (data.cart) { this.cart = data.cart; this.itemsCount = data.cart.items && data.cart.items.length || 0; this.totalCartAmount = this.cart.summary_count; this.setCartItems(); } }, cartItems: [], 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)); } this.removeActions(); }, deleteItemFromCart(item, target) { const formKey = hyva.getFormKey(); const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; this.isLoading = true; this.animationRemoveItem(item.item_id, target); fetch(postUrl, { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, "body": "form_key=" + formKey + "&item_id=" + item.item_id, "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: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' }]); this.isLoading = false; } }).then(result => { if (!result.success) { window.dispatchMessages && window.dispatchMessages([{ type: 'error', text: result.error_message }], 5000) this.isLoading = false; } window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }); }, toggleCartDrawer(event) { if (this.isMobile('(max-width: 1023px)')) { return; } if (event.detail && event.detail.isOpen !== undefined) { if (event.detail.isOpen) { this.isOpen = true; this.openCartDrawer() this.isGlobalOpen = !event.detail.showAfterAdd; } else { this.open = false; this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent) } } else { this.openCartDrawer() } }, openCartDrawer() { this.open = true; this.$nextTick(() => { this.$refs && this.$refs.cartDialogContent }) setTimeout(() => { this.$refs.cartDialogContent.focus() }, 500); if (this.closeTimeout) { clearTimeout(this.closeTimeout); } this.closeTimeout = setTimeout(() => { if (!this.isGlobalOpen) { this.closeCartDrawer(); } }, 5000); }, closeCartDrawer() { this.$dispatch('toggle-cart', { isOpen: false }); }, closeCartWithDelay() { this.isGlobalOpen = false; setTimeout(() => { if (this.isGlobalOpen) { return; } this.closeCartDrawer(); }, 500); }, getAdditionalOptions(item) { var period = item.product_subscription_period, typeUser = item.subscription_type.toLowerCase(), typeVersion = item.product_subscription_version; period = period === 'year' ? 'annual' : period; if (window.dataForSubscriptions[typeUser]) { return '<p class="list-item">&mdash; ' + window.dataForSubscriptions[typeUser][period][typeVersion] .join('</p><p class="list-item">&mdash; ') + '</p>'; } return ''; }, animationRemoveItem(itemId, target) { const itemBlock = target.closest(`[data-amsite-js="${itemId}"]`); const removeBlock = document.querySelector('[data-amsite-js="removeBlock"]'); const mainBlock = itemBlock.querySelector('[data-amsite-js="item-main-block"]'); const clonedRemoveBlock = removeBlock.cloneNode(true); mainBlock.classList.add('hidden'); itemBlock.appendChild(clonedRemoveBlock); clonedRemoveBlock.classList.remove('hidden'); this.removedBlock.push(clonedRemoveBlock); this.mainBlock.push(mainBlock); }, removeActions() { if (this.removedBlock.length) { this.removedBlock.forEach((block) => { block.remove(); }); this.mainBlock.forEach((block) => { block.classList.remove('hidden'); }); this.isLoading = false; if (document.body.classList.contains('checkout-cart-index')) { window.location.reload(); } } }, showRemoveMessage(item, target) { window.dispatchEvent( new CustomEvent('minicart-popup-show-notification', {detail: {item, target}}) ) }, ...AmsiteUtils() } }</script><script> const AmMiniCartPopupNotification = function () { const TEXTS = { transferred: 'This\u0020product\u0020is\u0020transferred.\u0020If\u0020you\u0020delete\u0020it,\u0020you\u0020will\u0020no\u0020longer\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020be\u0020able\u0020to\u0020buy\u0020it\u0020with\u0020a\u0020100\u0025\u0020discount\u0020for\u0020the\u0020initial\u0020order.\u0020Would\u0020you\u0020still\u0020like\u0020to\u0020proceed\u003F', free: 'Are\u0020you\u0020sure\u0020you\u0020want\u0020to\u0020remove\u0020the\u0020free\u0020gift\u0020from\u0020the\u0020cart\u003F\u0020Once\u0020deleted\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020you\u0020won\u2019t\u0020be\u0020able\u0020to\u0020add\u0020it\u0020again.', }; return { item: {}, target: null, showNotification(data) { this.item = data.detail.item; this.target = data.detail.$el; this.createContentForPopup(this.item ); this.show('minicart-popup-notification'); }, createContentForPopup(item) { const itemType = item.is_transfered ? 'transferred' : 'free'; this.$refs.minicartNotificationContent.textContent = TEXTS[itemType]; } } }</script><script type="text/x-magento-init"> { "*": { "Magento_Ui/js/core/app": { "components": { "messages": { "component": "Magento_Theme/js/view/messages", "floatingMessages": "true" } } } } }</script><script>window.authenticationPopup = {"autocomplete":"off","customerRegisterUrl":"https:\/\/amasty.com\/customer\/account\/create\/","customerForgotPasswordUrl":"https:\/\/amasty.com\/customer\/account\/forgotpassword\/","baseUrl":"https:\/\/amasty.com\/","customerLoginUrl":"https:\/\/amasty.com\/customer\/ajax\/login\/"}</script><script type="text/x-magento-init"> { "#authenticationPopup": { "Magento_Ui/js/core/app": {"components":{"authenticationPopup":{"component":"Magento_Customer\/js\/view\/authentication-popup","children":{"messages":{"component":"Magento_Ui\/js\/view\/messages","displayArea":"messages"},"captcha":{"component":"Magento_Captcha\/js\/view\/checkout\/loginCaptcha","displayArea":"additional-login-form-fields","formId":"user_login","configSource":"checkout"}}}}} }, "*": { "Magento_Ui/js/block-loader": "https\u003A\u002F\u002Fcdn.amasty.com\u002Fstatic\u002Fversion1739349122\u002Ffrontend\u002FAmasty\u002FAmTheme\u002Fen_US\u002Fimages\u002Floader\u002D1.gif" } }</script><script type="text/x-magento-init"> { "*": { "Magento_Customer/js/section-config": { "sections": {"stores\/store\/switch":["*"],"stores\/store\/switchrequest":["*"],"directory\/currency\/switch":["*"],"*":["messages"],"customer\/account\/logout":["*","recently_viewed_product","recently_compared_product","persistent"],"customer\/account\/loginpost":["*"],"customer\/account\/createpost":["*"],"customer\/account\/editpost":["*"],"customer\/ajax\/login":["checkout-data","cart","captcha"],"catalog\/product_compare\/add":["compare-products"],"catalog\/product_compare\/remove":["compare-products"],"catalog\/product_compare\/clear":["compare-products"],"sales\/guest\/reorder":["cart"],"sales\/order\/reorder":["cart"],"checkout\/cart\/add":["cart","directory-data"],"checkout\/cart\/delete":["cart"],"checkout\/cart\/updatepost":["cart"],"checkout\/cart\/updateitemoptions":["cart"],"checkout\/cart\/couponpost":["cart"],"checkout\/cart\/estimatepost":["cart"],"checkout\/cart\/estimateupdatepost":["cart"],"checkout\/onepage\/saveorder":["cart","checkout-data","last-ordered-items"],"checkout\/sidebar\/removeitem":["cart"],"checkout\/sidebar\/updateitemqty":["cart"],"rest\/*\/v1\/carts\/*\/payment-information":["cart","last-ordered-items","captcha","instant-purchase"],"rest\/*\/v1\/guest-carts\/*\/payment-information":["cart","captcha"],"rest\/*\/v1\/guest-carts\/*\/selected-payment-method":["cart","checkout-data"],"rest\/*\/v1\/carts\/*\/selected-payment-method":["cart","checkout-data","instant-purchase"],"customer\/address\/*":["instant-purchase"],"customer\/account\/*":["instant-purchase"],"vault\/cards\/deleteaction":["instant-purchase"],"paypal\/express\/placeorder":["cart","checkout-data"],"paypal\/payflowexpress\/placeorder":["cart","checkout-data"],"paypal\/express\/onauthorization":["cart","checkout-data"],"persistent\/index\/unsetcookie":["persistent"],"review\/product\/post":["review"],"wishlist\/index\/add":["wishlist"],"wishlist\/index\/remove":["wishlist"],"wishlist\/index\/updateitemoptions":["wishlist"],"wishlist\/index\/update":["wishlist"],"wishlist\/index\/cart":["wishlist","cart"],"wishlist\/index\/fromcart":["wishlist","cart"],"wishlist\/index\/allcart":["wishlist","cart"],"wishlist\/shared\/allcart":["wishlist","cart"],"wishlist\/shared\/cart":["cart"],"gdpr\/customer\/anonymise":["customer"],"ammostviewed\/cart\/add":["cart","messages"],"faq\/index\/save":["faq"],"amasty_jettheme\/ajax\/addtocompare":["compare-products"],"amasty_jettheme\/ajax\/addtowishlist":["wishlist"],"amasty_cart\/cart\/post":["cart","messages","directory-data"]}, "clientSideSections": ["checkout-data","cart-data","faq_product"], "baseUrls": ["https:\/\/amasty.com\/"], "sectionNames": ["messages","customer","compare-products","last-ordered-items","cart","directory-data","captcha","instant-purchase","loggedAsCustomer","persistent","review","wishlist","faq","recently_viewed_product","recently_compared_product","product_data_storage","paypal-billing-agreement"] } } }</script><script type="text/x-magento-init"> { "*": { "Magento_Customer/js/customer-data": { "sectionLoadUrl": "https\u003A\u002F\u002Famasty.com\u002Fcustomer\u002Fsection\u002Fload\u002F", "expirableSectionLifetime": 60, "expirableSectionNames": ["cart","persistent"], "cookieLifeTime": "31556952", "updateSessionUrl": "https\u003A\u002F\u002Famasty.com\u002Fcustomer\u002Faccount\u002FupdateSession\u002F" } } }</script><script type="text/x-magento-init"> { "*": { "Magento_Customer/js/invalidation-processor": { "invalidationRules": { "website-rule": { "Magento_Customer/js/invalidation-rules/website-rule": { "scopeConfig": { "websiteId": "1" } } } } } } }</script><script type="text/x-magento-init"> { "body": { "pageCache": {"url":"https:\/\/amasty.com\/page_cache\/block\/render\/","handles":["default","cms_index_index","cms_page_view","cms_index_index_id_home","hyva_default","hyva_cms_index_index","hyva_cms_page_view","hyva_cms_index_index_id_home","hyva_amcookiebar_popup","am_mega_menu_layout"],"originalRequest":{"route":"cms","controller":"index","action":"index","uri":"\/"},"versionCookieName":"private_content_version"} } }</script><script type="text/javascript"> var $zoho = $zoho || {}; $zoho.salesiq = $zoho.salesiq || { widgetcode: "ea5ee0680c5e32cfaed3ad895e0035997af0d8f138230bae4a7829abb7fcf825", values: {}, ready: function () { $zoho.salesiq.customfield.add( { "name": "_default.name", "hint": "Enter your First and Last Name", "type": "text", "required": "true", "visibility": "both" }); $zoho.salesiq.customfield.add( { "name": "_default.email", "hint": "Your Email", "type": "text", "required": "true", "visibility": "both" }); $zoho.salesiq.visitor.name(" "); $zoho.salesiq.visitor.email(""); $zoho.salesiq.domain("amasty.com"); } }; var d = document; s = d.createElement("script"); s.type = "text/javascript"; s.id = "zsiqscript"; s.defer = true; s.src = "https://salesiq.zoho.eu/widget"; t = d.getElementsByTagName("script")[0]; setTimeout(() => { t.parentNode.insertBefore(s, t); }, 10000);</script><script type="text/x-magento-init"> { "*": { "Amasty_ZohoChat/js/liveChat": {} } }</script><script> 'use strict'; function initFormEvents188() { return { options: { classes: { disableClass: '-disabled', errorClass: '-error', errorMsgBoxClass: '.input-error-box', validInputClass: ['valid'], invalidInputClass: ['invalid', 'invalid:border-red-500'], modalTriggerClass: '[data-survey-trigger="confirmation-modal-trigger"]', groupRequireClass: '.group-required', surveyContentClass: 'data-element="form-content"' }, messages: { defaultErrorMessage: 'Please\u0020fill\u0020out\u0020this\u0020field.' }, isAjax: true, }, processSubmit: function(page, tab, event) { const form = event.detail?.form ?? event.target.closest('form'); this.checkByAdvancedValidation(form).then(() => { this.performSubmit(event); return true; }).catch(() => { return false; }); }, checkByAdvancedValidation: function (form) { return window.hyva.formValidation(form).validate(); }, performSubmit: function (event) { const formNode = event.detail?.form ?? this.getFormNode(event.target); if (this.isAjaxSubmit(formNode)) { const url = formNode.getAttribute('action'); const headers = { contentType: 'application/x-www-form-urlencoded; charset=utf-8' } const formData = new FormData(formNode); formData.set('ajax', 'true'); fetch(url, { method: 'POST', body: formData, headers: headers }).then((response) => { if (response.ok) { return response.text(); } }).then((response) => { try { const parsedResponse = JSON.parse(String(response)); if (parsedResponse.result === 'success') { window.dispatchEvent(new CustomEvent('amcform-hide-modal-188')); window.dispatchEvent(new CustomEvent('amcform-success-submitted')); formNode.reset(); formNode.querySelector('a[href="#page-1"')?.click(); } } catch (error) { const messageText = 'Unknown\u0020error\u0020occurred.\u0020Please\u0020try\u0020again\u0020later\u0020or\u0020use\u0020Contact\u0020Us\u0020link\u0020in\u0020the\u0020menu.'; window.dispatchMessages && window.dispatchMessages([{type: "warning", text: messageText}], 5000); } }).finally(() => { window.dispatchEvent(new CustomEvent("reload-customer-section-data")); window.scrollTo({ top: 0, behavior: 'smooth' }); }); } else { formNode.submit(); } }, isAjaxSubmit: function (formNode) { return this.options.isAjax && !formNode.querySelector('input[type="file"]:not([disabled])'); }, getFormNode: function (formElement) { return formElement.closest('#amform-form-188'); }, toggleOnCheckbox(el) { const checkbox = el.querySelector('input'); const isChecked = checkbox.checked; isChecked ? checkbox.removeAttribute('checked') : checkbox.setAttribute('checked', true); }, toggleDisablingClass(el, next) { if (el.classList.contains(this.options.classes.disableClass) && next) { el.classList.remove(this.options.classes.disableClass); } else if (!next) { el.classList.add(this.options.classes.disableClass); } }, pageValidation(el, tab, event) { const page = event.detail?.form ?? event.target.closest('form'); this.checkByAdvancedValidation(page).then(() => { el.parentElement.scrollIntoView({ behavior: "smooth" }); if (tab) { tab.classList.remove(this.options.classes.errorClass); } return true; }).catch(() => { event.preventDefault(); event.stopImmediatePropagation(); if (tab) { tab.classList.add(this.options.classes.errorClass); } return false; }); }, toggleErrorMessage(state, field, message) { let errorBox = field.parentElement.querySelector(this.options.classes.errorMsgBoxClass); if (!errorBox) { errorBox = field.querySelector(this.options.classes.errorMsgBoxClass); } if (errorBox) { this.switchErrorVisibility(state, errorBox, message); } }, switchErrorVisibility(state, box, message) { switch (state) { case 'show': box.innerHTML = message; box.style.display = 'block'; box.scrollIntoView({ behavior: 'smooth', block: 'start'}); break; case 'hide': box.style.display = 'none'; box.innerHTML = ''; break; } }, submitSurveyForm(element, event, page, tab) { let form = document.getElementById('amform-form-188'); let sPage = form.querySelector('[x-ref="' + page + '"]'); let sTab = form.querySelector('[x-ref="' + tab + '"]'); let isValid = this.pageValidation(sPage, sTab, event); if (!isValid) { return false; } else { element.querySelector(this.options.classes.modalTriggerClass).click() } }, showConfirmForm: function (result) { let form = document.getElementById('amform-form-188'); if (result) { form.submit(); } } } }</script><script> (function setDependencies() { const form = document.getElementById('amform-form-188'); const relatedFields = form.querySelectorAll('[data-dependency]'); if (!relatedFields.length) { return; } relatedFields.forEach(relatedField => { const dependency = relatedField.dataset.dependency.split(','); const dependencyFields = []; dependency.forEach(dependency => { dependencyFields.push(form.querySelectorAll(`[x-ref="${dependency.trim()}"]`)); }); dependencyFields.forEach(element => { let field = element[0]; let mutationCallback = (mutationsList) => { for (const mutation of mutationsList) { if (mutation.type !== "attributes" || mutation.attributeName !== "disabled") return updateDependency(dependencyFields, relatedField); } }; let observer = new MutationObserver(mutationCallback); field.closest('.fieldset-block').addEventListener('change', () => { updateDependency(dependencyFields, relatedField) }, false); observer.observe(field, { attributes: true }) }); updateDependency(dependencyFields, relatedField); }); function canBeChecked(type) { return type === 'checkbox' || type === 'radio'; } function updateDependency(dependencyFields, relatedField) { let isVisible = true; dependencyFields.forEach(otherFieldDependency => { if (canBeChecked(otherFieldDependency[0].type) && !otherFieldDependency[0].checked || otherFieldDependency[0].type === undefined && !otherFieldDependency[0].selected || otherFieldDependency[0].disabled) { isVisible = false; } }); if (isVisible) { relatedField.style.display = 'block'; relatedField.querySelectorAll('input, select, textarea, option').forEach(input => { input.removeAttribute('disabled'); }) } else { relatedField.style.display = 'none'; relatedField.querySelectorAll('input, select, textarea, option').forEach(input => { input.setAttribute('disabled', 'disabled'); }); } } })();</script><script> (function fillFormData(formId) { const params = {"urlSession":"https:\/\/amasty.com\/amasty_customform\/form\/sessiondata\/","formId":188,"productId":0}; const formData = 'form_id=' + formId + '&product_id=' + params.productId; const form = document.getElementById('amform-form-' + formId + ''); const parseXData = function (node) { try { const xDataString = (node.getAttribute('x-data') ?? '{}') .replace(/[\n ]+/g, '') .replace(/(\w+):/g, '"$1":') .replace(/'/g, '"'); return JSON.parse(xDataString); } catch (e) { console.log(e); return null; } }; const updateWrapperXData = function (inputNode, inputData) { try { const inputWrapper = inputNode.closest('.fieldset-block'); const xDataObject = parseXData(inputWrapper); if (typeof xDataObject.value !== 'undefined' && xDataObject.value !== inputData) { xDataObject.value = inputData; inputWrapper.setAttribute('x-data', JSON.stringify(xDataObject)); } } catch (e) { console.error(e); } }; const getValueAsArray = function(inputData) { return ( typeof inputData === 'string' ? [inputData] : Array.isArray(inputData) ? inputData : [] ); } const checkNodesByValues = function(nodes, values, attributeName) { values.forEach(function (value) { const nodeToSetAttribute = nodes.find(node => node.getAttribute('value') === value); nodeToSetAttribute && (nodeToSetAttribute[attributeName] = true); }); } const textInputFiller = { supportedInputTypes: [ 'text', 'email', 'number', 'date', 'time' ], supportedTagNames: [ 'textarea' ], support: function (inputNode) { return this.supportedInputTypes.includes(inputNode.getAttribute('type')) || this.supportedTagNames.includes(inputNode.tagName.toLowerCase()); }, fill: function (inputNode, inputData) { if (typeof inputData !== 'string') { return; } inputNode.value = inputData; updateWrapperXData(inputNode, inputData); } }; const selectInputFiller = { supportedTagNames: [ 'select' ], support: function (inputNode) { return this.supportedTagNames.includes(inputNode.tagName.toLowerCase()); }, fill: function (inputNode, inputData) { const optionValues = getValueAsArray(inputData); if (optionValues.length === 0) { return; } this.clearSelectedAttribute(inputNode); checkNodesByValues(Array.from(inputNode.options), optionValues, 'selected'); updateWrapperXData(inputNode, optionValues); }, clearSelectedAttribute: function (inputNode) { Array.from(inputNode.options).forEach((option) => { option.selected = false; option.removeAttribute('selected'); }); } }; const checkableInputFiller = { supportedInputTypes: [ 'checkbox', 'radio' ], support: function (inputNode) { return this.supportedInputTypes.includes(inputNode.getAttribute('type')); }, fill: function (inputNode, inputData) { const inputName = inputNode.getAttribute('name'); const checkboxList = document.querySelectorAll(`input[name="${inputName}"]`); const checkboxValues = getValueAsArray(inputData); if (checkboxValues.length === 0) { return; } this.uncheck(checkboxList); checkNodesByValues(Array.from(checkboxList), checkboxValues, 'checked'); this.fillRating(inputNode, inputData); }, fillRating(inputNode, inputData) { if (!this.isRating(inputNode) || typeof inputData !== 'string') { return; } const xDataContainer = inputNode.closest('[x-data]'); if (!xDataContainer?.getAttribute('x-data').includes('clickedRatingId')) { return; } const xData = parseXData(xDataContainer); if (!xData) { return; } xData.clickedRatingId = inputData; xDataContainer.setAttribute('x-data', JSON.stringify(xData)); xDataContainer.querySelector('input:checked')?.click(); }, isRating: function(inputNode) { return inputNode.name.startsWith('rating-'); }, uncheck: function (checkboxList) { checkboxList.forEach(function (checkbox) { checkbox.checked = false; }); } }; const inputFillerPool = { excludedInputNames: [ 'form_id', 'form_key', 'is_survey' ], inputFillers: [ textInputFiller, selectInputFiller, checkableInputFiller ], fill: function (inputNode, inputData) { if (this.shouldExclude(inputNode)) { return; } for (const fillerIndex in this.inputFillers) { if (this.inputFillers[fillerIndex].support(inputNode)) { this.inputFillers[fillerIndex].fill(inputNode, inputData); inputNode.closest('.fieldset-block').dispatchEvent(new Event('change')); break; } } }, shouldExclude: function (inputNode) { return this.excludedInputNames.includes(inputNode.getAttribute('name')) || inputNode.getAttribute('type') === 'hidden'; } }; function requestData(url, body) { return new Promise((resolve, reject) => { fetch(url, { method: 'POST', body: body, headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'X-Requested-With': 'XMLHttpRequest' } }).then(response => response.json()) .then(data => { resolve(data); }) .catch((error) => { reject(error); }); }); } requestData(params.urlSession, formData).then(data => { const formFields = data.form_fields ?? {}; const persistedInputNames = Object.keys(formFields); persistedInputNames.forEach(inputName => { const inputNode = form.querySelector(`[name^="${inputName}"]`); !!inputNode && inputFillerPool.fill(inputNode, formFields[inputName]); }); }) })(188);</script><script type="text/x-magento-init"> { "body": { "requireCookie": {"noCookieUrl":"https:\/\/amasty.com\/cookie\/index\/noCookies\/","triggers":"","isRedirectCmsPage":true} } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-amtheme-js=ajax-tocart]": { "amAjaxCart": { "actionUrl": "https://amasty.com/amasty_jettheme/ajax/addToCart/", "classes":{ "addToCartButtonDisable": "disabled -show-spinner" } } } }</script><script type="text/x-magento-init"> { "*": { "Amasty_Preorder/js/product/preorder_list": { "jsonConfig" : {"649":{"configurable":{"entity":"649","swatchOpt":".swatch-opt-649","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"649":{"135":"Edition"}},"isAllProductsPreorder":0}},"793":{"configurable":{"entity":"793","swatchOpt":".swatch-opt-793","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"793":{"135":"Edition"}},"isAllProductsPreorder":0}},"521":{"configurable":{"entity":"521","swatchOpt":".swatch-opt-521","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"521":{"135":"Edition"}},"isAllProductsPreorder":0}},"1634":{"configurable":{"entity":"1634","swatchOpt":".swatch-opt-1634","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"1634":{"135":"Edition"}},"isAllProductsPreorder":0}}} } } }</script><script type="text/x-magento-init"> { "#amrelated-block-11": { "amRelatedAnalytics": { "viewUrl": "https://amasty.com/ammostviewed/analytics/view/", "blockId": 11, "relatedProducts": null, "clickUrl": "https://amasty.com/ammostviewed/analytics/click/" } } }</script><script type="text/x-magento-init"> { "*": { "Amasty_Preorder/js/product/preorder_list": { "jsonConfig" : [] } } }</script><script type="text/x-magento-init"> { "#amrelated-block-13": { "amRelatedAnalytics": { "viewUrl": "https://amasty.com/ammostviewed/analytics/view/", "blockId": 13, "relatedProducts": null, "clickUrl": "https://amasty.com/ammostviewed/analytics/click/" } } }</script><script type="text/x-magento-init"> { "[data-amsite-js=category-page-list]": { "Amasty_Scroll/js/amscroll": {"product_container":".products.products-grid:not(.amasty-banners), .products.products-list:not(.amasty-banners), .products-grid.grid:not(.amasty-banners)","product_link":".product-item-link","loadingImage":"https:\/\/cdn.amasty.com\/static\/version1739349122\/frontend\/Amasty\/AmTheme\/en_US\/Amasty_Scroll\/images\/loader.svg","pageNumbers":"0","pageNumberContent":"Page #","pageNumberStyle":"button","buttonColor":"#4776F0","buttonColorPressed":"#1846BE","loadingafterTextButton":"Load next","loadingbeforeTextButton":"Load previous","backToTop":{"enabled":"0","style_desktop":"text","style_mobile":"arrow","color":"#4776F0"},"backToTopText":"Back to Top","current_page":1,"footerSelector":".page-footer","actionMode":"auto"} } }</script><script type="text/x-magento-init"> { "*": { "Magento_Ui/js/core/app": { "components": { "storage-manager": { "component": "Magento_Catalog/js/storage-manager", "appendTo": "", "storagesConfiguration" : {"recently_viewed_product":{"requestConfig":{"syncUrl":"https:\/\/amasty.com\/catalog\/product\/frontend_action_synchronize\/"},"lifetime":"1000","allowToSendRequest":null},"recently_compared_product":{"requestConfig":{"syncUrl":"https:\/\/amasty.com\/catalog\/product\/frontend_action_synchronize\/"},"lifetime":"1000","allowToSendRequest":null},"product_data_storage":{"updateRequestConfig":{"url":"https:\/\/amasty.com\/rest\/default\/V1\/products-render-info"},"requestConfig":{"syncUrl":"https:\/\/amasty.com\/catalog\/product\/frontend_action_synchronize\/"},"allowToSendRequest":null}} } } } } }</script><script type="text/x-magento-init"> { "*": { "Amasty_AdminCustomerSections/js/adminCustomerSections": {} } }</script><script> 'use strict'; function initAmGdprPolicyPopup() { return { /** * @typedef PolicyData * @property {string} policyVersion * @property {boolean} show * @property {string} title * @property{boolean} versionChanged * @property {boolean} hideClose * @property {boolean} action */ eventListeners: { ['@amgdpr-accept-policy']() { if (this.consentId) { window.dispatchEvent(new CustomEvent('amgdpr-consent-accepted', {detail: this.consentId})); this.consentId = undefined; this.hide('amgdpr-policy-popup'); } else { this.acceptPolicy(); } }, ['@amgdpr-show-policy.window'](event) { this.consentId = event.detail; this.fetchPolicyContent().then(() => { this.$nextTick(() => { this.show('amgdpr-policy-popup'); }); }); }, ['@amgdpr-close-policy']() { this.hide('amgdpr-policy-popup'); } }, textUrl: 'https://amasty.com/gdpr/policy/policytext/', acceptUrl: 'https://amasty.com/gdpr/policy/accept/', popupDataUrl: 'https://amasty.com/gdpr/policy/popupData/', notificationText: 'We would like to inform you that our Privacy Policy has been amended.Please, read and accept the new terms.', showOnPageLoad: '', /** * @type PolicyData */ policyData: { policyVersion: '', show: false, title: '', versionChanged: false, hideClose: false, action: true }, title: '', policyText: '', consentId: undefined, initGdprPopup: function () { this.fetchPolicyData().then(() => { if ((this.showOnPageLoad && this.policyData.show) || this.policyData.versionChanged) { this.fetchPolicyContent().then(() => { this.$nextTick(() => { this.show('amgdpr-policy-popup'); }); }); } }); }, /** * @returns {Promise} */ fetchPolicyData: function () { return fetch(this.popupDataUrl) .then(response => response.json()) .then((data) => { this.policyData = {...data} }) .catch(error => this.dispatchErrorMessage(error)); }, /** * @returns {Promise} */ fetchPolicyContent: function () { this.title = ''; this.policyText = ''; const params = !!this.consentId ? '?' + new URLSearchParams({consent_id: this.consentId}) : '' return fetch(this.textUrl + params) .then(response => response.json()) .then(policyContent => { this.title = policyContent.title; this.policyText = policyContent.content; }).catch(error => this.dispatchErrorMessage(error)); }, /** * @returns {void} */ acceptPolicy: function () { window.dispatchEvent(new Event('amgdpr-loading-start')); const body = new URLSearchParams({form_key: hyva.getFormKey(), ...this.policyData}); const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; fetch(this.acceptUrl, {method: 'POST', body, headers: {'Content-Type': contentType}}) .then(response => response.json()) .then(data => { if (data.error) { this.dispatchErrorMessage(data.message) } else { this.notificationText = ''; this.hide('amgdpr-policy-popup'); } }) .catch(error => this.dispatchErrorMessage(error)) .finally(() => window.dispatchEvent(new Event('amgdpr-loading-stop'))); }, /** * @param {string} message * @returns {void} */ dispatchErrorMessage: function (message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: message } ]); }, /** * @returns {void} */ focusAcceptButton: function () { this.$refs['amgdpr-accept-policy']?.focus(); }, /** * @returns {void} */ focusCloseButton: function () { this.$refs['amgdpr-close-policy']?.focus(); } } }</script><script>require(['magezonBuilder']);</script><script>require(['Magezon_PageBuilder/js/common']);</script><script> (() => { function src_default(Alpine) { Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { let evaluate = evaluateLater(expression); let options = { rootMargin: getRootMargin(modifiers), threshold: getThreshhold(modifiers) }; let observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting === (value === "leave")) return; evaluate(); modifiers.includes("once") && observer.disconnect(); }); }, options); observer.observe(el); cleanup(() => { observer.disconnect(); }); }); } function getThreshhold(modifiers) { if (modifiers.includes("full")) return 0.99; if (modifiers.includes("half")) return 0.5; if (!modifiers.includes("threshold")) return 0; let threshold = modifiers[modifiers.indexOf("threshold") + 1]; if (threshold === "100") return 1; if (threshold === "0") return 0; return Number(`.${threshold}`); } function getLengthValue(rawValue) { let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); return match ? match[1] + (match[2] || "px") : void 0; } function getRootMargin(modifiers) { const key = "margin"; const fallback = "0px 0px 0px 0px"; const index = modifiers.indexOf(key); if (index === -1) return fallback; let values = []; for (let i = 1; i < 5; i++) { values.push(getLengthValue(modifiers[index + i] || "")); } values = values.filter((v) => v !== void 0); return values.length ? values.join(" ").trim() : fallback; } document.addEventListener("alpine:init", () => { window.Alpine.plugin(src_default); }); })();</script><script type="module" src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Hyva_Theme/js/alpine3.min.js" defer crossorigin ></script><script> 'use strict'; function dispatchMessages(messages, hideAfter) { const messagesEvent = new CustomEvent("messages-loaded", { detail: { messages: messages, hideAfter: hideAfter } }); window.dispatchEvent(messagesEvent); } if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } (function( hyva, undefined ) { hyva.initFormKey = () => { const inputSelector = 'input[name="form_key"]', formKey = hyva.getFormKey(); Array.from(document.querySelectorAll(inputSelector)).map(function (input) { input.value = formKey }); } hyva.initMessages = () => { try { const messages = hyva.getCookie('mage-messages'); window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; dispatchMessages(window.mageMessages); const skipSetDomain = true; hyva.setCookie('mage-messages','', -1, skipSetDomain); } catch (error) { console.warn('Error parsing Cookie Messages:', error); } } window.addEventListener('DOMContentLoaded', hyva.initFormKey); hyva.alpineInitialized(hyva.initMessages) }( window.hyva = window.hyva || {} ));</script><script> 'use strict'; { const private_content_key = 'mage-cache-storage'; const private_content_expire_key = 'mage-cache-timeout'; const private_content_version_key = 'private_content_version'; const section_data_ids_key = 'section_data_ids'; const mage_cache_session_id_key = 'mage-cache-sessid'; const last_visited_store_key = 'last_visited_store'; const ttl = 3600; if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } function loadSectionData () { const browserStorage = hyva.getBrowserStorage(); if (!browserStorage) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "warning", text: "Please enable LocalStorage in your browser." }] ); return; } try { let isInvalid = false; if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { isInvalid = true; } hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); if (!hyva.getCookie(mage_cache_session_id_key)) { isInvalid = true; 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) { 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 { dispatchPrivateContent({}); } } catch (error) { console.warn('Error retrieving Private Content:', error); } } hyva.alpineInitialized(loadSectionData) window.addEventListener('reload-customer-section-data', loadSectionData); function dispatchPrivateContent(data) { const privateContentEvent = new CustomEvent("private-content-loaded", { detail: { data: data } }); window.dispatchEvent(privateContentEvent); } function fetchPrivateContent(sections) { fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { method: 'GET', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }) .then(response => response.json()) .then( data => { if (data) { try { const browserStorage = hyva.getBrowserStorage(); 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', 'mouseover', 'wheel', 'scroll', 'keydown'])</script><script> 'use strict'; (function () { const modals = []; const excludedFromFocusTrapping = new Set(); function loadInertPolyfill(callback) { if (window.hyva.modal.disableInertPolyfill) { callback && callback(); } else { const polyfill = document.createElement('script'); polyfill.src = 'https\u003A\u002F\u002Fcdn.amasty.com\u002Fstatic\u002Fversion1739349122\u002Ffrontend\u002FAmasty\u002FAmTheme\u002Fen_US\u002FHyva_Theme\u002Fjs\u002Fwicg\u002Dinert\u002D3.1.1\u002Finert.min.js'; callback && polyfill.addEventListener('load', callback); const firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(polyfill, firstScriptTag); } } let isInertPolyfillLoaded = 0; function setSiblingsInert(dialogElement, toState) { if (isInertPolyfillLoaded === 0) { isInertPolyfillLoaded = 1; loadInertPolyfill(() => { isInertPolyfillLoaded = 2; setSiblingsInert(dialogElement, toState) }) return; } if (isInertPolyfillLoaded === 1) { return; } let el = dialogElement; while (el && (el = el.parentElement)) { if (el === document.body || el.parentElement === null) continue; Array.from(el.parentElement.children).forEach(sibling => { if (sibling !== el) { sibling.inert = toState; } }) } (function setChildrenInert(el, toState) { if (el) { el.inert = toState; Array.from(el.children).forEach(child => setChildrenInert(child, toState)); } })(findParentWithOverlaySpread(dialogElement), ! toState) excludedFromFocusTrapping.forEach(selector => { Array.from(document.querySelectorAll(selector)).map(el => el.inert = false); }) } function findParentWithOverlaySpread(el) { while (el && (el = el.parentElement)) { if (el === document.body || el.parentElement === null) continue; if (el.hasAttribute('x-spread') && el.getAttribute('x-spread').indexOf('overlay(') !== -1) { return el; } } } function freeFocusFromModalTrap(modal) { const dialogElement = modal.instance.$refs[modal.name]; isOverlayDisabled(dialogElement) || modal.instance.$nextTick(() => setSiblingsInert(dialogElement, false)); } 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)) { nextOnStack.instance.$nextTick(() => setSiblingsInert(nextDialogElement, true)); break; } } } function focusables(dialogElement) { const selector = 'a, button, 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) { window.setTimeout(() => { const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || focusables(dialogElement)[0] || null; focusElement && isInViewport(focusElement) && focusElement.focus(); }, duration + 1); } function determineTrigger($refs, dialog, trigger) { if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target && dialog.target.focus) { return dialog.target; } if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target && trigger.target.focus) { 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) { 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(() => setSiblingsInert(dialogElement, true)); 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() || {}; const name = modal.name; this.opened[name] = false; freeFocusFromModalTrap(modal) 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) { 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) } }; } }; } 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); })();</script><script> (function () { 'use strict'; const storageName = 'AmastyCookieGroups'; !!hyva.amStorage && hyva.amStorage.create(storageName, { /** * @type {{ * checked: boolean, * cookies: {description: string, lifetime: number|null, name: string, provider: string, type: string}[], * description: string, * groupId: string|number, * isEssential: boolean, * name: string * }[]} name */ groupData: [], cookiePolicy: undefined, lastUpdate: undefined, /** * @returns {string|number[]} */ getEssentialGroupIds: function () { return this.groupData.reduce(function (essentialGroupIds, group) { if (group.isEssential) { essentialGroupIds.push(group.groupId) } return essentialGroupIds; }, []); }, /** * @returns {string|number[]} */ getCheckedGroupIds: function () { return this.groupData.reduce(function (checkedGroupIds, group) { if (group.checked) { checkedGroupIds.push(group.groupId); } return checkedGroupIds; }, []); }, /** * @param {string} cookieName * @returns {boolean} */ isCookieEssential: function (cookieName) { const allEssentialCookies = this.getEssentialCookies(); return !!allEssentialCookies.find(cookie => cookie.name === cookieName); }, /** * @returns {array} */ getEssentialCookies: function () { return this.groupData .filter(group => group.isEssential) .map(group => group.cookies) .flat(); }, /** * @returns {boolean} */ hasGroupData: function () { return !!this.groupData.length; }, /** * @param {string} cookieName * @param {string} pattern * @returns {boolean} */ isEssentialByPattern: function (cookieName, pattern) { const essentialCookiePatterns = this.getEssentialCookiesPattern(pattern); return essentialCookiePatterns.some((pattern) => !!cookieName.match(this.getCookiePattern(pattern))); }, /** * @param {string} pattern * @return {Array} */ getEssentialCookiesPattern: function (pattern) { return this.getCookiesByPattern(pattern, this.getEssentialCookies()); }, /** * @param {string} pattern * @param {Array|undefined} cookies * @return {Array} */ getCookiesByPattern: function (pattern, cookies) { if (typeof cookie === 'undefined') { cookies = this.getAllCookies(); } return cookies .map((cookie) => typeof cookie === 'object' ? cookie.name : cookie.split('=')[0].trim()) .filter((cookie) => cookie.match(pattern) !== null); }, /** * @returns {array} */ getDisallowedCookies: function () { const disallowedCookie = decodeURIComponent(hyva.getCookie('amcookie_disallowed') ?? ''); if (!disallowedCookie) { return []; } return disallowedCookie.split(','); }, /** * @returns {string} */ getCookiePattern: function (pattern) { return `^${pattern.replaceAll('*', '.*')}$`; }, /** * @returns {array} */ getAllCookies: function () { return document.cookie.split(';'); }, /** * @param {boolean} setAcceptance * @returns {Promise} */ updateGroupData: function (setAcceptance = false) { const cookieFetchUrl = `${BASE_URL}amcookie/cookie/cookies`; return fetch(cookieFetchUrl, { method: "POST", headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest' }, body: new URLSearchParams({ allowed: hyva.getCookie('amcookie_allowed'), restriction: hyva.getCookie('amcookie_policy_restriction') }) }).then(response => { if (response.ok) { return response.json(); } return Promise.reject(`${response.status} ${response.statusText}`); }).then(data => { this.cookiePolicy = data.cookiePolicy ?? 'allowed'; this.lastUpdate = data.lastUpdate ?? 0; this.groupData = [...data.groupData]; hyva.setCookie('amcookie_policy_restriction', this.cookiePolicy, 10); if (setAcceptance) { amastyCookieManager.setLastCookieAcceptance(this.lastUpdate); } return data; }).catch(error => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: error } ]); }).finally(() => window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated'))); } }); })();</script><script> (function (amastyCookieManager) { 'use strict'; amastyCookieManager.pattern = '{(?<cookiePattern>.*)}'; amastyCookieManager.getAmastyCookieGroupStorage = function () { return hyva?.amStorage?.getStorage('AmastyCookieGroups') ?? {}; }; amastyCookieManager.deleteDisallowedCookie = function () { const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage(); const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? []; disallowedCookies.forEach((name) => { const pattern = name.match(this.pattern); if (!!pattern && !!amastyCookieGroupStorage) { const cookiePattern = amastyCookieGroupStorage.getCookiePattern(pattern.groups.cookiePattern) ?? ''; amastyCookieGroupStorage.getCookiesByPattern(cookiePattern).forEach((cookieName) => { this.deleteNotEssentialCookie(cookieName); }); } else { this.deleteNotEssentialCookie(name); } }); }; amastyCookieManager.isCookieAllowed = function (cookieName) { const allowedGroups = hyva.getCookie('amcookie_allowed'); const disallowedCookie = this.getAmastyCookieGroupStorage()?.getDisallowedCookies() ?? []; const isCookiePolicyAllowed = hyva.getCookie('amcookie_policy_restriction') === 'allowed'; const isCookieEssential = this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName); const isCookieEssentialByPattern = this.getAmastyCookieGroupStorage()?.isEssentialByPattern(cookieName, this.pattern); if (!isCookiePolicyAllowed || isCookieEssential || isCookieEssentialByPattern) { return true; } return !((!allowedGroups && !disallowedCookie) || this.isCookieDisallowed(cookieName)); }; amastyCookieManager.isCookieDisallowed = function (cookieName) { const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage(); const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? []; return disallowedCookies.some((cookie) => { const pattern = cookie.match(this.pattern); return !!pattern && !!cookieName.match(amastyCookieGroupStorage?.getCookiePattern(pattern.groups.cookiePattern)); }) || disallowedCookies.indexOf(cookieName) !== -1; }; amastyCookieManager.processManageableCookies = function () { let cookieScripts = document.querySelectorAll('script[data-amcookie-groupid][type="text/plain"]'); cookieScripts.forEach((elem) => { if (this.isChecked(elem.dataset['amcookie-groupid'])) { let elClone = elem.cloneNode(true).setAttribute('type', 'text/javascript'); elem.remove(); document.body.appendChild(elClone); } }); }; amastyCookieManager.deleteNotEssentialCookie = function (cookieName) { if (!this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName)) { hyva.setCookie(cookieName, '', -1, true); } }; amastyCookieManager.setLastCookieAcceptance = function (lastUpdate) { localStorage.setItem('am-last-cookie-acceptance', lastUpdate); }; window.addEventListener('amasty-cookie-group-updated', () => { amastyCookieManager.deleteDisallowedCookie(); }); window.addEventListener('private-content-loaded', () => { amastyCookieManager.getAmastyCookieGroupStorage()?.hasGroupData() && amastyCookieManager.deleteDisallowedCookie(); }); }(window.amastyCookieManager = window.amastyCookieManager || {}));</script><script> (function () { 'use strict'; window.addEventListener('cookiebar-action-accept', (event) => { const groups = event.detail; const url = `${BASE_URL}amcookie/cookie/savegroups`; const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; const body = new URLSearchParams({ form_key: hyva.getFormKey() }); groups.length && groups.map(groupId => body.append('groups[]', groupId)); fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}}) .then(response => { if (response.ok) { return response.json(); } return Promise.reject(`${response.status} ${response.statusText}`); }) .then(data => { if (data.success) { !!hyva.amStorage && hyva.amStorage.getStorage('AmastyCookieGroups').updateGroupData(true); } }) .catch(error => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: error } ]); }) .finally(() => { amastyCookieManager.processManageableCookies(); window.dispatchEvent(new CustomEvent('cookiebar-action-accept-finish')); window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated')); setTimeout(() => { window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }, 100); }); }); })();</script><script> (function () { 'use strict'; window.addEventListener('cookiebar-action-allow', () => { const url = `${BASE_URL}amcookie/cookie/allow`; const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; const body = new URLSearchParams({ form_key: hyva.getFormKey() }); fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}}) .then(response => { if (response.ok) { return response; } return Promise.reject(`${response.status} ${response.statusText}`); }) .then(() => { !!hyva.amStorage && hyva.amStorage.getStorage('AmastyCookieGroups').updateGroupData(true); }) .catch(error => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: error } ]); }) .finally(() => { amastyCookieManager.processManageableCookies(); window.dispatchEvent(new CustomEvent('cookiebar-action-allow-finish')); setTimeout(() => { window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }, 100); }); }); })();</script><script> (function () { 'use strict'; window.addEventListener('cookiebar-action-settings', () => { window.dispatchEvent(new Event('open-am-cookie-bar-settings')); }); })();</script><script> window.addEventListener('init-fancybox', () => { if (!!window.Fancybox) { return; } const script = document.createElement('script'); script.src = 'https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_AdvancedReviewHyva/vendor/fancybox/fancybox.min.js'; script.async = true; document.body.appendChild(script); script.onload = () => { window.dispatchEvent(new CustomEvent('fancyboxLoaded', {})); } const styles = document.createElement('link'); styles.rel = 'stylesheet'; styles.href = 'https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_AdvancedReviewHyva/vendor/fancybox/fancybox.min.css'; document.head.appendChild(styles); }, { once: true, passive: true }); window.addEventListener('fancyboxLoaded', () => { Fancybox.bind('[data-fancybox="gallery"]', { Thumbs : false }); });</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|null} */ 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 && label.config.move !== 1 && label.config.mode === 'prod') { newParent = document.querySelector(selectors.galleryImg)?.parentElement; } return newParent; }, /** * @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) { /* required for child position absolute */ !(label.parent.style.position === 'absolute') && (label.parent.style.position = 'relative'); !label.parent.style.width && label.parent.classList.add('w-fit-content'); !label.parent.style.marginLeft && label.parent.classList.add('ml-auto'); !label.parent.style.marginRight && label.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($event, tooltipNode) { const labelNode = $event.target; 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><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 ); }); } /** * We use approach from hyva.replaceDomElement method to replace labels and init components * * @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); const tmpScripts = doc.getElementsByTagName('script'); if (tmpScripts.length > 0) { const scripts = [...tmpScripts]; scripts.forEach(script => { let scriptNode = document.createElement('script'); scriptNode.innerHTML = script.innerHTML; document.head.appendChild(scriptNode); script.parentNode.removeChild(script); }); } 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' } 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) ? el.parentNode : 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; } }); }); })();</script><script> 'use strict'; (() => { function _calculateStrength({elementID, valid}) { const password = document.getElementById(elementID), emailElm = document.getElementById('email_address'); let displayScore; if (!password || !password.value) { displayScore = 0; } else { if (emailElm && password.value && emailElm.value && password.value.toLowerCase() === emailElm.value.toLowerCase()) { displayScore = 1; } else { const zxcvbnScore = zxcvbn(password.value).score; displayScore = valid && zxcvbnScore > 0 ? zxcvbnScore : 1; } } _displayStrength(displayScore); } function _displayStrength(displayScore) { let strengthLabel = '', className; switch (displayScore) { case 0: strengthLabel = "No\u0020Password"; className = 'password-none'; break; case 1: strengthLabel = "Weak"; className = 'password-weak'; break; case 2: strengthLabel = "Medium"; className = 'password-medium'; break; case 3: strengthLabel = "Strong"; className = 'password-strong'; break; case 4: strengthLabel = "Very\u0020Strong"; className = 'password-very-strong'; break; } const meterElm = document.getElementById('password-strength-meter-container'), meterLabelElm = document.getElementById('password-strength-meter-label'); if (meterElm) { meterElm.className = ''; meterElm.classList.add(className); meterLabelElm.textContent = strengthLabel; } } let loading = false; const callbacks = []; function loadZxcvbn(cb) { callbacks.push(cb); if (loading) return; loading = true; const script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'https\u003A\u002F\u002Fcdn.amasty.com\u002Fstatic\u002Fversion1739349122\u002Ffrontend\u002FAmasty\u002FAmTheme\u002Fen_US\u002Fjs\u002Fzxcvbn.min.js'; script.async = true; script.onload = () => callbacks.forEach(cb => cb()); document.head.appendChild(script); } window.addEventListener('password-validate', function (evt) { const meterElm = document.getElementById('password-strength-meter-container'), meterLabelElm = document.getElementById('password-strength-meter-label'); if (meterElm && meterLabelElm) { if (evt.detail && evt.detail.elementID) { const cb = () => _calculateStrength(evt.detail); window.zxcvbn ? cb() : loadZxcvbn(cb) } } }); document.addEventListener('DOMContentLoaded', () => { hyva && hyva.formValidation && hyva.formValidation.addRule('password-strength', function(value, options, field, context) { let counter = 0; const minCharacterSets = options.minCharacterSets !== undefined ? options.minCharacterSets : 1; if (value.match(/\d+/)) { counter++; } if (value.match(/[a-z]+/)) { counter++; } if (value.match(/[A-Z]+/)) { counter++; } if (value.match(/[^a-zA-Z0-9]+/)) { counter++; } queueMicrotask(() => { window.dispatchEvent(new CustomEvent('password-validate', { detail: { elementID: field.element.id || 'password', valid: field.state.valid }})); }); if (counter < minCharacterSets) { const missing = minCharacterSets - counter; return hyva.str('The\u0020password\u0020must\u0020include\u0020at\u0020least\u0020\u00251\u0020or\u0020more\u0020of\u003A\u0020uppercase\u0020\u0028A\u002DZ\u0029,\u0020lowercase\u0020\u0028a\u002Dz\u0029,\u0020number\u0020and\u0020symbol.', missing); } return true; }); }) })();</script><script> 'use strict'; function initAmastyCookieBar() { return { eventListeners: { ['@close-cookie-bar']() { this.hide('am-cookie-bar'); }, ['@open-cookie-bar']() { this.show('am-cookie-bar'); }, ['@amasty-cookie-group-updated.window']() { const lastUpdate = !!hyva.amStorage ? hyva.amStorage.getStorage('AmastyCookieGroups').lastUpdate : 0; if (this.isShowNotificationBar(this.firstShowProcess, lastUpdate)) { !this.opened['am-cookie-bar'] && this.show('am-cookie-bar'); } else { !!this.opened['am-cookie-bar'] && this.hide('am-cookie-bar'); } } }, firstShowProcess: '0', initBar: function () { window.isGdprCookieEnabled = true; !!hyva.amStorage && hyva.amStorage.getStorage('AmastyCookieGroups').updateGroupData(); }, /** * @param {string|number} firstShowProcess * @param {number} lastUpdate * @returns {boolean} */ isShowNotificationBar: function (firstShowProcess, lastUpdate) { return (this.isNeedFirstShow(firstShowProcess, lastUpdate) && !hyva.getCookie('amcookie_allowed') || this.isNeedShowOnUpdate(lastUpdate)); }, /** * @param {string|number} firstShowProcess * @param {number} lastUpdate * @returns {boolean} */ isNeedFirstShow: function (firstShowProcess, lastUpdate) { hyva.getBrowserStorage().setItem('amCookieBarFirstShowTime', lastUpdate); if (firstShowProcess === '0') { return true; } if (hyva.getBrowserStorage().getItem('amCookieBarFirstShow') !== '1') { hyva.getBrowserStorage().setItem('amCookieBarFirstShow', '1'); return true; } return false; }, /** * @param {number} lastUpdate * @returns {boolean} */ isNeedShowOnUpdate: function (lastUpdate) { if (!lastUpdate) { return false; } return this.isNeedShowAfterLastVisit(lastUpdate) || this.isNeedShowAfterLastAccept(lastUpdate); }, /** * @param {number} lastUpdate * @returns {boolean} */ isNeedShowAfterLastVisit: function (lastUpdate) { let needToShowAfterLastVisit = lastUpdate > hyva.getBrowserStorage().getItem('amCookieBarFirstShowTime'); if (needToShowAfterLastVisit) { hyva.getBrowserStorage().setItem('amCookieBarFirstShow', null); hyva.setCookie('amcookie_allowed', '', -1, true); } return needToShowAfterLastVisit; }, /** * @param {number} lastUpdate * @returns {boolean} */ isNeedShowAfterLastAccept: function (lastUpdate) { let needToShowAfterLastAccept = false; if (hyva.getBrowserStorage().getItem('am-last-cookie-acceptance')) { needToShowAfterLastAccept = lastUpdate > hyva.getBrowserStorage().getItem('am-last-cookie-acceptance'); } return needToShowAfterLastAccept; }, }; }</script><script> 'use strict'; function initCookieGroupInfo_67be1e2370b17() { return { group: null, eventListeners: { ['@popup-close-am-cookie-group-info.window']() { this.hide('popup-am-cookie-group-info'); }, ['@popup-open-am-cookie-group-info.window'](event) { this.group = event.detail; if (!!this.group) { /* If modal have big cookies list this can lead to trigger hide event in hyva.modal.eventListeners.click, so we should wait till this.group is reassigned */ this.$nextTick(() => this.show('popup-am-cookie-group-info')); } } } } }</script><script> 'use strict'; function initCookieBarSettings() { return { eventListeners: { ['@close-am-cookie-bar-settings.window']() { !!this.opened['am-cookie-bar-settings'] && this.hide('am-cookie-bar-settings'); }, ['@open-am-cookie-bar-settings.window']() { !this.opened['am-cookie-bar-settings'] && this.show('am-cookie-bar-settings'); }, ['@cookiebar-action-accept-finish.window']() { !!this.opened['am-cookie-bar-settings'] && this.hide('am-cookie-bar-settings'); } }, focusDoneButton: function () { this.$refs['ambar-settings-done']?.focus(); }, focusCloseButton: function () { this.$refs['ambar-settings-close']?.focus(); } } }</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"WebSite","url":"https:\/\/amasty.com\/","name":"Amasty","potentialAction":{"@type":"SearchAction","target":"https:\/\/amasty.com\/catalogsearch\/result\/?q={search_term_string}","query-input":"required name=search_term_string"}}</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Organization","url":"https:\/\/amasty.com\/","name":"Amasty","logo":"https:\/\/cdn.amasty.com\/static\/version1700640514\/frontend\/Amasty\/AmastyTheme\/en_US\/images\/logo.svg","description":"Amasty is a leading provider of feature-rich Magento extensions, robust e-commerce solutions and all-round e-commerce IT services. An official Adobe partner, Amasty has been continuously growing its vast catalog of 300+ powerful Magento extensions since 2009. Amasty\u2019s Improved Layered Navigation has been installed on over 15.3K stores, solidifying its position as a leader in the Magento market....","contactPoint":[{"@type":"ContactPoint","telephone":"+1-347-897-9078","contactType":"technical support"},{"@type":"ContactPoint","telephone":"+1-347-897-9078","contactType":"customer service"}],"address":{"addressCountry":"Cyprus","postalCode":"2407","addressRegion":"Egkomi","addressLocality":"Nicosia","streetAddress":"73 Metochiou"},"sameAs":["https:\/\/www.facebook.com\/Amasty.Ltd\/","https:\/\/twitter.com\/AmastyTeam","https:\/\/www.instagram.com\/amastypeople\/","https:\/\/www.youtube.com\/user\/AmastyTeam","https:\/\/www.linkedin.com\/company\/amasty","https:\/\/www.pinterest.com\/amastybusiness\/"]}</script><script type="text/x-magento-init"> { "nav.navigation": { "amMenu": {} }, "[data-amtheme-js='form-minisearch']": { "amSearch": {} }, "[data-amtheme-js='backtotop-wrap']": { "backTop": {} } }</script><script type="text/x-magento-init"> { ".products-grid.grid, .products-list.list": { "amsiteBehaviorProductItem": {} }, "[data-role=vertical-screenshot-link], .faq-screenshot-thumb, .amblog-content img.size-full": { "amsiteOpenImageFancybox": {} }, "[btn-fancybox-popup]": { "amsiteOpenHtmlFancybox": {} }, ".swiper-container:not(.lazy-swiper)": { "amsiteMainSwiper": {} }, "[data-role=vertical-screenshots]": { "amsiteVerticalSwiper": {} }, "*": { "amsiteFishText": {} } }</script><script type="text/x-magento-init"> { ".mgz-block-content [data-role=tocart-form], #product_addtocart_form, #ajax-product_addtocart_form": { "amAjaxCart": { "actionUrl": "https://amasty.com/amasty_jettheme/ajax/addToCart/", "classes":{ "addToCartButtonDisable": "disabled -show-spinner" } } } }</script><script> var amsiteGlobalPriceFormat = {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true};</script><script> 'use strict'; window.addEventListener('DOMContentLoaded', () => { (function() { hyva.formValidation.addRule('required', (value, options, field, context) => { const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element, msg = 'This\u0020is\u0020a\u0020required\u0020field'; 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; }) hyva.formValidation.addRule('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)) { return 'Please\u0020enter\u0020a\u0020valid\u0020email'; } return true; }) hyva.formValidation.addRule('minlength', (value, options, field, context) => { const n = Number(options) if (value.length > 0 && value.length < n) { return n === 1 ? hyva.strf('Please\u0020enter\u0020at\u0020least\u00201\u0020character.') : hyva.strf('This\u0020text\u0020length\u0020should\u0020be\u0020more\u0020than\u0020\u00250\u0020characters', options) } return true; }) hyva.formValidation.addRule('validate-not-only-special', (value, options, field, context) => { const test = /^[ \t[\]\\$&+,:;=?@#|'<>{}".^*()%!-]+$/.test(value); if (test) { return 'This\u0020field\u0020can\u0027t\u0020contain\u0020special\u0020characters\u0020only'; } return true; }) hyva.formValidation.addRule('validate-domain-url', (value, options, field, context) => { const test = value.length === 0 || /^((https?:\/\/)?(www\.)?((?!www\.)[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$)(:(\d+))?\/?/i.test(value); if (test) { return true; } return 'Please\u0020enter\u0020a\u0020valid\u0020domain.\u0020Ex.\u003A\u0020storename.com'; }) function createTextInputFrom(el) { const text = document.createElement('INPUT'); text.type = 'text'; text.value = el.value; return text; } })(); })</script><script> 'use strict'; (() => { document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); }); document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { const tabLink = tabHeader.querySelector('a'); const tabId = tabLink.getAttribute('href').replace('#', ''); tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); if (index === defaultActiveTab) { tab.setAttribute('x-data', `{ tab: '${tabId}' }`); } }); }); })();</script><script type="text/x-magento-init"> { "*": { "amsiteAsyncLoadCss": { "cssFileUrl": "https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/css/source/bundle-module/cms-pages/bundle-async-load.min.css" } } }</script><script> const AmAuthPopupReloadContent = function () { const customerMenuSelector = '\u0023customer\u002Dmenu\u0020\u007E\u0020nav'; return { contentUpdaters: [], initContentUpdaters() { window.addEventListener('amsl-register-content-updater', (event) => { event.stopPropagation(); if (typeof event.detail === 'function') { this.registerContentUpdater(event.detail); } }, true) }, reloadContent() { return Promise.all([ this.reloadHeader(), ...this.contentUpdaters.map(updater => updater()) ]).then(this.updateFormKey); }, registerContentUpdater(updater) { this.contentUpdaters.push(updater); }, async reloadHeader() { const response = await fetch( `${BASE_URL}amsociallogin_hyva\u002Fheader\u002Fupdate?isAjax=1`, { method: 'GET', headers: { 'Content-type': 'application/json' } } ); const result = await response.json(); const {customer_menu_html: customerMenuHtml} = result; const container = document.createElement('div'); container.innerHTML = customerMenuHtml; const currentMenu = document.querySelector(customerMenuSelector); const newMenu = container.querySelector(customerMenuSelector); if (currentMenu && newMenu) { currentMenu.replaceWith(newMenu); } }, updateFormKey() { const formKeyInputs = document.querySelectorAll('input[name="form_key"]'); formKeyInputs.forEach(input => input.value = hyva.getFormKey()); } } }</script><script> const AmAuthPopupRedirect = function () { const redirectTimeout = 4000; const redirectUrl = 'https://amasty.com/customer/account/'; return { processRedirect(forceRedirectUrl) { if (forceRedirectUrl) { setTimeout(() => { this.resetSessionCookie(); window.location.assign(forceRedirectUrl); }, redirectTimeout); return; } setTimeout(() => { this.resetSessionCookie(); window.location.assign(this._getRedirectUrl()); }, redirectTimeout); }, _getRedirectUrl() { const browserStorage = hyva.getBrowserStorage(); if (browserStorage) { const url = browserStorage.getItem('data_social_login_redirect') || redirectUrl; browserStorage.removeItem('data_social_login_redirect'); return url; } }, reloadCustomerData() { this.resetSessionCookie(); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); }, resetSessionCookie() { hyva.setCookie('mage-cache-sessid', '', -1, true); }, reloadPage() { setTimeout(() => { this.resetSessionCookie(); window.location.reload(true) }, redirectTimeout) }, reloadViaAjax() { window.addEventListener('private-content-loaded', () => { this.reloadContent().then(() => { window.dispatchEvent( new CustomEvent('amsl-content-updated') ); }).catch( (error) => { console.error(error); this.reloadPage(); } ); }, {once: true}); this.reloadCustomerData(); window.dispatchEvent( new CustomEvent('amsl-popup-ajax-login-success') ); } } }</script><script> const AmAuthPopupNotification = function () { const modalName = 'amsl\u002Dpopup\u002Dnotification'; return { ...AmAuthPopupModal(modalName), notification: '', initialize() { this.initModalSettings(); }, showNotification(messages) { if (!messages) { return; } this.notification = Array.isArray(messages) ? messages.join('<br>') : messages; window.dispatchEvent( new CustomEvent('amsl-hide-popup') ); this.show(modalName); } } }</script><script> const AmAuthPopupModal = function (modalName) { const canCloseByOverlayClick = true; return { ...hyva.modal(), animationDuration: 500, initModalSettings() { if (!canCloseByOverlayClick) { this.restrictOverlayClick(); } }, restrictOverlayClick() { document.addEventListener('click', (event) => { const modal = this.$refs[modalName]; const isVisible = this.opened[modalName]; if (isVisible && !modal.contains(event.target) && !modal.hasAttribute('x-no-overlay')) { event.stopPropagation(); } }, {capture: true}); } } }</script><script> function initCustomerLoginForm() { return { errors: 0, customer_form_login_popup_showPassword: false, displayErrorMessage: false, errorMessages: [], setErrorMessages(messages) { this.errorMessages = [messages] this.displayErrorMessage = this.errorMessages.length }, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#customer-login-form'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); } } }</script><script> function AmSocialLogin() { return { socialErrorMessage: '', isPopupEnabled: '1', initializeSocialLogin() { this.initContentUpdaters(); }, socialLoginClick(event) { if (this.messageEventListener) { window.removeEventListener('message', this.messageEventListener); } this.messageEventListener = this.onMessageEvent.bind(this); window.addEventListener('message', this.messageEventListener); if (this.isPopupEnabled) { window.open( event.currentTarget.href + '&isAjax=true', event.currentTarget.title, this.getPopupParams() ); } else { window.location.assign(event.currentTarget.href); } event.stopPropagation(); event.preventDefault(); return false; }, onSocialResponse(data) { const isSuccessfulResult = data.result === 1; if (isSuccessfulResult) { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: data.messages } ) ); if (data.redirect_data && data.redirect_data.url) { this.processRedirect(data.redirect_data.url); } else { this.processRedirect(); } } else { this.socialErrorMessage = data.messages.pop(); setTimeout(() => { this.socialErrorMessage = ''; }, 5000); if (data?.redirect_data?.redirectWithError) { this.processRedirect(); } } }, onMessageEvent(event) { if (event.data['redirect_data']) { this.onSocialResponse(event.data); } }, getPopupParams(w, h, l, t) { let screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft, screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop, outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth, outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22), width = w ? w : 500, height = h ? h : 420, left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10), top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10); return ( 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top ); }, ...AmAuthPopupRedirect(), ...AmAuthPopupReloadContent() } }</script><script> function initForm() { return { errors: 0, customer_form_register_popup_showPassword: false, customer_form_register_popup_showPasswordConfirm: false, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#accountcreate'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); }, } }</script><script> function AmSocialLogin() { return { socialErrorMessage: '', isPopupEnabled: '1', initializeSocialLogin() { this.initContentUpdaters(); }, socialLoginClick(event) { if (this.messageEventListener) { window.removeEventListener('message', this.messageEventListener); } this.messageEventListener = this.onMessageEvent.bind(this); window.addEventListener('message', this.messageEventListener); if (this.isPopupEnabled) { window.open( event.currentTarget.href + '&isAjax=true', event.currentTarget.title, this.getPopupParams() ); } else { window.location.assign(event.currentTarget.href); } event.stopPropagation(); event.preventDefault(); return false; }, onSocialResponse(data) { const isSuccessfulResult = data.result === 1; if (isSuccessfulResult) { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: data.messages } ) ); if (data.redirect_data && data.redirect_data.url) { this.processRedirect(data.redirect_data.url); } else { this.processRedirect(); } } else { this.socialErrorMessage = data.messages.pop(); setTimeout(() => { this.socialErrorMessage = ''; }, 5000); if (data?.redirect_data?.redirectWithError) { this.processRedirect(); } } }, onMessageEvent(event) { if (event.data['redirect_data']) { this.onSocialResponse(event.data); } }, getPopupParams(w, h, l, t) { let screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft, screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop, outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth, outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22), width = w ? w : 500, height = h ? h : 420, left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10), top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10); return ( 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top ); }, ...AmAuthPopupRedirect(), ...AmAuthPopupReloadContent() } }</script><script> function initPasswordForm() { return { errors: 0, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#user_forgotpassword'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); } } }</script><script> const AmAuthPopup = function () { const TAB_ID_LOGIN = 'amsl\u002Dlogin'; const TAB_ID_REGISTER = 'amsl\u002Dregister'; const TAB_ID_FORGOT = 'amsl\u002Dforgot'; const IS_KNOWN_CUSTOMER = false; const modalName = 'social\u002Dlogin\u002Dpopup'; let componentInitialized = false; const reCaptchaStatusBySection = { login: '', register: '', forgotPassword: '', } const reCaptchaStatusFor = section => reCaptchaStatusBySection[section]; return { isGuestCheckoutAllowed: true, isAccountForgotPasswordPage: false, activeTab: TAB_ID_LOGIN, tabs: [TAB_ID_LOGIN, TAB_ID_REGISTER], socialIconsExpansionState: { [TAB_ID_LOGIN]: false, [TAB_ID_REGISTER]: false }, isLoading: false, modalName, isLogged: false, socialIconsExpanded: false, initializeAuthPopup(privateData) { this.browserStorage = hyva.getBrowserStorage(); if (privateData?.data?.customer?.firstname && !IS_KNOWN_CUSTOMER) { componentInitialized = false; this.reloadExpiredCustomerData(); return; } if (componentInitialized) { return; } componentInitialized = true; const origShow = this.show; const origHide = this.hide; this.show = (name, event, activeTabName) => { origShow.call(this, name, event); this.activeTab = activeTabName || TAB_ID_LOGIN; } this.hide = (...args) => { origHide.call(this, args); setTimeout(() => { this.clearForms(); this.clearFormMessages(); }, this.animationDuration + 1) } this.initModalSettings(); this.bindLinksEvents(privateData); this.initContentUpdaters(); if (!this.isGuestCheckoutAllowed) { this.bindAuthenticationEvent(); } }, _setCustomRedirectUrl(elem) { const redirectUrl = elem.getAttribute('data-social-login-redirect'); if (this.browserStorage) { this.browserStorage.removeItem('data_social_login_redirect'); } if (redirectUrl && this.browserStorage) { this.browserStorage.setItem('data_social_login_redirect', redirectUrl); } }, bindAuthenticationEvent() { window.addEventListener('toggle-authentication', (event) => { event.stopPropagation(); if (!this.isLoggedIn()) { this.show( this.modalName, event ); } else { window.location.assign(event.detail.url) } }, true) }, bindLinksEvents(privateData) { if (!this.isLoggedIn(privateData)) { this.bindOpeningEvents(); this.bindForgotLinkEvent(); requestAnimationFrame(() => { this.processForms(); }) } else { this.initLogout(); } }, bindOpeningEvents() { const accountLinks = document.querySelectorAll(`nav.am-authorization-link a[href^="${BASE_URL}customer/account"], .amsite-changelog-tab a[href^="${BASE_URL}customer/account"]`) || []; accountLinks.forEach(elem => { const isRegisterLink = /create\/?(\?.+)?(\#.+)?$/.test(elem.href); elem.removeAttribute('onclick'); elem.setAttribute('aria-haspopup', 'dialog'); elem.addEventListener('click', (event) => { this._setCustomRedirectUrl(elem); event.preventDefault(); this.show( this.modalName, event, isRegisterLink ? TAB_ID_REGISTER : TAB_ID_LOGIN ); }) }); if (reCaptchaStatusFor('register')) { this.moveRecaptchaElement('.recaptcha-create-wrapper'); } if (reCaptchaStatusFor('login')) { this.moveRecaptchaElement('.recaptcha-login-wrapper'); } }, bindForgotLinkEvent() { const modalContainer = this.$el || this.$root; const forgotLinks = modalContainer.querySelectorAll( `a[href^="${BASE_URL}customer/account/forgotpassword"]` ) || []; forgotLinks.forEach((element) => { element.addEventListener('click', (event) => { event.preventDefault(); element.setAttribute('aria-haspopup', 'dialog'); this.activeTab = TAB_ID_FORGOT; }) }) if (reCaptchaStatusFor('forgotPassword') && !this.isAccountForgotPasswordPage) { this.moveRecaptchaElement('.recaptcha-forgot-wrapper'); } }, isLoggedIn(privateData) { try { privateData = privateData?.data || JSON.parse(hyva.getBrowserStorage()['mage-cache-storage']); return this.isLogged = !!(privateData?.customer?.firstname); } catch { } return this.isLogged = false; }, showOnExternalEvent(event) { const eventData = event.detail || {}; const message = eventData?.message; const tabName = eventData?.tabName || TAB_ID_LOGIN; this.show(this.modalName, event, tabName); if (message) { this.setFormMessages(tabName, [message]); } }, canShowAllSocialIcons() { return this.socialIconsExpansionState[this.activeTab]; }, showAllSocialIcons() { this.socialIconsExpanded = true; this.socialIconsExpansionState[this.activeTab] = true; }, setLoading(isLoading) { const formButtons = this.$refs[this.modalName].querySelectorAll('[type="submit"]'); formButtons.forEach(button => { if (isLoading) { button.setAttribute('disabled', 'disabled') } else { button.removeAttribute('disabled'); } }) this.isLoading = isLoading; }, reloadExpiredCustomerData() { const sections = ['mage-cache-storage', 'private_content_version', 'mage-cache-timeout']; sections.forEach(section => localStorage.removeItem(section)); hyva.setCookie('mage-cache-sessid', '', -1); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); }, moveRecaptchaElement(element) { const captchaElement = document.querySelector(element); if (!captchaElement) { return; } const container = captchaElement.closest('.amsl-form').querySelector('.actions-toolbar'); container.prepend(captchaElement); }, onKeypress(event) { const activeTabIndex = this.tabs.indexOf(this.activeTab); if (activeTabIndex < 0 || event.code === 'Tab') { return; } switch (event.code) { case 'Enter': case 'Space': this.activeTab = event.target.id.replace('tab-', ''); break; case 'ArrowRight': this.activeTab = this.tabs[(activeTabIndex + 1) % this.tabs.length] break; case 'ArrowLeft': this.activeTab = this.tabs[(activeTabIndex + this.tabs.length - 1) % this.tabs.length] break; case 'End': this.activeTab = this.tabs[this.tabs.length - 1] break; case 'Home': this.activeTab = this.tabs[0] break; } document.getElementById('tab-' + this.activeTab).focus(); }, ...AmAuthPopupModal(modalName), ...AmAuthPopupForms(), ...AmAuthPopupRedirect(), ...AmAuthPopupReloadContent(), ...AmAuthPopupLogout(), ...(typeof AmSocialLogin === 'function' ? AmSocialLogin() : {}) } }</script><script> (function () { const resetPasswordForms = document.querySelectorAll('form[action*="/forgotpasswordpost"]'); resetPasswordForms.forEach(form => { form.classList.add('form','password', 'forget'); }); })(); const AmAuthPopupForms = function () { const TAB_ID_LOGIN = 'amsl\u002Dlogin'; const TAB_ID_REGISTER = 'amsl\u002Dregister'; const TAB_ID_FORGOT = 'amsl\u002Dforgot'; const formsConfig = JSON.parse(`\u007B\u0022amsl\u002Dlogin\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dlogin\u0022,\u0022formId\u0022\u003A\u0022customer\u002Dlogin\u002Dform\u0022,\u0022successMessage\u0022\u003A\u0022You\u0020have\u0020successfully\u0020logged\u0020in\u0022,\u0022submitUrlReplacement\u0022\u003A\u0022amsociallogin\u005C\u002Faccount\u0022\u007D,\u0022amsl\u002Dregister\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dregister\u0022,\u0022formId\u0022\u003A\u0022accountcreate\u0022,\u0022successMessage\u0022\u003A\u0022Thank\u0020you\u0020for\u0020registering\u0020with\u0020us\u0022,\u0022submitUrlReplacement\u0022\u003A\u0022amsociallogin\u005C\u002Faccount\u0022\u007D,\u0022amsl\u002Dforgot\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dforgot\u0022,\u0022formId\u0022\u003A\u0022user_forgotpassword\u0022,\u0022customSubmitUrl\u0022\u003A\u0022\u005C\u002Fcustomer\u005C\u002Faccount\u005C\u002Fforgotpasswordpost\u0022\u007D\u007D`); return { formMessages: new Map(), processForms() { Object.values(formsConfig).forEach((formOptions) => { this.processForm(formOptions); }) }, processForm(formOptions) { const { formId } = formOptions; const formElement = document.querySelector(`#social-login-popup #${formId}`); if (formElement) { this.bindFormSubmit(formElement, formOptions); } }, bindFormSubmit(formElement, formOptions) { const { formType, successMessage, submitUrlReplacement, customSubmitUrl } = formOptions; let submitUrl = customSubmitUrl || formElement.action; if (submitUrlReplacement) { submitUrl = submitUrl.replace('customer/account', submitUrlReplacement); } formElement.submit = () => { this.clearFormMessages(); this.setLoading(true); this.browserStorage = hyva.getBrowserStorage(); this.formAjaxSubmit( formElement, submitUrl ).then((result) => { if (result.errors) { this.setFormMessages(formType, result.errors); return; } const notification = result.success || successMessage; this.hide(this.modalName); if (notification) { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: notification } ) ); } if (!submitUrl.includes('forgotpasswordpost')) { this.processRedirect(); } else { setTimeout(() => { document.querySelector('[x-data="AmAuthPopupNotification()"] > .am-overlay-popup').style.display = 'none'; }, 4000) } }).finally(() => { this.setLoading(false); }) } }, async formAjaxSubmit(form, url) { let errors = null; let success = null; try { const response = await fetch(url, { method: 'POST', body: new FormData(form) }) const messages = this.extractMageMessages(); const errorMessages = messages.filter(({type}) => type === 'error'); const successMessages = messages.filter(({type}) => type === 'success'); if (errorMessages.length) { errors = errorMessages.map(({text}) => text); } if (successMessages.length) { success = successMessages.pop().text || ''; } if (errors && Array.isArray(errors) && this.detectSpecialBehaviour(response, errors)) { errors = null; } } catch (error) { console.error(error); errors = ['Sorry,\u0020something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.']; } return { errors, success }; }, extractMageMessages() { const messagesCookie = hyva.getCookie('mage-messages'); const messages = messagesCookie ? JSON.parse(decodeURIComponent(messagesCookie)) : []; hyva.setCookie('mage-messages','', -1, true); return messages; }, clearFormMessages() { this.formMessages = new Map(); }, setFormMessages(formType, messages) { const formMessages = new Map(this.formMessages); formMessages.set(formType, messages); this.formMessages = formMessages; }, clearForms() { const forms = this.$refs[this.modalName].querySelectorAll('form') || []; forms.forEach((form) => form.reset()); }, detectSpecialBehaviour(response, errors) { const errorPattern = 'You have an active'; const ulrPattern = 'amasty_recurring/customer/subscriptions/'; const cookieLifeTime = 31536000; if (errors[0].includes(errorPattern) && response.url.includes(ulrPattern)) { this.browserStorage.setItem('data_social_login_redirect', response.url); window.hyva.setCookie('mage-messages', `[{"type":"error","text":"${errors[0]}"}]`, cookieLifeTime, true); return true; } return false; } } }</script><script> const AmAuthPopupLogout = function () { return { initLogout() { const logoutLinks = document.querySelectorAll(`a[href*="customer/account/logout"]`) || []; logoutLinks.forEach(elem => { elem.addEventListener('click', (event) => { event.preventDefault(); this.sendLogOut() }) }) }, sendLogOut() { fetch(BASE_URL + "customer/account/logout", { method: 'GET', credentials: "include" }).then(response => { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: 'You\u0020have\u0020signed\u0020out\u0020and\u0020will\u0020go\u0020to\u0020our\u0020homepage\u0020in\u00205\u0020seconds' } ) ); this.processRedirect(this.isInAccountSection() ? BASE_URL : ''); }) .catch(error => { console.error(error); this.processRedirect(); }) }, isInAccountSection() { return document.querySelector('body').classList.contains('account'); } } }</script><script> (function () { 'use strict'; /** * Config to determine which element is responsible for the form submission * * @type {[{elementSelector: undefined|string, submitAttribute: string}]} */ const formWrapperConfig = [{"elementSelector":null,"submitAttribute":"submit"},{"elementSelector":"[type=\"submit\"]","submitAttribute":"click"}]; const initWrapFormSubmit = function () { document.addEventListener("DOMContentLoaded", function () { wrapFormSubmit(window.amRecaptchaModel?.formsToProtect || ''); }); }; /** * Replace protected forms submit with amRecaptchaModel.execute($event) method. * Call original submit on amrecaptcha-callback event after successful captcha validation. * * @return {void} */ const wrapFormSubmit = function (formsSelector) { if (formsSelector.length === 0) { return; } document.querySelectorAll(formsSelector)?.forEach(formElement => { if (!formElement) { return; } const { elementToWrap, attributeNameToWrap } = resolveElementWrapping(formElement); if (!elementToWrap || !attributeNameToWrap) { return; } setElementAttributes(formElement, elementToWrap, attributeNameToWrap); }); }; /** * Call wrapFormSubmit on event to add form to amRecaptchaModel protection - for forms which are created dynamically */ document.addEventListener("add-form-to-amrecaptcha-protection", (event) => { wrapFormSubmit(event.detail); }); /** * Find submit event and DOM element that has this event using formWrapperConfig. * * @param {HTMLElement} formElement * @return {{elementToWrap: undefined|string, attributeNameToWrap: undefined|string}} */ const resolveElementWrapping = function (formElement) { let result = { elementToWrap: undefined, attributeNameToWrap: undefined }; formWrapperConfig.forEach(({ elementSelector, submitAttribute }) => { const elementToWrap = !!elementSelector ? formElement.querySelector(elementSelector) : formElement; if (!elementToWrap) { return; } const attributeNameToWrap = elementToWrap.getAttributeNames().find( (elementAttribute) => { /** @type {string[]} */ const submitAttributeVariations = ['@', 'x-on:'].map(variation => variation + submitAttribute); return submitAttributeVariations.some( (submitAttributeVariation) => elementAttribute.startsWith(submitAttributeVariation) ) } ); if (!attributeNameToWrap) { return; } result.elementToWrap = elementToWrap; result.attributeNameToWrap = attributeNameToWrap; }); return result; } /** * Set attribute to wrap original submit, add eventListeners for captcha callbacks * * @param {HTMLElement} formElement * @param {HTMLElement} elementToWrap * @param {string} attributeNameToWrap */ const setElementAttributes = function (formElement, elementToWrap, attributeNameToWrap) { const originalSubmit = elementToWrap.getAttribute(attributeNameToWrap); elementToWrap.removeAttribute(attributeNameToWrap); /** * To properly set submit attribute - we need to replace '@' with 'x-on:' * and add preventDefault behaviour */ elementToWrap.setAttribute( attributeNameToWrap.replace(/^@/, 'x-on:').replace(/.prevent$/, '') + '.prevent', 'amRecaptchaModel.execute($event)' ); elementToWrap.setAttribute( 'x-on:amrecaptcha-executable-callback', originalSubmit ); } initWrapFormSubmit(); })(window.amRecaptchaModel = window.amRecaptchaModel || {});</script><script>window.amlazy = function() {if (typeof window.amlazycallback !== "undefined") {setTimeout(window.amlazycallback, 500);setTimeout(window.amlazycallback, 1500);}}</script><script> var yall=function(){"use strict";return function(e){var t=(e=e||{}).lazyClass||"lazy",n=e.lazyBackgroundClass||"lazy-bg",o="idleLoadTimeout"in e?e.idleLoadTimeout:200,r=e.observeChanges||!1,i=e.events||{},a=e.noPolyfill||!1,s=window,c="requestIdleCallback",l="IntersectionObserver",u=l in s&&l+"Entry"in s,d=/baidu|(?:google|bing|yandex|duckduck)bot/i.test(navigator.userAgent),v=["srcset","src","poster"],f=[],b=function(e,o){return f.slice.call((o||document).querySelectorAll(e||"img[data-src],video."+t+",iframe."+t+", ."+n))},g=function(t){var o=t.parentNode;"PICTURE"==o.nodeName&&h(b("source",o),m),"VIDEO"==t.nodeName&&h(b("source",t),m),m(t);var r=t.classList;r.contains(n)&&(r.remove(n),r.add(e.lazyBackgroundLoaded||"lazy-bg-loaded"))},y=function(e){for(var t in i)e.addEventListener(t,i[t].listener||i[t],i[t].options||void 0)},m=function(e){for(var n in v)if(v[n]in e.dataset){e.setAttribute(v[n],e.dataset[v[n]]);e.classList.add("lazy-loaded");var o=e.parentNode;"SOURCE"===e.nodeName&&o.autoplay&&(o.load(),/Trident/.test(navigator.userAgent)&&o.play(),o.classList.remove(t)),e.classList.remove(t)}},h=function(e,t){for(var n=0;n<e.length;n++)s[l]&&t instanceof s[l]?t.observe(e[n]):t(e[n])},p=b();if(h(p,y),u&&!d){var L=new s[l](function(e){h(e,function(e){if(e.isIntersecting||e.intersectionRatio){var t=e.target;c in s&&o?s[c](function(){g(t)},{timeout:o}):g(t),L.unobserve(t),(p=p.filter(function(e){return e!=t})).length||r||L.disconnect()}})},{rootMargin:("threshold"in e?e.threshold:200)+"px 0%"});h(p,L),r&&h(b(e.observeRootSelector||"body"),function(t){new MutationObserver(function(){h(b(),function(e){p.indexOf(e)<0&&(p.push(e),y(e),u&&!d?L.observe(e):(a||d)&&h(p,g))})}).observe(t,e.mutationObserverOptions||{childList:!0,subtree:!0})})}else(a||d)&&h(p,g)}}(); window.amlazycallback = function () { yall() }; yall({ events: { load: function (event) { if (!event.target.classList.contains("lazy") && event.target.nodeName == "IMG") { event.target.classList.add("lazy-loaded"); } } } }); </script><noscript id="deferred-css"><link rel="stylesheet" type="text/css" media="print" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/css/print.min.css" /><link rel="stylesheet" type="text/css" media="all" href="https://cdn.amasty.com/static/version1739349122/_cache/merged/fonts_6d62023d5670ec0df992e073445b8011.min.css" /></noscript><script>var loadDeferredStyles = function() {var addStylesNode = document.getElementById("deferred-css");var replacement = document.createElement("div");replacement.innerHTML = addStylesNode.textContent;document.body.appendChild(replacement);addStylesNode.parentElement.removeChild(addStylesNode);};window.addEventListener('load', loadDeferredStyles);</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10