CINXE.COM
Magento 2 Order Management Extensions | Magento Fulfillment Purchase System by Amasty
<!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 Order Management Extensions | Magento Fulfillment Purchase System by Amasty"/> <meta name="description" content="Check how these Magento 2 order extensions can improve your store checkout quality, enhance order processing, and increase customer loyalty with RMA and order status addons. Apply payment restrictions, get insightful reports, manage sales reps and dealers, and unlock a lot more opportunities with these order modules. "/> <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 Order Management Extensions | Magento Fulfillment Purchase System by Amasty</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/order-management-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/order-management-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-order-management-extensions-for-magento-2 category-order-management-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 search 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 are you looking for?" 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 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 && !noResultsFound && 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_67bf261ed1bd5(), 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 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_67bf261ed1df3(), 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 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 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 search 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 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 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 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 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 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 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 2 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 Theme 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 Checkout 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 & Search">Navigation & 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 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 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 & Media">Images & 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 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 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 Magento 2 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 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 Product 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 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 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 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 & Marketing">Sales & 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 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 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 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 Development 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 Development 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 Optimization 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 Maintenance 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 Upgrade 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 Integration 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 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 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 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 Testing 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 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 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 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 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: {"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"show_mobile_content":0,"mobile_content":"<div class=\"ammenu-view-all-mobile-link\">\r\n <a class=\"ammenu-link view-all\"\r\n href=\"\/magento-2-extensions.html\"\r\n aria-label=\"Go to All Magento 2 Extensions\"\r\n title=\"Go to All Magento 2 Extensions\"\r\n role=\"link\"\r\n tabindex=\"0\"\r\n >\r\n All Magento 2 Extensions\r\n <\/a>\r\n<\/div>\r\n\r\n <div class=\"ammenu-widget-wrapper block widget mega-menu-products-list\" data-amsite-js=\"top-product-widget\"> <div class=\"block-title\">Popular right now<\/div> <div class=\"block-content\"><ul class=\"widget-product-items\"> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/cookie-consent-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Cookie Consent (GDPR)\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/c\/o\/cookie-consent-for-magento-2_6253b4c79f9ab.png\" alt=\"Cookie Consent (GDPR) for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Cookie Consent (GDPR)<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Improved Layered Navigation\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/m\/improved-layered-navigation-for-magento-2_5.png\" alt=\"Improved Layered Navigation for Magento 2\"\/><\/span><\/span> <div class=\"amasty-label-container amasty-label-container-13-506-cat amasty-label-for-506\" 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\":\"506\",\"label\":13,\"margin\":7,\"alignment\":0,\"order\":5,\"redirect_url\":\"\",\"tooltip\":{\"backgroundColor\":\"\",\"color\":\"\",\"status\":1,\"content\":\"\"}}, \"productId\": \"506\", \"selector\": \".amasty-label-container-13-506-cat\" }}'><div class=\"amlabel-text\"><\/div> <img id=\"amasty-label-image-13-506-cat\" class=\"amasty-label-image\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\" style=\"opacity: 1 !important;vertical-align: top;\" title=\"Improved Layered Navigation for Magento 2\" alt=\"Improved Layered Navigation for Magento 2\" ><\/div> <div class=\"product-item-name\"><span class=\"ammenu-text\">Improved Layered Navigation<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/google-tag-manager-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Google Analytics 4 with GTM Support\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon-google-tag-manager-for-magento-2.png\" alt=\"Google Analytics 4 with GTM Support for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Google Analytics 4 with GTM Support<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <\/ul><\/div> <a href=\"\/featured-extensions-for-magento-2.html\" class=\"block-link-below\" tabindex=\"0\" title=\"View All BestSellers\">View All BestSellers<\/a> <\/div>\r\n\r\n\r\n<div class=\"ammenu-m2-dropdown-banners\" data-amsite-js=\"ammenu-m2-dropdown-banners\">\r\n <a class=\"amsite-menu-picker-btn action secondary\" href=\"\/latest-updates-magento-2-extensions.html?utm_source=menu&utm_medium=widget&utm_campaign=recent_updates\" title=\"Go to this page\">\r\n Check Module Updates\r\n <\/a>\r\n <img src=\"https:\/\/cdn.amasty.com\/media\/amsite\/adobe-partner-badge-2x.png\" alt=\"Adobe partner logo\" width=\"180\" \r\n height=\"46\">\r\n<\/div> ","type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":3,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Hyva Theme Extensions","is_category":true,"id":"category-node-83","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/hyva-theme-extensions-for-magento-2.html","current":false,"items_count":162,"top_products":[{"url":"https:\/\/amasty.com\/custom-form-for-magento-2.html","name":"Custom Form"},{"url":"https:\/\/amasty.com\/social-login-for-magento-2.html","name":"Social Login"},{"url":"https:\/\/amasty.com\/google-tag-manager-for-magento-2.html","name":"Google Analytics 4 with GTM"}],"label":{"label":"HOT","label_text_color":"#ffffff","label_background_color":"#ff2f7a"},"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hyva Checkout Ready","is_category":true,"id":"category-node-109","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/hyva-checkout-ready-extensions-for-magento-2.html","current":false,"items_count":135,"top_products":[{"url":"https:\/\/amasty.com\/out-of-stock-notification-for-magento-2.html","name":"Out of Stock Notification"},{"url":"https:\/\/amasty.com\/order-attributes-for-magento-2.html","name":"Order Attributes"},{"url":"https:\/\/amasty.com\/shipping-restrictions-for-magento-2.html","name":"Shipping Restrictions "}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Navigation & Search","is_category":true,"id":"category-node-26","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/usability-navigation-extensions-for-magento-2.html","current":false,"items_count":21,"top_products":[{"url":"https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html","name":"Improved Layered Navigation","label":{"label":"TOP","label_text_color":"#1a1a1a","label_background_color":"#ffed11"}},{"url":"https:\/\/amasty.com\/mega-menu-for-magento-2.html","name":"Mega Menu Pro"},{"url":"https:\/\/amasty.com\/elasticsearch-for-magento-2.html","name":"Elastic Search"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Catalog Management","is_category":true,"id":"category-node-28","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/catalog-management-extensions-for-magento-2.html","current":false,"items_count":34,"top_products":[{"url":"https:\/\/amasty.com\/product-feed-for-magento-2.html","name":"Product Feed"},{"url":"https:\/\/amasty.com\/improved-sorting-for-magento-2.html","name":"Improved Sorting"},{"url":"https:\/\/amasty.com\/shop-by-brand-for-magento-2.html","name":"Shop by Brand"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Checkout","is_category":true,"id":"category-node-35","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/checkout-extensions-for-magento-2.html","current":false,"items_count":27,"top_products":[{"url":"https:\/\/amasty.com\/one-step-checkout-for-magento-2.html","name":"One Step Checkout Pro","label":{"label":"TOP","label_text_color":"#1a1a1a","label_background_color":"#ffed11"}},{"url":"https:\/\/amasty.com\/customer-attributes-for-magento-2.html","name":"Customer Attributes"},{"url":"https:\/\/amasty.com\/delivery-date-manager-for-magento-2.html","name":"Delivery Date Manager"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Law-Based Extensions","is_category":true,"id":"category-node-112","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/law-based-extensions-for-magento-2.html","current":false,"items_count":8,"top_products":[{"url":"https:\/\/amasty.com\/cookie-consent-for-magento-2.html","name":"Cookie Consent"},{"url":"https:\/\/amasty.com\/omnibus-price-tracker-for-magento-2.html","name":"Omnibus Price Tracker"},{"url":"https:\/\/amasty.com\/age-verification-for-magento-2.html","name":"Age Verification","label":{"label":"NEW","label_text_color":"#ffffff","label_background_color":"#4d91f8"}}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Shipping","is_category":true,"id":"category-node-30","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/shipping-extensions-for-magento-2.html","current":false,"items_count":19,"top_products":[{"url":"https:\/\/amasty.com\/shipping-rules-for-magento-2.html","name":"Shipping Rules"},{"url":"https:\/\/amasty.com\/shipping-table-rates-for-magento-2.html","name":"Shipping Table Rates"},{"url":"https:\/\/amasty.com\/store-pickup-with-locator-for-magento-2.html","name":"Store Pickup with Locator"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"SEO","is_category":true,"id":"category-node-33","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/seo-optimization-extensions-for-magento-2.html","current":false,"items_count":29,"top_products":[{"url":"https:\/\/amasty.com\/seo-toolkit-for-magento-2.html","name":"SEO Toolkit Pro"},{"url":"https:\/\/amasty.com\/google-indexing-api-for-magento-2.html","name":"Google Indexing API","label":{"label":"NEW","label_text_color":"#ffffff","label_background_color":"#4d91f8"}},{"url":"https:\/\/amasty.com\/google-page-speed-optimizer-for-magento-2.html","name":"Google Page Speed Optimizer Pro"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Promotions","is_category":true,"id":"category-node-29","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/promotions-extensions-for-magento-2.html","current":false,"items_count":44,"top_products":[{"url":"https:\/\/amasty.com\/free-gift-for-magento-2.html","name":"Free Gift","label":{"label":"TOP","label_text_color":"#1a1a1a","label_background_color":"#ffed11"}},{"url":"https:\/\/amasty.com\/special-promotions-pro-for-magento-2.html","name":"Special Promotions Pro"},{"url":"https:\/\/amasty.com\/automatic-related-products-for-magento-2.html","name":"Automatic Related Products"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Images & Media","is_category":true,"id":"category-node-36","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/images-media-extensions-for-magento-2.html","current":false,"items_count":15,"top_products":[{"url":"https:\/\/amasty.com\/product-labels-for-magento-2.html","name":"Product Labels"},{"url":"https:\/\/amasty.com\/promo-banners-for-magento-2.html","name":"Promo Banners"},{"url":"https:\/\/amasty.com\/color-swatches-pro-for-magento-2.html","name":"Color Swatches Pro"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Administration","is_category":true,"id":"category-node-82","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/administration-extensions-for-magento-2.html","current":false,"items_count":25,"top_products":[{"url":"https:\/\/amasty.com\/admin-actions-log-for-magento-2.html","name":"Admin Actions Log"},{"url":"https:\/\/amasty.com\/advanced-permissions-for-magento-2.html","name":"Advanced Permissions"},{"url":"https:\/\/amasty.com\/payment-restrictions-for-magento-2.html","name":"Payment Restrictions"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"B2B Products","is_category":true,"id":"category-node-61","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/b2b-extensions-for-magento-2.html","current":false,"items_count":27,"top_products":[{"url":"https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html","name":"B2B E-commerce Premium Suite"},{"url":"https:\/\/amasty.com\/import-and-export-for-magento-2.html","name":"Import and Export Premium"},{"url":"https:\/\/amasty.com\/b2b-company-account-for-magento-2.html","name":"B2B Company Account"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"AI-Powered Extensions","is_category":true,"id":"category-node-103","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/ai-extensions-for-magento-2.html","current":false,"items_count":3,"top_products":[{"url":"https:\/\/amasty.com\/blog-pro-for-magento-2.html","name":"Blog Pro"},{"url":"https:\/\/amasty.com\/chatgpt-ai-content-for-magento-2.html","name":"ChatGPT AI Content Generator"},{"url":"https:\/\/amasty.com\/google-automated-discounts-for-magento-2.html","name":"Google Automated Discounts"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Free Magento 2 Extensions","is_category":true,"id":"category-node-43","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/free-magento-2-extensions.html","current":false,"items_count":8,"top_products":[{"url":"https:\/\/amasty.com\/google-page-speed-optimizer-lite-for-magento-2.html","name":"Google Page Speed Optimizer"},{"url":"https:\/\/amasty.com\/recently-viewed-products-popup-for-magento-2.html","name":"Recently Viewed Products"},{"url":"https:\/\/amasty.com\/mega-menu-lite-for-magento-2.html","name":"Mega Menu"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Support Packs","is_category":true,"id":"category-node-79","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/contacts","current":false,"items_count":0,"hide_mobile_content":false,"submenu_animation":null},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Research Product Demand","is_category":true,"id":"category-node-69","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/research-product-demand.html","current":false,"items_count":57,"hide_mobile_content":false,"submenu_animation":null},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Public Roadmap","is_category":true,"id":"category-node-97","status":1,"sort_order":null,"content":"","url":"https:\/\/trello.com\/b\/mGKdSV3a\/%F0%9F%9A%A9-amasty-product-roadmap-%F0%9F%9A%A9","current":false,"items_count":0,"hide_mobile_content":false,"submenu_animation":"none"}],"__disableTmpl":true,"name":"Magento 2 Extensions","is_category":true,"id":"category-node-25","status":1,"sort_order":"0","content":"<div class=\"ammenu-dropdown-wrapper -desktop\">\r\n <div class=\"left-side\">\r\n <div class=\"ammenu-widget-wrapper block widget mega-menu-products-list\" data-amsite-js=\"top-product-widget\"> <div class=\"block-title\">Popular right now<\/div> <div class=\"block-content\"><ul class=\"widget-product-items\"> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/cookie-consent-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Cookie Consent (GDPR)\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/c\/o\/cookie-consent-for-magento-2_6253b4c79f9ab.png\" alt=\"Cookie Consent (GDPR) for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Cookie Consent (GDPR)<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Improved Layered Navigation\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/m\/improved-layered-navigation-for-magento-2_5_png.webp\" alt=\"Improved Layered Navigation for Magento 2\"\/><\/span><\/span> <div class=\"amasty-label-container amasty-label-container-13-506-cat amasty-label-for-506\" 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\":\"506\",\"label\":13,\"margin\":7,\"alignment\":0,\"order\":5,\"redirect_url\":\"\",\"tooltip\":{\"backgroundColor\":\"\",\"color\":\"\",\"status\":1,\"content\":\"\"}}, \"productId\": \"506\", \"selector\": \".amasty-label-container-13-506-cat\" }}'><div class=\"amlabel-text\"><\/div> <img id=\"amasty-label-image-13-506-cat\" class=\"amasty-label-image\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\" style=\"opacity: 1 !important;vertical-align: top;\" title=\"Improved Layered Navigation for Magento 2\" alt=\"Improved Layered Navigation for Magento 2\" ><\/div> <div class=\"product-item-name\"><span class=\"ammenu-text\">Improved Layered Navigation<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/google-tag-manager-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Google Analytics 4 with GTM Support\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon-google-tag-manager-for-magento-2_png.webp\" alt=\"Google Analytics 4 with GTM Support for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Google Analytics 4 with GTM Support<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <\/ul><\/div> <a href=\"\/hyva-theme-extensions-for-magento-2.html?utm_source=menu&utm_medium=widget&utm_campaign=hyva_extensions\" class=\"block-link-below\" tabindex=\"0\" title=\"View All Hyva Extensions\">View All Hyva Extensions<\/a> <\/div>\r\n\r\n <div class=\"ammenu-m2-dropdown-banners\" data-amsite-js=\"ammenu-m2-dropdown-banners\">\r\n <a class=\"amsite-menu-picker-btn action secondary\" href=\"\/latest-updates-magento-2-extensions.html?utm_source=menu&utm_medium=widget&utm_campaign=recent_updates\" title=\"Go to this page\">\r\n Check Module Updates\r\n <\/a>\r\n <img src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/amsite\/adobe-partner-badge-2x_png.webp\" alt=\"Adobe partner logo\" width=\"180\" \r\n height=\"46\">\r\n<\/div> \r\n\r\n <\/div>\r\n <div class=\"right-side\">\r\n <!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->\r\n <\/div>\r\n<\/div>","url":"https:\/\/amasty.com\/magento-2-extensions.html","current":false,"items_count":261,"top_products":[{"url":"https:\/\/amasty.com\/tier-price-for-magento-2.html","name":"Tier Price for Magento 2"}],"hide_mobile_content":false,"submenu_animation":"fade_in"},{"show_mobile_content":0,"mobile_content":"<div class=\"ammenu-view-all-mobile-link\">\r\n <a class=\"ammenu-link view-all\"\r\n href=\"\/magento-2-solutions.html\"\r\n aria-label=\"Go to Solutions\"\r\n title=\"Go to Solutions\"\r\n role=\"link\"\r\n tabindex=\"0\"\r\n >\r\n All Solutions\r\n <\/a>\r\n<\/div>\r\n\r\n <div class=\"ammenu-widget-wrapper block widget mega-menu-products-list\" data-amsite-js=\"top-product-widget\"> <div class=\"block-title\">Featured Products<\/div> <div class=\"block-content\"><ul class=\"widget-product-items\"> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to B2B E-commerce Premium Solution\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon_b2b_premium_2.png\" alt=\"B2B E-commerce Premium Solution for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">B2B E-commerce Premium Solution<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Google Page Speed Optimizer Powered by SpeedSize™ AI Pro\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/g\/o\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2_629ed9b6e2f0e.png\" alt=\"Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro for Magento 2\"\/><\/span><\/span> <div class=\"amasty-label-container amasty-label-container-13-2699-cat amasty-label-for-2699\" 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\":\"2699\",\"label\":13,\"margin\":7,\"alignment\":0,\"order\":5,\"redirect_url\":\"\",\"tooltip\":{\"backgroundColor\":\"\",\"color\":\"\",\"status\":1,\"content\":\"\"}}, \"productId\": \"2699\", \"selector\": \".amasty-label-container-13-2699-cat\" }}'><div class=\"amlabel-text\"><\/div> <img id=\"amasty-label-image-13-2699-cat\" class=\"amasty-label-image\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\" style=\"opacity: 1 !important;vertical-align: top;\" title=\"Google Page Speed Optimizer Powered by SpeedSize™ AI Pro for Magento 2\" alt=\"Google Page Speed Optimizer Powered by SpeedSize™ AI Pro for Magento 2\" ><\/div> <div class=\"product-item-name\"><span class=\"ammenu-text\">Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <\/ul><\/div> <a href=\"\/magento-2-extensions.html\" class=\"block-link-below\" tabindex=\"0\" title=\"View All BestSellers\">View All BestSellers<\/a> <\/div>\r\n","type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":3,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Hyva Solutions","is_category":true,"id":"category-node-104","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/hyva-solutions-for-magento-2.html","current":false,"items_count":8,"top_products":[{"url":"https:\/\/amasty.com\/gdpr-for-magento-2.html","name":"GDPR Pro"},{"url":"https:\/\/amasty.com\/gift-card-for-magento-2.html","name":"Gift Card Pro"},{"url":"https:\/\/amasty.com\/product-attachments-for-magento-2.html","name":"Product Attachments"}],"label":{"label":"HOT","label_text_color":"#ffffff","label_background_color":"#ff2f7a"},"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":0,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Enhanced Navigation","is_category":true,"id":"category-node-72","status":1,"sort_order":"99999","content":"","url":"https:\/\/amasty.com\/usability-navigation-solutions-for-magento-2.html","current":false,"items_count":5,"top_products":[{"url":"https:\/\/amasty.com\/premium-custom-layered-navigation-for-magento-2.html","name":"Layered Navigation Premium"},{"url":"https:\/\/amasty.com\/advanced-search-for-magento-2.html","name":"Advanced Search"}],"label":{"label":"TOP","label_text_color":"#1a1a1a","label_background_color":"#ffed11"},"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Packs","is_category":true,"id":"category-node-113","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/packs-for-magento-2.html","current":false,"items_count":2,"top_products":[{"url":"https:\/\/amasty.com\/ultimate-sale-booster-for-magento-2.html","name":"Sale Booster Pack"},{"url":"https:\/\/amasty.com\/elastic-layered-navigation-for-magento-2.html","name":"Elastic Layered Navigation"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Suites","is_category":true,"id":"category-node-114","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/suites-for-magento-2.html","current":false,"items_count":4,"top_products":[{"url":"https:\/\/amasty.com\/promotion-suite-middle-for-magento-2.html","name":"Promotion Suite Pro"},{"url":"https:\/\/amasty.com\/security-suite-for-magento-2.html","name":"Security Suite "},{"url":"https:\/\/amasty.com\/shipping-suite-for-magento-2.html","name":"Shipping Suite Pro"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Sales & Marketing","is_category":true,"id":"category-node-73","status":1,"sort_order":"99999","content":"","url":"https:\/\/amasty.com\/sales-and-marketing-solutions-for-magento-2.html","current":false,"items_count":11,"top_products":[{"url":"https:\/\/amasty.com\/abandoned-cart-email-for-magento-2.html","name":"Abandoned Cart Email"},{"url":"https:\/\/amasty.com\/reward-points-for-magento-2.html","name":"Reward Points"},{"url":"https:\/\/amasty.com\/special-promotions-for-magento-2.html","name":"Special Promotions"},{"url":"https:\/\/amasty.com\/facebook-pixel-for-magento-2.html","name":"Facebook Pixel"},{"url":"https:\/\/amasty.com\/advanced-product-reviews-for-magento-2.html","name":"Advanced Product Reviews"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"User Experience","is_category":true,"id":"category-node-77","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/user-experience-solutions-for-magento-2.html","current":false,"items_count":5,"top_products":[{"url":"https:\/\/amasty.com\/request-a-quote-for-magento-2.html","name":"Request a Quote"},{"url":"https:\/\/amasty.com\/google-page-speed-optimizer-premium-for-magento-2.html","name":"Google Page Speed Optimizer Premium"},{"url":"https:\/\/amasty.com\/store-locator-for-magento-2.html","name":"Store Locator"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Order Management","is_category":true,"id":"category-node-74","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/order-management-solutions-for-magento-2.html","current":false,"items_count":5,"top_products":[{"url":"https:\/\/amasty.com\/rma-for-magento-2.html","name":"RMA"},{"url":"https:\/\/amasty.com\/pre-order-for-magento-2.html","name":"Pre Order"},{"url":"https:\/\/amasty.com\/advanced-reports-for-magento-2.html","name":"Advanced Reports"}],"hide_mobile_content":false,"submenu_animation":"none"}],"__disableTmpl":true,"name":"Suites","is_category":true,"id":"category-node-71","status":1,"sort_order":"1","content":"<div class=\"ammenu-dropdown-wrapper -desktop\">\r\n <div class=\"left-side\">\r\n <div class=\"ammenu-widget-wrapper block widget mega-menu-products-list\" data-amsite-js=\"top-product-widget\"> <div class=\"block-title\">Featured Products<\/div> <div class=\"block-content\"><ul class=\"widget-product-items\"> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/google-automated-discounts-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Google Automated Discounts Premium\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/g\/o\/google-automated-discounts-for-magento-2_6568768b9b091.png\" alt=\"Google Automated Discounts Premium for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Google Automated Discounts Premium<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to B2B E-commerce Premium Solution\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon_b2b_premium_2_png.webp\" alt=\"B2B E-commerce Premium Solution for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">B2B E-commerce Premium Solution<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Google Page Speed Optimizer Powered by SpeedSize™ AI Pro\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/g\/o\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2_629ed9b6e2f0e_png.webp\" alt=\"Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro for Magento 2\"\/><\/span><\/span> <div class=\"amasty-label-container amasty-label-container-13-2699-cat amasty-label-for-2699\" 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\":\"2699\",\"label\":13,\"margin\":7,\"alignment\":0,\"order\":5,\"redirect_url\":\"\",\"tooltip\":{\"backgroundColor\":\"\",\"color\":\"\",\"status\":1,\"content\":\"\"}}, \"productId\": \"2699\", \"selector\": \".amasty-label-container-13-2699-cat\" }}'><div class=\"amlabel-text\"><\/div> <img id=\"amasty-label-image-13-2699-cat\" class=\"amasty-label-image\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\" style=\"opacity: 1 !important;vertical-align: top;\" title=\"Google Page Speed Optimizer Powered by SpeedSize™ AI Pro for Magento 2\" alt=\"Google Page Speed Optimizer Powered by SpeedSize™ AI Pro for Magento 2\" ><\/div> <div class=\"product-item-name\"><span class=\"ammenu-text\">Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <\/ul><\/div> <a href=\"\/all-magento-2-bundles\" class=\"block-link-below\" tabindex=\"0\" title=\"View ready-made bundles list\">View ready-made bundles list<\/a> <\/div>\r\n\r\n <\/div>\r\n <div class=\"right-side\">\r\n <!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->\r\n <\/div>\r\n<\/div>","url":"https:\/\/amasty.com\/magento-2-solutions.html","current":false,"items_count":43,"top_products":[{"url":"https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html","name":"Improved Layered Navigation","label":{"label":"TOP","label_text_color":"#1a1a1a","label_background_color":"#ffed11"}},{"url":"https:\/\/amasty.com\/elasticsearch-for-magento-2.html","name":"Elastic Search"},{"url":"https:\/\/amasty.com\/mega-menu-for-magento-2.html","name":"Mega Menu Pro"}],"hide_mobile_content":false,"submenu_animation":"fade_in"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Support","is_category":false,"id":"custom-node-4","status":1,"sort_order":"2","content":"","url":"https:\/\/amasty.com\/contacts\/","current":false,"items_count":null,"hide_mobile_content":false,"submenu_animation":null},{"show_mobile_content":0,"mobile_content":"<div class=\"ammenu-view-all-mobile-link\">\r\n <a class=\"ammenu-link view-all\"\r\n href=\"\/magento-services.html\"\r\n aria-label=\"Go to All Services\"\r\n title=\"Go to All Services\"\r\n role=\"link\"\r\n tabindex=\"0\"\r\n >\r\n All Services\r\n <\/a>\r\n<\/div>\r\n\r\n <div class=\"ammenu-widget-wrapper block widget mega-menu-products-list\" data-amsite-js=\"top-product-widget\"> <div class=\"block-title\">Featured Services<\/div> <div class=\"block-content\"><ul class=\"widget-product-items\"> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-optimization-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento Optimization Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-optimization-service_63f5d17699021.png\" alt=\"Magento Optimization Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento Optimization Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento 2 Support and Maintenance Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-support-and-maintenance-service_64c2674727566.png\" alt=\"Magento 2 Support and Maintenance Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento 2 Support and Maintenance Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-website-development-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento Website Development\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-website-development-service_64be2084385cb.png\" alt=\"Magento Website Development\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento Website Development<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-2-upgrade-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento 2 Upgrade Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-upgrade-service_61a5e5cfefab3.png\" alt=\"Magento 2 Upgrade Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento 2 Upgrade Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-to-shopify-migration-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento to Shopify Migration Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon-magento-to-shopify-migration-for-magento-2.png\" alt=\"Magento to Shopify Migration Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento to Shopify Migration Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <\/ul><\/div> <a href=\"\/magento-services.html\" class=\"block-link-below\" tabindex=\"0\" title=\"View All BestSellers\">View All BestSellers<\/a> <\/div>\r\n\r\n\r\n","type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"High-Demand Services","is_category":true,"id":"category-node-111","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-development-services.html","current":false,"items_count":4,"top_products":[{"url":"https:\/\/amasty.com\/magento-development.html","name":"Magento Custom Development"},{"url":"https:\/\/amasty.com\/magento-optimization-service.html","name":"Magento Optimization"},{"url":"https:\/\/amasty.com\/magento-2-upgrade-service.html","name":"Magento 2 Upgrade Service","label":{"label":"10%","label_text_color":"#ffffff","label_background_color":"#f9425a"}},{"url":"https:\/\/amasty.com\/website-development-service.html","name":"Custom Website Development Services"}],"label":{"label":"TOP","label_text_color":"#1a1a1a","label_background_color":"#ffed11"},"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Magento Development Services","is_category":true,"id":"category-node-84","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-development-services.html","current":false,"items_count":17,"top_products":[{"url":"https:\/\/amasty.com\/magento-website-development-service.html","name":"Magento Website Development"},{"url":"https:\/\/amasty.com\/magento-mobile-app-development-service.html","name":"Magento Mobile App Development"},{"url":"https:\/\/amasty.com\/magento-code-audit-service.html","name":"Magento Code Audit"},{"url":"https:\/\/amasty.com\/magento-outsourcing-services.html","name":"Magento Outsourcing Services"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Hyva Development Services","is_category":true,"id":"category-node-108","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-hyva-theme-development-service.html","current":false,"items_count":3,"top_products":[{"url":"https:\/\/amasty.com\/magento-hyva-theme-development-service.html","name":"Hyva Theme Development"},{"url":"https:\/\/amasty.com\/hyva-theme-migration-service.html","name":"Hyva Theme Migration"},{"url":"https:\/\/amasty.com\/magento-hyva-theme-customization-service.html","name":"Hyva Theme Customization"}],"label":{"label":"HOT","label_text_color":"#1a1a1a","label_background_color":"#ffed11"},"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Magento Optimization Services","is_category":true,"id":"category-node-85","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-optimization-service.html","current":false,"items_count":6,"top_products":[{"url":"https:\/\/amasty.com\/magento-performance-audit.html","name":"Magento Performance Audit","label":{"label":"FREE","label_text_color":"#ffffff","label_background_color":"#4d91f8"}},{"url":"https:\/\/amasty.com\/magento-seo-services.html","name":"Magento SEO Services"},{"url":"https:\/\/amasty.com\/website-ui-ux-audit.html","name":"Website UI\/UX Audit"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Magento Maintenance Services","is_category":true,"id":"category-node-86","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html","current":false,"items_count":6,"top_products":[{"url":"https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html","name":"Magento 2 Support and Maintenance"},{"url":"https:\/\/amasty.com\/installation-service.html","name":"Installation Service"},{"url":"https:\/\/amasty.com\/magento-security-patch.html","name":"Magento Security Patch Installation"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Magento Upgrade Services","is_category":true,"id":"category-node-87","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-2-upgrade-service.html","current":false,"items_count":5,"top_products":[{"url":"https:\/\/amasty.com\/magento-1-to-2-migration-service.html","name":"Magento 1 to 2 Migration"},{"url":"https:\/\/amasty.com\/magento-server-configuration-and-migration-service.html","name":"Magento Server Configuration and Migration"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Magento Integration Services","is_category":true,"id":"category-node-89","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-integration-service.html","current":false,"items_count":7,"top_products":[{"url":"https:\/\/amasty.com\/amazon-integration-for-magento-2.html","name":"Magento 2 Amazon Integration"},{"url":"https:\/\/amasty.com\/magento-2-microsoft-dynamics-integration-service.html","name":"Magento 2 Microsoft Integration"},{"url":"https:\/\/amasty.com\/sap-integration-services-magento.html","name":"Magento 2 SAP Integration"},{"url":"https:\/\/amasty.com\/magento-2-salesforce-integration-service.html","name":"Magento 2 Salesforce Integration"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Managed Services","is_category":true,"id":"category-node-115","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/managed-it-service.html","current":false,"items_count":4,"top_products":[{"url":"https:\/\/amasty.com\/managed-ecommerce-service.html","name":"E-commerce Managed Services"},{"url":"https:\/\/amasty.com\/managed-security-service.html","name":"Managed Security Services"},{"url":"https:\/\/amasty.com\/managed-magento-service.html","name":"Magento Managed Services"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Shopify Services","is_category":true,"id":"category-node-90","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/shopify-website-development-service.html","current":false,"items_count":11,"top_products":[{"url":"https:\/\/amasty.com\/magento-to-shopify-migration-service.html","name":"Magento to Shopify Migration"},{"url":"https:\/\/amasty.com\/custom-shopify-theme-development-service.html","name":"Custom Shopify Theme Development"},{"url":"https:\/\/amasty.com\/shopify-app-development-service.html","name":"Shopify App Development"},{"url":"https:\/\/amasty.com\/shopify-site-speed-optimization-service.html","name":"Shopify Speed Optimization"},{"url":"https:\/\/amasty.com\/shopify-to-woocommerce-migration-service.html","name":"Shopify to WooCommerce Migration"},{"url":"https:\/\/amasty.com\/shopify-integration-service.html","name":"Shopify Integration"}],"label":{"label":"HOT","label_text_color":"#1a1a1a","label_background_color":"#ffed11"},"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"E-Commerce Services","is_category":true,"id":"category-node-92","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-services.html","current":false,"items_count":5,"top_products":[{"url":"https:\/\/amasty.com\/e-commerce-site-development-service.html","name":"E-commerce Site Development"},{"url":"https:\/\/amasty.com\/hire-magento-experts-business-models.html","name":"Service Pricing Models"},{"url":"https:\/\/amasty.com\/ecommerce-website-redesign-services.html","name":"E-commerce Website Redesign"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"QA Testing Services","is_category":true,"id":"category-node-93","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/qa-testing-services.html","current":false,"items_count":2,"top_products":[{"url":"https:\/\/amasty.com\/qa-for-ecommerce-business-service.html","name":"E-commerce QA testing"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hire Developers","is_category":true,"id":"category-node-94","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/hire-developers.html","current":false,"items_count":7,"top_products":[{"url":"https:\/\/amasty.com\/hire-php-developer.html","name":"Hire PHP Developer"},{"url":"https:\/\/amasty.com\/hire-certified-magento-2-developers.html","name":"Hire Magento 2 Developer"},{"url":"https:\/\/amasty.com\/hire-shopify-developers.html","name":"Hire Shopify Developers"}],"hide_mobile_content":false,"submenu_animation":"none"}],"__disableTmpl":true,"name":"Services","is_category":true,"id":"category-node-37","status":1,"sort_order":"3","content":"<div class=\"ammenu-dropdown-wrapper -desktop\">\r\n <div class=\"left-side\">\r\n <a href=\"https:\/\/amasty.com\/magento-2-upgrade-service.html?utm_source=menu&utm_medium=widget&utm_campaign=services_banner\"><img src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/wysiwyg\/amasty\/banner-upgrade-service_png.webp\" alt=\"banner-review\" style=\"margin-bottom: 30px;\"><\/a>\r\n <!-- <div class=\"ammenu-widget-wrapper block widget mega-menu-products-list\" data-amsite-js=\"top-product-widget\"> <div class=\"block-title\">TOP-4 Amasty services<\/div> <div class=\"block-content\"><ul class=\"widget-product-items\"> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-optimization-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento Optimization Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-optimization-service_63f5d17699021_png.webp\" alt=\"Magento Optimization Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento Optimization Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento 2 Support and Maintenance Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-support-and-maintenance-service_64c2674727566_png.webp\" alt=\"Magento 2 Support and Maintenance Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento 2 Support and Maintenance Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-website-development-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento Website Development\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-website-development-service_64be2084385cb_png.webp\" alt=\"Magento Website Development\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento Website Development<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-2-upgrade-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento 2 Upgrade Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-upgrade-service_61a5e5cfefab3_png.webp\" alt=\"Magento 2 Upgrade Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento 2 Upgrade Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <\/ul><\/div><\/div> -->\r\n <button class=\"amform-show-popup-imitation\">Show Form<\/button>\r\n <\/div>\r\n <div class=\"right-side\">\r\n <!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->\r\n <\/div>\r\n<\/div>","url":"https:\/\/amasty.com\/magento-services.html","current":false,"items_count":75,"hide_mobile_content":false,"submenu_animation":"fade_in"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Shopify Apps","is_category":true,"id":"category-node-107","status":1,"sort_order":"4","content":"","url":"https:\/\/amasty.com\/shopify-apps.html","current":false,"items_count":0,"hide_mobile_content":false,"submenu_animation":null},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","icon":"https:\/\/cdn.amasty.com\/media\/amasty\/ammegamenu\/Heart_2x_1.jpg","icon_extension":"jpg","elems":[],"__disableTmpl":true,"name":"Special Offers","is_category":false,"id":"custom-node-1","status":1,"sort_order":"6","content":"<div class=\"ammenu-custom-container -full -loyalty\" >\r\n <ul class=\"ammenu-items\">\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Amasty Special Offers page\" analytics-custom-menu-items=\"DropDownMenuOffers\" href=\"\/amasty-promo.html\"><span class=\"ammenu-wrapper\">Special Offers<\/span> <\/a><\/li>\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to AmastyAll Bundles page\" analytics-custom-menu-items=\"DropDownMenuOffers\" href=\"\/all-magento-2-bundles\"><span class=\"ammenu-wrapper\">All Bundles<\/span> <\/a><\/li>\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Replace Third-Party Modules Offer page\" analytics-custom-menu-items=\"DropDownMenuOffers\" href=\"\/amasty-only-offer\/\"><span class=\"ammenu-wrapper\">Replace Modules Offer<\/span> <\/a><\/li>\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Custom Bundle page\" analytics-custom-menu-items=\"DropDownMenuOffers\" href=\"\/custom-bundle.html\"><span class=\"ammenu-wrapper\">Custom Bundle Offer<\/span> <\/a><\/li>\r\n<li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Free Resources page\" analytics-custom-menu-items=\"DropDownMenuOffers\" href=\"\/free-magento-resources\"><span class=\"ammenu-wrapper\">Free Resources<\/span> <\/a><\/li>\r\n <\/ul>\r\n<\/div>","url":"https:\/\/amasty.com\/amasty-promo.html","current":false,"items_count":"0","hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"400","mobile_font":"400","elems":[],"__disableTmpl":true,"name":"Loyalty Programs","is_category":false,"id":"custom-node-11","status":1,"sort_order":"7","content":"<div class=\"ammenu-custom-container -full -loyalty\" >\r\n <ul class=\"ammenu-items\">\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Amasty Loyalty Program page\" analytics-custom-menu-items=\"DropDownMenuLoyalty\" href=\"\/amasty-loyalty-program.html\"><span class=\"ammenu-wrapper\">Amasty Loyalty Program<\/span> <\/a><\/li>\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Partner Program page\" analytics-custom-menu-items=\"DropDownMenuLoyalty\" href=\"\/partnership-program.html\"><span class=\"ammenu-wrapper\">Partner Program<\/span> <\/a><\/li>\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Affiliate Program page\" analytics-custom-menu-items=\"DropDownMenuLoyalty\" href=\"\/affiliate-program.html\"><span class=\"ammenu-wrapper\">Affiliate Program<\/span><\/a><\/li>\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Official Partners page\" analytics-custom-menu-items=\"DropDownMenuLoyalty\" href=\"\/partners.html\"><span class=\"ammenu-wrapper\">Official Partners<\/span><\/a><\/li>\r\n <\/ul>\r\n<\/div>","url":"https:\/\/amasty.com\/amasty-loyalty-program.html","current":false,"items_count":"0","hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"400","mobile_font":"400","elems":[],"__disableTmpl":true,"name":"Blog","is_category":false,"id":"custom-node-2","status":1,"sort_order":"8","content":"","url":"https:\/\/amasty.com\/blog\/","current":false,"items_count":"0","hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"400","mobile_font":"400","elems":[],"__disableTmpl":true,"name":"FAQ","is_category":false,"id":"custom-node-10","status":1,"sort_order":"9","content":"","url":"https:\/\/amasty.com\/knowledge-base\/","current":false,"items_count":"0","hide_mobile_content":false,"submenu_animation":"none"}],"__disableTmpl":true,"name":null,"is_category":null,"id":null,"status":0,"sort_order":null,"content":null,"url":null,"current":false,"items_count":null,"hide_mobile_content":false,"submenu_animation":null}, config: {"is_hamburger":false,"color_settings":{"color_template":"custom","main_menu_background":"#fff","main_menu_background_hover":"#FFFFFF","main_menu_text":"#1a1a1a","main_menu_text_hover":"#FF5B0F","submenu_background_color":"#fff","submenu_background_image":"","submenu_text":"#1a1a1a","submenu_text_hover":"#FF5B0F","current_category_color":"#ff5b0f","toggle_icon_color":"#1a1a1a","hamburger_icon_color":"#1a1a1a"},"mobile_menu_title":"","mobile_menu_width":1023,"welcome_message":{"message":"Default welcome msg!"},"invitation_url":"","hide_view_all_link":true,"mobile_class":"drill","is_sticky":1,"is_icons_available":"both","animation_time":0.2,"hamburger_animation":"none"}, children: [], settings: {"account":{"is_logged_in":false,"login":"https:\/\/amasty.com\/customer\/account\/login\/","create":"https:\/\/amasty.com\/customer\/account\/create\/","logout":"https:\/\/amasty.com\/customer\/account\/logout\/","account":"https:\/\/amasty.com\/customer\/account\/"},"switcher":{"current_code":"default","current_name":"Amasty Store","current_store_id":"1","items":[{"url":"https:\/\/amasty.com\/stores\/store\/redirect\/___store\/default\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tLz9fX19zdG9yZT1kZWZhdWx0\/___from_store\/default\/","code":"default","name":"Amasty Store"}]},"currency":[{"data-post":"{\"action\":\"https:\\\/\\\/amasty.com\\\/directory\\\/currency\\\/switch\\\/\",\"data\":{\"currency\":\"GBP\"}}","name":"British Pound","code":"GBP","code_title":"GBP","current_currency":false},{"data-post":"{\"action\":\"https:\\\/\\\/amasty.com\\\/directory\\\/currency\\\/switch\\\/\",\"data\":{\"currency\":\"EUR\"}}","name":"Euro","code":"EUR","code_title":"EUR","current_currency":false},{"data-post":"{\"action\":\"https:\\\/\\\/amasty.com\\\/directory\\\/currency\\\/switch\\\/\",\"data\":{\"currency\":\"USD\"}}","name":"US Dollar","code":"USD","code_title":"USD","current_currency":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: #fff; color: #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(https://cdn.amasty.com/media/amasty/ammegamenu/Heart_2x_1.jpg); maskImage: url(https://cdn.amasty.com/media/amasty/ammegamenu/Heart_2x_1.jpg); background-color: #1a1a1a; background-image: url(https://cdn.amasty.com/media/amasty/ammegamenu/Heart_2x_1.jpg); " 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 category32"> <strong>Order Management</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 compatibility" > <!-- amasty_bestseller_slider_image--> <div class="product-photo-wrapper" style="background-image: url('https://cdn.amasty.com/media/catalog/product/cache/8b14a410c096e2fc1a81f19ab33fad4c/o/r/order-attributes-for-magento-2_6584242b16abb.png')"></div> <div class="product-item-details "><div class="product-info-wrap"><a title="Order Attributes M2" aria-label="Order Attributes M2" href="https://amasty.com/order-attributes-for-magento-2.html" class="product-item-link roduct-item-name">Order Attributes M2</a> <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/order-attributes-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="#fcd34d"/><stop offset="65%" stop-color="#fcd34d"/><stop offset="65%" stop-color="#d1d5db"/><stop offset="100%" stop-color="#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/order-attributes-for-magento-2.html#reviews" aria-label="Reviews" >14 <span>Reviews</span></a></div> <div class="swatch-wrapper swatch-opt-620" data-role="swatch-option-620"></div></div><div class="product-item-bottom"> <div class="price-box price-final_price" data-role="priceBox" data-product-id="620" data-price-box="product-id-620"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="old-price-620-widget-product-grid" data-price-amount="229" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$229</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="order-attributes-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/620/" method="post"><input type="hidden" name="product" value="620"/><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzYyMC8~"/><input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-in-bestsellers" data-product-name-analytics="Order Attributes M2" title="Add to 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 compatibility" > <!-- amasty_bestseller_slider_image--> <div class="product-photo-wrapper" style="background-image: url('https://cdn.amasty.com/media/catalog/product/cache/8b14a410c096e2fc1a81f19ab33fad4c/m/a/mass-order-actions-for-magento-2_6584251b06873.png')"></div> <div class="product-item-details "><div class="product-info-wrap"><a title="Mass Order Actions M2" aria-label="Mass Order Actions M2" href="https://amasty.com/mass-order-actions-for-magento-2.html" class="product-item-link roduct-item-name">Mass Order Actions M2</a> <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/mass-order-actions-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="#fcd34d"/><stop offset="65%" stop-color="#fcd34d"/><stop offset="65%" stop-color="#d1d5db"/><stop offset="100%" stop-color="#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/mass-order-actions-for-magento-2.html#reviews" aria-label="Reviews" >3 <span>Reviews</span></a></div> <div class="swatch-wrapper swatch-opt-588" data-role="swatch-option-588"></div></div><div class="product-item-bottom"> <div class="price-box price-final_price" data-role="priceBox" data-product-id="588" data-price-box="product-id-588"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="old-price-588-widget-product-grid" data-price-amount="149" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$149</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="mass-order-actions-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/588/" method="post"><input type="hidden" name="product" value="588"/><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzU4OC8~"/><input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-in-bestsellers" data-product-name-analytics="Mass Order Actions M2" title="Add to 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 compatibility" > <!-- amasty_bestseller_slider_image--> <div class="product-photo-wrapper" style="background-image: url('https://cdn.amasty.com/media/catalog/product/cache/8b14a410c096e2fc1a81f19ab33fad4c/r/m/rma-for-magento-2_658425a6e1072.png')"></div> <div class="product-item-details "><div class="product-info-wrap"><a title="RMA M2" aria-label="RMA M2" href="https://amasty.com/rma-for-magento-2.html" class="product-item-link roduct-item-name">RMA M2</a> <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/rma-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="#fcd34d"/><stop offset="80%" stop-color="#fcd34d"/><stop offset="80%" stop-color="#d1d5db"/><stop offset="100%" stop-color="#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/rma-for-magento-2.html#reviews" aria-label="Reviews" >16 <span>Reviews</span></a></div> <div class="swatch-wrapper -round swatch-opt-664" data-role="swatch-option-664"></div></div><div class="product-item-bottom"> <div class="price-box price-final_price" data-role="priceBox" data-product-id="664" data-price-box="product-id-664"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="old-price-664-widget-product-grid" data-price-amount="219" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$219</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="rma-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/664/" method="post"><input type="hidden" name="product" value="664"/><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzY2NC8~"/><input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-in-bestsellers" data-product-name-analytics="RMA M2" title="Add to 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 Order Management</h1></div><input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <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 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 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="bmn7hc6d2ZwF62hx" /><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 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 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 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 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 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\/order-management-extensions-for-magento-2.html","formKey":"bmn7hc6d2ZwF62hx","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">28</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 filter" title="Close 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="Fast & Easy Store Control"> <input name="amshopby[tag][]" value="22" type="radio" style="" class="input" /> <a class="am-filter-item-67bf261ef1f55 link -blue" data-am-js="filter-item-default" href="https://amasty.com/order-management-extensions-for-magento-2.html?tag=22" rel="nofollow"><span class="label">Fast & Easy Store Control</span> <span class="count">4<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-67bf261ef2131 link -green" data-am-js="filter-item-default" href="https://amasty.com/order-management-extensions-for-magento-2.html?tag=26" rel="nofollow"><span class="label">Hyva-ready Extensions</span> <span class="count">27<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-67bf261ef222e link -purple" data-am-js="filter-item-default" href="https://amasty.com/order-management-extensions-for-magento-2.html?tag=30" rel="nofollow"><span class="label">Multichannel Selling</span> <span class="count">1<span class="filter-count-label">item</span></span> </a> </li> <li class="item " data-label="Selling Checkout"> <input name="amshopby[tag][]" value="25" type="radio" style="" class="input" /> <a class="am-filter-item-67bf261ef2305 link -purple" data-am-js="filter-item-default" href="https://amasty.com/order-management-extensions-for-magento-2.html?tag=25" rel="nofollow"><span class="label">Selling Checkout</span> <span class="count">1<span class="filter-count-label">item</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-67bf261ef23d2 link -brown" data-am-js="filter-item-default" href="https://amasty.com/order-management-extensions-for-magento-2.html?tag=27" rel="nofollow"><span class="label">User Experience</span> <span class="count">3<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-67bf261ef24a6 link -brown" data-am-js="filter-item-default" href="https://amasty.com/order-management-extensions-for-magento-2.html?tag=23" rel="nofollow"><span class="label">Ways to Return Users Back</span> <span class="count">1<span class="filter-count-label">item</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-67bf261ef257c link " data-am-js="filter-item-default" href="https://amasty.com/order-management-extensions-for-magento-2.html?tag=97" rel="nofollow"><span class="label">Hyva Checkout Ready</span> <span class="count">24<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-1448 { background: #c9c0fe }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/import-and-export-for-magento-2.html" class="product photo product-item-photo amsite-product-1448 " aria-label="Import and Export Premium 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-import-and-export-premium-for-magento-2.png" alt="Import and Export Premium 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":1448,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Import and Export Premium M2" aria-label="Import and Export Premium M2" href="https://amasty.com/import-and-export-for-magento-2.html">Import and Export Premium M2</a></strong> <div class="swatch-wrapper -round swatch-opt-1448" data-role="swatch-option-1448"></div> <!--short description--><div class="product description product-item-description"><a href="#choose_option" data-promo-id="banners-import-export-m2" data-promo-name="Banners at Import and Export 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>Import and Export Premium for Magento 2 is an all-in-one tool for convenient store data migration, making regular stock data updates, and smooth connection with the ERP/CRM systems and third-party sources like marketplaces. The extension provides infrastructure for importing and exporting the most essential entities to or from Magento.</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 profiles for regular data transfer or perform one-time migration</li> <li class="item">Meet naming requirements with fields mapping and modify data in one place</li> <li class="item">Schedule automatic import and export tasks via cron</li> <li class="item">Use various file formats, including Google Sheets</li> <li class="item">Validate import files to avoid errors and generate sample files</li> <li class="item">Set performance options to speed up migration and avoid server overload</li> <li class="item">Hyva-compatible by default</li> <li class="item"><b<New! </b> Hyvä Checkout ready</li> <li class="item">Mage-OS 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/import-and-export-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/import-and-export-for-magento-2.html#reviews" aria-label="Reviews" >2 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="1448" data-price-box="product-id-1448"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-1448" data-price-amount="699" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$699</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="import-and-export-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/1448/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="1448"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzE0NDgv"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Import and Export Premium for Magento 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="Import and Export Premium for Magento 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-664 { background: #f3a888 }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/rma-for-magento-2.html" class="product photo product-item-photo amsite-product-664 " aria-label="RMA 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-rma-lite-for-magento-2.png" alt="RMA 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":664,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="RMA M2" aria-label="RMA M2" href="https://amasty.com/rma-for-magento-2.html">RMA M2</a></strong> <div class="swatch-wrapper -round swatch-opt-664" data-role="swatch-option-664"></div> <!--short description--><div class="product description product-item-description"><a href="#pricing" observed-link-tab data-promo-id="rma_pricing_options" data-promo-name="RMA Pricing Options" 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!" style="margin-bottom: 20px;" /> </a> <p>Make product returns management less costly and resource-consuming for shop owners with our adaptable Magento 2 RMA extension. Create value for customers by making the process transparent and consistent to increase customer lifetime value. </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">Make returns faster and easier to improve customer satisfaction</li> <li class="item">Process all requests automatically and save your team from manual tasks </li> <li class="item">Analyze RMA efficiency with detailed reports to reduce return rates </li> <li class="item">Auto-generate shipping labels to provide self-service and reduce operational costs</li> <li class="item">Communicate with customers in a live chat to create a pleasant experience</li> <li class="item">Improve mobile experience with the RMA with <a href="https://amasty.com/pwa-add-on-for-rma-for-magento-2.html">PWA add-on</a></li> <li class="item">Choose Lite, Pro, or Premium option to empower your store with the right solution</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/rma-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="#fcd34d"/><stop offset="80%" stop-color="#fcd34d"/><stop offset="80%" stop-color="#d1d5db"/><stop offset="100%" stop-color="#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/rma-for-magento-2.html#reviews" aria-label="Reviews" >16 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="664" data-price-box="product-id-664"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-664" data-price-amount="219" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$219</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="rma-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/664/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="664"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzY2NC8~"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="RMA for Magento 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="RMA for Magento 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-558 { background: #f3a888 }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/custom-order-number-for-magento-2.html" class="product photo product-item-photo amsite-product-558 " aria-label="Custom Order Number 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_custom_order_number_2x.png" alt="Custom Order Number 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":558,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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 Order Number M2" aria-label="Custom Order Number M2" href="https://amasty.com/custom-order-number-for-magento-2.html">Custom Order Number M2</a></strong> <div class="swatch-wrapper -round swatch-opt-558" data-role="swatch-option-558"></div> <!--short description--><div class="product description product-item-description"><p>Easily manage your store documents numbering using prefixes and custom starting numbers. Fluently change counter increment step to protect your business data from competitors and attract more customers.</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">Set custom starting numbers for all order documentation</li> <li class="item">Hide business data in the customer area using increment intervals</li> <li class="item">Add prefixes and postfixes to Magento 2 order numbers</li> <li class="item">Adjust numbers to your local jurisdiction requirements</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/custom-order-number-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="#fcd34d"/><stop offset="75%" stop-color="#fcd34d"/><stop offset="75%" stop-color="#d1d5db"/><stop offset="100%" stop-color="#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/custom-order-number-for-magento-2.html#reviews" aria-label="Reviews" >13 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="558" data-price-box="product-id-558"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-558" 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="custom-order-number-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/558/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="558"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzU1OC8~"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Custom Order Number for Magento 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 Order Number for Magento 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-631 { background: #f3a888 }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/pre-order-for-magento-2.html" class="product photo product-item-photo amsite-product-631 " aria-label="Pre Order 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-pre-order-lite-for-magento-2.png" alt="Pre Order 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":631,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Pre Order M2" aria-label="Pre Order M2" href="https://amasty.com/pre-order-for-magento-2.html">Pre Order M2</a></strong> <div class="swatch-wrapper -round swatch-opt-631" data-role="swatch-option-631"></div> <!--short description--><div class="product description product-item-description"><a href="#choose_option" data-promo-id="pre_order_pricing_options" data-promo-name="Pre Order Pricing Options" 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>Allow buyers to pre-order or backorder Magento 2 out-of-stock or coming-soon products. Timely gather valuable data on customer preferences and demands and build a beneficial marketing and stock management strategy.</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">Let buyers pre-order upcoming or out-of-stock items</li> <li class="item">Enable pre-order function for all types of products</li> <li class="item">Set discounts on pre-order products via rules</li> <li class="item">Create custom pre-order buttons and notes</li> <li class="item"><b>NEW |</b>The module is read-compatible with GraphQL</li> <li class="item">Hyva-ready storefront (<a href="https://pre-order-hyva-m2.magento-demo.amasty.com/gear/bags.html" target="_blank">view demo >></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/pre-order-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="#fcd34d"/><stop offset="65%" stop-color="#fcd34d"/><stop offset="65%" stop-color="#d1d5db"/><stop offset="100%" stop-color="#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/pre-order-for-magento-2.html#reviews" aria-label="Reviews" >9 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="631" data-price-box="product-id-631"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-631" data-price-amount="189" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$189</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="pre-order-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/631/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="631"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzYzMS8~"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Pre Order for Magento 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="Pre Order for Magento 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-1369 { background: #f3a888 }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/quick-order-for-magento-2.html" class="product photo product-item-photo amsite-product-1369 " aria-label="Quick Order 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/q/u/quick-order-for-magento-2_2x.png" alt="Quick Order 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":1369,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Quick Order M2" aria-label="Quick Order M2" href="https://amasty.com/quick-order-for-magento-2.html">Quick Order M2</a></strong> <div class="swatch-wrapper -round swatch-opt-1369" data-role="swatch-option-1369"></div> <!--short description--><div class="product description product-item-description"><p>Boost B2B sales and increase repeated purchases with the Magento 2 Quick Order extension. Enable buyers to quickly order multiple products without visiting numerous web store pages.</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">Enable AJAX product search by SKU/Name</li> <li class="item">Create massive orders by inserting multiple SKUs</li> <li class="item">Let customers order in bulk via CSV and XML files</li> <li class="item">Validate SKU mismatches and out of stock on the fly</li> <li class="item">Convenient quick order UX on mobile and desktop</li> <li class="item">Allow placing quick orders from the category pages</li> <li class="item">Mage-OS compatible</li> <li class="item"><strong>Hyva-ready</strong> 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.5</p><a href="https://amasty.com/quick-order-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="#fcd34d"/><stop offset="50%" stop-color="#fcd34d"/><stop offset="50%" stop-color="#d1d5db"/><stop offset="100%" stop-color="#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/quick-order-for-magento-2.html#reviews" aria-label="Reviews" >2 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="1369" data-price-box="product-id-1369"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-1369" 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="quick-order-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/1369/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="1369"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzEzNjkv"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Quick Order for Magento 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="Quick Order for Magento 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-620 { background: #f3a888 }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/order-attributes-for-magento-2.html" class="product photo product-item-photo amsite-product-620 " aria-label="Order Attributes 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/o/r/order-attributes-for-magento-2_63c031b7cc905.png" alt="Order Attributes 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":620,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Order Attributes M2" aria-label="Order Attributes M2" href="https://amasty.com/order-attributes-for-magento-2.html">Order Attributes M2</a></strong> <div class="swatch-wrapper swatch-opt-620" data-role="swatch-option-620"></div> <!--short description--><div class="product description product-item-description">Add an unlimited number of extra fields to your checkout page to easily collect and process extra data. Display all created attributes on a handy backend grid to keep necessary information at hand.</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 flexible conditions for attribute fields displaying</li> <li class="item">View additional information on the order grid</li> <li class="item">Add custom facets to emails and PDF documents</li> <li class="item">Show extra fields depending on a shipping method</li> <li class="item">Customize attributes display based on payment method</li> <li class="item">Hyva-ready storefront</li> <li class="item"><b>New! </b>Hyvä Checkout ready(<a href="https://order-attributes-hyva-m2.magento-demo.amasty.com/checkout/">view demo >></a>)</li> <li class="item">ADA & WCAG compliance</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.7</p><a href="https://amasty.com/order-attributes-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="#fcd34d"/><stop offset="65%" stop-color="#fcd34d"/><stop offset="65%" stop-color="#d1d5db"/><stop offset="100%" stop-color="#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/order-attributes-for-magento-2.html#reviews" aria-label="Reviews" >14 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="620" data-price-box="product-id-620"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-620" data-price-amount="229" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$229</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="order-attributes-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/620/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="620"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzYyMC8~"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Order Attributes for Magento 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="Order Attributes for Magento 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-588 { background: #f3a888 }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/mass-order-actions-for-magento-2.html" class="product photo product-item-photo amsite-product-588 " aria-label="Mass Order Actions 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/m/a/mass-order-actions-for-magento-2_2x.png" alt="Mass Order Actions 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":588,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Mass Order Actions M2" aria-label="Mass Order Actions M2" href="https://amasty.com/mass-order-actions-for-magento-2.html">Mass Order Actions M2</a></strong> <div class="swatch-wrapper swatch-opt-588" data-role="swatch-option-588"></div> <!--short description--><div class="product description product-item-description"><p>Grow sales revenue by automatically processing multiple orders faster with Magento 2 Bulk Order. Send invoices, submit shipments and edit tracking numbers right from the grid just in a few clicks.</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">Manage orders in bulk right from the grid</li> <li class="item">Apply chosen actions to multiple orders in one go</li> <li class="item">Display and edit tracking numbers on a handy grid</li> <li class="item">Utilize action combinations to process orders faster</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.7</p><a href="https://amasty.com/mass-order-actions-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="#fcd34d"/><stop offset="65%" stop-color="#fcd34d"/><stop offset="65%" stop-color="#d1d5db"/><stop offset="100%" stop-color="#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/mass-order-actions-for-magento-2.html#reviews" aria-label="Reviews" >3 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="588" data-price-box="product-id-588"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-588" 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="mass-order-actions-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/588/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="588"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzU4OC8~"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Mass Order Actions for Magento 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="Mass Order Actions for Magento 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-1660 { background: #c9c0fe }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/export-orders-for-magento-2.html" class="product photo product-item-photo amsite-product-1660 " aria-label="Export Orders 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/e/f/efficient-order-export-for-magento-2_2x_1.png" alt="Export Orders 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":1660,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Export Orders M2" aria-label="Export Orders M2" href="https://amasty.com/export-orders-for-magento-2.html">Export Orders M2</a></strong> <div class="swatch-wrapper -round swatch-opt-1660" data-role="swatch-option-1660"></div> <!--short description--><div class="product description product-item-description">Migrate huge volumes of orders from your Magento instance to other systems and platforms. Export any order and sales data from Magento (including fields from 3rd-party extensions), build unique profiles and transfer data automatically with the 3-in-one Export Orders solution for Magento 2. </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 export profiles in 6 formats</li> <li class="item">Find and add any order entity to the export file, including product attributes</li> <li class="item">Match naming requirements and sorting for export fields </li> <li class="item">Run profiles by schedule, event or manually</li> <li class="item">Filter orders by values</li> <li class="item">Configure compatibilities without development using <a href="https://order-export-m2.magento-demo.amasty.com/admin/amorderexport/connection/">3rd-party connectors</a></li> <li class="item">Hyva-compatible by default</li> <li class="item"><b>New! </b> Hyvä Checkout ready</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/export-orders-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="#fcd34d"/><stop offset="65%" stop-color="#fcd34d"/><stop offset="65%" stop-color="#d1d5db"/><stop offset="100%" stop-color="#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/export-orders-for-magento-2.html#reviews" aria-label="Reviews" >3 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="1660" data-price-box="product-id-1660"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-1660" 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="export-orders-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/1660/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="1660"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzE2NjAv"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Export Orders for Magento 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="Export Orders for Magento 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-1546 { background: #c9c0fe }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/import-orders-for-magento-2.html" class="product photo product-item-photo amsite-product-1546 " aria-label="Import Orders 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/m/import-orders-for-magento-2_2x.png" alt="Import Orders 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":1546,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Import Orders M2" aria-label="Import Orders M2" href="https://amasty.com/import-orders-for-magento-2.html">Import Orders M2</a></strong> <div class="swatch-wrapper -round swatch-opt-1546" data-role="swatch-option-1546"></div> <!--short description--><div class="product description product-item-description">Conveniently sync your Magento 2 store with the orders from third-party sources, marketplaces and other Magento stores. Automatically transfer order data with no technical skills with Magento 2 Import Orders. </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">Synchronize order data with the third-party platforms</li> <li class="item">Avoid data losses with automated file validation and sample files</li> <li class="item">Create an unlimited number of import profiles</li> <li class="item">Import orders in CSV, XML, ODS, JSON, and XLSX formats</li> <li class="item">Upload files or use local directories, FTP/SFTP servers, URLs, Google Sheets, Rest API, Dropbox, Google Drive as import sources</li> <li class="item">Perform regular or one-time imports with additional interfaces</li> <li class="item">Import any <a href="https://amasty.com/gift-card-for-magento-2.html">Gift Card</a> data</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/import-orders-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/import-orders-for-magento-2.html#reviews" aria-label="Reviews" >2 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="1546" data-price-box="product-id-1546"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-1546" 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="import-orders-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/1546/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="1546"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzE1NDYv"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Import Orders for Magento 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="Import Orders for Magento 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-646 { background: #f3a888 }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/magento-2-order-status.html" class="product photo product-item-photo amsite-product-646 " aria-label="Order Status 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_order_status_2x_1.png" alt="Order Status 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":646,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Order Status M2" aria-label="Order Status M2" href="https://amasty.com/magento-2-order-status.html">Order Status M2</a></strong> <div class="swatch-wrapper -round swatch-opt-646" data-role="swatch-option-646"></div> <!--short description--><div class="product description product-item-description">Create informative order statuses to make documentation processing maximally clear both for customers and for admin users. Easily manage statuses on the grid and timely notify clients about status changes with Magento 2 Order Status extension.</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">Generate and manage custom order statuses</li> <li class="item">Assign unique notes to order states</li> <li class="item">Easily sort docs by states on the grid</li> <li class="item">Notify shoppers about status updates</li> <li class="item">Use separate email templates per status and store view</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.9</p><a href="https://amasty.com/magento-2-order-status.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="#fcd34d"/><stop offset="85%" stop-color="#fcd34d"/><stop offset="85%" stop-color="#d1d5db"/><stop offset="100%" stop-color="#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/magento-2-order-status.html#reviews" aria-label="Reviews" >6 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="646" data-price-box="product-id-646"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-646" data-price-amount="139" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$139</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="order-status-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/646/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="646"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzY0Ni8~"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Order Status for Magento 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="Order Status for Magento 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-769 { background: #f3a888 }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/order-archive-for-magento-2.html" class="product photo product-item-photo amsite-product-769 " aria-label="Order Archive 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_order_archive_2x.png" alt="Order Archive 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":769,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Order Archive M2" aria-label="Order Archive M2" href="https://amasty.com/order-archive-for-magento-2.html">Order Archive M2</a></strong> <div class="swatch-wrapper -round swatch-opt-769" data-role="swatch-option-769"></div> <!--short description--><div class="product description product-item-description"><p>Equip your Magento store with a handy tool to easily delete or archive orders. Schedule automatic archive creation to keep your orders grid clean and up-to-date. </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">Automatically archive any orders you need</li> <li class="item">Delete orders and order related data</li> <li class="item">Show archived orders on a separate grid</li> <li class="item">Manage archive schedule</li> <li class="item">API support to manage archived orders outside the admin panel</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/order-archive-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/order-archive-for-magento-2.html#reviews" aria-label="Reviews" >3 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="769" data-price-box="product-id-769"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-769" data-price-amount="159" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$159</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="order-archive-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/769/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="769"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0Lzc2OS8~"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Order Archive for Magento 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="Order Archive for Magento 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-655 { background: #f3a888 }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/extended-order-grid-for-magento-2.html" class="product photo product-item-photo amsite-product-655 " aria-label="Extended Order Grid 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/e/x/extended-order-grid-for-magento-2_2x.png" alt="Extended Order Grid 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":655,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Extended Order Grid M2" aria-label="Extended Order Grid M2" href="https://amasty.com/extended-order-grid-for-magento-2.html">Extended Order Grid M2</a></strong> <div class="swatch-wrapper -round swatch-opt-655" data-role="swatch-option-655"></div> <!--short description--><div class="product description product-item-description"><p>Increase your order grid functionality - add customer, product, shipping or billing attributes to see only relevant info and rapidly search for new inquiries.</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">Filter orders by weight, subtotal, discount amount</li> <li class="item">Search for orders by customer group, phone or email</li> <li class="item">Show product thumbnails on the grid</li> <li class="item">Track shipping and payment methods and other info</li> <li class="item">Remove particular default columns from the grid</li> <li class="item">Hyva-compatible by default</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">5.0</p><a href="https://amasty.com/extended-order-grid-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/extended-order-grid-for-magento-2.html#reviews" aria-label="Reviews" >6 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="655" data-price-box="product-id-655"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-655" 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="extended-order-grid-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/655/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="655"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzY1NS8~"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Extended Order Grid for Magento 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="Extended Order Grid for Magento 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-756 { background: #f3a888 }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/order-notes-for-magento-2.html" class="product photo product-item-photo amsite-product-756 " aria-label="Order Notes 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/o/r/order-notes-for-magento-2_2x_1.png" alt="Order Notes 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":756,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Order Notes M2" aria-label="Order Notes M2" href="https://amasty.com/order-notes-for-magento-2.html">Order Notes M2</a></strong> <div class="swatch-wrapper -round swatch-opt-756" data-role="swatch-option-756"></div> <!--short description--><div class="product description product-item-description"><p>Optimize your order management by creating order notes and marking them with colored flags, badges and other labels. Now you can control the chaos on your order grid and visualize order process.</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">Add important notes and process orders efficiently</li> <li class="item">Organize and prioritize orders</li> <li class="item">Mark orders with flags or badges to recognize a priority at a glance</li> <li class="item">Automatically add labels to orders based on their order status</li> <li class="item">Apply notes and labels in bulk</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/order-notes-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/order-notes-for-magento-2.html#reviews" aria-label="Reviews" >3 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="756" data-price-box="product-id-756"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-756" data-price-amount="129" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$129</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="order-flags-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/756/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="756"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0Lzc1Ni8~"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Order Notes for Magento 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="Order Notes for Magento 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-1457 { background: #f3a888 }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/cancel-orders-for-magento-2.html" class="product photo product-item-photo amsite-product-1457 " aria-label="Cancel Orders 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/a/cancel-orders-for-magento-2_2x.png" alt="Cancel Orders 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":1457,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Cancel Orders M2" aria-label="Cancel Orders M2" href="https://amasty.com/cancel-orders-for-magento-2.html">Cancel Orders M2</a></strong> <div class="swatch-wrapper -round swatch-opt-1457" data-role="swatch-option-1457"></div> <!--short description--><div class="product description product-item-description">Increase customers’ loyalty by allowing them to revoke their orders right from the frontend. Save your time scheduling an automatic annulation of pending orders with the Magento 2 Cancel Orders tool. Analyze cancellation reasons and timely make sales strategy improvements.</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">Let customers cancel Magento 2 orders on the frontend</li> <li class="item">Display a user-friendly cancellation popup</li> <li class="item">Collect and analyze annulation reasons</li> <li class="item">Auto cancel pending orders after a specific period</li> <li class="item">Limit auto cancellation by payment methods</li> <li class="item">Auto restock products of the revoked orders</li> <li class="item">Send notifications to your managers</li> <li class="item">Mage-OS compatible</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">5.0</p><a href="https://amasty.com/cancel-orders-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/cancel-orders-for-magento-2.html#reviews" aria-label="Reviews" >4 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="1457" data-price-box="product-id-1457"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-1457" 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="cancel-orders-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/1457/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="1457"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzE0NTcv"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Cancel Orders for Magento 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="Cancel Orders for Magento 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-1601 { background: #c4d2ff }</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 compatibility" > <div class="product-photo-wrapper"><a href="https://amasty.com/shipping-labels-add-on-for-rma-for-magento-2.html" class="product photo product-item-photo amsite-product-1601 " aria-label="Shipping Labels for RMA (Add-On) 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/h/shipping-labes-for-rma-for-magento-2-add-on_2x.png" alt="Shipping Labels for RMA (Add-On) 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":1601,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~"}}' 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="Shipping Labels for RMA (Add-On) M2" aria-label="Shipping Labels for RMA (Add-On) M2" href="https://amasty.com/shipping-labels-add-on-for-rma-for-magento-2.html">Shipping Labels for RMA (Add-On) M2</a></strong> <div class="swatch-wrapper -round swatch-opt-1601" data-role="swatch-option-1601"></div> <!--short description--><div class="product description product-item-description">Automatically generate RMA shipping labels for frequently used Magento 2 carriers. Spend less time on shipping labels creation and make the return process easier for you and your customers. </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">Generate automatic labels for UPS, FedEx and DHL carriers</li> <li class="item">Choose suitable package type and dimensions</li> <li class="item">Attach ready-made labels to RMA requests in one click</li> <li class="item">Update or correct improperly created labels</li> <li class="item">Let shoppers download labels in customer accounts</li> <li class="item">Use only as an add-on to <a href="https://amasty.com/rma-for-magento-2.html" target="_blank">Magento 2 RMA</a> extension</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 "> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.5</p><a href="https://amasty.com/shipping-labels-add-on-for-rma-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="#fcd34d"/><stop offset="50%" stop-color="#fcd34d"/><stop offset="50%" stop-color="#d1d5db"/><stop offset="100%" stop-color="#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/shipping-labels-add-on-for-rma-for-magento-2.html#reviews" aria-label="Reviews" >2 <span>Reviews</span></a></div> <!--start tmp block--> <div class="price-box price-final_price" data-role="priceBox" data-product-id="1601" data-price-box="product-id-1601"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-1601" data-price-amount="99" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$99</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="shipping-labels-add-on-for-rma-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL29yZGVyLW1hbmFnZW1lbnQtZXh0ZW5zaW9ucy1mb3ItbWFnZW50by0yLmh0bWw~/product/1601/" data-amtheme-js="ajax-tocart" method="post"> <input type="hidden" name="product" value="1601"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDI5eVpHVnlMVzFoYm1GblpXMWxiblF0WlhoMFpXNXphVzl1Y3kxbWIzSXRiV0ZuWlc1MGJ5MHlMbWgwYld3fi9wcm9kdWN0LzE2MDEv"> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /> <button type="submit" data-amsite-analytics-js="btn-add-to-cart-on-category-page" data-product-name-analytics="Shipping Labels for RMA (Add-On) for Magento 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="Shipping Labels for RMA (Add-On) for Magento 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\/order-management-extensions-for-magento-2.html","formKey":"bmn7hc6d2ZwF62hx","post":false}}'> <nav class="pages" aria-label="Pagination"> <ul class="items pages-items"> <li class="item current"><strong class="page"><span class="label">You're currently reading page</span> 1</strong></li> <li class="item"><a href="https://amasty.com/order-management-extensions-for-magento-2.html?p=2" class="page" title="Page 2" aria-label="Page 2"><span class="label">Page</span> 2</a></li> </ul> <a class="action next" href="https://amasty.com/order-management-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">2</div> </div> </div> <div class="amshopby-filters-bottom-cms"></div> <div data-am-js="js-init"></div><div class="category-view"> <div class="category-cms"><p></p></div> <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>Order management is an important part of Magento 2 admins work since 64% of online consumers expect next-day shipping for all orders placed by 5 p.m. This makes the order processing time one of the key indicators affecting customer satisfaction. So in this category, you can find and purchase Order Management extensions for Magento 2 that help you organize admins’ work in the most convenient way for the business, speed up order management and fulfillment with magento, and increase customers’ trust in your brand. What extensions will you find here? </p> <ol> <li>Modules designed for administrators such as <a href="https://amasty.com/custom-order-number-for-magento-2.html">Custom Order Number</a>, <a href="https://amasty.com/delete-order-for-magento-2.html">Delete Order</a>, <a href="https://amasty.com/extended-order-grid-for-magento-2.html">Extended Order Grid</a>, <a href="https://amasty.com/mass-order-actions-for-magento-2.html">Mass Order Actions</a>, <a href="https://amasty.com/export-orders-for-magento-2.html">Efficient Order Export</a>, <a href="https://amasty.com/pdf-customizer-for-magento-2.html">PDF Customizer</a>, <a href="https://amasty.com/order-archive-for-magento-2.html">Order Archive</a>, <a href="https://amasty.com/order-notes-for-magento-2.html">Order Notes</a>. They help your managers be more productive and organize work according to their needs and daily tasks. Thus,<a href="https://amasty.com/extended-order-grid-for-magento-2.html"> the Extended Order Grid</a> allows you to add custom columns to the order grid and hide unnecessary information for faster management. You can replace columns by using a drag-and-drop tool, rename them, filter and search for orders sorting them by attributes, and more. </li> <li>Extensions that not only help to manage Magento 2 orders but also improve customers’ experience. For instance, according to recent surveys, 93% of customers want to stay informed and get timely updates from merchants about their orders. Our <a href="https://amasty.com/magento-2-order-status.html">Order Status</a> module will help you with this problem. And a clear return policy created with <a href="https://amasty.com/rma-for-magento-2.html">RMA </a>extensions will help you increase sales by up to 63% because of retaining customers who won’t buy without the possibility of returning defective goods. Moreover, a smooth refund system makes 70% of shoppers return to your store.</li> </ol> <p><strong>See also</strong>: Use <a href="https://amasty.com/blog/infographics-top-30-features-for-online-store/">the top 30 must-have features to</a> increase sales [infographics].</p> <p></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 filter" title="Close 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-67bf261f38962 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 Extensions"> <a class="am-filter-item-67bf261f38c56 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Featured Extensions" title="Featured 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 Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Hyva Theme Extensions"> <a class="am-filter-item-67bf261f38ec7 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Hyva Theme Extensions" title="Hyva Theme 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 Theme Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Hyva Checkout Ready"> <a class="am-filter-item-67bf261f3912c amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Hyva Checkout Ready" title="Hyva Checkout 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 Checkout Ready" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Navigation &amp; Search"> <a class="am-filter-item-67bf261f3935c amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Navigation &amp; Search" title="Navigation &amp; Search" href="https://amasty.com/usability-navigation-extensions-for-magento-2.html" > <span class="label">Navigation & 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 &amp; Search" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Catalog Management"> <a class="am-filter-item-67bf261f39524 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Catalog Management" title="Catalog 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 Management" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Checkout"> <a class="am-filter-item-67bf261f39726 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 Extensions"> <a class="am-filter-item-67bf261f39986 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Google Extensions" title="Google 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 Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Law-Based Extensions"> <a class="am-filter-item-67bf261f39b9c amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Law-Based Extensions" title="Law-Based 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 Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Shipping"> <a class="am-filter-item-67bf261f39dc9 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-67bf261f39fc5 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-67bf261f3a1a8 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" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Social Network Integrations"> <a class="am-filter-item-67bf261f3a3ce amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Social Network Integrations" title="Social Network 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 Network Integrations" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Images &amp; Media"> <a class="am-filter-item-67bf261f3a5cf amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Images &amp; Media" title="Images &amp; Media" href="https://amasty.com/images-media-extensions-for-magento-2.html" > <span class="label">Images & 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 &amp; Media" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Order Management"> <a class="am-filter-item-67bf261f3a7e8 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Order Management" title="Order 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 Management" checked /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Administration"> <a class="am-filter-item-67bf261f3a973 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 Products"> <a class="am-filter-item-67bf261f3ab99 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="B2B Products" title="B2B 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 Products" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Import &amp; Export"> <a class="am-filter-item-67bf261f3adc0 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Import &amp; Export" title="Import &amp; Export" href="https://amasty.com/import-export-extensions-for-magento-2.html" > <span class="label">Import & 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 &amp; Export" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="AI-Powered Extensions"> <a class="am-filter-item-67bf261f3afb2 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="AI-Powered Extensions" title="AI-Powered 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 Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="PWA Extensions"> <a class="am-filter-item-67bf261f3b1d9 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="PWA Extensions" title="PWA 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 Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Free Magento 2 Extensions"> <a class="am-filter-item-67bf261f3b430 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Free Magento 2 Extensions" title="Free Magento 2 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 Magento 2 Extensions" /><span class="amshopby-choice"></span> </li> <li class="item -is-expanded -filter-parent" data-label="Research Product Demand"> <a class="am-filter-item-67bf261f3b645 amshopby-filter-parent" data-am-js='filter-item-category-labelsFolding' aria-label="Research Product Demand" title="Research Product 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 Product 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-67bf261f3bb20 link " data-am-js="filter-item-default" href="https://amasty.com/order-management-extensions-for-magento-2.html?hyva_compatible=90" rel="nofollow"><span class="label">Hyva-ready storefront</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_compatible][]" value="91" type="radio" style="" class="input" /> <a class="am-filter-item-67bf261f3bc1e link " data-am-js="filter-item-default" href="https://amasty.com/order-management-extensions-for-magento-2.html?hyva_compatible=91" rel="nofollow"><span class="label">Compatible by default</span> <span class="count">16<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-67bf261f3be43 link " data-am-js="filter-item-default" href="https://amasty.com/order-management-extensions-for-magento-2.html?hyva_checkout_compatible=95" rel="nofollow"><span class="label">Hyva Checkout ready</span> <span class="count">5<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-67bf261f3bf40 link " data-am-js="filter-item-default" href="https://amasty.com/order-management-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="bmn7hc6d2ZwF62hx" /><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 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 to 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 your email address" aria-describedby="footer-newsletter-heading" ><label for="newsletter-subscribe">Email Address</label> <input name="form_key" type="hidden" value="bmn7hc6d2ZwF62hx" /></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 logo" alt="Amasty 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 & 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 have read and 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 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('cookiebar-action-allow')" class="ambar-btn-accept btn btn-secondary" data-role="action">Accept Cookies</button> <button @click.prevent="$dispatch('cookiebar-action-settings')" class="ambar-btn-settings btn btn-as-text !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_67bf261f41adc()}" 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="bmn7hc6d2ZwF62hx" /> <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 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 -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="bmn7hc6d2ZwF62hx" /> <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 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 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 Password" id="password-confirmation" placeholder="Confirm 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 Checkbox" id="amprivacy-checkbox-67bf261f43c08" class="amgdpr-checkbox" data-consent-id="1" required value="1"><label for="amprivacy-checkbox-67bf261f43c08" 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 of my personal data" id="amprivacy-checkbox-67bf261f43c26" class="amgdpr-checkbox" data-consent-id="2" value="1"><label for="amprivacy-checkbox-67bf261f43c26" 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 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 -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="bmn7hc6d2ZwF62hx" /> <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 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 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 Items" aria-label="Compare 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 Compare List" aria-label="Clear Compare List" data-post="{"action":"https:\/\/amasty.com\/catalog\/product_compare\/clear\/","data":{"uenc":"","confirmation":true,"confirmationMessage":"Are you sure you want to remove all items from your Compare Products list?"}}"><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_67bf261ed1bd5() { 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_67bf261ed1df3() { 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">— ' + window.dataForSubscriptions[typeUser][period][typeVersion] .join('</p><p class="list-item">— ') + '</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-620]": { "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":["623"]},{"id":"5","label":"Enterprise","products":["624"]},{"id":"81","label":"Magento Cloud","products":["2785"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"623":{"baseOldPrice":{"amount":229},"oldPrice":{"amount":229},"basePrice":{"amount":229},"finalPrice":{"amount":229},"tierPrices":[],"msrpPrice":{"amount":0}},"624":{"baseOldPrice":{"amount":529},"oldPrice":{"amount":529},"basePrice":{"amount":529},"finalPrice":{"amount":529},"tierPrices":[],"msrpPrice":{"amount":0}},"2785":{"baseOldPrice":{"amount":829},"oldPrice":{"amount":829},"basePrice":{"amount":829},"finalPrice":{"amount":829},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":229},"oldPrice":{"amount":229},"basePrice":{"amount":229},"finalPrice":{"amount":229}},"productId":"620","chooseText":"Choose an Option...","images":[],"index":{"623":{"135":"4"},"624":{"135":"5"},"2785":{"135":"81"}},"salable":{"135":{"4":["623"],"5":["624"],"81":["2785"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"623":"order-attributes-for-magento-2-ce","624":"order-attributes-for-magento-2-ee","2785":"order-attributes-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":"620"}, "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-620]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":229},"oldPrice":{"amount":229},"basePrice":{"amount":229},"finalPrice":{"amount":229}} } } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-option-588]": { "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":["586"]},{"id":"5","label":"Enterprise","products":["587"]},{"id":"81","label":"Magento Cloud","products":["2826"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"586":{"baseOldPrice":{"amount":149},"oldPrice":{"amount":149},"basePrice":{"amount":149},"finalPrice":{"amount":149},"tierPrices":[],"msrpPrice":{"amount":0}},"587":{"baseOldPrice":{"amount":449},"oldPrice":{"amount":449},"basePrice":{"amount":449},"finalPrice":{"amount":449},"tierPrices":[],"msrpPrice":{"amount":0}},"2826":{"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":"588","chooseText":"Choose an Option...","images":[],"index":{"586":{"135":"4"},"587":{"135":"5"},"2826":{"135":"81"}},"salable":{"135":{"4":["586"],"5":["587"],"81":["2826"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"586":"mass-order-actions-for-magento-2-ce","587":"mass-order-actions-for-magento-2-ee","2826":"mass-order-actions-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":"588"}, "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-588]": { "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"> { "[data-role=swatch-option-664]": { "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":["665"]},{"id":"5","label":"Enterprise","products":["666"]},{"id":"81","label":"Magento Cloud","products":["2933"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"665":{"baseOldPrice":{"amount":219},"oldPrice":{"amount":219},"basePrice":{"amount":219},"finalPrice":{"amount":219},"tierPrices":[],"msrpPrice":{"amount":0}},"666":{"baseOldPrice":{"amount":519},"oldPrice":{"amount":519},"basePrice":{"amount":519},"finalPrice":{"amount":519},"tierPrices":[],"msrpPrice":{"amount":0}},"2933":{"baseOldPrice":{"amount":819},"oldPrice":{"amount":819},"basePrice":{"amount":819},"finalPrice":{"amount":819},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":219},"oldPrice":{"amount":219},"basePrice":{"amount":219},"finalPrice":{"amount":219}},"productId":"664","chooseText":"Choose an Option...","images":[],"index":{"665":{"135":"4"},"666":{"135":"5"},"2933":{"135":"81"}},"salable":{"135":{"4":["665"],"5":["666"],"81":["2933"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"665":"rma-for-magento-2-ce","666":"rma-for-magento-2-ee","2933":"rma-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":"664"}, "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-664]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":219},"oldPrice":{"amount":219},"basePrice":{"amount":219},"finalPrice":{"amount":219}} } } } }</script><script type="text/x-magento-init"> { "*": { "Amasty_Preorder/js/product/preorder_list": { "jsonConfig" : {"620":{"configurable":{"entity":"620","swatchOpt":".swatch-opt-620","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"620":{"135":"Edition"}},"isAllProductsPreorder":0}},"588":{"configurable":{"entity":"588","swatchOpt":".swatch-opt-588","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"588":{"135":"Edition"}},"isAllProductsPreorder":0}},"664":{"configurable":{"entity":"664","swatchOpt":".swatch-opt-664","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"664":{"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\/32\/","handles":["default","catalog_category_view","catalog_category_view_type_layered","catalog_category_view_type_layered_without_children","catalog_category_view_displaymode_products_and_page","catalog_category_view_id_32","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_and_page","hyva_catalog_category_view_id_32","hyva_amcookiebar_popup","am_mega_menu_layout"],"originalRequest":{"route":"catalog","controller":"category","action":"view","uri":"\/order-management-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-1448]": { "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":["1449"]},{"id":"5","label":"Enterprise","products":["1450"]},{"id":"81","label":"Magento Cloud","products":["2771"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"1449":{"baseOldPrice":{"amount":699},"oldPrice":{"amount":699},"basePrice":{"amount":699},"finalPrice":{"amount":699},"tierPrices":[],"msrpPrice":{"amount":0}},"1450":{"baseOldPrice":{"amount":999},"oldPrice":{"amount":999},"basePrice":{"amount":999},"finalPrice":{"amount":999},"tierPrices":[],"msrpPrice":{"amount":0}},"2771":{"baseOldPrice":{"amount":1299},"oldPrice":{"amount":1299},"basePrice":{"amount":1299},"finalPrice":{"amount":1299},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":699},"oldPrice":{"amount":699},"basePrice":{"amount":699},"finalPrice":{"amount":699}},"productId":"1448","chooseText":"Choose an Option...","images":[],"index":{"1449":{"135":"4"},"1450":{"135":"5"},"2771":{"135":"81"}},"salable":{"135":{"4":["1449"],"5":["1450"],"81":["2771"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"1449":"import-and-export-for-magento-2-ce","1450":"import-and-export-for-magento-2-ee","2771":"import-and-export-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":"1448"}, "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-1448]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":699},"oldPrice":{"amount":699},"basePrice":{"amount":699},"finalPrice":{"amount":699}} } } } }</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-664]": { "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":["665"]},{"id":"5","label":"Enterprise","products":["666"]},{"id":"81","label":"Magento Cloud","products":["2933"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"665":{"baseOldPrice":{"amount":219},"oldPrice":{"amount":219},"basePrice":{"amount":219},"finalPrice":{"amount":219},"tierPrices":[],"msrpPrice":{"amount":0}},"666":{"baseOldPrice":{"amount":519},"oldPrice":{"amount":519},"basePrice":{"amount":519},"finalPrice":{"amount":519},"tierPrices":[],"msrpPrice":{"amount":0}},"2933":{"baseOldPrice":{"amount":819},"oldPrice":{"amount":819},"basePrice":{"amount":819},"finalPrice":{"amount":819},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":219},"oldPrice":{"amount":219},"basePrice":{"amount":219},"finalPrice":{"amount":219}},"productId":"664","chooseText":"Choose an Option...","images":[],"index":{"665":{"135":"4"},"666":{"135":"5"},"2933":{"135":"81"}},"salable":{"135":{"4":["665"],"5":["666"],"81":["2933"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"665":"rma-for-magento-2-ce","666":"rma-for-magento-2-ee","2933":"rma-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":"664"}, "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-664]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":219},"oldPrice":{"amount":219},"basePrice":{"amount":219},"finalPrice":{"amount":219}} } } } }</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-558]": { "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":["559"]},{"id":"5","label":"Enterprise","products":["560"]},{"id":"81","label":"Magento Cloud","products":["2929"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"559":{"baseOldPrice":{"amount":149},"oldPrice":{"amount":149},"basePrice":{"amount":149},"finalPrice":{"amount":149},"tierPrices":[],"msrpPrice":{"amount":0}},"560":{"baseOldPrice":{"amount":449},"oldPrice":{"amount":449},"basePrice":{"amount":449},"finalPrice":{"amount":449},"tierPrices":[],"msrpPrice":{"amount":0}},"2929":{"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":"558","chooseText":"Choose an Option...","images":[],"index":{"559":{"135":"4"},"560":{"135":"5"},"2929":{"135":"81"}},"salable":{"135":{"4":["559"],"5":["560"],"81":["2929"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"559":"custom-order-number-for-magento-2-ce","560":"custom-order-number-for-magento-2-ee","2929":"custom-order-number-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":"558"}, "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-558]": { "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-631]": { "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":["632"]},{"id":"5","label":"Enterprise","products":["633"]},{"id":"81","label":"Magento Cloud","products":["2867"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"632":{"baseOldPrice":{"amount":189},"oldPrice":{"amount":189},"basePrice":{"amount":189},"finalPrice":{"amount":189},"tierPrices":[],"msrpPrice":{"amount":0}},"633":{"baseOldPrice":{"amount":489},"oldPrice":{"amount":489},"basePrice":{"amount":489},"finalPrice":{"amount":489},"tierPrices":[],"msrpPrice":{"amount":0}},"2867":{"baseOldPrice":{"amount":789},"oldPrice":{"amount":789},"basePrice":{"amount":789},"finalPrice":{"amount":789},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":189},"oldPrice":{"amount":189},"basePrice":{"amount":189},"finalPrice":{"amount":189}},"productId":"631","chooseText":"Choose an Option...","images":[],"index":{"632":{"135":"4"},"633":{"135":"5"},"2867":{"135":"81"}},"salable":{"135":{"4":["632"],"5":["633"],"81":["2867"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"632":"pre-order-for-magento-2-ce","633":"pre-order-for-magento-2-ee","2867":"pre-order-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":"631"}, "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-631]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":189},"oldPrice":{"amount":189},"basePrice":{"amount":189},"finalPrice":{"amount":189}} } } } }</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-1369]": { "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":["1370"]},{"id":"5","label":"Enterprise","products":["1371"]},{"id":"81","label":"Magento Cloud","products":["2788"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"1370":{"baseOldPrice":{"amount":199},"oldPrice":{"amount":199},"basePrice":{"amount":199},"finalPrice":{"amount":199},"tierPrices":[],"msrpPrice":{"amount":0}},"1371":{"baseOldPrice":{"amount":499},"oldPrice":{"amount":499},"basePrice":{"amount":499},"finalPrice":{"amount":499},"tierPrices":[],"msrpPrice":{"amount":0}},"2788":{"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":"1369","chooseText":"Choose an Option...","images":[],"index":{"1370":{"135":"4"},"1371":{"135":"5"},"2788":{"135":"81"}},"salable":{"135":{"4":["1370"],"5":["1371"],"81":["2788"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"1370":"quick-order-for-magento-2-ce","1371":"quick-order-for-magento-2-ee","2788":"quick-order-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":"1369"}, "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-1369]": { "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-620]": { "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":["623"]},{"id":"5","label":"Enterprise","products":["624"]},{"id":"81","label":"Magento Cloud","products":["2785"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"623":{"baseOldPrice":{"amount":229},"oldPrice":{"amount":229},"basePrice":{"amount":229},"finalPrice":{"amount":229},"tierPrices":[],"msrpPrice":{"amount":0}},"624":{"baseOldPrice":{"amount":529},"oldPrice":{"amount":529},"basePrice":{"amount":529},"finalPrice":{"amount":529},"tierPrices":[],"msrpPrice":{"amount":0}},"2785":{"baseOldPrice":{"amount":829},"oldPrice":{"amount":829},"basePrice":{"amount":829},"finalPrice":{"amount":829},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":229},"oldPrice":{"amount":229},"basePrice":{"amount":229},"finalPrice":{"amount":229}},"productId":"620","chooseText":"Choose an Option...","images":[],"index":{"623":{"135":"4"},"624":{"135":"5"},"2785":{"135":"81"}},"salable":{"135":{"4":["623"],"5":["624"],"81":["2785"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"623":"order-attributes-for-magento-2-ce","624":"order-attributes-for-magento-2-ee","2785":"order-attributes-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":"620"}, "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-620]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":229},"oldPrice":{"amount":229},"basePrice":{"amount":229},"finalPrice":{"amount":229}} } } } }</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-588]": { "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":["586"]},{"id":"5","label":"Enterprise","products":["587"]},{"id":"81","label":"Magento Cloud","products":["2826"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"586":{"baseOldPrice":{"amount":149},"oldPrice":{"amount":149},"basePrice":{"amount":149},"finalPrice":{"amount":149},"tierPrices":[],"msrpPrice":{"amount":0}},"587":{"baseOldPrice":{"amount":449},"oldPrice":{"amount":449},"basePrice":{"amount":449},"finalPrice":{"amount":449},"tierPrices":[],"msrpPrice":{"amount":0}},"2826":{"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":"588","chooseText":"Choose an Option...","images":[],"index":{"586":{"135":"4"},"587":{"135":"5"},"2826":{"135":"81"}},"salable":{"135":{"4":["586"],"5":["587"],"81":["2826"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"586":"mass-order-actions-for-magento-2-ce","587":"mass-order-actions-for-magento-2-ee","2826":"mass-order-actions-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":"588"}, "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-588]": { "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-1660]": { "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":["1661"]},{"id":"5","label":"Enterprise","products":["1662"]},{"id":"81","label":"Magento Cloud","products":["2738"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"1661":{"baseOldPrice":{"amount":199},"oldPrice":{"amount":199},"basePrice":{"amount":199},"finalPrice":{"amount":199},"tierPrices":[],"msrpPrice":{"amount":0}},"1662":{"baseOldPrice":{"amount":499},"oldPrice":{"amount":499},"basePrice":{"amount":499},"finalPrice":{"amount":499},"tierPrices":[],"msrpPrice":{"amount":0}},"2738":{"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":"1660","chooseText":"Choose an Option...","images":[],"index":{"1661":{"135":"4"},"1662":{"135":"5"},"2738":{"135":"81"}},"salable":{"135":{"4":["1661"],"5":["1662"],"81":["2738"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"1661":"export-orders-for-magento-2-ce","1662":"export-orders-for-magento-2-ee","2738":"export-orders-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":"1660"}, "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-1660]": { "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-1546]": { "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":["1547"]},{"id":"5","label":"Enterprise","products":["1548"]},{"id":"81","label":"Magento Cloud","products":["2874"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"1547":{"baseOldPrice":{"amount":199},"oldPrice":{"amount":199},"basePrice":{"amount":199},"finalPrice":{"amount":199},"tierPrices":[],"msrpPrice":{"amount":0}},"1548":{"baseOldPrice":{"amount":499},"oldPrice":{"amount":499},"basePrice":{"amount":499},"finalPrice":{"amount":499},"tierPrices":[],"msrpPrice":{"amount":0}},"2874":{"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":"1546","chooseText":"Choose an Option...","images":[],"index":{"1547":{"135":"4"},"1548":{"135":"5"},"2874":{"135":"81"}},"salable":{"135":{"4":["1547"],"5":["1548"],"81":["2874"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"1547":"import-orders-for-magento-2-ce","1548":"import-orders-for-magento-2-ee","2874":"import-orders-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":"1546"}, "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-1546]": { "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-646]": { "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":["647"]},{"id":"5","label":"Enterprise","products":["648"]},{"id":"81","label":"Magento Cloud","products":["2829"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"647":{"baseOldPrice":{"amount":139},"oldPrice":{"amount":139},"basePrice":{"amount":139},"finalPrice":{"amount":139},"tierPrices":[],"msrpPrice":{"amount":0}},"648":{"baseOldPrice":{"amount":439},"oldPrice":{"amount":439},"basePrice":{"amount":439},"finalPrice":{"amount":439},"tierPrices":[],"msrpPrice":{"amount":0}},"2829":{"baseOldPrice":{"amount":739},"oldPrice":{"amount":739},"basePrice":{"amount":739},"finalPrice":{"amount":739},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":139},"oldPrice":{"amount":139},"basePrice":{"amount":139},"finalPrice":{"amount":139}},"productId":"646","chooseText":"Choose an Option...","images":[],"index":{"647":{"135":"4"},"648":{"135":"5"},"2829":{"135":"81"}},"salable":{"135":{"4":["647"],"5":["648"],"81":["2829"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"647":"order-status-for-magento-2-ce","648":"order-status-for-magento-2-ee","2829":"order-status-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":"646"}, "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-646]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":139},"oldPrice":{"amount":139},"basePrice":{"amount":139},"finalPrice":{"amount":139}} } } } }</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-769]": { "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":["770"]},{"id":"5","label":"Enterprise","products":["771"]},{"id":"81","label":"Magento Cloud","products":["2853"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"770":{"baseOldPrice":{"amount":159},"oldPrice":{"amount":159},"basePrice":{"amount":159},"finalPrice":{"amount":159},"tierPrices":[],"msrpPrice":{"amount":0}},"771":{"baseOldPrice":{"amount":459},"oldPrice":{"amount":459},"basePrice":{"amount":459},"finalPrice":{"amount":459},"tierPrices":[],"msrpPrice":{"amount":0}},"2853":{"baseOldPrice":{"amount":759},"oldPrice":{"amount":759},"basePrice":{"amount":759},"finalPrice":{"amount":759},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":159},"oldPrice":{"amount":159},"basePrice":{"amount":159},"finalPrice":{"amount":159}},"productId":"769","chooseText":"Choose an Option...","images":[],"index":{"770":{"135":"4"},"771":{"135":"5"},"2853":{"135":"81"}},"salable":{"135":{"4":["770"],"5":["771"],"81":["2853"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"770":"order-archive-for-magento-2-ce","771":"order-archive-for-magento-2-ee","2853":"order-archive-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":"769"}, "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-769]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":159},"oldPrice":{"amount":159},"basePrice":{"amount":159},"finalPrice":{"amount":159}} } } } }</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-655]": { "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":["656"]},{"id":"5","label":"Enterprise","products":["657"]},{"id":"81","label":"Magento Cloud","products":["2827"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"656":{"baseOldPrice":{"amount":119},"oldPrice":{"amount":119},"basePrice":{"amount":119},"finalPrice":{"amount":119},"tierPrices":[],"msrpPrice":{"amount":0}},"657":{"baseOldPrice":{"amount":419},"oldPrice":{"amount":419},"basePrice":{"amount":419},"finalPrice":{"amount":419},"tierPrices":[],"msrpPrice":{"amount":0}},"2827":{"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":"655","chooseText":"Choose an Option...","images":[],"index":{"656":{"135":"4"},"657":{"135":"5"},"2827":{"135":"81"}},"salable":{"135":{"4":["656"],"5":["657"],"81":["2827"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"656":"extended-order-grid-for-magento-2-ce","657":"extended-order-grid-for-magento-2-ee","2827":"extended-order-grid-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":"655"}, "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-655]": { "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-role=swatch-option-756]": { "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":["757"]},{"id":"5","label":"Enterprise","products":["758"]},{"id":"81","label":"Magento Cloud","products":["2907"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"757":{"baseOldPrice":{"amount":129},"oldPrice":{"amount":129},"basePrice":{"amount":129},"finalPrice":{"amount":129},"tierPrices":[],"msrpPrice":{"amount":0}},"758":{"baseOldPrice":{"amount":429},"oldPrice":{"amount":429},"basePrice":{"amount":429},"finalPrice":{"amount":429},"tierPrices":[],"msrpPrice":{"amount":0}},"2907":{"baseOldPrice":{"amount":729},"oldPrice":{"amount":729},"basePrice":{"amount":729},"finalPrice":{"amount":729},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":129},"oldPrice":{"amount":129},"basePrice":{"amount":129},"finalPrice":{"amount":129}},"productId":"756","chooseText":"Choose an Option...","images":[],"index":{"757":{"135":"4"},"758":{"135":"5"},"2907":{"135":"81"}},"salable":{"135":{"4":["757"],"5":["758"],"81":["2907"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"757":"order-flags-for-magento-2-ce","758":"order-flags-for-magento-2-ee","2907":"order-notes-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":"756"}, "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-756]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":129},"oldPrice":{"amount":129},"basePrice":{"amount":129},"finalPrice":{"amount":129}} } } } }</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-1457]": { "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":["1455"]},{"id":"5","label":"Enterprise","products":["1456"]},{"id":"81","label":"Magento Cloud","products":["2789"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"1455":{"baseOldPrice":{"amount":149},"oldPrice":{"amount":149},"basePrice":{"amount":149},"finalPrice":{"amount":149},"tierPrices":[],"msrpPrice":{"amount":0}},"1456":{"baseOldPrice":{"amount":449},"oldPrice":{"amount":449},"basePrice":{"amount":449},"finalPrice":{"amount":449},"tierPrices":[],"msrpPrice":{"amount":0}},"2789":{"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":"1457","chooseText":"Choose an Option...","images":[],"index":{"1455":{"135":"4"},"1456":{"135":"5"},"2789":{"135":"81"}},"salable":{"135":{"4":["1455"],"5":["1456"],"81":["2789"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"1455":"cancel-orders-for-magento-2-ce","1456":"cancel-orders-for-magento-2-ee","2789":"cancel-orders-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":"1457"}, "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-1457]": { "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-1601]": { "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":["1602"]},{"id":"5","label":"Enterprise","products":["1603"]},{"id":"81","label":"Magento Cloud","products":["2946"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"1602":{"baseOldPrice":{"amount":99},"oldPrice":{"amount":99},"basePrice":{"amount":99},"finalPrice":{"amount":99},"tierPrices":[],"msrpPrice":{"amount":0}},"1603":{"baseOldPrice":{"amount":199},"oldPrice":{"amount":199},"basePrice":{"amount":199},"finalPrice":{"amount":199},"tierPrices":[],"msrpPrice":{"amount":0}},"2946":{"baseOldPrice":{"amount":399},"oldPrice":{"amount":399},"basePrice":{"amount":399},"finalPrice":{"amount":399},"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":99},"finalPrice":{"amount":99}},"productId":"1601","chooseText":"Choose an Option...","images":[],"index":{"1602":{"135":"4"},"1603":{"135":"5"},"2946":{"135":"81"}},"salable":{"135":{"4":["1602"],"5":["1603"],"81":["2946"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"1602":"shipping-labels-add-on-for-rma-for-magento-2-ce","1603":"shipping-labels-add-on-for-rma-for-magento-2-ee","2946":"shipping-labels-for-rma-add-on-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":"1601"}, "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-1601]": { "priceBox": { "priceConfig": { "priceFormat": {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true}, "prices": {"baseOldPrice":{"amount":99},"oldPrice":{"amount":99},"basePrice":{"amount":99},"finalPrice":{"amount":99}} } } } }</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" : {"1448":{"configurable":{"entity":"1448","swatchOpt":".swatch-opt-1448","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"1448":{"135":"Edition"}},"isAllProductsPreorder":0}},"664":{"configurable":{"entity":"664","swatchOpt":".swatch-opt-664","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"664":{"135":"Edition"}},"isAllProductsPreorder":0}},"558":{"configurable":{"entity":"558","swatchOpt":".swatch-opt-558","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"558":{"135":"Edition"}},"isAllProductsPreorder":0}},"631":{"configurable":{"entity":"631","swatchOpt":".swatch-opt-631","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"631":{"135":"Edition"}},"isAllProductsPreorder":0}},"1369":{"configurable":{"entity":"1369","swatchOpt":".swatch-opt-1369","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"1369":{"135":"Edition"}},"isAllProductsPreorder":0}},"620":{"configurable":{"entity":"620","swatchOpt":".swatch-opt-620","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"620":{"135":"Edition"}},"isAllProductsPreorder":0}},"588":{"configurable":{"entity":"588","swatchOpt":".swatch-opt-588","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"588":{"135":"Edition"}},"isAllProductsPreorder":0}},"1660":{"configurable":{"entity":"1660","swatchOpt":".swatch-opt-1660","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"1660":{"135":"Edition"}},"isAllProductsPreorder":0}},"1546":{"configurable":{"entity":"1546","swatchOpt":".swatch-opt-1546","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"1546":{"135":"Edition"}},"isAllProductsPreorder":0}},"646":{"configurable":{"entity":"646","swatchOpt":".swatch-opt-646","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"646":{"135":"Edition"}},"isAllProductsPreorder":0}},"769":{"configurable":{"entity":"769","swatchOpt":".swatch-opt-769","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"769":{"135":"Edition"}},"isAllProductsPreorder":0}},"655":{"configurable":{"entity":"655","swatchOpt":".swatch-opt-655","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"655":{"135":"Edition"}},"isAllProductsPreorder":0}},"756":{"configurable":{"entity":"756","swatchOpt":".swatch-opt-756","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"756":{"135":"Edition"}},"isAllProductsPreorder":0}},"1457":{"configurable":{"entity":"1457","swatchOpt":".swatch-opt-1457","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"1457":{"135":"Edition"}},"isAllProductsPreorder":0}},"1601":{"configurable":{"entity":"1601","swatchOpt":".swatch-opt-1601","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"1601":{"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\u002Forder\u002Dmanagement\u002Dextensions\u002Dfor\u002Dmagento\u002D2.html", "currentCategoryId": 32, "isCategorySingleSelect": 1, "isMemorizerAllowed": 0 } } }</script><script type="text/x-magento-init"> { "[data-am-js='filter-item-default']": { "amShopbyFilterItemDefault": { "collectFilters": 0, "clearUrl": "https://amasty.com/order-management-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/order-management-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/order-management-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_67bf261f41adc() { 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\/order-management-extensions-for-magento-2.html","name":"Order Management"}}]}</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>