CINXE.COM

Magento 2 Promotions Extensions | Customer Discount Extensions

<!doctype html><html lang="en"><head prefix="og: http://ogp.me/ns# category: http://ogp.me/ns/category#"> <meta charset="utf-8"/> <meta name="title" content="Magento 2 Promotions Extensions | Customer Discount Extensions"/> <meta name="description" content="Explore a great variety of Magento 2 promotion extensions to attract more customers to your store and increase the loyalty of current ones with special promotions, reward points, free gifts, coupons, gift cards, loyalty programs, and many more."/> <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 Promotions Extensions | Customer Discount Extensions</title> <link rel="stylesheet" type="text/css" media="all" href="https://cdn.amasty.com/static/version1740558685/_cache/merged/2ca50277a3bbc95bb66a383cfd5e5b5a.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/category-page/category-page-bundle-l.min.css" /> <link rel="canonical" href="https://amasty.com/promotions-extensions-for-magento-2.html" /> <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> <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%}</style><link rel="next" href="https://amasty.com/promotions-extensions-for-magento-2.html?p=2" /> </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 amsite-scroll-ajax-body page-with-filter amasty-mega-menu page-products categorypath-promotions-extensions-for-magento-2 category-promotions-extensions-for-magento-2 catalog-category-view page-layout-2columns-left"> <div id="cookie-status" style="position: absolute; display: none;">The store will not work correctly in the case when cookies are disabled.</div> <noscript><div class="message global noscript"><div class="content"><p><strong>JavaScript seems to be disabled in your browser.</strong> <span> For the best experience on our site, be sure to turn on Javascript in your browser.</span></p></div></div></noscript> <!-- Google Tag Manager (noscript) --><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-N84742B" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><!-- End Google Tag Manager (noscript) --> <!-- Matomo Tag Manager --><script data-info="not-move-to-bottom"> (function initMatomoAnalytics() { const _mtm = window._mtm = window._mtm || []; _mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'}); let initMatomo = () => { const d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src='https://cdn.matomo.cloud/amasty.matomo.cloud/container_oFfxxYMe.js'; s.parentNode.insertBefore(g,s); setTimeout(() => window.dispatchEvent(new CustomEvent("matomo-has-loaded")), 1000); }; window.addEventListener('init-external-scripts', () => { initMatomo(); }); }())</script><!-- End Matomo Tag Manager --> <div class="page-wrapper"> <style>.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_67bee9483616f(), 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_67bee94836353(), 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"><ul class="items"> <!-- remove home from breadcrumbs --> <!-- remove home from breadcrumbs --> <li class="item category25"> <a href="https://amasty.com/magento-2-extensions.html" title="">Magento 2 Extensions</a> </li> <!-- remove home from breadcrumbs --> <li class="item category29"> <strong>Promotions</strong> </li> </ul></div><main id="maincontent" class="page-main"> <a id="contentarea" tabindex="-1"></a><div class="columns"><div class="column 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> <div class="amsite-topcategory-promotion" data-amsite-js="top-category-promotion"></div><div class="amsite-top-content"> <div class="block widget amsite-bestsellers-triple block-products-list grid"> <div class="title">Bestsellers</div> <div class="block-content"><div class="products-grid grid -bestsellers-triple"><ol class="product-items widget-product-grid"> <li class="product-item"><div class="product-item-info"> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva&#x20;compatibility" > <!-- amasty_bestseller_slider_image--> <div class="product-photo-wrapper" style="background-image: url('https://cdn.amasty.com/media/catalog/product/cache/8b14a410c096e2fc1a81f19ab33fad4c/s/p/special-promotions-pro-for-magento-2_65841a350e17b.png')"></div> <div class="product-item-details "><div class="product-info-wrap"><a title="Special&#x20;Promotions&#x20;Pro&#x20;M2" aria-label="Special&#x20;Promotions&#x20;Pro&#x20;M2" href="https://amasty.com/special-promotions-pro-for-magento-2.html" class="product-item-link roduct-item-name">Special Promotions Pro M2</a> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.9</p><a href="https://amasty.com/special-promotions-pro-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/special-promotions-pro-for-magento-2.html#reviews" aria-label="Reviews" >17&nbsp;<span>Reviews</span></a></div> <div class="swatch-wrapper -round swatch-opt-649" data-role="swatch-option-649"></div></div><div class="product-item-bottom"> <div class="price-box price-final_price" data-role="priceBox" data-product-id="649" data-price-box="product-id-649"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="old-price-649-widget-product-grid" data-price-amount="319" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$319</span></span> </span></span> </div> <div class="product-item-actions"><div class="actions-primary"> <form data-role="tocart-form" data-amtheme-js="ajax-tocart" data-product-sku="special-promotions-pro-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/649/" method="post"><input type="hidden" name="product" value="649"/><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC82NDkv"/><input name="form_key" type="hidden" value="gd5r1x7vzwqeIQUo" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-in-bestsellers" data-product-name-analytics="Special&#x20;Promotions&#x20;Pro&#x20;M2" title="Add&#x20;to&#x20;Cart" class="action tocart primary">Add to Cart</button></form> </div></div></div></div></div></li> <li class="product-item"><div class="product-item-info"> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva&#x20;compatibility" > <!-- amasty_bestseller_slider_image--> <div class="product-photo-wrapper" style="background-image: url('https://cdn.amasty.com/media/catalog/product/cache/8b14a410c096e2fc1a81f19ab33fad4c/p/r/product-labels-for-magento-2_65841ad3836b9.png')"></div> <div class="product-item-details "><div class="product-info-wrap"><a title="Product&#x20;Labels&#x20;M2" aria-label="Product&#x20;Labels&#x20;M2" href="https://amasty.com/product-labels-for-magento-2.html" class="product-item-link roduct-item-name">Product Labels M2</a> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.9</p><a href="https://amasty.com/product-labels-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="85%" stop-color="&#x23;fcd34d"/><stop offset="85%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/product-labels-for-magento-2.html#reviews" aria-label="Reviews" >19&nbsp;<span>Reviews</span></a></div> <div class="swatch-wrapper -round swatch-opt-538" data-role="swatch-option-538"></div></div><div class="product-item-bottom"> <div class="price-box price-final_price" data-role="priceBox" data-product-id="538" data-price-box="product-id-538"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="old-price-538-widget-product-grid" data-price-amount="209" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$209</span></span> </span></span> </div> <div class="product-item-actions"><div class="actions-primary"> <form data-role="tocart-form" data-amtheme-js="ajax-tocart" data-product-sku="product-labels-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/538/" method="post"><input type="hidden" name="product" value="538"/><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC81Mzgv"/><input name="form_key" type="hidden" value="gd5r1x7vzwqeIQUo" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-in-bestsellers" data-product-name-analytics="Product&#x20;Labels&#x20;M2" title="Add&#x20;to&#x20;Cart" class="action tocart primary">Add to Cart</button></form> </div></div></div></div></div></li> <li class="product-item"><div class="product-item-info"> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva&#x20;compatibility" > <!-- amasty_bestseller_slider_image--> <div class="product-photo-wrapper" style="background-image: url('https://cdn.amasty.com/media/catalog/product/cache/8b14a410c096e2fc1a81f19ab33fad4c/a/u/automatic-related-products-for-magento-2_65841b8825072.png')"></div> <div class="product-item-details "><div class="product-info-wrap"><a title="Automatic&#x20;Related&#x20;Products&#x20;M2" aria-label="Automatic&#x20;Related&#x20;Products&#x20;M2" href="https://amasty.com/automatic-related-products-for-magento-2.html" class="product-item-link roduct-item-name">Automatic Related Products M2</a> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.9</p><a href="https://amasty.com/automatic-related-products-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/automatic-related-products-for-magento-2.html#reviews" aria-label="Reviews" >23&nbsp;<span>Reviews</span></a></div> <div class="swatch-wrapper -round swatch-opt-643" data-role="swatch-option-643"></div></div><div class="product-item-bottom"> <div class="price-box price-final_price" data-role="priceBox" data-product-id="643" data-price-box="product-id-643"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="old-price-643-widget-product-grid" data-price-amount="309" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$309</span></span> </span></span> </div> <div class="product-item-actions"><div class="actions-primary"> <form data-role="tocart-form" data-amtheme-js="ajax-tocart" data-product-sku="automatic-related-products-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/643/" method="post"><input type="hidden" name="product" value="643"/><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC82NDMv"/><input name="form_key" type="hidden" value="gd5r1x7vzwqeIQUo" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-in-bestsellers" data-product-name-analytics="Automatic&#x20;Related&#x20;Products&#x20;M2" title="Add&#x20;to&#x20;Cart" class="action tocart primary">Add to Cart</button></form> </div></div></div></div></div></li> </ol></div></div></div> </div> <div class="category-page-title-wrapper"><h1 class="category-page-title" data-amsite-js="category-page-title">Magento 2 Promotions</h1></div><input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <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="1az1daSvPtvV8ak8" /><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 id="amasty-shopby-product-list"> <div class="top-toolbar"> <div class="toolbar toolbar-products" data-mage-init='{"productListToolbarForm":{"mode":"product_list_mode","direction":"product_list_dir","order":"product_list_order","limit":"product_list_limit","modeDefault":"grid","directionDefault":"asc","orderDefault":"position","limitDefault":15,"url":"https:\/\/amasty.com\/promotions-extensions-for-magento-2.html","formKey":"1az1daSvPtvV8ak8","post":false}}'> <div class="modes"> <strong class="modes-label" id="modes-label">View as</strong> <strong title="Grid" class="modes-mode active mode-grid" data-value="grid"><svg class="amtheme-icon -active" focusable="false"><use xlink:href="#icon-view-block"/></svg></strong> <a class="modes-mode mode-list" title="List" href="#" data-role="mode-switcher" data-value="list" id="mode-list" aria-labelledby="modes-label mode-list"><svg class="amtheme-icon -hover" focusable="false"><use xlink:href="#icon-view-list"/></svg></a> </div> <div class="field limiter"><label class="label" for="limiter">Items:</label> <div class="control"><select id="limiter" data-role="limiter" class="limiter-options amtheme-select" tabindex="-1"> <option value="15" selected="selected" >15</option> <option value="30" >30</option> <option value="50" >50</option></select> <div class="amtheme-select-block -no-border -amsite" data-mage-init='{"amSelect": {"selectId": "limiter"}}' data-amselect-js="select"><span role="button" tabindex="0" class="amtheme-placeholder" data-amselect-js="placeholder"><span class="amtheme-content" data-amselect-js="placeholder-content">15</span></span> <ul role="list" class="amtheme-line-options" data-amselect-js="options"> <li class="amtheme-option" tabindex="0" data-amselect-js="item" data-amselect-value="15" >15</li> <li class="amtheme-option" tabindex="0" data-amselect-js="item" data-amselect-value="30" >30</li> <li class="amtheme-option" tabindex="0" data-amselect-js="item" data-amselect-value="50" >50</li> </ul></div></div></div> <p class="toolbar-amount" id="toolbar-amount"> Items <span class="toolbar-number">1</span> to <span class="toolbar-number">15</span> of <span class="toolbar-number">44</span> total </p> <div class="toolbar-sorter sorter"><div class="amtheme-filter-wrap"><div class="amtheme-filter-button" data-amtheme-js="filter-sidebar"> <svg class="amtheme-icon -filter" focusable="false"><use xlink:href="#icon-filter"/></svg> <strong class="filter-title-text">Filters</strong></div></div><label class="sorter-label" for="sorter">Sort By</label> <select id="sorter" data-role="sorter" class="sorter-options amtheme-select"> <option value="position" selected="selected" >Bestsellers</option> <option value="recently_updated" >Recently Updated</option> <option value="rating_summary" >Most Rated</option></select> <div class="amtheme-select-block -no-border" data-mage-init='{"amSelect": {"selectId": "sorter"}}' data-amselect-js="select" ><ul role="list" class="amtheme-select-options" data-amselect-js="options" > <li class="amtheme-option -selected" tabindex="0" data-amselect-js="item" data-amselect-value="position" ><span class="amtheme-title">Bestsellers</span></li> <li class="amtheme-option " tabindex="0" data-amselect-js="item" data-amselect-value="recently_updated" ><span class="amtheme-title">Recently Updated</span></li> <li class="amtheme-option " tabindex="0" data-amselect-js="item" data-amselect-value="rating_summary" ><span class="amtheme-title">Most Rated</span></li> </ul><span role="button" tabindex="0" class="amtheme-placeholder" data-amselect-js="placeholder" ><span class="amtheme-content" data-amselect-js="placeholder-content">Bestsellers</span></span></div> <a title="Set Descending Direction" href="#" class="action sorter-action sort-asc" data-role="direction-switcher" aria-label="Set Descending Direction" data-value="desc"><svg class="amtheme-icon -circle" focusable="false"><use xlink:href="#icon-sort-view"/></svg></a> </div> </div></div> <div class="catalog-topnav amasty-catalog-topnav"> <div class="block filter" data-mage-init='{ "collapsible": { "openedState": "active", "collapsible": true, "active": false, "collateral": { "openedState": "filter-active", "element": "body" } }, "amLayeredNavigationMobile":{} }'><button class="action button-as-link amtheme-close" type="button" data-amtheme-js="layered-close" aria-label="Close&#x20;filter" title="Close&#x20;filter"><svg class="amtheme-icon -close"><use xlink:href="#icon-close"/></svg></button> <div class="block-title filter-title" data-role="title" data-count="0">Shop By</div><div class="block-content filter-content"> <strong role="heading" aria-level="2" class="block-subtitle filter-subtitle">Filters</strong> <div class="filter-options" id="narrow-by-list" data-role="content" data-amtheme-js="navigation-filter" data-mage-init='{ "accordion": { "openedState": "-active", "collapsible": true, "active": false, "animate": { "duration": 200 }, "multipleCollapsible": false }}'> <div data-role="collapsible" class="filter-options-item" data-amtheme-js="navigation-filter-item"><div data-role="title" class="filter-options-title -product tag">Product Tag</div><div data-role="content" class="filter-options-content"> <form class="am-ranges tag" data-am-js="ranges" data-amshopby-filter="tag" data-amshopby-filter-request-var="tag" autocomplete="off"><ol class="items am-filter-items-tag -am-singleselect" > <li class="item " data-label="Higher Positions in Google"> <input name="amshopby[tag][]" value="29" type="radio" style="" class="input" /> <a class="am-filter-item-67bee948423c4 link -blue" data-am-js="filter-item-default" href="https://amasty.com/promotions-extensions-for-magento-2.html?tag=29" rel="nofollow"><span class="label">Higher Positions in Google</span> <span class="count">2<span class="filter-count-label">items</span></span> </a> </li> <li class="item " data-label="Hyva-ready Extensions"> <input name="amshopby[tag][]" value="26" type="radio" style="" class="input" /> <a class="am-filter-item-67bee948425e7 link -green" data-am-js="filter-item-default" href="https://amasty.com/promotions-extensions-for-magento-2.html?tag=26" rel="nofollow"><span class="label">Hyva-ready Extensions</span> <span class="count">37<span class="filter-count-label">items</span></span> </a> </li> <li class="item " data-label="Multichannel Selling"> <input name="amshopby[tag][]" value="30" type="radio" style="" class="input" /> <a class="am-filter-item-67bee9484270d link -purple" data-am-js="filter-item-default" href="https://amasty.com/promotions-extensions-for-magento-2.html?tag=30" rel="nofollow"><span class="label">Multichannel Selling</span> <span class="count">3<span class="filter-count-label">items</span></span> </a> </li> <li class="item " data-label="Recently Launched"> <input name="amshopby[tag][]" value="28" type="radio" style="" class="input" /> <a class="am-filter-item-67bee9484280c link -yellow" data-am-js="filter-item-default" href="https://amasty.com/promotions-extensions-for-magento-2.html?tag=28" rel="nofollow"><span class="label">Recently Launched</span> <span class="count">6<span class="filter-count-label">items</span></span> </a> </li> <li class="item " data-label="Sales Boosters"> <input name="amshopby[tag][]" value="31" type="radio" style="" class="input" /> <a class="am-filter-item-67bee94842902 link -purple" data-am-js="filter-item-default" href="https://amasty.com/promotions-extensions-for-magento-2.html?tag=31" rel="nofollow"><span class="label">Sales Boosters</span> <span class="count">7<span class="filter-count-label">items</span></span> </a> </li> <li class="item " data-label="User Experience"> <input name="amshopby[tag][]" value="27" type="radio" style="" class="input" /> <a class="am-filter-item-67bee948429e9 link -brown" data-am-js="filter-item-default" href="https://amasty.com/promotions-extensions-for-magento-2.html?tag=27" rel="nofollow"><span class="label">User Experience</span> <span class="count">2<span class="filter-count-label">items</span></span> </a> </li> <li class="item " data-label="Ways to Return Users Back"> <input name="amshopby[tag][]" value="23" type="radio" style="" class="input" /> <a class="am-filter-item-67bee94842ab0 link -brown" data-am-js="filter-item-default" href="https://amasty.com/promotions-extensions-for-magento-2.html?tag=23" rel="nofollow"><span class="label">Ways to Return Users Back</span> <span class="count">4<span class="filter-count-label">items</span></span> </a> </li> <li class="item " data-label="Hyva Checkout Ready"> <input name="amshopby[tag][]" value="97" type="radio" style="" class="input" /> <a class="am-filter-item-67bee94842b6f link " data-am-js="filter-item-default" href="https://amasty.com/promotions-extensions-for-magento-2.html?tag=97" rel="nofollow"><span class="label">Hyva Checkout Ready</span> <span class="count">30<span class="filter-count-label">items</span></span> </a> </li> </ol></form> </div></div> </div></div></div></div> <div class="products wrapper grid products-grid" data-amsite-js="category-page-list" data-amsite-analytics-js="category-page-list"><ol class="products list items product-items"> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-643 { background: #9ae9df }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/automatic-related-products-for-magento-2.html" class="product photo product-item-photo amsite-product-643 " aria-label="Automatic Related Products M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/a/u/automatic-related-products-for-magento-2_26.png" alt="Automatic Related Products for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-643-cat amasty-label-for-643" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"643","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "643", "selector": ".amasty-label-container-13-643-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-13-643-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Automatic&#x20;Related&#x20;Products&#x20;for&#x20;Magento&#x20;2" alt="Automatic&#x20;Related&#x20;Products&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":643,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Automatic Related Products M2" aria-label="Automatic Related Products M2" href="https://amasty.com/automatic-related-products-for-magento-2.html">Automatic Related Products M2</a></strong> <div class="swatch-wrapper -round swatch-opt-643" data-role="swatch-option-643"></div> <!--short description--><div class="product description product-item-description"><p>Magento 2 Related Products extension is the tool dynamically showcase related product offers on the website, thus motivating customers to complement their orders with extra items. Flexibly adjust rules and conditions to enable smart personalized recommendations similarly to AI-driven solutions. </p></div><!--book-live-demo--> <div class="amsite-live-demo"><a class="book-live-demo" href="https://calendly.com/yuliya-simakovich/book-a-demo" title="Book a Live Demo" aria-label="Book a Live Demo" rel="nofollow" target="_blank">Book a Live Demo <svg class="amtheme-icon" focusable="false"><use xlink:href="#icon-arrow-right"/></svg></a></div> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Use smart rule-based algorithm to offer related items, up-sells, and cross-sells</li> <li class="item">Show related products based on history of views or purchases</li> <li class="item">Display items on category, product, shopping cart pages, and custom positions</li> <li class="item">Offer bundle packs with fixed or percentage discount</li> <li class="item">Create a specified CMS page with all bundles</li> <li class="item">Monitor related offers efficiency with advanced analytics</li> <li class="item">Import and Export bundle packs data</li> <li class="item">Hyva-ready storefront (<a href="https://automatic-related-products-hyva-m2.magento-demo.amasty.com/breathe-easy-tank.html" target="_blank">view demo >></a>)</li> <li class="item">Hyva Checkout ready</li> <li class="item">Mage-OS compatible</li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.9</p><a href="https://amasty.com/automatic-related-products-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/automatic-related-products-for-magento-2.html#reviews" aria-label="Reviews" >23&nbsp;<span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="643" data-price-box="product-id-643"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-643" data-price-amount="309" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$309</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="automatic-related-products-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/643/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="643"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC82NDMv"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Automatic&#x20;Related&#x20;Products&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Automatic&#x20;Related&#x20;Products&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-538 { background: #9ae9df }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/product-labels-for-magento-2.html" class="product photo product-item-photo amsite-product-538 " aria-label="Product Labels M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/p/r/product-labels-for-magento-2_61a5ece777124.png" alt="Product Labels for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-538-cat amasty-label-for-538" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"538","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "538", "selector": ".amasty-label-container-13-538-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-13-538-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Product&#x20;Labels&#x20;for&#x20;Magento&#x20;2" alt="Product&#x20;Labels&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":538,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Product Labels M2" aria-label="Product Labels M2" href="https://amasty.com/product-labels-for-magento-2.html">Product Labels M2</a></strong> <div class="swatch-wrapper -round swatch-opt-538" data-role="swatch-option-538"></div> <!--short description--><div class="product description product-item-description"><p>Add Magento 2 Product Labels extension to highlight new arrivals, as well as special products and offers. Immediately draw customers' attention and grow sales up to 55%. Automatically run several marketing campaigns at a time!</p></div><!--book-live-demo--> <div class="amsite-live-demo"><a class="book-live-demo" href="https://calendly.com/yuliya-simakovich/book-a-demo" title="Book a Live Demo" aria-label="Book a Live Demo" rel="nofollow" target="_blank">Book a Live Demo <svg class="amtheme-icon" focusable="false"><use xlink:href="#icon-arrow-right"/></svg></a></div> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Design catchy labels with ready-made shapes</li> <li class="item">Show various labels to different customer groups</li> <li class="item">Use flexible conditions for the labels display</li> <li class="item">Edit labels and сheck them with the preview option </li> <li class="item">Show several labels on one product</li> <li class="item">Hyva-ready storefront (<a href="https://product-labels-hyva-m2.magento-demo.amasty.com/women/tops-women.html" target="_blank">view demo >></a>)</li> <li class="item"><a href="#wcag_compliance">✔️ ADA & WCAG compliant</a></li> <li class="item">Compatibility with <strong>Live Search</strong> for Cloud Edition</li> <li class="item">Mage-OS compatible</li> <li class="item">Hyva Checkout compatible by default</li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.9</p><a href="https://amasty.com/product-labels-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="85%" stop-color="&#x23;fcd34d"/><stop offset="85%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/product-labels-for-magento-2.html#reviews" aria-label="Reviews" >19&nbsp;<span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="538" data-price-box="product-id-538"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-538" data-price-amount="209" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$209</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="product-labels-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/538/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="538"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC81Mzgv"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Product&#x20;Labels&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Product&#x20;Labels&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-1653 { background: #9ae9df }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/promotion-suite-middle-for-magento-2.html" class="product photo product-item-photo amsite-product-1653 " aria-label="Promotion Suite Pro M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/i/c/icon-promotions-suite-middle-for-magento-2.png" alt="Promotion Suite Pro for Magento 2"/></span></span></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":1653,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Promotion Suite Pro M2" aria-label="Promotion Suite Pro M2" href="https://amasty.com/promotion-suite-middle-for-magento-2.html">Promotion Suite Pro M2</a></strong> <div class="swatch-wrapper -round swatch-opt-1653" data-role="swatch-option-1653"></div> <!--short description--><div class="product description product-item-description"><a href="#choose_option" data-promo-id="banners-promotionsuite-m2" data-promo-name="Banners at Promotion Suite Pro M2" data-promo-creative="banner_see_subscription_options" data-promo-position="banner_short_description"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/marketing/m2/banners-for-compatibilities/pricing_prem.png" data-srcset="https://cdn.amasty.com/media/marketing/m2/banners-for-compatibilities/pricing_premi_2x.png 2x" alt="See available pricing options!" style="margin-bottom: 20px;" /> </a> <p>Easily automate your promotions management routine with a smart Promotion Suite. It perfectly fits stores that have many products to promote and spend lots of time and effort on setting them up.</p></div><!--book-live-demo--> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Create promo banners that automatically turn on and off on schedule</li> <li class="item">Use catchy labels to highlight specific products</li> <li class="item">Generate automatic gifts for big orders</li> <li class="item">Set up automated promotions with free shipping</li> <li class="item">Cover specific demands of various audiences with flexible segmentation</li> <li class="item">Hyvä-ready storefront</li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="1653" data-price-box="product-id-1653"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-1653" data-price-amount="849" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$849</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="promotion-suite-middle-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/1653/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="1653"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC8xNjUzLw~~"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Promotion&#x20;Suite&#x20;Pro&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Promotion&#x20;Suite&#x20;Pro&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-649 { background: #9ae9df }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/special-promotions-pro-for-magento-2.html" class="product photo product-item-photo amsite-product-649 " aria-label="Special Promotions Pro M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/s/p/special-promotions-pro-for-magento-2_64d0cf2c44caf.png" alt="Special Promotions Pro for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-649-cat amasty-label-for-649" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"649","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "649", "selector": ".amasty-label-container-13-649-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-13-649-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" alt="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":649,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Special Promotions Pro M2" aria-label="Special Promotions Pro M2" href="https://amasty.com/special-promotions-pro-for-magento-2.html">Special Promotions Pro M2</a></strong> <div class="swatch-wrapper -round swatch-opt-649" data-role="swatch-option-649"></div> <!--short description--><div class="product description product-item-description"><p>Add our Magento 2 Advanced Promotions extension to shape your discounts with clever conditions. Create promotions based on customers' info and purchase history. Use 20 actions to be sure that your promotions are unique and relevant. </p></div><!--book-live-demo--> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Create 20+ promotion types for extraordinary deals</li> <li class="item">Use customer's attributes as rule conditions</li> <li class="item">Limit promotions based on customers' order history</li> <li class="item">Select the base price for discount calculation</li> <li class="item">Restrict promotions for products with special prices</li> <li class="item">Hyva-compatible by default</li> <li class="item">GraphQL Application Server compatible</li> <li class="item"><a href="https://calendly.com/yuliya-simakovich/book-a-demo" rel="nofollow"><b>⏱Book a live demo</b></a></li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.9</p><a href="https://amasty.com/special-promotions-pro-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/special-promotions-pro-for-magento-2.html#reviews" aria-label="Reviews" >17&nbsp;<span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="649" data-price-box="product-id-649"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-649" data-price-amount="319" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$319</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="special-promotions-pro-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/649/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="649"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC82NDkv"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-541 { background: #9ae9df }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/special-promotions-for-magento-2.html" class="product photo product-item-photo amsite-product-541 " aria-label="Special Promotions M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/s/p/special-promotions-for-magento-2_64d0c72bb0190.png" alt="Special Promotions for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-541-cat amasty-label-for-541" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"541","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "541", "selector": ".amasty-label-container-13-541-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-13-541-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Special&#x20;Promotions&#x20;for&#x20;Magento&#x20;2" alt="Special&#x20;Promotions&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":541,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Special Promotions M2" aria-label="Special Promotions M2" href="https://amasty.com/special-promotions-for-magento-2.html">Special Promotions M2</a></strong> <div class="swatch-wrapper -round swatch-opt-541" data-role="swatch-option-541"></div> <!--short description--><div class="product description product-item-description"><a href="#choose_option" data-promo-id="banners-special-promotions-m2" data-promo-name="Banners at Special Promotions M2" data-promo-creative="banner_see_subscription_options" data-promo-position="banner_short_description"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/marketing/m2/banners-for-compatibilities/pricing_pro.png" data-srcset="https://cdn.amasty.com/media/marketing/m2/banners-for-compatibilities/pricing_pro_2x.png 2x" alt="See available pricing options!" style="margin-bottom: 20px;"> </a> <p>Enrich your cart price rules list with 20+ more promo actions. Run a great variety of exclusive promotions to easily attract customers' attention and increase sales. </p></div><!--book-live-demo--> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Create promotions for cheapest and most expensive goods </li> <li class="item">Offer deals with free items</li> <li class="item">Set fixed and percent discounts</li> <li class="item">Create specials with quantity steps </li> <li class="item">Run promotions with bundle products</li> <li class="item">Show all coupons on the checkout page</li> <li class="item">Hyva-ready storefront </li> <li class="item">GraphQL Application Server compatible</li> <li class="item"><a href="https://calendly.com/yuliya-simakovich/book-a-demo" rel="nofollow"><b>⏱Book a live demo</b></a></li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">5.0</p><a href="https://amasty.com/special-promotions-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/special-promotions-for-magento-2.html#reviews" aria-label="Reviews" >8&nbsp;<span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="541" data-price-box="product-id-541"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-541" data-price-amount="279" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$279</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="special-promotions-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/541/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="541"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC81NDEv"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Special&#x20;Promotions&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Special&#x20;Promotions&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-3161 { background: #ffcc73 }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/ultimate-sale-booster-for-magento-2.html" class="product photo product-item-photo amsite-product-3161 " aria-label="Ultimate Sale Booster M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/u/l/ultimate-sale-booster-for-magento-2_6426a84a49e24.png" alt="Ultimate Sale Booster for Magento 2"/></span></span></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":3161,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Ultimate Sale Booster M2" aria-label="Ultimate Sale Booster M2" href="https://amasty.com/ultimate-sale-booster-for-magento-2.html">Ultimate Sale Booster M2</a></strong> <div class="swatch-wrapper -round swatch-opt-3161" data-role="swatch-option-3161"></div> <!--short description--><div class="product description product-item-description"><p>Grow your Magento store sales with our special sales-boosting product pack. Craft tailored discounts with intelligent conditions, accentuate special deals with eye-catching labels, sweeten the deal with free gifts, and many more. </p></div><!--book-live-demo--> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Create 20+ promotion types for extraordinary deals</li> <li class="item">Use flexible conditions for your promotions</li> <li class="item">Highlight particular offers with catchy labels</li> <li class="item">Use free labels pack or easily design your own ones</li> <li class="item">Create an unlimited number of rules with free gifts</li> <li class="item">Create sense of urgency adding сountdown timers</li> <li class="item">Hyvä-ready storefront</li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="3161" data-price-box="product-id-3161"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-3161" data-price-amount="779" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$779</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="ultimate-sale-booster-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/3161/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="3161"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC8zMTYxLw~~"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Ultimate&#x20;Sale&#x20;Booster&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Ultimate&#x20;Sale&#x20;Booster&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-857 { background: #f2f996 }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/gdpr-for-magento-2.html" class="product photo product-item-photo amsite-product-857 " aria-label="GDPR Pro M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/g/d/gdpr-for-magento-2_625009f556deb.png" alt="GDPR Pro for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-857-cat amasty-label-for-857" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"857","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "857", "selector": ".amasty-label-container-13-857-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-13-857-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="GDPR&#x20;Pro&#x20;for&#x20;Magento&#x20;2" alt="GDPR&#x20;Pro&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":857,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="GDPR Pro M2" aria-label="GDPR Pro M2" href="https://amasty.com/gdpr-for-magento-2.html">GDPR Pro M2</a></strong> <div class="swatch-wrapper -round swatch-opt-857" data-role="swatch-option-857"></div> <!--short description--><div class="product description product-item-description"><a href="#choose_option" data-promo-id="banners-gdpr-m2" data-promo-name="Banners at GDPR M2" data-promo-creative="banner_see_subscription_options" data-promo-position="banner_short_description"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/marketing/m2/banners-for-compatibilities/pricing_prem.png" data-srcset="https://cdn.amasty.com/media/marketing/m2/banners-for-compatibilities/pricing_premi_2x.png 2x" alt="See available pricing options!" style="margin-bottom: 20px;"> </a> <p>The Magento 2 GDPR extension is designed to help online stores comply with the latest legislative EU requirements and strengthen data security and privacy. Make sure that your site collects all required user consents to avoid penalties and protect your business.</p></div><!--book-live-demo--> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Comply with GDPR, CNIL and LGPD requirements</li> <li class="item">Obtain and record multiple users’ consent on various pages</li> <li class="item">Get cookie consents with an advanced popup</li> <li class="item">Let customers manage their personal data in personal accounts</li> <li class="item">Save personal data in recent documentation</li> <li class="item">Activate Google <a href="#consent_mode">Consent Mode V2</a></li> <li class="item">Use <a href="https://amasty.com/pwa-add-on-for-gdpr-for-magento-2.html">PWA add-on</a> for enhanced mobile performance</li> <li class="item">Hyva-ready storefront (<a href="https://gdpr-hyva-m2.magento-demo.amasty.com/gear/watches.html" target="_blank" rel="nofollow">view demo >></a>) </li> <li class="item"><strong>New!</strong> Hyvä Checkout ready</li> <li class="item"><a href="#wcag_compliance">✔️ ADA & WCAG compliant</a></li> <li class="item"><a href="https://calendly.com/yuliya-simakovich/book-a-demo" rel="nofollow"><b>⏱Book a live demo</b></a></li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.9</p><a href="https://amasty.com/gdpr-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/gdpr-for-magento-2.html#reviews" aria-label="Reviews" >11&nbsp;<span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="857" data-price-box="product-id-857"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-857" data-price-amount="279" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$279</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="gdpr-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/857/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="857"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC84NTcv"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="GDPR&#x20;Pro&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="GDPR&#x20;Pro&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-3259 { background: #9ae9df }</style> <div class="product-photo-wrapper"><a href="https://amasty.com/uet-tag-for-magento-2.html" class="product photo product-item-photo amsite-product-3259 " aria-label="Microsoft Ads (UET Tag) M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/u/e/uet-tag-for-magento-2_6555fa3d8a106.png" alt="Microsoft Ads (UET Tag) for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-16-3259-cat amasty-label-for-3259" style="display: none; width:38px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-left","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"3259","label":16,"margin":7,"alignment":0,"order":4,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "3259", "selector": ".amasty-label-container-16-3259-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-16-3259-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/new-2x_1.png" style="opacity: 1 !important;vertical-align: top;" title="Microsoft&#x20;Ads&#x20;&#x28;UET&#x20;Tag&#x29;&#x20;for&#x20;Magento&#x20;2" alt="Microsoft&#x20;Ads&#x20;&#x28;UET&#x20;Tag&#x29;&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":3259,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Microsoft Ads (UET Tag) M2" aria-label="Microsoft Ads (UET Tag) M2" href="https://amasty.com/uet-tag-for-magento-2.html">Microsoft Ads (UET Tag) M2</a></strong> <div class="swatch-wrapper -round swatch-opt-3259" data-role="swatch-option-3259"></div> <!--short description--><div class="product description product-item-description"><p>Gain maximum insights into users’ actions after they click on your ads with the Microsoft Ads extension for Magento 2. Seamlessly integrate the UET Tag into your store without any coding skills or code changes. </p></div><!--book-live-demo--> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Activate 10+ built-in events for tracking</li> <li class="item">Set up event-based conversion goals</li> <li class="item">Create precise remarketing lists </li> <li class="item">Form similar audiences </li> <li class="item">Get access to extended analytics</li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="3259" data-price-box="product-id-3259"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-3259" data-price-amount="59" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$59</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="microsoft-ads-uet-tag-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/3259/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="3259"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC8zMjU5Lw~~"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Microsoft&#x20;Ads&#x20;&#x28;UET&#x20;Tag&#x29;&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Microsoft&#x20;Ads&#x20;&#x28;UET&#x20;Tag&#x29;&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-670 { background: #9ae9df }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/follow-up-email-for-magento-2.html" class="product photo product-item-photo amsite-product-670 " aria-label="Follow Up Email M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/f/o/follow-up-email-for-magento-2_2x.png" alt="Follow Up Email for Magento 2"/></span></span></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":670,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Follow Up Email M2" aria-label="Follow Up Email M2" href="https://amasty.com/follow-up-email-for-magento-2.html">Follow Up Email M2</a></strong> <div class="swatch-wrapper -round swatch-opt-670" data-role="swatch-option-670"></div> <!--short description--><div class="product description product-item-description">Generate and send numerous triggered emails based on customer activity to build productive relationships with clients and increase the number of repeated purchases. Customize the templates and effectively manage emails dispatch.</div><!--book-live-demo--> <div class="amsite-live-demo"><a class="book-live-demo" href="https://calendly.com/yuliya-simakovich/book-a-demo" title="Book a Live Demo" aria-label="Book a Live Demo" rel="nofollow" target="_blank">Book a Live Demo <svg class="amtheme-icon" focusable="false"><use xlink:href="#icon-arrow-right"/></svg></a></div> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Create notifications for different order statuses</li> <li class="item">Send emails based on wishlists and previous orders</li> <li class="item">Generate alerts based on customer activity</li> <li class="item">Schedule automatic emails dispatch</li> <li class="item">Collect statistics with Google Analytics</li> <li class="item">NEW | Measure the effectiveness of all campaigns </li> <li class="item">Hyva-compatible by default</li> <li class="item"><b>New!</b>Hyvä Checkout compatible by default</li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.8</p><a href="https://amasty.com/follow-up-email-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="75%" stop-color="&#x23;fcd34d"/><stop offset="75%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/follow-up-email-for-magento-2.html#reviews" aria-label="Reviews" >4&nbsp;<span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="670" data-price-box="product-id-670"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-670" data-price-amount="299" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$299</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="follow-up-email-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/670/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="670"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC82NzAv"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Follow&#x20;Up&#x20;Email&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Follow&#x20;Up&#x20;Email&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-966 { background: #f2f996 }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/cookie-consent-for-magento-2.html" class="product photo product-item-photo amsite-product-966 " aria-label="Cookie Consent (GDPR) M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/c/o/cookie-consent-for-magento-2_6253b4c79f9ab.png" alt="Cookie Consent (GDPR) for Magento 2"/></span></span></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":966,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Cookie Consent (GDPR) M2" aria-label="Cookie Consent (GDPR) M2" href="https://amasty.com/cookie-consent-for-magento-2.html">Cookie Consent (GDPR) M2</a></strong> <div class="swatch-wrapper -round swatch-opt-966" data-role="swatch-option-966"></div> <!--short description--><div class="product description product-item-description"><a href="#choose_option" data-promo-id="banners-cookie-m2" data-promo-name="Banners at Cookie M2" data-promo-creative="banner_see_subscription_options" data-promo-position="banner_short_description"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/marketing/m2/banners-for-compatibilities/pricing_full.png" data-srcset="https://cdn.amasty.com/media/marketing/m2/banners-for-compatibilities/pricing_full_2x.png 2x" alt="See available pricing options!" /> </a> <br> <br> <p>Pss… Ready to break into the global market? Go ahead, but make sure you have a ready privacy-proof strategy! Cookie Consent Helper for Magento 2 is here for you to protect your business with precise consent collection and advanced privacy documentation management across the whole world.</p> </div><!--book-live-demo--> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Choose a cookie bar style and customize the design</li> <li class="item">Collect and filter all cookie consents from registered and guest users </li> <li class="item">Block third-party cookies</li> <li class="item">Available in the <a href="https://amasty.com/docs/doku.php?id=magento_2:cookie_consent" target="_blank">German language</a></li> <li class="item">Google <a href="#consent_mode">Consent Mode V2</a> support</li> <li class="item">Hyva-ready storefront (<a href="https://gdpr-cookie-compliance-hyva-m2.magento-demo.amasty.com/default/" target="_blank" rel="nofollow">view demo >></a>) </li> <li class="item"><strong>New!</strong> Hyvä Checkout ready</li> <li class="item">Mage-OS compatible</li> <li class="item">GeoIP database included, update options available</li> <li class="item">✔️ ADA & WCAG compliant </li> <li class="item"><a href="https://calendly.com/yuliya-simakovich/book-a-demo" rel="nofollow"><b>⏱Book a live demo</b></a></li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.7</p><a href="https://amasty.com/cookie-consent-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="65%" stop-color="&#x23;fcd34d"/><stop offset="65%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/cookie-consent-for-magento-2.html#reviews" aria-label="Reviews" >3&nbsp;<span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="966" data-price-box="product-id-966"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-966" data-price-amount="199" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$199</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="cookie-consent-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/966/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="966"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC85NjYv"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Cookie&#x20;Consent&#x20;&#x28;GDPR&#x29;&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Cookie&#x20;Consent&#x20;&#x28;GDPR&#x29;&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-3225 { background: #f2f996 }</style> <div class="product-photo-wrapper"><a href="https://amasty.com/us-privacy-laws-for-magento-2.html" class="product photo product-item-photo amsite-product-3225 " aria-label="US Privacy Laws M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/u/s/us-privacy-laws-for-magento-2_64e876310f667.png" alt="US Privacy Laws for Magento 2"/></span></span></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":3225,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="US Privacy Laws M2" aria-label="US Privacy Laws M2" href="https://amasty.com/us-privacy-laws-for-magento-2.html">US Privacy Laws M2</a></strong> <div class="swatch-wrapper -round swatch-opt-3225" data-role="swatch-option-3225"></div> <!--short description--><div class="product description product-item-description"><p>Easily prepare your store to meet US laws' essential requirements using a single solution. California (CCPA/CPRA), Virginia (VCDPA), Colorado (CPA), Connecticut (CTDPA), and Utah (UCPA) privacy regulations are supported.</p> </div><!--book-live-demo--> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Empower users to opt out of personal data sales or sharing</li> <li class="item">Enable buyers to securely download their personal data</li> <li class="item">Offer customers to request account deletion</li> <li class="item">Create and manage Privacy Policy versions</li> <li class="item">Collect various consents with custom checkboxes</li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="3225" data-price-box="product-id-3225"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-3225" data-price-amount="149" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$149</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="us-privacy-laws-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/3225/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="3225"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC8zMjI1Lw~~"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="US&#x20;Privacy&#x20;Laws&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="US&#x20;Privacy&#x20;Laws&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-673 { background: #9ae9df }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/loyalty-program-for-magento-2.html" class="product photo product-item-photo amsite-product-673 " aria-label="Loyalty Program M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/l/o/loyalty-program-for-magento-2_2x.png" alt="Loyalty Program for Magento 2"/></span></span></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":673,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Loyalty Program M2" aria-label="Loyalty Program M2" href="https://amasty.com/loyalty-program-for-magento-2.html">Loyalty Program M2</a></strong> <div class="swatch-wrapper -round swatch-opt-673" data-role="swatch-option-673"></div> <!--short description--><div class="product description product-item-description"><p>Create a unique program to reward regular customers with exclusive discounts. Use flexible shopping cart rules to generate targeted offers and boost sales. </p></div><!--book-live-demo--> <div class="amsite-live-demo"><a class="book-live-demo" href="https://calendly.com/yuliya-simakovich/book-a-demo" title="Book a Live Demo" aria-label="Book a Live Demo" rel="nofollow" target="_blank">Book a Live Demo <svg class="amtheme-icon" focusable="false"><use xlink:href="#icon-arrow-right"/></svg></a></div> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Offer discounts based on cart and customer attributes</li> <li class="item">Create promotions based on purchase history</li> <li class="item">Use 16 additional actions for unique propositions </li> <li class="item">Display program info and purchase stats in customer accounts</li> <li class="item">Motivate store visitors to register and spend more</li> <li class="item"><strong>NEW!</strong> Hyva-ready storefront</li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.8</p><a href="https://amasty.com/loyalty-program-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="75%" stop-color="&#x23;fcd34d"/><stop offset="75%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/loyalty-program-for-magento-2.html#reviews" aria-label="Reviews" >4&nbsp;<span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="673" data-price-box="product-id-673"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-673" data-price-amount="349" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$349</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="loyalty-program-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/673/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="673"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC82NzMv"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Loyalty&#x20;Program&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Loyalty&#x20;Program&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-921 { background: #9ae9df }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/custom-options-conditions-for-magento-2.html" class="product photo product-item-photo amsite-product-921 " aria-label="Custom Promo Conditions M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/c/u/custom-promo-conditions-for-magento-2_2x.png" alt="Custom Promo Conditions for Magento 2"/></span></span></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":921,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Custom Promo Conditions M2" aria-label="Custom Promo Conditions M2" href="https://amasty.com/custom-options-conditions-for-magento-2.html">Custom Promo Conditions M2</a></strong> <div class="swatch-wrapper -round swatch-opt-921" data-role="swatch-option-921"></div> <!--short description--><div class="product description product-item-description">Turn your promotions to highly personalized ones with the Custom Conditions for Magento 2 extension.</div><!--book-live-demo--> <div class="amsite-live-demo"><a class="book-live-demo" href="https://calendly.com/yuliya-simakovich/book-a-demo" title="Book a Live Demo" aria-label="Book a Live Demo" rel="nofollow" target="_blank">Book a Live Demo <svg class="amtheme-icon" focusable="false"><use xlink:href="#icon-arrow-right"/></svg></a></div> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Target promotions with order history conditions</li> <li class="item">15 types of customer attributes to personalize your offers</li> <li class="item">Specify segments based on Shipping & Payment methods</li> <li class="item">Mix conditions to stronger the flexibility of promotions</li> <li class="item">Default Magento functionality support</li> <li class="item">Hyva-compatible by default</li> <li class="item">Hyvä Checkout compatible by default</li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="921" data-price-box="product-id-921"> <span class="old-price sly-old-price no-display"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span class="price-label">Regular Price</span> <span id="old-price-921" data-price-amount="99" data-price-type="oldPrice" class="price-wrapper " ><span class="price">$99</span></span> </span></span> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-921" data-price-amount="79" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$79</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="custom-options-conditions-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/921/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="921"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC85MjEv"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Custom&#x20;Promo&#x20;Conditions&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Custom&#x20;Promo&#x20;Conditions&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-686 { background: #9ae9df }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/special-occasion-coupons-for-magento-2.html" class="product photo product-item-photo amsite-product-686 " aria-label="Special Occasion Coupons M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/s/p/special-occasion-coupons-for-magento-2_2x.png" alt="Special Occasion Coupons for Magento 2"/></span></span></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":686,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Special Occasion Coupons M2" aria-label="Special Occasion Coupons M2" href="https://amasty.com/special-occasion-coupons-for-magento-2.html">Special Occasion Coupons M2</a></strong> <div class="swatch-wrapper -round swatch-opt-686" data-role="swatch-option-686"></div> <!--short description--><div class="product description product-item-description"><p>Generate and send discount coupons based on birthdays, newsletter subscriptions, order placement and other events. Use custom email templates to draw customers’ attention and build their loyalty.</p></div><!--book-live-demo--> <div class="amsite-live-demo"><a class="book-live-demo" href="https://calendly.com/yuliya-simakovich/book-a-demo" title="Book a Live Demo" aria-label="Book a Live Demo" rel="nofollow" target="_blank">Book a Live Demo <svg class="amtheme-icon" focusable="false"><use xlink:href="#icon-arrow-right"/></svg></a></div> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Generate coupons based on multiple events</li> <li class="item">Send promo codes to customers automatically</li> <li class="item">Choose the date of dispatch and set the expiry period for each coupon type</li> <li class="item">Automatically delete unused coupons</li> <li class="item">Use predefined or custom email templates</li> <li class="item">Hyva-compatible by default</li> <li class="item"><b>New!</b>Hyvä Checkout compatible by default</li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">5.0</p><a href="https://amasty.com/special-occasion-coupons-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/special-occasion-coupons-for-magento-2.html#reviews" aria-label="Reviews" >2&nbsp;<span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="686" data-price-box="product-id-686"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-686" data-price-amount="109" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$109</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="special-occasion-coupons-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/686/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="686"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC82ODYv"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Special&#x20;Occasion&#x20;Coupons&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Special&#x20;Occasion&#x20;Coupons&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> <li class="item product product-item"><div class="product-item-info" data-amtheme-js="product" data-container="product-grid"> <style> .product-item-info:hover .amsite-product-974 { background: #9ae9df }</style> <img class="lazy hyva-label-top-right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-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 class="product-photo-wrapper"><a href="https://amasty.com/countdown-timer-for-magento-2.html" class="product photo product-item-photo amsite-product-974 " aria-label="Countdown Timer M2" tabindex="-1"> <span class="product-image-container" style="width:430px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/dd7f24249e71a20e1c3a482e18db1167/c/o/countdown-timer-for-magento-2_2x.png" alt="Countdown Timer for Magento 2"/></span></span></a> <div class="amtheme-icons-position -top-left"> <div class="amtheme-compare amtheme-icon-wrapper -top-left-hover"></div></div> <div class="amtheme-icons-position -bottom-left"> <div class="amtheme-wishlist amtheme-icon-wrapper -bottom-left"> <div class="towishlist-wrap"><a href="#" class="action towishlist amtheme-circle-icon" title="Add to Wish List" aria-label="Add to Wish List" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":974,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' data-action="add-to-wishlist" role="button"><svg class="amtheme-icon -hover-bg" focusable="false"><use xlink:href="#icon-wishlist" /></svg></a></div> </div> </div> <div class="amtheme-icons-position -bottom-right"> </div> </div><div class="product details product-item-details"><strong class="product name product-item-name"><a class="product-item-link" title="Countdown Timer M2" aria-label="Countdown Timer M2" href="https://amasty.com/countdown-timer-for-magento-2.html">Countdown Timer M2</a></strong> <div class="swatch-wrapper -round swatch-opt-974" data-role="swatch-option-974"></div> <!--short description--><div class="product description product-item-description">Сreate a sense of urgency with Magento 2 Countdown Timer &#8987; to boost sales and decrease customers’ decision-making time. </div><!--book-live-demo--> <div class="amsite-live-demo"><a class="book-live-demo" href="https://calendly.com/yuliya-simakovich/book-a-demo" title="Book a Live Demo" aria-label="Book a Live Demo" rel="nofollow" target="_blank">Book a Live Demo <svg class="amtheme-icon" focusable="false"><use xlink:href="#icon-arrow-right"/></svg></a></div> <!--features--> <div class="amsite-features-block" data-mage-init='{"amViewMore":{}}'><div class="amsite-view" data-amsite-js="view-features" title="View features" aria-label="View features">View features</div><ul class="amsite-list" data-amsite-js="list-features"> <li class="item">Design catchy countdown timers with ready-made templates</li> <li class="item">Create limited-time offers to speed up purchases</li> <li class="item">Easily schedule your countdown timers display</li> <li class="item">Attach countdown timers to any products and store pages</li> <li class="item">Manage all your countdown timers in one handy grid</li> <li class="item">Hyva-ready storefront</li> <li class="item">Hyva Checkout compatible by default</li> <li class="amsite-hide" data-amsite-js="hide-features" title="Hide features" aria-label="Hide features">Hide features</li></ul></div></div><div class="product-item-inner "> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.8</p><a href="https://amasty.com/countdown-timer-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="80%" stop-color="&#x23;fcd34d"/><stop offset="80%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/countdown-timer-for-magento-2.html#reviews" aria-label="Reviews" >5&nbsp;<span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="974" data-price-box="product-id-974"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-974" data-price-amount="119" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$119</span></span> </span></span> </div> <!--end tmp block--><div class="product actions product-item-actions" ><div class="actions-primary" > <!--start tmp block--> <form data-role="tocart-form" data-product-sku="countdown-timer-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3Byb21vdGlvbnMtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/974/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="974"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDNCeWIyMXZkR2x2Ym5NdFpYaDBaVzV6YVc5dWN5MW1iM0l0YldGblpXNTBieTB5TG1oMGJXd34vcHJvZHVjdC85NzQv"> <input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Countdown&#x20;Timer&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span class="amtheme-title" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Countdown&#x20;Timer&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form> <!--end tmp block--></div></div></div></div></li> </ol></div> <div class="toolbar toolbar-products" data-mage-init='{"productListToolbarForm":{"mode":"product_list_mode","direction":"product_list_dir","order":"product_list_order","limit":"product_list_limit","modeDefault":"grid","directionDefault":"asc","orderDefault":"position","limitDefault":15,"url":"https:\/\/amasty.com\/promotions-extensions-for-magento-2.html","formKey":"1az1daSvPtvV8ak8","post":false}}'> <nav class="pages" aria-label="Pagination"> <ul class="items pages-items"> <li class="item current"><strong class="page"><span class="label">You&#039;re currently reading page</span> 1</strong></li> <li class="item"><a href="https://amasty.com/promotions-extensions-for-magento-2.html?p=2" class="page" title="Page 2" aria-label="Page 2"><span class="label">Page</span> 2</a></li> <li class="item"><a href="https://amasty.com/promotions-extensions-for-magento-2.html?p=3" class="page" title="Page 3" aria-label="Page 3"><span class="label">Page</span> 3</a></li> </ul> <a class="action next" href="https://amasty.com/promotions-extensions-for-magento-2.html?p=2" title="Next" aria-label="Next"><span class="label">Page</span> <span>Next</span> <svg class="amtheme-icon" focusable="false"><use xlink:href="#icon-arrow-right-min"></use></svg></a> </nav> <div id="am-page-count" style="display: none">3</div> </div> </div> <div class="amshopby-filters-bottom-cms"></div> <div data-am-js="js-init"></div><div class="category-view"> <div class="category-description"><p></p> <!--separator--> <div class="section"> <div class="section-container section-content"><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="/skin/frontend/amasty/default/images/magento2/shopping-girl.png" /> <div class="text-block"> <p>All marketers know that well-organized promotion can not only boost your sales but also customers' loyalty. On this page, you will find Magento 2 special promotions extensions that will help you launch a discount, create coupon codes, build loyalty programs, and more.&nbsp;</p> <p><strong>Extensions for running promos.</strong>&nbsp;These modules help you configure promo rules and mechanisms. The Magento 2&nbsp;<a href="https://amasty.com/special-promotions-pro-for-magento-2.html">Special Promotions Pro&nbsp;</a>plugin has more than 20 built-in promo types. You can offer your customers<a href="https://amasty.com/free-gift-for-magento-2.html">&nbsp;free gifts</a>,&nbsp;<a href="https://amasty.com/gift-wrap-for-magento-2.html">gift wrap</a>,&nbsp;<a href="https://amasty.com/generate-and-import-coupons-for-magento-2.html">discount coupons</a>, allow the use of&nbsp;<a href="https://amasty.com/multiple-coupons-for-magento-2.html">multiple coupons</a>, buy&nbsp;<a href="https://amasty.com/gift-card-for-magento-2.html">gift cards</a>, and enable&nbsp;<a href="https://amasty.com/countdown-timer-for-magento-2.html">countdown timer</a>&nbsp;to create urgency. With these tools, your possibilities are limited only by your imagination. Combine them and create unique and profitable deals to engage your customers in the purchasing process and increase sales.</p> <p><strong>Note</strong>: See why you need to offer&nbsp;gift features in Magento 2 stores all year long?</p> <p><strong>Extensions for brand awareness.</strong>The plugins help you inform customers about special offers. This group includes&nbsp;<a href="https://amasty.com/promo-banners-for-magento-2.html">Promo Banners</a>,&nbsp;<a href="https://amasty.com/push-notifications-for-magento-2.html">Push Notifications</a>,&nbsp;<a href="https://amasty.com/abandoned-cart-email-for-magento-2.html">Abandoned Cart Email</a>,&nbsp;<a href="https://amasty.com/follow-up-email-for-magento-2.html">Follow Up Email</a>, and<a href="https://amasty.com/blog-pro-for-magento-2.html">&nbsp;Blog Pro</a>. You can announce promo and inform visitors about the rules and personal options. You can create secret sales by sending emails to a specific customers&rsquo; segment or create banners for CMS pages. Also, you can highlight your marketing campaign on the blog to reach a bigger audience.</p> <p><strong>Extensions for building customers&rsquo; trust in your brand.&nbsp;</strong>These modules allow you to build long-term customer loyalty such as&nbsp;<a href="https://amasty.com/reward-points-for-magento-2.html">Reward Points</a>,&nbsp;<a href="https://amasty.com/loyalty-program-for-magento-2.html">Loyalty Program</a>, and&nbsp;<a href="https://amasty.com/affiliate-for-magento-2.html">Affiliate</a>. It&rsquo;s easier and cheaper to retain loyal customers than find and attract a new one. So you need to have tools that will help you build strong relationships with customers and reward them for their trust. You can convert regulars into affiliates and let them earn money, become your partner and work on your business goal. Brand advocates will help you not only transform marketing funnel into hourglass but also build a strong brand. Learn&nbsp;<a href="https://amasty.com/blog/top-5-features-of-consumer-behavior-to-increase-your-sales/">how consumer behavior can boost your sales</a>&nbsp;from our free e-book.</p> <p><br /><strong>Note</strong>: Read our&nbsp;<a href="https://amasty.com/blog/promotion-rules-in-magento-2-comprehensive-guide/">comprehensive guide about promotion rules in Magento 2</a>&nbsp;to choose the most suitable Amasty solution.</p> </div> </div> </div></div></div></div><div class="sidebar sidebar-main"> <div class="block filter" data-mage-init='{ "collapsible": { "openedState": "active", "collapsible": true, "active": false, "collateral": { "openedState": "filter-active", "element": "body" } }, "amLayeredNavigationMobile":{} }'><button class="action button-as-link amtheme-close" type="button" data-amtheme-js="layered-close" aria-label="Close&#x20;filter" title="Close&#x20;filter"><svg class="amtheme-icon -close"><use xlink:href="#icon-close"/></svg></button> <div class="block-title filter-title" data-role="title" data-count="0">Shop By</div><div class="block-content filter-content"> <strong role="heading" aria-level="2" class="block-subtitle filter-subtitle">Filters</strong> <div class="filter-options" id="narrow-by-list" data-role="content" data-amtheme-js="navigation-filter" data-mage-init='{ "accordion": { "openedState": "-active", "collapsible": true, "active": false, "animate": { "duration": 200 }, "multipleCollapsible": false }}'> <div data-role="collapsible" class="filter-options-item" data-amtheme-js="navigation-filter-item"><div data-role="title" class="filter-options-title -category">Category</div><div data-role="content" class="filter-options-content"> <form data-amshopby-filter="category_ids" data-amshopby-filter-request-var="cat"><ul class="items am-filter-items-category_ids am-labels-folding -am-singleselect" > <li class="item -is-collapsible -is-expanded -filter-parent" data-label="All"> <a class="am-filter-item-67bee9485ead7 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="All" title="All" href="https://amasty.com/magento-2-extensions.html" > <span class="label">All</span> <span class="count">261<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="25" type="radio" aria-label="All" /><span class="amshopby-choice"></span> <ul class="items items-children level-1 -folding"> <li class="item -is-expanded -filter-parent" data-label="Featured&#x20;Extensions"> <a class="am-filter-item-67bee9485ecee amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Featured&#x20;Extensions" title="Featured&#x20;Extensions" href="https://amasty.com/featured-extensions-for-magento-2.html" > <span class="label">Featured Extensions</span> <span class="count">15<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="80" type="radio" aria-label="Featured&#x20;Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Hyva&#x20;Theme&#x20;Extensions"> <a class="am-filter-item-67bee9485ee91 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Hyva&#x20;Theme&#x20;Extensions" title="Hyva&#x20;Theme&#x20;Extensions" href="https://amasty.com/hyva-theme-extensions-for-magento-2.html" > <span class="label">Hyva Theme Extensions</span> <span class="count">162<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="83" type="radio" aria-label="Hyva&#x20;Theme&#x20;Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Hyva&#x20;Checkout&#x20;Ready"> <a class="am-filter-item-67bee9485f028 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Hyva&#x20;Checkout&#x20;Ready" title="Hyva&#x20;Checkout&#x20;Ready" href="https://amasty.com/hyva-checkout-ready-extensions-for-magento-2.html" > <span class="label">Hyva Checkout Ready</span> <span class="count">135<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="109" type="radio" aria-label="Hyva&#x20;Checkout&#x20;Ready" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Navigation&#x20;&amp;amp&#x3B;&#x20;Search"> <a class="am-filter-item-67bee9485f1bf amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Navigation&#x20;&amp;amp&#x3B;&#x20;Search" title="Navigation&#x20;&amp;amp&#x3B;&#x20;Search" href="https://amasty.com/usability-navigation-extensions-for-magento-2.html" > <span class="label">Navigation &amp; Search</span> <span class="count">21<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="26" type="radio" aria-label="Navigation&#x20;&amp;amp&#x3B;&#x20;Search" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Catalog&#x20;Management"> <a class="am-filter-item-67bee9485f33f amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Catalog&#x20;Management" title="Catalog&#x20;Management" href="https://amasty.com/catalog-management-extensions-for-magento-2.html" > <span class="label">Catalog Management</span> <span class="count">34<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="28" type="radio" aria-label="Catalog&#x20;Management" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Checkout"> <a class="am-filter-item-67bee9485f4ab amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Checkout" title="Checkout" href="https://amasty.com/checkout-extensions-for-magento-2.html" > <span class="label">Checkout</span> <span class="count">27<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="35" type="radio" aria-label="Checkout" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Google&#x20;Extensions"> <a class="am-filter-item-67bee9485f61a amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Google&#x20;Extensions" title="Google&#x20;Extensions" href="https://amasty.com/google-extensions-for-magento-2.html" > <span class="label">Google Extensions</span> <span class="count">17<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="110" type="radio" aria-label="Google&#x20;Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Law-Based&#x20;Extensions"> <a class="am-filter-item-67bee9485f785 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Law-Based&#x20;Extensions" title="Law-Based&#x20;Extensions" href="https://amasty.com/law-based-extensions-for-magento-2.html" > <span class="label">Law-Based Extensions</span> <span class="count">8<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="112" type="radio" aria-label="Law-Based&#x20;Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Shipping"> <a class="am-filter-item-67bee9485f90c amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Shipping" title="Shipping" href="https://amasty.com/shipping-extensions-for-magento-2.html" > <span class="label">Shipping</span> <span class="count">19<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="30" type="radio" aria-label="Shipping" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="SEO"> <a class="am-filter-item-67bee9485fa6b amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="SEO" title="SEO" href="https://amasty.com/seo-optimization-extensions-for-magento-2.html" > <span class="label">SEO</span> <span class="count">29<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="33" type="radio" aria-label="SEO" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Promotions"> <a class="am-filter-item-67bee9485fbc7 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Promotions" title="Promotions" href="https://amasty.com/promotions-extensions-for-magento-2.html" > <span class="label">Promotions</span> <span class="count">44<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="29" type="radio" aria-label="Promotions" checked /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Social&#x20;Network&#x20;Integrations"> <a class="am-filter-item-67bee9485fd02 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Social&#x20;Network&#x20;Integrations" title="Social&#x20;Network&#x20;Integrations" href="https://amasty.com/social-extensions-for-magento-2.html" > <span class="label">Social Network Integrations</span> <span class="count">7<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="106" type="radio" aria-label="Social&#x20;Network&#x20;Integrations" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Images&#x20;&amp;amp&#x3B;&#x20;Media"> <a class="am-filter-item-67bee9485fe7b amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Images&#x20;&amp;amp&#x3B;&#x20;Media" title="Images&#x20;&amp;amp&#x3B;&#x20;Media" href="https://amasty.com/images-media-extensions-for-magento-2.html" > <span class="label">Images &amp; Media</span> <span class="count">15<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="36" type="radio" aria-label="Images&#x20;&amp;amp&#x3B;&#x20;Media" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Order&#x20;Management"> <a class="am-filter-item-67bee9485ffec amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Order&#x20;Management" title="Order&#x20;Management" href="https://amasty.com/order-management-extensions-for-magento-2.html" > <span class="label">Order Management</span> <span class="count">28<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="32" type="radio" aria-label="Order&#x20;Management" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Administration"> <a class="am-filter-item-67bee94860165 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Administration" title="Administration" href="https://amasty.com/administration-extensions-for-magento-2.html" > <span class="label">Administration</span> <span class="count">25<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="82" type="radio" aria-label="Administration" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="B2B&#x20;Products"> <a class="am-filter-item-67bee948602e7 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="B2B&#x20;Products" title="B2B&#x20;Products" href="https://amasty.com/b2b-extensions-for-magento-2.html" > <span class="label">B2B Products</span> <span class="count">27<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="61" type="radio" aria-label="B2B&#x20;Products" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Import&#x20;&amp;amp&#x3B;&#x20;Export"> <a class="am-filter-item-67bee94860464 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Import&#x20;&amp;amp&#x3B;&#x20;Export" title="Import&#x20;&amp;amp&#x3B;&#x20;Export" href="https://amasty.com/import-export-extensions-for-magento-2.html" > <span class="label">Import &amp; Export</span> <span class="count">7<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="81" type="radio" aria-label="Import&#x20;&amp;amp&#x3B;&#x20;Export" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="AI-Powered&#x20;Extensions"> <a class="am-filter-item-67bee948605ce amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="AI-Powered&#x20;Extensions" title="AI-Powered&#x20;Extensions" href="https://amasty.com/ai-extensions-for-magento-2.html" > <span class="label">AI-Powered Extensions</span> <span class="count">3<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="103" type="radio" aria-label="AI-Powered&#x20;Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="PWA&#x20;Extensions"> <a class="am-filter-item-67bee9486076c amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="PWA&#x20;Extensions" title="PWA&#x20;Extensions" href="https://amasty.com/pwa-extensions-for-magento-2.html" > <span class="label">PWA Extensions</span> <span class="count">20<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="62" type="radio" aria-label="PWA&#x20;Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Free&#x20;Magento&#x20;2&#x20;Extensions"> <a class="am-filter-item-67bee948608e1 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Free&#x20;Magento&#x20;2&#x20;Extensions" title="Free&#x20;Magento&#x20;2&#x20;Extensions" href="https://amasty.com/free-magento-2-extensions.html" > <span class="label">Free Magento 2 Extensions</span> <span class="count">8<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="43" type="radio" aria-label="Free&#x20;Magento&#x20;2&#x20;Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Research&#x20;Product&#x20;Demand"> <a class="am-filter-item-67bee94860a64 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Research&#x20;Product&#x20;Demand" title="Research&#x20;Product&#x20;Demand" href="https://amasty.com/research-product-demand.html" > <span class="label">Research Product Demand</span> <span class="count">57<span class="filter-count-label">items</span></span> </a> <input class="am-input" name="amshopby[cat][]" value="69" type="radio" aria-label="Research&#x20;Product&#x20;Demand" /><span class="amshopby-choice"></span> </li> </ul></li> </ul></form></div></div> <div data-role="collapsible" class="filter-options-item" data-amtheme-js="navigation-filter-item"><div data-role="title" class="filter-options-title -hyva compatible">Hyva Compatible</div><div data-role="content" class="filter-options-content"> <form class="am-ranges hyva_compatible" data-am-js="ranges" data-amshopby-filter="hyva_compatible" data-amshopby-filter-request-var="hyva_compatible" autocomplete="off"><ol class="items am-filter-items-hyva_compatible -am-singleselect" > <li class="item " data-label="Hyva-ready storefront"> <input name="amshopby[hyva_compatible][]" value="90" type="radio" style="" class="input" /> <a class="am-filter-item-67bee94860e3f link " data-am-js="filter-item-default" href="https://amasty.com/promotions-extensions-for-magento-2.html?hyva_compatible=90" rel="nofollow"><span class="label">Hyva-ready storefront</span> <span class="count">28<span class="filter-count-label">items</span></span> </a> </li> <li class="item " data-label="Compatible by default"> <input name="amshopby[hyva_compatible][]" value="91" type="radio" style="" class="input" /> <a class="am-filter-item-67bee94860f17 link " data-am-js="filter-item-default" href="https://amasty.com/promotions-extensions-for-magento-2.html?hyva_compatible=91" rel="nofollow"><span class="label">Compatible by default</span> <span class="count">10<span class="filter-count-label">items</span></span> </a> </li> </ol></form> </div></div> <div data-role="collapsible" class="filter-options-item" data-amtheme-js="navigation-filter-item"><div data-role="title" class="filter-options-title -hyva checkout compatible">Hyva Checkout Compatible</div><div data-role="content" class="filter-options-content"> <form class="am-ranges hyva_checkout_compatible" data-am-js="ranges" data-amshopby-filter="hyva_checkout_compatible" data-amshopby-filter-request-var="hyva_checkout_compatible" autocomplete="off"><ol class="items am-filter-items-hyva_checkout_compatible -am-singleselect" > <li class="item " data-label="Hyva Checkout ready"> <input name="amshopby[hyva_checkout_compatible][]" value="95" type="radio" style="" class="input" /> <a class="am-filter-item-67bee948610fd link " data-am-js="filter-item-default" href="https://amasty.com/promotions-extensions-for-magento-2.html?hyva_checkout_compatible=95" rel="nofollow"><span class="label">Hyva Checkout ready</span> <span class="count">11<span class="filter-count-label">items</span></span> </a> </li> <li class="item " data-label="Compatible by default"> <input name="amshopby[hyva_checkout_compatible][]" value="96" type="radio" style="" class="input" /> <a class="am-filter-item-67bee948611d3 link " data-am-js="filter-item-default" href="https://amasty.com/promotions-extensions-for-magento-2.html?hyva_checkout_compatible=96" rel="nofollow"><span class="label">Compatible by default</span> <span class="count">19<span class="filter-count-label">items</span></span> </a> </li> </ol></form> </div></div> </div></div></div> <div class="amsite-promotion-sidebar"> <div class="hint">40K+ SUBSCRIBERS</div> <div class="title">JOIN OUR NEWSLETTER CLUB</div> <div class="text">Get e-commerce hacks and our special deals right to your inbox! </div> <form class="rendered-form amform-form mb-12 mx-auto group-[.am-dialog-popup]:mb-0 default" id="amform-form-141" action="https://amasty.com/amasty_customform/form/submit/" enctype="multipart/form-data" method="post"><input name="form_key" type="hidden" value="1az1daSvPtvV8ak8" /><input name="form_id" type="hidden" value="141" /><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="page1141"> <!-- 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-141" 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-141">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="initFormEvents141().processSubmit( $refs.page1141, $refs.tab1141, $event)">JOIN!</button> </div></div> </div> <!--Validations--><!--Dependencies--><!--Survey--> <!--Default values--><!--Init google map--></form> </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="1az1daSvPtvV8ak8" /></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_67bee94865f96()}" 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() { function trackMatomoCategoryViews() { window._paq.push(['setEcommerceView', false, false, "Magento 2"]); window._paq.push(['trackPageView']); } window.addEventListener('matomo-has-loaded', trackMatomoCategoryViews); })();</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="1az1daSvPtvV8ak8" /> <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="1az1daSvPtvV8ak8" /> <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-67bee94867d73" class="amgdpr-checkbox" data-consent-id="1" required value="1"><label for="amprivacy-checkbox-67bee94867d73" 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-67bee94867d94" class="amgdpr-checkbox" data-consent-id="2" value="1"><label for="amprivacy-checkbox-67bee94867d94" 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/category/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="1az1daSvPtvV8ak8" /> <input type="hidden" name="formId" value="user_forgotpassword"/> <fieldset class="fieldset mb-6"><div class="text-center mb-6">Please enter your email address below to receive a password reset link.</div><div class="am-input field field-reserved email required !mb-0"><input type="email" name="email" alt="email" id="email_address" class="form-input" placeholder="Email&#x20;address" required value="" /><label class="label" for="email_address">Email address</label></div></fieldset><button type="submit" class="action submit w-full primary disabled:opacity-75" >Reset My Password</button></form><div class="text-center">or go back to <a class="back" href="https://amasty.com/customer/account/login/" aria-label="Login&#x20;page" >Login page</a></div></div></div> </div></template></div></div></div></div><button type="button" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> </div></div></div></div> <div x-data="AmAuthPopupNotification()" x-init="initialize()" x-on:amsl-popup-show-notification.window="showNotification($event.detail)" > <div x-cloak x-bind="overlay('amsl-popup-notification')" x-spread="overlay('amsl-popup-notification')" class="am-overlay-popup"><div class="amsl-popup-notification am-container-popup inset-0"><div x-ref="amsl-popup-notification" role="dialog" aria-modal="true" class="am-dialog-popup w-full sm:max-w-[560px] !bg-green-50"> <span class="absolute top-0 left-0 pt-1 w-full rounded-tl-md rounded-tr-md bg-lime-500"></span> <div class="py-10 text-center"><div class="mb-8"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="45" viewBox="0 0 34 35" fill="none" role="img"> <path d="M0 34.38H34V0.38H0V34.38Z" fill="url(#pattern0)"/> <defs> <pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> <use xlink:href="#image0" transform="scale(0.015625)"/> </pattern> <image id="image0" width="64" height="64" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAP90lEQVR4AeyZA5CtRxCFpyqFZ9u2bdu2bduvrGfbtm2bq9hO1kbnnP8iU/fdODPhrfp6d6/7/NPdZ2aV5dv/NwnonTb+WoV58rDBDXnW8jN53uobedL0efLdWktxf0mgbMJgDQkamSPiVIGPUu7XFXnVVSRggEjgQPzsJ/Kyg0AUibtafjpQtmCwxle7M52JuVRKUh7UE3ndG8kPA8NdPwP6iLxoKykP60vMxVJbgbIBgxUkaFSmL3dnksgzhV0CBPR1JR80Aj/JUIjSXVAWknyvtkScLrQcKNMwWAFXOcNXezInfn8kFxPkFfcIAEa6fgagHF52FHncSBJuVJLvD+dsApRJGKwRfrLAtW/2Z5XE29VEXvf0EQDw79c9vKsg7HjeD4EyCYM10PzmYhUIGqLIq85vCsDfWRrPWzsNMfZSaQk9mrspUKZgsAaWeNPPtqaT2Mul0fDaOc3PVwBOBTZDedRQEm9Wka/3ZtkOlCkYrIFGmBGTIDHqbBFnmUvgEKALAAIHewVIulNDvj2YPRgoUzBYJfRYntfhJ/KJPGmiCaA1Ql2A29UpQDTKIT1QJmCwCUfi/sjThdjpmSwY7iPAoB9L4FY1CsB+UPBfIwAs74Koc0VpePwLEMAe0IZewRmFaJqcCAWBMgGDVVIe1O0VcaogryoF0EuAv9MWe8cgm+WXuzLGJN6qmhEoEzBYBXO+UcRpCPC4sR8BhtMiu5d/VWGpfLAu9YdAmYLBKnB6zTgFOOu1MagJ0I3LH16hvHx3KIeELE19AShTMFgFdT037kpZkZed/DpBGiQu/5iLJYSe4eNNaeYAZQoGm9AOv5t8r5ZmhUfqAnAvgPlf09k0fbg+Ne1wpX+NFcbsr8ftMGucZwG8+v4FqOHU//trUn8BlEkYbEE7fJ3NjXMe9a8lP8qnBGoJ+8RHG9OcBsokDFZIeVC/fvT5Yhx/3AprFniUJsAwbw+IvlBcPt2SdhNQJmGwQuiR3F9xacvL9lrt+wow2CkBeAV4gDL0AHuAMgmDcWBnj8VdLef2/4O02h+l4d4HvOrkrJKEm1XYAD/6x58HwPYujjpbVHAW4O78/pIfqQnQ1REKllkoGk6QJgFlCgZjIPGx4Sfzs6trc3/kzwgwhCLRJNEMcTfIwxNOhI14v0L/KAHwxYeEHctDS8uEmByT9Ff7mgA8He7vNEJ52pS9gCJwU8TTocSIkwW2fHc4Z0Og/iwY/nTg9IaFHnUn/6y5Xve++Agw3PEHzipgKTxv5bwHN0XcP6Ck3OTDmUL+eVhdzaLOFWuDhtkTAg1GuY2IvVRqbMzFkqOx+vh3B0yeynjsLaD8wfCngi8zIvSYnvzAX5m8R4D+oA+Txygs4ewHWEZIhv80kaS7NWmk+N6Eq4uT5U3oNZ618DTUj+EsFwHlC8OfBr5cb1hd1rz7yGug/2XvmzwJ1ErgaTPBFRb6Bgjq9IFElALPEHCW6P6fwlAw/Bfg+/VzzhfoLbAqzgClo35o3p7DJGmSMIDX+Xr82bZt27Zt27Zt27Zt27Zt5MXv6Yt5ajGzu5//eKfQ1VnheDOzx5+eEKG3dszd9w3sEFg7vLBYhNdM4YkJw8MjxnZWa6CCqNjTxjNeREjKZ8UfoAHS+80usDhBdYDw9rSMCboCb+IJmVIJ4/Ru1CeXDaPOxYglUnPbQJXwp7/47taJLzIl/e7WSQKTBsD5xDxiuvrTNzeN/3EI+uJX1451T+Tmt1qdPk7AVH7A6FaeZxU9S+HFWDoBgzKEY7BJoe25VLwn5XPc3HFSVBnS2F9HJP03UIE//SBCcJ98aVMQmBEIwRMgFw3MWwZXvLLaD5LyDEYpypkFxgZq+ene6Y0JjALk8U4FksEGHP5keWo5KUBuDrTEppZM3ePmaITo+HJNyPiicOZVoenFlBRSBpZfWpbwdM+LB015WJ3yxmbs8v45g/OScFW8AjCZPQI7Sp5R+LyP4fqGLkIu8llcoQNnKcqMG/OLthJdaqZABf5AN0LRW2xPEcoCJQGz4PQv55ovHZhK32PRo7yiGf1+MhOg8tap7VKMpwirEDq6Z6VYJIoWxvdd4CTQASjNgaKFwXi+BIcob8e4LxzW+Dmc3BGowJ86xqA4werK/maoKZ+hn3uBBI0eXl4/vqU8uksDBdb6eE1RhBI9v1hPYCjpwBCi1RGkjfvSRuRITd//8Lwhy2vHNcpjuzW8Y7tAlcgTYIBdBk7pdWFQlO5H+cxPKSZEeZawb5zYWu7YqL3cvVmb9QAzwkiLIUKJocpH5w8tPVDj8nVwhOhIGGIB11GMizGiFdtZLu+c1lFeOLRRHt6xUe7Zoq18cM4QxweqOrpPIAS+/bf1eM8GkKvqip7Pc8IU27MO+MhOjXL+Ml3lrCW7yp2btJdHd26Ux3dvlCf3apSn92tQympReTW8yrMM5fjSkY3y7IGN8kg8z4hXr9pZzli8q5y+WNdHLx7emC9Q9Y084f3/REh++Tsqnwbox/vWAOU7A7xzemd57qBGuXPj9nLNap3loe1bKGV5vLx0RFP5Fw8PxDk4f/6QRnlm/6aBntij4egeo6j60umLmJKfEoaaqqcVIQaYIAnGoCs5cMrX254Kje5qsaq7Iie0hftL4d0Ht2spb5zQKuTlvnAHz8lxU2a/K6oVvgWyayFLCqTPnKPMURumV0xttc3fv81RBpgvq3nP6FnBgff+GtoU4UKJOYrwV7C+CcWsA1JYePMegxBa0dMGPUd5+4oiyFi1no8bYKA6i3foZNo2AyUPiNow7I8xu+wIVOAPMMCqBjEgEPi3RI3uEp5QFMHy9Hmexf1NfBjAJIjygHkmGELU8Cwl1ZKawstTGLA/NcZzIk2X0RUUUgVy3b5/IsMAW7Iea7Ks429liHrlJ6zwR2a0MLO7NIBKzgDyWiSYBsdusiqv/UE8NyFWaGstU0C4U9S1VABKC31RFnxg5iJydAk14a1T2o8JVFDlSeTl3qk81IzwGyieyvPWcgQ2VRWWCqAQZwAKIiy2wxRDuS8qACeQIowklKUOokNBnURNYBT3kqrjBjyPqYoe7VGXibE79g1UUOVJeOUoSgtRwvZlhEBvSkL/7tXzc1VhKjx5rdsAPJMG4GkzymBr0e6kwTAMYmpsEQR8rhhKBaSnP5iWwqIE/VU3mstqYbxo9eXloxuibJpABVWehFdOTy8xAvRrhIGD5+uFKfk5/o62yn9UNVOAkEJbBCQZun+r1vLUPo0I17agsB2B9vJ2EJv3ztTWhvWcaPAdhst6AdLGvoKoUUitIvmtka023OHiQJXoPom8OTsnJvK0X0P0hNV6wKp1xQM8T/lm25KfwpTXeArPJ7xw91M6yl+/Zme5IYATYIb3bhmG2boVUdLr8QPRgiPoGjZSm/g/MeLt54M3PLVvAz/w2UU9bo5GDz0l1+PkKUMQnjG0R0jl8jqrr+fzO5DXdcWzImfPZgBdQI5KA3ktDYS3kMfybt+wqTgyhMc/vEOj3LtFa7ltg45yw1qd5cqVu8plKzaBNN20Tke5df0On2OQvgtY4dMx5lSBqm90n4SwB6awqrRJShqjv6Cc5zxfr8Z1pLdrCENDGkAaZBSkEYQ372J92pacDaPAiI4mRp7zvPzW3kSQcyvIoK44useob0ZXGbG33wlqgxsliyI4UKJfLEphymSrUYFVY3mtuNXgGmr3H53Hc+6p2tIgo0A7JDCFFUHLV9KCgmZx2pijAuh73q+d5hFEl6N36Q65FqAmfPfVNWO2B6o68oQBZqOEAfrF/F5i2poK17w3vYoLuXrkfh25ekRhIFie9ycKJkZUFEJCZ+/HCawSO3ouqXAdnJNwTW7jM67vKp5b9LQxwgDtYbUfAzwEKahBKEBQrau7t+Lw3986KaGErZB0T29X3YFiejboy2kQY9bH9TkjGiOK4JBpAII78r6qnjzAWJxCSd52bh4ASYTIb2wGkzbGvTRQ1dF9ApH3t/WlcC409NNfLZLGoijBzOJUbuxNbgpjQspDLc7zlrgYhkHqxug2qnvZEi1goMOIC8EZVzvDAZx7h2cxPMhxyFw3rHeQ20zz06gf0UavClR11C9EwWYpWK6uhNAWKwimqGS7UlgwMwMrVOhlMQWNnSHCamfytR+DMAYjMqb0yehwTinPmAdog5bH1IFPLxmhxPa6EPY+UeE5shlHiPuuczKDe96lfjAcCmxR5ZBAVUf9ggGG8sUUplaZkQtK8QCPq8gE4nmWRTKsvFjOQlrksRf7DqJiDOCNfoyRcM1YDKBva3mMqre/GRQ2CFEQmsFEmnFFIAWNm0giJDKxSGMxJL6guI4VqOroPknEjOr0bC8Gw8cpYqMTNbVqi6cTiGBIiMGf2LO5CnPRcl36tc9Y3BK33CWQqFHUagaZsBYd9h2a7yS0MXM8fMD6AKM8c0CT+DAyr6oXUgY+CHCI/0wRkchQTKx859NYWltsoH4g4RfdYd0fcm1NSHuRF1IKu8oVGAIRDNm4db2Oct0aneXMJSxBdZUHtmkRFSgoKiot8HHG6J7k5LoejzGMc/cZQBE09rWrd5Yb1w4E8cEMXSNAiE9+dnMs8t4S70eCHH126QpdX4YBrwoDbRekbchA1T/07yYjzELp9DSLW6biZWF+z+ZtxcuuCEHOWSrW7kJpip+9ZCi/eJwv3vUtpnbfVq0MRRnRwBDCUFSIKkaRUoE4xrnU8rma8kaE7WO7NgojksPiKK9a1zceumuJ7NmICI5Aj+t4aIfGp8ElOgJVb+jpA0aYJxT/JAenNC+gnRQ9ZdGm0hcs0/VGhOi1T+3dOCiEXD0K1AzBJ4aOQjTfXZu2fZXhK2piKioiclFCDZHP4JrnLVl5hoJ4fDPfRUxz1Vf6qBXZSbLgKdQIknQSTWaOova8QNUbev0wprZDh2DHxWTkmytW6ipXrdr1YZzf8mQoG5GxXBSZ8aIr/D1Q9Q/BFkeL1dy7pIaIET0iIgzLi2Z65ubh3S5HxZTQINXUAcYSLTqO1FEjKIyf1MgZ7jJHkqokPowp6jp+9W+EwtLDhlUnD5bXEqgGFbHQuX7UiVflrNRQMxhDdKG80ouyVnkprngpdj5nGJGhFUoPNQJl5vlsn7mBmq1PgRU5UmZAP63x5w9BeOmf4en1btug/f5Llu8ql0YqqSEZHTnzUzyzzty3ZSuDMILuQxm1AvPUNQAh00myVYsUz2l99gm+jgj+z1/m3+YSEf7ThZIHRrV+qrlx0awppwZca32XR8pFxChmWpnNDx5VTOW3gik19HotWpQkJ1EcTZ/VruMCVW/w509FdISxYwtr0WcPamwZxfKwwLkRCdfHVta9ERlPPLh9y4tP7l1Ll4N1BmkCLfVeb5GE0kU0Pb5H4/pYg2gEqt7gz18ekfczhpH2jwL6ZBjj82jHnwdV/jwU/jyKbPM87scW2ifRQc6J1FggUA0M/gfsGVXkq95xtgAAAABJRU5ErkJggg=="/> </defs> <title>thumb</title></svg> </div><template x-if="notification"><div x-html="notification"></div></template></div></div></div></div></div> <div class="copyright px-6 xs:px-8 pt-4 lg:pt-5 lg:pb-12 pb-9 bg-gray-800 text-secondary-lighter lg:text-center text-sm"><span>© 2009-2025 Amasty. All Rights Reserved.</span></div> </div> <div data-role="compare-sticky-link" data-bind="scope: 'compareProducts'"><div class="amtheme-sticky-compare hidden-print" data-bind="css: {'-show': !!compareProducts().count}, mageInit: { 'amStickyCompareLink': { 'referenceElement': '.products .product-items', 'offsetTopElements': '.-sticky-message' } }"><div class="amtheme-wrapper -link"> <a class="amtheme-link" data-bind="attr: {'href': compareProducts().listUrl}" title="Compare&#x20;Items" aria-label="Compare&#x20;Items"><span>Compare</span> <span class="amtheme-count" data-bind="text: '(' + compareProducts().count + ')', css: {'-show': !!compareProducts().count}"></span></a></div><div class="amtheme-wrapper -clear"><button id="compare-clear" class="amtheme-clear button-as-link" title="Clear&#x20;Compare&#x20;List" aria-label="Clear&#x20;Compare&#x20;List" data-post="&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;catalog&#x5C;&#x2F;product_compare&#x5C;&#x2F;clear&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;uenc&quot;&#x3A;&quot;&quot;,&quot;confirmation&quot;&#x3A;true,&quot;confirmationMessage&quot;&#x3A;&quot;Are&#x20;you&#x20;sure&#x20;you&#x20;want&#x20;to&#x20;remove&#x20;all&#x20;items&#x20;from&#x20;your&#x20;Compare&#x20;Products&#x20;list&#x3F;&quot;&#x7D;&#x7D;"><svg class="amtheme-icon"><use xlink:href="#icon-trash" /></svg></button></div></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_67bee9483616f() { 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_67bee94836353() { return { element: null, elementStyle: null, parent: null, parentWidth: null, initialized: false, wrapperClass: '', wrapperStyle: null, labelContainer: null, labelWidth: null, amLabelStyle: null, /** * @param $el */ initLabel($el) { this.element = $el; this.labelContainer = this.$refs.amLabel; this.labelWidth = Number(this.$refs.amLabelElement.dataset.size); this.parent = this.$refs.amLabelParent; this.parentWidth = this.$refs.amLabelImgParent.width; this.wrapperClass = `[data-wrapper-class=${this.$refs.amLabelElement.dataset.wrapperClass}]`; this.wrapperStyle = this.$refs.amLabelWrapper.classList; switch ($el.dataset.position) { case '0': this.elementStyle = ' top-0 left-0'; this.amLabelStyle = ' items-start' break; case '1': this.elementStyle = ' top-0 mx-auto'; this.amLabelStyle = ' items-start' break; case '2': this.elementStyle = ' top-0 right-0'; this.amLabelStyle = ' items-end' break; case '3': this.elementStyle = ' top-1/2 -translate-y-1/2 left-0'; this.amLabelStyle = ' items-start' break; case '4': this.elementStyle = ' top-1/2 -translate-y-1/2 mx-auto'; this.amLabelStyle = ' items-start' break; case '5': this.elementStyle = ' top-1/2 -translate-y-1/2 right-0'; this.amLabelStyle = ' items-end' break; case '6': this.elementStyle = ' bottom-0 left-0'; this.amLabelStyle = ' items-start' break; case '7': this.elementStyle = ' bottom-0 mx-auto'; this.amLabelStyle = ' items-start' break; case '8': this.elementStyle = ' bottom-0 right-0'; this.amLabelStyle = ' items-end' break; } this.$refs.amLabelWrapper.classList = this.wrapperStyle + this.elementStyle; if ('0' === '0') { this.$refs.amLabelWrapper.classList = this.$refs.amLabelWrapper.classList + this.amLabelStyle; } }, /** * @return {void} */ render() { if (this.element.dataset.amlabelObserved) { return; } this.element.dataset.amlabelObserved = true; this.parentContainerProcessor.process(this); this.labelItemProcessor.process(this); this.initialized = true; }, /** * @param url * @returns {string} */ getImgLabelPath(url) { const baseUrl = BASE_URL.replace('index.php/', ''); return `${baseUrl}media/amasty/amlabel/${url}`; }, /** * @param url */ labelRedirect(url) { return window.location.assign(`${BASE_URL + url}`); }, /** * @returns {string|string} */ getImageSize() { return this.labelWidth ? this.parentWidth * this.labelWidth / 100 + 'px': ''; } } }</script><script> function initCartDrawer() { return { isGlobalOpen: false, open: false, isLoading: false, cart: {}, maxItemsToDisplay: 10, itemsCount: 0, isHoverOnCartWrapper: false, totalCartAmount: 0, removedBlock: [], mainBlock: [], getData(data) { if (data.cart) { this.cart = data.cart; this.itemsCount = data.cart.items && data.cart.items.length || 0; this.totalCartAmount = this.cart.summary_count; this.setCartItems(); } }, cartItems: [], setCartItems() { this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; if (this.maxItemsToDisplay > 0) { this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); } this.removeActions(); }, deleteItemFromCart(item, target) { const formKey = hyva.getFormKey(); const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; this.isLoading = true; this.animationRemoveItem(item.item_id, target); fetch(postUrl, { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, "body": "form_key=" + formKey + "&item_id=" + item.item_id, "method": "POST", "mode": "cors", "credentials": "include" }).then(response => { if (response.redirected) { window.location.href = response.url; } else if (response.ok) { return response.json(); } else { window.dispatchMessages && window.dispatchMessages([{ type: 'warning', text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' }]); this.isLoading = false; } }).then(result => { if (!result.success) { window.dispatchMessages && window.dispatchMessages([{ type: 'error', text: result.error_message }], 5000) this.isLoading = false; } window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }); }, toggleCartDrawer(event) { if (this.isMobile('(max-width: 1023px)')) { return; } if (event.detail && event.detail.isOpen !== undefined) { if (event.detail.isOpen) { this.isOpen = true; this.openCartDrawer() this.isGlobalOpen = !event.detail.showAfterAdd; } else { this.open = false; this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent) } } else { this.openCartDrawer() } }, openCartDrawer() { this.open = true; this.$nextTick(() => { this.$refs && this.$refs.cartDialogContent }) setTimeout(() => { this.$refs.cartDialogContent.focus() }, 500); if (this.closeTimeout) { clearTimeout(this.closeTimeout); } this.closeTimeout = setTimeout(() => { if (!this.isGlobalOpen) { this.closeCartDrawer(); } }, 5000); }, closeCartDrawer() { this.$dispatch('toggle-cart', { isOpen: false }); }, closeCartWithDelay() { this.isGlobalOpen = false; setTimeout(() => { if (this.isGlobalOpen) { return; } this.closeCartDrawer(); }, 500); }, getAdditionalOptions(item) { var period = item.product_subscription_period, typeUser = item.subscription_type.toLowerCase(), typeVersion = item.product_subscription_version; period = period === 'year' ? 'annual' : period; if (window.dataForSubscriptions[typeUser]) { return '<p class="list-item">&mdash; ' + window.dataForSubscriptions[typeUser][period][typeVersion] .join('</p><p class="list-item">&mdash; ') + '</p>'; } return ''; }, animationRemoveItem(itemId, target) { const itemBlock = target.closest(`[data-amsite-js="${itemId}"]`); const removeBlock = document.querySelector('[data-amsite-js="removeBlock"]'); const mainBlock = itemBlock.querySelector('[data-amsite-js="item-main-block"]'); const clonedRemoveBlock = removeBlock.cloneNode(true); mainBlock.classList.add('hidden'); itemBlock.appendChild(clonedRemoveBlock); clonedRemoveBlock.classList.remove('hidden'); this.removedBlock.push(clonedRemoveBlock); this.mainBlock.push(mainBlock); }, removeActions() { if (this.removedBlock.length) { this.removedBlock.forEach((block) => { block.remove(); }); this.mainBlock.forEach((block) => { block.classList.remove('hidden'); }); this.isLoading = false; if (document.body.classList.contains('checkout-cart-index')) { window.location.reload(); } } }, showRemoveMessage(item, target) { window.dispatchEvent( new CustomEvent('minicart-popup-show-notification', {detail: {item, target}}) ) }, ...AmsiteUtils() } }</script><script> const AmMiniCartPopupNotification = function () { const TEXTS = { transferred: 'This\u0020product\u0020is\u0020transferred.\u0020If\u0020you\u0020delete\u0020it,\u0020you\u0020will\u0020no\u0020longer\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020be\u0020able\u0020to\u0020buy\u0020it\u0020with\u0020a\u0020100\u0025\u0020discount\u0020for\u0020the\u0020initial\u0020order.\u0020Would\u0020you\u0020still\u0020like\u0020to\u0020proceed\u003F', free: 'Are\u0020you\u0020sure\u0020you\u0020want\u0020to\u0020remove\u0020the\u0020free\u0020gift\u0020from\u0020the\u0020cart\u003F\u0020Once\u0020deleted\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020you\u0020won\u2019t\u0020be\u0020able\u0020to\u0020add\u0020it\u0020again.', }; return { item: {}, target: null, showNotification(data) { this.item = data.detail.item; this.target = data.detail.$el; this.createContentForPopup(this.item ); this.show('minicart-popup-notification'); }, createContentForPopup(item) { const itemType = item.is_transfered ? 'transferred' : 'free'; this.$refs.minicartNotificationContent.textContent = TEXTS[itemType]; } } }</script><script type="text/x-magento-init"> { "*": { "Magento_Ui/js/core/app": { "components": { "messages": { "component": "Magento_Theme/js/view/messages", "floatingMessages": "true" } } } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-649]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["651"]},{"id":"5","label":"Enterprise","products":["652"]},{"id":"81","label":"Magento Cloud","products":["2816"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"651":{"baseOldPrice":{"amount":319},"oldPrice":{"amount":319},"basePrice":{"amount":319},"finalPrice":{"amount":319},"tierPrices":[],"msrpPrice":{"amount":0}},"652":{"baseOldPrice":{"amount":619},"oldPrice":{"amount":619},"basePrice":{"amount":619},"finalPrice":{"amount":619},"tierPrices":[],"msrpPrice":{"amount":0}},"2816":{"baseOldPrice":{"amount":919},"oldPrice":{"amount":919},"basePrice":{"amount":919},"finalPrice":{"amount":919},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":319},"oldPrice":{"amount":319},"basePrice":{"amount":319},"finalPrice":{"amount":319}},"productId":"649","chooseText":"Choose an Option...","images":[],"index":{"651":{"135":"4"},"652":{"135":"5"},"2816":{"135":"81"}},"salable":{"135":{"4":["651"],"5":["652"],"81":["2816"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"651":"special-promotions-pro-for-magento-2-ce","652":"special-promotions-pro-for-magento-2-ee","2816":"special-promotions-pro-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"649"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-649]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":319},"oldPrice":{"amount":319},"basePrice":{"amount":319},"finalPrice":{"amount":319}} } } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-538]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["539"]},{"id":"5","label":"Enterprise","products":["540"]},{"id":"81","label":"Magento Cloud","products":["2734"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"539":{"baseOldPrice":{"amount":209},"oldPrice":{"amount":209},"basePrice":{"amount":209},"finalPrice":{"amount":209},"tierPrices":[],"msrpPrice":{"amount":0}},"540":{"baseOldPrice":{"amount":509},"oldPrice":{"amount":509},"basePrice":{"amount":509},"finalPrice":{"amount":509},"tierPrices":[],"msrpPrice":{"amount":0}},"2734":{"baseOldPrice":{"amount":809},"oldPrice":{"amount":809},"basePrice":{"amount":809},"finalPrice":{"amount":809},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":209},"oldPrice":{"amount":209},"basePrice":{"amount":209},"finalPrice":{"amount":209}},"productId":"538","chooseText":"Choose an Option...","images":[],"index":{"539":{"135":"4"},"540":{"135":"5"},"2734":{"135":"81"}},"salable":{"135":{"4":["539"],"5":["540"],"81":["2734"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"539":"product-labels-for-magento-2-ce","540":"product-labels-for-magento-2-ee","2734":"product-labels-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"538"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-538]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":209},"oldPrice":{"amount":209},"basePrice":{"amount":209},"finalPrice":{"amount":209}} } } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-643]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["644"]},{"id":"5","label":"Enterprise","products":["645"]},{"id":"81","label":"Magento Cloud","products":["2932"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"644":{"baseOldPrice":{"amount":309},"oldPrice":{"amount":309},"basePrice":{"amount":309},"finalPrice":{"amount":309},"tierPrices":[],"msrpPrice":{"amount":0}},"645":{"baseOldPrice":{"amount":609},"oldPrice":{"amount":609},"basePrice":{"amount":609},"finalPrice":{"amount":609},"tierPrices":[],"msrpPrice":{"amount":0}},"2932":{"baseOldPrice":{"amount":909},"oldPrice":{"amount":909},"basePrice":{"amount":909},"finalPrice":{"amount":909},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":309},"oldPrice":{"amount":309},"basePrice":{"amount":309},"finalPrice":{"amount":309}},"productId":"643","chooseText":"Choose an Option...","images":[],"index":{"644":{"135":"4"},"645":{"135":"5"},"2932":{"135":"81"}},"salable":{"135":{"4":["644"],"5":["645"],"81":["2932"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"644":"customers-also-viewed-for-magento-2-ce","645":"customers-also-viewed-for-magento-2-ee","2932":"automatic-related-products-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"643"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-643]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":309},"oldPrice":{"amount":309},"basePrice":{"amount":309},"finalPrice":{"amount":309}} } } } }</script><script type="text/x-magento-init"> { "*": { "Amasty_Preorder/js/product/preorder_list": { "jsonConfig" : {"649":{"configurable":{"entity":"649","swatchOpt":".swatch-opt-649","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"649":{"135":"Edition"}},"isAllProductsPreorder":0}},"538":{"configurable":{"entity":"538","swatchOpt":".swatch-opt-538","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"538":{"135":"Edition"}},"isAllProductsPreorder":0}},"643":{"configurable":{"entity":"643","swatchOpt":".swatch-opt-643","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"643":{"135":"Edition"}},"isAllProductsPreorder":0}}} } } }</script><script type="text/javascript" src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Amasty_Stockstatus/js/product/list/remove-default-status.min.js"></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\/29\/","handles":["default","catalog_category_view","catalog_category_view_type_layered","catalog_category_view_type_layered_without_children","catalog_category_view_displaymode_products","catalog_category_view_id_29","hyva_default","hyva_catalog_category_view","hyva_catalog_category_view_type_layered","hyva_catalog_category_view_type_layered_without_children","hyva_catalog_category_view_displaymode_products","hyva_catalog_category_view_id_29","hyva_amcookiebar_popup","am_mega_menu_layout"],"originalRequest":{"route":"catalog","controller":"category","action":"view","uri":"\/promotions-extensions-for-magento-2.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":0}; const formData = 'form_id=' + formId + '&product_id=' + params.productId; const form = document.getElementById('amform-form-' + formId + ''); const parseXData = function (node) { try { const xDataString = (node.getAttribute('x-data') ?? '{}') .replace(/[\n ]+/g, '') .replace(/(\w+):/g, '"$1":') .replace(/'/g, '"'); return JSON.parse(xDataString); } catch (e) { console.log(e); return null; } }; const updateWrapperXData = function (inputNode, inputData) { try { const inputWrapper = inputNode.closest('.fieldset-block'); const xDataObject = parseXData(inputWrapper); if (typeof xDataObject.value !== 'undefined' && xDataObject.value !== inputData) { xDataObject.value = inputData; inputWrapper.setAttribute('x-data', JSON.stringify(xDataObject)); } } catch (e) { console.error(e); } }; const getValueAsArray = function(inputData) { return ( typeof inputData === 'string' ? [inputData] : Array.isArray(inputData) ? inputData : [] ); } const checkNodesByValues = function(nodes, values, attributeName) { values.forEach(function (value) { const nodeToSetAttribute = nodes.find(node => node.getAttribute('value') === value); nodeToSetAttribute && (nodeToSetAttribute[attributeName] = true); }); } const textInputFiller = { supportedInputTypes: [ 'text', 'email', 'number', 'date', 'time' ], supportedTagNames: [ 'textarea' ], support: function (inputNode) { return this.supportedInputTypes.includes(inputNode.getAttribute('type')) || this.supportedTagNames.includes(inputNode.tagName.toLowerCase()); }, fill: function (inputNode, inputData) { if (typeof inputData !== 'string') { return; } inputNode.value = inputData; updateWrapperXData(inputNode, inputData); } }; const selectInputFiller = { supportedTagNames: [ 'select' ], support: function (inputNode) { return this.supportedTagNames.includes(inputNode.tagName.toLowerCase()); }, fill: function (inputNode, inputData) { const optionValues = getValueAsArray(inputData); if (optionValues.length === 0) { return; } this.clearSelectedAttribute(inputNode); checkNodesByValues(Array.from(inputNode.options), optionValues, 'selected'); updateWrapperXData(inputNode, optionValues); }, clearSelectedAttribute: function (inputNode) { Array.from(inputNode.options).forEach((option) => { option.selected = false; option.removeAttribute('selected'); }); } }; const checkableInputFiller = { supportedInputTypes: [ 'checkbox', 'radio' ], support: function (inputNode) { return this.supportedInputTypes.includes(inputNode.getAttribute('type')); }, fill: function (inputNode, inputData) { const inputName = inputNode.getAttribute('name'); const checkboxList = document.querySelectorAll(`input[name="${inputName}"]`); const checkboxValues = getValueAsArray(inputData); if (checkboxValues.length === 0) { return; } this.uncheck(checkboxList); checkNodesByValues(Array.from(checkboxList), checkboxValues, 'checked'); this.fillRating(inputNode, inputData); }, fillRating(inputNode, inputData) { if (!this.isRating(inputNode) || typeof inputData !== 'string') { return; } const xDataContainer = inputNode.closest('[x-data]'); if (!xDataContainer?.getAttribute('x-data').includes('clickedRatingId')) { return; } const xData = parseXData(xDataContainer); if (!xData) { return; } xData.clickedRatingId = inputData; xDataContainer.setAttribute('x-data', JSON.stringify(xData)); xDataContainer.querySelector('input:checked')?.click(); }, isRating: function(inputNode) { return inputNode.name.startsWith('rating-'); }, uncheck: function (checkboxList) { checkboxList.forEach(function (checkbox) { checkbox.checked = false; }); } }; const inputFillerPool = { excludedInputNames: [ 'form_id', 'form_key', 'is_survey' ], inputFillers: [ textInputFiller, selectInputFiller, checkableInputFiller ], fill: function (inputNode, inputData) { if (this.shouldExclude(inputNode)) { return; } for (const fillerIndex in this.inputFillers) { if (this.inputFillers[fillerIndex].support(inputNode)) { this.inputFillers[fillerIndex].fill(inputNode, inputData); inputNode.closest('.fieldset-block').dispatchEvent(new Event('change')); break; } } }, shouldExclude: function (inputNode) { return this.excludedInputNames.includes(inputNode.getAttribute('name')) || inputNode.getAttribute('type') === 'hidden'; } }; function requestData(url, body) { return new Promise((resolve, reject) => { fetch(url, { method: 'POST', body: body, headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'X-Requested-With': 'XMLHttpRequest' } }).then(response => response.json()) .then(data => { resolve(data); }) .catch((error) => { reject(error); }); }); } requestData(params.urlSession, formData).then(data => { const formFields = data.form_fields ?? {}; const persistedInputNames = Object.keys(formFields); persistedInputNames.forEach(inputName => { const inputNode = form.querySelector(`[name^="${inputName}"]`); !!inputNode && inputFillerPool.fill(inputNode, formFields[inputName]); }); }) })(188);</script><script type="text/x-magento-init"> { "body": { "requireCookie": {"noCookieUrl":"https:\/\/amasty.com\/cookie\/index\/noCookies\/","triggers":[".action.towishlist"],"isRedirectCmsPage":true} } }</script><script type="text/x-magento-init"> { "body": { "addToWishlist": {"productType":["simple","virtual","downloadable","bundle","grouped","configurable"]} } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-643]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["644"]},{"id":"5","label":"Enterprise","products":["645"]},{"id":"81","label":"Magento Cloud","products":["2932"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"644":{"baseOldPrice":{"amount":309},"oldPrice":{"amount":309},"basePrice":{"amount":309},"finalPrice":{"amount":309},"tierPrices":[],"msrpPrice":{"amount":0}},"645":{"baseOldPrice":{"amount":609},"oldPrice":{"amount":609},"basePrice":{"amount":609},"finalPrice":{"amount":609},"tierPrices":[],"msrpPrice":{"amount":0}},"2932":{"baseOldPrice":{"amount":909},"oldPrice":{"amount":909},"basePrice":{"amount":909},"finalPrice":{"amount":909},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":309},"oldPrice":{"amount":309},"basePrice":{"amount":309},"finalPrice":{"amount":309}},"productId":"643","chooseText":"Choose an Option...","images":[],"index":{"644":{"135":"4"},"645":{"135":"5"},"2932":{"135":"81"}},"salable":{"135":{"4":["644"],"5":["645"],"81":["2932"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"644":"customers-also-viewed-for-magento-2-ce","645":"customers-also-viewed-for-magento-2-ee","2932":"automatic-related-products-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"643"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-643]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":309},"oldPrice":{"amount":309},"basePrice":{"amount":309},"finalPrice":{"amount":309}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-538]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["539"]},{"id":"5","label":"Enterprise","products":["540"]},{"id":"81","label":"Magento Cloud","products":["2734"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"539":{"baseOldPrice":{"amount":209},"oldPrice":{"amount":209},"basePrice":{"amount":209},"finalPrice":{"amount":209},"tierPrices":[],"msrpPrice":{"amount":0}},"540":{"baseOldPrice":{"amount":509},"oldPrice":{"amount":509},"basePrice":{"amount":509},"finalPrice":{"amount":509},"tierPrices":[],"msrpPrice":{"amount":0}},"2734":{"baseOldPrice":{"amount":809},"oldPrice":{"amount":809},"basePrice":{"amount":809},"finalPrice":{"amount":809},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":209},"oldPrice":{"amount":209},"basePrice":{"amount":209},"finalPrice":{"amount":209}},"productId":"538","chooseText":"Choose an Option...","images":[],"index":{"539":{"135":"4"},"540":{"135":"5"},"2734":{"135":"81"}},"salable":{"135":{"4":["539"],"5":["540"],"81":["2734"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"539":"product-labels-for-magento-2-ce","540":"product-labels-for-magento-2-ee","2734":"product-labels-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"538"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-538]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":209},"oldPrice":{"amount":209},"basePrice":{"amount":209},"finalPrice":{"amount":209}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-1653]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["1654"]},{"id":"5","label":"Enterprise","products":["1655"]},{"id":"81","label":"Magento Cloud","products":["2879"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"1654":{"baseOldPrice":{"amount":849},"oldPrice":{"amount":849},"basePrice":{"amount":849},"finalPrice":{"amount":849},"tierPrices":[],"msrpPrice":{"amount":0}},"1655":{"baseOldPrice":{"amount":1149},"oldPrice":{"amount":1149},"basePrice":{"amount":1149},"finalPrice":{"amount":1149},"tierPrices":[],"msrpPrice":{"amount":0}},"2879":{"baseOldPrice":{"amount":1449},"oldPrice":{"amount":1449},"basePrice":{"amount":1449},"finalPrice":{"amount":1449},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":849},"oldPrice":{"amount":849},"basePrice":{"amount":849},"finalPrice":{"amount":849}},"productId":"1653","chooseText":"Choose an Option...","images":[],"index":{"1654":{"135":"4"},"1655":{"135":"5"},"2879":{"135":"81"}},"salable":{"135":{"4":["1654"],"5":["1655"],"81":["2879"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"1654":"promotion-suite-middle-for-magento-2-ce","1655":"promotion-suite-middle-for-magento-2-ee","2879":"promotion-suite-pro-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"1653"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-1653]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":849},"oldPrice":{"amount":849},"basePrice":{"amount":849},"finalPrice":{"amount":849}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-649]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["651"]},{"id":"5","label":"Enterprise","products":["652"]},{"id":"81","label":"Magento Cloud","products":["2816"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"651":{"baseOldPrice":{"amount":319},"oldPrice":{"amount":319},"basePrice":{"amount":319},"finalPrice":{"amount":319},"tierPrices":[],"msrpPrice":{"amount":0}},"652":{"baseOldPrice":{"amount":619},"oldPrice":{"amount":619},"basePrice":{"amount":619},"finalPrice":{"amount":619},"tierPrices":[],"msrpPrice":{"amount":0}},"2816":{"baseOldPrice":{"amount":919},"oldPrice":{"amount":919},"basePrice":{"amount":919},"finalPrice":{"amount":919},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":319},"oldPrice":{"amount":319},"basePrice":{"amount":319},"finalPrice":{"amount":319}},"productId":"649","chooseText":"Choose an Option...","images":[],"index":{"651":{"135":"4"},"652":{"135":"5"},"2816":{"135":"81"}},"salable":{"135":{"4":["651"],"5":["652"],"81":["2816"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"651":"special-promotions-pro-for-magento-2-ce","652":"special-promotions-pro-for-magento-2-ee","2816":"special-promotions-pro-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"649"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-649]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":319},"oldPrice":{"amount":319},"basePrice":{"amount":319},"finalPrice":{"amount":319}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-541]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["542"]},{"id":"5","label":"Enterprise","products":["543"]},{"id":"81","label":"Magento Cloud","products":["2817"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"542":{"baseOldPrice":{"amount":279},"oldPrice":{"amount":279},"basePrice":{"amount":279},"finalPrice":{"amount":279},"tierPrices":[],"msrpPrice":{"amount":0}},"543":{"baseOldPrice":{"amount":579},"oldPrice":{"amount":579},"basePrice":{"amount":579},"finalPrice":{"amount":579},"tierPrices":[],"msrpPrice":{"amount":0}},"2817":{"baseOldPrice":{"amount":879},"oldPrice":{"amount":879},"basePrice":{"amount":879},"finalPrice":{"amount":879},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":279},"oldPrice":{"amount":279},"basePrice":{"amount":279},"finalPrice":{"amount":279}},"productId":"541","chooseText":"Choose an Option...","images":[],"index":{"542":{"135":"4"},"543":{"135":"5"},"2817":{"135":"81"}},"salable":{"135":{"4":["542"],"5":["543"],"81":["2817"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"542":"special-promotions-for-magento-2-ce","543":"special-promotions-for-magento-2-ee","2817":"special-promotions-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"541"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-541]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":279},"oldPrice":{"amount":279},"basePrice":{"amount":279},"finalPrice":{"amount":279}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-3161]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["3162"]},{"id":"5","label":"Enterprise","products":["3163"]},{"id":"81","label":"Magento Cloud","products":["3164"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"3162":{"baseOldPrice":{"amount":779},"oldPrice":{"amount":779},"basePrice":{"amount":779},"finalPrice":{"amount":779},"tierPrices":[],"msrpPrice":{"amount":0}},"3163":{"baseOldPrice":{"amount":1079},"oldPrice":{"amount":1079},"basePrice":{"amount":1079},"finalPrice":{"amount":1079},"tierPrices":[],"msrpPrice":{"amount":0}},"3164":{"baseOldPrice":{"amount":1379},"oldPrice":{"amount":1379},"basePrice":{"amount":1379},"finalPrice":{"amount":1379},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":779},"oldPrice":{"amount":779},"basePrice":{"amount":779},"finalPrice":{"amount":779}},"productId":"3161","chooseText":"Choose an Option...","images":[],"index":{"3162":{"135":"4"},"3163":{"135":"5"},"3164":{"135":"81"}},"salable":{"135":{"4":["3162"],"5":["3163"],"81":["3164"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"3162":"ultimate-sale-booster-for-magento-2-ce","3163":"ultimate-sale-booster-for-magento-2-ee","3164":"ultimate-sale-booster-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"3161"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-3161]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":779},"oldPrice":{"amount":779},"basePrice":{"amount":779},"finalPrice":{"amount":779}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-857]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["858"]},{"id":"5","label":"Enterprise","products":["859"]},{"id":"81","label":"Magento Cloud","products":["2747"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"858":{"baseOldPrice":{"amount":279},"oldPrice":{"amount":279},"basePrice":{"amount":279},"finalPrice":{"amount":279},"tierPrices":[],"msrpPrice":{"amount":0}},"859":{"baseOldPrice":{"amount":579},"oldPrice":{"amount":579},"basePrice":{"amount":579},"finalPrice":{"amount":579},"tierPrices":[],"msrpPrice":{"amount":0}},"2747":{"baseOldPrice":{"amount":879},"oldPrice":{"amount":879},"basePrice":{"amount":879},"finalPrice":{"amount":879},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":279},"oldPrice":{"amount":279},"basePrice":{"amount":279},"finalPrice":{"amount":279}},"productId":"857","chooseText":"Choose an Option...","images":[],"index":{"858":{"135":"4"},"859":{"135":"5"},"2747":{"135":"81"}},"salable":{"135":{"4":["858"],"5":["859"],"81":["2747"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"858":"gdpr-for-magento-2-ce","859":"gdpr-for-magento-2-ee","2747":"gdpr-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"857"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-857]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":279},"oldPrice":{"amount":279},"basePrice":{"amount":279},"finalPrice":{"amount":279}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-3259]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["3256"]},{"id":"5","label":"Enterprise","products":["3257"]},{"id":"81","label":"Magento Cloud","products":["3258"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"3256":{"baseOldPrice":{"amount":59},"oldPrice":{"amount":59},"basePrice":{"amount":59},"finalPrice":{"amount":59},"tierPrices":[],"msrpPrice":{"amount":0}},"3257":{"baseOldPrice":{"amount":359},"oldPrice":{"amount":359},"basePrice":{"amount":359},"finalPrice":{"amount":359},"tierPrices":[],"msrpPrice":{"amount":0}},"3258":{"baseOldPrice":{"amount":659},"oldPrice":{"amount":659},"basePrice":{"amount":659},"finalPrice":{"amount":659},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":59},"oldPrice":{"amount":59},"basePrice":{"amount":59},"finalPrice":{"amount":59}},"productId":"3259","chooseText":"Choose an Option...","images":[],"index":{"3256":{"135":"4"},"3257":{"135":"5"},"3258":{"135":"81"}},"salable":{"135":{"4":["3256"],"5":["3257"],"81":["3258"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"3256":"microsoft-ads-uet-tag-for-magento-2-ce","3257":"microsoft-ads-uet-tag-for-magento-2-ee","3258":"microsoft-ads-uet-tag-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"3259"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-3259]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":59},"oldPrice":{"amount":59},"basePrice":{"amount":59},"finalPrice":{"amount":59}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-670]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["671"]},{"id":"5","label":"Enterprise","products":["672"]},{"id":"81","label":"Magento Cloud","products":["2870"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"671":{"baseOldPrice":{"amount":299},"oldPrice":{"amount":299},"basePrice":{"amount":299},"finalPrice":{"amount":299},"tierPrices":[],"msrpPrice":{"amount":0}},"672":{"baseOldPrice":{"amount":599},"oldPrice":{"amount":599},"basePrice":{"amount":599},"finalPrice":{"amount":599},"tierPrices":[],"msrpPrice":{"amount":0}},"2870":{"baseOldPrice":{"amount":899},"oldPrice":{"amount":899},"basePrice":{"amount":899},"finalPrice":{"amount":899},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":299},"oldPrice":{"amount":299},"basePrice":{"amount":299},"finalPrice":{"amount":299}},"productId":"670","chooseText":"Choose an Option...","images":[],"index":{"671":{"135":"4"},"672":{"135":"5"},"2870":{"135":"81"}},"salable":{"135":{"4":["671"],"5":["672"],"81":["2870"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"671":"follow-up-email-for-magento-2-ce","672":"follow-up-email-for-magento-2-ee","2870":"follow-up-email-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"670"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-670]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":299},"oldPrice":{"amount":299},"basePrice":{"amount":299},"finalPrice":{"amount":299}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-966]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["967"]},{"id":"5","label":"Enterprise","products":["968"]},{"id":"81","label":"Magento Cloud","products":["2755"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"968":{"baseOldPrice":{"amount":499},"oldPrice":{"amount":499},"basePrice":{"amount":499},"finalPrice":{"amount":499},"tierPrices":[],"msrpPrice":{"amount":0}},"967":{"baseOldPrice":{"amount":199},"oldPrice":{"amount":199},"basePrice":{"amount":199},"finalPrice":{"amount":199},"tierPrices":[],"msrpPrice":{"amount":0}},"2755":{"baseOldPrice":{"amount":799},"oldPrice":{"amount":799},"basePrice":{"amount":799},"finalPrice":{"amount":799},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":199},"oldPrice":{"amount":199},"basePrice":{"amount":199},"finalPrice":{"amount":199}},"productId":"966","chooseText":"Choose an Option...","images":[],"index":{"968":{"135":"5"},"967":{"135":"4"},"2755":{"135":"81"}},"salable":{"135":{"5":["968"],"4":["967"],"81":["2755"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"968":"cookie-consent-for-magento-2-ee","967":"cookie-consent-for-magento-2-ce","2755":"cookie-consent-gdpr-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"966"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-966]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":199},"oldPrice":{"amount":199},"basePrice":{"amount":199},"finalPrice":{"amount":199}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-3225]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["3222"]},{"id":"5","label":"Enterprise","products":["3223"]},{"id":"81","label":"Magento Cloud","products":["3224"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"3222":{"baseOldPrice":{"amount":149},"oldPrice":{"amount":149},"basePrice":{"amount":149},"finalPrice":{"amount":149},"tierPrices":[],"msrpPrice":{"amount":0}},"3223":{"baseOldPrice":{"amount":449},"oldPrice":{"amount":449},"basePrice":{"amount":449},"finalPrice":{"amount":449},"tierPrices":[],"msrpPrice":{"amount":0}},"3224":{"baseOldPrice":{"amount":749},"oldPrice":{"amount":749},"basePrice":{"amount":749},"finalPrice":{"amount":749},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":149},"oldPrice":{"amount":149},"basePrice":{"amount":149},"finalPrice":{"amount":149}},"productId":"3225","chooseText":"Choose an Option...","images":[],"index":{"3222":{"135":"4"},"3223":{"135":"5"},"3224":{"135":"81"}},"salable":{"135":{"4":["3222"],"5":["3223"],"81":["3224"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"3222":"us-privacy-laws-for-magento-2-ce","3223":"us-privacy-laws-for-magento-2-ee","3224":"us-privacy-laws-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"3225"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-3225]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":149},"oldPrice":{"amount":149},"basePrice":{"amount":149},"finalPrice":{"amount":149}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-673]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["674"]},{"id":"5","label":"Enterprise","products":["675"]},{"id":"81","label":"Magento Cloud","products":["2772"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"674":{"baseOldPrice":{"amount":349},"oldPrice":{"amount":349},"basePrice":{"amount":349},"finalPrice":{"amount":349},"tierPrices":[],"msrpPrice":{"amount":0}},"675":{"baseOldPrice":{"amount":649},"oldPrice":{"amount":649},"basePrice":{"amount":649},"finalPrice":{"amount":649},"tierPrices":[],"msrpPrice":{"amount":0}},"2772":{"baseOldPrice":{"amount":949},"oldPrice":{"amount":949},"basePrice":{"amount":949},"finalPrice":{"amount":949},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":349},"oldPrice":{"amount":349},"basePrice":{"amount":349},"finalPrice":{"amount":349}},"productId":"673","chooseText":"Choose an Option...","images":[],"index":{"674":{"135":"4"},"675":{"135":"5"},"2772":{"135":"81"}},"salable":{"135":{"4":["674"],"5":["675"],"81":["2772"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"674":"loyalty-program-for-magento-2-ce","675":"loyalty-program-for-magento-2-ee","2772":"loyalty-program-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"673"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-673]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":349},"oldPrice":{"amount":349},"basePrice":{"amount":349},"finalPrice":{"amount":349}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-921]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["922"]},{"id":"5","label":"Enterprise","products":["923"]},{"id":"81","label":"Magento Cloud","products":["2862"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"922":{"baseOldPrice":{"amount":99},"oldPrice":{"amount":99},"basePrice":{"amount":79},"finalPrice":{"amount":79},"tierPrices":[],"msrpPrice":{"amount":0}},"923":{"baseOldPrice":{"amount":399},"oldPrice":{"amount":399},"basePrice":{"amount":379},"finalPrice":{"amount":379},"tierPrices":[],"msrpPrice":{"amount":0}},"2862":{"baseOldPrice":{"amount":699},"oldPrice":{"amount":699},"basePrice":{"amount":679},"finalPrice":{"amount":679},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":99},"oldPrice":{"amount":99},"basePrice":{"amount":79},"finalPrice":{"amount":79}},"productId":"921","chooseText":"Choose an Option...","images":[],"index":{"922":{"135":"4"},"923":{"135":"5"},"2862":{"135":"81"}},"salable":{"135":{"4":["922"],"5":["923"],"81":["2862"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"922":"custom-options-conditions-for-magento-2-ce","923":"custom-options-conditions-for-magento-2-ee","2862":"custom-promo-conditions-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"921"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-921]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":99},"oldPrice":{"amount":99},"basePrice":{"amount":79},"finalPrice":{"amount":79}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-686]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["687"]},{"id":"5","label":"Enterprise","products":["688"]},{"id":"81","label":"Magento Cloud","products":["2840"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"687":{"baseOldPrice":{"amount":109},"oldPrice":{"amount":109},"basePrice":{"amount":109},"finalPrice":{"amount":109},"tierPrices":[],"msrpPrice":{"amount":0}},"688":{"baseOldPrice":{"amount":409},"oldPrice":{"amount":409},"basePrice":{"amount":409},"finalPrice":{"amount":409},"tierPrices":[],"msrpPrice":{"amount":0}},"2840":{"baseOldPrice":{"amount":709},"oldPrice":{"amount":709},"basePrice":{"amount":709},"finalPrice":{"amount":709},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":109},"oldPrice":{"amount":109},"basePrice":{"amount":109},"finalPrice":{"amount":109}},"productId":"686","chooseText":"Choose an Option...","images":[],"index":{"687":{"135":"4"},"688":{"135":"5"},"2840":{"135":"81"}},"salable":{"135":{"4":["687"],"5":["688"],"81":["2840"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"687":"special-occasion-coupons-for-magento-2-ce","688":"special-occasion-coupons-for-magento-2-ee","2840":"special-occasion-coupons-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"686"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-686]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":109},"oldPrice":{"amount":109},"basePrice":{"amount":109},"finalPrice":{"amount":109}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-974]": { "Magento_Swatches/js/swatch-renderer": { "selectorProduct": ".product-item-info", "onlySwatches": true, "enableControlLabel": false, "numberToShow": 16, "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["975"]},{"id":"5","label":"Enterprise","products":["976"]},{"id":"81","label":"Magento Cloud","products":["2847"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"975":{"baseOldPrice":{"amount":119},"oldPrice":{"amount":119},"basePrice":{"amount":119},"finalPrice":{"amount":119},"tierPrices":[],"msrpPrice":{"amount":0}},"976":{"baseOldPrice":{"amount":419},"oldPrice":{"amount":419},"basePrice":{"amount":419},"finalPrice":{"amount":419},"tierPrices":[],"msrpPrice":{"amount":0}},"2847":{"baseOldPrice":{"amount":719},"oldPrice":{"amount":719},"basePrice":{"amount":719},"finalPrice":{"amount":719},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":119},"oldPrice":{"amount":119},"basePrice":{"amount":119},"finalPrice":{"amount":119}},"productId":"974","chooseText":"Choose an Option...","images":[],"index":{"975":{"135":"4"},"976":{"135":"5"},"2847":{"135":"81"}},"salable":{"135":{"4":["975"],"5":["976"],"81":["2847"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"975":"countdown-timer-for-magento-2-ce","976":"countdown-timer-for-magento-2-ee","2847":"countdown-timer-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"974"}, "jsonSwatchConfig": [], "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}} ,"showTooltip": 1 } } }</script><script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-974]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":119},"oldPrice":{"amount":119},"basePrice":{"amount":119},"finalPrice":{"amount":119}} } } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-amtheme-js=ajax-tocart]": { "amAjaxCart": { "actionUrl": "https://amasty.com/amasty_jettheme/ajax/addToCart/", "classes":{ "addToCartButtonDisable": "disabled -show-spinner" } } } }</script><script type="text/x-magento-init"> { "*": { "Amasty_Preorder/js/product/preorder_list": { "jsonConfig" : {"643":{"configurable":{"entity":"643","swatchOpt":".swatch-opt-643","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"643":{"135":"Edition"}},"isAllProductsPreorder":0}},"538":{"configurable":{"entity":"538","swatchOpt":".swatch-opt-538","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"538":{"135":"Edition"}},"isAllProductsPreorder":0}},"1653":{"configurable":{"entity":"1653","swatchOpt":".swatch-opt-1653","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"1653":{"135":"Edition"}},"isAllProductsPreorder":0}},"649":{"configurable":{"entity":"649","swatchOpt":".swatch-opt-649","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"649":{"135":"Edition"}},"isAllProductsPreorder":0}},"541":{"configurable":{"entity":"541","swatchOpt":".swatch-opt-541","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"541":{"135":"Edition"}},"isAllProductsPreorder":0}},"3161":{"configurable":{"entity":"3161","swatchOpt":".swatch-opt-3161","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"3161":{"135":"Edition"}},"isAllProductsPreorder":0}},"857":{"configurable":{"entity":"857","swatchOpt":".swatch-opt-857","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"857":{"135":"Edition"}},"isAllProductsPreorder":0}},"3259":{"configurable":{"entity":"3259","swatchOpt":".swatch-opt-3259","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"3259":{"135":"Edition"}},"isAllProductsPreorder":0}},"670":{"configurable":{"entity":"670","swatchOpt":".swatch-opt-670","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"670":{"135":"Edition"}},"isAllProductsPreorder":0}},"966":{"configurable":{"entity":"966","swatchOpt":".swatch-opt-966","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"966":{"135":"Edition"}},"isAllProductsPreorder":0}},"3225":{"configurable":{"entity":"3225","swatchOpt":".swatch-opt-3225","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"3225":{"135":"Edition"}},"isAllProductsPreorder":0}},"673":{"configurable":{"entity":"673","swatchOpt":".swatch-opt-673","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"673":{"135":"Edition"}},"isAllProductsPreorder":0}},"921":{"configurable":{"entity":"921","swatchOpt":".swatch-opt-921","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"921":{"135":"Edition"}},"isAllProductsPreorder":0}},"686":{"configurable":{"entity":"686","swatchOpt":".swatch-opt-686","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"686":{"135":"Edition"}},"isAllProductsPreorder":0}},"974":{"configurable":{"entity":"974","swatchOpt":".swatch-opt-974","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"974":{"135":"Edition"}},"isAllProductsPreorder":0}}} } } }</script><script type="text/javascript"> require([ "jquery" ], function($) { $(".amstockstatus").each(function(i, item) { var parent = $(item).parents(".item").first(); parent.find(".actions .stock").remove(); }) }); </script><script type="text/x-magento-init"> { ".sidebar #narrow-by-list": { "accordion": { "multipleCollapsible": true, "active": [] } } }</script><script type="text/x-magento-init"> { ".products-grid, .products-list": { "amShopbySwatchesChoose": { "listSwatches": [] } } }</script><script type="text/x-magento-init"> { "#narrow-by-list": { "amShopbyFiltersSync": { } } }</script><script type="text/x-magento-init"> { "[data-amsite-js=category-page-list]": { "Amasty_Scroll/js/amscroll": {"product_container":".products.products-grid:not(.amasty-banners), .products.products-list:not(.amasty-banners), .products-grid.grid:not(.amasty-banners)","product_link":".product-item-link","loadingImage":"https:\/\/cdn.amasty.com\/static\/version1740558685\/frontend\/Amasty\/AmTheme\/en_US\/Amasty_Scroll\/images\/loader.svg","pageNumbers":"0","pageNumberContent":"Page #","pageNumberStyle":"button","buttonColor":"#4776F0","buttonColorPressed":"#1846BE","loadingafterTextButton":"Load next","loadingbeforeTextButton":"Load previous","backToTop":{"enabled":"0","style_desktop":"text","style_mobile":"arrow","color":"#4776F0"},"backToTopText":"Back to Top","current_page":1,"footerSelector":".page-footer","actionMode":"auto"} } }</script><script type="text/x-magento-init"> { "body.page-with-filter, body.catalogsearch-result-index": { "amShopbyAjax": { "submitByClick": 0, "scrollUp": 2, "clearUrl": "https\u003A\u002F\u002Famasty.com\u002Fpromotions\u002Dextensions\u002Dfor\u002Dmagento\u002D2.html", "currentCategoryId": 29, "isCategorySingleSelect": 1, "isMemorizerAllowed": 0 } } }</script><script type="text/x-magento-init"> { "[data-am-js='filter-item-default']": { "amShopbyFilterItemDefault": { "collectFilters": 0, "clearUrl": "https://amasty.com/promotions-extensions-for-magento-2.html" } }, "*": { "amShopbyResponsive": {} } }</script><script type="text/x-magento-init"> { "[data-am-js='filter-item-category-labelsFolding']": { "amShopbyFilterCategory": { "type": "labelsFolding", "collectFilters": 0, "clearUrl": "https://amasty.com/promotions-extensions-for-magento-2.html" } } }</script><script type="text/x-magento-init"> { "[data-am-js='filter-item-category-labelsFolding']": { "amShopbyFilterCategory": { "type": "labelsFolding", "collectFilters": 0, "clearUrl": "https://amasty.com/promotions-extensions-for-magento-2.html" } } }</script><script> 'use strict'; function initFormEvents141() { 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-141')); 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-141'); }, 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-141'); 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-141'); if (result) { form.submit(); } } } }</script><script> (function setDependencies() { const form = document.getElementById('amform-form-141'); 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":141,"productId":0}; const formData = 'form_id=' + formId + '&product_id=' + params.productId; const form = document.getElementById('amform-form-' + formId + ''); const parseXData = function (node) { try { const xDataString = (node.getAttribute('x-data') ?? '{}') .replace(/[\n ]+/g, '') .replace(/(\w+):/g, '"$1":') .replace(/'/g, '"'); return JSON.parse(xDataString); } catch (e) { console.log(e); return null; } }; const updateWrapperXData = function (inputNode, inputData) { try { const inputWrapper = inputNode.closest('.fieldset-block'); const xDataObject = parseXData(inputWrapper); if (typeof xDataObject.value !== 'undefined' && xDataObject.value !== inputData) { xDataObject.value = inputData; inputWrapper.setAttribute('x-data', JSON.stringify(xDataObject)); } } catch (e) { console.error(e); } }; const getValueAsArray = function(inputData) { return ( typeof inputData === 'string' ? [inputData] : Array.isArray(inputData) ? inputData : [] ); } const checkNodesByValues = function(nodes, values, attributeName) { values.forEach(function (value) { const nodeToSetAttribute = nodes.find(node => node.getAttribute('value') === value); nodeToSetAttribute && (nodeToSetAttribute[attributeName] = true); }); } const textInputFiller = { supportedInputTypes: [ 'text', 'email', 'number', 'date', 'time' ], supportedTagNames: [ 'textarea' ], support: function (inputNode) { return this.supportedInputTypes.includes(inputNode.getAttribute('type')) || this.supportedTagNames.includes(inputNode.tagName.toLowerCase()); }, fill: function (inputNode, inputData) { if (typeof inputData !== 'string') { return; } inputNode.value = inputData; updateWrapperXData(inputNode, inputData); } }; const selectInputFiller = { supportedTagNames: [ 'select' ], support: function (inputNode) { return this.supportedTagNames.includes(inputNode.tagName.toLowerCase()); }, fill: function (inputNode, inputData) { const optionValues = getValueAsArray(inputData); if (optionValues.length === 0) { return; } this.clearSelectedAttribute(inputNode); checkNodesByValues(Array.from(inputNode.options), optionValues, 'selected'); updateWrapperXData(inputNode, optionValues); }, clearSelectedAttribute: function (inputNode) { Array.from(inputNode.options).forEach((option) => { option.selected = false; option.removeAttribute('selected'); }); } }; const checkableInputFiller = { supportedInputTypes: [ 'checkbox', 'radio' ], support: function (inputNode) { return this.supportedInputTypes.includes(inputNode.getAttribute('type')); }, fill: function (inputNode, inputData) { const inputName = inputNode.getAttribute('name'); const checkboxList = document.querySelectorAll(`input[name="${inputName}"]`); const checkboxValues = getValueAsArray(inputData); if (checkboxValues.length === 0) { return; } this.uncheck(checkboxList); checkNodesByValues(Array.from(checkboxList), checkboxValues, 'checked'); this.fillRating(inputNode, inputData); }, fillRating(inputNode, inputData) { if (!this.isRating(inputNode) || typeof inputData !== 'string') { return; } const xDataContainer = inputNode.closest('[x-data]'); if (!xDataContainer?.getAttribute('x-data').includes('clickedRatingId')) { return; } const xData = parseXData(xDataContainer); if (!xData) { return; } xData.clickedRatingId = inputData; xDataContainer.setAttribute('x-data', JSON.stringify(xData)); xDataContainer.querySelector('input:checked')?.click(); }, isRating: function(inputNode) { return inputNode.name.startsWith('rating-'); }, uncheck: function (checkboxList) { checkboxList.forEach(function (checkbox) { checkbox.checked = false; }); } }; const inputFillerPool = { excludedInputNames: [ 'form_id', 'form_key', 'is_survey' ], inputFillers: [ textInputFiller, selectInputFiller, checkableInputFiller ], fill: function (inputNode, inputData) { if (this.shouldExclude(inputNode)) { return; } for (const fillerIndex in this.inputFillers) { if (this.inputFillers[fillerIndex].support(inputNode)) { this.inputFillers[fillerIndex].fill(inputNode, inputData); inputNode.closest('.fieldset-block').dispatchEvent(new Event('change')); break; } } }, shouldExclude: function (inputNode) { return this.excludedInputNames.includes(inputNode.getAttribute('name')) || inputNode.getAttribute('type') === 'hidden'; } }; function requestData(url, body) { return new Promise((resolve, reject) => { fetch(url, { method: 'POST', body: body, headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'X-Requested-With': 'XMLHttpRequest' } }).then(response => response.json()) .then(data => { resolve(data); }) .catch((error) => { reject(error); }); }); } requestData(params.urlSession, formData).then(data => { const formFields = data.form_fields ?? {}; const persistedInputNames = Object.keys(formFields); persistedInputNames.forEach(inputName => { const inputNode = form.querySelector(`[name^="${inputName}"]`); !!inputNode && inputFillerPool.fill(inputNode, formFields[inputName]); }); }) })(141);</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> '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_67bee94865f96() { 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\/promotions-extensions-for-magento-2.html","name":"Promotions"}}]}</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"WebSite","url":"https:\/\/amasty.com\/","name":"Amasty","potentialAction":{"@type":"SearchAction","target":"https:\/\/amasty.com\/catalogsearch\/result\/?q={search_term_string}","query-input":"required name=search_term_string"}}</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Organization","url":"https:\/\/amasty.com\/","name":"Amasty","logo":"https:\/\/cdn.amasty.com\/static\/version1700640514\/frontend\/Amasty\/AmastyTheme\/en_US\/images\/logo.svg","description":"Amasty is a leading provider of feature-rich Magento extensions, robust e-commerce solutions and all-round e-commerce IT services. An official Adobe partner, Amasty has been continuously growing its vast catalog of 300+ powerful Magento extensions since 2009. Amasty\u2019s Improved Layered Navigation has been installed on over 15.3K stores, solidifying its position as a leader in the Magento market....","contactPoint":[{"@type":"ContactPoint","telephone":"+1-347-897-9078","contactType":"technical support"},{"@type":"ContactPoint","telephone":"+1-347-897-9078","contactType":"customer service"}],"address":{"addressCountry":"Cyprus","postalCode":"2407","addressRegion":"Egkomi","addressLocality":"Nicosia","streetAddress":"73 Metochiou"},"sameAs":["https:\/\/www.facebook.com\/Amasty.Ltd\/","https:\/\/twitter.com\/AmastyTeam","https:\/\/www.instagram.com\/amastypeople\/","https:\/\/www.youtube.com\/user\/AmastyTeam","https:\/\/www.linkedin.com\/company\/amasty","https:\/\/www.pinterest.com\/amastybusiness\/"]}</script><script type="text/x-magento-init"> { "nav.navigation": { "amMenu": {} }, "[data-amtheme-js='form-minisearch']": { "amSearch": {} }, "[data-amtheme-js='backtotop-wrap']": { "backTop": {} } }</script><script type="text/x-magento-init"> { ".products-grid.grid, .products-list.list": { "amsiteBehaviorProductItem": {} }, "[data-role=vertical-screenshot-link], .faq-screenshot-thumb, .amblog-content img.size-full": { "amsiteOpenImageFancybox": {} }, "[btn-fancybox-popup]": { "amsiteOpenHtmlFancybox": {} }, ".swiper-container:not(.lazy-swiper)": { "amsiteMainSwiper": {} }, "[data-role=vertical-screenshots]": { "amsiteVerticalSwiper": {} }, "*": { "amsiteFishText": {} } }</script><script type="text/x-magento-init"> { ".mgz-block-content [data-role=tocart-form], #product_addtocart_form, #ajax-product_addtocart_form": { "amAjaxCart": { "actionUrl": "https://amasty.com/amasty_jettheme/ajax/addToCart/", "classes":{ "addToCartButtonDisable": "disabled -show-spinner" } } } }</script><script> var amsiteGlobalPriceFormat = {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true};</script><script> 'use strict'; window.addEventListener('DOMContentLoaded', () => { (function() { hyva.formValidation.addRule('required', (value, options, field, context) => { const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element, msg = 'This\u0020is\u0020a\u0020required\u0020field'; if (el.type === 'radio' || el.type === 'checkbox') { return (value === undefined || value.length === 0) ? msg : true; } el.setAttribute('required', ''); el.checkValidity(); return el.validity.valueMissing ? msg : true; }) hyva.formValidation.addRule('email', (value, options, field, context) => { const rule = /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i; if (value.length > 0 && !rule.test(value)) { return 'Please\u0020enter\u0020a\u0020valid\u0020email'; } return true; }) hyva.formValidation.addRule('minlength', (value, options, field, context) => { const n = Number(options) if (value.length > 0 && value.length < n) { return n === 1 ? hyva.strf('Please\u0020enter\u0020at\u0020least\u00201\u0020character.') : hyva.strf('This\u0020text\u0020length\u0020should\u0020be\u0020more\u0020than\u0020\u00250\u0020characters', options) } return true; }) hyva.formValidation.addRule('validate-not-only-special', (value, options, field, context) => { const test = /^[ \t[\]\\$&+,:;=?@#|'<>{}".^*()%!-]+$/.test(value); if (test) { return 'This\u0020field\u0020can\u0027t\u0020contain\u0020special\u0020characters\u0020only'; } return true; }) hyva.formValidation.addRule('validate-domain-url', (value, options, field, context) => { const test = value.length === 0 || /^((https?:\/\/)?(www\.)?((?!www\.)[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$)(:(\d+))?\/?/i.test(value); if (test) { return true; } return 'Please\u0020enter\u0020a\u0020valid\u0020domain.\u0020Ex.\u003A\u0020storename.com'; }) function createTextInputFrom(el) { const text = document.createElement('INPUT'); text.type = 'text'; text.value = el.value; return text; } })(); })</script><script> 'use strict'; (() => { document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); }); document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { const tabLink = tabHeader.querySelector('a'); const tabId = tabLink.getAttribute('href').replace('#', ''); tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); if (index === defaultActiveTab) { tab.setAttribute('x-data', `{ tab: '${tabId}' }`); } }); }); })();</script><script type="text/x-magento-init"> { "*": { "amsiteAsyncLoadCss": { "cssFileUrl": "https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/css/source/bundle-module/category-page/bundle-async-load.min.css" } } }</script><script type="text/x-magento-init"> { "[data-amtheme-js='navigation-filter']": { "amLayeredNavigationAction": {} } }</script><script> const AmAuthPopupReloadContent = function () { const customerMenuSelector = '\u0023customer\u002Dmenu\u0020\u007E\u0020nav'; return { contentUpdaters: [], initContentUpdaters() { window.addEventListener('amsl-register-content-updater', (event) => { event.stopPropagation(); if (typeof event.detail === 'function') { this.registerContentUpdater(event.detail); } }, true) }, reloadContent() { return Promise.all([ this.reloadHeader(), ...this.contentUpdaters.map(updater => updater()) ]).then(this.updateFormKey); }, registerContentUpdater(updater) { this.contentUpdaters.push(updater); }, async reloadHeader() { const response = await fetch( `${BASE_URL}amsociallogin_hyva\u002Fheader\u002Fupdate?isAjax=1`, { method: 'GET', headers: { 'Content-type': 'application/json' } } ); const result = await response.json(); const {customer_menu_html: customerMenuHtml} = result; const container = document.createElement('div'); container.innerHTML = customerMenuHtml; const currentMenu = document.querySelector(customerMenuSelector); const newMenu = container.querySelector(customerMenuSelector); if (currentMenu && newMenu) { currentMenu.replaceWith(newMenu); } }, updateFormKey() { const formKeyInputs = document.querySelectorAll('input[name="form_key"]'); formKeyInputs.forEach(input => input.value = hyva.getFormKey()); } } }</script><script> const AmAuthPopupRedirect = function () { const redirectTimeout = 4000; const redirectUrl = 'https://amasty.com/customer/account/'; return { processRedirect(forceRedirectUrl) { if (forceRedirectUrl) { setTimeout(() => { this.resetSessionCookie(); window.location.assign(forceRedirectUrl); }, redirectTimeout); return; } setTimeout(() => { this.resetSessionCookie(); window.location.assign(this._getRedirectUrl()); }, redirectTimeout); }, _getRedirectUrl() { const browserStorage = hyva.getBrowserStorage(); if (browserStorage) { const url = browserStorage.getItem('data_social_login_redirect') || redirectUrl; browserStorage.removeItem('data_social_login_redirect'); return url; } }, reloadCustomerData() { this.resetSessionCookie(); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); }, resetSessionCookie() { hyva.setCookie('mage-cache-sessid', '', -1, true); }, reloadPage() { setTimeout(() => { this.resetSessionCookie(); window.location.reload(true) }, redirectTimeout) }, reloadViaAjax() { window.addEventListener('private-content-loaded', () => { this.reloadContent().then(() => { window.dispatchEvent( new CustomEvent('amsl-content-updated') ); }).catch( (error) => { console.error(error); this.reloadPage(); } ); }, {once: true}); this.reloadCustomerData(); window.dispatchEvent( new CustomEvent('amsl-popup-ajax-login-success') ); } } }</script><script> const AmAuthPopupNotification = function () { const modalName = 'amsl\u002Dpopup\u002Dnotification'; return { ...AmAuthPopupModal(modalName), notification: '', initialize() { this.initModalSettings(); }, showNotification(messages) { if (!messages) { return; } this.notification = Array.isArray(messages) ? messages.join('<br>') : messages; window.dispatchEvent( new CustomEvent('amsl-hide-popup') ); this.show(modalName); } } }</script><script> const AmAuthPopupModal = function (modalName) { const canCloseByOverlayClick = true; return { ...hyva.modal(), animationDuration: 500, initModalSettings() { if (!canCloseByOverlayClick) { this.restrictOverlayClick(); } }, restrictOverlayClick() { document.addEventListener('click', (event) => { const modal = this.$refs[modalName]; const isVisible = this.opened[modalName]; if (isVisible && !modal.contains(event.target) && !modal.hasAttribute('x-no-overlay')) { event.stopPropagation(); } }, {capture: true}); } } }</script><script> function initCustomerLoginForm() { return { errors: 0, customer_form_login_popup_showPassword: false, displayErrorMessage: false, errorMessages: [], setErrorMessages(messages) { this.errorMessages = [messages] this.displayErrorMessage = this.errorMessages.length }, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#customer-login-form'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); } } }</script><script> function AmSocialLogin() { return { socialErrorMessage: '', isPopupEnabled: '1', initializeSocialLogin() { this.initContentUpdaters(); }, socialLoginClick(event) { if (this.messageEventListener) { window.removeEventListener('message', this.messageEventListener); } this.messageEventListener = this.onMessageEvent.bind(this); window.addEventListener('message', this.messageEventListener); if (this.isPopupEnabled) { window.open( event.currentTarget.href + '&isAjax=true', event.currentTarget.title, this.getPopupParams() ); } else { window.location.assign(event.currentTarget.href); } event.stopPropagation(); event.preventDefault(); return false; }, onSocialResponse(data) { const isSuccessfulResult = data.result === 1; if (isSuccessfulResult) { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: data.messages } ) ); if (data.redirect_data && data.redirect_data.url) { this.processRedirect(data.redirect_data.url); } else { this.processRedirect(); } } else { this.socialErrorMessage = data.messages.pop(); setTimeout(() => { this.socialErrorMessage = ''; }, 5000); if (data?.redirect_data?.redirectWithError) { this.processRedirect(); } } }, onMessageEvent(event) { if (event.data['redirect_data']) { this.onSocialResponse(event.data); } }, getPopupParams(w, h, l, t) { let screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft, screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop, outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth, outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22), width = w ? w : 500, height = h ? h : 420, left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10), top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10); return ( 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top ); }, ...AmAuthPopupRedirect(), ...AmAuthPopupReloadContent() } }</script><script> function initForm() { return { errors: 0, customer_form_register_popup_showPassword: false, customer_form_register_popup_showPasswordConfirm: false, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#accountcreate'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); }, } }</script><script> function AmSocialLogin() { return { socialErrorMessage: '', isPopupEnabled: '1', initializeSocialLogin() { this.initContentUpdaters(); }, socialLoginClick(event) { if (this.messageEventListener) { window.removeEventListener('message', this.messageEventListener); } this.messageEventListener = this.onMessageEvent.bind(this); window.addEventListener('message', this.messageEventListener); if (this.isPopupEnabled) { window.open( event.currentTarget.href + '&isAjax=true', event.currentTarget.title, this.getPopupParams() ); } else { window.location.assign(event.currentTarget.href); } event.stopPropagation(); event.preventDefault(); return false; }, onSocialResponse(data) { const isSuccessfulResult = data.result === 1; if (isSuccessfulResult) { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: data.messages } ) ); if (data.redirect_data && data.redirect_data.url) { this.processRedirect(data.redirect_data.url); } else { this.processRedirect(); } } else { this.socialErrorMessage = data.messages.pop(); setTimeout(() => { this.socialErrorMessage = ''; }, 5000); if (data?.redirect_data?.redirectWithError) { this.processRedirect(); } } }, onMessageEvent(event) { if (event.data['redirect_data']) { this.onSocialResponse(event.data); } }, getPopupParams(w, h, l, t) { let screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft, screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop, outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth, outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22), width = w ? w : 500, height = h ? h : 420, left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10), top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10); return ( 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top ); }, ...AmAuthPopupRedirect(), ...AmAuthPopupReloadContent() } }</script><script> function initPasswordForm() { return { errors: 0, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#user_forgotpassword'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); } } }</script><script> const AmAuthPopup = function () { const TAB_ID_LOGIN = 'amsl\u002Dlogin'; const TAB_ID_REGISTER = 'amsl\u002Dregister'; const TAB_ID_FORGOT = 'amsl\u002Dforgot'; const IS_KNOWN_CUSTOMER = false; const modalName = 'social\u002Dlogin\u002Dpopup'; let componentInitialized = false; const reCaptchaStatusBySection = { login: '', register: '', forgotPassword: '', } const reCaptchaStatusFor = section => reCaptchaStatusBySection[section]; return { isGuestCheckoutAllowed: true, isAccountForgotPasswordPage: false, activeTab: TAB_ID_LOGIN, tabs: [TAB_ID_LOGIN, TAB_ID_REGISTER], socialIconsExpansionState: { [TAB_ID_LOGIN]: false, [TAB_ID_REGISTER]: false }, isLoading: false, modalName, isLogged: false, socialIconsExpanded: false, initializeAuthPopup(privateData) { this.browserStorage = hyva.getBrowserStorage(); if (privateData?.data?.customer?.firstname && !IS_KNOWN_CUSTOMER) { componentInitialized = false; this.reloadExpiredCustomerData(); return; } if (componentInitialized) { return; } componentInitialized = true; const origShow = this.show; const origHide = this.hide; this.show = (name, event, activeTabName) => { origShow.call(this, name, event); this.activeTab = activeTabName || TAB_ID_LOGIN; } this.hide = (...args) => { origHide.call(this, args); setTimeout(() => { this.clearForms(); this.clearFormMessages(); }, this.animationDuration + 1) } this.initModalSettings(); this.bindLinksEvents(privateData); this.initContentUpdaters(); if (!this.isGuestCheckoutAllowed) { this.bindAuthenticationEvent(); } }, _setCustomRedirectUrl(elem) { const redirectUrl = elem.getAttribute('data-social-login-redirect'); if (this.browserStorage) { this.browserStorage.removeItem('data_social_login_redirect'); } if (redirectUrl && this.browserStorage) { this.browserStorage.setItem('data_social_login_redirect', redirectUrl); } }, bindAuthenticationEvent() { window.addEventListener('toggle-authentication', (event) => { event.stopPropagation(); if (!this.isLoggedIn()) { this.show( this.modalName, event ); } else { window.location.assign(event.detail.url) } }, true) }, bindLinksEvents(privateData) { if (!this.isLoggedIn(privateData)) { this.bindOpeningEvents(); this.bindForgotLinkEvent(); requestAnimationFrame(() => { this.processForms(); }) } else { this.initLogout(); } }, bindOpeningEvents() { const accountLinks = document.querySelectorAll(`nav.am-authorization-link a[href^="${BASE_URL}customer/account"], .amsite-changelog-tab a[href^="${BASE_URL}customer/account"]`) || []; accountLinks.forEach(elem => { const isRegisterLink = /create\/?(\?.+)?(\#.+)?$/.test(elem.href); elem.removeAttribute('onclick'); elem.setAttribute('aria-haspopup', 'dialog'); elem.addEventListener('click', (event) => { this._setCustomRedirectUrl(elem); event.preventDefault(); this.show( this.modalName, event, isRegisterLink ? TAB_ID_REGISTER : TAB_ID_LOGIN ); }) }); if (reCaptchaStatusFor('register')) { this.moveRecaptchaElement('.recaptcha-create-wrapper'); } if (reCaptchaStatusFor('login')) { this.moveRecaptchaElement('.recaptcha-login-wrapper'); } }, bindForgotLinkEvent() { const modalContainer = this.$el || this.$root; const forgotLinks = modalContainer.querySelectorAll( `a[href^="${BASE_URL}customer/account/forgotpassword"]` ) || []; forgotLinks.forEach((element) => { element.addEventListener('click', (event) => { event.preventDefault(); element.setAttribute('aria-haspopup', 'dialog'); this.activeTab = TAB_ID_FORGOT; }) }) if (reCaptchaStatusFor('forgotPassword') && !this.isAccountForgotPasswordPage) { this.moveRecaptchaElement('.recaptcha-forgot-wrapper'); } }, isLoggedIn(privateData) { try { privateData = privateData?.data || JSON.parse(hyva.getBrowserStorage()['mage-cache-storage']); return this.isLogged = !!(privateData?.customer?.firstname); } catch { } return this.isLogged = false; }, showOnExternalEvent(event) { const eventData = event.detail || {}; const message = eventData?.message; const tabName = eventData?.tabName || TAB_ID_LOGIN; this.show(this.modalName, event, tabName); if (message) { this.setFormMessages(tabName, [message]); } }, canShowAllSocialIcons() { return this.socialIconsExpansionState[this.activeTab]; }, showAllSocialIcons() { this.socialIconsExpanded = true; this.socialIconsExpansionState[this.activeTab] = true; }, setLoading(isLoading) { const formButtons = this.$refs[this.modalName].querySelectorAll('[type="submit"]'); formButtons.forEach(button => { if (isLoading) { button.setAttribute('disabled', 'disabled') } else { button.removeAttribute('disabled'); } }) this.isLoading = isLoading; }, reloadExpiredCustomerData() { const sections = ['mage-cache-storage', 'private_content_version', 'mage-cache-timeout']; sections.forEach(section => localStorage.removeItem(section)); hyva.setCookie('mage-cache-sessid', '', -1); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); }, moveRecaptchaElement(element) { const captchaElement = document.querySelector(element); if (!captchaElement) { return; } const container = captchaElement.closest('.amsl-form').querySelector('.actions-toolbar'); container.prepend(captchaElement); }, onKeypress(event) { const activeTabIndex = this.tabs.indexOf(this.activeTab); if (activeTabIndex < 0 || event.code === 'Tab') { return; } switch (event.code) { case 'Enter': case 'Space': this.activeTab = event.target.id.replace('tab-', ''); break; case 'ArrowRight': this.activeTab = this.tabs[(activeTabIndex + 1) % this.tabs.length] break; case 'ArrowLeft': this.activeTab = this.tabs[(activeTabIndex + this.tabs.length - 1) % this.tabs.length] break; case 'End': this.activeTab = this.tabs[this.tabs.length - 1] break; case 'Home': this.activeTab = this.tabs[0] break; } document.getElementById('tab-' + this.activeTab).focus(); }, ...AmAuthPopupModal(modalName), ...AmAuthPopupForms(), ...AmAuthPopupRedirect(), ...AmAuthPopupReloadContent(), ...AmAuthPopupLogout(), ...(typeof AmSocialLogin === 'function' ? AmSocialLogin() : {}) } }</script><script> (function () { const resetPasswordForms = document.querySelectorAll('form[action*="/forgotpasswordpost"]'); resetPasswordForms.forEach(form => { form.classList.add('form','password', 'forget'); }); })(); const AmAuthPopupForms = function () { const TAB_ID_LOGIN = 'amsl\u002Dlogin'; const TAB_ID_REGISTER = 'amsl\u002Dregister'; const TAB_ID_FORGOT = 'amsl\u002Dforgot'; const formsConfig = JSON.parse(`\u007B\u0022amsl\u002Dlogin\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dlogin\u0022,\u0022formId\u0022\u003A\u0022customer\u002Dlogin\u002Dform\u0022,\u0022successMessage\u0022\u003A\u0022You\u0020have\u0020successfully\u0020logged\u0020in\u0022,\u0022submitUrlReplacement\u0022\u003A\u0022amsociallogin\u005C\u002Faccount\u0022\u007D,\u0022amsl\u002Dregister\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dregister\u0022,\u0022formId\u0022\u003A\u0022accountcreate\u0022,\u0022successMessage\u0022\u003A\u0022Thank\u0020you\u0020for\u0020registering\u0020with\u0020us\u0022,\u0022submitUrlReplacement\u0022\u003A\u0022amsociallogin\u005C\u002Faccount\u0022\u007D,\u0022amsl\u002Dforgot\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dforgot\u0022,\u0022formId\u0022\u003A\u0022user_forgotpassword\u0022,\u0022customSubmitUrl\u0022\u003A\u0022\u005C\u002Fcustomer\u005C\u002Faccount\u005C\u002Fforgotpasswordpost\u0022\u007D\u007D`); return { formMessages: new Map(), processForms() { Object.values(formsConfig).forEach((formOptions) => { this.processForm(formOptions); }) }, processForm(formOptions) { const { formId } = formOptions; const formElement = document.querySelector(`#social-login-popup #${formId}`); if (formElement) { this.bindFormSubmit(formElement, formOptions); } }, bindFormSubmit(formElement, formOptions) { const { formType, successMessage, submitUrlReplacement, customSubmitUrl } = formOptions; let submitUrl = customSubmitUrl || formElement.action; if (submitUrlReplacement) { submitUrl = submitUrl.replace('customer/account', submitUrlReplacement); } formElement.submit = () => { this.clearFormMessages(); this.setLoading(true); this.browserStorage = hyva.getBrowserStorage(); this.formAjaxSubmit( formElement, submitUrl ).then((result) => { if (result.errors) { this.setFormMessages(formType, result.errors); return; } const notification = result.success || successMessage; this.hide(this.modalName); if (notification) { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: notification } ) ); } if (!submitUrl.includes('forgotpasswordpost')) { this.processRedirect(); } else { setTimeout(() => { document.querySelector('[x-data="AmAuthPopupNotification()"] > .am-overlay-popup').style.display = 'none'; }, 4000) } }).finally(() => { this.setLoading(false); }) } }, async formAjaxSubmit(form, url) { let errors = null; let success = null; try { const response = await fetch(url, { method: 'POST', body: new FormData(form) }) const messages = this.extractMageMessages(); const errorMessages = messages.filter(({type}) => type === 'error'); const successMessages = messages.filter(({type}) => type === 'success'); if (errorMessages.length) { errors = errorMessages.map(({text}) => text); } if (successMessages.length) { success = successMessages.pop().text || ''; } if (errors && Array.isArray(errors) && this.detectSpecialBehaviour(response, errors)) { errors = null; } } catch (error) { console.error(error); errors = ['Sorry,\u0020something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.']; } return { errors, success }; }, extractMageMessages() { const messagesCookie = hyva.getCookie('mage-messages'); const messages = messagesCookie ? JSON.parse(decodeURIComponent(messagesCookie)) : []; hyva.setCookie('mage-messages','', -1, true); return messages; }, clearFormMessages() { this.formMessages = new Map(); }, setFormMessages(formType, messages) { const formMessages = new Map(this.formMessages); formMessages.set(formType, messages); this.formMessages = formMessages; }, clearForms() { const forms = this.$refs[this.modalName].querySelectorAll('form') || []; forms.forEach((form) => form.reset()); }, detectSpecialBehaviour(response, errors) { const errorPattern = 'You have an active'; const ulrPattern = 'amasty_recurring/customer/subscriptions/'; const cookieLifeTime = 31536000; if (errors[0].includes(errorPattern) && response.url.includes(ulrPattern)) { this.browserStorage.setItem('data_social_login_redirect', response.url); window.hyva.setCookie('mage-messages', `[{"type":"error","text":"${errors[0]}"}]`, cookieLifeTime, true); return true; } return false; } } }</script><script> const AmAuthPopupLogout = function () { return { initLogout() { const logoutLinks = document.querySelectorAll(`a[href*="customer/account/logout"]`) || []; logoutLinks.forEach(elem => { elem.addEventListener('click', (event) => { event.preventDefault(); this.sendLogOut() }) }) }, sendLogOut() { fetch(BASE_URL + "customer/account/logout", { method: 'GET', credentials: "include" }).then(response => { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: 'You\u0020have\u0020signed\u0020out\u0020and\u0020will\u0020go\u0020to\u0020our\u0020homepage\u0020in\u00205\u0020seconds' } ) ); this.processRedirect(this.isInAccountSection() ? BASE_URL : ''); }) .catch(error => { console.error(error); this.processRedirect(); }) }, isInAccountSection() { return document.querySelector('body').classList.contains('account'); } } }</script><script> (function () { 'use strict'; /** * Config to determine which element is responsible for the form submission * * @type {[{elementSelector: undefined|string, submitAttribute: string}]} */ const formWrapperConfig = [{"elementSelector":null,"submitAttribute":"submit"},{"elementSelector":"[type=\"submit\"]","submitAttribute":"click"}]; const initWrapFormSubmit = function () { document.addEventListener("DOMContentLoaded", function () { wrapFormSubmit(window.amRecaptchaModel?.formsToProtect || ''); }); }; /** * Replace protected forms submit with amRecaptchaModel.execute($event) method. * Call original submit on amrecaptcha-callback event after successful captcha validation. * * @return {void} */ const wrapFormSubmit = function (formsSelector) { if (formsSelector.length === 0) { return; } document.querySelectorAll(formsSelector)?.forEach(formElement => { if (!formElement) { return; } const { elementToWrap, attributeNameToWrap } = resolveElementWrapping(formElement); if (!elementToWrap || !attributeNameToWrap) { return; } setElementAttributes(formElement, elementToWrap, attributeNameToWrap); }); }; /** * Call wrapFormSubmit on event to add form to amRecaptchaModel protection - for forms which are created dynamically */ document.addEventListener("add-form-to-amrecaptcha-protection", (event) => { wrapFormSubmit(event.detail); }); /** * Find submit event and DOM element that has this event using formWrapperConfig. * * @param {HTMLElement} formElement * @return {{elementToWrap: undefined|string, attributeNameToWrap: undefined|string}} */ const resolveElementWrapping = function (formElement) { let result = { elementToWrap: undefined, attributeNameToWrap: undefined }; formWrapperConfig.forEach(({ elementSelector, submitAttribute }) => { const elementToWrap = !!elementSelector ? formElement.querySelector(elementSelector) : formElement; if (!elementToWrap) { return; } const attributeNameToWrap = elementToWrap.getAttributeNames().find( (elementAttribute) => { /** @type {string[]} */ const submitAttributeVariations = ['@', 'x-on:'].map(variation => variation + submitAttribute); return submitAttributeVariations.some( (submitAttributeVariation) => elementAttribute.startsWith(submitAttributeVariation) ) } ); if (!attributeNameToWrap) { return; } result.elementToWrap = elementToWrap; result.attributeNameToWrap = attributeNameToWrap; }); return result; } /** * Set attribute to wrap original submit, add eventListeners for captcha callbacks * * @param {HTMLElement} formElement * @param {HTMLElement} elementToWrap * @param {string} attributeNameToWrap */ const setElementAttributes = function (formElement, elementToWrap, attributeNameToWrap) { const originalSubmit = elementToWrap.getAttribute(attributeNameToWrap); elementToWrap.removeAttribute(attributeNameToWrap); /** * To properly set submit attribute - we need to replace '@' with 'x-on:' * and add preventDefault behaviour */ elementToWrap.setAttribute( attributeNameToWrap.replace(/^@/, 'x-on:').replace(/.prevent$/, '') + '.prevent', 'amRecaptchaModel.execute($event)' ); elementToWrap.setAttribute( 'x-on:amrecaptcha-executable-callback', originalSubmit ); } initWrapFormSubmit(); })(window.amRecaptchaModel = window.amRecaptchaModel || {});</script><script type="text/x-magento-init"> { "[data-role='compare-sticky-link']": { "Magento_Ui/js/core/app": {"components":{"compareProducts":{"component":"Magento_Catalog\/js\/view\/compare-products"}}} } }</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_2ca50277a3bbc95bb66a383cfd5e5b5a.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