CINXE.COM

Magento 2 Performance & Speed Optimization Service | Very Slow Site Tuning | Make Magento 2 Faster | Improve Site Speed Performance Optimization Benchmark | Speed Up Magento 2 Website

<!doctype html><html lang="en"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# product: http://ogp.me/ns/product#"> <meta charset="utf-8"/> <meta name="title" content="Magento 2 Performance &amp; Speed Optimization Service | Very Slow Site Tuning | Make Magento 2 Faster | Improve Site Speed Performance Optimization Benchmark | Speed Up Magento 2 Website"/> <meta name="description" content="Enhance Magento 2 performance with our optimization services. Speed up website, eliminate slow loading &amp; improve backend. Get faster results now!"/> <meta name="robots" content="INDEX,FOLLOW"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="format-detection" content="telephone=no"/> <title>Magento 2 Performance &amp; Speed Optimization Service | Very Slow Site Tuning | Make Magento 2 Faster | Improve Site Speed Performance Optimization Benchmark | Speed Up Magento 2 Website</title> <link rel="stylesheet" type="text/css" media="all" href="https://cdn.amasty.com/static/version1740558685/_cache/merged/ea0ed758deb0843f830f0e98146097db.min.css" /> <link rel="stylesheet" type="text/css" media="screen and (min-width: 320px)" href="https://cdn.amasty.com/static/version1740558685/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/version1740558685/frontend/Amasty/AmTheme/en_US/css/source/bundle-module/product-page/product-page-bundle-l.min.css" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1740558685/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/version1740558685/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/version1740558685/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/version1740558685/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> <meta property="og:type" content="product" /><meta property="og:title" content="Magento&#x20;Optimization&#x20;Service" /><meta property="og:image" content="https://cdn.amasty.com/media/catalog/product/cache/c69fad5054ac8a3eddb920f81914f823/m/a/magento-optimization-service_63f5d17699021.png" /><meta property="og:description" content="Boost&#x20;your&#x20;store&#x20;performance&#x20;with&#x20;a&#x20;proper&#x20;Magento&#x20;Optimization&#x20;Service.&#x20;Don&#x2019;t&#x20;spend&#x20;your&#x20;time&#x20;and&#x20;efforts,&#x20;just&#x20;enhance&#x20;users&#x2019;&#x20;experience&#x20;and&#x20;boost&#x20;conversion&#x20;rates." /><meta property="og:url" content="https://amasty.com/magento-optimization-service.html" /> <meta property="product:price:amount" content="9999"/> <meta property="product:price:currency" content="USD"/> <style>.ng0gx7w-s{padding:0!important}.bje13wx-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%}.c2hnwm3-s{padding-top:120px !important}.oun6rh5-s{margin-bottom:10px !important}@media (max-width:768px){.oun6rh5-s{margin-right:15px !important;margin-left:15px !important}}.oauedu7-s{min-height:36px !important}.oauedu7-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/hyva_theme_development/hyva-tech-partner-badge.png');background-size:contain;background-position:left bottom}.pcar8jo-s{min-height:36px !important}.pcar8jo-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/hyva_theme_development/google-partner-badge.png');background-size:contain;background-position:left bottom}.gd4tnii-s{min-height:36px !important}.gd4tnii-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/hyva_theme_development/google-channel-partner-badge.png');background-size:contain;background-position:left bottom}.k45os0l-s{min-height:36px !important}.k45os0l-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/hyva_theme_development/adobe-certified-expert-badge.png');background-size:contain;background-position:left bottom}.pl7y0wl-s{min-height:36px !important}.pl7y0wl-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/hyva_theme_development/adobe-tecnology-partner-silver-badge.png');background-size:contain;background-position:left bottom}.oauedu7,.pcar8jo,.gd4tnii,.k45os0l,.pl7y0wl{border:10px solid transparent}.oauedu7>.mgz-element-inner,.pcar8jo>.mgz-element-inner,.gd4tnii>.mgz-element-inner,.k45os0l>.mgz-element-inner,.pl7y0wl>.mgz-element-inner{padding:0;margin:0}.trmlnlh-s{text-align:left;margin-top:40px !important}@media (max-width:575px){.trmlnlh-s{margin-right:25px !important;margin-left:25px !important}}.rnyqehg-s{padding-left:10px !important}.rokd3ve-s{padding-top:30px !important}.fn3slto-s{padding-top:90px !important;padding-right:30px !important;padding-left:105px !important;margin-top:32px !important}@media (max-width:991px){.fn3slto-s{padding-right:10px !important;padding-left:10px !important}}.gwc6lrl-s{text-align:center}.mgz-element.gwc6lrl .image-content{width:100%;text-align:center}.mgz-element.gwc6lrl .image-title{font-size:16px}.dep8ev1-s{min-height:250px !important;margin-left:0 !important;border-radius:8px!important}.dep8ev1-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/magento_optimization_service/card-benefits-background.png');background-size:auto;background-position:center top}.p9hel41-s{text-align:center}.mgz-element.p9hel41 .image-content{width:100%;text-align:center}.mgz-element.p9hel41 .image-title{font-size:16px}.s6lb2xm-s{min-height:205px !important;border-radius:8px!important}.s6lb2xm-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/magento_optimization_service/card-benefits-background.png');background-size:auto;background-position:center top}.ijicb15-s{text-align:center}.mgz-element.ijicb15 .image-content{width:100%;text-align:center}.mgz-element.ijicb15 .image-title{font-size:16px}.gaq23r5-s{min-height:205px !important;border-radius:8px!important}.gaq23r5-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/magento_optimization_service/card-benefits-background.png');background-size:auto;background-position:center top}.khmg5a1-s{margin-left:-20px !important}.dep8ev1,.s6lb2xm,.gaq23r5{border:20px solid transparent}.dep8ev1>.mgz-element-inner,.s6lb2xm>.mgz-element-inner,.gaq23r5>.mgz-element-inner{padding:0;margin:0}.mcjc49j-s{padding-top:80px !important;margin-left:0 !important}.uwypn81-s{min-height:845px !important;padding-bottom:100px !important;margin-top:0 !important;background-color:#3d0d65 !important}.uwypn81-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/magento_optimization_service/magento-optimization-service-hat-background.png');background-size:cover;background-position:center top}@media (max-width:1199px){.uwypn81-s{padding-left:20px !important}}@media (max-width:991px){.uwypn81-s{padding-left:20px !important}}.rnyqehg>.mgz-element-inner,.l00xotv>.mgz-element-inner,.fn3slto>.mgz-element-inner,.mcjc49j>.mgz-element-inner{padding:0}.ybqemux-s{margin-bottom:30px !important}@media (max-width:768px){.ybqemux-s{margin-right:15px !important;margin-left:15px !important}}.mfv35cy-s{text-align:left}@media (max-width:575px){.mfv35cy-s{margin-right:25px !important;margin-left:25px !important}}.uc39xii-s{padding-left:10px !important}.ik2kdp3-s{text-align:center}.mgz-element.ik2kdp3 .image-content{width:100%;text-align:center}.mgz-element.ik2kdp3 .image-title{font-size:16px}.fumgot6-s{padding-right:20px !important;padding-bottom:20px !important;padding-left:20px !important}.wietu92-s{min-height:250px !important;margin-left:0 !important;border-radius:8px!important}.wietu92-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/magento_optimization_service/card-benefits-background.png');background-size:auto;background-position:center top}.o0pv3sa-s{text-align:center}.mgz-element.o0pv3sa .image-content{width:100%;text-align:center}.mgz-element.o0pv3sa .image-title{font-size:16px}.cdmxtn5-s{min-height:205px !important;border-radius:8px!important}.cdmxtn5-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/magento_optimization_service/card-benefits-background.png');background-size:auto;background-position:center top}.iavnoex-s{text-align:center}.mgz-element.iavnoex .image-content{width:100%;text-align:center}.mgz-element.iavnoex .image-title{font-size:16px}.un8w5i5-s{min-height:205px !important;border-radius:8px!important}.un8w5i5-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/magento_optimization_service/card-benefits-background.png');background-size:auto;background-position:center top}.av3w81x-s{text-align:center}.wietu92,.cdmxtn5,.un8w5i5{border:20px solid transparent}.wietu92>.mgz-element-inner,.cdmxtn5>.mgz-element-inner,.un8w5i5>.mgz-element-inner{padding:0;margin:0}.ti9ke72-s{padding-top:80px !important;margin-left:0 !important}.eorguwa-s{padding-top:30px !important;padding-bottom:50px !important;margin-top:0 !important;background-color:#3d0d65 !important}@media (max-width:991px){.eorguwa-s{padding-right:20px !important;padding-left:20px !important}}.uc39xii>.mgz-element-inner,.ti9ke72>.mgz-element-inner{padding:0}.amsite-top-promotion{margin-bottom:0 !important}.catalog-product-view .amtheme-productinfo-wrap{padding-top:0 !important}.catalog-product-view .page-header>.content{margin-bottom:0 !important}.gbow6yd-s{padding-top:75px !important}.fqcpby3-s{margin-right:80px !important}.tn99xbl-s{padding-top:40px !important;padding-bottom:90px !important}.hmrhxtb-s{margin-left:10px !important}.f9mo5gt-s{min-height:441px !important;background-color:#8c2cd9 !important}.f9mo5gt-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/magento_optimization_service/magento-optimization-ebook.png');background-size:auto 100%;background-position:center top}.rr2i0o5-s{padding-top:55px !important}.q5pthxj-s{text-align:center;padding-top:20px !important}.mgz-element.q5pthxj .image-content{width:100%;text-align:center}.mgz-element.q5pthxj .image-title{font-size:16px}.prbfxbk-s{padding-right:30px !important;padding-left:30px !important}.s2npu0d-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.kus8dq5-s{min-height:315px !important;border-radius:8px!important;background-color:#ffffff !important}.bpui6ga-s{text-align:center;padding-top:20px !important}.mgz-element.bpui6ga .image-content{width:100%;text-align:center}.mgz-element.bpui6ga .image-title{font-size:16px}.tchfig0-s{padding-right:30px !important;padding-left:30px !important}.a2wkg9p-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.boun44f-s{min-height:315px !important;border-radius:8px!important;background-color:#ffffff !important}.mfsdnwp-s{text-align:center;padding-top:20px !important}.mgz-element.mfsdnwp .image-content{width:100%;text-align:center}.mgz-element.mfsdnwp .image-title{font-size:16px}.bbn9fdk-s{padding-right:30px !important;padding-left:30px !important}.sjcgt0t-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.h3a8304-s{min-height:315px !important;border-radius:8px!important;background-color:#ffffff !important}.wg0hykn-s{padding-top:45px !important}.kus8dq5,.boun44f,.h3a8304{border:20px solid transparent}.kus8dq5>.mgz-element-inner,.boun44f>.mgz-element-inner,.h3a8304>.mgz-element-inner{padding:0;margin:0}.kk61sef-s{text-align:center;padding-top:20px !important}.mgz-element.kk61sef .image-content{width:100%;text-align:center}.mgz-element.kk61sef .image-title{font-size:16px}.e8ghcbp-s{padding-right:30px !important;padding-left:30px !important}.g4yraht-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.nwt9di9-s{min-height:315px !important;border-radius:8px!important;background-color:#ffffff !important}.qy1nn98-s{text-align:center;padding-top:20px !important}.mgz-element.qy1nn98 .image-content{width:100%;text-align:center}.mgz-element.qy1nn98 .image-title{font-size:16px}.qpdeq9o-s{padding-right:30px !important;padding-left:30px !important}.r6d17g2-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.a6j9otc-s{min-height:315px !important;border-radius:8px!important;background-color:#ffffff !important}.ovj0tnl-s{text-align:center;padding-top:20px !important}.mgz-element.ovj0tnl .image-content{width:100%;text-align:center}.mgz-element.ovj0tnl .image-title{font-size:16px}.pwljcyy-s{padding-right:30px !important;padding-left:30px !important}.btapgc7-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.ywhvrlb-s{min-height:315px !important;border-radius:8px!important;background-color:#ffffff !important}.nwt9di9,.a6j9otc,.ywhvrlb{border:20px solid transparent}.nwt9di9>.mgz-element-inner,.a6j9otc>.mgz-element-inner,.ywhvrlb>.mgz-element-inner{padding:0;margin:0}.moofr2o-s{padding-top:50px !important;margin-right:80px !important;margin-left:80px !important}.gy0co7o-s{padding-top:20px !important;padding-bottom:20px !important}.f847xrs-s{margin-right:70px !important;margin-left:70px !important}.mrsefiw-s{padding-right:20px !important;padding-bottom:50px !important;padding-left:20px !important}.m03s5pw-s{min-height:668px !important;padding-bottom:70px !important;background-color:#f8f0ff !important}@media (max-width:991px){.m03s5pw-s{padding-left:20px !important}}.mrsefiw>.mgz-element-inner{padding:60px}.eh5gseo-s{text-align:center;padding-top:20px !important}.mgz-element.eh5gseo .image-content{width:100%;text-align:center}.mgz-element.eh5gseo .image-title{font-size:16px}.ifb7q89-s{padding-right:30px !important;padding-left:30px !important}.itfmnv3-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.gsb76wt-s{min-height:315px !important;border-radius:8px!important;background-color:#ffffff !important}.yve7ary-s{text-align:center;padding-top:20px !important}.mgz-element.yve7ary .image-content{width:100%;text-align:center}.mgz-element.yve7ary .image-title{font-size:16px}.m1jpwvh-s{padding-right:30px !important;padding-left:30px !important}.mjgka30-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.b8igr3h-s{min-height:315px !important;border-radius:8px!important;background-color:#ffffff !important}.e5eu08c-s{text-align:center;padding-top:20px !important}.mgz-element.e5eu08c .image-content{width:100%;text-align:center}.mgz-element.e5eu08c .image-title{font-size:16px}.tn4v95m-s{padding-right:30px !important;padding-left:30px !important}.i50syax-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.cm5vyph-s{min-height:315px !important;border-radius:8px!important;background-color:#ffffff !important}.woo125m-s{padding-top:45px !important}.gsb76wt,.b8igr3h,.cm5vyph{border:20px solid transparent}.gsb76wt>.mgz-element-inner,.b8igr3h>.mgz-element-inner,.cm5vyph>.mgz-element-inner{padding:0;margin:0}.bkf1u0b-s{text-align:center;padding-top:20px !important}.mgz-element.bkf1u0b .image-content{width:100%;text-align:center}.mgz-element.bkf1u0b .image-title{font-size:16px}.qojk1wy-s{padding-right:30px !important;padding-left:30px !important}.yhhqpbk-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.bhx851g-s{min-height:315px !important;border-radius:8px!important;background-color:#ffffff !important}.rbn08v7-s{text-align:center;padding-top:20px !important}.mgz-element.rbn08v7 .image-content{width:100%;text-align:center}.mgz-element.rbn08v7 .image-title{font-size:16px}.u6w0r3c-s{padding-right:30px !important;padding-left:30px !important}.cn3wpbj-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.ewemwe3-s{min-height:315px !important;border-radius:8px!important;background-color:#ffffff !important}.nsafqyu-s{text-align:center;padding-top:20px !important}.mgz-element.nsafqyu .image-content{width:100%;text-align:center}.mgz-element.nsafqyu .image-title{font-size:16px}.aw8kyx0-s{padding-right:30px !important;padding-left:30px !important}.dg30xj7-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.krva4se-s{min-height:315px !important;border-radius:8px!important;background-color:#ffffff !important}.bhx851g,.ewemwe3,.krva4se{border:20px solid transparent}.bhx851g>.mgz-element-inner,.ewemwe3>.mgz-element-inner,.krva4se>.mgz-element-inner{padding:0;margin:0}.yraswj7-s{padding-top:20px !important}.kq1jhkr-s{padding-top:10px !important;padding-bottom:10px !important}.axe2vge-s{padding-right:20px !important;padding-bottom:50px !important;padding-left:20px !important}.i80478t-s{min-height:668px !important;background-color:#f8f0ff !important}@media (max-width:991px){.i80478t-s{padding-left:20px !important}}.axe2vge>.mgz-element-inner{padding:60px}.yygsvhw-s{text-align:center;padding-top:20px !important}.mgz-element.yygsvhw .image-content{width:100%;text-align:center}.mgz-element.yygsvhw .image-title{font-size:16px}.jd9kqpc-s{padding-right:30px !important;padding-left:30px !important}.l584y5l-s{min-height:97px !important;border-radius:8px!important;background-color:#ffffff !important}.j455y07-s{text-align:center;padding-top:20px !important}.mgz-element.j455y07 .image-content{width:100%;text-align:center}.mgz-element.j455y07 .image-title{font-size:16px}.kar2jxc-s{padding-right:30px !important;padding-left:30px !important}.k2p4t4x-s{min-height:97px !important;border-radius:8px!important;background-color:#ffffff !important}.nb7e29b-s{text-align:center;padding-top:20px !important}.mgz-element.nb7e29b .image-content{width:100%;text-align:center}.mgz-element.nb7e29b .image-title{font-size:16px}.mn6q8me-s{padding-right:30px !important;padding-left:30px !important}.jc2wj5l-s{min-height:97px !important;border-radius:8px!important;background-color:#ffffff !important}.g0u7tiv-s{text-align:center;padding-top:20px !important}.mgz-element.g0u7tiv .image-content{width:100%;text-align:center}.mgz-element.g0u7tiv .image-title{font-size:16px}.s9lrbrr-s{padding-right:30px !important;padding-left:30px !important}.lvw5nx3-s{min-height:97px !important;border-radius:8px!important;background-color:#ffffff !important}.m3agj3d-s{text-align:center;padding-top:20px !important}.mgz-element.m3agj3d .image-content{width:100%;text-align:center}.mgz-element.m3agj3d .image-title{font-size:16px}.ofccu9d-s{padding-right:30px !important;padding-left:30px !important}.s6oa08k-s{min-height:97px !important;border-radius:8px!important;background-color:#ffffff !important}.wcsbk3r-s{text-align:center;padding-top:20px !important}.mgz-element.wcsbk3r .image-content{width:100%;text-align:center}.mgz-element.wcsbk3r .image-title{font-size:16px}.jwxyd4g-s{padding-right:30px !important;padding-left:30px !important}.yi1kkv7-s{min-height:97px !important;border-radius:8px!important;background-color:#ffffff !important}.wcnxcft-s{padding-top:45px !important}.l584y5l,.k2p4t4x,.jc2wj5l,.lvw5nx3,.s6oa08k,.yi1kkv7{border:20px solid transparent}.l584y5l>.mgz-element-inner,.k2p4t4x>.mgz-element-inner,.jc2wj5l>.mgz-element-inner,.lvw5nx3>.mgz-element-inner,.s6oa08k>.mgz-element-inner,.yi1kkv7>.mgz-element-inner{padding:0;margin:0}.sals52b-s{border-radius:8px!important;background-color:#ffffff !important}.eo6s99q-s{padding-top:45px !important}.sals52b{border:20px solid transparent}.sals52b>.mgz-element-inner{padding:0;margin:0}.s8mpfgf-s{padding-right:20px !important;padding-bottom:50px !important;padding-left:20px !important}.eydrvyw-s{min-height:668px !important;background-color:#ffffff !important}@media (max-width:991px){.eydrvyw-s{padding-left:20px !important}}.s8mpfgf>.mgz-element-inner{padding:60px}.r5i95v1-s{padding-top:40px !important}.pdq1u48-s{padding-top:5px !important;margin-right:80px !important}.hd58yi2-s{margin-right:80px !important}.d7o8f6m-s{padding-top:7px !important;padding-bottom:40px !important}.d9cei8b-s{min-height:382px !important;padding-right:20px !important;padding-bottom:50px !important;padding-left:20px !important}.hpu3uwf-s{min-height:623px !important;background-color:#d1f8ff !important}.hpu3uwf-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/magento_optimization_service/free-audit-block-bg-mobile.png');background-size:100% auto;background-position:right bottom}.uipcnr0-s{padding-top:50px !important}@media (max-width:1199px){.uipcnr0-s{padding-top:50px !important}}.ytyov3t-s{padding-top:60px !important}.cvxevtj>.mgz-element-inner{padding:0}.itfh8ai-s{padding-top:30px !important}.itfh8ai>.mgz-element-inner{padding:0}.hqb8y0x-s{padding-top:30px !important}.lgtwo0g>.mgz-element-inner{padding:0}.a28eupb-s{padding-top:30px !important}@media (max-width:991px){.a28eupb-s{padding-bottom:0 !important}}.sgox2p0>.mgz-element-inner{padding:0}.irtecfx-s{padding-right:30px !important;padding-bottom:50px !important;padding-left:30px !important;background-color:#f8f0ff !important}@media (max-width:1199px){.irtecfx-s{padding-right:30px !important;padding-left:30px !important}}@media (max-width:991px){.irtecfx-s{padding-left:30px !important}}.qpfcxxn>.mgz-element-inner{padding:0}.jrcclqx-s{padding-top:55px !important}.bhlsge5-s{text-align:center;padding-top:20px !important}.mgz-element.bhlsge5 .image-content{width:100%;text-align:center}.mgz-element.bhlsge5 .image-title{font-size:16px}.n9n1wuh-s{padding-right:30px !important;padding-left:30px !important}.mw4gn5i-s{min-height:97px !important;border-radius:8px!important;background-color:#ffffff !important}.xyt0a5l-s{text-align:center;padding-top:20px !important}.mgz-element.xyt0a5l .image-content{width:100%;text-align:center}.mgz-element.xyt0a5l .image-title{font-size:16px}.d5ln1em-s{padding-right:30px !important;padding-left:30px !important}.lfwapdp-s{min-height:97px !important;border-radius:8px!important;background-color:#ffffff !important}.ob3e130-s{text-align:center;padding-top:20px !important}.mgz-element.ob3e130 .image-content{width:100%;text-align:center}.mgz-element.ob3e130 .image-title{font-size:16px}.humfhlc-s{padding-right:30px !important;padding-left:30px !important}.jv1rfsh-s{min-height:97px !important;border-radius:8px!important;background-color:#ffffff !important}.nrbf4nj-s{text-align:center;padding-top:20px !important}.mgz-element.nrbf4nj .image-content{width:100%;text-align:center}.mgz-element.nrbf4nj .image-title{font-size:16px}.o8p690c-s{padding-right:30px !important;padding-left:30px !important}.s4rol3r-s{min-height:97px !important;border-radius:8px!important;background-color:#ffffff !important}.as6ir7a-s{text-align:center;padding-top:20px !important}.mgz-element.as6ir7a .image-content{width:100%;text-align:center}.mgz-element.as6ir7a .image-title{font-size:16px}.ih4uv1j-s{padding-right:30px !important;padding-left:30px !important}.nxpfru2-s{min-height:97px !important;border-radius:8px!important;background-color:#ffffff !important}.og47sq8-s{text-align:center;padding-top:20px !important}.mgz-element.og47sq8 .image-content{width:100%;text-align:center}.mgz-element.og47sq8 .image-title{font-size:16px}.nb1n8qo-s{padding-right:30px !important;padding-left:30px !important}.vu0gaaw-s{min-height:97px !important;border-radius:8px!important;background-color:#ffffff !important}.o1jmev0-s{padding-top:45px !important}.mw4gn5i,.lfwapdp,.jv1rfsh,.s4rol3r,.nxpfru2,.vu0gaaw{border:20px solid transparent}.mw4gn5i>.mgz-element-inner,.lfwapdp>.mgz-element-inner,.jv1rfsh>.mgz-element-inner,.s4rol3r>.mgz-element-inner,.nxpfru2>.mgz-element-inner,.vu0gaaw>.mgz-element-inner{padding:0;margin:0}.rgev4k0-s{border-radius:8px!important;background-color:#ffffff !important}.mwsvpdp-s{padding-top:45px !important}.rgev4k0{border:20px solid transparent}.rgev4k0>.mgz-element-inner{padding:0;margin:0}.huydckt-s{padding-right:20px !important;padding-bottom:100px !important;padding-left:20px !important}.ywia1dj-s{min-height:668px !important;background-color:#ffffff !important}@media (max-width:991px){.ywia1dj-s{padding-left:20px !important}}.huydckt>.mgz-element-inner{padding:60px}.gxkpqub-s{padding-top:40px !important}.t22f58b-s{padding-top:5px !important;margin-right:80px !important}.pfa2nib-s{padding-top:7px !important;padding-bottom:40px !important}.gak3yhc-s{min-height:382px !important;margin-left:10px !important}.jurw026-s{background-color:#d1f8ff !important}.jurw026-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/magento_optimization_service/free-audit-block-bg.png');background-size:cover;background-position:center top}.c7mki4v-s{padding-top:115px !important}@media (max-width:1199px){.c7mki4v-s{padding-top:50px !important}}.mgz-element.egjk8p4 .image-content{width:100%;text-align:center}.mgz-element.egjk8p4 .image-title{font-size:16px}.oy0q8hm-s{padding-top:50px !important}@media (max-width:1199px){.oy0q8hm-s{padding-top:50px !important}}@media (max-width:991px){.oy0q8hm-s{padding-top:20px !important}}.yb8wrix-s{padding-top:60px !important}.weet2mv>.mgz-element-inner,.oy0q8hm>.mgz-element-inner{padding:0}@media (max-width:1199px){.wbr2j08-s{padding-top:50px !important}}@media (max-width:991px){.wbr2j08-s{padding-top:20px !important}}.natb5mw-s{text-align:right}.mgz-element.natb5mw .image-content{width:100%;text-align:center}.mgz-element.natb5mw .image-title{font-size:16px}.s74vgsu-s{padding-top:70px !important}.wbr2j08>.mgz-element-inner,.j4a1u3m>.mgz-element-inner{padding:0}.mgz-element.k4nipjj .image-content{width:100%;text-align:center}.mgz-element.k4nipjj .image-title{font-size:16px}.sl2l2fl-s{padding-top:50px !important}@media (max-width:1199px){.sl2l2fl-s{padding-top:50px !important;padding-left:20px !important}}@media (max-width:991px){.sl2l2fl-s{padding-top:20px !important}}.tm5wqi1-s{padding-top:60px !important}.l04a0fy>.mgz-element-inner,.sl2l2fl>.mgz-element-inner{padding:0}.atpw2w7-s{padding-top:50px !important}@media (max-width:1199px){.atpw2w7-s{padding-top:50px !important}}@media (max-width:991px){.atpw2w7-s{padding-top:20px !important}}.hwofoy5-s{text-align:right}.mgz-element.hwofoy5 .image-content{width:100%;text-align:center}.mgz-element.hwofoy5 .image-title{font-size:16px}.acvywav-s{padding-top:60px !important}@media (max-width:991px){.acvywav-s{padding-bottom:0 !important}}.atpw2w7>.mgz-element-inner,.kcguvj8>.mgz-element-inner{padding:0}@media (max-width:1199px){.onyaxo9-s{padding-left:20px !important}}.yire0o8-s{padding-bottom:120px !important;background-color:#f8f0ff !important}@media (max-width:1199px){.yire0o8-s{padding-right:30px !important;padding-left:30px !important}}@media (max-width:991px){.yire0o8-s{padding-left:30px !important}}.onyaxo9>.mgz-element-inner{padding:0}.w0o23yv-s{text-align:center;margin-right:-10px !important;margin-left:-10px !important}.mgz-element.w0o23yv .image-content{width:100%;text-align:center}.mgz-element.w0o23yv .image-title{font-size:16px}.yyw5c5g-s{padding-top:20px !important;padding-left:20px !important}.u1m5vg7-s{padding-top:50px !important}@media (max-width:1199px){.u1m5vg7-s{padding-top:50px !important}}@media (max-width:991px){.u1m5vg7-s{padding-top:20px !important}}.nqqibl0-s{padding-top:60px !important}.mhkv1w2>.mgz-element-inner,.u1m5vg7>.mgz-element-inner{padding:0}@media (max-width:1199px){.xpuqf0x-s{padding-left:20px !important}}.av2sidh-s{min-height:441px !important;padding-top:80px !important;padding-bottom:100px !important;background-color:#8c2cd9 !important}.av2sidh-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/magento_optimization_service/block_09_10_24.png');background-size:cover;background-position:center top}@media (max-width:1199px){.av2sidh-s{padding-right:30px !important;padding-left:30px !important}}@media (max-width:991px){.av2sidh-s{padding-left:30px !important}}.xpuqf0x>.mgz-element-inner{padding:0}.wkkk51d-s{padding-top:50px !important}.mgz-element.wkkk51d .image-content{width:100%;text-align:center}.mgz-element.wkkk51d .image-title{font-size:16px}.aqkctm1-s{padding-top:20px !important}@media (max-width:1199px){.aqkctm1-s{padding-top:50px !important}}.vjyn0i1-s{padding-right:30px !important;padding-bottom:50px !important;padding-left:30px !important;background-color:#8c2cd9 !important}@media (max-width:1199px){.vjyn0i1-s{padding-right:30px !important;padding-left:30px !important}}@media (max-width:991px){.vjyn0i1-s{padding-left:30px !important}}.ptdrgpm>.mgz-element-inner{padding:0}.a7t7hfg-s{padding-top:50px !important}.y6khwkg-s{text-align:center;padding-bottom:10px !important}.mgz-element.y6khwkg .image-content{width:100%;text-align:center}.mgz-element.y6khwkg .image-title{font-size:16px}.hfwr6q1-s{text-align:center;padding-right:20px !important;padding-left:20px !important}.smncoiu-s{margin-bottom:30px !important}.ws9dd7p-s{padding-top:20px !important;margin-top:30px !important;margin-bottom:30px !important;border-radius:8px!important;background-color:#ffffff !important}.mt8f3eg-s{text-align:center;padding-bottom:10px !important}.mgz-element.mt8f3eg .image-content{width:100%;text-align:center}.mgz-element.mt8f3eg .image-title{font-size:16px}.wp9pc9g-s{text-align:center;padding-right:20px !important;padding-left:20px !important}.ulv0g1c-s{text-align:center;margin-bottom:30px !important}.foum8hg-s{padding-top:20px !important;margin-bottom:30px !important;border-radius:8px!important;background-color:#ffffff !important}.mub5yyw-s{text-align:center;padding-bottom:10px !important}.mgz-element.mub5yyw .image-content{width:100%;text-align:center}.mgz-element.mub5yyw .image-title{font-size:16px}.b7esggq-s{padding-right:20px !important;padding-left:20px !important}.nx9j46i-s{margin-bottom:30px !important}.v2om91a-s{padding-top:20px !important;border-radius:8px!important;background-color:#ffffff !important}.ov7xlej-s{padding-right:20px !important;padding-bottom:50px !important;padding-left:20px !important}.ctew5fv-s{background-color:#3d0c64 !important}.l4qhm0o-s{padding-top:104px !important}.f5vdxlg-s{text-align:center;padding-bottom:20px !important}.mgz-element.f5vdxlg .image-content{width:100%;text-align:center}.mgz-element.f5vdxlg .image-title{font-size:16px}.nl89rhg-s{padding-top:40px !important;padding-right:40px !important}.kcakaw4-s{padding-top:20px !important;margin-top:60px !important;margin-bottom:30px !important;border-radius:8px!important;background-color:#ffffff !important}.dtr94s7-s{text-align:center;padding-bottom:20px !important}.mgz-element.dtr94s7 .image-content{width:100%;text-align:center}.mgz-element.dtr94s7 .image-title{font-size:16px}.kox0g9p-s{text-align:center;padding-top:40px !important;padding-right:40px !important}.ainr8mk-s{padding-top:20px !important;margin-bottom:30px !important;border-radius:8px!important;background-color:#ffffff !important}.utasfvt-s{text-align:center;padding-bottom:20px !important}.mgz-element.utasfvt .image-content{width:100%;text-align:center}.mgz-element.utasfvt .image-title{font-size:16px}.sldt99h-s{padding-top:40px !important;padding-right:40px !important}.jq6lohp-s{padding-top:20px !important;margin-bottom:110px !important;border-radius:8px!important;background-color:#ffffff !important}.olpm0g2-s{background-color:#3d0d65 !important}.olpm0g2-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/magento_optimization_service/optimization-services-we-offer-background.png');background-size:cover;background-position:center top}.rd2jk77-s{padding-top:90px !important}.qk5a2y2-s{text-align:center}.mgz-element.qk5a2y2 .image-content{width:100%;text-align:center}.mgz-element.qk5a2y2 .image-title{font-size:16px}.w96gjwj-s{padding-top:15px !important;padding-right:40px !important;padding-left:25px !important}.ewwke49-s{min-height:208px !important;border-radius:8px!important}.fye8m49-s{padding-top:15px !important;padding-right:40px !important;padding-left:25px !important}.xxqrhi6-s{min-height:208px !important;border-radius:8px!important}.xeevxvg-s{padding-top:15px !important;padding-right:40px !important;padding-left:25px !important}.e6ig712-s{min-height:208px !important;border-radius:8px!important}.hvwxbsi-s{padding-top:40px !important;padding-bottom:70px !important}.ewwke49,.xxqrhi6,.e6ig712{border:10px solid transparent}.ewwke49>.mgz-element-inner,.xxqrhi6>.mgz-element-inner,.e6ig712>.mgz-element-inner{padding:0;margin:0}.r70howm-s{padding-top:50px !important}.q26035i-s{text-align:center;padding-top:20px !important}.mgz-element.q26035i .image-content{width:100%;text-align:center}.mgz-element.q26035i .image-title{font-size:16px}.xlkoaed-s{border-radius:8px!important}.fvolb4n-s{padding-top:15px !important}.tc6tvhm-s{border-radius:8px!important}.gd4jy7g-s{padding-top:15px !important}.trh6he5-s{border-radius:8px!important}.i7wfn52-s{padding-top:20px !important}.xlkoaed,.tc6tvhm,.trh6he5{border:10px solid transparent}.xlkoaed>.mgz-element-inner,.tc6tvhm>.mgz-element-inner,.trh6he5>.mgz-element-inner{padding:0;margin:0}.ik3ljk7-s{padding-right:20px !important;padding-bottom:50px !important;padding-left:20px !important}.hcjgdkc-s{padding-top:115px !important}.n4olvj9-s{text-align:center;padding-top:30px !important}.mgz-element.n4olvj9 .image-content{width:100%;text-align:center}.mgz-element.n4olvj9 .image-title{font-size:16px}.tibt8k3-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.pa5ct10-s{border-radius:8px!important;background-color:#ffffff !important}.mc6mo5r-s{text-align:center;padding-top:30px !important}.mgz-element.mc6mo5r .image-content{width:100%;text-align:center}.mgz-element.mc6mo5r .image-title{font-size:16px}.h7nidbq-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.rh4wt96-s{border-radius:8px!important;background-color:#ffffff !important}.m8a8sqp-s{text-align:center;padding-top:30px !important}.mgz-element.m8a8sqp .image-content{width:100%;text-align:center}.mgz-element.m8a8sqp .image-title{font-size:16px}.vqx0g5l-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.q4l527q-s{border-radius:8px!important;background-color:#ffffff !important}.nl88fn0-s{text-align:center;padding-top:30px !important}.mgz-element.nl88fn0 .image-content{width:100%;text-align:center}.mgz-element.nl88fn0 .image-title{font-size:16px}.twbm58d-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.ki9fk37-s{border-radius:8px!important;background-color:#ffffff !important}.xk8l2ec-s{padding-top:30px !important}.pa5ct10,.rh4wt96,.q4l527q,.ki9fk37{border:20px solid transparent}.pa5ct10>.mgz-element-inner,.rh4wt96>.mgz-element-inner,.q4l527q>.mgz-element-inner,.ki9fk37>.mgz-element-inner{padding:0;margin:0}.wo8o1vk-s{padding-top:50px !important}@media (max-width:1199px){.sx4mywi-s{padding-left:20px !important}}.sx4mywi>.mgz-element-inner{padding:0}.hynlc02-s{margin-bottom:100px !important}.stwpwd7-s{background-color:#f8f0ff !important}@media (max-width:1199px){.stwpwd7-s{padding-right:20px !important;padding-left:20px !important}}@media (max-width:991px){.stwpwd7-s{padding-left:20px !important}}.hynlc02>.mgz-element-inner{padding:0}.y2mo9ki-s{padding-top:50px !important}.je4w52q-s{text-align:center;padding-top:30px !important}.mgz-element.je4w52q .image-content{width:100%;text-align:center}.mgz-element.je4w52q .image-title{font-size:16px}.nb88y2t-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.kndrwfd-s{border-radius:8px!important;background-color:#ffffff !important}.sjcw8ol-s{text-align:center;padding-top:30px !important}.mgz-element.sjcw8ol .image-content{width:100%;text-align:center}.mgz-element.sjcw8ol .image-title{font-size:16px}.issdt5k-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.qpq7wyd-s{border-radius:8px!important;background-color:#ffffff !important}.ng9shi5-s{text-align:center;padding-top:30px !important}.mgz-element.ng9shi5 .image-content{width:100%;text-align:center}.mgz-element.ng9shi5 .image-title{font-size:16px}.ywauwhf-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.bxcgsg6-s{border-radius:8px!important;background-color:#ffffff !important}.usnpotw-s{text-align:center;padding-top:30px !important}.mgz-element.usnpotw .image-content{width:100%;text-align:center}.mgz-element.usnpotw .image-title{font-size:16px}.scjbjlm-s{padding-right:30px !important;padding-bottom:30px !important;padding-left:30px !important}.e0qp6w0-s{border-radius:8px!important;background-color:#ffffff !important}.q1qq8ou-s{padding-top:30px !important}.kndrwfd,.qpq7wyd,.bxcgsg6,.e0qp6w0{border:20px solid transparent}.kndrwfd>.mgz-element-inner,.qpq7wyd>.mgz-element-inner,.bxcgsg6>.mgz-element-inner,.e0qp6w0>.mgz-element-inner{padding:0;margin:0}@media (max-width:1199px){.b85bx74-s{padding-left:20px !important}}.b85bx74>.mgz-element-inner{padding:0}.y6p2nyx-s{padding-right:30px !important;padding-bottom:50px !important;padding-left:30px !important;background-color:#f8f0ff !important}@media (max-width:1199px){.y6p2nyx-s{padding-right:20px !important;padding-left:20px !important}}@media (max-width:991px){.y6p2nyx-s{padding-left:20px !important}}.idy0lxl>.mgz-element-inner{padding:0}.caag3ja-s{padding-top:115px !important}.puv50kd-s{text-align:center}.mgz-element.puv50kd .image-content{width:100%;text-align:center}.mgz-element.puv50kd .image-title{font-size:16px}.qhjbx19-s{text-align:center}.mgz-element.qhjbx19 .image-content{width:100%;text-align:center}.mgz-element.qhjbx19 .image-title{font-size:16px}.dmcpj4a-s{text-align:center}.mgz-element.dmcpj4a .image-content{width:100%;text-align:center}.mgz-element.dmcpj4a .image-title{font-size:16px}.kmkirg3-s{text-align:center}.mgz-element.kmkirg3 .image-content{width:100%;text-align:center}.mgz-element.kmkirg3 .image-title{font-size:16px}.kva8q9v-s{text-align:center}.mgz-element.kva8q9v .image-content{width:100%;text-align:center}.mgz-element.kva8q9v .image-title{font-size:16px}.a791rbx-s{text-align:center}.mgz-element.a791rbx .image-content{width:100%;text-align:center}.mgz-element.a791rbx .image-title{font-size:16px}.mwv9a14-s{padding-top:30px !important}.g0ueju8>.mgz-element-inner,.ccp36u2>.mgz-element-inner,.bff5uwm>.mgz-element-inner,.am3bfps>.mgz-element-inner,.sf9wtn6>.mgz-element-inner,.qsynbbm>.mgz-element-inner{padding:20px}.leom4sx-s{padding-top:50px !important}@media (max-width:1199px){.ag7p1rp-s{padding-left:20px !important}}.ag7p1rp>.mgz-element-inner{padding:0}.oafx9hq-s{margin-bottom:100px !important}.xs3iuu2-s{background-color:#3d0c64 !important}@media (max-width:1199px){.xs3iuu2-s{padding-right:20px !important;padding-left:20px !important}}@media (max-width:991px){.xs3iuu2-s{padding-left:20px !important}}.oafx9hq>.mgz-element-inner{padding:0}.hi2mepc-s{margin-bottom:-30px !important}.y78n9nu-s{padding-top:80px !important}@media (max-width:991px){.y78n9nu-s{padding-top:27px !important}}.fkob2oo-s{padding-top:30px !important;padding-bottom:55px !important}.mgz-element.fkob2oo .owl-carousel .owl-prev,.mgz-element.fkob2oo .owl-carousel .owl-next,.mgz-element.fkob2oo .owl-carousel .owl-dots .owl-dot:not(.active) span{color:#d8a8ff;background-color:#8c2cd9}.mgz-element.fkob2oo .owl-carousel .mgz-testimonial-image img{width:80px}.mgz-element.fkob2oo .owl-carousel .mgz-testimonial-content{font-size:16px;text-align:center;color:#ffffff}.mgz-element.fkob2oo .owl-carousel .mgz-testimonial-name{font-size:14px;font-weight:3;color:#ffffff}.mgz-element.fkob2oo .owl-carousel .mgz-testimonial-job{font-size:18px;font-weight:3;color:#a8a8a8}.tciyukg-s{background-color:#8c2cd9 !important}.y78n9nu>.mgz-element-inner,.jwiav27>.mgz-element-inner{padding:0}.mgz-element.tciyukg >.mgz-element-inner>.inner-content{width:970px;max-width:100%;margin:0 auto}.y6uhjvw-s{margin-bottom:-30px !important}.l6ema5s-s{padding-top:50px !important}@media (max-width:991px){.l6ema5s-s{padding-top:27px !important}}.msf83qx-s{padding-top:30px !important}.mgz-element.msf83qx .owl-carousel .owl-prev,.mgz-element.msf83qx .owl-carousel .owl-next,.mgz-element.msf83qx .owl-carousel .owl-dots .owl-dot:not(.active) span{color:#d8a8ff;background-color:#8c2cd9}.mgz-element.msf83qx .owl-carousel .mgz-testimonial-image img{width:80px}.mgz-element.msf83qx .owl-carousel .mgz-testimonial-content{font-size:16px;text-align:center;color:#ffffff}.mgz-element.msf83qx .owl-carousel .mgz-testimonial-name{font-size:14px;font-weight:3;color:#ffffff}.mgz-element.msf83qx .owl-carousel .mgz-testimonial-job{font-size:18px;font-weight:3;color:#a8a8a8}.ynjesr4-s{background-color:#8c2cd9 !important}.l6ema5s>.mgz-element-inner,.cxihd93>.mgz-element-inner{padding:0}.mgz-element.ynjesr4 >.mgz-element-inner>.inner-content{width:970px;max-width:100%;margin:0 auto}.jgm1c7a-s{padding-top:110px !important}.mgz-element.g2rgyxg .image-content{width:100%;text-align:center}.mgz-element.g2rgyxg .image-title{font-size:16px}.qtipwib-s{padding:20px!important}.danjhy8-s{padding-bottom:20px !important}.ruabn7b-s{min-height:327px !important;border-radius:8px!important;background-color:#ffffff !important}.mgz-element.rnncujn .image-content{width:100%;text-align:center}.mgz-element.rnncujn .image-title{font-size:16px}.oc1ycbk-s{padding:20px!important}.m6ujkdn-s{padding-bottom:20px !important}.dodlarc-s{min-height:327px !important;border-radius:8px!important;background-color:#ffffff !important}.mgz-element.r8j503k .image-content{width:100%;text-align:center}.mgz-element.r8j503k .image-title{font-size:16px}.pmn5pnf-s{padding:20px!important}.qdob02r-s{padding-bottom:20px !important}.s7c96pu-s{min-height:327px !important;border-radius:8px!important;background-color:#ffffff !important}.ruabn7b,.dodlarc,.s7c96pu{border:20px solid transparent}.ruabn7b>.mgz-element-inner,.dodlarc>.mgz-element-inner,.s7c96pu>.mgz-element-inner{padding:0;margin:0}.ndkbodq-s{padding-bottom:100px !important}.r5r6l5u-s{background-color:#3d0c64 !important}.o8la95k-s{padding-top:50px !important}.mgz-element.r1vstiq .image-content{width:100%;text-align:center}.mgz-element.r1vstiq .image-title{font-size:16px}.tf3ckoc-s{padding:20px!important}.pthlsjl-s{padding-bottom:20px !important}.hab4gel-s{min-height:327px !important;border-radius:8px!important;background-color:#ffffff !important}.mgz-element.gve1wt8 .image-content{width:100%;text-align:center}.mgz-element.gve1wt8 .image-title{font-size:16px}.xbdtcgr-s{padding:20px!important}.oidhlw7-s{padding-bottom:20px !important}.icvbjal-s{min-height:327px !important;border-radius:8px!important;background-color:#ffffff !important}.mgz-element.c9vrfso .image-content{width:100%;text-align:center}.mgz-element.c9vrfso .image-title{font-size:16px}.eb68rqe-s{padding:20px!important}.w1iscpu-s{padding-bottom:20px !important}.vh2h4cn-s{min-height:327px !important;border-radius:8px!important;background-color:#ffffff !important}.hab4gel,.icvbjal,.vh2h4cn{border:20px solid transparent}.hab4gel>.mgz-element-inner,.icvbjal>.mgz-element-inner,.vh2h4cn>.mgz-element-inner{padding:0;margin:0}.scclk11-s{padding-right:20px !important;padding-bottom:50px !important;padding-left:20px !important}.jjcftdw-s{background-color:#3d0c64 !important}.fmsppem-s{padding-top:115px !important}.ruy7mr7-s{padding-top:50px !important}.guc1fgv-s{padding-top:30px !important}@media (max-width:1199px){.sarqeyf-s{padding-left:20px !important}}.sarqeyf>.mgz-element-inner{padding:0}.k8em22e-s{margin-bottom:100px !important}.j3u49wj-s{background-color:#ffffff !important}@media (max-width:1199px){.j3u49wj-s{padding-right:20px !important;padding-left:20px !important}}@media (max-width:991px){.j3u49wj-s{padding-left:20px !important}}.k8em22e>.mgz-element-inner{padding:0}.t6xsol6-s{background-color:#f8f0ff !important}.qjg7ynn-s{background-color:#f8f0ff !important}.m10f178>.mgz-element-inner{padding:0}.w28mo2y-s{background-color:#f9f9fd !important}.xd1xtrg-s{background-color:#f8f0ff !important}.vl4lia6-s{background-color:#f8f0ff !important}.rrdd151>.mgz-element-inner{padding:0}.vl64xf4-s{background-color:#f9f9fd !important}.kf0pux0-s{background-color:#f8f0ff !important}.mnp35fj-s{background-color:#f8f0ff !important}.d627jda>.mgz-element-inner{padding:0}.uelyg9e-s{background-color:#f9f9fd !important}.uv16jrd-s{background-color:#f8f0ff !important}.g097gla-s{background-color:#f8f0ff !important}.ibdwbs5>.mgz-element-inner{padding:0}.u6tppu3-s{background-color:#f9f9fd !important}.yxvlpgw-s{background-color:#f8f0ff !important}.lhqmdm0-s{background-color:#f8f0ff !important}.cre3nu4>.mgz-element-inner{padding:0}.np3xaqv-s{background-color:#f9f9fd !important}.gcclmik-s{background-color:#f8f0ff !important}.v3wkclm-s{background-color:#f8f0ff !important}.u4wm1uw>.mgz-element-inner{padding:0}.vais6wy-s{background-color:#f9f9fd !important}.vku5kw1-s{background-color:#f8f0ff !important}.unyo15g-s{background-color:#f8f0ff !important}.ylmbbbc>.mgz-element-inner{padding:0}.do8xyg0-s{background-color:#f9f9fd !important}.fricbht-s{background-color:#f8f0ff !important}.mgz-element.fricbht .mgz-panels-fricbht > .mgz-panel > .mgz-panel-heading{color:#304265;background:#f8f0ff;border-color:#f8f0ff}.mgz-element.fricbht .mgz-panels-fricbht > .mgz-panel > .mgz-panel-body{background:#f8f0ff}.x78d0rx-s{padding-top:120px !important;padding-bottom:100px !important;margin-bottom:-30px !important;background-color:#f8f0ff !important}.njuv5sa>.mgz-element-inner{padding:0}.mgz-element.x78d0rx >.mgz-element-inner>.inner-content{width:860px;max-width:100%;margin:0 auto}.breadcrumbs{display:none}.custom-dot .pbuilder-benefits-dot{background-color:#2B0C84}.builder-button-add-cart{width:250px!important}.pbuilder-special-list-star ul{list-style:none!important;margin-left:0;padding-left:0;padding-bottom:12px!important}.pbuilder-special-list-star li{padding-left:10px}.pbuilder-special-list-star li::marker{content:"★";padding-right:10px;padding-bottom:3px;color:#FFFFFF}.pbuilder-special-list-star ul>li,ol>li{margin-bottom:1.0rem}.catalog-product-view .page-main{max-width:inherit;padding:0}[data-form-id="209"] + .amform-show-popup.amcform-button{background:#1787e0 !important}</style></head><body data-container="body" data-mage-init='{"loaderAjax": {}, "loader": { "icon": "https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/images/loader-2.gif"}}' id="html-body" ontouchstart="() => {}" class="amasty-jet-theme amasty-mega-menu catalog-product-view product-magento-optimization-service am-tabs-view am-tabs-allow-default-edit amsite-category-services-product page-layout-1-column-custom-top-full-width-description-not-tabs"> <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 amsite-full-width custom-top-content not-tabs"> <style>.cmsb82-block { display: block }</style> <div class="magezon-builder magezon-builder-preload"><div class="bje13wx mgz-element mgz-element-row pbuilder-top-promo-html-version full_width_row"><div class="mgz-element-inner bje13wx-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax bje13wx-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="ng0gx7w mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner ng0gx7w-s"><div class="bawcb2q mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner bawcb2q-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/version1740558685/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_67bee64fdc589(), 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/version1740558685/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_67bee64fdc75d(), 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/version1740558685/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\/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;\/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\/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; \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\/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;\/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\/wysiwyg\/amasty\/banner-upgrade-service.png\&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\/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;\/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;: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;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;:false,&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\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb2R1Y3QtZmVlZC5odG1s\/___from_store\/default\/&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> <div class="breadcrumbs"></div><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"><div class="amsite-topservice-wrapper"> <div class="amsite-topservice-description"> <div class="magezon-builder magezon-builder-preload"><div class="uwypn81 mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner uwypn81-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax uwypn81-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="rnyqehg mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner rnyqehg-s"><div class="c2hnwm3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner c2hnwm3-s"><h1 style="text-align: left;"><span style="color: #ffffff; line-height: 72px; font-size: 60px;"><strong>Magento 2 <span style="color: #fc65ff;">Speed Optimization</span> Service</strong></span></h1></div></div><div class="oun6rh5 mgz-element mgz-child mgz-element-text integration-service-subtitle-fix"><div class="mgz-element-inner oun6rh5-s"><p><span style="line-height: 27px;"><span style="color: #ffffff; font-size: 18px;">Improve Magento 2 performance to supersonic speed. Benefit from outstanding performance while keeping all UX/UI features leading to better conversions.</span></span></p></div></div><div class="xlvd6wp mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner xlvd6wp-s"><div class="inner-content mgz-container"><div class="oauedu7 mgz-element mgz-element-column mgz-col-md-2 mgz-element-column-empty"><div class="mgz-element-inner oauedu7-s"><div data-background-type="image" data-parallax-image-background-position="left bottom" class="mgz-parallax oauedu7-p"><div class="lazy-bg mgz-parallax-inner"></div></div></div></div><div class="pcar8jo mgz-element mgz-element-column mgz-col-md-2 mgz-element-column-empty"><div class="mgz-element-inner pcar8jo-s"><div data-background-type="image" data-parallax-image-background-position="left bottom" class="mgz-parallax pcar8jo-p"><div class="lazy-bg mgz-parallax-inner"></div></div></div></div><div class="gd4tnii mgz-element mgz-element-column mgz-col-md-2 mgz-element-column-empty"><div class="mgz-element-inner gd4tnii-s"><div data-background-type="image" data-parallax-image-background-position="left bottom" class="mgz-parallax gd4tnii-p"><div class="lazy-bg mgz-parallax-inner"></div></div></div></div><div class="k45os0l mgz-element mgz-element-column mgz-col-md-3 mgz-element-column-empty"><div class="mgz-element-inner k45os0l-s"><div data-background-type="image" data-parallax-image-background-position="left bottom" class="mgz-parallax k45os0l-p"><div class="lazy-bg mgz-parallax-inner"></div></div></div></div><div class="pl7y0wl mgz-element mgz-element-column mgz-col-md-3 mgz-element-column-empty"><div class="mgz-element-inner pl7y0wl-s"><div data-background-type="image" data-parallax-image-background-position="left bottom" class="mgz-parallax pl7y0wl-p"><div class="lazy-bg mgz-parallax-inner"></div></div></div></div></div></div></div><div class="trmlnlh mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner trmlnlh-s"><p style="text-align: left;"><a href="https://calendly.com/anna-shumeiko/30min?month=2024-12"><button class="action secondary button-full">Schedule a call</button></a></p></div></div></div></div><div class="l00xotv mgz-element mgz-element-column mgz-col-md-6 mgz-element-column-empty"><div class="mgz-element-inner l00xotv-s"></div></div><div class="fn3slto mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner fn3slto-s"><div class="rokd3ve mgz-element mgz-child mgz-element-static_block"><div class="mgz-element-inner rokd3ve-s"><p><form class="rendered-form amform-form mb-12 mx-auto group-[.am-dialog-popup]:mb-0 default" id="amform-form-144" action="https://amasty.com/amasty_customform/form/submit/" enctype="multipart/form-data" method="post"><input name="form_key" type="hidden" value="bYmi4vvyFIlDuwwr" /><input name="form_id" type="hidden" value="144" /><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="page1144"><!-- 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="name-form-144" name="name" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" maxlength="40" required placeholder="Type&#x20;here..." ><label class=" label " for="name-form-144">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-144" 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="253" required placeholder="Type&#x20;here..." ><label class=" label " for="email-form-144">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: '' }"><textarea id="message-form-144" name="message" class="focus:border-gray-500 border-gray-300 w-full border-gray-300 w-full py-1 " maxlength="500" required x-model="value" @focus="focused = true" @blur="focused = value" rows="1" placeholder="Type&#x20;here..." ></textarea> <label class=" label " for="message-form-144">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="initFormEvents144().processSubmit( $refs.page1144, $refs.tab1144, $event)">GET A QUOTE</button> </div></div></div><!--Validations--><!--Dependencies--><!--Survey--><!--Default values--><!--Init google map--></form></p></div></div></div></div><div class="mcjc49j mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner mcjc49j-s"><div class="khmg5a1 mgz-element mgz-element-row full_width_row mgz-row-equal-height content-middle"><div class="mgz-element-inner khmg5a1-s"><div class="inner-content mgz-container"><div class="dep8ev1 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner dep8ev1-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax dep8ev1-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="gwc6lrl mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner gwc6lrl-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-flex-position-middle-center "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/services/magento_optimization_service/audit-icon.png" alt="audit-icon" width="80" height="80" title="" /></div></div></div></div><div class="x37amut mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner x37amut-s"><p style="text-align: center;"><strong><span style="color: #ffffff; line-height: 25.2px; font-size: 18px;">In-depth technical audit<br />and a detailed optimization plan</span></strong></p></div></div></div></div><div class="s6lb2xm mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner s6lb2xm-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax s6lb2xm-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="p9hel41 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner p9hel41-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-flex-position-middle-center "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/services/magento_optimization_service/fast-development-icon.png" alt="fast-development-icon" width="80" height="80" title="" /></div></div></div></div><div class="hw8ngg8 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hw8ngg8-s"><p style="text-align: center;"><strong><span style="color: #ffffff; line-height: 25.2px; font-size: 18px;">Fast development<br />and implementation</span></strong></p></div></div></div></div><div class="gaq23r5 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner gaq23r5-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax gaq23r5-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="ijicb15 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner ijicb15-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-flex-position-middle-center "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/services/magento_optimization_service/support-icon.png" alt="support-icon" width="80" height="80" title="" /></div></div></div></div><div class="vs1t8vt mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner vs1t8vt-s"><p style="text-align: center;"><strong><span style="color: #ffffff; line-height: 25.2px; font-size: 18px;">2 months of warranty<br />and post-release support </span></strong></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="eorguwa mgz-element mgz-element-row mgz-hidden-xl mgz-hidden-lg full_width_row"><div class="mgz-element-inner eorguwa-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax eorguwa-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="uc39xii mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner uc39xii-s"><div class="qtif0dj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner qtif0dj-s"><h1 style="text-align: center;"><span style="color: #ffffff; line-height: 32px; font-size: 30px;"><strong>Magento 2 <span style="color: #fc65ff;">Speed Optimization</span> Service</strong></span></h1></div></div><div class="ybqemux mgz-element mgz-child mgz-element-text integration-service-subtitle-fix"><div class="mgz-element-inner ybqemux-s"><p style="text-align: center;"><span style="line-height: 27px;"><span style="color: #ffffff; font-size: 18px;">Improve Magento 2 performance to supersonic speed. Benefit from outstanding performance while keeping all UX/UI features leading to better conversions.</span></span></p></div></div><div class="mfv35cy mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner mfv35cy-s"><p style="text-align: center;"><a href="#optimization_service_quote"><button class="action primary button-full">GET A QUOTE</button></a></p></div></div></div></div><div class="ti9ke72 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner ti9ke72-s"><div class="av3w81x mgz-element mgz-element-row full_width_row mgz-row-equal-height content-middle"><div class="mgz-element-inner av3w81x-s"><div class="inner-content mgz-container"><div class="wietu92 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner wietu92-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax wietu92-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="ik2kdp3 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner ik2kdp3-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-flex-position-middle-center "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/services/magento_optimization_service/audit-icon.png" alt="audit-icon" width="80" height="80" title="" /></div></div></div></div><div class="fumgot6 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner fumgot6-s"><p style="text-align: center;"><strong><span style="color: #ffffff; line-height: 25.2px; font-size: 18px;">In-depth technical audit<br />and a detailed optimization plan</span></strong></p></div></div></div></div><div class="cdmxtn5 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner cdmxtn5-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax cdmxtn5-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="o0pv3sa mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner o0pv3sa-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-flex-position-middle-center "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/services/magento_optimization_service/fast-development-icon.png" alt="fast-development-icon" width="80" height="80" title="" /></div></div></div></div><div class="i0qyqs1 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner i0qyqs1-s"><p style="text-align: center;"><strong><span style="color: #ffffff; line-height: 25.2px; font-size: 18px;">Fast development<br />and implementation</span></strong></p></div></div></div></div><div class="un8w5i5 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner un8w5i5-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax un8w5i5-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="iavnoex mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner iavnoex-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner mgz-flex-position-middle-center "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/services/magento_optimization_service/support-icon.png" alt="support-icon" width="80" height="80" title="" /></div></div></div></div><div class="cupbbfo mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner cupbbfo-s"><p style="text-align: center;"><strong><span style="color: #ffffff; line-height: 25.2px; font-size: 18px;">2 months of warranty<br />and post-release support </span></strong></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div> <div class="amtheme-productinfo-wrap"> <div class="product attribute description"> <div class="value" > <div class="magezon-builder magezon-builder-preload"><div class="f9mo5gt mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner f9mo5gt-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax f9mo5gt-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div id="checklist" class="hmrhxtb mgz-element mgz-element-column mgz-col-md-8"><div class="mgz-element-inner hmrhxtb-s"><div class="gbow6yd mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner gbow6yd-s"><p style="text-align: left;"><strong><span style="font-size: 36px; color: #ffffff; line-height: 43.2px;">Sales Season Success<span style="color: #fc65ff; line-height: 72px;"> Checklist </span></span></strong></p></div></div><div class="fqcpby3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner fqcpby3-s"><p style="text-align: left;"><span style="font-size: 16px; color: #ffffff; weight: 400;">Ensure your store is ready for a hot sales season with our detailed and practical checklist. <br />Gradually tick off the boxes for all important aspects and feel confident that nothing is overlooked, from security and server capacity to marketing essentials. </span></p></div></div><div class="tn99xbl mgz-element mgz-child mgz-element-static_block"><div class="mgz-element-inner tn99xbl-s"><div class="amform-parent" x-data="{...hyva.modal()}" @amcform-hide-modal-209.window="hide"><button type="button" @click="show" data-amform-show="209" aria-label="Show&#x20;form" class="btn btn-primary inline-flex">DOWNLOAD FOR FREE</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-209" action="https://amasty.com/amasty_customform/form/submit/" enctype="multipart/form-data" method="post"><input name="form_key" type="hidden" value="bYmi4vvyFIlDuwwr" /><input name="form_id" type="hidden" value="209" /><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="page1209"><!-- 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-209" 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" maxlength="255" required placeholder="Type&#x20;here..." ><label class=" label " for="first-name-form-209">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" x-data="{ focused: false, value: '' }"><input type="text" id="last-name-form-209" 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" maxlength="255" required placeholder="Type&#x20;here..." ><label class=" label " for="last-name-form-209">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-209" 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-209">Email</label></div><!-- Dropdown / Select --><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="initFormEvents209().processSubmit( $refs.page1209, $refs.tab1209, $event)">Submit</button> </div></div></div><!--Validations--><!--Dependencies--><!--Survey--><!--Default values--><!--Init google map--></form></div></div></div></div></div></div></div></div></div></div></div><div class="m03s5pw mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner m03s5pw-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax m03s5pw-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="mrsefiw mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner mrsefiw-s"><div class="rr2i0o5 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner rr2i0o5-s"><h2 style="text-align: center;"><strong><span style="font-size: 36px; color: #0a1730;">Speed is not just a number, it’s a formula to success </span></strong></h2></div></div><div class="mf9ng7u mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner mf9ng7u-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 400;">Tuning your Magento 2 performance and increasing its speed directly affects your traffic and sales. See how key business metrics will change:</span></p></div></div><div class="wg0hykn mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner wg0hykn-s"><div class="inner-content mgz-container"><div class="kus8dq5 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner kus8dq5-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax kus8dq5-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="q5pthxj mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner q5pthxj-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/catalog/services/magento_optimization_service/conversion_numbers.png" alt="conversion_numbers" width="80" height="80" title="" /></div></div></div></div><div class="prbfxbk mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner prbfxbk-s"><p style="text-align: center;"><strong><span style="font-size: 18px; color: #0a1730;">1 second improvement →<br /></span><span style="font-size: 18px; color: #d028d3;"> 2% boost in conversions</span></strong></p></div></div><div class="s2npu0d mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner s2npu0d-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">According to HubSpot, website conversion rates drop by an average of 2.11% with each additional second of load time.</span></p></div></div></div></div><div class="boun44f mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner boun44f-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax boun44f-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="bpui6ga mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner bpui6ga-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/catalog/services/magento_optimization_service/bounce_rate_numbers.png" alt="bounce_rate_numbers" width="80" height="80" title="" /></div></div></div></div><div class="tchfig0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner tchfig0-s"><p style="text-align: center;"><strong><span style="font-size: 18px; color: #0a1730;">2 seconds improvement →<br /></span><span style="font-size: 18px; color: #d028d3;"> 32% bounce rate decrease</span></strong></p></div></div><div class="a2wkg9p mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner a2wkg9p-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Google reports that bounce rates increase by 32% when page load time increases from 1 second to 3 seconds.</span></p></div></div></div></div><div class="h3a8304 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner h3a8304-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax h3a8304-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="mfsdnwp mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner mfsdnwp-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/catalog/services/magento_optimization_service/organic_numbers.png" alt="organic_numbers" width="80" height="80" title="" /></div></div></div></div><div class="bbn9fdk mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner bbn9fdk-s"><p style="text-align: center;"><strong><span style="font-size: 18px; color: #0a1730;">Entering Google green zone →<br /></span><span style="font-size: 18px; color: #d028d3;">non-stop organic traffic growth</span></strong></p></div></div><div class="sjcgt0t mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner sjcgt0t-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">SEO strategy also matters, but on average our clients get a 30% increase just by improving performance.</span></p></div></div></div></div></div></div></div><div class="ux9qvm2 mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner ux9qvm2-s"><div class="inner-content mgz-container"><div class="nwt9di9 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner nwt9di9-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax nwt9di9-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="kk61sef mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner kk61sef-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/catalog/services/magento_optimization_service/loyalty_numbers.png" alt="loyalty_numbers" width="80" height="80" title="" /></div></div></div></div><div class="e8ghcbp mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner e8ghcbp-s"><p style="text-align: center;"><strong><span style="font-size: 18px; color: #0a1730;">1 second improvement →<br /></span><span style="font-size: 18px; color: #d028d3;"> 16% increase in customer satisfaction</span></strong></p></div></div><div class="g4yraht mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner g4yraht-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Slow Magento 2 speed affects loyalty as well: as specified in the research, a one-second delay in loading can reduce customer satisfaction by 16%.</span></p></div></div></div></div><div class="a6j9otc mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner a6j9otc-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax a6j9otc-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="qy1nn98 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner qy1nn98-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/catalog/services/magento_optimization_service/reputation_numbers.png" alt="reputation_numbers" width="80" height="80" title="" /></div></div></div></div><div class="qpdeq9o mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner qpdeq9o-s"><p style="text-align: center;"><strong><span style="font-size: 18px; color: #0a1730;">Stable performance =<br /></span><span style="font-size: 18px; color: #d028d3;">enhanced brand reputation</span></strong></p></div></div><div class="r6d17g2 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner r6d17g2-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Customers become more demanding, and 46% of them will never visit a website again if they’ve experienced poor performance.</span></p></div></div></div></div><div class="ywhvrlb mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner ywhvrlb-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax ywhvrlb-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="ovj0tnl mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner ovj0tnl-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/catalog/services/magento_optimization_service/checkout_numbers.png" alt="checkout_numbers" width="80" height="80" title="" /></div></div></div></div><div class="pwljcyy mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner pwljcyy-s"><p style="text-align: center;"><strong><span style="font-size: 18px; color: #0a1730;">1 second improvement on checkout →</span><span style="font-size: 18px; color: #d028d3;"> 7% increase in complete purchases</span></strong></p></div></div><div class="btapgc7 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner btapgc7-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Bolt reports that each second of page load time is correlated with a 7% decline in conversions.</span></p></div></div></div></div></div></div></div><div class="moofr2o mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner moofr2o-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 400;">Want to know how fast your site loads and how well Google rates its overall performance? <br />Click below to check your website’s current score in PageSpeed Insights and uncover key areas for optimization. &#128071;</span></p></div></div><div class="gy0co7o mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner gy0co7o-s"><p style="text-align: center;"><a href="https://pagespeed.web.dev/" target="blank" rel="nofollow" data-promo-id="button-test-my-website" data-promo-name="Test My Website in Page Speed Insights Button" data-promo-creative="test_my_website_block" data-promo-position="test_website_performance"><button class="action primary button-full">TEST MY WEBSITE</button></a></p></div></div><div class="f847xrs mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner f847xrs-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 400;">A lot to optimize? We’re here to help! &#128640;</span></p></div></div></div></div></div></div></div><div class="i80478t mgz-element mgz-element-row mgz-hidden-xl mgz-hidden-lg full_width_row"><div class="mgz-element-inner i80478t-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax i80478t-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="axe2vge mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner axe2vge-s"><div class="b93l6fd mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner b93l6fd-s"><p style="text-align: center;"><strong><span style="font-size: 30px; color: #0a1730;">Speed is not just a number, it’s a formula to success </span></strong></p></div></div><div class="adg8j6k mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner adg8j6k-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 400;">Tuning your Magento 2 performance and increasing its speed directly affects your traffic and sales. See how key business metrics will change:</span></p></div></div><div class="woo125m mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner woo125m-s"><div class="inner-content mgz-container"><div class="gsb76wt mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner gsb76wt-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax gsb76wt-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="eh5gseo mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner eh5gseo-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/catalog/services/magento_optimization_service/conversion_numbers.png" alt="conversion_numbers" width="80" height="80" title="" /></div></div></div></div><div class="ifb7q89 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ifb7q89-s"><p style="text-align: center;"><strong><span style="font-size: 18px; color: #0a1730;">1 second improvement →<br /></span><span style="font-size: 18px; color: #d028d3;"> 2% boost in conversions</span></strong></p></div></div><div class="itfmnv3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner itfmnv3-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">According to HubSpot, website conversion rates drop by an average of 2.11% with each additional second of load time.</span></p></div></div></div></div><div class="b8igr3h mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner b8igr3h-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax b8igr3h-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="yve7ary mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner yve7ary-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/catalog/services/magento_optimization_service/bounce_rate_numbers.png" alt="bounce_rate_numbers" width="80" height="80" title="" /></div></div></div></div><div class="m1jpwvh mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner m1jpwvh-s"><p style="text-align: center;"><strong><span style="font-size: 18px; color: #0a1730;">2 seconds improvement →<br /></span><span style="font-size: 18px; color: #d028d3;"> 32% bounce rate decrease</span></strong></p></div></div><div class="mjgka30 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner mjgka30-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Google reports that bounce rates increase by 32% when page load time increases from 1 second to 3 seconds.</span></p></div></div></div></div><div class="cm5vyph mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner cm5vyph-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax cm5vyph-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="e5eu08c mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner e5eu08c-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/catalog/services/magento_optimization_service/organic_numbers.png" alt="organic_numbers" width="80" height="80" title="" /></div></div></div></div><div class="tn4v95m mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner tn4v95m-s"><p style="text-align: center;"><strong><span style="font-size: 18px; color: #0a1730;">Entering Google green zone →<br /></span><span style="font-size: 18px; color: #d028d3;">non-stop organic traffic growth</span></strong></p></div></div><div class="i50syax mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner i50syax-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">SEO strategy also matters, but on average our clients get a 30% increase just by improving performance.</span></p></div></div></div></div></div></div></div><div class="bhklp1q mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner bhklp1q-s"><div class="inner-content mgz-container"><div class="bhx851g mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner bhx851g-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax bhx851g-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="bkf1u0b mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner bkf1u0b-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/catalog/services/magento_optimization_service/loyalty_numbers.png" alt="loyalty_numbers" width="80" height="80" title="" /></div></div></div></div><div class="qojk1wy mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner qojk1wy-s"><p style="text-align: center;"><strong><span style="font-size: 18px; color: #0a1730;">1 second improvement →<br /></span><span style="font-size: 18px; color: #d028d3;"> 16% increase in customer satisfaction</span></strong></p></div></div><div class="yhhqpbk mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner yhhqpbk-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Slow Magento 2 speed affects loyalty as well: as specified in the research, a one-second delay in loading can reduce customer satisfaction by 16%.</span></p></div></div></div></div><div class="ewemwe3 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner ewemwe3-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax ewemwe3-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="rbn08v7 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner rbn08v7-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/catalog/services/magento_optimization_service/reputation_numbers.png" alt="reputation_numbers" width="80" height="80" title="" /></div></div></div></div><div class="u6w0r3c mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner u6w0r3c-s"><p style="text-align: center;"><strong><span style="font-size: 18px; color: #0a1730;">Stable performance =<br /></span><span style="font-size: 18px; color: #d028d3;">enhanced brand reputation</span></strong></p></div></div><div class="cn3wpbj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner cn3wpbj-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Customers become more demanding, and 46% of them will never visit a website again if they’ve experienced poor performance.</span></p></div></div></div></div><div class="krva4se mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner krva4se-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax krva4se-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="nsafqyu mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner nsafqyu-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/catalog/services/magento_optimization_service/checkout_numbers.png" alt="checkout_numbers" width="80" height="80" title="" /></div></div></div></div><div class="aw8kyx0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner aw8kyx0-s"><p style="text-align: center;"><strong><span style="font-size: 18px; color: #0a1730;">1 second improvement on checkout →</span><span style="font-size: 18px; color: #d028d3;"> 7% increase in complete purchases</span></strong></p></div></div><div class="dg30xj7 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner dg30xj7-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Bolt reports that each second of page load time is correlated with a 7% decline in conversions.</span></p></div></div></div></div></div></div></div><div class="yraswj7 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner yraswj7-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 400;">Want to know how fast your site loads and how well Google rates its overall performance? <br />Click below to check your website’s current score in PageSpeed Insights and uncover key areas for optimization. &#128071;</span></p></div></div><div class="kq1jhkr mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner kq1jhkr-s"><p style="text-align: center;"><a href="https://pagespeed.web.dev/" target="blank" rel="nofollow" data-promo-id="button-test-my-website" data-promo-name="Test My Website in Page Speed Insights Button" data-promo-creative="test_my_website_block" data-promo-position="test_website_performance"><button class="action primary button-full">TEST MY WEBSITE</button></a></p></div></div><div class="qkaaec3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner qkaaec3-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 400;">A lot to optimize? We’re here to help! &#128640;</span></p></div></div></div></div></div></div></div><div class="eydrvyw mgz-element mgz-element-row mgz-hidden-xl mgz-hidden-lg full_width_row"><div class="mgz-element-inner eydrvyw-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax eydrvyw-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="s8mpfgf mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner s8mpfgf-s"><div class="rvnqily mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner rvnqily-s"><p style="text-align: center;"><strong><span style="font-size: 30px; color: #0a1730;">All-inclusive Magento optimization<br />with a focus on business requirements </span></strong></p></div></div><div class="fpx4lju mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner fpx4lju-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 400;">It’s easy to get a 100 score for pages with no content, but will those pages convert? For us, no matter how much extra functionality you have — we know how to make your store enter the green zone and keep all UX/UI improvements. <br /><br />Our performance optimization services for Magento include: </span></p></div></div><div class="wcnxcft mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner wcnxcft-s"><div class="inner-content mgz-container"><div class="l584y5l mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner l584y5l-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax l584y5l-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="yygsvhw mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner yygsvhw-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/catalog/services/magento_optimization_service/media-compression-requirement-new.png" alt="media-compression-requirement-new" width="60" height="60" title="" /></div></div></div></div><div class="jd9kqpc mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner jd9kqpc-s"><p style="text-align: center;"><strong><span style="font-size: 16px; color: #0a1730;">Media compression</span></strong></p></div></div></div></div><div class="k2p4t4x mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner k2p4t4x-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax k2p4t4x-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="j455y07 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner j455y07-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/catalog/services/magento_optimization_service/caching-configuration-requirement-new.png" alt="caching-configuration-requirement-new" width="60" height="60" title="" /></div></div></div></div><div class="kar2jxc mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner kar2jxc-s"><p style="text-align: center;"><strong><span style="font-size: 16px; color: #0a1730;">Caching configuration</span></strong></p></div></div></div></div><div class="jc2wj5l mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner jc2wj5l-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax jc2wj5l-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="nb7e29b mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner nb7e29b-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/catalog/services/magento_optimization_service/code-optimization-requirement-new.png" alt="code-optimization-requirement-new" width="60" height="60" title="" /></div></div></div></div><div class="mn6q8me mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner mn6q8me-s"><p style="text-align: center;"><strong><span style="font-size: 16px; color: #0a1730;">Code optimization</span></strong></p></div></div></div></div><div class="lvw5nx3 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner lvw5nx3-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax lvw5nx3-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="g0u7tiv mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner g0u7tiv-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/catalog/services/magento_optimization_service/theme-style-optimization-requirement-new.png" alt="theme-style-optimization-requirement-new" width="60" height="60" title="" /></div></div></div></div><div class="s9lrbrr mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner s9lrbrr-s"><p style="text-align: center;"><strong><span style="font-size: 16px; color: #0a1730;">Theme and styles optimization</span></strong></p></div></div></div></div><div class="s6oa08k mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner s6oa08k-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax s6oa08k-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="m3agj3d mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner m3agj3d-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/catalog/services/magento_optimization_service/database-and-server-optimization-requirement-new.png" alt="database-and-server-optimization-requirement-new" width="60" height="60" title="" /></div></div></div></div><div class="ofccu9d mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ofccu9d-s"><p style="text-align: center;"><strong><span style="font-size: 16px; color: #0a1730;">Magento database and server optimization</span></strong></p></div></div></div></div><div class="yi1kkv7 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner yi1kkv7-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax yi1kkv7-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="wcsbk3r mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner wcsbk3r-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/catalog/services/magento_optimization_service/third-party-magento-extensions-requirement-new.png" alt="third-party-magento-extensions-requirement-new" width="60" height="60" title="" /></div></div></div></div><div class="jwxyd4g mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner jwxyd4g-s"><p style="text-align: center;"><strong><span style="font-size: 16px; color: #0a1730;">Third-party Magento extensions optimization</span></strong></p></div></div></div></div></div></div></div><div class="eo6s99q mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner eo6s99q-s"><div class="inner-content mgz-container"><div class="sals52b mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner sals52b-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax sals52b-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="aigpous mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner aigpous-s"><p style="text-align: center;"><a href="#optimization_service_quote"><button class="action primary button-full">GET A QUOTE</button></a></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="hpu3uwf mgz-element mgz-element-row mgz-hidden-xl mgz-hidden-lg full_width_row"><div class="mgz-element-inner hpu3uwf-s"><div data-background-type="image" data-parallax-image-background-position="right bottom" class="mgz-parallax hpu3uwf-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="d9cei8b mgz-element mgz-element-column mgz-col-md-8"><div class="mgz-element-inner d9cei8b-s"><div class="r5i95v1 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner r5i95v1-s"><p style="text-align: left;"><strong><span style="font-size: 24px; color: #0f31b7; line-height: 29.02px;">Get a Comprehensive <br />Performance Audit for Free </span></strong></p></div></div><div class="pdq1u48 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner pdq1u48-s"><p style="text-align: left;"><span style="font-size: 16px; color: #021833; line-height: 24px;">Choose our team to optimize your store based on the performance audit recommendations, and we’ll deduct the audit preparation cost from your final price.</span></p></div></div><div class="hd58yi2 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hd58yi2-s"><p style="text-align: left;"><strong><span style="font-size: 18px; color: #021833; line-height: 26px;">Don’t delay — take this exclusive chance while it lasts!</span></strong></p></div></div><div class="d7o8f6m mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner d7o8f6m-s"><p style="text-align: left;"><a href="#optimization_service_quote" data-promo-id="button-free-performance-audit-service" data-promo-name="Free Performance Audit Test" data-promo-creative="free_performance_audit_block" data-promo-position="request_free_audit"><button class="action secondary button-full">REQUEST HERE</button></a></p></div></div></div></div></div></div></div><div class="irtecfx mgz-element mgz-element-row mgz-hidden-xl mgz-hidden-lg full_width_row"><div class="mgz-element-inner irtecfx-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax irtecfx-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="qpfcxxn mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner qpfcxxn-s"><div class="uipcnr0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner uipcnr0-s"><p style="text-align: center;"><strong><span style="font-size: 30px; color: #0a1730;">Proven Magento optimization workflow we use</span></strong></p></div></div><div class="m0sbee3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner m0sbee3-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 500;">Our full-cycle Magento speed optimization services include 4 key steps to achieve the expected result:</span></p></div></div><div class="ytyov3t mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner ytyov3t-s"><div class="inner-content mgz-container"><div class="cvxevtj mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner cvxevtj-s"><div class="sg81ba1 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner sg81ba1-s"><p><strong><span style="font-size: 18px; color: #0a1730; weight: 700;">Step 1. Improvement plan </span></strong></p></div></div><div class="o1211mt mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner o1211mt-s"><p><span style="font-size: 14px; color: #304265; weight: 400;">The journey to optimized performance starts by understanding your business requirements, identifying key pain points, and defining success metrics. This information helps us properly conduct a deep technical audit of your Magento 2 performance to find out what issues exist and how to cope with them. After the audit, we’ll prepare a detailed report with actionable recommendations and time estimates to implement them. </span></p></div></div></div></div></div></div></div><div class="a8dg1fd mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner a8dg1fd-s"><div class="inner-content mgz-container"><div class="itfh8ai mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner itfh8ai-s"><div class="ng3weus mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ng3weus-s"><p><strong><span style="font-size: 18px; color: #0a1730; weight: 700;">Step 2. Plan approval</span></strong></p></div></div><div class="syqpocp mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner syqpocp-s"><p><span style="font-size: 14px; color: #304265; weight: 400;">After the audit, you can coordinate your next steps and choose the most cost and time-effective approach for you:</span></p><ul><li><span style="font-size: 14px; color: #304265; weight: 400;">We can work on the whole list of recommendations and do full technical optimization of your website;</span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">We can help you outline the most critical points and work on them only;</span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">You can work with the list of recommendations and implement those changes by using your in-house resources.</span></li> </ul><p><span style="font-size: 14px; color: #304265; weight: 400;">Even though we recommend doing full optimization within our team, we are open to any scope suggestions that will be comfortable for you. </span></p></div></div></div></div></div></div></div><div class="hqb8y0x mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner hqb8y0x-s"><div class="inner-content mgz-container"><div class="lgtwo0g mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner lgtwo0g-s"><div class="y2vchpy mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner y2vchpy-s"><p><strong><span style="font-size: 18px; color: #0a1730; weight: 700;">Step 3. Development and implementation</span></strong></p></div></div><div class="f26dg4g mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner f26dg4g-s"><p><span style="font-size: 14px; color: #304265; weight: 400;">When the scope is ready, we immediately start full-cycle optimization. We guarantee safety and a smooth step-by-step implementation: each improvement is deployed on the staging site first so that you could see the result and only after your approval we move the changes to production. </span></p></div></div></div></div></div></div></div><div class="a28eupb mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner a28eupb-s"><div class="inner-content mgz-container"><div class="sgox2p0 mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner sgox2p0-s"><div class="y3x2evf mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner y3x2evf-s"><p><strong><span style="font-size: 18px; color: #0a1730; weight: 700;">Step 4. Warranty and support</span></strong></p></div></div><div class="vc1ut4a mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner vc1ut4a-s"><p><span style="font-size: 14px; color: #304265; weight: 400;">Our cooperation does not end with the last improvement. We want to make sure that Magento 2 performance optimization will help your business in achieving the desired goals. We provide a free 2-month guarantee and support. Contact us anytime — we are always ready to help.</span></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="ywia1dj mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner ywia1dj-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax ywia1dj-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="huydckt mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner huydckt-s"><div class="jrcclqx mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner jrcclqx-s"><h2 style="text-align: center;"><strong><span style="font-size: 36px; color: #0a1730;">All-inclusive Magento optimization<br />with a focus on business requirements </span></strong></h2></div></div><div class="by3pb4n mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner by3pb4n-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 400;">It’s easy to get a 100 score for pages with no content, but will those pages convert? For us, no matter how much extra functionality you have — we know how to make your store enter the green zone and keep all UX/UI improvements. <br /><br />Our performance optimization services for Magento include: </span></p></div></div><div class="o1jmev0 mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner o1jmev0-s"><div class="inner-content mgz-container"><div class="mw4gn5i mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner mw4gn5i-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax mw4gn5i-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="bhlsge5 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner bhlsge5-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/catalog/services/magento_optimization_service/media-compression-requirement-new.png" alt="media-compression-requirement-new" width="60" height="60" title="" /></div></div></div></div><div class="n9n1wuh mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner n9n1wuh-s"><p style="text-align: center;"><strong><span style="font-size: 16px; color: #0a1730;">Media compression</span></strong></p></div></div></div></div><div class="lfwapdp mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner lfwapdp-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax lfwapdp-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="xyt0a5l mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner xyt0a5l-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/catalog/services/magento_optimization_service/caching-configuration-requirement-new.png" alt="caching-configuration-requirement-new" width="60" height="60" title="" /></div></div></div></div><div class="d5ln1em mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner d5ln1em-s"><p style="text-align: center;"><strong><span style="font-size: 16px; color: #0a1730;">Caching configuration</span></strong></p></div></div></div></div><div class="jv1rfsh mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner jv1rfsh-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax jv1rfsh-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="ob3e130 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner ob3e130-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/catalog/services/magento_optimization_service/code-optimization-requirement-new.png" alt="code-optimization-requirement-new" width="60" height="60" title="" /></div></div></div></div><div class="humfhlc mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner humfhlc-s"><p style="text-align: center;"><strong><span style="font-size: 16px; color: #0a1730;">Code optimization</span></strong></p></div></div></div></div><div class="s4rol3r mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner s4rol3r-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax s4rol3r-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="nrbf4nj mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner nrbf4nj-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/catalog/services/magento_optimization_service/theme-style-optimization-requirement-new.png" alt="theme-style-optimization-requirement-new" width="60" height="60" title="" /></div></div></div></div><div class="o8p690c mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner o8p690c-s"><p style="text-align: center;"><strong><span style="font-size: 16px; color: #0a1730;">Theme and styles optimization</span></strong></p></div></div></div></div><div class="nxpfru2 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner nxpfru2-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax nxpfru2-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="as6ir7a mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner as6ir7a-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/catalog/services/magento_optimization_service/database-and-server-optimization-requirement-new.png" alt="database-and-server-optimization-requirement-new" width="60" height="60" title="" /></div></div></div></div><div class="ih4uv1j mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ih4uv1j-s"><p style="text-align: center;"><strong><span style="font-size: 16px; color: #0a1730;">Magento database and server optimization</span></strong></p></div></div></div></div><div class="vu0gaaw mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner vu0gaaw-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax vu0gaaw-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="og47sq8 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner og47sq8-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/catalog/services/magento_optimization_service/third-party-magento-extensions-requirement-new.png" alt="third-party-magento-extensions-requirement-new" width="60" height="60" title="" /></div></div></div></div><div class="nb1n8qo mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner nb1n8qo-s"><p style="text-align: center;"><strong><span style="font-size: 16px; color: #0a1730;">Third-party Magento extensions optimization</span></strong></p></div></div></div></div></div></div></div><div class="mwsvpdp mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner mwsvpdp-s"><div class="inner-content mgz-container"><div class="rgev4k0 mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner rgev4k0-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax rgev4k0-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="gbv1wrv mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner gbv1wrv-s"><p style="text-align: center;"><a href="#optimization_service_quote"><button class="action primary button-full">GET A QUOTE</button></a></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="jurw026 mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner jurw026-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax jurw026-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="gak3yhc mgz-element mgz-element-column mgz-col-md-8"><div class="mgz-element-inner gak3yhc-s"><div class="gxkpqub mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner gxkpqub-s"><p style="text-align: left;"><strong><span style="font-size: 36px; color: #0f31b7; line-height: 43.2px;">Get a Comprehensive <br />Performance Audit for Free </span></strong></p></div></div><div class="t22f58b mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner t22f58b-s"><p style="text-align: left;"><span style="font-size: 16px; color: #021833; line-height: 24px;">Choose our team to optimize your store based <br />on the performance audit recommendations, <br />and we’ll deduct the audit preparation cost from your final price.</span></p></div></div><div class="qtw07gj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner qtw07gj-s"><p style="text-align: left;"><strong><span style="font-size: 20px; color: #021833; line-height: 30px;">Don’t delay — take this exclusive chance while it lasts!</span></strong></p></div></div><div class="pfa2nib mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner pfa2nib-s"><p style="text-align: left;"><a href="#optimization_service_quote" data-promo-id="button-free-performance-audit-service" data-promo-name="Free Performance Audit Test" data-promo-creative="free_performance_audit_block" data-promo-position="request_free_audit"><button class="action secondary button-full">REQUEST HERE</button></a></p></div></div></div></div></div></div></div><div class="yire0o8 mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner yire0o8-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax yire0o8-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="onyaxo9 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner onyaxo9-s"><div class="c7mki4v mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner c7mki4v-s"><h2 style="text-align: center;"><strong><span style="font-size: 36px; color: #0a1730;">Proven Magento optimization workflow we use</span></strong></h2></div></div><div class="pjxhklg mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner pjxhklg-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 500;">Our full-cycle Magento speed optimization services include 4 key steps to achieve the expected result:</span></p></div></div><div class="yb8wrix mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner yb8wrix-s"><div class="inner-content mgz-container"><div class="weet2mv mgz-element mgz-element-column mgz-col-md-6 mgz-hidden-md mgz-hidden-sm mgz-hidden-xs"><div class="mgz-element-inner weet2mv-s"><div class="egjk8p4 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner egjk8p4-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/catalog/services/magento_optimization_service/step-1-technical-audit.png" alt="step-1-technical-audit" width="445" height="300" title="" /></div></div></div></div></div></div><div class="oy0q8hm mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner oy0q8hm-s"><div class="xdexdw1 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner xdexdw1-s"><p><strong><span style="font-size: 24px; color: #0a1730; weight: 700;"><span style="color: #d028d3;">Step 1.</span> Improvement plan </span></strong></p></div></div><div class="h1ha6l4 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner h1ha6l4-s"><p><span style="font-size: 16px; color: #304265; weight: 400;">The journey to optimized performance starts by understanding your business requirements, identifying key pain points, and defining success metrics. This information helps us properly conduct a deep technical audit of your Magento 2 performance to find out what issues exist and how to cope with them. After the audit, we’ll prepare a detailed report with actionable recommendations and time estimates to implement them. </span></p></div></div></div></div></div></div></div><div class="s74vgsu mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner s74vgsu-s"><div class="inner-content mgz-container"><div class="wbr2j08 mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner wbr2j08-s"><div class="b2wgn3r mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner b2wgn3r-s"><p><strong><span style="font-size: 24px; color: #0a1730; weight: 700;"><span style="color: #d028d3;">Step 2.</span> Plan approval</span></strong></p></div></div><div class="nrmcu5h mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner nrmcu5h-s"><p><span style="font-size: 16px; color: #304265; weight: 400;">After the audit, you can coordinate your next steps and choose the most cost and time-effective approach for you:</span></p><ul><li><span style="font-size: 16px; color: #304265; weight: 400;">We can work on the whole list of recommendations and do full technical optimization of your website;</span></li> <li><span style="font-size: 16px; color: #304265; weight: 400;">We can help you outline the most critical points and work on them only;</span></li> <li><span style="font-size: 16px; color: #304265; weight: 400;">You can work with the list of recommendations and implement those changes by using your in-house resources.</span></li> </ul><p><span style="font-size: 16px; color: #304265; weight: 400;">Even though we recommend doing full optimization within our team, we are open to any scope suggestions that will be comfortable for you. </span></p></div></div></div></div><div class="j4a1u3m mgz-element mgz-element-column mgz-col-md-6 mgz-hidden-md mgz-hidden-sm mgz-hidden-xs"><div class="mgz-element-inner j4a1u3m-s"><div class="natb5mw mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner natb5mw-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/catalog/services/magento_optimization_service/step-2-plan-approval.png" alt="step-2-plan-approval" width="445" height="300" title="" /></div></div></div></div></div></div></div></div></div><div class="tm5wqi1 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner tm5wqi1-s"><div class="inner-content mgz-container"><div class="l04a0fy mgz-element mgz-element-column mgz-col-md-6 mgz-hidden-md mgz-hidden-sm mgz-hidden-xs"><div class="mgz-element-inner l04a0fy-s"><div class="k4nipjj mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner k4nipjj-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/catalog/services/magento_optimization_service/step-3-development-and-implementation.png" alt="step-3-development-and-implementation" width="445" height="300" title="" /></div></div></div></div></div></div><div class="sl2l2fl mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner sl2l2fl-s"><div class="pop97cj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner pop97cj-s"><p><strong><span style="font-size: 24px; color: #0a1730; weight: 700;"><span style="color: #d028d3;">Step 3.</span> Development and implementation</span></strong></p></div></div><div class="hwm832k mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hwm832k-s"><p><span style="font-size: 16px; color: #304265; weight: 400;">When the scope is ready, we immediately start full-cycle optimization. We guarantee safety and a smooth step-by-step implementation: each improvement is deployed on the staging site first so that you could see the result and only after your approval we move the changes to production. </span></p></div></div></div></div></div></div></div><div class="acvywav mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner acvywav-s"><div class="inner-content mgz-container"><div class="atpw2w7 mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner atpw2w7-s"><div class="h6874fw mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner h6874fw-s"><p><strong><span style="font-size: 24px; color: #0a1730; weight: 700;"><span style="color: #d028d3;">Step 4.</span> Warranty and support</span></strong></p></div></div><div class="u9mgu4d mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner u9mgu4d-s"><p><span style="font-size: 16px; color: #304265; weight: 400;">Our cooperation does not end with the last improvement. We want to make sure that Magento 2 performance optimization will help your business in achieving the desired goals. We provide a free 2-month guarantee and support. Contact us anytime — we are always ready to help.</span></p></div></div></div></div><div class="kcguvj8 mgz-element mgz-element-column mgz-col-md-6 mgz-hidden-md mgz-hidden-sm mgz-hidden-xs"><div class="mgz-element-inner kcguvj8-s"><div class="hwofoy5 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner hwofoy5-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/catalog/services/magento_optimization_service/step-4-warranty-and-support.png" alt="step-4-warranty-and-support" width="445" height="300" title="" /></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="av2sidh mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner av2sidh-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax av2sidh-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="xpuqf0x mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner xpuqf0x-s"><div class="nqqibl0 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner nqqibl0-s"><div class="inner-content mgz-container"><div class="mhkv1w2 mgz-element mgz-element-column mgz-col-md-6 mgz-hidden-md mgz-hidden-sm mgz-hidden-xs"><div class="mgz-element-inner mhkv1w2-s"><div class="w0o23yv mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner w0o23yv-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/catalog/services/magento_optimization_service/optimization_example.png" alt="optimization_example" title="" /></div></div></div></div></div></div><div class="u1m5vg7 mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner u1m5vg7-s"><div class="yiddg52 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner yiddg52-s"><h2><strong><span style="font-size: 36px; color: #ffffff; weight: 700;">Performance optimization examples </span></strong></h2></div></div><div class="p7bstqa mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner p7bstqa-s pbuilder-special-list-star"><p><span style="font-size: 16px; color: #ffffff; weight: 400;">Below are examples of websites we've successfully optimized. These examples demonstrate the significant improvements in speed and efficiency that our optimization service can deliver.</span></p></div></div><div class="yyw5c5g mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner yyw5c5g-s pbuilder-special-list-star"><ul><li><span style="font-size: 18px; color: #ffffff;"><strong>reliableparts.com</strong></span></li> <li><span style="font-size: 18px; color: #ffffff;"><strong>transformagency.com</strong></span></li> <li><span style="font-size: 18px; color: #ffffff;"><strong>amasty.com</strong></span></li> </ul></div></div></div></div></div></div></div></div></div></div></div></div><div class="vjyn0i1 mgz-element mgz-element-row mgz-hidden-xl mgz-hidden-lg full_width_row"><div class="mgz-element-inner vjyn0i1-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax vjyn0i1-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="ptdrgpm mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner ptdrgpm-s"><div class="wkkk51d mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner wkkk51d-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/catalog/services/magento_optimization_service/optimization_example.png" alt="optimization_example" title="" /></div></div></div></div><div class="aqkctm1 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner aqkctm1-s"><p style="text-align: center;"><strong><span style="font-size: 24px; color: #ffffff; weight: 700;">Performance optimization examples </span></strong></p></div></div><div class="yqb91b7 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner yqb91b7-s"><p style="text-align: left;"><span style="font-size: 16px; color: #ffffff; weight: 400;">Below are examples of websites we've successfully optimized. These examples demonstrate the significant improvements in speed and efficiency that our optimization service can deliver.</span></p></div></div><div class="u8lkkj9 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner u8lkkj9-s"><p><span style="font-size: 16px; color: #ffffff;"><strong> → reliableparts.com</strong></span></p><p><span style="font-size: 16px; color: #ffffff;"><strong> → transformagency.com</strong></span></p><p><span style="font-size: 16px; color: #ffffff;"><strong> → amasty.com</strong></span></p></div></div></div></div></div></div></div><div class="ctew5fv mgz-element mgz-element-row mgz-hidden-xl mgz-hidden-lg full_width_row"><div class="mgz-element-inner ctew5fv-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax ctew5fv-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="ov7xlej mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner ov7xlej-s"><div class="a7t7hfg mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner a7t7hfg-s"><p style="text-align: center;"><strong><span style="font-size: 30px; color: #ffffff;">Magento optimization <br />services we offer </span></strong></p></div></div><div class="jml6yqe mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner jml6yqe-s"><p style="text-align: center;"><span style="font-size: 18px; color: #ffffff; weight: 500;">Consider our other optimization services to comprehensively improve your website performance: </span></p></div></div><div class="ws9dd7p mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner ws9dd7p-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax ws9dd7p-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="oo5qs8l mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner oo5qs8l-s"><div class="y6khwkg mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner y6khwkg-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/catalog/category/magento-services-category/magento-performance-audit-icon.png" alt="magento-performance-audit-icon" width="150" height="150" title="" /></div></div></div></div></div></div><div class="mlk51r5 mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner mlk51r5-s"><div class="hfwr6q1 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hfwr6q1-s"><h3><span style="font-size: 18px;">Magento Performance Audit</span></h3><p>Let Magento professionals conduct an in-depth analysis of your website performance to find the existing issues and offer solutions to fix them.</p></div></div></div></div><div class="nrk8vri mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner nrk8vri-s"><div class="smncoiu mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner smncoiu-s"><p style="text-align: center;"><a href="https://amasty.com/magento-performance-audit.html"><button class="action primary">LEARN MORE</button></a></p></div></div></div></div></div></div></div><div class="foum8hg mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner foum8hg-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax foum8hg-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="a988ex8 mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner a988ex8-s"><div class="mt8f3eg mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner mt8f3eg-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/catalog/category/magento-services-category/seo-service-icon.png" alt="seo-service-icon" width="150" height="150" title="" /></div></div></div></div></div></div><div class="hrtrs3p mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner hrtrs3p-s"><div class="wp9pc9g mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner wp9pc9g-s"><h3><span style="font-size: 18px;">Magento SEO Services</span></h3><p><span>Get a winning SEO strategy to maintain your website fully optimized for search engines and reach top positions in Google search.</span></p></div></div></div></div><div class="ggtfrrx mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner ggtfrrx-s"><div class="ulv0g1c mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ulv0g1c-s"><p style="text-align: center;"><a href="https://amasty.com/magento-seo-services.html"><button class="action primary">LEARN MORE</button></a></p></div></div></div></div></div></div></div><div class="v2om91a mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner v2om91a-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax v2om91a-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="vps1x63 mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner vps1x63-s"><div class="mub5yyw mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner mub5yyw-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/catalog/category/magento-services-category/website-ui-ux-_audit-icon.png" alt="website-ui-ux-_audit-icon" width="150" height="150" title="" /></div></div></div></div></div></div><div class="pwio0qx mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner pwio0qx-s"><div class="b7esggq mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner b7esggq-s"><h3 style="text-align: center;"><span style="font-size: 18px;">Website UI\UX Audit</span></h3><p style="text-align: center;"><span>Benefit from valuable recommendations on how to improve your website usability to achieve a higher conversion rate.</span></p></div></div></div></div><div class="hlc7621 mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner hlc7621-s"><div class="nx9j46i mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner nx9j46i-s"><p style="text-align: center;"><a href="https://amasty.com/website-ui-ux-audit.html"><button class="action primary">LEARN MORE</button></a></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="olpm0g2 mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner olpm0g2-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax olpm0g2-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="t0nxuno mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner t0nxuno-s"><div class="l4qhm0o mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner l4qhm0o-s"><h2 style="text-align: center;"><strong><span style="font-size: 36px; color: #ffffff;">Magento optimization services we offer </span></strong></h2></div></div><div class="hio3vqv mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hio3vqv-s"><p style="text-align: center;"><span style="font-size: 18px; color: #ffffff; weight: 500;">Consider our other optimization services to comprehensively improve your website performance: </span></p></div></div><div class="kcakaw4 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner kcakaw4-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax kcakaw4-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="woeekn9 mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner woeekn9-s"><div class="f5vdxlg mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner f5vdxlg-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/catalog/category/magento-services-category/magento-performance-audit-icon.png" alt="magento-performance-audit-icon" width="150" height="150" title="" /></div></div></div></div></div></div><div class="us801xf mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner us801xf-s"><div class="smqfuvo mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner smqfuvo-s"><h3><span style="font-size: 18px;">Magento Performance Audit</span></h3><p>Let Magento professionals conduct an in-depth analysis of your website performance to find the existing issues and offer solutions to fix them.</p></div></div></div></div><div class="bvaal96 mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner bvaal96-s"><div class="nl89rhg mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner nl89rhg-s"><p style="text-align: center;"><a href="https://amasty.com/magento-performance-audit.html"><button class="action primary">LEARN MORE</button></a></p></div></div></div></div></div></div></div><div class="ainr8mk mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner ainr8mk-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax ainr8mk-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="or5o9tg mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner or5o9tg-s"><div class="dtr94s7 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner dtr94s7-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/catalog/category/magento-services-category/seo-service-icon.png" alt="seo-service-icon" width="150" height="150" title="" /></div></div></div></div></div></div><div class="o1uwix5 mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner o1uwix5-s"><div class="l7yujql mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner l7yujql-s"><h3><span style="font-size: 18px;">Magento SEO Services</span></h3><p><span>Get a winning SEO strategy to maintain your website fully optimized for search engines and reach top positions in Google search.</span></p></div></div></div></div><div class="d3pal3i mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner d3pal3i-s"><div class="kox0g9p mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner kox0g9p-s"><p style="text-align: center;"><a href="https://amasty.com/magento-seo-services.html"><button class="action primary">LEARN MORE</button></a></p></div></div></div></div></div></div></div><div class="jq6lohp mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner jq6lohp-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax jq6lohp-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="w49fauc mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner w49fauc-s"><div class="utasfvt mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner utasfvt-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/catalog/category/magento-services-category/website-ui-ux-_audit-icon.png" alt="website-ui-ux-_audit-icon" width="150" height="150" title="" /></div></div></div></div></div></div><div class="yp5jtid mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner yp5jtid-s"><div class="s2kaypj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner s2kaypj-s"><h3 style="text-align: left;"><span style="font-size: 18px;">Website UI\UX Audit</span></h3><p style="text-align: left;"><span>Benefit from valuable recommendations on how to improve your website usability to achieve a higher conversion rate.</span></p></div></div></div></div><div class="btj5slj mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner btj5slj-s"><div class="sldt99h mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner sldt99h-s"><p style="text-align: center;"><a href="https://amasty.com/website-ui-ux-audit.html"><button class="action primary">LEARN MORE</button></a></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="s7qgxug mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner s7qgxug-s"><div class="inner-content mgz-container"><div class="knypo36 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner knypo36-s"><div class="rd2jk77 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner rd2jk77-s"><h2 style="text-align: center;"><strong><span style="font-size: 36px; color: #0a1730;">Recent optimization case study: key highlights </span></strong></h2></div></div><div class="an9yk0e mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner an9yk0e-s"><div class="inner-content mgz-container"><div class="ru1faas mgz-element mgz-element-column mgz-col-md-2 mgz-element-column-empty"><div class="mgz-element-inner ru1faas-s"></div></div><div class="pogsb7u mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner pogsb7u-s"><div class="poy5eqd mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner poy5eqd-s"><p style="text-align: left;"><span style="font-size: 14px; color: #304265; weight: 500;">Client Industry: <strong>PC parts</strong> </span></p></div></div></div></div><div class="n2n5x7q mgz-element mgz-element-column mgz-col-md-1"><div class="mgz-element-inner n2n5x7q-s"><div class="i10ffii mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner i10ffii-s"><p style="text-align: left;"><span style="font-size: 14px; color: #304265; weight: 500;">Location: <strong>US</strong></span></p></div></div></div></div><div class="jh4lm8s mgz-element mgz-element-column mgz-col-md-5"><div class="mgz-element-inner jh4lm8s-s"><div class="lbtdos1 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner lbtdos1-s"><p style="text-align: left;"><span style="font-size: 14px; color: #304265; weight: 500;">Services provided: <strong>In-depth Performance Audit &amp; Full-scale Optimization</strong></span></p></div></div></div></div></div></div></div><div class="qk5a2y2 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner qk5a2y2-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/catalog/services/magento_optimization_service/magento-optimization-service-case-study.png" alt="magento-optimization-service-case-study" width="1180" height="464" title="" /></div></div></div></div><div class="hvwxbsi mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner hvwxbsi-s"><div class="inner-content mgz-container"><div class="ewwke49 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner ewwke49-s"><div class="w96gjwj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner w96gjwj-s"><p style="text-align: left;"><strong><span style="font-size: 18px; color: #0a1730;">Сhallenges</span></strong></p><ul><li><span style="font-size: 14px; color: #304265; weight: 400;">Slow loading times: up to 25 seconds for a page</span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">Low conversion rates</span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">Ineffective paid ad due to sluggish speeds</span></li> </ul></div></div></div></div><div class="xxqrhi6 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner xxqrhi6-s"><div class="fye8m49 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner fye8m49-s"><p style="text-align: left;"><strong><span style="font-size: 18px; color: #0a1730;">Solutions </span></strong></p><ul><li><span style="font-size: 14px; color: #304265; weight: 400;">Code optimization: Rewrote site code to resolve audit-identified issues</span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">Faster search: Replaced MySQL with a high-speed search solution</span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">SEO enhancements: Improved site structure, metadata, and more</span></li> </ul></div></div></div></div><div class="e6ig712 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner e6ig712-s"><div class="xeevxvg mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner xeevxvg-s"><p style="text-align: left;"><strong><span style="font-size: 18px; color: #0a1730;">Results</span></strong></p><ul><li><span style="font-size: 14px; color: #304265; weight: 400;">Google PageSpeed Insights: achieved green zone status </span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">6.5x faster load speed</span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">30% increase in Conversion Rates (CR)</span></li> </ul></div></div></div></div></div></div></div></div></div></div></div></div><div class="s1e72t3 mgz-element mgz-element-row mgz-hidden-xl mgz-hidden-lg full_width_row"><div class="mgz-element-inner s1e72t3-s"><div class="inner-content mgz-container"><div class="ik3ljk7 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner ik3ljk7-s"><div class="r70howm mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner r70howm-s"><p style="text-align: center;"><strong><span style="font-size: 24px; color: #0a1730;">Recent optimization case study: key highlights </span></strong></p></div></div><div class="iwuv70i mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner iwuv70i-s"><div class="inner-content mgz-container"><div class="m8qgypp mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner m8qgypp-s"><div class="im4t8t7 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner im4t8t7-s"><p style="text-align: left;"><span style="font-size: 14px; color: #304265; weight: 500;">Client Industry: <strong>PC parts</strong> </span></p><p style="text-align: left;"><span style="font-size: 14px; color: #304265; weight: 500;">Location: <strong>US</strong></span></p><p style="text-align: left;"><span style="font-size: 14px; color: #304265; weight: 500;">Services provided: <strong>In-depth Performance Audit &amp; Full-scale Optimization</strong></span></p></div></div></div></div></div></div></div><div class="q26035i mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner q26035i-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/catalog/services/magento_optimization_service/magento-optimization-service-case-study-mob.png" alt="magento-optimization-service-case-study-mob" width="375.46" height="266.86" title="" /></div></div></div></div><div class="i7wfn52 mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner i7wfn52-s"><div class="inner-content mgz-container"><div class="xlkoaed mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner xlkoaed-s"><div class="nn97v66 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner nn97v66-s"><p style="text-align: left;"><strong><span style="font-size: 18px; color: #0a1730;">Сhallenges</span></strong></p><ul><li><span style="font-size: 14px; color: #304265; weight: 400;">Slow loading times: up to 25 seconds for a page</span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">Low conversion rates</span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">Ineffective paid ad due to sluggish speeds</span></li> </ul></div></div></div></div><div class="tc6tvhm mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner tc6tvhm-s"><div class="fvolb4n mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner fvolb4n-s"><p style="text-align: left;"><strong><span style="font-size: 18px; color: #0a1730;">Solutions </span></strong></p><ul><li><span style="font-size: 14px; color: #304265; weight: 400;">Code optimization: Rewrote site code to resolve audit-identified issues</span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">Faster search: Replaced MySQL with a high-speed search solution</span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">SEO enhancements: Improved site structure, metadata, and more</span></li> </ul></div></div></div></div><div class="trh6he5 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner trh6he5-s"><div class="gd4jy7g mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner gd4jy7g-s"><p style="text-align: left;"><strong><span style="font-size: 18px; color: #0a1730;">Results</span></strong></p><ul><li><span style="font-size: 14px; color: #304265; weight: 400;">Google PageSpeed Insights: achieved green zone status </span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">6.5x faster load speed</span></li> <li><span style="font-size: 14px; color: #304265; weight: 400;">30% increase in Conversion Rates (CR)</span></li> </ul></div></div></div></div></div></div></div></div></div></div></div></div><div class="stwpwd7 mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner stwpwd7-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax stwpwd7-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="hynlc02 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner hynlc02-s"><div class="pdhoa41 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner pdhoa41-s"><div class="inner-content mgz-container"><div class="sx4mywi mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner sx4mywi-s"><div class="hcjgdkc mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hcjgdkc-s"><h2 style="text-align: center;"><strong><span style="font-size: 36px; color: #0a1730;">No empty words, just numbers</span></strong></h2></div></div><div class="sjkva8q mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner sjkva8q-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 500;">We know how to make Magento 2 faster because</span></p></div></div><div class="xk8l2ec mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner xk8l2ec-s"><div class="inner-content mgz-container"><div class="pa5ct10 mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner pa5ct10-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax pa5ct10-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="n4olvj9 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner n4olvj9-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/catalog/services/magento_optimization_service/300_audits.png" alt="300_audits" title="" /></div></div></div></div><div class="v4qiapl mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner v4qiapl-s"><p style="text-align: center;"><span style="font-size: 36px;"><strong><span style="color: #d028d3;">&gt;300</span></strong></span></p></div></div><div class="tibt8k3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner tibt8k3-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Websites have been already analyzed and successfully optimized this year</span></p></div></div></div></div><div class="rh4wt96 mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner rh4wt96-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax rh4wt96-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="mc6mo5r mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner mc6mo5r-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/catalog/services/magento_optimization_service/85_desktop_score.png" alt="85_desktop_score" title="" /></div></div></div></div><div class="mp25ki6 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner mp25ki6-s"><p style="text-align: center;"><span style="font-size: 36px;"><strong><span style="color: #d028d3;">85</span></strong></span></p></div></div><div class="h7nidbq mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner h7nidbq-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Is the average desktop score for the Magento site after we performed the speed optimization service</span></p></div></div></div></div><div class="q4l527q mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner q4l527q-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax q4l527q-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="m8a8sqp mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner m8a8sqp-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/catalog/services/magento_optimization_service/70_mobile_score.png" alt="70_mobile_score" title="" /></div></div></div></div><div class="ridqjux mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ridqjux-s"><p style="text-align: center;"><span style="font-size: 36px;"><strong><span style="color: #d028d3;">70</span></strong></span></p></div></div><div class="vqx0g5l mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner vqx0g5l-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Is the average mobile score, even for highly-customized stores</span></p></div></div></div></div><div class="ki9fk37 mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner ki9fk37-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax ki9fk37-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="nl88fn0 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner nl88fn0-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/catalog/services/magento_optimization_service/1s_ttfb.png" alt="1s_ttfb" title="" /></div></div></div></div><div class="iy3vqb0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner iy3vqb0-s"><p style="text-align: center;"><span style="font-size: 36px;"><strong><span style="color: #d028d3;">&lt;0.5 s</span></strong></span></p></div></div><div class="twbm58d mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner twbm58d-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Is the average time to the first byte loading that our customers get when the project is finished</span></p></div></div></div></div></div></div></div><div class="wo8o1vk mgz-element mgz-child mgz-element-text mgz-hidden-xl mgz-hidden-lg"><div class="mgz-element-inner wo8o1vk-s"><p style="text-align: center;"><span style="font-size: 28px;"><strong><span style="color: #0a1730;">Why do our clients choose us?</span></strong></span></p></div></div><div class="wf1nqya mgz-element mgz-child mgz-element-text mgz-hidden-xl mgz-hidden-lg"><div class="mgz-element-inner wf1nqya-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 500;">For us, it is not just a project — it’s a win-win partnership for non-stop growth. The main benefits of the service that our customers like best are:</span></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="y6p2nyx mgz-element mgz-element-row mgz-hidden-xl mgz-hidden-lg full_width_row"><div class="mgz-element-inner y6p2nyx-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax y6p2nyx-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="idy0lxl mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner idy0lxl-s"><div class="ggmrt6m mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner ggmrt6m-s"><div class="inner-content mgz-container"><div class="b85bx74 mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner b85bx74-s"><div class="y2mo9ki mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner y2mo9ki-s"><p style="text-align: center;"><strong><span style="font-size: 30px; color: #0a1730;">No empty words, just numbers</span></strong></p></div></div><div class="dge5pds mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner dge5pds-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 500;">We know how to make Magento 2 faster because</span></p></div></div><div class="q1qq8ou mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner q1qq8ou-s"><div class="inner-content mgz-container"><div class="kndrwfd mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner kndrwfd-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax kndrwfd-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="je4w52q mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner je4w52q-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/catalog/services/magento_optimization_service/300_audits.png" alt="300_audits" title="" /></div></div></div></div><div class="s7n5gc9 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner s7n5gc9-s"><p style="text-align: center;"><span style="font-size: 36px;"><strong><span style="color: #d028d3;">&gt;300</span></strong></span></p></div></div><div class="nb88y2t mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner nb88y2t-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Websites have been already analyzed and successfully optimized this year</span></p></div></div></div></div><div class="qpq7wyd mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner qpq7wyd-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax qpq7wyd-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="sjcw8ol mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner sjcw8ol-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/catalog/services/magento_optimization_service/85_desktop_score.png" alt="85_desktop_score" title="" /></div></div></div></div><div class="df3lq98 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner df3lq98-s"><p style="text-align: center;"><span style="font-size: 36px;"><strong><span style="color: #d028d3;">85</span></strong></span></p></div></div><div class="issdt5k mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner issdt5k-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Is the average desktop score for the Magento site after we performed the speed optimization service</span></p></div></div></div></div><div class="bxcgsg6 mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner bxcgsg6-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax bxcgsg6-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="ng9shi5 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner ng9shi5-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/catalog/services/magento_optimization_service/70_mobile_score.png" alt="70_mobile_score" title="" /></div></div></div></div><div class="md656ju mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner md656ju-s"><p style="text-align: center;"><span style="font-size: 36px;"><strong><span style="color: #d028d3;">70</span></strong></span></p></div></div><div class="ywauwhf mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ywauwhf-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Is the average mobile score, even for highly-customized stores</span></p></div></div></div></div><div class="e0qp6w0 mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner e0qp6w0-s pbuilder-shadow-highlight"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax e0qp6w0-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="usnpotw mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner usnpotw-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/catalog/services/magento_optimization_service/1s_ttfb.png" alt="1s_ttfb" title="" /></div></div></div></div><div class="mqu89iw mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner mqu89iw-s"><p style="text-align: center;"><span style="font-size: 36px;"><strong><span style="color: #d028d3;">&lt;0.5 s</span></strong></span></p></div></div><div class="scjbjlm mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner scjbjlm-s"><p style="text-align: center;"><span style="font-size: 14px; color: #304265;">Is the average time to the first byte loading that our customers get when the project is finished</span></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="xs3iuu2 mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner xs3iuu2-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax xs3iuu2-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="oafx9hq mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner oafx9hq-s"><div class="n2bee9o mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner n2bee9o-s"><div class="inner-content mgz-container"><div class="ag7p1rp mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner ag7p1rp-s"><div class="caag3ja mgz-element mgz-child mgz-element-text mgz-hidden-md mgz-hidden-sm mgz-hidden-xs"><div class="mgz-element-inner caag3ja-s"><h2 style="text-align: center;"><strong><span style="font-size: 36px; color: #ffffff;">Top world's brands trust us</span></strong></h2></div></div><div class="mwv9a14 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner mwv9a14-s"><div class="inner-content mgz-container"><div class="g0ueju8 mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner g0ueju8-s"><div class="puv50kd mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner puv50kd-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/catalog/services/magento_optimization_service/logo-ebay-1.png" alt="logo-ebay-1" width="98.56" title="" /></div></div></div></div></div></div><div class="ccp36u2 mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner ccp36u2-s"><div class="qhjbx19 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner qhjbx19-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/catalog/services/magento_optimization_service/logo-canon-2.png" alt="logo-canon-2" width="128" title="" /></div></div></div></div></div></div><div class="bff5uwm mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner bff5uwm-s"><div class="dmcpj4a mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner dmcpj4a-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/catalog/services/magento_optimization_service/logo-olympus-3.png" alt="logo-olympus-3" width="143.36" title="" /></div></div></div></div></div></div><div class="am3bfps mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner am3bfps-s"><div class="kmkirg3 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner kmkirg3-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/catalog/services/magento_optimization_service/logo-nestle-4.png" alt="logo-nestle-4" width="128" title="" /></div></div></div></div></div></div><div class="sf9wtn6 mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner sf9wtn6-s"><div class="kva8q9v mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner kva8q9v-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/catalog/services/magento_optimization_service/logo-3m-5.png" alt="logo-3m-5" width="75.26" title="" /></div></div></div></div></div></div><div class="qsynbbm mgz-element mgz-element-column mgz-col-md-2"><div class="mgz-element-inner qsynbbm-s"><div class="a791rbx mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner a791rbx-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/catalog/services/magento_optimization_service/logo-blizzard-6.png" alt="logo-blizzard-6" width="97.28" title="" /></div></div></div></div></div></div></div></div></div><div class="leom4sx mgz-element mgz-child mgz-element-text mgz-hidden-xl mgz-hidden-lg"><div class="mgz-element-inner leom4sx-s"><p style="text-align: center;"><span style="font-size: 28px;"><strong><span style="color: #0a1730;">Why do our clients choose us?</span></strong></span></p></div></div><div class="cnha7iu mgz-element mgz-child mgz-element-text mgz-hidden-xl mgz-hidden-lg"><div class="mgz-element-inner cnha7iu-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 500;">For us, it is not just a project — it’s a win-win partnership for non-stop growth. The main benefits of the service that our customers like best are:</span></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="tciyukg mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner tciyukg-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax tciyukg-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="y78n9nu mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner y78n9nu-s"><div class="hi2mepc mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hi2mepc-s"><h2 style="text-align: center;"><strong><span style="font-size: 36px; color: #ffffff;">What our clients say</span></strong></h2></div></div></div></div><div class="jwiav27 mgz-element mgz-element-column pbuilder-default-slider-review mgz-col-md-12"><div class="mgz-element-inner jwiav27-s"><div class="fkob2oo mgz-element mgz-child mgz-element-testimonials"><div class="mgz-element-inner fkob2oo-s"><div class="mgz-testimonials mgz-testimonials-type2 mgz-carousel owl-carousel mgz-carousel-nav-position-center_split mgz-carousel-nav-size-normal" data-mage-init='{"Magezon_Builder/js/carousel":{"item_xl":"1","item_lg":"1","item_md":"1","item_sm":"1","item_xs":"1","nav":true,"dots":false,"autoplayHoverPause":true,"autoplay":true,"autoplayTimeout":"5000","lazyLoad":true,"loop":true,"margin":0,"autoHeight":false,"rtl":false,"center":false,"slideBy":"1","animateIn":"","animateOut":"","stagePadding":0}}'><div class="mgz-testimonial mgz-testimonial0"><div class="mgz-testimonial-content">"If you're serious about e-commerce, this service is a must-have! Our checkout load time went from 6 seconds down to 1.8 seconds, and overall site speed improved significantly. From the very first consultation, the team was thorough and easy to communicate with."</div><div class="mgz-testimonial-meta"><div class="mgz-testimonial-image"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/catalog/services/magento_optimization_service/olivia-brown-review-photo.png" alt="Olivia Brown" width="80" /></div><div class="mgz-testimonial-details"><div class="mgz-testimonial-name"> Olivia Brown </div></div></div></div><div class="mgz-testimonial mgz-testimonial1"><div class="mgz-testimonial-content">"We struggled with mobile performance, which was hurting our conversion rates. After the optimization, our site’s speed and user experience were transformed in a truly positive way. Highly recommended!"</div><div class="mgz-testimonial-meta"><div class="mgz-testimonial-image"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/catalog/services/magento_optimization_service/daniel-rivera-review-photo.png" alt="Daniel Rivera" width="80" /></div><div class="mgz-testimonial-details"><div class="mgz-testimonial-name"> Daniel Rivera </div></div></div></div><div class="mgz-testimonial mgz-testimonial2"><div class="mgz-testimonial-content">"The performance audit was eye-opening, revealing things we hadn’t even considered. Now that the audit recommendations have been implemented, our site feels so much faster and smoother to browse, and it’s all thanks to the Amasty team's hard work and expertise."</div><div class="mgz-testimonial-meta"><div class="mgz-testimonial-image"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/catalog/services/magento_optimization_service/chris-bennet-review-photo.png" alt="Chris Bennett" width="80" /></div><div class="mgz-testimonial-details"><div class="mgz-testimonial-name"> Chris Bennett </div></div></div></div></div></div></div></div></div></div></div></div><div class="ynjesr4 mgz-element mgz-element-row mgz-hidden-xl mgz-hidden-lg full_width_row"><div class="mgz-element-inner ynjesr4-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax ynjesr4-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="l6ema5s mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner l6ema5s-s"><div class="y6uhjvw mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner y6uhjvw-s"><p style="text-align: center;"><strong><span style="font-size: 24px; color: #ffffff;">What our clients say</span></strong></p></div></div></div></div><div class="cxihd93 mgz-element mgz-element-column pbuilder-default-slider-review mgz-col-md-12"><div class="mgz-element-inner cxihd93-s"><div class="msf83qx mgz-element mgz-child mgz-element-testimonials"><div class="mgz-element-inner msf83qx-s"><div class="mgz-testimonials mgz-testimonials-type2 mgz-carousel owl-carousel mgz-carousel-nav-position-center_split mgz-carousel-nav-size-normal" data-mage-init='{"Magezon_Builder/js/carousel":{"item_xl":"1","item_lg":"1","item_md":"1","item_sm":"1","item_xs":"1","nav":true,"dots":false,"autoplayHoverPause":true,"autoplay":true,"autoplayTimeout":"5000","lazyLoad":true,"loop":true,"margin":0,"autoHeight":false,"rtl":false,"center":false,"slideBy":"1","animateIn":"","animateOut":"","stagePadding":0}}'><div class="mgz-testimonial mgz-testimonial0"><div class="mgz-testimonial-content">"If you're serious about e-commerce, this service is a must-have! Our checkout load time went from 6 seconds down to 1.8 seconds, and overall site speed improved significantly. From the very first consultation, the team was thorough and easy to communicate with."</div><div class="mgz-testimonial-meta"><div class="mgz-testimonial-image"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/catalog/services/magento_optimization_service/olivia-brown-review-photo.png" alt="Olivia Brown" width="80" /></div><div class="mgz-testimonial-details"><div class="mgz-testimonial-name"> Olivia Brown </div></div></div></div><div class="mgz-testimonial mgz-testimonial1"><div class="mgz-testimonial-content">"We struggled with mobile performance, which was hurting our conversion rates. After the optimization, our site’s speed and user experience were transformed in a truly positive way. Highly recommended!"</div><div class="mgz-testimonial-meta"><div class="mgz-testimonial-image"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/catalog/services/magento_optimization_service/daniel-rivera-review-photo.png" alt="Daniel Rivera" width="80" /></div><div class="mgz-testimonial-details"><div class="mgz-testimonial-name"> Daniel Rivera </div></div></div></div><div class="mgz-testimonial mgz-testimonial2"><div class="mgz-testimonial-content">"The performance audit was eye-opening, revealing things we hadn’t even considered. Now that the audit recommendations have been implemented, our site feels so much faster and smoother to browse, and it’s all thanks to the Amasty team's hard work and expertise."</div><div class="mgz-testimonial-meta"><div class="mgz-testimonial-image"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/catalog/services/magento_optimization_service/chris-bennet-review-photo.png" alt="Chris Bennett" width="80" /></div><div class="mgz-testimonial-details"><div class="mgz-testimonial-name"> Chris Bennett </div></div></div></div></div></div></div></div></div></div></div></div><div class="r5r6l5u mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner r5r6l5u-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax r5r6l5u-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="ndkbodq mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner ndkbodq-s"><div class="jgm1c7a mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner jgm1c7a-s"><h2 style="text-align: center;"><strong><span style="font-size: 36px; color: #ffffff;">Related services</span></strong></h2></div></div><div class="pcrwd79 mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner pcrwd79-s"><div class="inner-content mgz-container"><div class="ruabn7b mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner ruabn7b-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax ruabn7b-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="g2rgyxg mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner g2rgyxg-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/catalog/services/magento_optimization_service/shopify-speed-optimization-related.png" alt="shopify-speed-optimization-related" title="" /></div></div></div></div><div class="qtipwib mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner qtipwib-s"><p style="text-align: center;"><strong><span style="font-size: 24px; color: #1a1a1a; weight: 700;">Shopify Speed Optimization </span></strong></p></div></div><div class="danjhy8 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner danjhy8-s"><p style="text-align: center;"><a href="https://amasty.com/shopify-site-speed-optimization-service.html" target="_blank" rel="noopener"><button class="action secondary button-full">EXPLORE</button></a></p></div></div></div></div><div class="dodlarc mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner dodlarc-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax dodlarc-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="rnncujn mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner rnncujn-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/catalog/services/magento_optimization_service/magento-managed-services-related.png" alt="magento-managed-services-related" title="" /></div></div></div></div><div class="oc1ycbk mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner oc1ycbk-s"><p style="text-align: center;"><strong><span style="font-size: 24px; color: #1a1a1a; weight: 700;">Magento Managed Services</span></strong></p></div></div><div class="m6ujkdn mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner m6ujkdn-s"><p style="text-align: center;"><a href="https://amasty.com/managed-magento-service.html" target="_blank" rel="noopener"><button class="action secondary button-full">EXPLORE</button></a></p></div></div></div></div><div class="s7c96pu mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner s7c96pu-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax s7c96pu-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="r8j503k mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner r8j503k-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/catalog/services/magento_optimization_service/magento-support-and-maintenance-related.png" alt="magento-support-and-maintenance-related" title="" /></div></div></div></div><div class="pmn5pnf mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner pmn5pnf-s"><p style="text-align: center;"><strong><span style="font-size: 24px; color: #1a1a1a; weight: 700;">Support and Maintenance</span></strong></p></div></div><div class="qdob02r mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner qdob02r-s"><p style="text-align: center;"><a href="https://amasty.com/magento-2-support-and-maintenance-service.html" target="_blank" rel="noopener"><button class="action secondary button-full">EXPLORE</button></a></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="jjcftdw mgz-element mgz-element-row mgz-hidden-xl mgz-hidden-lg full_width_row"><div class="mgz-element-inner jjcftdw-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax jjcftdw-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="scclk11 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner scclk11-s"><div class="o8la95k mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner o8la95k-s"><p style="text-align: center;"><strong><span style="font-size: 24px; color: #ffffff;">Related services</span></strong></p><p> </p></div></div><div class="vg3fy6x mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner vg3fy6x-s"><div class="inner-content mgz-container"><div class="hab4gel mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner hab4gel-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax hab4gel-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="r1vstiq mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner r1vstiq-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/catalog/services/magento_optimization_service/shopify-speed-optimization-related.png" alt="shopify-speed-optimization-related" title="" /></div></div></div></div><div class="tf3ckoc mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner tf3ckoc-s"><p style="text-align: center;"><strong><span style="font-size: 24px; color: #1a1a1a; weight: 700;">Shopify Speed Optimization </span></strong></p></div></div><div class="pthlsjl mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner pthlsjl-s"><p style="text-align: center;"><a href="https://amasty.com/shopify-site-speed-optimization-service.html" target="_blank" rel="noopener"><button class="action secondary button-full">EXPLORE</button></a></p></div></div></div></div><div class="icvbjal mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner icvbjal-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax icvbjal-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="gve1wt8 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner gve1wt8-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/catalog/services/magento_optimization_service/magento-managed-services-related.png" alt="magento-managed-services-related" title="" /></div></div></div></div><div class="xbdtcgr mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner xbdtcgr-s"><p style="text-align: center;"><strong><span style="font-size: 24px; color: #1a1a1a; weight: 700;">Magento Managed Services</span></strong></p></div></div><div class="oidhlw7 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner oidhlw7-s"><p style="text-align: center;"><a href="https://amasty.com/managed-magento-service.html" target="_blank" rel="noopener"><button class="action secondary button-full">EXPLORE</button></a></p></div></div></div></div><div class="vh2h4cn mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner vh2h4cn-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax vh2h4cn-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="c9vrfso mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner c9vrfso-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/catalog/services/magento_optimization_service/magento-support-and-maintenance-related.png" alt="magento-support-and-maintenance-related" title="" /></div></div></div></div><div class="eb68rqe mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner eb68rqe-s"><p style="text-align: center;"><strong><span style="font-size: 24px; color: #1a1a1a; weight: 700;">Support and Maintenance</span></strong></p></div></div><div class="w1iscpu mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner w1iscpu-s"><p style="text-align: center;"><a href="https://amasty.com/magento-2-support-and-maintenance-service.html" target="_blank" rel="noopener"><button class="action secondary button-full">EXPLORE</button></a></p></div></div></div></div></div></div></div></div></div></div></div></div><div id="optimization_service_quote" class="j3u49wj mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner j3u49wj-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax j3u49wj-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div id="optimization_quote" class="k8em22e mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner k8em22e-s"><div class="cookcf0 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner cookcf0-s"><div class="inner-content mgz-container"><div class="sarqeyf mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner sarqeyf-s"><div class="fmsppem mgz-element mgz-child mgz-element-text mgz-hidden-md mgz-hidden-sm mgz-hidden-xs"><div class="mgz-element-inner fmsppem-s"><h2 style="text-align: center;"><strong><span style="font-size: 36px; color: #0a1730;">Stop killing business because of the slow<br />loading site — start optimization today! </span></strong></h2></div></div><div class="ruy7mr7 mgz-element mgz-child mgz-element-text mgz-hidden-xl mgz-hidden-lg"><div class="mgz-element-inner ruy7mr7-s"><p style="text-align: center;"><strong><span style="font-size: 30px; color: #0a1730;">Stop killing business because of the slow loading site — start optimization today! </span></strong></p></div></div><div class="okl4bjj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner okl4bjj-s"><p style="text-align: center;"><span style="font-size: 18px; color: #304265; weight: 500;">Fill out the form below, and our specialist will contact you within 24 working hours. <br /><br />The first consultation is on us. </span></p></div></div><div class="guc1fgv mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner guc1fgv-s"><div class="inner-content mgz-container"><div class="fb23d5w mgz-element mgz-element-column mgz-col-md-4 mgz-element-column-empty"><div class="mgz-element-inner fb23d5w-s"></div></div><div class="l9msdy9 mgz-element mgz-element-column mgz-col-md-4"><div class="mgz-element-inner l9msdy9-s"><div class="q6eybat mgz-element mgz-child mgz-element-static_block"><div class="mgz-element-inner q6eybat-s"><form class="rendered-form amform-form mb-12 mx-auto group-[.am-dialog-popup]:mb-0 default" id="amform-form-61" action="https://amasty.com/amasty_customform/form/submit/" enctype="multipart/form-data" method="post"><input name="form_key" type="hidden" value="bYmi4vvyFIlDuwwr" /><input name="form_id" type="hidden" value="61" /><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="page161"><!-- 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-61" 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-61">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-61" 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-61">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-61" 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-61">Email</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="number" id="phone-form-61" name="phone" 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="20" required placeholder="Type&#x20;here..." ><label class=" label " for="phone-form-61">Phone with country code</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-61" 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-61">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="initFormEvents61().processSubmit( $refs.page161, $refs.tab161, $event)">GET A QUOTE</button> </div></div></div><!--Validations--><!--Dependencies--><!--Survey--><!--Default values--><!--Init google map--></form></div></div></div></div><div class="qf5qv5x mgz-element mgz-element-column mgz-col-md-4 mgz-element-column-empty"><div class="mgz-element-inner qf5qv5x-s"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="x78d0rx mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner x78d0rx-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax x78d0rx-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="njuv5sa mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner njuv5sa-s"><div class="fricbht mgz-element mgz-element-accordion mgz-element-title-align-center mgz-element-accordion-align-"><div class="mgz-element-inner fricbht-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax fricbht-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="mgz-block"><div class="mgz-block-heading mgz-block-heading-align-center"><h2 class="title">FAQ</h2></div><div class="mgz-block-content"><div class="mgz-panels mgz-panels-fricbht mgz-panels-no-fill-content" data-mage-init='{"Magezon_PageBuilder/js/collapse":{"collapsibleAll": true,"atLeastOneOpen": false,"icon": "","activeIcon": ""}}' data-spacing="0" data-gap="0"><div class="mgz-panel mgz-panel-first "><div class="mgz-panel-heading mgz-text-left mgz-icon-position-left"><h4 class="mgz-panel-heading-title"><a href="#tab-w28mo2y" class="has-icon"><i class="mgz-accoridon-icon-plus "></i> <span>Magento Speed Optimization Services </span></a></h4></div><div class="mgz-panel-body" ><div class="mgz-panel-body-inner"><div class="w28mo2y mgz-element mgz-element-accordion_section"><div class="mgz-element-inner w28mo2y-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax w28mo2y-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="qjg7ynn mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner qjg7ynn-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax qjg7ynn-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="m10f178 mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner m10f178-s"><div class="t6xsol6 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner t6xsol6-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax t6xsol6-p"><div class="lazy-bg mgz-parallax-inner"></div></div><ul><li><span style="color: #304265;">Magneto 2 &amp; 1.9 Speed Optimization.</span></li> <li><span style="color: #304265;"> Magento Store Performance, MySQL &amp; Database Optimization. </span></li> <li><span style="color: #304265;">10+ years of experience in Web Page speed optimization. </span></li> <li><span style="color: #304265;">Guaranteed 90+ Score in Google Page Speed Insight. </span></li> <li><span style="color: #304265;">Guaranteed Less Than 3 secs Load Time in GTmetrix. </span></li> <li><span style="color: #304265;">No break-in functionality and design.</span></li> </ul></div></div></div></div></div></div></div></div></div></div></div></div><div class="mgz-panel "><div class="mgz-panel-heading mgz-text-left mgz-icon-position-left"><h4 class="mgz-panel-heading-title"><a href="#tab-vl64xf4" class="has-icon"><i class="mgz-accoridon-icon-plus "></i> <span>What is Magento 2 performance optimization? </span></a></h4></div><div class="mgz-panel-body" ><div class="mgz-panel-body-inner"><div class="vl64xf4 mgz-element mgz-element-accordion_section"><div class="mgz-element-inner vl64xf4-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax vl64xf4-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="vl4lia6 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner vl4lia6-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax vl4lia6-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="rrdd151 mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner rrdd151-s"><div class="xd1xtrg mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner xd1xtrg-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax xd1xtrg-p"><div class="lazy-bg mgz-parallax-inner"></div></div><p><span style="font-weight: 400; color: #304265;">Magento 2 performance optimization is the activity of improving the speed and efficiency of a Magento 2 e-commerce website. Various techniques such as server optimization, database optimization, code optimization, image resizing, and caching can be involved to reduce a website's load time and reach a better user experience.</span></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="mgz-panel "><div class="mgz-panel-heading mgz-text-left mgz-icon-position-left"><h4 class="mgz-panel-heading-title"><a href="#tab-uelyg9e" class="has-icon"><i class="mgz-accoridon-icon-plus "></i> <span>How to understand that my Magento 2 is slow? </span></a></h4></div><div class="mgz-panel-body" ><div class="mgz-panel-body-inner"><div class="uelyg9e mgz-element mgz-element-accordion_section"><div class="mgz-element-inner uelyg9e-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax uelyg9e-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="mnp35fj mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner mnp35fj-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax mnp35fj-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="d627jda mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner d627jda-s"><div class="kf0pux0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner kf0pux0-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax kf0pux0-p"><div class="lazy-bg mgz-parallax-inner"></div></div><p><span style="font-weight: 400; color: #304265;">To understand if your Magento 2 is slow, you need to run a speed test. PageSpeed Insights is the most popular tool for speed testing. Just enter your URL and click the Analyze bottom, and you will get results in a few seconds. This tool is developed by Google and is free to use.</span></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="mgz-panel "><div class="mgz-panel-heading mgz-text-left mgz-icon-position-left"><h4 class="mgz-panel-heading-title"><a href="#tab-u6tppu3" class="has-icon"><i class="mgz-accoridon-icon-plus "></i> <span>Why do I need to invest in Magento 2 site optimization? </span></a></h4></div><div class="mgz-panel-body" ><div class="mgz-panel-body-inner"><div class="u6tppu3 mgz-element mgz-element-accordion_section"><div class="mgz-element-inner u6tppu3-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax u6tppu3-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="g097gla mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner g097gla-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax g097gla-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="ibdwbs5 mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner ibdwbs5-s"><div class="uv16jrd mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner uv16jrd-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax uv16jrd-p"><div class="lazy-bg mgz-parallax-inner"></div></div><p><span style="font-weight: 400; color: #304265;">Magento 2 site speed optimization is a crucial aspect of e-commerce success. Over 50% of customers leave your site if they need to wait more than 3 seconds for a page to load. By optimizing your Magento site’s speed, you can significantly enhance its performance, decrease bounce and cart abandonment rates, and grow customer satisfaction level.</span></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="mgz-panel "><div class="mgz-panel-heading mgz-text-left mgz-icon-position-left"><h4 class="mgz-panel-heading-title"><a href="#tab-np3xaqv" class="has-icon"><i class="mgz-accoridon-icon-plus "></i> <span>Magento optimization tips: best practices for a quick solution </span></a></h4></div><div class="mgz-panel-body" ><div class="mgz-panel-body-inner"><div class="np3xaqv mgz-element mgz-element-accordion_section"><div class="mgz-element-inner np3xaqv-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax np3xaqv-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="lhqmdm0 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner lhqmdm0-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax lhqmdm0-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="cre3nu4 mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner cre3nu4-s"><div class="yxvlpgw mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner yxvlpgw-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax yxvlpgw-p"><div class="lazy-bg mgz-parallax-inner"></div></div><p><span style="font-weight: 400; color: #304265;">Magento optimization is a complex process, but still, a few things can be done even without the developers’ help. Try the following tricks if your Magento 2 is very slow and something should be done immediately: </span></p><ul><li><span style="color: #304265;">Use WebP images: you can convert your media into this format using free tools;</span></li> <li><span style="color: #304265;">Get any Lazy Load tool: a simple and cheap extension without code interference that lets you reduce time to the first byte;</span></li> <li><span style="color: #304265;">Disable unnecessary third-party extensions: they may generate excessive JS code.</span></li> </ul><br/></div></div></div></div></div></div></div></div></div></div></div></div><div class="mgz-panel "><div class="mgz-panel-heading mgz-text-left mgz-icon-position-left"><h4 class="mgz-panel-heading-title"><a href="#tab-vais6wy" class="has-icon"><i class="mgz-accoridon-icon-plus "></i> <span>How can I improve Magento 2 performance using the service? </span></a></h4></div><div class="mgz-panel-body" ><div class="mgz-panel-body-inner"><div class="vais6wy mgz-element mgz-element-accordion_section"><div class="mgz-element-inner vais6wy-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax vais6wy-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="v3wkclm mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner v3wkclm-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax v3wkclm-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="u4wm1uw mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner u4wm1uw-s"><div class="gcclmik mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner gcclmik-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax gcclmik-p"><div class="lazy-bg mgz-parallax-inner"></div></div><p><span style="font-weight: 400;"><span style="color: #304265;">To improve Magento 2 performance, we need to take into consideration a lot of factors: your current score, the number of 3rd-party extensions you use, the installed theme, etc. But on average the desktop score after the Magento website optimization varies from 80 to 90, the mobile score usually stays between 50 and 75.</span> </span></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="mgz-panel mgz-panel-last"><div class="mgz-panel-heading mgz-text-left mgz-icon-position-left"><h4 class="mgz-panel-heading-title"><a href="#tab-do8xyg0" class="has-icon"><i class="mgz-accoridon-icon-plus "></i> <span>Is the backend Magento site performance optimization available? </span></a></h4></div><div class="mgz-panel-body" ><div class="mgz-panel-body-inner"><div class="do8xyg0 mgz-element mgz-element-accordion_section"><div class="mgz-element-inner do8xyg0-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax do8xyg0-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="unyo15g mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner unyo15g-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax unyo15g-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="ylmbbbc mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner ylmbbbc-s"><div class="vku5kw1 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner vku5kw1-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax vku5kw1-p"><div class="lazy-bg mgz-parallax-inner"></div></div><p><span style="font-weight: 400; color: #304265;">Magento site performance optimization can also be done for a backend part as well. If your Magento 2 backend and admin panel loading is slow, our team will detect the problem during the technical audit and suggest possible solutions. By your request, we can include backend optimization in the plan.</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><input name="form_key" type="hidden" value="bYmi4vvyFIlDuwwr" /> <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="bYmi4vvyFIlDuwwr" /><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></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="bYmi4vvyFIlDuwwr" /></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/version1740558685/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/version1740558685/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/version1740558685/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/version1740558685/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/version1740558685/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/version1740558685/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/mastercard.svg" alt="Mastercard" ><img class="lazy amsite-image" src="https://cdn.amasty.com/static/version1740558685/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_67bee6502f2d4()}" 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() { const SELECTORS = [ { selector: '[data-amsite-analytics-js="btn-add-to-cart-in-page-builder-template"]', action: 'add_to_cart_tariff_block', attr: 'data-product-name-analytics' }, { selector: '[analytics-comparison-block-feature-list]', action: 'view_features_tariff_block', attr: 'analytics-comparison-block-feature-list' }, { selector: '[analytics-comparison-block-demo-view]', action: 'view_demo_tariff_block', attr: 'analytics-comparison-block-demo-view' }, { selector: '[analytics-comparison-block-product-name]', action: 'click_product_name_tariff_block', attr: 'analytics-comparison-block-product-name' } ]; function attachEventListener(selector, action, attr) { document.querySelectorAll(selector).forEach((button) => { button.addEventListener('click', () => { const productName = button.getAttribute(attr); pushAnalyticsFromComparisonBlock(action, productName); }); }); } function pushAnalyticsFromComparisonBlock(actionName, productName) { window.dataLayer.push({ 'event': 'ClickOnComparisonBlock', 'any_transmitted_info': actionName, 'product_name': productName }); } function trackMatomoProductViews() { window._paq.push(['setEcommerceView', "magento-server-optimization-service", "Magento Optimization Service", "Services" ]); window._paq.push(['trackPageView']); } SELECTORS.forEach(({ selector, action, attr }) => attachEventListener(selector, action, attr)); })();</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="bYmi4vvyFIlDuwwr" /> <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="bYmi4vvyFIlDuwwr" /> <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-67bee6503215b" class="amgdpr-checkbox" data-consent-id="1" required value="1"><label for="amprivacy-checkbox-67bee6503215b" 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-67bee65032174" class="amgdpr-checkbox" data-consent-id="2" value="1"><label for="amprivacy-checkbox-67bee65032174" 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/catalog/product/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="bYmi4vvyFIlDuwwr" /> <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><div x-data="AmAuthPopupReviewForm()" x-on:private-content-loaded.window.once="initializeReviewForm()" ></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\u002Fversion1740558685\u002Ffrontend\u002FAmasty\u002FAmTheme\u002Fen_US' };</script><script type="text/javascript" src="https://cdn.amasty.com/static/version1740558685/_cache/merged/99d148032876ed95668760c4893bc3be.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/version1740558685/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/version1740558685/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_67bee64fdc589() { 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_67bee64fdc75d() { 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"> { ".breadcrumbs": { "breadcrumbs": {"categoryUrlSuffix":".html","useCategoryPathInUrl":1,"product":"Magento Optimization Service","breadcrumbs":[{"label":"Services","link":"https:\/\/amasty.com\/magento-services.html"}]} } }</script><script type="text/x-magento-init"> { "*": { "Magento_Ui/js/core/app": { "components": { "messages": { "component": "Magento_Theme/js/view/messages", "floatingMessages": "true" } } } } }</script><script> 'use strict'; function initFormEvents144() { 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-144')); 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-144'); }, 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-144'); 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-144'); if (result) { form.submit(); } } } }</script><script> (function setDependencies() { const form = document.getElementById('amform-form-144'); 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":144,"productId":"1089"}; 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]); }); }) })(144);</script><script> 'use strict'; function initFormEvents209() { 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-209')); 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-209'); }, 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-209'); 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-209'); if (result) { form.submit(); } } } }</script><script> (function setDependencies() { const form = document.getElementById('amform-form-209'); 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":209,"productId":"1089"}; 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]); }); }) })(209);</script><script> 'use strict'; function initFormEvents61() { 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-61')); 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-61'); }, 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-61'); 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-61'); if (result) { form.submit(); } } } }</script><script> (function setDependencies() { const form = document.getElementById('amform-form-61'); 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":61,"productId":"1089"}; 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]); }); }) })(61);</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\u002Fversion1740558685\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\/id\/1089\/","handles":["default","catalog_product_view","catalog_product_view_type_virtual","catalog_product_view_id_1089","catalog_product_view_sku_magento-server-optimization-service","hyva_default","hyva_catalog_product_view","hyva_catalog_product_view_type_virtual","hyva_catalog_product_view_id_1089","hyva_catalog_product_view_sku_magento-server-optimization-service","hyva_amcookiebar_popup","am_mega_menu_layout"],"originalRequest":{"route":"catalog","controller":"product","action":"view","uri":"\/magento-optimization-service.html"},"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":"1089"}; 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":[".action.towishlist"],"isRedirectCmsPage":true} } }</script><script type="text/x-magento-init"> { "*": { "Magento_Catalog/js/product/view/provider": { "data": {"items":{"1089":{"add_to_cart_button":{"post_data":"{\"action\":\"https:\\\/\\\/amasty.com\\\/checkout\\\/cart\\\/add\\\/uenc\\\/%25uenc%25\\\/product\\\/1089\\\/\",\"data\":{\"product\":\"1089\",\"uenc\":\"%uenc%\"}}","url":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/%25uenc%25\/product\/1089\/","required_options":false},"add_to_compare_button":{"post_data":null,"url":"{\"action\":\"https:\\\/\\\/amasty.com\\\/catalog\\\/product_compare\\\/add\\\/\",\"data\":{\"product\":\"1089\",\"uenc\":\"aHR0cHM6Ly9hbWFzdHkuY29tL21hZ2VudG8tb3B0aW1pemF0aW9uLXNlcnZpY2UuaHRtbA~~\"}}","required_options":null},"price_info":{"final_price":9999,"max_price":9999,"max_regular_price":9999,"minimal_regular_price":9999,"special_price":null,"minimal_price":9999,"regular_price":9999,"formatted_prices":{"final_price":"<span class=\"price\">$9,999.00<\/span>","max_price":"<span class=\"price\">$9,999.00<\/span>","minimal_price":"<span class=\"price\">$9,999.00<\/span>","max_regular_price":"<span class=\"price\">$9,999.00<\/span>","minimal_regular_price":null,"special_price":null,"regular_price":"<span class=\"price\">$9,999.00<\/span>"},"extension_attributes":{"msrp":{"msrp_price":"<span class=\"price\">$0.00<\/span>","is_applicable":"","is_shown_price_on_gesture":"","msrp_message":"","explanation_message":"Our price is lower than the manufacturer&#039;s &quot;minimum advertised price.&quot; As a result, we cannot show you the price in catalog or the product page. <br><br> You have no obligation to purchase the product once you know the price. You can simply remove the item from your cart."},"tax_adjustments":{"final_price":9999,"max_price":9999,"max_regular_price":9999,"minimal_regular_price":9999,"special_price":9999,"minimal_price":9999,"regular_price":9999,"formatted_prices":{"final_price":"<span class=\"price\">$9,999.00<\/span>","max_price":"<span class=\"price\">$9,999.00<\/span>","minimal_price":"<span class=\"price\">$9,999.00<\/span>","max_regular_price":"<span class=\"price\">$9,999.00<\/span>","minimal_regular_price":null,"special_price":"<span class=\"price\">$9,999.00<\/span>","regular_price":"<span class=\"price\">$9,999.00<\/span>"}},"weee_attributes":[],"weee_adjustment":"<span class=\"price\">$9,999.00<\/span>"}},"images":[{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/bb8e97a9ddc3d82fc043ed846d9f3d1c\/m\/a\/magento-optimization-service_63f5d17699021.png","code":"recently_viewed_products_grid_content_widget","height":485,"width":485,"label":"Magento Optimization Service","resized_width":485,"resized_height":485},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/bb8e97a9ddc3d82fc043ed846d9f3d1c\/m\/a\/magento-optimization-service_63f5d17699021.png","code":"recently_viewed_products_list_content_widget","height":485,"width":485,"label":"Magento Optimization Service","resized_width":485,"resized_height":485},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/c0f736f50f461282ed263518cf9066d1\/m\/a\/magento-optimization-service_63f5d17699021.png","code":"recently_viewed_products_images_names_widget","height":80,"width":80,"label":"Magento Optimization Service","resized_width":80,"resized_height":80},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/bb8e97a9ddc3d82fc043ed846d9f3d1c\/m\/a\/magento-optimization-service_63f5d17699021.png","code":"recently_compared_products_grid_content_widget","height":485,"width":485,"label":"Magento Optimization Service","resized_width":485,"resized_height":485},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/bb8e97a9ddc3d82fc043ed846d9f3d1c\/m\/a\/magento-optimization-service_63f5d17699021.png","code":"recently_compared_products_list_content_widget","height":485,"width":485,"label":"Magento Optimization Service","resized_width":485,"resized_height":485},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/c0f736f50f461282ed263518cf9066d1\/m\/a\/magento-optimization-service_63f5d17699021.png","code":"recently_compared_products_images_names_widget","height":80,"width":80,"label":"Magento Optimization Service","resized_width":80,"resized_height":80}],"url":"https:\/\/amasty.com\/magento-optimization-service.html","id":1089,"name":"Magento Optimization Service","type":"virtual","is_salable":"1","store_id":1,"currency_code":"USD","extension_attributes":{"review_html":" ","wishlist_button":{"post_data":null,"url":"{\"action\":\"https:\\\/\\\/amasty.com\\\/wishlist\\\/index\\\/add\\\/\",\"data\":{\"product\":1089,\"uenc\":\"aHR0cHM6Ly9hbWFzdHkuY29tL21hZ2VudG8tb3B0aW1pemF0aW9uLXNlcnZpY2UuaHRtbA~~\"}}","required_options":null}},"is_available":true}},"store":"1","currency":"USD","productCurrentScope":"website"} } } }</script><script> 'use strict'; function amReviews() { return Object.assign({ reviewSelectors: { customerReviewList: '#reviews' }, eventListeners: { ['@amreviews-filter.window'](event) { this.filterReviews(event.detail.url); } }, /** * @param {string} url * @returns {void} */ filterReviews: function (url) { fetch(url, { method: 'GET', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }).then(response => { return response.ok ? response.text() : Promise.reject(`${response.status} ${response.statusText}`); }).then(result => { !!result && hyva.replaceDomElement(this.reviewSelectors.customerReviewList, result); this.$nextTick(() => { this.scrollToReviewsBlock(); }) }).catch(error => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: error } ]); }) }, /** * @returns {void} */ scrollToReviewsBlock: function () { document.querySelector(this.reviewSelectors.customerReviewList).scrollIntoView({ behavior: 'smooth', block: 'start' }); } }, typeof amReviewCommentsHandler === 'function' ? amReviewCommentsHandler() : {} ); }</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/version1740558685/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> (function () { const reviewComponent = document.querySelector('[x-data="initReviewForm()"]'); reviewComponent?.setAttribute( 'x-init', `$watch( 'errorMessages', errorMessages => { errorMessages?.length > 0 && window.dispatchEvent(new CustomEvent("reload-customer-section-data")) } );${reviewComponent.getAttribute('x-init') || ''}` ); })();</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\u002Fversion1740558685\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/version1740558685/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/version1740558685/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\u002Fversion1740558685\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_67bee6502f2d4() { 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":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/amasty.com\/","name":"Home"}}]}</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="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Product","name":"Magento Optimization Service","description":"Boost your store performance with a proper Magento Optimization Service. Don\u2019t spend your time and efforts, just enhance users\u2019 experience and boost conversion rates.","image":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/m\/a\/magento-optimization-service_63f5d17699021.png","url":"https:\/\/amasty.com\/magento-optimization-service.html","aggregateRating":{"@type":"AggregateRating","ratingValue":4.4,"reviewCount":500},"review":[],"sku":"magento-server-optimization-service","mpn":"magento-server-optimization-service"}</script><script type="text/x-magento-init"> { "*": { "amsiteAsyncLoadCss": { "cssFileUrl": "https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/css/source/bundle-module/product-page/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> const AmAuthPopupReviewForm = function () { const reloadUrl = 'https\u003A\u002F\u002Famasty.com\u002Famsociallogin_hyva\u002Fajax\u002Freviewform\u002Fid\u002F1089\u002F'; const reviewFormBlockSelector = '\u0023review\u002Dform'; function cloneScriptNode(node) { const scriptClone = document.createElement('script') scriptClone.text = node.innerHTML; Array.from(node.attributes).forEach(attribute => { scriptClone.setAttribute(attribute.name, attribute.value); }); return scriptClone; } function reExecuteScripts(node) { node.querySelectorAll('script').forEach( (scriptNode) => node.replaceWith(cloneScriptNode(node)) ); } return { initializeReviewForm() { window.dispatchEvent( new CustomEvent( 'amsl-register-content-updater', { detail: this.reloadReviewForm.bind(this) } ) ) }, async reloadReviewForm() { try { const response = await fetch( reloadUrl, { method: 'GET', headers: { 'Content-Type': 'application/json' } } ); const result = await response.json(); if (result && result.form) { const bufferElement = document.createElement('div'); bufferElement.innerHTML = result.form; const newElement = bufferElement.querySelector(reviewFormBlockSelector); const existingElement = document.querySelector(reviewFormBlockSelector); reExecuteScripts(newElement); existingElement.replaceWith(newElement); } } catch (error) { console.error('Failed to update review form'); console.error(error); } } } }</script><script> (() => { 'use strict'; const gridSizes = { options: { elementSelector: '[data-mage-init*="components/grid-sizes"]', childrenInLine: '[class*="amtab-cell"], [class*="amtab-title"]', childrenInRow: '[class*="amtab-table"], [class*="amtab-head"]', cellSelect: '.amtab-cell', lineSelect: '.amtab-table-line', hoverlineClass: '-amtab-hoverline', activeClass: '-active', wrapperClass: '.amtab-grid-wrapper', tabWrapperClass: '.tab-content' }, targetElem: {}, initGridSizes: function () { let self = this; let elements = document.querySelectorAll(this.options.elementSelector); if (!elements.length) { return; } this._loadGridCss(); for (let element of elements) { let lines = element.querySelectorAll(this.options.lineSelect); for (let line of lines) { self._initClickOnLine(line, element); } this._setTabsGridPaddings(element); } }, _initClickOnLine(line, element) { let cells = line.querySelectorAll(this.options.cellSelect); for (let cell of cells) { cell.addEventListener('click', (event) => { this._gridHighlight(event, element) }); } }, _gridHighlight: function (e, element) { let self = this; self._clearTable(element); e.target.classList.add(self.options.activeClass); self.targetElem = { node: e.target, position: null }; self._highlightRow(element); self._highlightColumn(element); }, _highlightRow: function () { let self = this, targetLine = self.targetElem.node.closest(self.options.lineSelect); targetLine.classList.add(self.options.activeClass); let lineChildren = targetLine.querySelectorAll(self.options.childrenInLine); for (let [index, cell] of lineChildren.entries()) { if (cell.classList.contains(self.options.activeClass)) { self.targetElem.position = index; break; } cell.classList.add(self.options.hoverlineClass); } }, _highlightColumn: function (element) { let self = this; let childrenInRow = element.querySelectorAll(self.options.childrenInRow); for (let elem of childrenInRow) { if (elem.classList.contains(self.options.activeClass)) { break; } let cells = elem.querySelectorAll(self.options.childrenInLine); for (let [index, cell] of cells.entries()) { if (index === parseInt(self.targetElem.position)) { cell.classList.add(self.options.hoverlineClass); } } } }, _clearTable: function (element) { let self = this; element.querySelectorAll('.' + self.options.hoverlineClass).forEach((el) => { el.classList.remove(self.options.hoverlineClass) }); element.querySelectorAll('.' + self.options.activeClass).forEach((el) => { el.classList.remove(self.options.activeClass) }); }, _setTabsGridPaddings(element) { const gridWrapper = element.closest(this.options.wrapperClass); const tabWrapper = gridWrapper.closest(this.options.tabWrapperClass); if (gridWrapper.classList.contains('-small')) { tabWrapper.classList.add('md:pb-36'); } }, _loadGridCss() { const styles = document.createElement('link'); styles.rel = 'stylesheet'; styles.href = 'https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Amasty_CustomTabsHyva/css/grids.min.css'; document.head.appendChild(styles); } } document.addEventListener('DOMContentLoaded', () => { gridSizes.initGridSizes(); }); })()</script><script> 'use strict'; (() => { const allAnchorLinks = document.querySelectorAll('[data-amsite-js="scroll-open-tab"]'); const allDeprecatedAnchorLinks = document.querySelectorAll('[observed-link-tab]'); const isMobile = AmsiteUtils().isMobile('(max-width: 769px)'); [...allAnchorLinks, ...allDeprecatedAnchorLinks].forEach(anchorLink => { anchorLink.addEventListener('click', (event) => { event.preventDefault(); const tabDestination = anchorLink.getAttribute('data-tab-destination') || anchorLink.getAttribute('href').replace('#', ''); const tab = document.querySelector(`[data-tab="${tabDestination}"]`); const indent = isMobile ? 140 : 100; if (tab) { tab.click(); window.scrollTo({ top: tab.getBoundingClientRect().top + window.scrollY - indent, behavior: 'smooth' }); } }); }); })()</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/version1740558685/frontend/Amasty/AmTheme/en_US/css/print.min.css" /><link rel="stylesheet" type="text/css" media="all" href="https://cdn.amasty.com/static/version1740558685/_cache/merged/fonts_ea0ed758deb0843f830f0e98146097db.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