CINXE.COM

Magento 2 Special Price Configurable Product | Get Special Price In Magento 2

<!doctype html><html lang="en"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# product: http://ogp.me/ns/product#"> <meta charset="utf-8"/> <meta name="title" content="Magento 2 Special Price Configurable Product | Get Special Price In Magento 2"/> <meta name="description" content="Unlock exclusive deals: easily set special prices for configurable products with Magento 2 Special Price extension. Maximize savings today!"/> <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 Special Price Configurable Product | Get Special Price In Magento 2</title> <link rel="stylesheet" type="text/css" media="all" href="https://cdn.amasty.com/static/version1740558685/_cache/merged/ea0ed758deb0843f830f0e98146097db.min.css" /> <link rel="stylesheet" type="text/css" media="screen and (min-width: 320px)" href="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/css/styles.min.css" /> <link rel="stylesheet" type="text/css" media="screen and (min-width: 769px)" href="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/css/source/bundle-module/product-page/product-page-bundle-l.min.css" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/fonts/gilroy/bold/Gilroy-Bold.woff2" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/fonts/Blank-Theme-Icons/Blank-Theme-Icons.woff2" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/fonts/roboto/bold/Roboto-700.woff2" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/fonts/roboto/regular/Roboto-400.woff2" /> <link rel="icon" type="image/x-icon" href="https://cdn.amasty.com/media/favicon/stores/1/amasty_logo.png" /> <link rel="shortcut icon" type="image/x-icon" href="https://cdn.amasty.com/media/favicon/stores/1/amasty_logo.png" /> <!-- Start: SEO Health Checker --> <!--f7e98322c1f2996ae54a6b854c29c3a4--> <!-- End: SEO Health Checker --> <meta name="google-site-verification" content="mrsBMEhSCRX5SA9IdwUbGNSuWUUTTAHJ1r0K-cA0OZk" /> <!-- Some event from google tag manager call facebook pixel event. But facebook pixel init only on 'https://amasty.com/' If facebook pixel events called on stagings and local environment then errors fall into the console. Fix it. --> <script data-info="not-move-to-bottom"> (function initAmsiteAnalytics() { let initGTM = (w, d, s, l, i) => { w[l] = w[l] || []; w[l].push({'gtm.start': new Date().getTime(), event: 'gtm.js'}); let f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = `https://www.googletagmanager.com/gtm.js?id=${i}${dl}`; f.parentNode.insertBefore(j, f); }; let declareGlobalVariables = () => { window.dataLayer = window.dataLayer || []; window.gtag = function() { dataLayer.push(arguments) }; } let addGoogleAnalytics = () => { initAmsiteCookieConsent(); initGTM(window, document, 'script', 'dataLayer', 'GTM-N84742B'); } declareGlobalVariables(); window.addEventListener('init-external-scripts', () => { addGoogleAnalytics(); }); }())</script> <style> @media (min-width: 1260px) { .magezon-builder .mgz-container {width: 1260px;} } </style> <!-- Start VWO Async SmartCode --><!-- End VWO Async SmartCode --> <script data-info="not-move-to-bottom"> 'use strict'; const AmsiteUtils = function () { return { throttle(func, delay) { let lastCall = 0; return function() { let now = Date.now(); if (now - lastCall < delay) { return; } lastCall = now; return func.apply(this, arguments); } }, isCustomerLoggedIn(privateData) { return !!(privateData?.customer?.firstname); }, isMobile(breakpoint) { return window.matchMedia(breakpoint).matches; }, setAnimationToPopup(context) { const origHide = context.hide; context.hide = (...args) => { const overlay = context.$root.querySelector('.am-overlay-popup'); overlay.classList.add('-popup-closed'); origHide.call(context, args); setTimeout(() => { overlay.classList.remove('-popup-closed'); }, 400) } } } }</script> <meta property="og:type" content="product" /><meta property="og:title" content="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" /><meta property="og:image" content="https://cdn.amasty.com/media/catalog/product/cache/c69fad5054ac8a3eddb920f81914f823/s/p/special-promotions-pro-for-magento-2_64d0cf2c44caf.png" /><meta property="og:description" content="Add&#x20;our&#x20;Magento&#x20;2&#x20;Advanced&#x20;Promotions&#x20;extension&#x20;to&#x20;shape&#x20;your&#x20;discounts&#x20;with&#x20;clever&#x20;conditions.&#x20;Create&#x20;promotions&#x20;based&#x20;on&#x20;customers&#x27;&#x20;info&#x20;and&#x20;purchase&#x20;history.&#x20;Use&#x20;20&#x20;actions&#x20;to&#x20;be&#x20;sure&#x20;that&#x20;your&#x20;promotions&#x20;are&#x20;unique&#x20;and&#x20;relevant." /><meta property="og:url" content="https://amasty.com/special-promotions-pro-for-magento-2.html" /> <meta property="product:price:amount" content="319"/> <meta property="product:price:currency" content="USD"/> <style>.ng0gx7w-s{padding:0!important}.bje13wx-s{background-color:#fff0fa !important}@media screen and (min-width:1024px){.amsite-top-promotion-main-banner br{display:none}} .amsite-top-promotion-main-banner{display:block;padding:22px 0}.pbuilder-top-promo-html-version > .mgz-element-inner > .inner-content{width:100%}.nsvl04k-s{padding-right:10px !important;padding-left:10px !important}.mgz-element.nsvl04k .image-content{width:100%;text-align:center}.mgz-element.nsvl04k .image-title{font-size:16px}.w3n2nxy-s{padding-right:10px !important;padding-left:10px !important}.mgz-element.w3n2nxy .image-content{width:100%;text-align:center}.mgz-element.w3n2nxy .image-title{font-size:16px}.p7387w6-s{padding-right:10px !important;padding-left:10px !important}.mgz-element.p7387w6 .image-content{width:100%;text-align:center}.mgz-element.p7387w6 .image-title{font-size:16px}.ttk8doy-s{padding-right:10px !important;padding-left:10px !important}.mgz-element.ttk8doy .image-content{width:100%;text-align:center}.mgz-element.ttk8doy .image-title{font-size:16px}.avdevm0-s{padding-bottom:0 !important}.tap40q4-s{padding-top:0 !important;margin-top:0 !important}.wxloa8o-s{padding-top:25px !important}.f1n9a7y-s{margin-top:-25px !important}@media (max-width:768px){.f1n9a7y-s{padding-top:0 !important}}.wxloa8o>.mgz-element-inner{padding:0}.mgz-element.f1n9a7y >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.s72ror3-s{margin-top:80px !important}.r1pimrj>.mgz-element-inner{padding:0}.mgz-element.s72ror3 >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.frydgc8-s{margin-top:30px !important}@media (max-width:768px){.frydgc8-s{margin-top:50px !important}}@media (max-width:575px){.frydgc8-s{margin-top:50px !important}}.xnvw5lh>.mgz-element-inner{padding:0}.mgz-element.frydgc8 >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.ji9ritp-s{padding-bottom:5px !important;margin-bottom:0 !important}.t7ngmbj-s{padding-top:0 !important;margin-top:0 !important}.yt3n4k2-s{padding-top:45px !important}@media (max-width:768px){.yt3n4k2-s{padding-top:0 !important}}@media (max-width:575px){.yt3n4k2-s{padding-top:0 !important}}.t7ngmbj>.mgz-element-inner{padding:0}.mgz-element.yt3n4k2 >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.c9tvehx-s{padding:25px 40px 40px 40px!important}@media (max-width:575px){.c9tvehx-s{padding:30px 15px 30px 15px!important}}.i4q7058-s{border-radius:20px!important;background-color:#f0f3ff !important}@media (max-width:575px){.i4q7058-s{margin-right:0 !important;margin-left:0 !important}}.eg64v4x-s{padding:25px 40px 40px 40px!important}@media (max-width:575px){.eg64v4x-s{padding:30px 15px 30px 15px!important}}.brrpra0-s{border-radius:20px!important;background-color:#f0f3ff !important}@media (max-width:575px){.brrpra0-s{margin-right:0 !important;margin-left:0 !important}}.w77hyik-s{min-height:0 !important;padding:25px 40px 40px 40px!important}@media (max-width:575px){.w77hyik-s{padding:30px 15px 30px 15px!important}}.mg2v0u7-s{border-radius:20px!important;background-color:#f0f3ff !important}.wtsq1s7-s{min-height:0 !important;padding:25px 40px 40px 40px!important}@media (max-width:575px){.wtsq1s7-s{padding:30px 15px 30px 15px!important}}.bhibwud-s{border-radius:20px!important;background-color:#f0f3ff !important}.cl20xfj-s{min-height:0 !important;padding:25px 40px 40px 40px!important}@media (max-width:575px){.cl20xfj-s{padding:30px 15px 30px 15px!important}}.lpb42k5-s{border-radius:20px!important;background-color:#f0f3ff !important}.j3mq9to-s{padding:25px 40px 40px 40px!important}@media (max-width:575px){.j3mq9to-s{padding:30px 15px 30px 15px!important}}.j86yf5d-s{min-height:250px !important;border-radius:20px!important;background-color:#f0f3ff !important}@media (max-width:768px){.p9u2803-s{margin-right:-10px !important;margin-left:-10px !important}}.i4q7058,.brrpra0,.mg2v0u7,.bhibwud,.lpb42k5,.j86yf5d{border:10px solid transparent}.i4q7058>.mgz-element-inner,.brrpra0>.mgz-element-inner,.mg2v0u7>.mgz-element-inner,.bhibwud>.mgz-element-inner,.lpb42k5>.mgz-element-inner,.j86yf5d>.mgz-element-inner{padding:0;margin:0}.vv028ve-s{padding:25px 40px 40px 40px!important}@media (max-width:575px){.vv028ve-s{padding:30px 15px 30px 15px!important}}.sldu6js-s{border-radius:20px!important;background-color:#f0f3ff !important}@media (max-width:575px){.sldu6js-s{margin-right:0 !important;margin-left:0 !important}}@media (max-width:768px){.qkkwkht-s{margin-right:-10px !important;margin-left:-10px !important}}.sldu6js{border:10px solid transparent}.sldu6js>.mgz-element-inner{padding:0;margin:0}.u5n1qu2-s{padding-bottom:0 !important;margin-bottom:-10px !important}@media (max-width:768px){.u5n1qu2-s{padding-bottom:0 !important;margin-bottom:-25px !important}}@media (max-width:575px){.u5n1qu2-s{padding-bottom:0 !important;margin-bottom:-25px !important}}.h8oc5w9-s{padding-bottom:0 !important;margin-bottom:0 !important}@media (max-width:575px){.h8oc5w9-s{text-align:left}}.vh2b5qu-s{padding-top:0 !important;padding-bottom:0 !important;margin-top:0 !important;margin-bottom:10px !important}.umvhj3r-s{padding-bottom:0 !important;margin-bottom:0 !important}@media (max-width:575px){.umvhj3r-s{text-align:left}}.k00k8n7-s{margin-right:25px !important}@media (max-width:768px){.k00k8n7-s{margin-top:15px !important}}.mgz-element.mjnuhqk .image-content{width:100%;text-align:center}.mgz-element.mjnuhqk .image-title{font-size:16px}.popgunu-s{margin-top:15px !important;margin-left:25px !important}@media (max-width:768px){.popgunu-s{margin-left:0 !important}}.xo1nbqi-s{padding-top:0 !important;margin-top:15px !important}.k00k8n7>.mgz-element-inner,.popgunu>.mgz-element-inner{padding:0}.mgz-element.xo1nbqi >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.mgz-element.yitbcwh .image-content{width:100%;text-align:center}.mgz-element.yitbcwh .image-title{font-size:16px}.dd04bs5-s{padding-right:25px !important}@media (max-width:768px){.dd04bs5-s{padding-right:0 !important}}@media (max-width:575px){.dd04bs5-s{padding-right:0 !important}}.twk2gh3-s{padding-bottom:0 !important;margin-bottom:0 !important}@media (max-width:768px){.twk2gh3-s{padding-top:30px !important;margin-top:0 !important}}.vhkpiu1-s{padding-bottom:0 !important;margin-top:10px !important;margin-bottom:0 !important}.obh5ub9-s{padding-top:30px !important;padding-bottom:0 !important;margin-bottom:0 !important}@media (max-width:768px){.obh5ub9-s{padding-top:30px !important;margin-top:0 !important}}.plbykfm-s{padding-bottom:0 !important;margin-top:10px !important;margin-bottom:0 !important}.had7c6h-s{padding-left:25px !important}@media (max-width:768px){.had7c6h-s{padding-left:0 !important}}.n5e07nr-s{padding-top:0 !important;margin-top:-30px !important}@media (max-width:768px){.n5e07nr-s{margin-top:-25px !important}}.c9l7n28-s{margin-top:55px !important}@media (max-width:768px){.c9l7n28-s{margin-top:20px !important}}@media (max-width:575px){.c9l7n28-s{margin-top:20px !important}}.dd04bs5>.mgz-element-inner,.n5e07nr>.mgz-element-inner{padding:0}.mgz-element.c9l7n28 >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.n1cjmxh-s{padding-bottom:0 !important;margin-bottom:0 !important}@media (max-width:575px){.n1cjmxh-s{text-align:left}}.jy6w26p-s{padding-top:0 !important;padding-bottom:0 !important;margin-top:0 !important;margin-bottom:10px !important}.ual88qe-s{padding-bottom:0 !important;margin-bottom:0 !important}@media (max-width:575px){.ual88qe-s{text-align:left}}.r2n56ey-s{padding-top:0 !important;padding-bottom:0 !important;margin-top:0 !important;margin-bottom:10px !important}.rn4xn7g-s{margin-right:25px !important}@media (max-width:768px){.rn4xn7g-s{margin-top:15px !important}}.mgz-element.i51atjy .image-content{width:100%;text-align:center}.mgz-element.i51atjy .image-title{font-size:16px}.hqd8jy1-s{margin-top:15px !important;margin-left:25px !important}@media (max-width:768px){.hqd8jy1-s{margin-left:0 !important}}.r55oks8-s{margin-top:55px !important}.rn4xn7g>.mgz-element-inner,.hqd8jy1>.mgz-element-inner{padding:0}.mgz-element.r55oks8 >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.qkdoy84-s{margin-top:40px !important}@media (max-width:768px){.qkdoy84-s{margin-top:50px !important}}@media (max-width:575px){.qkdoy84-s{margin-top:50px !important}}.f6nd4jr>.mgz-element-inner{padding:0}.hevjj8b-s{padding-bottom:20px !important;margin-top:45px !important}@media (max-width:991px){.hevjj8b-s{padding-bottom:0 !important}}@media (max-width:768px){.hevjj8b-s{padding-bottom:0 !important}}@media (max-width:575px){.hevjj8b-s{padding-bottom:0 !important}}.yipxmkg>.mgz-element-inner{padding:0}.mgz-element.hevjj8b >.mgz-element-inner>.inner-content{width:720px;max-width:100%;margin:0 auto}.uqsx5p0-s{padding:25px 40px 40px 40px!important}@media (max-width:575px){.uqsx5p0-s{padding:30px 15px 30px 15px!important}}.cwa021p-s{border-radius:20px!important;background-color:#f0f3ff !important}@media (max-width:575px){.cwa021p-s{margin-right:0 !important;margin-left:0 !important}}.bb6usha-s{padding:25px 40px 40px 40px!important}@media (max-width:575px){.bb6usha-s{padding:30px 15px 30px 15px!important}}.sysun4j-s{border-radius:20px!important;background-color:#f0f3ff !important}@media (max-width:575px){.sysun4j-s{margin-right:0 !important;margin-left:0 !important}}.ampx5rd-s{min-height:0 !important;padding:25px 40px 40px 40px!important}@media (max-width:575px){.ampx5rd-s{padding:30px 15px 30px 15px!important}}.rwtxyqp-s{border-radius:20px!important;background-color:#f0f3ff !important}.ap7xplr-s{min-height:0 !important;padding:25px 40px 40px 40px!important}@media (max-width:575px){.ap7xplr-s{padding:30px 15px 30px 15px!important}}.i532c9x-s{border-radius:20px!important;background-color:#f0f3ff !important}.llb4df3-s{min-height:0 !important;padding:25px 40px 40px 40px!important}@media (max-width:575px){.llb4df3-s{padding:30px 15px 30px 15px!important}}.uisgca3-s{border-radius:20px!important;background-color:#f0f3ff !important}.ym40sj6-s{padding:25px 40px 40px 40px!important}@media (max-width:575px){.ym40sj6-s{padding:30px 15px 30px 15px!important}}.n8axobf-s{min-height:250px !important;border-radius:20px!important;background-color:#f0f3ff !important}@media (max-width:768px){.lduo47l-s{margin-right:-10px !important;margin-left:-10px !important}}.cwa021p,.sysun4j,.rwtxyqp,.i532c9x,.uisgca3,.n8axobf{border:10px solid transparent}.cwa021p>.mgz-element-inner,.sysun4j>.mgz-element-inner,.rwtxyqp>.mgz-element-inner,.i532c9x>.mgz-element-inner,.uisgca3>.mgz-element-inner,.n8axobf>.mgz-element-inner{padding:0;margin:0}.hby6wh3-s{padding-top:10px !important;padding-right:30px !important;padding-left:30px !important}.lbqh51v-s{border-radius:10px!important;background-color:#fff5c1 !important}.cdtnts1-s{padding-top:50px !important;padding-bottom:30px !important}.k0iocrb-s{padding-bottom:0 !important;margin-bottom:0 !important}.nl739em-s{text-align:center;margin-top:40px !important}@media (max-width:768px){.nl739em-s{margin-top:25px !important}}@media (max-width:575px){.nl739em-s{margin-top:25px !important}}.t5evjls{border:0 solid transparent}.t5evjls>.mgz-element-inner{padding:0;margin:0}.mgz-element.nl739em >.mgz-element-inner>.inner-content{width:700px;max-width:100%;margin:0 auto}.a4otny0-s{padding-top:25px !important;padding-right:25px !important;padding-left:25px !important;margin-bottom:0 !important}@media (max-width:575px){.a4otny0-s{padding-left:10px !important}}.eii5ykl-s{padding-left:25px !important}@media (max-width:575px){.eii5ykl-s{padding-bottom:0 !important;padding-left:10px !important;margin-bottom:0 !important}}@media (max-width:575px){.gxea0oc-s{padding-top:0 !important;margin-top:0 !important}}.gxea0oc .mgz-block-heading-line:before{height:1px;background-color:#cecece}.gxea0oc .product-item-info:hover{border-color:#bbbbbb !important}.ic87r72-s{min-height:150px !important;border-radius:10px 10px 0 0!important}.ic87r72-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/comparison-light.png');background-size:cover;background-position:center top}.asgv9we-s{padding-top:25px !important;padding-right:10px !important;padding-left:15px !important;margin-bottom:0 !important}.pdi7avq-s{margin-top:71px !important}@media (max-width:575px){.pdi7avq-s{margin-top:25px !important}}.pdi7avq .mgz-block-heading-line:before{height:1px;background-color:#cecece}.pdi7avq .product-item-info:hover{border-color:#bbbbbb !important}.viydbmn-s{padding-bottom:25px !important}@media (max-width:1199px){.viydbmn-s{padding-bottom:25px !important}}@media (max-width:991px){.viydbmn-s{padding-bottom:25px !important}}@media (max-width:768px){.viydbmn-s{padding-bottom:25px !important}}@media (max-width:575px){.viydbmn-s{padding-bottom:25px !important}}.j0dvt0b-s{padding-left:0 !important;margin-right:13px !important;margin-left:0 !important;border-radius:20px!important;background-color:#ffffff !important}@media (max-width:768px){.j0dvt0b-s{padding-right:0 !important;padding-left:0 !important;margin-right:20px !important;margin-left:20px !important}}@media (max-width:575px){.j0dvt0b-s{padding-right:0 !important;padding-left:0 !important;margin-right:0 !important;margin-left:0 !important}}.h354wn7-s{padding-top:25px !important;padding-right:25px !important;padding-left:25px !important;margin-bottom:0 !important}@media (max-width:575px){.h354wn7-s{padding-left:10px !important}}.bdjytu4-s{padding-left:25px !important}@media (max-width:575px){.bdjytu4-s{padding-bottom:0 !important;padding-left:10px !important;margin-bottom:0 !important}}.ojb826d-s{padding-bottom:0 !important;margin-bottom:0 !important}@media (max-width:575px){.ojb826d-s{padding-top:0 !important;margin-top:0 !important}}.ojb826d .mgz-block-heading-line:before{height:1px;background-color:#cecece}.ojb826d .product-item-info:hover{border-color:#bbbbbb !important}.wvw2wyv-s{min-height:150px !important;border-radius:10px 10px 0 0!important}.wvw2wyv-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/extensions/test-product-for-description-blocks/bg_2_.png');background-size:cover;background-position:center top}.iis87gk-s{padding-top:25px !important;padding-right:10px !important;padding-left:15px !important;margin-bottom:0 !important}.e3jmd0l .mgz-block-heading-line:before{height:1px;background-color:#cecece}.e3jmd0l .product-item-info:hover{border-color:#bbbbbb !important}.al4pwtt-s{padding-bottom:25px !important}@media (max-width:1199px){.al4pwtt-s{padding-bottom:25px !important}}@media (max-width:991px){.al4pwtt-s{padding-bottom:25px !important}}@media (max-width:768px){.al4pwtt-s{padding-bottom:25px !important}}@media (max-width:575px){.al4pwtt-s{padding-bottom:25px !important}}.t1nrlo1-s{padding-right:0 !important;margin-right:0 !important;margin-left:13px !important;border-radius:20px!important;background-color:#ffffff !important}@media (max-width:768px){.t1nrlo1-s{margin-right:20px !important;margin-left:20px !important}}@media (max-width:575px){.t1nrlo1-s{padding-right:0 !important;padding-left:0 !important;margin-right:0 !important;margin-left:0 !important}}.ov3kflm-s{text-align:center;padding-right:0 !important;padding-left:0 !important;margin-top:35px !important;margin-right:0 !important;margin-left:0 !important}.j0dvt0b,.t1nrlo1{border:0 solid transparent}.j0dvt0b>.mgz-element-inner,.t1nrlo1>.mgz-element-inner{padding:0;margin:0}.mgz-element.ov3kflm >.mgz-element-inner>.inner-content{width:970px;max-width:100%;margin:0 auto}.fo44qh1-s{padding-right:0 !important;padding-left:0 !important;margin-right:0 !important;margin-left:0 !important}.x1jnnnf-s{padding-top:15px !important}.fo44qh1>.mgz-element-inner{padding:0}.mgz-element.x1jnnnf >.mgz-element-inner>.inner-content{width:970px;max-width:100%;margin:0 auto}.k0dwd42-s{text-align:center;margin-right:35px !important;margin-left:35px !important}.mgz-element.k0dwd42 .image-content{width:100%;text-align:center}.mgz-element.k0dwd42 .image-title{font-size:16px}.fhqmtrv-s{border-radius:20px 20px 0 0!important;background-color:#e3e3fe !important}.cdb11lh-s{margin-top:25px !important;margin-bottom:25px !important;margin-left:32px !important}.od1aack-s{text-align:center}.pms332b-s{margin-top:25px !important;margin-bottom:25px !important}.don33qw-s{margin-top:-5px !important;border-radius:0 0 20px 20px!important;background-color:#e3e3fe !important}.gu9cj3u-s{padding-top:25px !important;margin-top:40px !important;margin-bottom:40px !important}.d6r2n1e-s{text-align:center;padding-top:25px !important;padding-bottom:0 !important;margin-bottom:-5px !important}@media (max-width:768px){.d6r2n1e-s{text-align:center}}@media (max-width:575px){.d6r2n1e-s{text-align:center}}.mgz-element.d6r2n1e .image-content{width:100%;text-align:center}.mgz-element.d6r2n1e .image-title{font-size:16px}.v1kd19v-s{padding:0 25px 0 24px!important;margin-top:0 !important;margin-bottom:0 !important}.gog7c8o-s{padding-right:25px !important;padding-bottom:35px !important;padding-left:24px !important}@media (max-width:768px){.gog7c8o-s{padding-bottom:15px !important}}.e7c6iyl-s{margin-right:10px !important;border-radius:10px!important;background-color:#f0f3ff !important}@media (max-width:575px){.e7c6iyl-s{padding-left:0 !important;margin-right:0 !important;margin-left:0 !important}}.hnv1718-s{text-align:center;padding-top:25px !important;padding-bottom:0 !important;margin-bottom:-5px !important}@media (max-width:768px){.hnv1718-s{text-align:center}}@media (max-width:575px){.hnv1718-s{text-align:center}}.mgz-element.hnv1718 .image-content{width:100%;text-align:center}.mgz-element.hnv1718 .image-title{font-size:16px}.b74n73x-s{padding:0 25px 0 24px!important;margin-top:0 !important;margin-bottom:0 !important}.qe89k03-s{padding-right:25px !important;padding-bottom:35px !important;padding-left:24px !important}@media (max-width:768px){.qe89k03-s{padding-bottom:15px !important}}.v0ps458-s{margin-right:10px !important;border-radius:10px!important;background-color:#f0f3ff !important}@media (max-width:575px){.v0ps458-s{padding-left:0 !important;margin-right:0 !important;margin-left:0 !important}}.fc9j6lc-s{margin-top:80px !important}@media (max-width:768px){.fc9j6lc-s{text-align:center;margin-top:40px !important}}.e7c6iyl,.v0ps458{border:0 solid transparent}.e7c6iyl>.mgz-element-inner,.v0ps458>.mgz-element-inner{padding:0;margin:0}.mgz-element.fc9j6lc >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.qc9qfrj-s{padding-top:0 !important;margin-top:0 !important}.ct9e5ak-s{padding-top:0 !important;margin-top:0 !important}.a9cersh-s{padding-top:50px !important}.mgz-element.a9cersh .mgz-panels-a9cersh > .mgz-panel > .mgz-panel-heading{color:#1a1a1a;background:#ffffff;border-color:#ffffff}.mgz-element.a9cersh .mgz-panels-a9cersh > .mgz-panel:not(.mgz-active):hover > .mgz-panel-heading:hover{background:#ffffff;border-color:#ffffff}.mgz-element.a9cersh .mgz-panels-a9cersh > .mgz-panel.mgz-active > .mgz-panel-heading{background:#ffffff;border-color:#ffffff}.mgz-element.a9cersh .mgz-panels-a9cersh > .mgz-panel > .mgz-panel-body{background:#ffffff;border-color:#ffffff}.pbuilder-price-center > .inner-content.mgz-container{display:flex;justify-content:center}[data-form-id="220"] + .amform-show-popup.amcform-button{background:#1787e0 !important}</style></head><body data-container="body" data-mage-init='{"loaderAjax": {}, "loader": { "icon": "https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/images/loader-2.gif"}}' id="html-body" ontouchstart="() => {}" class="amasty-jet-theme page-product-configurable amasty-mega-menu catalog-product-view product-special-promotions-pro-for-magento-2 am-tabs-view am-tabs-allow-default-edit page-layout-1-column-full-width-description"> <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 page-layout-1column amsite-full-width with-tabs"> <style>.cmsb82-block { display: block }</style> <div class="magezon-builder magezon-builder-preload"><div class="bje13wx mgz-element mgz-element-row pbuilder-top-promo-html-version full_width_row"><div class="mgz-element-inner bje13wx-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax bje13wx-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="ng0gx7w mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner ng0gx7w-s"><div class="bawcb2q mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner bawcb2q-s"><p style="text-align: center;"><a class="amsite-top-promotion-main-banner" title="Go to Special Offers page" href="/amasty-promo.html" data-promo-id="banner_product_pages" data-promo-name="Banner at product pages" data-promo-creative="so_feb25_product_pages"><span style="color: #012644;">Heart to cart ❤️ Enjoy exceptional <strong>Valentine’s Day gifts!</strong> →</span></a></p></div></div></div></div></div></div></div></div><header id="ammenu-header-container" class="ammenu-header-container page-header group"> <div id="header" class="relative max-lg:mb-6 z-30 w-full shadow-md bg-container-white lg:shadow-real-none" x-data="initHeader()" @private-content-loaded.window="getData(event.detail.data)" ><div class="flex flex-wrap lg:flex-nowrap lg:gap-12 2xl:gap-24 max-lg:max-h-[70px] max-w-[1920px] items-center justify-between w-full px-7 py-4 lg:pb-3 lg:pt-9 2xl:px-20 lg:px-7 md:px-5 max-xs:px-6 mx-auto"><!-- Mega menu toggle --> <!-- ko scope: 'index = ammenu_hamburger_toggle' --><!-- ko if: $data.source.isMobile() || false --><span data-ammenu-js="menu-toggle" class="ammenu-menu-toggle -hamburger" title="Toggling menu" aria-controls="ammenu-sidebar" aria-haspopup="menu" data-bind=" style: { color: color_settings.hamburger_icon_color }, event: { click: toggling }, attr: { 'aria-expanded': isOpen().toString(), 'aria-hidden': $data.source.isMobile() ? 'true' : 'false' }, css: { '-active': isOpen() }"><span class="ammenu-icon"></span> <span class="ammenu-icon"></span> <span class="ammenu-icon"></span></span> <!-- /ko --><!-- /ko --> <!--Logo--> <a class="logo flex max-w-[130px] max-xs:max-w-[119px] lg:max-w-fit lg:w-[inherit]" href="https://amasty.com/" title="" aria-label="store logo"><img src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/images/logo.svg" title="" alt="" class="lazy logo-image" width="158" height="40" /></a> <!--Logo--> <!-- Search wrapper --> <div class="main-form-wrapper lg:mt-0 hidden" :class="{ '-active': showOverlay, 'container': !config.isFullScreenMode, 'lg:!block relative w-full order-1 lg:order-[inherit] z-20 mt-4': true, 'max-w-none px-0': isHyvaUiHeader() && isFullWidthSearch, 'px-0': isHyvaUiHeader() && isHorizontalView }" x-data="Object.assign( {amXsearchCarouselComponent}, amXsearchProductsComponent(), amXsearchAutocompleteComponent(), amXsearchAutocompleteHyvaUIHeaderCompat(), )" x-cloak x-init="dynamicLayout($el)"><div x-show="showOverlay" class="max-lg:hidden am-overlay-popup z-20" @click.prevent="closeSearch()" @keydown.window.escape="closeSearch()"></div><div class="form mini-search z-20 relative -mx-[30px] lg:mx-0" :class="{ 'right-0': !isHyvaUiHeader(), 'md:flex md:justify-center': checkHyvaUiHeaderVariant('c') && !isDefaultSearchInput && !isFullWidthSearch }" ><form id="search_mini_form" @submit.prevent="redirect()" action="https://amasty.com/catalogsearch/result/?q=" :class="{ 'w-full absolute right-0': checkHyvaUiHeaderVariant('a') && !isDefaultSearchInput && !isFullWidthSearch, 'justify-end': !checkHyvaUiHeaderVariant('c') }" class="flex" method="GET"><label class="hidden" for="search" data-role="mini-search-label"><span>Search</span></label> <div class="w-full flex align-center justify-center" :style="`max-width: ${!isDefaultSearchInput && !isFullWidthSearch ? searchPopupWidth + 'px' : '100%'}`"><button class="btn-icon absolute z-[21] top-4 left-6 inline-block no-underline hover:text-black lg:right-5 lg:top-2" type="submit" :class="showOverlay || isLoading ? 'lg:right-auto lg:left-4' : 'lg:left-auto'" :disabled="!isProductsShown" aria-label="Open&#x20;search&#x20;page" x-ref="openSearchPageResult" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" class="p-1" aria-hidden="true"> <g id="heroicons-outline/magnifying-glass"> <path id="Vector" d="M21 21L15.8033 15.8033M15.8033 15.8033C17.1605 14.4461 18 12.5711 18 10.5C18 6.35786 14.6421 3 10.5 3C6.35786 3 3 6.35786 3 10.5C3 14.6421 6.35786 18 10.5 18C12.5711 18 14.4461 17.1605 15.8033 15.8033Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> </svg> </button> <input id="search" x-ref="searchInput" maxlength="128" form="search_mini_form" type="search" name="q" autocomplete="off" placeholder="What&#x20;are&#x20;you&#x20;looking&#x20;for&#x3F;" class="!py-4 !px-16 transition appearance-none relative z-20 !h-auto focus:outline-none focus:!border-primary !placeholder-gray-600 focus:!placeholder-transparent lg:!h-10 lg:!px-5 lg:!py-[10px] lg:!rounded-3xl transition-[all]" :class="{ 'lg:!pl-12 lg:!pr-16 lg:!rounded-bl-none lg:!rounded-br-none lg:!bg-container': showOverlay, 'lg:!bg-container-lighter': !showOverlay, 'rounded-tl': isHyvaUiHeader(), 'rounded-tr': !'' && isHyvaUiHeader() }" :style="`width: ${checkHyvaUiHeaderVariant('c') && !isDefaultSearchInput && !isFullWidthSearch ? searchPopupWidth + 'px' : '100%'}`" @focus="doSearch()" @search="checkSearchInput()" @input.debounce.500="doSearch()" x-intersect:enter.once="applyHyvaUiHeaderConfig()" @keydown.arrow-down.prevent="focusElement($el.querySelector('[tabindex]'))"/><button type="button" x-show="showOverlay && !isLoading" class="am-close-popup z-[21] top-4 right-6 lg:top-2 text-secondary hover:text-primary" aria-label="Close&#x20;search" x-on:click="closeSearch(); $refs.searchInput.value = ''" ><svg xmlns="http://www.w3.org/2000/svg" stroke="currentColor" viewBox="0 0 24 24" class="stroke-[1.5]" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <div x-show="isLoading" class="absolute z-[21] top-4 right-6 lg:top-2"><img alt="" src="data:image/gif;base64,R0lGODlhEAALAPQAAP///wAAANra2tDQ0Orq6gYGBgAAAC4uLoKCgmBgYLq6uiIiIkpKSoqKimRkZL6+viYmJgQEBE5OTubm5tjY2PT09Dg4ONzc3PLy8ra2tqCgoMrKyu7u7gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA" /></div></div></form><template x-if="searchInitialized"><div class="w-full top-15 bg-white max-h-[90vh] h-screen lg:h-auto lg:rounded-b-3xl overflow-auto text-sm amsearch-container lg:border lg:border-primary lg:border-t-0" :class="{ 'absolute': !config.isFullScreenMode || isHyvaUiHeader(), 'rounded-br rounded-bl': isHyvaUiHeader(), 'right-0': !checkHyvaUiHeaderVariant('c'), 'top-12': checkHyvaUiHeaderVariant('c') && !isHorizontalView, 'top-14': checkHyvaUiHeaderVariant('a') && isHorizontalView }" tabindex="-1" x-cloak :style="`${!isDefaultSearchInput && !isFullWidthSearch ? 'max-width:' + searchPopupWidth + 'px' : ''}; ${!isHorizontalView && checkHyvaUiHeaderVariant('a') ? 'top: 44px; margin-top: 1px;' : ''}`" x-show="!isLoading && showOverlay"><div class="flex w-full content-start flex-wrap box-border relative" :class="{ 'flex-col': isHorizontalView, 'flex-col md:flex-row': !isHorizontalView, }"><div class="md:flex w-full md:border-r px-6 py-5 md:px-7 md:py-6 am-search-sidebar" :class="{ 'border-gray-600 md:hidden': showSideBar(), 'hidden': latestQuery.length < minSearchLength && ( !showOnFirstClick('recentSearches') && !showOnFirstClick('popularSearches') && !showOnFirstClick('browsingHistory') ) || isSidebarSectionsDisabled(), 'am-search-horizontal-view': isHorizontalView, }" x-show="!noResultsFound" > <template x-if=" sections?.blog?.items?.length"><div class="md:w-full" x-show="showHandler('blog')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.blog.title"></h3><div><template x-for="(item, index) in sections.blog.items" :key="index"><div><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="window.BASE_URL + item.url"><span x-html="item.title" class="font-semibold"></span></a> <span class="text-black block mt-1 px-4 block" x-html="item.description"></span></div></template></div></div></div></template> <template x-if=" sections?.faq?.items?.length"><div class="md:w-full" x-show="showHandler('faq')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.faq.title"></h3><template x-for="(item, index) in sections.faq.items" :key="index"><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="window.BASE_URL + item.url" x-html="item.name"></a></template></div></div></template> <template x-if=" sections?.brand?.items?.length"><div class="md:w-full" x-show="showHandler('brand')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.brand.title"></h3><template x-for="(item, index) in sections.brand.items" :key="index"><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="`${BASE_URL + item.url}`" x-html="item.name"></a></template></div></div></template> <template x-if=" sections?.landingPage?.items?.length"><div class="md:w-full" x-show="showHandler('landingPage')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.landingPage.title"></h3><template x-for="(item, index) in sections.landingPage.items" :key="index"><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="window.BASE_URL + item.url" x-html="item.title"></a></template></div></div></template> <template x-if="isHorizontalView &amp;&amp; !noResultsFound &amp;&amp; sections?.products?.items?.length"><div class="md:w-full" x-show="showHandler('products')" x-cloak> <div class="w-full pb-20 md:pb-0 md:pt-5 md:px-7 lg:px-5"><div class="relative flex flex-wrap w-full group" :class="{'without-see-more': sections.products.items?.length === 1}" ><template x-for="(product, index) in (sections.products.items || [])" :key="index"> <div class="flex w-full mb-5 pb-5 border-b group-[.without-see-more]:border-0 group-[.without-see-more]:mb-0 group-[.without-see-more]:pb-0"><div class="hidden md:!block md:pr-5"><a :href="getProductUrl(product)" class="flex justify-center align-center w-[111px] h-[111px] p-3 bg-indigo-100 rounded leading-4" x-ref="amLabelParent" ><img class="lazy hover:shadow-sm object-contain min-w-52" :src="getProductImageUrl(product)" :alt="product.small_image.label" x-ref="amLabelImgParent" width="111" height="111" /> <template x-if="product.product_label?.length > 0"><div class="flex absolute flex-col" style="gap:7px" x-ref="amLabelWrapper"><template x-for="label in product.product_label"><div :class="`amlabel-position-wrapper relative max-w-full h-fit-content w-fit-content flex gap-amlabel-margin z-20${elementStyle}${amLabelStyle}`" :style="`order: ${label.priority}`" x-data="{...initAmlabel_67bef4ab25d93(), parentContainerProcessor: initParentContainerProcessor(), labelItemProcessor: initLabelItemProcessor()}" x-init="initLabel($el)" x-intersect.once="render()" x-ref="amLabelElement" :data-position="label.frontend_settings.position" :data-size="label.frontend_settings.image_size" :data-wrapper-class="`amlabel-position-${label.frontend_settings.position}-${product.id}-cat`" ><div x-ref="amLabel" x-cloak x-show="initialized" x-transition:enter="transition ease-out duration-250" x-transition:enter-start="opacity-0 transform scale-90" x-transition:enter-end="opacity-100 transform scale-100" @click.prevent="labelRedirect(label.frontend_settings.redirect_url)" :class="`group relative amasty-label-container amasty-label-for-${product.id} amasty-label-container-${label.label_id}-${product.id}-cat`" :style="label.frontend_settings.style" :data-amlabel-order="label.priority" :aria-describedby="'label-tooltip-' + label.label_id"><template x-if="label.tooltip.content?.length > 0"><div :id="'label-tooltip-' + label.label_id" x-ref="tooltip" class="absolute -top-full invisible opacity-0 transition-opacity -translate-x-1/2 text-center rounded z-[-1] w-max max-w-[200px] mb-3 group-hover:z-30 shadow-md px-5 py-2 group-hover:visible group-hover:opacity-100 after:absolute after:border-color-inherit after:top-[calc(100%-theme(space.1))] after:left-1/2 after:-translate-x-1/2 after:border-4 after:rotate-45" :style="`background-color: ${label.tooltip.background_color}; border-color: ${label.tooltip.background_color}`" role="tooltip"><span :style="`color: ${label.tooltip.color}`" x-html="label.tooltip.content"></span></div></template><template x-if="label.frontend_settings.label_text"><div class="amlabel-text text-center whitespace-nowrap" :class="{'absolute left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2': label.frontend_settings.image}" x-text="label.frontend_settings.label_text" :style="label.frontend_settings.style"></div></template><template x-if="label.frontend_settings.image"><img :id="`amasty-label-image-${label.label_id}-${product.id}-cat`" class="lazy amasty-label-image opacity-100 align-top h-full" :src="getImgLabelPath(label.frontend_settings.image)" :title="label.frontend_settings.alt_tag" :width="getImageSize()" :alt="label.frontend_settings.alt_tag" /></template></div></div></template></div></template> </a> <template x-if="config.isProductReviewsBlockEnabled"> <template x-if="product.rating_summary !== 0"><div class="mt-1"><div class="flex flex-col"><div class="flex gap-x-2 items-center"><span class="am-text-small font-bold" x-text="product.ratingData.averageRating"></span> <div class="flex"><template x-for="starFilled in product.ratingData.starsFilled"><svg xmlns="http://www.w3.org/2000/svg" class="fill-current w-4 h-4" viewBox="3 0 20 20" :style="`color: ${product.ratingData.yellowHex}`" fill="currentColor"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg></template><template x-if="product.ratingData.starFragment > 0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="3 0 20 20" fill="currentColor" class="w-4 h-4"><defs><linearGradient :id="'partialFill' + product.id"><stop offset="0%" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.ratingData.starFragment * 100 + '%'" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.ratingData.starFragment * 100 + '%'" :stop-color="product.ratingData.greyHex"/><stop offset="100%" :stop-color="product.ratingData.greyHex"/></linearGradient></defs><g :fill="'url(#partialFill' + product.id + ')'"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg></template><template x-for="starEmpty in product.ratingData.starsEmpty"><svg xmlns="http://www.w3.org/2000/svg" class="fill-current w-4 h-4" :style="`color: ${product.ratingData.greyHex}`" viewBox="3 0 20 20" fill="currentColor"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" /></svg></template></div></div><template x-if="product.rating_summary > 0"><a :href="`${getProductUrl(product)}#reviews`" class="am-text-small"><span class="text-sm" x-html="product.reviews_count"></span> reviews</a></template></div></div></template></template></div><div class="product-info flex flex-col grow"><div class="relative items-center justify-center text-primary text-lg pb-2"><a class="link-as-text font-bold amsearch-product-name block text-lg leading-6" x-html="product.name" :href="getProductUrl(product)" :class="{'pr-12': product.hyva_compatible}" ></a> <img x-show="product.hyva_compatible" class="lazy amsite-ignore-lazy-load absolute right-0 -top-5" src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva&#x20;compatibility"></div><div class="am-text-small" x-html="truncateWithDots(product.short_description.html, config.shortDescriptionLength)" ></div><div class="pt-2 flex items-center gap-3"><!-- ordinary m2 product --><template x-if="config.isProductAddToCartBlockEnabled && product.is_salable && !isService(product) && !isCalcurates(product)"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span x-show="isM1(product)" class="type">M1</span> <span x-show="!isM1(product)" class="type">M2</span> <span class="price-wrapper text-white"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span></span></a></template><!-- when m2 product has m1 product --><template x-if="product.opposite_product_data && product.opposite_product_data.is_salable && !isService(product)"><a :href="getProductUrl(product.opposite_product_data)" class="btn btn-primary !px-4 !py-2 !bg-transparent hover:!bg-orange-50 text-primary hover:!text-primary border border-orange-500 leading-4 tracking-basePx min-w-[92px]" ><span x-show="isM1(product.opposite_product_data)" class="type">M1</span> <span x-show="!isM1(product.opposite_product_data)" class="type">M2</span> <span class="price-wrapper text-primary"><span class="price" x-html="hyva.formatPrice(product.opposite_product_data.price_range.minimum_price.final_price.value, false, {maximumFractionDigits: 0})"></span></span></a></template><!-- service without price --><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable_service && isService(product)"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" >See details</a></template><!-- service with price --><template x-if="config.isProductAddToCartBlockEnabled && isService(product) && product.is_salable_service"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span class="price-wrapper text-white"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span></span></a></template><!-- calcurates and Saas --><template x-if="config.isProductAddToCartBlockEnabled && product.is_salable && (isCalcurates(product) || isSaas(product))"><a :href="getProductUrl(product)" class="btn btn-primary flex gap-2 !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" >From <span class="price-wrapper text-white flex"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span>/Month</span></a></template><!-- revising demand --><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable && (isRevisingDemand(product) || isRequestQuote(product))"><a :href="getProductUrl(product)" class="btn btn-primary flex gap-2 !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span class="price-wrapper text-white flex"><span class="amsite-stock-status" x-html="product.custom_stock_status"></span></span></a></template><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable && (!isRevisingDemand(product) && !isRequestQuote(product))"><div class="w-auto justify-center text-sm text-left"><span class="inline-block w-3 h-3 bg-red-500 rounded-full flex-shrink-0"></span> <span class="text-sm text-gray-700 text-left">Out of stock</span></div></template></div></div></div></template></div><div class="pb-6 text-center"><div class="am-search-view-all" x-show="getResultProductsCount() >= 1"><a :href="resultPageUrl + latestQuery" class="link-as-text am-text-small uppercase font-bold">More results <span x-show="getResultProductsCount() > 0">(<span x-text="sections.products.total_count"></span>)</span></a></div></div></div></div></template> <template x-if=" sections?.page?.items?.length"><div class="md:w-full" x-show="showHandler('page')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.page.title"></h3><template x-for="(item, index) in sections.page.items" :key="index"><div><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="`${BASE_URL + item.url}`"><span x-html="item.title" class="font-semibold"></span></a> <span class="text-black block mt-1 px-4 block" x-html="item.description"></span></div></template></div></div></template> <template x-if=" sections?.recentSearches?.items?.length"><div class="md:w-full" x-show="showHandler('recentSearches')" x-cloak> <div class="w-full mb-4 am-search-item-list"><span class="block am-text-caption font-bold uppercase mb-2" x-text="sections.recentSearches.title"></span> <div><template x-for="(searchItem, index) in sections.recentSearches.items" :key="index"><a class="block mb-2 last:mb-0 text-secondary hover:text-primary am-text-small" :href="resultPageUrl + searchItem.name.toLowerCase().replace(/<[^>]*>?/gm, '')" x-html="searchItem.name"></a></template></div></div></div></template> <template x-if=" sections?.category?.items?.length"><div class="md:w-full" x-show="showHandler('category')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.category.title"></h3><template x-for="(item, index) in sections.category.items" :key="index"><div><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="window.BASE_URL + item.url"><span x-html="item.name" class="font-semibold"></span></a> <span class="text-black block mt-1 px-4 block" x-html="item.description" x-show="item.description"></span></div></template></div></div></template> <template x-if=" sections?.popularSearches?.items?.length"><div class="md:w-full" x-show="showHandler('popularSearches')" x-cloak> <div class="w-full mb-4 am-search-item-list"><span class="block am-text-caption font-bold uppercase mb-2" x-text="sections.popularSearches.title"></span> <div><template x-for="(searchItem, index) in sections.popularSearches.items" :key="index"><a class="block mb-2 last:mb-0 text-secondary hover:text-primary am-text-small" :href="resultPageUrl + searchItem.name.toLowerCase().replace(/<[^>]*>?/gm, '')" x-html="searchItem.name"></a></template></div></div></div></template> <template x-if=" sections?.browsingHistory?.items?.length"><div class="md:w-full" x-show="showHandler('browsingHistory')" x-cloak> <div class="w-full mb-4 am-search-item-list"><span class="block am-text-caption font-bold uppercase mb-2" x-text="sections.browsingHistory.title"></span> <div><template x-for="(searchItem, index) in sections.browsingHistory.items" :key="index"><a class="block mb-2 last:mb-0 text-secondary hover:text-primary am-text-small" :href="resultPageUrl + searchItem.name.toLowerCase().replace(/<[^>]*>?/gm, '')" x-html="searchItem.name"></a></template></div></div></div></template></div><div class="relative" :class="{ 'am-search-content': latestQuery.length >= minSearchLength || ( showOnFirstClick('recentSearches') || showOnFirstClick('popularSearches') || showOnFirstClick('browsingHistory') ), 'w-full': latestQuery.length < minSearchLength && ( !showOnFirstClick('recentSearches') && !showOnFirstClick('popularSearches') && !showOnFirstClick('browsingHistory') ), 'am-search-horizontal-view': isHorizontalView, 'am-search-sidebar-disabled': isSidebarSectionsDisabled(), }"><div class="flex flex-nowrap flex-col" x-show="latestQuery.length < minSearchLength" x-cloak> </div><template x-if="!noResultsFound && !isHorizontalView && latestQuery.length >= minSearchLength"> <div class="w-full pb-20 md:pb-0 md:pt-5 md:px-7 lg:px-5"><div class="relative flex flex-wrap w-full group" :class="{'without-see-more': sections.products.items?.length === 1}" ><template x-for="(product, index) in (sections.products.items || [])" :key="index"> <div class="flex w-full mb-5 pb-5 border-b group-[.without-see-more]:border-0 group-[.without-see-more]:mb-0 group-[.without-see-more]:pb-0"><div class="hidden md:!block md:pr-5"><a :href="getProductUrl(product)" class="flex justify-center align-center w-[111px] h-[111px] p-3 bg-indigo-100 rounded leading-4" x-ref="amLabelParent" ><img class="lazy hover:shadow-sm object-contain min-w-52" :src="getProductImageUrl(product)" :alt="product.small_image.label" x-ref="amLabelImgParent" width="111" height="111" /> <template x-if="product.product_label?.length > 0"><div class="flex absolute flex-col" style="gap:7px" x-ref="amLabelWrapper"><template x-for="label in product.product_label"><div :class="`amlabel-position-wrapper relative max-w-full h-fit-content w-fit-content flex gap-amlabel-margin z-20${elementStyle}${amLabelStyle}`" :style="`order: ${label.priority}`" x-data="{...initAmlabel_67bef4ab25f87(), parentContainerProcessor: initParentContainerProcessor(), labelItemProcessor: initLabelItemProcessor()}" x-init="initLabel($el)" x-intersect.once="render()" x-ref="amLabelElement" :data-position="label.frontend_settings.position" :data-size="label.frontend_settings.image_size" :data-wrapper-class="`amlabel-position-${label.frontend_settings.position}-${product.id}-cat`" ><div x-ref="amLabel" x-cloak x-show="initialized" x-transition:enter="transition ease-out duration-250" x-transition:enter-start="opacity-0 transform scale-90" x-transition:enter-end="opacity-100 transform scale-100" @click.prevent="labelRedirect(label.frontend_settings.redirect_url)" :class="`group relative amasty-label-container amasty-label-for-${product.id} amasty-label-container-${label.label_id}-${product.id}-cat`" :style="label.frontend_settings.style" :data-amlabel-order="label.priority" :aria-describedby="'label-tooltip-' + label.label_id"><template x-if="label.tooltip.content?.length > 0"><div :id="'label-tooltip-' + label.label_id" x-ref="tooltip" class="absolute -top-full invisible opacity-0 transition-opacity -translate-x-1/2 text-center rounded z-[-1] w-max max-w-[200px] mb-3 group-hover:z-30 shadow-md px-5 py-2 group-hover:visible group-hover:opacity-100 after:absolute after:border-color-inherit after:top-[calc(100%-theme(space.1))] after:left-1/2 after:-translate-x-1/2 after:border-4 after:rotate-45" :style="`background-color: ${label.tooltip.background_color}; border-color: ${label.tooltip.background_color}`" role="tooltip"><span :style="`color: ${label.tooltip.color}`" x-html="label.tooltip.content"></span></div></template><template x-if="label.frontend_settings.label_text"><div class="amlabel-text text-center whitespace-nowrap" :class="{'absolute left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2': label.frontend_settings.image}" x-text="label.frontend_settings.label_text" :style="label.frontend_settings.style"></div></template><template x-if="label.frontend_settings.image"><img :id="`amasty-label-image-${label.label_id}-${product.id}-cat`" class="lazy amasty-label-image opacity-100 align-top h-full" :src="getImgLabelPath(label.frontend_settings.image)" :title="label.frontend_settings.alt_tag" :width="getImageSize()" :alt="label.frontend_settings.alt_tag" /></template></div></div></template></div></template> </a> <template x-if="config.isProductReviewsBlockEnabled"> <template x-if="product.rating_summary !== 0"><div class="mt-1"><div class="flex flex-col"><div class="flex gap-x-2 items-center"><span class="am-text-small font-bold" x-text="product.ratingData.averageRating"></span> <div class="flex"><template x-for="starFilled in product.ratingData.starsFilled"><svg xmlns="http://www.w3.org/2000/svg" class="fill-current w-4 h-4" viewBox="3 0 20 20" :style="`color: ${product.ratingData.yellowHex}`" fill="currentColor"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg></template><template x-if="product.ratingData.starFragment > 0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="3 0 20 20" fill="currentColor" class="w-4 h-4"><defs><linearGradient :id="'partialFill' + product.id"><stop offset="0%" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.ratingData.starFragment * 100 + '%'" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.ratingData.starFragment * 100 + '%'" :stop-color="product.ratingData.greyHex"/><stop offset="100%" :stop-color="product.ratingData.greyHex"/></linearGradient></defs><g :fill="'url(#partialFill' + product.id + ')'"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg></template><template x-for="starEmpty in product.ratingData.starsEmpty"><svg xmlns="http://www.w3.org/2000/svg" class="fill-current w-4 h-4" :style="`color: ${product.ratingData.greyHex}`" viewBox="3 0 20 20" fill="currentColor"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" /></svg></template></div></div><template x-if="product.rating_summary > 0"><a :href="`${getProductUrl(product)}#reviews`" class="am-text-small"><span class="text-sm" x-html="product.reviews_count"></span> reviews</a></template></div></div></template></template></div><div class="product-info flex flex-col grow"><div class="relative items-center justify-center text-primary text-lg pb-2"><a class="link-as-text font-bold amsearch-product-name block text-lg leading-6" x-html="product.name" :href="getProductUrl(product)" :class="{'pr-12': product.hyva_compatible}" ></a> <img x-show="product.hyva_compatible" class="lazy amsite-ignore-lazy-load absolute right-0 -top-5" src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva&#x20;compatibility"></div><div class="am-text-small" x-html="truncateWithDots(product.short_description.html, config.shortDescriptionLength)" ></div><div class="pt-2 flex items-center gap-3"><!-- ordinary m2 product --><template x-if="config.isProductAddToCartBlockEnabled && product.is_salable && !isService(product) && !isCalcurates(product)"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span x-show="isM1(product)" class="type">M1</span> <span x-show="!isM1(product)" class="type">M2</span> <span class="price-wrapper text-white"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span></span></a></template><!-- when m2 product has m1 product --><template x-if="product.opposite_product_data && product.opposite_product_data.is_salable && !isService(product)"><a :href="getProductUrl(product.opposite_product_data)" class="btn btn-primary !px-4 !py-2 !bg-transparent hover:!bg-orange-50 text-primary hover:!text-primary border border-orange-500 leading-4 tracking-basePx min-w-[92px]" ><span x-show="isM1(product.opposite_product_data)" class="type">M1</span> <span x-show="!isM1(product.opposite_product_data)" class="type">M2</span> <span class="price-wrapper text-primary"><span class="price" x-html="hyva.formatPrice(product.opposite_product_data.price_range.minimum_price.final_price.value, false, {maximumFractionDigits: 0})"></span></span></a></template><!-- service without price --><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable_service && isService(product)"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" >See details</a></template><!-- service with price --><template x-if="config.isProductAddToCartBlockEnabled && isService(product) && product.is_salable_service"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span class="price-wrapper text-white"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span></span></a></template><!-- calcurates and Saas --><template x-if="config.isProductAddToCartBlockEnabled && product.is_salable && (isCalcurates(product) || isSaas(product))"><a :href="getProductUrl(product)" class="btn btn-primary flex gap-2 !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" >From <span class="price-wrapper text-white flex"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span>/Month</span></a></template><!-- revising demand --><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable && (isRevisingDemand(product) || isRequestQuote(product))"><a :href="getProductUrl(product)" class="btn btn-primary flex gap-2 !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span class="price-wrapper text-white flex"><span class="amsite-stock-status" x-html="product.custom_stock_status"></span></span></a></template><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable && (!isRevisingDemand(product) && !isRequestQuote(product))"><div class="w-auto justify-center text-sm text-left"><span class="inline-block w-3 h-3 bg-red-500 rounded-full flex-shrink-0"></span> <span class="text-sm text-gray-700 text-left">Out of stock</span></div></template></div></div></div></template></div><div class="pb-6 text-center"><div class="am-search-view-all" x-show="getResultProductsCount() >= 1"><a :href="resultPageUrl + latestQuery" class="link-as-text am-text-small uppercase font-bold">More results <span x-show="getResultProductsCount() > 0">(<span x-text="sections.products.total_count"></span>)</span></a></div></div></div></template><div class="px-6 py-5" x-show="noResultsFound && !errorMessage" x-cloak><div class="am-text-small text-secondary" x-html="'Your search returned no results'"</div></div><div class="p-4 box-border w-full h-full flex" x-show="noResultsFound && errorMessage" x-cloak><div class="text-center flex align-center w-full text-xl justify-center content-center flex-row bg-gray-100 items-center flex-wrap h-full max-h-[90vh] word-break" x-html="errorMessage"></div></div></div></div></div></template></div></div> <div class="flex items-center header-icons-container group-[.page-header.-sticky]:lg:fixed group-[.page-header.-sticky]:lg:top-6 group-[.page-header.-sticky]:lg:right-8 group-[.page-header.-sticky]:2xl:right-20"><!-- Authorization link --> <nav class="am-authorization-link hidden lg:!block" aria-labelledby="customer-menu" ><a href="https://amasty.com/customer/account/index/" class="flex p-1 text-primary hover:text-primary hover:bg-gray-50" aria-label="Log&#x20;in" ><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="mr-1" role="img"> <g id="heroicons-outline/user-circle"> <path id="Vector_2" d="M17.9815 18.7248C16.6121 16.9175 14.4424 15.75 12 15.75C9.55761 15.75 7.38789 16.9175 6.01846 18.7248M17.9815 18.7248C19.8335 17.0763 21 14.6744 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 14.6744 4.1665 17.0763 6.01846 18.7248M17.9815 18.7248C16.3915 20.1401 14.2962 21 12 21C9.70383 21 7.60851 20.1401 6.01846 18.7248M15 9.75C15 11.4069 13.6569 12.75 12 12.75C10.3431 12.75 9 11.4069 9 9.75C9 8.09315 10.3431 6.75 12 6.75C13.6569 6.75 15 8.09315 15 9.75Z" stroke="#030712" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>user-circle</title></svg> <span class="whitespace-nowrap">Log in</span></a></nav> <!--Search Icon--><button id="menu-search-icon" class="btn-icon inline-block ml-1 no-underline sm:ml-3 hover:text-black lg:hidden group-[.page-header.-sticky]:lg:block" @click.prevent="searchOpen = !searchOpen;" aria-label="Toggle&#x20;search&#x20;form" x-on:set-search-open-status.window="searchOpen = event.detail" aria-haspopup="true" :aria-expanded="searchOpen" x-ref="searchButton" ><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="p-1" aria-hidden="true"> <g id="heroicons-outline/magnifying-glass_2"> <path id="Vector_3" d="M21 21L15.8033 15.8033M15.8033 15.8033C17.1605 14.4461 18 12.5711 18 10.5C18 6.35786 14.6421 3 10.5 3C6.35786 3 3 6.35786 3 10.5C3 14.6421 6.35786 18 10.5 18C12.5711 18 14.4461 17.1605 15.8033 15.8033Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> </svg> </button> <!-- Currency --> <nav class="am-currency-link relative hidden lg:!block mx-5" x-data="initCurrencySwitcher()" @keyup.escape="open = false"><button type="button" id="currency-menu" class="flex items-center p-1 !bg-transparent !text-primary tracking-basePx hover:!bg-gray-50" @click="open = !open" @click.outside="open = false" :aria-expanded="open ? 'true' : 'false'" aria-label="My&#x20;Account" aria-haspopup="true" ><template x-if="currentCurrencyCode === 'USD'"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" role="img"> <g id="heroicons-outline/currency-dollar"> <path id="Vector_4" d="M12 6V18M9 15.1818L9.87887 15.841C11.0504 16.7197 12.9498 16.7197 14.1214 15.841C15.2929 14.9623 15.2929 13.5377 14.1214 12.659C13.5355 12.2196 12.7677 12 11.9999 12C11.275 12 10.5502 11.7804 9.99709 11.341C8.891 10.4623 8.891 9.03772 9.9971 8.15904C11.1032 7.28036 12.8965 7.28036 14.0026 8.15904L14.4175 8.48863M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>currency/currency-dollar</title></svg> </template><template x-if="currentCurrencyCode === 'EUR'"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" role="img"> <g id="heroicons-outline/currency-euro"> <path id="Vector_5" d="M14.25 7.75625C12.667 7.19798 10.8341 7.5519 9.56802 8.81802C7.81066 10.5754 7.81066 13.4246 9.56802 15.182C10.8341 16.4481 12.667 16.802 14.25 16.2437M7.5 10.5H12.75M7.5 13.5H12.75M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>currency/currency-euro</title></svg> </template><template x-if="currentCurrencyCode === 'GBP'"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" role="img"> <g id="heroicons-outline/currency-pound"> <path id="Vector_6" d="M14.1213 7.62877C12.9497 6.45719 11.0503 6.45719 9.87868 7.62877C9.37424 8.13321 9.08699 8.7726 9.01694 9.43073C8.9944 9.64251 9.01512 9.85582 9.04524 10.0667L9.5512 13.6084C9.68065 14.5146 9.5307 15.4386 9.12135 16.2573L9 16.5L10.5385 15.9872C11.0003 15.8332 11.4997 15.8332 11.9615 15.9872L12.6158 16.2053C13.182 16.394 13.7999 16.3501 14.3336 16.0832L15 15.75M8.25 12H12M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>currency/currency-pound</title></svg> </template><span class="ml-1" x-text="currentCurrencyCode"></span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </button> <nav class="*:border-sky-100 absolute right-0 z-20 p-1 border rounded min-w-[160px] mt-2 -mr-4 px-1 overflow-auto shadow-lg lg:mt-3 bg-white" x-cloak x-show="open" aria-labelledby="currency-menu" @click.outside="open = false" > <a class="am-text-small bold !text-primary block px-2 py-1 hover:bg-gray-50" href="#" :class="{ 'font-bold': currentCurrencyCode === 'USD'}" aria-label="Switch&#x20;Currency" data-post='{"action":"https:\/\/amasty.com\/directory\/currency\/switch\/","data":{"currency":"USD"}}'>US Dollar - USD</a> <a class="am-text-small bold !text-primary block px-2 py-1 hover:bg-gray-50" href="#" :class="{ 'font-bold': currentCurrencyCode === 'EUR'}" aria-label="Switch&#x20;Currency" data-post='{"action":"https:\/\/amasty.com\/directory\/currency\/switch\/","data":{"currency":"EUR"}}'>Euro - EUR</a> <a class="am-text-small bold !text-primary block px-2 py-1 hover:bg-gray-50" href="#" :class="{ 'font-bold': currentCurrencyCode === 'GBP'}" aria-label="Switch&#x20;Currency" data-post='{"action":"https:\/\/amasty.com\/directory\/currency\/switch\/","data":{"currency":"GBP"}}'>British Pound - GBP</a> </nav></nav><script data-info="not-move-to-bottom"> function initCurrencySwitcher() { "use strict"; const currentCurrencyCode = 'USD'; return { open: false, currentCurrencyCode: '', init() { this.getCurrencyCode(); }, getCurrencyCode () { this.currentCurrencyCode = currentCurrencyCode; } } }</script> <!--Cart --><div class="relative -top-0.5"> <button id="menu-cart-icon" class="btn-icon relative inline-block no-underline hover:text-black" x-ref="cartButton" data-amtheme-js="minicart" :aria-disabled="isCartEmpty()" title="Cart" @click.prevent.stop="openShoppingCart()" @toggle-cart.window="toggleCart($event)" @mouseenter.prevent.stop="() => {$dispatch('toggle-cart', { isOpen: true })}" @mouseleave.prevent.stop="() => {$dispatch('close-cart-with-delay')}" :aria-expanded="isCartOpen" aria-haspopup="dialog" data-href="https://amasty.com/checkout/cart/" ><span class="sr-only label" x-text="` View cart, ${isCartEmpty() ? 'Cart is empty' : hyva.str( 'You have %1 product%2 in your cart.', cart.summary_count, cart.summary_count === 1 ? '' : 's' )}` " ></span> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" role="img"> <g id="heroicons-outline/shopping-bag"> <path id="Vector_7" d="M15.7505 10.5V6C15.7505 3.92893 14.0716 2.25 12.0005 2.25C9.92942 2.25 8.25048 3.92893 8.25048 6V10.5M19.6065 8.50723L20.8697 20.5072C20.9396 21.1715 20.4188 21.75 19.7508 21.75H4.25012C3.58221 21.75 3.06138 21.1715 3.1313 20.5072L4.39446 8.50723C4.45473 7.93466 4.93755 7.5 5.51328 7.5H18.4877C19.0634 7.5 19.5462 7.93466 19.6065 8.50723ZM8.62548 10.5C8.62548 10.7071 8.45759 10.875 8.25048 10.875C8.04338 10.875 7.87548 10.7071 7.87548 10.5C7.87548 10.2929 8.04338 10.125 8.25048 10.125C8.45759 10.125 8.62548 10.2929 8.62548 10.5ZM16.1255 10.5C16.1255 10.7071 15.9576 10.875 15.7505 10.875C15.5434 10.875 15.3755 10.7071 15.3755 10.5C15.3755 10.2929 15.5434 10.125 15.7505 10.125C15.9576 10.125 16.1255 10.2929 16.1255 10.5Z" stroke="#030712" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>shopping-bag</title></svg> <span x-cloak class="absolute -bottom-[2px] -right-[7px] h-[15px] min-w-[15px] text-xs rounded-full font-bold" :class="isCartEmpty() ? 'bg-gray-200 text-primary' : 'bg-rose-500 text-white'" aria-hidden="true" x-show="cart.summary_count !== undefined" ><span x-text="cart.summary_count" class="px-[2px] tracking-normal" ></span></span></button> <section x-cloak x-show="cart" id="cart-drawer" x-data="initCartDrawer()" @private-content-loaded.window="getData($event.detail.data)" @toggle-cart.window="toggleCartDrawer($event)" @close-cart-with-delay.window="closeCartWithDelay($event)" @keydown.escape="closeCartDrawer" ><div role="dialog" aria-labelledby="cart-drawer-title" aria-modal="true" :aria-hidden="!open" class="absolute top-8 right-0 z-30 flex"><div class="relative w-screen max-w-[363px] max-h-0 rounded shadow-xl transition-maxHeight overflow-hidden duration-300 ease-linear" :class="{'max-h-screen': open}" @mouseenter.prevent.stop="isGlobalOpen = true" @mouseleave.prevent.stop="closeCartWithDelay()" x-show="open" x-transition:enter-start="!max-h-0" x-transition:enter-end="!max-h-screen" x-transition:leave-start="!max-h-screen" x-transition:leave-end="!max-h-0" x-ref="cartDialogContent" role="region" :tabindex="open ? 0 : -1" aria-label="My&#x20;Cart" ><div class="flex flex-col border rounded bg-white" x-show="itemsCount"><template x-if="itemsCount"><div class="relative grid gap-2 max-h-[50vh] overflow-y-auto pt-5 px-5" ><div class="hidden bg-gray-100 text-center py-3" data-amsite-js="removeBlock">Item deleted</div><template x-for="item in cartItems"><div class="border-b last:border-0 last:pb-5" :data-amsite-js="item.item_id"><div class="relative flex flex-col items-start pb-3" data-amsite-js="item-main-block"><div class="flex items-center min-h-9 gap-3 justify-between w-full"><template x-if="item.product_has_url"><a :href="item.product_url" x-html="item.product_name" class="link-as-text font-bold" :aria-label="hyva.strf('Product\u0020\u0022\u00250\u0022', item.product_name)" ></a></template><template x-if="!item.product_has_url"><span x-html="item.product_name" class="font-bold"></span></template><button type="button" class="btn-icon hover:text-secondary focus:text-secondary inline-flex -mr-2 px-2" @delete-item-from-cart-called-outside.window="deleteItemFromCart($event.detail.item, $event.detail.target)" @click="item.is_transfered || item.is_lp_free_gift ? $dispatch('minicart-popup-show-notification', {detail: {item, $el}}) : deleteItemFromCart(item, $event.target)" :aria-label="hyva.strf('Remove\u0020product\u0020\u0022\u00250\u0022\u0020from\u0020cart', item.product_name)" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="20" height="20" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/></svg> </button></div><!-- conventional products --><template x-if="item.product_type !== 'virtual'"><template x-for="option in item.options"><div class="pt-1 am-text-caption text-secondary"><span x-text="option.label + ':'"></span> <span x-html="option.value"></span></div></template></template><!-- support subscriptions--><template x-if="item.product_type === 'virtual'"><ul class="ul-reset pt-1 am-text-caption text-secondary minicart-subscription-options"><template x-if="item.subscription_type"><li> <span>Subscription type:</span> <span x-html="item.subscription_type"></span></li></template><template x-if="item.partner_level"><li> <span>Partner level:</span> <span x-html="item.partner_level"></span></li></template><template x-if="item.product_trial"><li> <span>Free trial:</span> <span x-html="item.product_trial + ' days'"></span></li></template><template x-if="item.product_subscription_start_date"><li> <span>Start date:</span> <span x-html="item.product_subscription_start_date"></span></li></template><template x-if="item.product_subscription_version === 'Pro' || item.product_subscription_version === 'Premium' || item.product_subscription_version === 'Amasty One'"><li> <span class="block mb-2">Additional options:</span> <span x-html="getAdditionalOptions(item)"></span></li></template></ul></template><p class="m-0 pt-2" >1 x <template x-if="item.subscription_product_price"><span x-html="hyva.formatPrice(item.subscription_product_price, false, {maximumFractionDigits: 0})"></span></template><template x-if="!item.subscription_product_price"><span x-html="item.product_price"></span></template></p></div></div></template></div></template><template x-if="itemsCount"><div class="rounded"><div class="relative grid py-3 pb-6 px-5 bg-container-lighter"><div class="text-right"><p class="m-0">Subtotal <span class="text-right inline-block min-w-24" x-html="cart.subtotal"></span></p><template x-if="cart.discounts.length"><template x-for="discount in cart.discounts"><template x-if="discount.value"><p class="m-0"><span class="inline-flex flex-col leading-4"><span> Discount</span> <span class="text-secondary" x-html="discount.name"></span></span> <span class="text-right inline-block min-w-24" x-html="discount.amount"></span></p></template></template></template><template x-if="cart.storecredit.length"><template x-for="credit in cart.storecredit"><template x-if="credit.value"><p class="m-0"><span x-html="credit.name"></span> <span class="text-right inline-block min-w-24" x-html="credit.amount"></span></p></template></template></template><template x-if="cart.taxes.length"><template x-for="tax in cart.taxes"><template x-if="tax.value"><p class="m-0"><span x-html="tax.name"></span> <span class="text-right inline-block min-w-24" x-html="tax.amount"></span></p></template></template></template><p class="m-0 font-bold">Grand Total <span class="text-right inline-block min-w-24" x-html="cart.grand_total[0].amount"></span></p></div><div class="flex justify-between items-center mt-5"><a href="https://amasty.com/checkout/cart/" class="btn btn-as-text ml-5" data-metrics-element="mini-cart-view-cart" aria-label="View&#x20;Cart" >View Cart</a> <a href="https://amasty.com/checkout/" class="btn btn-primary" data-metrics-element="mini-cart-view-checkout" aria-label="Checkout" >Checkout</a></div></div></div></template></div> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></section> <div x-data="Object.assign({}, hyva.modal(), AmMiniCartPopupNotification())" x-on:minicart-popup-show-notification.window="showNotification($event.detail)" > <div x-cloak x-bind="overlay('minicart-popup-notification')" x-spread="overlay('minicart-popup-notification')" class="am-overlay-popup"><div class="am-container-popup inset-0"><div x-ref="minicart-popup-notification" role="dialog" aria-modal="true" class="am-dialog-popup max-w-[480px]"> <div class="text-center"><button type="button" class="am-close-popup" aria-label="Close" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <div class="text-4xl">⚠️</div><div class="mt-5 mb-7" x-ref="minicartNotificationContent"></div><div><button class="btn btn-primary !mr-7" x-on:click="$dispatch('delete-item-from-cart-called-outside', {item, target})" >Yes, delete it</button> <button class="btn btn-as-text" x-on:click="hide()" aria-label="Close" >No, keep it</button></div></div></div></div></div></div></div></div></div></div><div data-amsite-js="fake-empty-block-for-sticky-menu" class="hidden h-16"></div> <section class="ammenu-robots-navigation"><nav class="navigation" data-action="navigation" aria-disabled="true" aria-hidden="true" tabindex="-1"><ul aria-disabled="true" aria-hidden="true"> <li class="category-item nav-0" role="presentation"><a href="https://amasty.com/magento-2-extensions.html" tabindex="-1" title="Magento&#x20;2&#x20;Extensions">Magento 2 Extensions</a> <ul class="submenu"> <li class="category-item nav-0-0" role="presentation"><a href="https://amasty.com/hyva-theme-extensions-for-magento-2.html" tabindex="-1" title="Hyva&#x20;Theme&#x20;Extensions">Hyva Theme Extensions</a> </li> <li class="category-item nav-0-1" role="presentation"><a href="https://amasty.com/hyva-checkout-ready-extensions-for-magento-2.html" tabindex="-1" title="Hyva&#x20;Checkout&#x20;Ready">Hyva Checkout Ready</a> </li> <li class="category-item nav-0-2" role="presentation"><a href="https://amasty.com/usability-navigation-extensions-for-magento-2.html" tabindex="-1" title="Navigation&#x20;&amp;&#x20;Search">Navigation &amp; Search</a> </li> <li class="category-item nav-0-3" role="presentation"><a href="https://amasty.com/catalog-management-extensions-for-magento-2.html" tabindex="-1" title="Catalog&#x20;Management">Catalog Management</a> </li> <li class="category-item nav-0-4" role="presentation"><a href="https://amasty.com/checkout-extensions-for-magento-2.html" tabindex="-1" title="Checkout">Checkout</a> </li> <li class="category-item nav-0-5" role="presentation"><a href="https://amasty.com/law-based-extensions-for-magento-2.html" tabindex="-1" title="Law-Based&#x20;Extensions">Law-Based Extensions</a> </li> <li class="category-item nav-0-6" role="presentation"><a href="https://amasty.com/shipping-extensions-for-magento-2.html" tabindex="-1" title="Shipping">Shipping</a> </li> <li class="category-item nav-0-7" role="presentation"><a href="https://amasty.com/seo-optimization-extensions-for-magento-2.html" tabindex="-1" title="SEO">SEO</a> </li> <li class="category-item nav-0-8" role="presentation"><a href="https://amasty.com/promotions-extensions-for-magento-2.html" tabindex="-1" title="Promotions">Promotions</a> </li> <li class="category-item nav-0-9" role="presentation"><a href="https://amasty.com/images-media-extensions-for-magento-2.html" tabindex="-1" title="Images&#x20;&amp;&#x20;Media">Images &amp; Media</a> </li> <li class="category-item nav-0-10" role="presentation"><a href="https://amasty.com/administration-extensions-for-magento-2.html" tabindex="-1" title="Administration">Administration</a> </li> <li class="category-item nav-0-11" role="presentation"><a href="https://amasty.com/b2b-extensions-for-magento-2.html" tabindex="-1" title="B2B&#x20;Products">B2B Products</a> </li> <li class="category-item nav-0-12" role="presentation"><a href="https://amasty.com/ai-extensions-for-magento-2.html" tabindex="-1" title="AI-Powered&#x20;Extensions">AI-Powered Extensions</a> </li> <li class="category-item nav-0-13" role="presentation"><a href="https://amasty.com/free-magento-2-extensions.html" tabindex="-1" title="Free&#x20;Magento&#x20;2&#x20;Extensions">Free Magento 2 Extensions</a> </li> <li class="category-item nav-0-14" role="presentation"><a href="https://amasty.com/contacts" tabindex="-1" title="Support&#x20;Packs">Support Packs</a> </li> <li class="category-item nav-0-15" role="presentation"><a href="https://amasty.com/research-product-demand.html" tabindex="-1" title="Research&#x20;Product&#x20;Demand">Research Product Demand</a> </li> <li class="category-item nav-0-16" role="presentation"><a href="https://trello.com/b/mGKdSV3a/%F0%9F%9A%A9-amasty-product-roadmap-%F0%9F%9A%A9" tabindex="-1" title="Public&#x20;Roadmap">Public Roadmap</a> </li> </ul></li> <li class="category-item nav-1" role="presentation"><a href="https://amasty.com/magento-2-solutions.html" tabindex="-1" title="Suites">Suites</a> <ul class="submenu"> <li class="category-item nav-1-0" role="presentation"><a href="https://amasty.com/hyva-solutions-for-magento-2.html" tabindex="-1" title="Hyva&#x20;Solutions">Hyva Solutions</a> </li> <li class="category-item nav-1-1" role="presentation"><a href="https://amasty.com/usability-navigation-solutions-for-magento-2.html" tabindex="-1" title="Enhanced&#x20;Navigation">Enhanced Navigation</a> </li> <li class="category-item nav-1-2" role="presentation"><a href="https://amasty.com/packs-for-magento-2.html" tabindex="-1" title="Packs">Packs</a> </li> <li class="category-item nav-1-3" role="presentation"><a href="https://amasty.com/suites-for-magento-2.html" tabindex="-1" title="Suites">Suites</a> </li> <li class="category-item nav-1-4" role="presentation"><a href="https://amasty.com/sales-and-marketing-solutions-for-magento-2.html" tabindex="-1" title="Sales&#x20;&amp;&#x20;Marketing">Sales &amp; Marketing</a> </li> <li class="category-item nav-1-5" role="presentation"><a href="https://amasty.com/user-experience-solutions-for-magento-2.html" tabindex="-1" title="User&#x20;Experience">User Experience</a> </li> <li class="category-item nav-1-6" role="presentation"><a href="https://amasty.com/order-management-solutions-for-magento-2.html" tabindex="-1" title="Order&#x20;Management">Order Management</a> </li> </ul></li> <li class="category-item nav-2" role="presentation"><a href="https://amasty.com/contacts/" tabindex="-1" title="Support">Support</a> </li> <li class="category-item nav-3" role="presentation"><a href="https://amasty.com/magento-services.html" tabindex="-1" title="Services">Services</a> <ul class="submenu"> <li class="category-item nav-3-0" role="presentation"><a href="https://amasty.com/magento-development-services.html" tabindex="-1" title="High-Demand&#x20;Services">High-Demand Services</a> </li> <li class="category-item nav-3-1" role="presentation"><a href="https://amasty.com/magento-development-services.html" tabindex="-1" title="Magento&#x20;Development&#x20;Services">Magento Development Services</a> </li> <li class="category-item nav-3-2" role="presentation"><a href="https://amasty.com/magento-hyva-theme-development-service.html" tabindex="-1" title="Hyva&#x20;Development&#x20;Services">Hyva Development Services</a> </li> <li class="category-item nav-3-3" role="presentation"><a href="https://amasty.com/magento-optimization-service.html" tabindex="-1" title="Magento&#x20;Optimization&#x20;Services">Magento Optimization Services</a> </li> <li class="category-item nav-3-4" role="presentation"><a href="https://amasty.com/magento-2-support-and-maintenance-service.html" tabindex="-1" title="Magento&#x20;Maintenance&#x20;Services">Magento Maintenance Services</a> </li> <li class="category-item nav-3-5" role="presentation"><a href="https://amasty.com/magento-2-upgrade-service.html" tabindex="-1" title="Magento&#x20;Upgrade&#x20;Services">Magento Upgrade Services</a> </li> <li class="category-item nav-3-6" role="presentation"><a href="https://amasty.com/magento-integration-service.html" tabindex="-1" title="Magento&#x20;Integration&#x20;Services">Magento Integration Services</a> </li> <li class="category-item nav-3-7" role="presentation"><a href="https://amasty.com/managed-it-service.html" tabindex="-1" title="Managed&#x20;Services">Managed Services</a> </li> <li class="category-item nav-3-8" role="presentation"><a href="https://amasty.com/shopify-website-development-service.html" tabindex="-1" title="Shopify&#x20;Services">Shopify Services</a> </li> <li class="category-item nav-3-9" role="presentation"><a href="https://amasty.com/magento-services.html" tabindex="-1" title="E-Commerce&#x20;Services">E-Commerce Services</a> </li> <li class="category-item nav-3-10" role="presentation"><a href="https://amasty.com/qa-testing-services.html" tabindex="-1" title="QA&#x20;Testing&#x20;Services">QA Testing Services</a> </li> <li class="category-item nav-3-11" role="presentation"><a href="https://amasty.com/hire-developers.html" tabindex="-1" title="Hire&#x20;Developers">Hire Developers</a> </li> </ul></li> <li class="category-item nav-4" role="presentation"><a href="https://amasty.com/shopify-apps.html" tabindex="-1" title="Shopify&#x20;Apps">Shopify Apps</a> </li> <li class="category-item nav-5" role="presentation"><a href="https://amasty.com/amasty-promo.html" tabindex="-1" title="Special&#x20;Offers">Special Offers</a> </li> <li class="category-item nav-6" role="presentation"><a href="https://amasty.com/amasty-loyalty-program.html" tabindex="-1" title="Loyalty&#x20;Programs">Loyalty Programs</a> </li> <li class="category-item nav-7" role="presentation"><a href="https://amasty.com/blog/" tabindex="-1" title="Blog">Blog</a> </li> <li class="category-item nav-8" role="presentation"><a href="https://amasty.com/knowledge-base/" tabindex="-1" title="FAQ">FAQ</a> </li> </ul></nav></section> <section class="ammenu-menu-wrapper" data-nosnippet data-bind=" scope: 'ammenu_wrapper', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_wrapper': { component: 'Amasty_MegaMenuLite/js/wrapper', data: {&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:700,&quot;mobile_font&quot;:700,&quot;elems&quot;:[{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:&quot;&lt;div class=\&quot;ammenu-view-all-mobile-link\&quot;&gt;\r\n &lt;a class=\&quot;ammenu-link view-all\&quot;\r\n href=\&quot;\/magento-2-extensions.html\&quot;\r\n aria-label=\&quot;Go to All Magento 2 Extensions\&quot;\r\n title=\&quot;Go to All Magento 2 Extensions\&quot;\r\n role=\&quot;link\&quot;\r\n tabindex=\&quot;0\&quot;\r\n &gt;\r\n All Magento 2 Extensions\r\n &lt;\/a&gt;\r\n&lt;\/div&gt;\r\n\r\n &lt;div class=\&quot;ammenu-widget-wrapper block widget mega-menu-products-list\&quot; data-amsite-js=\&quot;top-product-widget\&quot;&gt; &lt;div class=\&quot;block-title\&quot;&gt;Popular right now&lt;\/div&gt; &lt;div class=\&quot;block-content\&quot;&gt;&lt;ul class=\&quot;widget-product-items\&quot;&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/cookie-consent-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Cookie&#x20;Consent&#x20;&#x28;GDPR&#x29;\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/c\/o\/cookie-consent-for-magento-2_6253b4c79f9ab.png\&quot; alt=\&quot;Cookie Consent (GDPR) for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Cookie Consent (GDPR)&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Improved&#x20;Layered&#x20;Navigation\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/m\/improved-layered-navigation-for-magento-2_5.png\&quot; alt=\&quot;Improved Layered Navigation for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;amasty-label-container amasty-label-container-13-506-cat amasty-label-for-506\&quot; style=\&quot;display: none; width:111px;\&quot; data-mage-init=&#039;{\&quot;Amasty_Label\/js\/initLabel\&quot;:{ \&quot;mode\&quot;: \&quot;cat\&quot;, \&quot;isAdminArea\&quot;: \&quot;\&quot;, \&quot;config\&quot;: {\&quot;position\&quot;:\&quot;top-center\&quot;,\&quot;size\&quot;:\&quot;\&quot;,\&quot;path\&quot;:\&quot;.product-image-container, .product-item-photo, .cdz-product-top\&quot;,\&quot;mode\&quot;:\&quot;prod\&quot;,\&quot;move\&quot;:0,\&quot;product\&quot;:\&quot;506\&quot;,\&quot;label\&quot;:13,\&quot;margin\&quot;:7,\&quot;alignment\&quot;:0,\&quot;order\&quot;:5,\&quot;redirect_url\&quot;:\&quot;\&quot;,\&quot;tooltip\&quot;:{\&quot;backgroundColor\&quot;:\&quot;\&quot;,\&quot;color\&quot;:\&quot;\&quot;,\&quot;status\&quot;:1,\&quot;content\&quot;:\&quot;\&quot;}}, \&quot;productId\&quot;: \&quot;506\&quot;, \&quot;selector\&quot;: \&quot;.amasty-label-container-13-506-cat\&quot; }}&#039;&gt;&lt;div class=\&quot;amlabel-text\&quot;&gt;&lt;\/div&gt; &lt;img id=\&quot;amasty-label-image-13-506-cat\&quot; class=\&quot;amasty-label-image\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\&quot; style=\&quot;opacity: 1 !important;vertical-align: top;\&quot; title=\&quot;Improved&#x20;Layered&#x20;Navigation&#x20;for&#x20;Magento&#x20;2\&quot; alt=\&quot;Improved&#x20;Layered&#x20;Navigation&#x20;for&#x20;Magento&#x20;2\&quot; &gt;&lt;\/div&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Improved Layered Navigation&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/google-tag-manager-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Google&#x20;Analytics&#x20;4&#x20;with&#x20;GTM&#x20;Support\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon-google-tag-manager-for-magento-2.png\&quot; alt=\&quot;Google Analytics 4 with GTM Support for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Google Analytics 4 with GTM Support&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;\/ul&gt;&lt;\/div&gt; &lt;a href=\&quot;\/featured-extensions-for-magento-2.html\&quot; class=\&quot;block-link-below\&quot; tabindex=\&quot;0\&quot; title=\&quot;View&#x20;All&#x20;BestSellers\&quot;&gt;View All BestSellers&lt;\/a&gt; &lt;\/div&gt;\r\n\r\n\r\n&lt;div class=\&quot;ammenu-m2-dropdown-banners\&quot; data-amsite-js=\&quot;ammenu-m2-dropdown-banners\&quot;&gt;\r\n &lt;a class=\&quot;amsite-menu-picker-btn action secondary\&quot; href=\&quot;\/latest-updates-magento-2-extensions.html?utm_source=menu&amp;utm_medium=widget&amp;utm_campaign=recent_updates\&quot; title=\&quot;Go to this page\&quot;&gt;\r\n Check Module Updates\r\n &lt;\/a&gt;\r\n &lt;img src=\&quot;https:\/\/cdn.amasty.com\/media\/amsite\/adobe-partner-badge-2x.png\&quot; alt=\&quot;Adobe partner logo\&quot; width=\&quot;180\&quot; \r\n height=\&quot;46\&quot;&gt;\r\n&lt;\/div&gt; &quot;,&quot;type&quot;:{&quot;value&quot;:1,&quot;label&quot;:&quot;vertical&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:3,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Hyva Theme Extensions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-83&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/hyva-theme-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:162,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/custom-form-for-magento-2.html&quot;,&quot;name&quot;:&quot;Custom Form&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/social-login-for-magento-2.html&quot;,&quot;name&quot;:&quot;Social Login&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/google-tag-manager-for-magento-2.html&quot;,&quot;name&quot;:&quot;Google Analytics 4 with GTM&quot;}],&quot;label&quot;:{&quot;label&quot;:&quot;HOT&quot;,&quot;label_text_color&quot;:&quot;#ffffff&quot;,&quot;label_background_color&quot;:&quot;#ff2f7a&quot;},&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Hyva Checkout Ready&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-109&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/hyva-checkout-ready-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:135,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/out-of-stock-notification-for-magento-2.html&quot;,&quot;name&quot;:&quot;Out of Stock Notification&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/order-attributes-for-magento-2.html&quot;,&quot;name&quot;:&quot;Order Attributes&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shipping-restrictions-for-magento-2.html&quot;,&quot;name&quot;:&quot;Shipping Restrictions &quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Navigation &amp; Search&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-26&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/usability-navigation-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:21,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html&quot;,&quot;name&quot;:&quot;Improved Layered Navigation&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;TOP&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/mega-menu-for-magento-2.html&quot;,&quot;name&quot;:&quot;Mega Menu Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/elasticsearch-for-magento-2.html&quot;,&quot;name&quot;:&quot;Elastic Search&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Catalog Management&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-28&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/catalog-management-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:34,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/product-feed-for-magento-2.html&quot;,&quot;name&quot;:&quot;Product Feed&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/improved-sorting-for-magento-2.html&quot;,&quot;name&quot;:&quot;Improved Sorting&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shop-by-brand-for-magento-2.html&quot;,&quot;name&quot;:&quot;Shop by Brand&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Checkout&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-35&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/checkout-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:27,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/one-step-checkout-for-magento-2.html&quot;,&quot;name&quot;:&quot;One Step Checkout Pro&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;TOP&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/customer-attributes-for-magento-2.html&quot;,&quot;name&quot;:&quot;Customer Attributes&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/delivery-date-manager-for-magento-2.html&quot;,&quot;name&quot;:&quot;Delivery Date Manager&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Law-Based Extensions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-112&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/law-based-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:8,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/cookie-consent-for-magento-2.html&quot;,&quot;name&quot;:&quot;Cookie Consent&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/omnibus-price-tracker-for-magento-2.html&quot;,&quot;name&quot;:&quot;Omnibus Price Tracker&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/age-verification-for-magento-2.html&quot;,&quot;name&quot;:&quot;Age Verification&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;NEW&quot;,&quot;label_text_color&quot;:&quot;#ffffff&quot;,&quot;label_background_color&quot;:&quot;#4d91f8&quot;}}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Shipping&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-30&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/shipping-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:19,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/shipping-rules-for-magento-2.html&quot;,&quot;name&quot;:&quot;Shipping Rules&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shipping-table-rates-for-magento-2.html&quot;,&quot;name&quot;:&quot;Shipping Table Rates&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/store-pickup-with-locator-for-magento-2.html&quot;,&quot;name&quot;:&quot;Store Pickup with Locator&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;SEO&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-33&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/seo-optimization-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:29,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/seo-toolkit-for-magento-2.html&quot;,&quot;name&quot;:&quot;SEO Toolkit Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/google-indexing-api-for-magento-2.html&quot;,&quot;name&quot;:&quot;Google Indexing API&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;NEW&quot;,&quot;label_text_color&quot;:&quot;#ffffff&quot;,&quot;label_background_color&quot;:&quot;#4d91f8&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/google-page-speed-optimizer-for-magento-2.html&quot;,&quot;name&quot;:&quot;Google Page Speed Optimizer Pro&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Promotions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-29&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/promotions-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:44,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/free-gift-for-magento-2.html&quot;,&quot;name&quot;:&quot;Free Gift&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;TOP&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/special-promotions-pro-for-magento-2.html&quot;,&quot;name&quot;:&quot;Special Promotions Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/automatic-related-products-for-magento-2.html&quot;,&quot;name&quot;:&quot;Automatic Related Products&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Images &amp; Media&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-36&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/images-media-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:15,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/product-labels-for-magento-2.html&quot;,&quot;name&quot;:&quot;Product Labels&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/promo-banners-for-magento-2.html&quot;,&quot;name&quot;:&quot;Promo Banners&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/color-swatches-pro-for-magento-2.html&quot;,&quot;name&quot;:&quot;Color Swatches Pro&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Administration&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-82&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/administration-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:25,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/admin-actions-log-for-magento-2.html&quot;,&quot;name&quot;:&quot;Admin Actions Log&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/advanced-permissions-for-magento-2.html&quot;,&quot;name&quot;:&quot;Advanced Permissions&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/payment-restrictions-for-magento-2.html&quot;,&quot;name&quot;:&quot;Payment Restrictions&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;B2B Products&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-61&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/b2b-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:27,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html&quot;,&quot;name&quot;:&quot;B2B E-commerce Premium Suite&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/import-and-export-for-magento-2.html&quot;,&quot;name&quot;:&quot;Import and Export Premium&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/b2b-company-account-for-magento-2.html&quot;,&quot;name&quot;:&quot;B2B Company Account&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;AI-Powered Extensions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-103&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/ai-extensions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:3,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/blog-pro-for-magento-2.html&quot;,&quot;name&quot;:&quot;Blog Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/chatgpt-ai-content-for-magento-2.html&quot;,&quot;name&quot;:&quot;ChatGPT AI Content Generator&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/google-automated-discounts-for-magento-2.html&quot;,&quot;name&quot;:&quot;Google Automated Discounts&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Free Magento 2 Extensions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-43&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/free-magento-2-extensions.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:8,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/google-page-speed-optimizer-lite-for-magento-2.html&quot;,&quot;name&quot;:&quot;Google Page Speed Optimizer&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/recently-viewed-products-popup-for-magento-2.html&quot;,&quot;name&quot;:&quot;Recently Viewed Products&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/mega-menu-lite-for-magento-2.html&quot;,&quot;name&quot;:&quot;Mega Menu&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:700,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Support Packs&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-79&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/contacts&quot;,&quot;current&quot;:false,&quot;items_count&quot;:0,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:null},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:700,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Research Product Demand&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-69&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/research-product-demand.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:57,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:null},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Public Roadmap&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-97&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/trello.com\/b\/mGKdSV3a\/%F0%9F%9A%A9-amasty-product-roadmap-%F0%9F%9A%A9&quot;,&quot;current&quot;:false,&quot;items_count&quot;:0,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;}],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Magento 2 Extensions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-25&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;0&quot;,&quot;content&quot;:&quot;&lt;div class=\&quot;ammenu-dropdown-wrapper -desktop\&quot;&gt;\r\n &lt;div class=\&quot;left-side\&quot;&gt;\r\n &lt;div class=\&quot;ammenu-widget-wrapper block widget mega-menu-products-list\&quot; data-amsite-js=\&quot;top-product-widget\&quot;&gt; &lt;div class=\&quot;block-title\&quot;&gt;Popular right now&lt;\/div&gt; &lt;div class=\&quot;block-content\&quot;&gt;&lt;ul class=\&quot;widget-product-items\&quot;&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/cookie-consent-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Cookie&#x20;Consent&#x20;&#x28;GDPR&#x29;\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/c\/o\/cookie-consent-for-magento-2_6253b4c79f9ab.png\&quot; alt=\&quot;Cookie Consent (GDPR) for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Cookie Consent (GDPR)&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Improved&#x20;Layered&#x20;Navigation\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/m\/improved-layered-navigation-for-magento-2_5_png.webp\&quot; alt=\&quot;Improved Layered Navigation for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;amasty-label-container amasty-label-container-13-506-cat amasty-label-for-506\&quot; style=\&quot;display: none; width:111px;\&quot; data-mage-init=&#039;{\&quot;Amasty_Label\/js\/initLabel\&quot;:{ \&quot;mode\&quot;: \&quot;cat\&quot;, \&quot;isAdminArea\&quot;: \&quot;\&quot;, \&quot;config\&quot;: {\&quot;position\&quot;:\&quot;top-center\&quot;,\&quot;size\&quot;:\&quot;\&quot;,\&quot;path\&quot;:\&quot;.product-image-container, .product-item-photo, .cdz-product-top\&quot;,\&quot;mode\&quot;:\&quot;prod\&quot;,\&quot;move\&quot;:0,\&quot;product\&quot;:\&quot;506\&quot;,\&quot;label\&quot;:13,\&quot;margin\&quot;:7,\&quot;alignment\&quot;:0,\&quot;order\&quot;:5,\&quot;redirect_url\&quot;:\&quot;\&quot;,\&quot;tooltip\&quot;:{\&quot;backgroundColor\&quot;:\&quot;\&quot;,\&quot;color\&quot;:\&quot;\&quot;,\&quot;status\&quot;:1,\&quot;content\&quot;:\&quot;\&quot;}}, \&quot;productId\&quot;: \&quot;506\&quot;, \&quot;selector\&quot;: \&quot;.amasty-label-container-13-506-cat\&quot; }}&#039;&gt;&lt;div class=\&quot;amlabel-text\&quot;&gt;&lt;\/div&gt; &lt;img id=\&quot;amasty-label-image-13-506-cat\&quot; class=\&quot;amasty-label-image\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\&quot; style=\&quot;opacity: 1 !important;vertical-align: top;\&quot; title=\&quot;Improved&#x20;Layered&#x20;Navigation&#x20;for&#x20;Magento&#x20;2\&quot; alt=\&quot;Improved&#x20;Layered&#x20;Navigation&#x20;for&#x20;Magento&#x20;2\&quot; &gt;&lt;\/div&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Improved Layered Navigation&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/google-tag-manager-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Google&#x20;Analytics&#x20;4&#x20;with&#x20;GTM&#x20;Support\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon-google-tag-manager-for-magento-2_png.webp\&quot; alt=\&quot;Google Analytics 4 with GTM Support for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Google Analytics 4 with GTM Support&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;\/ul&gt;&lt;\/div&gt; &lt;a href=\&quot;\/hyva-theme-extensions-for-magento-2.html?utm_source=menu&amp;utm_medium=widget&amp;utm_campaign=hyva_extensions\&quot; class=\&quot;block-link-below\&quot; tabindex=\&quot;0\&quot; title=\&quot;View&#x20;All&#x20;Hyva&#x20;Extensions\&quot;&gt;View All Hyva Extensions&lt;\/a&gt; &lt;\/div&gt;\r\n\r\n &lt;div class=\&quot;ammenu-m2-dropdown-banners\&quot; data-amsite-js=\&quot;ammenu-m2-dropdown-banners\&quot;&gt;\r\n &lt;a class=\&quot;amsite-menu-picker-btn action secondary\&quot; href=\&quot;\/latest-updates-magento-2-extensions.html?utm_source=menu&amp;utm_medium=widget&amp;utm_campaign=recent_updates\&quot; title=\&quot;Go to this page\&quot;&gt;\r\n Check Module Updates\r\n &lt;\/a&gt;\r\n &lt;img src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/amsite\/adobe-partner-badge-2x_png.webp\&quot; alt=\&quot;Adobe partner logo\&quot; width=\&quot;180\&quot; \r\n height=\&quot;46\&quot;&gt;\r\n&lt;\/div&gt; \r\n\r\n &lt;\/div&gt;\r\n &lt;div class=\&quot;right-side\&quot;&gt;\r\n &lt;!-- ko scope: \&quot;index = ammenu_columns_wrapper\&quot; --&gt; &lt;!-- ko template: getTemplate() --&gt;&lt;!-- \/ko --&gt; &lt;!-- \/ko --&gt;\r\n &lt;\/div&gt;\r\n&lt;\/div&gt;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-extensions.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:261,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/tier-price-for-magento-2.html&quot;,&quot;name&quot;:&quot;Tier Price for Magento 2&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;fade_in&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:&quot;&lt;div class=\&quot;ammenu-view-all-mobile-link\&quot;&gt;\r\n &lt;a class=\&quot;ammenu-link view-all\&quot;\r\n href=\&quot;\/magento-2-solutions.html\&quot;\r\n aria-label=\&quot;Go to Solutions\&quot;\r\n title=\&quot;Go to Solutions\&quot;\r\n role=\&quot;link\&quot;\r\n tabindex=\&quot;0\&quot;\r\n &gt;\r\n All Solutions\r\n &lt;\/a&gt;\r\n&lt;\/div&gt;\r\n\r\n &lt;div class=\&quot;ammenu-widget-wrapper block widget mega-menu-products-list\&quot; data-amsite-js=\&quot;top-product-widget\&quot;&gt; &lt;div class=\&quot;block-title\&quot;&gt;Featured Products&lt;\/div&gt; &lt;div class=\&quot;block-content\&quot;&gt;&lt;ul class=\&quot;widget-product-items\&quot;&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to B2B&#x20;E-commerce&#x20;Premium&#x20;Solution\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon_b2b_premium_2.png\&quot; alt=\&quot;B2B E-commerce Premium Solution for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;B2B E-commerce Premium Solution&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Google&#x20;Page&#x20;Speed&#x20;Optimizer&#x20;Powered&#x20;by&#x20;SpeedSize&#x2122;&#x20;AI&#x20;Pro\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/g\/o\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2_629ed9b6e2f0e.png\&quot; alt=\&quot;Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;amasty-label-container amasty-label-container-13-2699-cat amasty-label-for-2699\&quot; style=\&quot;display: none; width:111px;\&quot; data-mage-init=&#039;{\&quot;Amasty_Label\/js\/initLabel\&quot;:{ \&quot;mode\&quot;: \&quot;cat\&quot;, \&quot;isAdminArea\&quot;: \&quot;\&quot;, \&quot;config\&quot;: {\&quot;position\&quot;:\&quot;top-center\&quot;,\&quot;size\&quot;:\&quot;\&quot;,\&quot;path\&quot;:\&quot;.product-image-container, .product-item-photo, .cdz-product-top\&quot;,\&quot;mode\&quot;:\&quot;prod\&quot;,\&quot;move\&quot;:0,\&quot;product\&quot;:\&quot;2699\&quot;,\&quot;label\&quot;:13,\&quot;margin\&quot;:7,\&quot;alignment\&quot;:0,\&quot;order\&quot;:5,\&quot;redirect_url\&quot;:\&quot;\&quot;,\&quot;tooltip\&quot;:{\&quot;backgroundColor\&quot;:\&quot;\&quot;,\&quot;color\&quot;:\&quot;\&quot;,\&quot;status\&quot;:1,\&quot;content\&quot;:\&quot;\&quot;}}, \&quot;productId\&quot;: \&quot;2699\&quot;, \&quot;selector\&quot;: \&quot;.amasty-label-container-13-2699-cat\&quot; }}&#039;&gt;&lt;div class=\&quot;amlabel-text\&quot;&gt;&lt;\/div&gt; &lt;img id=\&quot;amasty-label-image-13-2699-cat\&quot; class=\&quot;amasty-label-image\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\&quot; style=\&quot;opacity: 1 !important;vertical-align: top;\&quot; title=\&quot;Google&#x20;Page&#x20;Speed&#x20;Optimizer&#x20;Powered&#x20;by&#x20;SpeedSize&#x2122;&#x20;AI&#x20;Pro&#x20;for&#x20;Magento&#x20;2\&quot; alt=\&quot;Google&#x20;Page&#x20;Speed&#x20;Optimizer&#x20;Powered&#x20;by&#x20;SpeedSize&#x2122;&#x20;AI&#x20;Pro&#x20;for&#x20;Magento&#x20;2\&quot; &gt;&lt;\/div&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;\/ul&gt;&lt;\/div&gt; &lt;a href=\&quot;\/magento-2-extensions.html\&quot; class=\&quot;block-link-below\&quot; tabindex=\&quot;0\&quot; title=\&quot;View&#x20;All&#x20;BestSellers\&quot;&gt;View All BestSellers&lt;\/a&gt; &lt;\/div&gt;\r\n&quot;,&quot;type&quot;:{&quot;value&quot;:1,&quot;label&quot;:&quot;vertical&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:3,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Hyva Solutions&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-104&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/hyva-solutions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:8,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/gdpr-for-magento-2.html&quot;,&quot;name&quot;:&quot;GDPR Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/gift-card-for-magento-2.html&quot;,&quot;name&quot;:&quot;Gift Card Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/product-attachments-for-magento-2.html&quot;,&quot;name&quot;:&quot;Product Attachments&quot;}],&quot;label&quot;:{&quot;label&quot;:&quot;HOT&quot;,&quot;label_text_color&quot;:&quot;#ffffff&quot;,&quot;label_background_color&quot;:&quot;#ff2f7a&quot;},&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:1,&quot;label&quot;:&quot;vertical&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:0,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Enhanced Navigation&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-72&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;99999&quot;,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/usability-navigation-solutions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:5,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/premium-custom-layered-navigation-for-magento-2.html&quot;,&quot;name&quot;:&quot;Layered Navigation Premium&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/advanced-search-for-magento-2.html&quot;,&quot;name&quot;:&quot;Advanced Search&quot;}],&quot;label&quot;:{&quot;label&quot;:&quot;TOP&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;},&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Packs&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-113&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/packs-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:2,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/ultimate-sale-booster-for-magento-2.html&quot;,&quot;name&quot;:&quot;Sale Booster Pack&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/elastic-layered-navigation-for-magento-2.html&quot;,&quot;name&quot;:&quot;Elastic Layered Navigation&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Suites&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-114&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/suites-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:4,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/promotion-suite-middle-for-magento-2.html&quot;,&quot;name&quot;:&quot;Promotion Suite Pro&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/security-suite-for-magento-2.html&quot;,&quot;name&quot;:&quot;Security Suite &quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shipping-suite-for-magento-2.html&quot;,&quot;name&quot;:&quot;Shipping Suite Pro&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Sales &amp; Marketing&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-73&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;99999&quot;,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/sales-and-marketing-solutions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:11,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/abandoned-cart-email-for-magento-2.html&quot;,&quot;name&quot;:&quot;Abandoned Cart Email&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/reward-points-for-magento-2.html&quot;,&quot;name&quot;:&quot;Reward Points&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/special-promotions-for-magento-2.html&quot;,&quot;name&quot;:&quot;Special Promotions&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/facebook-pixel-for-magento-2.html&quot;,&quot;name&quot;:&quot;Facebook Pixel&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/advanced-product-reviews-for-magento-2.html&quot;,&quot;name&quot;:&quot;Advanced Product Reviews&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;User Experience&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-77&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/user-experience-solutions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:5,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/request-a-quote-for-magento-2.html&quot;,&quot;name&quot;:&quot;Request a Quote&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/google-page-speed-optimizer-premium-for-magento-2.html&quot;,&quot;name&quot;:&quot;Google Page Speed Optimizer Premium&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/store-locator-for-magento-2.html&quot;,&quot;name&quot;:&quot;Store Locator&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Order Management&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-74&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/order-management-solutions-for-magento-2.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:5,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/rma-for-magento-2.html&quot;,&quot;name&quot;:&quot;RMA&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/pre-order-for-magento-2.html&quot;,&quot;name&quot;:&quot;Pre Order&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/advanced-reports-for-magento-2.html&quot;,&quot;name&quot;:&quot;Advanced Reports&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;}],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Suites&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-71&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;1&quot;,&quot;content&quot;:&quot;&lt;div class=\&quot;ammenu-dropdown-wrapper -desktop\&quot;&gt;\r\n &lt;div class=\&quot;left-side\&quot;&gt;\r\n &lt;div class=\&quot;ammenu-widget-wrapper block widget mega-menu-products-list\&quot; data-amsite-js=\&quot;top-product-widget\&quot;&gt; &lt;div class=\&quot;block-title\&quot;&gt;Featured Products&lt;\/div&gt; &lt;div class=\&quot;block-content\&quot;&gt;&lt;ul class=\&quot;widget-product-items\&quot;&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/google-automated-discounts-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Google&#x20;Automated&#x20;Discounts&#x20;Premium\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/g\/o\/google-automated-discounts-for-magento-2_6568768b9b091.png\&quot; alt=\&quot;Google Automated Discounts Premium for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Google Automated Discounts Premium&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to B2B&#x20;E-commerce&#x20;Premium&#x20;Solution\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon_b2b_premium_2_png.webp\&quot; alt=\&quot;B2B E-commerce Premium Solution for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;B2B E-commerce Premium Solution&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Google&#x20;Page&#x20;Speed&#x20;Optimizer&#x20;Powered&#x20;by&#x20;SpeedSize&#x2122;&#x20;AI&#x20;Pro\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/g\/o\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2_629ed9b6e2f0e_png.webp\&quot; alt=\&quot;Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro for Magento 2\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;amasty-label-container amasty-label-container-13-2699-cat amasty-label-for-2699\&quot; style=\&quot;display: none; width:111px;\&quot; data-mage-init=&#039;{\&quot;Amasty_Label\/js\/initLabel\&quot;:{ \&quot;mode\&quot;: \&quot;cat\&quot;, \&quot;isAdminArea\&quot;: \&quot;\&quot;, \&quot;config\&quot;: {\&quot;position\&quot;:\&quot;top-center\&quot;,\&quot;size\&quot;:\&quot;\&quot;,\&quot;path\&quot;:\&quot;.product-image-container, .product-item-photo, .cdz-product-top\&quot;,\&quot;mode\&quot;:\&quot;prod\&quot;,\&quot;move\&quot;:0,\&quot;product\&quot;:\&quot;2699\&quot;,\&quot;label\&quot;:13,\&quot;margin\&quot;:7,\&quot;alignment\&quot;:0,\&quot;order\&quot;:5,\&quot;redirect_url\&quot;:\&quot;\&quot;,\&quot;tooltip\&quot;:{\&quot;backgroundColor\&quot;:\&quot;\&quot;,\&quot;color\&quot;:\&quot;\&quot;,\&quot;status\&quot;:1,\&quot;content\&quot;:\&quot;\&quot;}}, \&quot;productId\&quot;: \&quot;2699\&quot;, \&quot;selector\&quot;: \&quot;.amasty-label-container-13-2699-cat\&quot; }}&#039;&gt;&lt;div class=\&quot;amlabel-text\&quot;&gt;&lt;\/div&gt; &lt;img id=\&quot;amasty-label-image-13-2699-cat\&quot; class=\&quot;amasty-label-image\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\&quot; style=\&quot;opacity: 1 !important;vertical-align: top;\&quot; title=\&quot;Google&#x20;Page&#x20;Speed&#x20;Optimizer&#x20;Powered&#x20;by&#x20;SpeedSize&#x2122;&#x20;AI&#x20;Pro&#x20;for&#x20;Magento&#x20;2\&quot; alt=\&quot;Google&#x20;Page&#x20;Speed&#x20;Optimizer&#x20;Powered&#x20;by&#x20;SpeedSize&#x2122;&#x20;AI&#x20;Pro&#x20;for&#x20;Magento&#x20;2\&quot; &gt;&lt;\/div&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;\/ul&gt;&lt;\/div&gt; &lt;a href=\&quot;\/all-magento-2-bundles\&quot; class=\&quot;block-link-below\&quot; tabindex=\&quot;0\&quot; title=\&quot;View&#x20;ready-made&#x20;bundles&#x20;list\&quot;&gt;View ready-made bundles list&lt;\/a&gt; &lt;\/div&gt;\r\n\r\n &lt;\/div&gt;\r\n &lt;div class=\&quot;right-side\&quot;&gt;\r\n &lt;!-- ko scope: \&quot;index = ammenu_columns_wrapper\&quot; --&gt; &lt;!-- ko template: getTemplate() --&gt;&lt;!-- \/ko --&gt; &lt;!-- \/ko --&gt;\r\n &lt;\/div&gt;\r\n&lt;\/div&gt;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-solutions.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:43,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html&quot;,&quot;name&quot;:&quot;Improved Layered Navigation&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;TOP&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/elasticsearch-for-magento-2.html&quot;,&quot;name&quot;:&quot;Elastic Search&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/mega-menu-for-magento-2.html&quot;,&quot;name&quot;:&quot;Mega Menu Pro&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;fade_in&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:700,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Support&quot;,&quot;is_category&quot;:false,&quot;id&quot;:&quot;custom-node-4&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;2&quot;,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/contacts\/&quot;,&quot;current&quot;:false,&quot;items_count&quot;:null,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:null},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:&quot;&lt;div class=\&quot;ammenu-view-all-mobile-link\&quot;&gt;\r\n &lt;a class=\&quot;ammenu-link view-all\&quot;\r\n href=\&quot;\/magento-services.html\&quot;\r\n aria-label=\&quot;Go to All Services\&quot;\r\n title=\&quot;Go to All Services\&quot;\r\n role=\&quot;link\&quot;\r\n tabindex=\&quot;0\&quot;\r\n &gt;\r\n All Services\r\n &lt;\/a&gt;\r\n&lt;\/div&gt;\r\n\r\n &lt;div class=\&quot;ammenu-widget-wrapper block widget mega-menu-products-list\&quot; data-amsite-js=\&quot;top-product-widget\&quot;&gt; &lt;div class=\&quot;block-title\&quot;&gt;Featured Services&lt;\/div&gt; &lt;div class=\&quot;block-content\&quot;&gt;&lt;ul class=\&quot;widget-product-items\&quot;&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-optimization-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;Optimization&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-optimization-service_63f5d17699021.png\&quot; alt=\&quot;Magento Optimization Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento Optimization Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;2&#x20;Support&#x20;and&#x20;Maintenance&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-support-and-maintenance-service_64c2674727566.png\&quot; alt=\&quot;Magento 2 Support and Maintenance Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento 2 Support and Maintenance Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-website-development-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;Website&#x20;Development\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-website-development-service_64be2084385cb.png\&quot; alt=\&quot;Magento Website Development\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento Website Development&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-2-upgrade-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;2&#x20;Upgrade&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-upgrade-service_61a5e5cfefab3.png\&quot; alt=\&quot;Magento 2 Upgrade Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento 2 Upgrade Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-to-shopify-migration-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;to&#x20;Shopify&#x20;Migration&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon-magento-to-shopify-migration-for-magento-2.png\&quot; alt=\&quot;Magento to Shopify Migration Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento to Shopify Migration Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;\/ul&gt;&lt;\/div&gt; &lt;a href=\&quot;\/magento-services.html\&quot; class=\&quot;block-link-below\&quot; tabindex=\&quot;0\&quot; title=\&quot;View&#x20;All&#x20;BestSellers\&quot;&gt;View All BestSellers&lt;\/a&gt; &lt;\/div&gt;\r\n\r\n\r\n&quot;,&quot;type&quot;:{&quot;value&quot;:1,&quot;label&quot;:&quot;vertical&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;High-Demand Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-111&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-development-services.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:4,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-development.html&quot;,&quot;name&quot;:&quot;Magento Custom Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-optimization-service.html&quot;,&quot;name&quot;:&quot;Magento Optimization&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-upgrade-service.html&quot;,&quot;name&quot;:&quot;Magento 2 Upgrade Service&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;10%&quot;,&quot;label_text_color&quot;:&quot;#ffffff&quot;,&quot;label_background_color&quot;:&quot;#f9425a&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/website-development-service.html&quot;,&quot;name&quot;:&quot;Custom Website Development Services&quot;}],&quot;label&quot;:{&quot;label&quot;:&quot;TOP&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;},&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Magento Development Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-84&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-development-services.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:17,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-website-development-service.html&quot;,&quot;name&quot;:&quot;Magento Website Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-mobile-app-development-service.html&quot;,&quot;name&quot;:&quot;Magento Mobile App Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-code-audit-service.html&quot;,&quot;name&quot;:&quot;Magento Code Audit&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-outsourcing-services.html&quot;,&quot;name&quot;:&quot;Magento Outsourcing Services&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Hyva Development Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-108&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-hyva-theme-development-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:3,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-hyva-theme-development-service.html&quot;,&quot;name&quot;:&quot;Hyva Theme Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/hyva-theme-migration-service.html&quot;,&quot;name&quot;:&quot;Hyva Theme Migration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-hyva-theme-customization-service.html&quot;,&quot;name&quot;:&quot;Hyva Theme Customization&quot;}],&quot;label&quot;:{&quot;label&quot;:&quot;HOT&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;},&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Magento Optimization Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-85&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-optimization-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:6,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-performance-audit.html&quot;,&quot;name&quot;:&quot;Magento Performance Audit&quot;,&quot;label&quot;:{&quot;label&quot;:&quot;FREE&quot;,&quot;label_text_color&quot;:&quot;#ffffff&quot;,&quot;label_background_color&quot;:&quot;#4d91f8&quot;}},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-seo-services.html&quot;,&quot;name&quot;:&quot;Magento SEO Services&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/website-ui-ux-audit.html&quot;,&quot;name&quot;:&quot;Website UI\/UX Audit&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Magento Maintenance Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-86&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:6,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html&quot;,&quot;name&quot;:&quot;Magento 2 Support and Maintenance&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/installation-service.html&quot;,&quot;name&quot;:&quot;Installation Service&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-security-patch.html&quot;,&quot;name&quot;:&quot;Magento Security Patch Installation&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Magento Upgrade Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-87&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-upgrade-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:5,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-1-to-2-migration-service.html&quot;,&quot;name&quot;:&quot;Magento 1 to 2 Migration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-server-configuration-and-migration-service.html&quot;,&quot;name&quot;:&quot;Magento Server Configuration and Migration&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Magento Integration Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-89&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-integration-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:7,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/amazon-integration-for-magento-2.html&quot;,&quot;name&quot;:&quot;Magento 2 Amazon Integration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-microsoft-dynamics-integration-service.html&quot;,&quot;name&quot;:&quot;Magento 2 Microsoft Integration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/sap-integration-services-magento.html&quot;,&quot;name&quot;:&quot;Magento 2 SAP Integration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-2-salesforce-integration-service.html&quot;,&quot;name&quot;:&quot;Magento 2 Salesforce Integration&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Managed Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-115&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/managed-it-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:4,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/managed-ecommerce-service.html&quot;,&quot;name&quot;:&quot;E-commerce Managed Services&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/managed-security-service.html&quot;,&quot;name&quot;:&quot;Managed Security Services&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/managed-magento-service.html&quot;,&quot;name&quot;:&quot;Magento Managed Services&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Shopify Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-90&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/shopify-website-development-service.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:11,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-to-shopify-migration-service.html&quot;,&quot;name&quot;:&quot;Magento to Shopify Migration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/custom-shopify-theme-development-service.html&quot;,&quot;name&quot;:&quot;Custom Shopify Theme Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shopify-app-development-service.html&quot;,&quot;name&quot;:&quot;Shopify App Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shopify-site-speed-optimization-service.html&quot;,&quot;name&quot;:&quot;Shopify Speed Optimization&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shopify-to-woocommerce-migration-service.html&quot;,&quot;name&quot;:&quot;Shopify to WooCommerce Migration&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/shopify-integration-service.html&quot;,&quot;name&quot;:&quot;Shopify Integration&quot;}],&quot;label&quot;:{&quot;label&quot;:&quot;HOT&quot;,&quot;label_text_color&quot;:&quot;#1a1a1a&quot;,&quot;label_background_color&quot;:&quot;#ffed11&quot;},&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;E-Commerce Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-92&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-services.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:5,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/e-commerce-site-development-service.html&quot;,&quot;name&quot;:&quot;E-commerce Site Development&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/hire-magento-experts-business-models.html&quot;,&quot;name&quot;:&quot;Service Pricing Models&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/ecommerce-website-redesign-services.html&quot;,&quot;name&quot;:&quot;E-commerce Website Redesign&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;QA Testing Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-93&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/qa-testing-services.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:2,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/qa-for-ecommerce-business-service.html&quot;,&quot;name&quot;:&quot;E-commerce QA testing&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Hire Developers&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-94&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:null,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/hire-developers.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:7,&quot;top_products&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/hire-php-developer.html&quot;,&quot;name&quot;:&quot;Hire PHP Developer&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/hire-certified-magento-2-developers.html&quot;,&quot;name&quot;:&quot;Hire Magento 2 Developer&quot;},{&quot;url&quot;:&quot;https:\/\/amasty.com\/hire-shopify-developers.html&quot;,&quot;name&quot;:&quot;Hire Shopify Developers&quot;}],&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;}],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Services&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-37&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;3&quot;,&quot;content&quot;:&quot;&lt;div class=\&quot;ammenu-dropdown-wrapper -desktop\&quot;&gt;\r\n &lt;div class=\&quot;left-side\&quot;&gt;\r\n &lt;a href=\&quot;https:\/\/amasty.com\/magento-2-upgrade-service.html?utm_source=menu&amp;utm_medium=widget&amp;utm_campaign=services_banner\&quot;&gt;&lt;img src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/wysiwyg\/amasty\/banner-upgrade-service_png.webp\&quot; alt=\&quot;banner-review\&quot; style=\&quot;margin-bottom: 30px;\&quot;&gt;&lt;\/a&gt;\r\n &lt;!-- &lt;div class=\&quot;ammenu-widget-wrapper block widget mega-menu-products-list\&quot; data-amsite-js=\&quot;top-product-widget\&quot;&gt; &lt;div class=\&quot;block-title\&quot;&gt;TOP-4 Amasty services&lt;\/div&gt; &lt;div class=\&quot;block-content\&quot;&gt;&lt;ul class=\&quot;widget-product-items\&quot;&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-optimization-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;Optimization&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-optimization-service_63f5d17699021_png.webp\&quot; alt=\&quot;Magento Optimization Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento Optimization Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;2&#x20;Support&#x20;and&#x20;Maintenance&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-support-and-maintenance-service_64c2674727566_png.webp\&quot; alt=\&quot;Magento 2 Support and Maintenance Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento 2 Support and Maintenance Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-website-development-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;Website&#x20;Development\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-website-development-service_64be2084385cb_png.webp\&quot; alt=\&quot;Magento Website Development\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento Website Development&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;li class=\&quot;product-item\&quot;&gt;&lt;a href=\&quot;https:\/\/amasty.com\/magento-2-upgrade-service.html\&quot; class=\&quot;item-link\&quot; tabindex=\&quot;0\&quot; role=\&quot;link\&quot; title=\&quot;Go to Magento&#x20;2&#x20;Upgrade&#x20;Service\&quot;&gt; &lt;span class=\&quot;product-image-container\&quot; style=\&quot;width:160px;\&quot;&gt;&lt;span class=\&quot;product-image-wrapper\&quot; style=\&quot;padding-bottom: 100%;\&quot;&gt;&lt;img class=\&quot;product-image-photo\&quot; src=\&quot;https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-upgrade-service_61a5e5cfefab3_png.webp\&quot; alt=\&quot;Magento 2 Upgrade Service\&quot;\/&gt;&lt;\/span&gt;&lt;\/span&gt; &lt;div class=\&quot;product-item-name\&quot;&gt;&lt;span class=\&quot;ammenu-text\&quot;&gt;Magento 2 Upgrade Service&lt;\/span&gt; &lt;span class=\&quot;ammenu-label\&quot;&gt;TOP&lt;\/span&gt;&lt;\/div&gt;&lt;\/a&gt;&lt;\/li&gt; &lt;\/ul&gt;&lt;\/div&gt;&lt;\/div&gt; --&gt;\r\n &lt;button class=\&quot;amform-show-popup-imitation\&quot;&gt;Show Form&lt;\/button&gt;\r\n &lt;\/div&gt;\r\n &lt;div class=\&quot;right-side\&quot;&gt;\r\n &lt;!-- ko scope: \&quot;index = ammenu_columns_wrapper\&quot; --&gt; &lt;!-- ko template: getTemplate() --&gt;&lt;!-- \/ko --&gt; &lt;!-- \/ko --&gt;\r\n &lt;\/div&gt;\r\n&lt;\/div&gt;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/magento-services.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:75,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;fade_in&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:700,&quot;mobile_font&quot;:700,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Shopify Apps&quot;,&quot;is_category&quot;:true,&quot;id&quot;:&quot;category-node-107&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;4&quot;,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/shopify-apps.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:0,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:null},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;700&quot;,&quot;mobile_font&quot;:&quot;700&quot;,&quot;icon&quot;:&quot;https:\/\/cdn.amasty.com\/media\/amasty\/ammegamenu\/Heart_2x_1.jpg&quot;,&quot;icon_extension&quot;:&quot;jpg&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Special Offers&quot;,&quot;is_category&quot;:false,&quot;id&quot;:&quot;custom-node-1&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;6&quot;,&quot;content&quot;:&quot;&lt;div class=\&quot;ammenu-custom-container -full -loyalty\&quot; &gt;\r\n &lt;ul class=\&quot;ammenu-items\&quot;&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Amasty Special Offers page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuOffers\&quot; href=\&quot;\/amasty-promo.html\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Special Offers&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to AmastyAll Bundles page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuOffers\&quot; href=\&quot;\/all-magento-2-bundles\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;All Bundles&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Replace Third-Party Modules Offer page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuOffers\&quot; href=\&quot;\/amasty-only-offer\/\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Replace Modules Offer&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Custom Bundle page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuOffers\&quot; href=\&quot;\/custom-bundle.html\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Custom Bundle Offer&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n&lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Free Resources page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuOffers\&quot; href=\&quot;\/free-magento-resources\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Free Resources&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n &lt;\/ul&gt;\r\n&lt;\/div&gt;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/amasty-promo.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:&quot;0&quot;,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;400&quot;,&quot;mobile_font&quot;:&quot;400&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Loyalty Programs&quot;,&quot;is_category&quot;:false,&quot;id&quot;:&quot;custom-node-11&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;7&quot;,&quot;content&quot;:&quot;&lt;div class=\&quot;ammenu-custom-container -full -loyalty\&quot; &gt;\r\n &lt;ul class=\&quot;ammenu-items\&quot;&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Amasty Loyalty Program page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuLoyalty\&quot; href=\&quot;\/amasty-loyalty-program.html\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Amasty Loyalty Program&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Partner Program page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuLoyalty\&quot; href=\&quot;\/partnership-program.html\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Partner Program&lt;\/span&gt; &lt;\/a&gt;&lt;\/li&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Affiliate Program page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuLoyalty\&quot; href=\&quot;\/affiliate-program.html\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Affiliate Program&lt;\/span&gt;&lt;\/a&gt;&lt;\/li&gt;\r\n &lt;li class=\&quot;ammenu-wrapper category-item\&quot;&gt;&lt;a class=\&quot;ammenu-link\&quot; title=\&quot;go to Official Partners page\&quot; analytics-custom-menu-items=\&quot;DropDownMenuLoyalty\&quot; href=\&quot;\/partners.html\&quot;&gt;&lt;span class=\&quot;ammenu-wrapper\&quot;&gt;Official Partners&lt;\/span&gt;&lt;\/a&gt;&lt;\/li&gt;\r\n &lt;\/ul&gt;\r\n&lt;\/div&gt;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/amasty-loyalty-program.html&quot;,&quot;current&quot;:false,&quot;items_count&quot;:&quot;0&quot;,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;400&quot;,&quot;mobile_font&quot;:&quot;400&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;Blog&quot;,&quot;is_category&quot;:false,&quot;id&quot;:&quot;custom-node-2&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;8&quot;,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/blog\/&quot;,&quot;current&quot;:false,&quot;items_count&quot;:&quot;0&quot;,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;},{&quot;show_mobile_content&quot;:0,&quot;mobile_content&quot;:null,&quot;type&quot;:{&quot;value&quot;:0,&quot;label&quot;:&quot;do not show&quot;},&quot;submenu_type&quot;:false,&quot;width&quot;:0,&quot;width_value&quot;:0,&quot;column_count&quot;:4,&quot;hide_content&quot;:false,&quot;desktop_font&quot;:&quot;400&quot;,&quot;mobile_font&quot;:&quot;400&quot;,&quot;elems&quot;:[],&quot;__disableTmpl&quot;:true,&quot;name&quot;:&quot;FAQ&quot;,&quot;is_category&quot;:false,&quot;id&quot;:&quot;custom-node-10&quot;,&quot;status&quot;:1,&quot;sort_order&quot;:&quot;9&quot;,&quot;content&quot;:&quot;&quot;,&quot;url&quot;:&quot;https:\/\/amasty.com\/knowledge-base\/&quot;,&quot;current&quot;:false,&quot;items_count&quot;:&quot;0&quot;,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:&quot;none&quot;}],&quot;__disableTmpl&quot;:true,&quot;name&quot;:null,&quot;is_category&quot;:null,&quot;id&quot;:null,&quot;status&quot;:0,&quot;sort_order&quot;:null,&quot;content&quot;:null,&quot;url&quot;:null,&quot;current&quot;:false,&quot;items_count&quot;:null,&quot;hide_mobile_content&quot;:false,&quot;submenu_animation&quot;:null}, config: {&quot;is_hamburger&quot;:false,&quot;color_settings&quot;:{&quot;color_template&quot;:&quot;custom&quot;,&quot;main_menu_background&quot;:&quot;#fff&quot;,&quot;main_menu_background_hover&quot;:&quot;#FFFFFF&quot;,&quot;main_menu_text&quot;:&quot;#1a1a1a&quot;,&quot;main_menu_text_hover&quot;:&quot;#FF5B0F&quot;,&quot;submenu_background_color&quot;:&quot;#fff&quot;,&quot;submenu_background_image&quot;:&quot;&quot;,&quot;submenu_text&quot;:&quot;#1a1a1a&quot;,&quot;submenu_text_hover&quot;:&quot;#FF5B0F&quot;,&quot;current_category_color&quot;:&quot;#ff5b0f&quot;,&quot;toggle_icon_color&quot;:&quot;#1a1a1a&quot;,&quot;hamburger_icon_color&quot;:&quot;#1a1a1a&quot;},&quot;mobile_menu_title&quot;:&quot;&quot;,&quot;mobile_menu_width&quot;:1023,&quot;welcome_message&quot;:{&quot;message&quot;:&quot;Default welcome msg!&quot;},&quot;invitation_url&quot;:&quot;&quot;,&quot;hide_view_all_link&quot;:true,&quot;mobile_class&quot;:&quot;drill&quot;,&quot;is_sticky&quot;:1,&quot;is_icons_available&quot;:&quot;both&quot;,&quot;animation_time&quot;:0.2,&quot;hamburger_animation&quot;:&quot;none&quot;}, children: [], settings: {&quot;account&quot;:{&quot;is_logged_in&quot;:false,&quot;login&quot;:&quot;https:\/\/amasty.com\/customer\/account\/login\/&quot;,&quot;create&quot;:&quot;https:\/\/amasty.com\/customer\/account\/create\/&quot;,&quot;logout&quot;:&quot;https:\/\/amasty.com\/customer\/account\/logout\/&quot;,&quot;account&quot;:&quot;https:\/\/amasty.com\/customer\/account\/&quot;},&quot;switcher&quot;:{&quot;current_code&quot;:&quot;default&quot;,&quot;current_name&quot;:&quot;Amasty Store&quot;,&quot;current_store_id&quot;:&quot;1&quot;,&quot;items&quot;:[{&quot;url&quot;:&quot;https:\/\/amasty.com\/stores\/store\/redirect\/___store\/default\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL2Nyb3NzLWxpbmtpbmctZm9yLW1hZ2VudG8tMi5odG1s\/___from_store\/default\/&quot;,&quot;code&quot;:&quot;default&quot;,&quot;name&quot;:&quot;Amasty Store&quot;}]},&quot;currency&quot;:[{&quot;data-post&quot;:&quot;{\&quot;action\&quot;:\&quot;https:\\\/\\\/amasty.com\\\/directory\\\/currency\\\/switch\\\/\&quot;,\&quot;data\&quot;:{\&quot;currency\&quot;:\&quot;GBP\&quot;}}&quot;,&quot;name&quot;:&quot;British Pound&quot;,&quot;code&quot;:&quot;GBP&quot;,&quot;code_title&quot;:&quot;GBP&quot;,&quot;current_currency&quot;:false},{&quot;data-post&quot;:&quot;{\&quot;action\&quot;:\&quot;https:\\\/\\\/amasty.com\\\/directory\\\/currency\\\/switch\\\/\&quot;,\&quot;data\&quot;:{\&quot;currency\&quot;:\&quot;EUR\&quot;}}&quot;,&quot;name&quot;:&quot;Euro&quot;,&quot;code&quot;:&quot;EUR&quot;,&quot;code_title&quot;:&quot;EUR&quot;,&quot;current_currency&quot;:false},{&quot;data-post&quot;:&quot;{\&quot;action\&quot;:\&quot;https:\\\/\\\/amasty.com\\\/directory\\\/currency\\\/switch\\\/\&quot;,\&quot;data\&quot;:{\&quot;currency\&quot;:\&quot;USD\&quot;}}&quot;,&quot;name&quot;:&quot;US Dollar&quot;,&quot;code&quot;:&quot;USD&quot;,&quot;code_title&quot;:&quot;USD&quot;,&quot;current_currency&quot;:true}]}, links: [] } } } }"> <!-- ko if: !$data.isMobile() --><section class="ammenu-nav-sections -topmenu "><nav class="ammenu-main-container" aria-label="Main Menu" role="navigation" data-action="navigation" style=" background: &#x23;fff; color: &#x23;1a1a1a;"><ul class="ammenu-items -root" role="menubar"> <li class="ammenu-item category-item magento® 2 extensions" data-bind=" scope: 'ammenu_topmenu_item_0', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_0': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 0, id: 'category-node-25' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Magento® 2 Extensions</span> <span class="ammenu-count">261</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item suites" data-bind=" scope: 'ammenu_topmenu_item_1', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_1': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 1, id: 'category-node-71' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Suites</span> <span class="ammenu-count">43</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item support" data-bind=" scope: 'ammenu_topmenu_item_2', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_2': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 2, id: 'custom-node-4' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Support</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item services" data-bind=" scope: 'ammenu_topmenu_item_3', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_3': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 3, id: 'category-node-37' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Services</span> <span class="ammenu-count">75</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item shopify apps" data-bind=" scope: 'ammenu_topmenu_item_4', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_4': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 4, id: 'category-node-107' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Shopify Apps</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item special offers" data-bind=" scope: 'ammenu_topmenu_item_5', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_5': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 5, id: 'custom-node-1' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <figure class="ammenu-icon-block -icon" style=" -webkit-mask-image: url&#x28;https&#x3A;&#x2F;&#x2F;cdn.amasty.com&#x2F;media&#x2F;amasty&#x2F;ammegamenu&#x2F;Heart_2x_1.jpg&#x29;; maskImage: url&#x28;https&#x3A;&#x2F;&#x2F;cdn.amasty.com&#x2F;media&#x2F;amasty&#x2F;ammegamenu&#x2F;Heart_2x_1.jpg&#x29;; background-color: &#x23;1a1a1a; background-image: url&#x28;https&#x3A;&#x2F;&#x2F;cdn.amasty.com&#x2F;media&#x2F;amasty&#x2F;ammegamenu&#x2F;Heart_2x_1.jpg&#x29;; " data-bind=" style: { 'background-color': item.color() && item.icon ? item.color() : '' } "></figure> <p class="ammenu-text-block"><span class="ammenu-text">Special Offers</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item loyalty programs" data-bind=" scope: 'ammenu_topmenu_item_6', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_6': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 6, id: 'custom-node-11' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 400" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Loyalty Programs</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item blog" data-bind=" scope: 'ammenu_topmenu_item_7', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_7': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 7, id: 'custom-node-2' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 400" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Blog</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item faq" data-bind=" scope: 'ammenu_topmenu_item_8', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_8': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 8, id: 'custom-node-10' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 400" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">FAQ</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> </ul></nav></section><!-- /ko --> <!-- ko if: $data.isMobile() || $data.is_hamburger --><!-- ko scope: 'index = ammenu_sidebar_menu_wrapper' --><!-- ko template: getTemplate() --><!-- /ko --><!-- /ko --><!-- /ko --></section></header> <div class="breadcrumbs"></div><main id="maincontent" class="page-main"><div class="page messages"> <div data-placeholder="messages"></div> <div data-bind="scope: 'messages'" data-amtheme-js="page-messages"><div class="amtheme-messages" data-amtheme-js="amtheme-messages" data-bind="css: { '-sticky-message': isMessageSticky(), '-visible': isVisible() }"><!-- ko if: cookieMessages && cookieMessages.length > 0 --><div aria-atomic="true" role="alert" class="messages" data-bind="foreach: { data: cookieMessages, as: 'message' }"><div data-amtheme-js="message" data-bind="afterRender: $parent.autoHideMessage($element), attr: { class: 'message-' + message.type + ' ' + message.type + ' message', 'data-ui-id': 'message-' + message.type }"><div class="flex items-center max-w-78 mx-auto"><!-- ko if: message.type === 'success' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#064E3B" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" /></svg><!-- /ko --><!-- ko if: message.type === 'error' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#881337" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg><!-- /ko --><!-- ko if: message.type === 'notice' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#1E3A8A" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><!-- ko if: message.type === 'info' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#1E3A8A" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><!-- ko if: message.type === 'warning' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#78350F" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><div data-bind="html: $parent.prepareMessageForHtml(message.text)" class="message-text"></div><button type="button" aria-label="Close Message" class="message-close hover:text-black message-svg-icon" data-amtheme-js="message-close" data-bind="click: $parent.hideMessage.bind($parent, $element), css: { 'text-red-900': message.type === 'error', 'text-emerald-900': message.type === 'success', 'text-amber-900': message.type === 'warning', 'text-blue-900': (message.type === 'info' || message.type === 'notice')}"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /></svg></button></div></div></div><!-- /ko --><!-- ko if: messages().messages && messages().messages.length > 0 --><div aria-atomic="true" role="alert" class="messages" data-bind="foreach: { data: messages().messages, as: 'message' }"><div data-amtheme-js="message" data-bind="afterRender: $parent.autoHideMessage($element), attr: { class: 'message-' + message.type + ' ' + message.type + ' message', 'data-ui-id': 'message-' + message.type }"><div class="flex items-center max-w-78 mx-auto"><!-- ko if: message.type === 'success' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#064E3B" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" /></svg><!-- /ko --><!-- ko if: message.type === 'error' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#881337" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg><!-- /ko --><!-- ko if: message.type === 'notice' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#1E3A8A" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><!-- ko if: message.type === 'info' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#1E3A8A" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><!-- ko if: message.type === 'warning' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#78350F" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><span data-bind="html: $parent.prepareMessageForHtml(message.text)" class="message-text"></span> <button type="button" aria-label="Close Message" class="message-close hover:text-black message-svg-icon" data-amtheme-js="message-close" data-bind="click: $parent.hideMessage.bind($parent, $element), css: { 'text-red-900': message.type === 'error', 'text-emerald-900': message.type === 'success', 'text-amber-900': message.type === 'warning', 'text-blue-900': (message.type === 'info' || message.type === 'notice')}"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /></svg></button></div></div></div><!-- /ko --></div></div> <script data-info="not-move-to-bottom"> function initMessages() { "use strict"; return { messages: window.mageMessages || [], isEmpty() { return this.messages.reduce( function (isEmpty, message) { return isEmpty && message === undefined }, true ) }, removeMessage(messageIndex) { this.messages[messageIndex] = undefined; }, addMessages(messages, hideAfter) { messages.map((message) => { this.messages = this.messages.concat(message); if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) { hideAfter = window.defaultSuccessMessageTimeout; } if (hideAfter) { this.setHideTimeOut(this.messages.length -1, hideAfter); } }); }, setHideTimeOut(messageIndex, hideAfter) { setTimeout((messageIndex) => { this.removeMessage(messageIndex); }, hideAfter, messageIndex); }, eventListeners: { ['@messages-loaded.window'](event) { this.addMessages(event.detail.messages, event.detail.hideAfter) }, ['@private-content-loaded.window'](event) { const data = event.detail.data; if ( data.messages && data.messages.messages && data.messages.messages.length ) { this.addMessages(data.messages.messages); } }, ['@clear-messages.window']() { this.messages = []; } } } }</script><section id="messages" x-data="initMessages()" x-bind="eventListeners" aria-live="assertive" role="alert" ><template x-if="!isEmpty()"><div class="w-full"><div class="messages mx-auto"><template x-for="(message, index) in messages" :key="index"><div><template x-if="message"><div class="message" :class="message.type" :ui-id="'message-' + message.type" ><div class="flex items-center max-w-78 mx-auto"><template x-if="message.type === 'success'"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-emerald-900" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 12 2 2 4-4m6 2a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><title>check-circle</title></svg> </template><template x-if="message.type === 'error'"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-rose-900" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3Z"/><title>exclamation</title></svg> </template><template x-if="message.type === 'warning'"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-amber-900" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><title>exclamation-circle</title></svg> </template><template x-if="message.type === 'info' || message.type === 'notice'"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-blue-900" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><title>information-circle</title></svg> </template><span class="ml-2" x-html="message.text"></span> <button type="button" class="ml-auto p-0" :class="{ 'text-red-900': message.type === 'error', 'text-emerald-900': message.type === 'success', 'text-amber-900': message.type === 'warning', 'text-blue-900': (message.type === 'info' || message.type === 'notice') }" aria-label="Close message" @click.prevent="removeMessage(index)" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-current" width="20" height="20" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/></svg> </button></div></div></template></div></template></div></div></template></section></div> <a id="contentarea" tabindex="-1"></a><div class="columns"><div class="column main"><div class="amtheme-product-wrap"><div class="product media"> <a id="gallery-prev-area" tabindex="-1"></a><div class="action-skip-wrapper"> <a class="action skip gallery-next-area" href="#gallery-next-area"><span> Skip to the end of the images gallery</span></a></div> <div class="gallery-placeholder _block-content-loading -improve-desktop-view" data-gallery-role="gallery-placeholder"><img alt="main product photo" title="special-promotions-pro-for-magento-2_63ce747a9ad1e" class="lazy gallery-placeholder__image amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/catalog/product/cache/442addc013119a99308eafd27d784beb/s/p/special-promotions-pro-for-magento-2_63ce747a9ad1e.png" /> <div class="amsite-placeholder-items"> <img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/catalog/product/cache/d492300003ec9ae05261558b2c675287/s/p/special-promotions-pro-for-magento-2_63ce747a9ad1e.png" alt=""> <img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/catalog/product/cache/d492300003ec9ae05261558b2c675287/s/p/special-promotions-pro-for-magento-2_661f84ad3f2b7.png" alt=""> <img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/catalog/product/cache/d492300003ec9ae05261558b2c675287/s/p/special-promotions-pro-for-magento-2_661f84ad3f854.png" alt=""></div></div> <div class="amasty-label-container amasty-label-container-13-649-prod amasty-label-for-649" style="display: none; " data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "prod", "isAdminArea": "", "config": {"position":"top-left","size":"","path":".fotorama__stage, #amasty-main-container","mode":"prod","move":0,"product":"649","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "649", "selector": ".amasty-label-container-13-649-prod" }}'><div class="amlabel-text"></div></div> <div class="action-skip-wrapper"> <a class="action skip gallery-prev-area" href="#gallery-prev-area"><span> Skip to the beginning of the images gallery</span></a></div> <a id="gallery-next-area" tabindex="-1"></a> <div class="amsite-after-gallery"><div class="links-wrapper "> <div class="amsite-product-link amsite-explore-demo"><button type="button" title="Explore&#x20;Demo" aria-label="Explore&#x20;Demo" class="action outline -with-icon -icon-left" data-amsite-analytics-js="explore-demo-product-page" data-product-name-analytics="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" data-amsite-js="explore-demo"><svg class="amtheme-icon -monitor" data-amsite-analytics-js="explore-demo-product-page" data-product-name-analytics="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" focusable="false"><use xlink:href="#icon-monitor"/></svg>Explore Demo</button> <div class="amsite-demo-links dropdown dropdown-switcher" data-role="dropdownDialog" data-mage-init='{"amsiteExploreDemoDropdown":{}}'><svg class="amsite-close amtheme-icon" data-amtheme-js="svg" data-amsite-js="close-dropdown"><use xlink:href="#icon-close" data-amtheme-js="id"></use></svg><ul class="items"> <li class="item"><a href="https://special-promotions-pro-m2.magento-demo.amasty.com/admin/sales_rule/promo_quote/" class="amsite-link" title="Promotions&#x20;Grid" aria-label="Promotions&#x20;Grid" target="_blank">Promotions Grid</a> <span class="amsite-label"> See the examples of the rules you can create </span></li> <li class="item"><a href="https://special-promotions-pro-m2.magento-demo.amasty.com/affirm-water-bottle.html" class="amsite-link" title="&#x27;Buy&#x20;One&#x20;Get&#x20;One&#x20;Free&#x27;&#x20;rule&#x20;on&#x20;the&#x20;frontend" aria-label="&#x27;Buy&#x20;One&#x20;Get&#x20;One&#x20;Free&#x27;&#x20;rule&#x20;on&#x20;the&#x20;frontend" target="_blank">&#039;Buy One Get One Free&#039; rule on the frontend</a> <span class="amsite-label"> Add 2 bottles to cart and one of them will be for free</span></li> <li class="item"><a href="https://special-promotions-pro-m2.magento-demo.amasty.com/women/tops-women/hoodies-and-sweatshirts-women.html" class="amsite-link" title="&#x27;The&#x20;Cheapest,&#x20;also&#x20;buy&#x20;1&#x20;get&#x20;1&#x20;free&#x27;&#x20;rule&#x20;on&#x20;the&#x20;frontend" aria-label="&#x27;The&#x20;Cheapest,&#x20;also&#x20;buy&#x20;1&#x20;get&#x20;1&#x20;free&#x27;&#x20;rule&#x20;on&#x20;the&#x20;frontend" target="_blank">&#039;The Cheapest, also buy 1 get 1 free&#039; rule on the frontend</a> <span class="amsite-label">&#039;Buy 3 and get the cheapest with 30% off&#039; rule (use the coupon CHEAPEST)</span></li> </ul></div></div><!-- For case add demo links to sticky add to cart --><div class="amsite-product-link amsite-explore-demo -for-sticky" data-amsite-js="explore-demo-sticky-wrapper"><button type="button" title="Explore&#x20;Demo" aria-label="Explore&#x20;Demo" class="action outline -with-icon -icon-left" data-amsite-analytics-js="explore-demo-product-page" data-product-name-analytics="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" data-amsite-js="explore-demo-sticky"><svg class="amtheme-icon -monitor" data-amsite-analytics-js="explore-demo-product-page" data-product-name-analytics="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" focusable="false"><use xlink:href="#icon-monitor"/></svg>Explore Demo</button> <div class="amsite-demo-links dropdown dropdown-switcher" data-role="dropdownDialog" data-mage-init='{"amsiteExploreDemoDropdown":{"dropdownConfig":{"appendTo": "[data-amsite-js=explore-demo-sticky-wrapper]", "triggerTarget": "[data-amsite-js=explore-demo-sticky]"}}}'><svg class="amsite-close amtheme-icon" data-amtheme-js="svg" data-amsite-js="close-dropdown"><use xlink:href="#icon-close" data-amtheme-js="id"></use></svg><ul class="items"> <li class="item"><a href="https://special-promotions-pro-m2.magento-demo.amasty.com/admin/sales_rule/promo_quote/" class="amsite-link" title="Promotions&#x20;Grid" aria-label="Promotions&#x20;Grid" target="_blank">Promotions Grid</a> <span class="amsite-label"> See the examples of the rules you can create </span></li> <li class="item"><a href="https://special-promotions-pro-m2.magento-demo.amasty.com/affirm-water-bottle.html" class="amsite-link" title="&#x27;Buy&#x20;One&#x20;Get&#x20;One&#x20;Free&#x27;&#x20;rule&#x20;on&#x20;the&#x20;frontend" aria-label="&#x27;Buy&#x20;One&#x20;Get&#x20;One&#x20;Free&#x27;&#x20;rule&#x20;on&#x20;the&#x20;frontend" target="_blank">&#039;Buy One Get One Free&#039; rule on the frontend</a> <span class="amsite-label"> Add 2 bottles to cart and one of them will be for free</span></li> <li class="item"><a href="https://special-promotions-pro-m2.magento-demo.amasty.com/women/tops-women/hoodies-and-sweatshirts-women.html" class="amsite-link" title="&#x27;The&#x20;Cheapest,&#x20;also&#x20;buy&#x20;1&#x20;get&#x20;1&#x20;free&#x27;&#x20;rule&#x20;on&#x20;the&#x20;frontend" aria-label="&#x27;The&#x20;Cheapest,&#x20;also&#x20;buy&#x20;1&#x20;get&#x20;1&#x20;free&#x27;&#x20;rule&#x20;on&#x20;the&#x20;frontend" target="_blank">&#039;The Cheapest, also buy 1 get 1 free&#039; rule on the frontend</a> <span class="amsite-label">&#039;Buy 3 and get the cheapest with 30% off&#039; rule (use the coupon CHEAPEST)</span></li> </ul></div></div> <div class="amsite-product-link -user-guide"><a href="https://amasty.com/docs/doku.php?id=magento_2:special-promotions" title="User&#x20;Guide" aria-label="User&#x20;Guide" class="action outline -with-icon" target="_blank">User Guide <svg class="amtheme-icon -external" focusable="false"><use xlink:href="#icon-external-link"/></svg></a></div> <div class="amsite-product-link -youtube"><button type="button" title="Explore&#x20;Video" aria-label="Explore&#x20;Video" class="action outline" data-amsite-analytics-js="open-popup-youtube-video" btn-fancybox-popup="fancybox-youtube-container" >Explore Video</button></div></div> <div class="amsite-compatibility"><svg class="amtheme-icon -magento-icon" focusable="false"><use xlink:href="#icon-magento-logo"/></svg>2.4.7-p4; 2.4.6-p9; 2.4.5-p11</div> <div class="amsite-trust-budgets"> <div class="magezon-builder magezon-builder-preload"><div class="npd0p9m mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner npd0p9m-s"><div class="inner-content mgz-container"><div class="glt9fpa mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner glt9fpa-s"><div class="nsvl04k mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner nsvl04k-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/marketing/trust-badges/v2._marketplace_approved.png" alt="v2._marketplace_approved" title="" /></div></div></div></div></div></div><div class="w72l3cp mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner w72l3cp-s"><div class="w3n2nxy mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner w3n2nxy-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/marketing/trust-badges/api-support-1.png" alt="api-support-1" title="" /></div></div></div></div></div></div><div class="pu3k1sk mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner pu3k1sk-s"><div class="p7387w6 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner p7387w6-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/marketing/trust-badges/hyva-default.png" alt="hyva-default" title="" /></div></div></div></div></div></div><div class="qv7q7ox mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner qv7q7ox-s"><div class="ttk8doy mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner ttk8doy-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/marketing/trust-badges/Mage-OS_Compatible.png" alt="Mage-OS_Compatible" title="" /></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="amtheme-product-info"><div class="amsite-product-title"> <div class="page-title-wrapper product"><h1 class="page-title" data-ui-id="page-title-wrapper" >Special Promotions Pro <span class="page-title-label">for Magento 2</span> </h1> </div> <div class="amsite-version-switcher"><a class="version-switcher" href="https://amasty.com/special-promotions-pro.html" title="see&#x20;M1&#x20;version" aria-label="see&#x20;M1&#x20;version"><span class="amsite-title">see M1 version</span> <svg class="amtheme-icon" focusable="false"><use xlink:href="#icon-arrow-right"/></svg></a></div></div><div class="amtheme-short-info"> <div class="product-reviews-summary short flex gap-2"><p class="mb-0 am-text-small font-bold">4.9</p><a href="https://amasty.com/special-promotions-pro-for-magento-2.html#reviews" class="flex max-w-[85px]" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </a> <a class="am-text-small link-as-text" data-amsite-js="scroll-open-tab" data-tab-destination="reviews" href="https://amasty.com/special-promotions-pro-for-magento-2.html#reviews" aria-label="Reviews" >17&nbsp;<span>Reviews</span></a></div></div><div class="product-info-main"> <div class="product attribute overview"> <div class="value" ><p>Add our Magento 2 Advanced Promotions extension to shape your discounts with clever conditions. Create promotions based on customers' info and purchase history. Use 20 actions to be sure that your promotions are unique and relevant. </p></div></div> <div class="amsite-features-block"><ul class="amsite-list"> <li class="item">Create 20+ promotion types for extraordinary deals</li> <li class="item">Use customer's attributes as rule conditions</li> <li class="item">Limit promotions based on customers' order history</li> <li class="item">Select the base price for discount calculation</li> <li class="item">Restrict promotions for products with special prices</li> <li class="item">Hyva-compatible by default</li> <li class="item">GraphQL Application Server compatible</li> <li class="item"><a href="https://calendly.com/yuliya-simakovich/book-a-demo" rel="nofollow"><b>⏱Book a live demo</b></a></li> </ul></div> <div class="below-short-description"><a href="#choose_option" data-promo-id="banners-special-promotions-pro-m2" data-promo-name="Banners at Special Promotions Pro M2" data-promo-creative="banner_see_subscription_options" data-promo-position="banner_short_description"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/marketing/m2/banners-for-compatibilities/pricing_options_small.png" data-srcset="https://cdn.amasty.com/media/marketing/m2/banners-for-compatibilities/pricing_options_small_2x.png 2x" alt="See available pricing options!" style="margin-bottom: 20px;"> </a></div> <div class="product-add-form -subscription-product"> <div class="product-sticky-add-form" data-mage-init='{"amStickyAddToCart":{ "selectors": { "productNameSource": "[data-ui-id=page-title-wrapper]" }, "isAjaxEnabled": "1", "ajaxAddToCartUrl": "https://amasty.com/amasty_jettheme/ajax/addToCart/", "prices": { "dataProductId": "649", "priceConfig": {"productId":649,"priceFormat":{"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":319,"adjustments":[]},"oldPrice":{"amount":319,"adjustments":[]},"basePrice":{"amount":319,"adjustments":[]},"finalPrice":{"amount":319,"adjustments":[]}},"idSuffix":"_clone","tierPrices":[],"calculationAlgorithm":"TOTAL_BASE_CALCULATION","baseOldPrice":{"amount":319,"adjustments":[]}} } }}' ></div> <form data-product-sku="special-promotions-pro-for-magento-2" data-amtheme-js="form" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s/product/649/" method="post" id="product_addtocart_form" data-product-name-analytics="Special Promotions Pro for Magento 2" ><input type="hidden" name="product" value="649" /><input type="hidden" name="selected_configurable_option" value="" /><input type="hidden" name="related_product" id="related-products-field" value="" /><input type="hidden" name="item" value="649" /><input name="form_key" type="hidden" value="MHGQ3iWjobpQ13yt" /> <div class="product-options-wrapper qty-round" id="product-options-wrapper" data-hasrequired="&#x2A;&#x20;Required&#x20;Fields"><div class="fieldset" tabindex="0"> <div class="swatch-opt -round" data-role="swatch-options"></div> <div class="amrec-product-view hidden "><div class="amrec-purchase-option"><div class="amrec-purchase-radio"><input type="radio" class="amrec-input -radio" name="subscribe" id="radio_subscribe_product" value="subscribe" data-amrec-js="purchase-type" data-validate="{'validate-one-required-by-name':true}" data-errors-message-box="[data-amrec-js='validation-error']" checked><label for="radio_subscribe_product" class="amrec-label"></label></div></div><div data-amrec-js="validation-error"></div></div></div></div> <div class="amtheme-add-form-bottom"> <div class="amsite-subscribe-product-info"><div class="amsite-price-license-info-wrapper"><!--start tmp block--> <div class="product-info-price"><div class="price-box price-final_price" data-role="priceBox" data-product-id="649" data-price-box="product-id-649"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-649" data-price-amount="319" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$319</span></span> </span></span> </div></div> <!--end tmp block--> <div class="amsite-product-license-block ml-3 -mt-1"><span>Transparent pricing </span> <span class="amsite-tooltip-container -mobile-bottom -desktop-right"><span class="tooltip-toggle"></span> <span class="tooltip-content -license-info">We believe in being open and honest with our customers. When you buy our module, you get one <span data-amsite-js="transparent-pricing-period"></span> of free support and updates. <br><br> <span class="block mb-1 font-bold">Here&#039;s what you get:</span> <span class="font-bold">Free updates for 1 <span data-amsite-js="transparent-pricing-period"></span>:</span> You&#039;ll receive the latest versions of the module at no extra cost. <br> <span class="font-bold">Free support: </span> Our team will help you with any questions or issues after your purchase. <br> <span class="font-bold">Cancel &amp; renew options: </span> You can cancel your subscription at any time and renew it later, but keep in mind that an additional fee will apply if you choose to renew.</span></span></div> </div> <div class="product-options-bottom"> <!--start tmp block--> <div class="box-tocart"><div class="fieldset"><div class="actions"><button type="submit" title="Add to Cart" class="action primary tocart" data-amtheme-js="addtocart-button" id="product-addtocart-button"><span class="amtheme-title">Add to Cart</span></button> <div id="instant-purchase" data-bind="scope:'instant-purchase'"><!-- ko template: getTemplate() --><!-- /ko --></div></div></div></div> <!--end tmp block--> <a href="#" class="action towishlist" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":649,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s"}}' data-action="add-to-wishlist" title="Add&#x20;to&#x20;Wish&#x20;List" aria-label="Add&#x20;to&#x20;Wish&#x20;List"><svg class="amtheme-icon -hover-bg"><use xlink:href="#icon-wishlist"/></svg><span class="amtheme-title">Add&#x20;to&#x20;Wish&#x20;List</span></a> </div> <div class="edition-type-wrapper" data-amsite-js="edition-type-wrapper"><div class="updates-info"><span data-amsite-js="period-support-and-updates">Product updates and support for 12 months</span></div><div class="after-info"><p class="after-price">Updates and support prolongation - <span class="old-price" data-amsite-js="recurring-old-price"></span> <span data-amsite-js="product-recurring-price">$195</span></p><span class="more-info" data-amtheme-js="subscription-more-info-open-"> more info </span></div><div class="amtheme-popup-block" tabindex="0" data-mage-init='{"amPopup":{"trigger": "subscription-more-info-open-"}}'><div class="popup-inner"><div class="amtheme-button-close" tabindex="0" title="Close" aria-label="Close" data-amtheme-js="popup-close"><svg class="amtheme-icon -icon-close"><use xlink:href="#icon-close" /></svg></div><div class="subscriptions-popup-details"><h2 class="title">Price details</h2><div class="product-info -first"><div class="row"><div class="name">Special Promotions Pro for Magento 2</div></div><div class="row"><div class="info" data-amsite-js="support-and-updates-popup-text">Product updates and support service subscription included</div></div></div><div class="product-info"><div class="row"><div class="name" data-amsite-js="price-paid-day">Price to be paid today</div><div class="price"><span class="old-price" data-amsite-js="full-old-final-price"></span> <b> <span data-amsite-js="product-final-price">$319</span></b></div></div><div class="row"><div class="info">Subscription for the following <span data-amsite-js="popup-periods-support">years</span></div><div class="period -time"><span class="summ"><span class="old-price" data-amsite-js="recurring-old-price"></span> <b> <span data-amsite-js="product-recurring-price-in-popup">$195</span></b></span> / <span class="year" data-amsite-js="popup-period-support">Year</span></div></div><div class="hidden text-right am-text-small text-secondary" data-amsite-js="start-subscription-period">starting Feb 26, 2025</div></div></div></div></div></div> </div> <div class="amtheme-actions-wrap"><div class="product-social-links"> <div class="product-addto-links" data-role="add-to-links"> </div></div></div> </div></form></div> </div></div></div> <div class="amrelated-pack-wrapper" data-amrelated-js="pack-wrapper" data-pack-id="59" id="amrelated-pack-59-67bef4ab3fd45"><h3 class="amrelated-title" data-amrelated-js="pack-title">Pick a combo deal with <span style="color:red;">15%</span> discount:</h3><div class="amrelated-content-wrapper"><div class="amrelated-pack-list -wide "> <div class="amrelated-pack-item -wide -discount-applied -main" data-amrelated-js="pack-item" data-item-role="main" data-product-id="649"><div class="amrelated-info"><div class="amrelated-photo-container"> <a href="https://amasty.com/special-promotions-pro-for-magento-2.html" title="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" aria-label="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" data-amsite-js="bundle-image-link" class="amrelated-link"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/4ff0f4765f9064797651333409ff491d/s/p/special-promotions-pro-for-magento-2_64d0cf2c44caf.png" class="lazy amrelated-photo" alt="Special Promotions Pro for Magento 2"></a> <div class="amrelated-discount -product" data-amrelated-js="item-price-discount">15% </div></div> <div class="amrelated-details"><div class="amrelated-name"><a title="Special&#x20;Promotions&#x20;Pro&#x20;M2" data-amsite-analytics-js="bundle-product-name" data-product-name-analytics="Special Promotions Pro M2" aria-label="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" href="https://amasty.com/special-promotions-pro-for-magento-2.html" class="amrelated-link">Special Promotions Pro M2</a></div> <div class="price-box"><div class="price-box price-final_price" data-role="priceBox" data-product-id="649" data-price-box="product-id-649"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-649" data-price-amount="319" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$319</span></span> </span></span> </div></div></div></div></div> <span class="amrelated-plus">+</span> <div class="amrelated-pack-items -selected" data-amrelated-js="pack-container"><div class="amrelated-background" data-amrelated-js="selected-background"></div> <div class="amrelated-pack-item -wide -discount-applied -selected" data-amrelated-js="pack-item" data-product-id="508"><div class="amrelated-info"><div class="amrelated-photo-container"> <input type="checkbox" class="amrelated-checkbox" id="amrelated-checkbox508-59-67bef4ab3fd45" name="amrelated_products[508]" data-amrelated-js="checkbox" checked="checked" value="1"/><label for="amrelated-checkbox508-59-67bef4ab3fd45" class="label"></label> <a href="https://amasty.com/free-gift-for-magento-2.html" title="Free&#x20;Gift&#x20;for&#x20;Magento&#x20;2" aria-label="Free&#x20;Gift&#x20;for&#x20;Magento&#x20;2" data-amsite-js="bundle-image-link" class="amrelated-link"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/4ff0f4765f9064797651333409ff491d/f/r/free-gift-for-magento-2_627a6860de3db.png" class="lazy amrelated-photo" alt="Free Gift for Magento 2"></a> <div class="amrelated-discount -product" data-amrelated-js="item-price-discount">15% </div></div> <div class="amrelated-details"><div class="amrelated-name"><a title="Free&#x20;Gift&#x20;M2" data-amsite-analytics-js="bundle-product-name" data-product-name-analytics="Free Gift M2" aria-label="Free&#x20;Gift&#x20;for&#x20;Magento&#x20;2" href="https://amasty.com/free-gift-for-magento-2.html" class="amrelated-link">Free Gift M2</a></div> <div class="price-box"><div class="price-box price-final_price" data-role="priceBox" data-product-id="508" data-price-box="product-id-508"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-508" data-price-amount="239" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$239</span></span> </span></span> </div></div></div></div></div> <span class="amrelated-plus">+</span> <div class="amrelated-pack-item -wide -discount-applied -selected" data-amrelated-js="pack-item" data-product-id="538"><div class="amrelated-info"><div class="amrelated-photo-container"> <input type="checkbox" class="amrelated-checkbox" id="amrelated-checkbox538-59-67bef4ab3fd45" name="amrelated_products[538]" data-amrelated-js="checkbox" checked="checked" value="1"/><label for="amrelated-checkbox538-59-67bef4ab3fd45" class="label"></label> <a href="https://amasty.com/product-labels-for-magento-2.html" title="Product&#x20;Labels&#x20;for&#x20;Magento&#x20;2" aria-label="Product&#x20;Labels&#x20;for&#x20;Magento&#x20;2" data-amsite-js="bundle-image-link" class="amrelated-link"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/4ff0f4765f9064797651333409ff491d/p/r/product-labels-for-magento-2_61a5ece777124.png" class="lazy amrelated-photo" alt="Product Labels for Magento 2"></a> <div class="amrelated-discount -product" data-amrelated-js="item-price-discount">15% </div></div> <div class="amrelated-details"><div class="amrelated-name"><a title="Product&#x20;Labels&#x20;M2" data-amsite-analytics-js="bundle-product-name" data-product-name-analytics="Product Labels M2" aria-label="Product&#x20;Labels&#x20;for&#x20;Magento&#x20;2" href="https://amasty.com/product-labels-for-magento-2.html" class="amrelated-link">Product Labels M2</a></div> <div class="price-box"><div class="price-box price-final_price" data-role="priceBox" data-product-id="538" data-price-box="product-id-538"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-538" data-price-amount="209" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$209</span></span> </span></span> </div></div></div></div></div></div> </div><span class="amrelated-equal ">=</span> <div class="amrelated-summary-content "><div class="amrelated-price-wrapper"><div class="amrelated-full-price" data-amrelated-js="bundle-price-full"><span class="price">$767</span></div><div class="amrelated-discount -summary">Save <span class="amount" data-amrelated-js="bundle-price-discount"><span class="price">$115.05</span></span></div><div class="main price -sale" data-amrelated-js="bundle-final-price"><span class="price">$651.95</span></div></div> <div class="amrelated-tocart-wrapper"><button class="action primary" type="button" data-amrelated-js="add-to-cart" data-amtheme-js="show-bundle-popup" aria-label="Add&#x20;to&#x20;Cart" title="Add&#x20;to&#x20;Cart">Add to Cart</button></div></div></div></div> <input name="form_key" type="hidden" value="MHGQ3iWjobpQ13yt" /> <div id="authenticationPopup" data-bind="scope:'authenticationPopup', style: {display: 'none'}"> <!-- ko template: getTemplate() --><!-- /ko --> </div> <div class="amform-parent" x-data="{...hyva.modal()}" @amcform-hide-modal-188.window="hide"><button type="button" @click="show" data-amform-show="188" aria-label="Show&#x20;form" class="btn btn-primary inline-flex">Free Consultation</button> <div x-cloak x-spread="overlay()" x-bind="overlay()" class="am-overlay-popup"><div class="am-container-popup inset-0 max-md:!top-10"><div x-ref="dialog" role="dialog" class="am-dialog-popup rounded-lg w-full md:w-1/2 xl:w-5/12 max-h-[80vh] max-w-[80vw] group"><button @click="hide" aria-label="Close&#x20;form" class="am-close-popup"><svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg></button> <form class="rendered-form amform-form mb-12 mx-auto group-[.am-dialog-popup]:mb-0 default" id="amform-form-188" action="https://amasty.com/amasty_customform/form/submit/" enctype="multipart/form-data" method="post"><input name="form_key" type="hidden" value="MHGQ3iWjobpQ13yt" /><input name="form_id" type="hidden" value="188" /><input name="is_survey" type="hidden" value="0" /><div class="flex flex-col max-w-md group-[.am-dialog-popup]:max-w-3xl m-auto amform-wrapper" data-element="form-content"> <div class="grid grid-cols-6 gap-x-2 gap-y-6 items-start" id="page-1" x-ref="page1188"> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" x-data="{ focused: false, value: '' }"> <input type="text" id="first-name-form-188" name="first-name" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" data-errormsg="Please use only letters (a-z or A-Z) or numbers (0-9) in this field.No spaces or other characters are allowed." maxlength="40" pattern="^[a-zA-Z0-9 ]+$" required placeholder="Type&#x20;here..." ><label class=" label " for="first-name-form-188">First Name</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" style="default;" x-data="{ focused: false, value: '' }"> <input type="text" id="last-name-form-188" name="last-name" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" style="default;" data-errormsg="Please use only letters (a-z or A-Z) or numbers (0-9) in this field.No spaces or other characters are allowed." maxlength="255" pattern="^[a-zA-Z0-9 ]+$" required placeholder="Type&#x20;here..." ><label class=" label " for="last-name-form-188">Last Name</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" style="default;" x-data="{ focused: false, value: '' }"> <input type="email" id="email-form-188" name="email" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" style="default;" maxlength="255" required placeholder="Type&#x20;here..." ><label class=" label " for="email-form-188">Email</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" x-data="{ focused: false, value: '' }"> <input type="text" id="company-form-188" name="company" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" placeholder="Type&#x20;here..." ><label class="field-optional after:text-secondary-lighter label " for="company-form-188">Company</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" x-data="{ focused: false, value: '' }"> <textarea id="description-form-188" name="description" class="focus:border-gray-500 border-gray-300 w-full border-gray-300 w-full py-1 " maxlength="255" required x-model="value" @focus="focused = true" @blur="focused = value" rows="5" placeholder="Type&#x20;here..." ></textarea> <label class=" label " for="description-form-188">Your Message</label></div><!-- Checkboxes --> <div class="col-span-6 amcform-toolbar flex align-center items-center gap-x-2 justify-center mt-4"> <button type="submit" x-data class="btn btn-primary justify-center w-64" @click.prevent="initFormEvents188().processSubmit( $refs.page1188, $refs.tab1188, $event)">CONTACT US</button> </div></div> </div> <!--Validations--><!--Dependencies--><!--Survey--> <!--Default values--><!--Init google map--></form> </div></div></div></div> <div class="amsite-m2-product-promotion -picture"> <a class="amsite-link" href="https://amasty.com/partnership-program.html" title="Partner With Us" data-promo-id="banner-pdp-partnership" data-promo-name="SO Partnership" data-promo-creative="pdp-so-feb25" > <picture class="amsite-picture"> <source media="(min-width: 1024px)" srcset="https://cdn.amasty.com/media/wysiwyg/amasty/product_page/product_page_feb25.png 1x, https://cdn.amasty.com/media/wysiwyg/amasty/product_page/product_page_feb25_2x.png 2x"> <source media="(max-width: 1024px)" sizes="1px" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVR4nGP6DwABBQECz6AuzQAAAABJRU5ErkJggg=="> <img class="lazy amsite-img lazy" height="80" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/product_page/product_page_feb25.png" alt="" > </picture> </a> </div> </div></div></main><div class="amtheme-productinfo-wrap"><div class="amtheme-productaside-wrap"> <div class="am-custom-tabs-wrapper mx-auto" x-data="amCustomTabs" x-init="initAmCustomTabs()" @resize.window.debounce="checkIsMobileResolution()" @visibilitychange.window.debounce="checkIsMobileResolution()" x-bind="eventListeners" x-spread="eventListeners"><template x-if="tabs.length && !isAccordion && !isMobile"><div class="am-tabs-nav"><nav class="mx-auto flex justify-between border-b-1"><template x-for="tab in tabs" :key="tab.alias"><a :href="'#' + tab.alias" :data-tab="tab.alias" role="tab" :aria-label="tab.alias" class="relative top-[1px] flex pt-1 pb-2 font-bold text-secondary focus:rounded-none hover:text-primary transition-colors text-lg analytics-product-tab-title" @click.prevent.stop="setActiveTabs(tab.name)" :class="{ 'amtab-active !text-black': tab.isActive, 'border-b-1 border-black': tab.isActive }" ><span class="analytics-product-tab-title" x-html="tab.title" :aria-label="tab.alias"></span> <template x-if="tab.alias === 'changelog' && isChangelogVersion"><span x-html="'v ' + isChangelogVersion" class="relative -top-2 text-primary ml-1 px-2 py-1 h-max am-text-extrasmall bg-gray-200 uppercase inline-block rounded-lg"></span></template></a></template></nav></div></template><div class="am-tabs w-full" role="tablist"> <div class="am-tabs-item" role="tabpanel" ><template x-if="isAccordion || isMobile"><div class="amtab-accordion-tab" role="tab"><a href="#description" data-tab="description" aria-label="description" class="flex justify-between py-4 items-center cursor-pointer w-full text-primary hover:text-primary border-b-1 analytics-product-tab-title" :class="{'border-b-1': !isActiveTab('amcustomtabs_tabs_1')}" @click.prevent.stop="setActiveTabs('amcustomtabs_tabs_1')" ><span class="title text-md md:text-lg font-semibold analytics-product-tab-title" aria-label="description">Description</span> <span class="py-1 px-1 transition-transform transform duration-300 ease-in-out" :class="{'rotate-180': isActiveTab('amcustomtabs_tabs_1')}" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="icon-arrow" width="20" height="20" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </span></a></div></template><div class="tab-content pt-5 md:pt-10 description" :class="{ 'card tab-view': !isAccordion && !isMobile, 'md:px-4 py-4 accordion-view': isAccordion, 'border-b-1': isMobile && isActiveTab('amcustomtabs_tabs_1') }" id="amcustomtabs_tabs_1" x-cloak x-show="isActiveTab('amcustomtabs_tabs_1')" ><div class="am-custom-tab am-custom-tab-1"><div class="amsite-description-tab"> <div class="magezon-builder magezon-builder-preload"><div class="f1n9a7y mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner f1n9a7y-s"><div class="inner-content mgz-container"><div class="wxloa8o mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner wxloa8o-s"><div class="avdevm0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner avdevm0-s"><h2 style="text-align: center;"><span>Automate Magento 2 special price promotions with easy-to-configure rules</span></h2></div></div><div class="tap40q4 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner tap40q4-s"><p style="text-align: left;"><span>Build a clever discount system instead of creating occasional special deals with this Magento 2 module. Analyze your stock and create cart price rules that help you sell, don't forget to take customers' info into account. Effectively manage your company selling strategy by disabling promotions for simple and configurable Magento 2 products with special price or free shipping.</span></p></div></div></div></div></div></div></div><div class="s72ror3 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner s72ror3-s"><div class="inner-content mgz-container"><div class="r1pimrj mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner r1pimrj-s"><div class="eums4gq mgz-element mgz-child mgz-element-raw_html"><div class="mgz-element-inner eums4gq-s"><div class="grey-section"><div class="vertical-screenshot vertical-screenshot-narrow" data-role="vertical-screenshots"><div class="screen-img-box"><div class="viewport-header">&nbsp;</div><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/special-promotions-pro-for-magento-2/promotions-for-magento-2-cart-price-rules.png" data-role="viewport" /></div><div class="screen-text-box" data-img="https://cdn.amasty.com/media/extensions/special-promotions-pro-for-magento-2/promotions-for-magento-2-cart-price-rules.png" data-role="item"><h3>Add a new cart price rule</h3></div><div class="screen-text-box" data-img="https://cdn.amasty.com/media/extensions/special-promotions-pro-for-magento-2/promotions-for-magento-2-rule-information.png" data-role="item"><h3>Name it and specify applicability</h3></div><div class="screen-text-box" data-img="https://cdn.amasty.com/media/extensions/special-promotions-pro-for-magento-2/spp-m2-limit-rule-being-triggered.png" data-role="item"><h3><b>NEW |</b> Limit the number of times for a rule being triggered </h3></div><div class="screen-text-box" data-img="https://cdn.amasty.com/media/extensions/special-promotions-pro-for-magento-2/promotions-for-magento-2-conditions.png" data-role="item"><h3>Limit the rule with well-thought-out conditions</h3></div><div class="screen-text-box" data-img="https://cdn.amasty.com/media/extensions/special-promotions-pro-for-magento-2/promotions-for-magento-2-actions.png" data-role="item"><h3>Select the type of promo you want to use</h3></div><div class="screen-text-box" data-img="https://cdn.amasty.com/media/extensions/special-promotions-pro-for-magento-2/promotions-for-magento-2-shopping-cart.png" data-role="item"><h3>See how the promo looks like in a shopping cart</h3></div><div class="screen-text-box" data-img="https://cdn.amasty.com/media/extensions/special-promotions-pro-for-magento-2/sp-discount-breakdown.png" data-role="item"><h3>Show all the applied rules in the discount breakdown</h3></div><div class="clearer">&nbsp;</div></div></div></div></div></div></div></div></div></div><div class="frydgc8 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner frydgc8-s"><div class="inner-content mgz-container"><div class="xnvw5lh mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner xnvw5lh-s"><div class="k8usj8m mgz-element mgz-child mgz-element-raw_html"><div class="mgz-element-inner k8usj8m-s"><div id="fancybox-youtube-container" class="hidden amsite-fancybox-video-container"><div class="item"><iframe style="aspect-ratio: 16 / 9; height: 100%; width: 100%; max-width: 640px" class="iframe lazy" data-src="//www.youtube.com/embed/0sS0FbGVC60?enablejsapi=1" width="640" height="360" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe><h3 style="max-width: 640px">How to Create the “X% Discount on Each Nth Product” Magento Cart Price Rules? [Magento 2 Promotions]</h3></div></div></div></div></div></div></div></div></div><div class="yt3n4k2 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner yt3n4k2-s"><div class="inner-content mgz-container"><div class="t7ngmbj mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner t7ngmbj-s"><div class="ji9ritp mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ji9ritp-s"><h2 style="text-align: center;">Wide range of promotion types to suit all tastes and needs:</h2></div></div></div></div></div></div></div><div class="p9u2803 mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner p9u2803-s"><div class="inner-content mgz-container"><div class="i4q7058 mgz-element mgz-element-column mgz-col-md-6 mgz-row-gap-margin"><div class="mgz-element-inner i4q7058-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax i4q7058-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="c9tvehx mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner c9tvehx-s"><div class="hyn3rl1 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hyn3rl1-s"><h3>The cheapest' and 'The most expensive'</h3></div></div><div class="q0eaqnk mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner q0eaqnk-s"><p>You can create offers based on the cheapest and/or the most expensive products in the cart. For example:</p><ul></ul></div></div><div class="t2qcbkg mgz-element mgz-child mgz-element-text pbuilder-special-list-star"><div class="mgz-element-inner t2qcbkg-s"><ul><li>Buy a sneakers and shoelaces will be for free.</li> <li>Buy jeans and a T-shirt will be with a 50% discount</li> <li>Buy 3 different watches and the most expensive will be with 50% off</li> </ul></div></div></div></div></div></div><div class="brrpra0 mgz-element mgz-element-column mgz-col-md-6 mgz-row-gap-margin"><div class="mgz-element-inner brrpra0-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax brrpra0-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="eg64v4x mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner eg64v4x-s"><div class="c8u8mho mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner c8u8mho-s"><h3 class="orange">Buy X Get Y</h3></div></div><div class="wxbhb69 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner wxbhb69-s"><p>This group of actions includes promotions connected with two different products - users buy one and get another Magento 2 product in the store with special price.</p><ul></ul></div></div><div class="yf5tcs1 mgz-element mgz-child mgz-element-text pbuilder-special-list-star"><div class="mgz-element-inner yf5tcs1-s"><ul><li>Buy a laptop, get a mouse for free</li> <li>Buy pants, get a tie with $10 off</li> <li>Buy any pizza, get a dessert for $9.99</li> </ul></div></div></div></div></div></div><div class="mg2v0u7 mgz-element mgz-element-column mgz-col-md-6 mgz-row-gap-margin"><div class="mgz-element-inner mg2v0u7-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax mg2v0u7-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="w77hyik mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner w77hyik-s"><h3>Product set</h3><div class="nn427kl mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner nn427kl-s"><p>Create product sets according to your needs and set fixed or percent discounts for them with this extension.</p><ul><li>Get a chair, a lamp and a cushion for $200</li> <li>Get a bed, 2 pillows and a blanket with a 25% discount</li> <li>Buy your perfect kit: any T-shirt + shorts with 25% off</li> </ul></div></div></div></div></div></div><div class="bhibwud mgz-element mgz-element-column mgz-col-md-6 mgz-row-gap-margin"><div class="mgz-element-inner bhibwud-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax bhibwud-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="wtsq1s7 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner wtsq1s7-s"><div class="go7qctj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner go7qctj-s"><h3>Each product after N</h3></div></div><div class="uk6j59v mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner uk6j59v-s"><p>Give discounts on additional Magento 2 special price configurable product  which you want to sell with.</p><ul><li>After you buy 3 books for the full price, each second one will be with $15 off</li> <li>After you buy 5 T-shirts, each new one will be with 50% discount</li> <li>After you buy 1 box of contact lens, each third box will be for $10</li> </ul></div></div></div></div></div></div><div class="lpb42k5 mgz-element mgz-element-column mgz-col-md-6 mgz-row-gap-margin"><div class="mgz-element-inner lpb42k5-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax lpb42k5-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="cl20xfj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner cl20xfj-s"><div class="albeo5p mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner albeo5p-s"><h3>Each N-th</h3></div></div><div class="twfsgks mgz-element mgz-child mgz-element-text pbuilder-special-list-star"><div class="mgz-element-inner twfsgks-s"><p>These actions are good for products, which are usually bought in several pieces. You can set which of the pieces will be discounted and apply discounts either to all products in the cart or to the same products only.</p><ul></ul><ul><li>Buy 4 wheels, get 4th with 50% off</li> <li>Buy 3 TVs, get 3rd for $89</li> <li>Buy 6 paper towels, get each 2nd with $3 off</li> </ul></div></div></div></div></div></div><div class="j86yf5d mgz-element mgz-element-column mgz-col-md-6 mgz-row-gap-margin"><div class="mgz-element-inner j86yf5d-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax j86yf5d-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="j3mq9to mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner j3mq9to-s"><h3>Get $X for each $Y spent</h3><div class="twfsgks mgz-element mgz-child mgz-element-text pbuilder-special-list-star"><div class="mgz-element-inner twfsgks-s"><div class="k3ud19r mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner k3ud19r-s"><p><span>C</span>reate offers based on the amount of money spent. For example:</p><ul><li>spend $300 and get a $40 discount.</li> </ul></div></div></div></div></div></div></div></div></div></div></div><div class="qkkwkht mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner qkkwkht-s"><div class="inner-content mgz-container"><div class="sldu6js mgz-element mgz-element-column mgz-col-md-12 mgz-row-gap-margin"><div class="mgz-element-inner sldu6js-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax sldu6js-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="vv028ve mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner vv028ve-s"><h3>Multiple Tiered Discounts</h3><div class="twfsgks mgz-element mgz-child mgz-element-text pbuilder-special-list-star"><div class="mgz-element-inner twfsgks-s"><div class="k3ud19r mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner k3ud19r-s"><p><span>Motivate customers to buy more by introducing dynamic discounts. For example:</span></p><ul><li>Buy 2 T-shirts and get a 10% off, Buy 3 T-shirts and get 15% off, etc.</li> <li>For each $100 spent get 10% off for the whole cart</li> <li>For each $10 spent on gloves get a 5% discount for a scarf</li> </ul></div></div></div></div></div></div></div></div></div></div></div><div class="qkdoy84 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner qkdoy84-s"><div class="inner-content mgz-container"><div class="f6nd4jr mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner f6nd4jr-s"><div class="u5n1qu2 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner u5n1qu2-s"><h2 style="text-align: center;" class="default-size-on-cms"><span>Boost sales and create an engaging shopping experience</span></h2></div></div><div class="xo1nbqi mgz-element mgz-element-row full_width_row mgz-row-wrap-reverse"><div class="mgz-element-inner xo1nbqi-s"><div class="inner-content mgz-container"><div class="k00k8n7 mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner k00k8n7-s"><div class="ma4o6eg mgz-element mgz-element-section"><div class="mgz-element-inner ma4o6eg-s"><div class="h8oc5w9 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner h8oc5w9-s"><h3 class="default-size-on-cms">Use customer attributes for targeted promotions</h3></div></div><div class="vh2b5qu mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner vh2b5qu-s"><p><span style="color: #666666;"><span style="font-weight: 400;">The tool adds new conditions based on customer details like name, group, gender, birthdate, and membership period. Set up personalized discounts based on customer attributes. For example, give discounts on St. Patrick's Day to people with 'Green' in their last names. Or reward long-time members with unique loyalty bonuses.</span></span></p></div></div><div class="umvhj3r mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner umvhj3r-s"><h3 class="default-size-on-cms">Reward loyal users based on purchase history</h3></div></div><div class="tsd6y5m mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner tsd6y5m-s"><p><span style="font-weight: 400;"><span> </span>Set deals based on order quantity and total spending to show appreciation to loyal buyers. For example, create offers for customers with 4 orders and/or $500 spent in the last 6 months.</span></p></div></div></div></div></div></div><div class="popgunu mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner popgunu-s"><div class="mjnuhqk mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner mjnuhqk-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/extensions/special-promotions-pro-for-magento-2/spp_upd8_2_.png" alt="spp_upd8_2_" width="600" height="400" title="" /></div></div></div></div></div></div></div></div></div><div class="c9l7n28 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner c9l7n28-s"><div class="inner-content mgz-container"><div class="dd04bs5 mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner dd04bs5-s"><div class="yitbcwh mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner yitbcwh-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/extensions/special-promotions-pro-for-magento-2/spp_upd8_1_.png" alt="spp_upd8_1_" width="600" height="400" title="" /></div></div></div></div></div></div><div class="n5e07nr mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner n5e07nr-s"><div class="had7c6h mgz-element mgz-element-section"><div class="mgz-element-inner had7c6h-s"><div class="qgp7565 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner qgp7565-s"></div></div><div class="twk2gh3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner twk2gh3-s"><h3 class="default-size-on-cms">Limit promotions for custom options</h3></div></div><div class="vhkpiu1 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner vhkpiu1-s pbuilder-zero-margin-bottom-for-lists"><p><span style="font-weight: 400;"><span>Leverage the power of the Magento special price extension to enhance your promotions. Craft custom options for your products and utilize them as precise rule conditions. This dynamic approach allows you to tailor your offers to any scenario. For instance, imagine offering discounts exclusively on engraved glasses, all made possible by this accurate customization feature.</span></span></p></div></div><div class="obh5ub9 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner obh5ub9-s"><h3 class="default-size-on-cms">Set conditions for specific orders subselection</h3></div></div><div class="plbykfm mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner plbykfm-s pbuilder-zero-margin-bottom-for-lists"><p><span style="font-weight: 400;"><span>Specify order statuses (pending, completed, etc.) and time after orders were placed to restrict rule use. For example, you can apply the rule only for customers with 3 or more orders, with order status "Complete" and which were placed 6 months or less ago.</span></span></p></div></div></div></div></div></div></div></div></div><div class="r55oks8 mgz-element mgz-element-row full_width_row mgz-row-wrap-reverse"><div class="mgz-element-inner r55oks8-s"><div class="inner-content mgz-container"><div class="rn4xn7g mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner rn4xn7g-s"><div class="w3t58br mgz-element mgz-element-section"><div class="mgz-element-inner w3t58br-s"><div class="n1cjmxh mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner n1cjmxh-s"><h3 class="default-size-on-cms">Highlight promotions with labels and banners</h3></div></div><div class="jy6w26p mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner jy6w26p-s"><p><span style="color: #666666;"><span style="font-weight: 400;"><span>Enhance your promotions' performance with captivating labels and banners, designed to seize customers' attention. Discover effective strategies like placing banners on top of product pages for all items, categories, or individual products. Elevate visibility by incorporating banners beneath product descriptions. Optimize impact by artfully combining top and description banners. Further highlight products with vibrant labels that can stand alone or complement banners.</span></span></span></p></div></div></div></div><div class="e10uqh4 mgz-element mgz-element-section"><div class="mgz-element-inner e10uqh4-s"><div class="ual88qe mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ual88qe-s"><h3 class="default-size-on-cms">Combine Magento 2 plugins without losing profitability</h3></div></div><div class="r2n56ey mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner r2n56ey-s"><p><span style="color: #666666;"><span style="font-weight: 400;"><span>Limit discounts in case the Magento promotion rules from several sources apply to the same item. This way, you don't need to check each and every possible discount source for overlaps and don't spend excessive amounts of money on ineffective special offers. The new algorithm compares the original price after Cart Price Rule discount with the original price after non-Cart Price Rule discount. Then, it chooses the value you need depending on module configuration.</span></span></span></p></div></div></div></div></div></div><div class="hqd8jy1 mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner hqd8jy1-s"><div class="i51atjy mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner i51atjy-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/extensions/special-promotions-pro-for-magento-2/spp_upd8_3_.png" alt="spp_upd8_3_" width="600" height="400" title="" /></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="hevjj8b mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner hevjj8b-s"><div class="inner-content mgz-container"><div class="yipxmkg mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner yipxmkg-s"><div class="jgspftu mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner jgspftu-s"><h2 style="text-align: center;"><span><span style="font-weight: 400;">Explore smart features of Magento extension<br />for effective promotions</span></span></h2></div></div></div></div></div></div></div><div class="lduo47l mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner lduo47l-s"><div class="inner-content mgz-container"><div class="cwa021p mgz-element mgz-element-column mgz-col-md-6 mgz-row-gap-margin"><div class="mgz-element-inner cwa021p-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax cwa021p-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="uqsx5p0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner uqsx5p0-s"><h3>Show discount amounts in the cart</h3><p>Clearly indicate a discount amount on the cart page. Let customers know that they are using special offer discount. </p></div></div></div></div><div class="sysun4j mgz-element mgz-element-column mgz-col-md-6 mgz-row-gap-margin"><div class="mgz-element-inner sysun4j-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax sysun4j-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="bb6usha mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner bb6usha-s"><h3>Seamless integration with Magento </h3><p>The module supports multi website and multi currency options at the general configuration level and also fully integrates with taxes functionality.</p></div></div></div></div><div class="rwtxyqp mgz-element mgz-element-column mgz-col-md-6 mgz-row-gap-margin"><div class="mgz-element-inner rwtxyqp-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax rwtxyqp-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="ampx5rd mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ampx5rd-s"><h3>Choose a price for discount calculation</h3><p>Define which price should be selected to calculate product discount for every rule in Magento 2. Choose one of 3 options - the special price, the original price or the price after previous discounts. You can also use our Magento 2 enterprise <a href="https://amasty.com/gift-card-for-magento-2.html">Gift Card</a> to send gift certificates via email or post office.</p></div></div></div></div><div class="i532c9x mgz-element mgz-element-column mgz-col-md-6 mgz-row-gap-margin"><div class="mgz-element-inner i532c9x-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax i532c9x-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="ap7xplr mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ap7xplr-s"><h3>Skip products in your Magento 2 store on special price</h3><p>Editing prices for all products manually is a 'monkey job'. It's also pointless to give discounts for products in Magento 2 on special price as it's not profitable. Now you can enable 'Skip products on special price' option and get special price in Magento 2.</p></div></div></div></div><div class="uisgca3 mgz-element mgz-element-column mgz-col-md-6 mgz-row-gap-margin"><div class="mgz-element-inner uisgca3-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax uisgca3-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="llb4df3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner llb4df3-s"><h3>Combine promotions efficiently</h3><p><span style="font-weight: 400;">Limit discounts when multiple sources offer them for the same item. </span> This way, you don't need to check each and every possible discount source for overlaps and don't spend excessive amounts of money on promo discounts. New algorithm compares original price after Cart Price Rule discount with original price after non-Cart Price Rule discount. Then, it chooses the value you need depending on module adjustment.</p></div></div></div></div><div class="n8axobf mgz-element mgz-element-column mgz-col-md-6 mgz-row-gap-margin"><div class="mgz-element-inner n8axobf-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax n8axobf-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="ym40sj6 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ym40sj6-s"><h3>Import and Export cart price rules</h3><p><span style="font-weight: 400;">Use the built-in tool to import and export crucial cart price rule elements like coupons, customers, usage limits, etc. Easily sync your cart price rule setups between Magento and other systems like ERP/CRM platforms to streamline your business processes.</span></p></div></div></div></div></div></div></div><div class="cdtnts1 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner cdtnts1-s"><div class="inner-content mgz-container"><div class="lbqh51v mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner lbqh51v-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax lbqh51v-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="hby6wh3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hby6wh3-s"><h3><span style="font-weight: 400;">Check fresh Special Promotions Pro updates on our<strong> Product Roadmap</strong> and vote for further features! Your voice matters! <a href="https://trello.com/b/mGKdSV3a/%F0%9F%9A%A9-amasty-product-roadmap-%F0%9F%9A%A9" target="_blank" rel="noopener">[LEARN MORE]</a></span></h3></div></div></div></div></div></div></div><div id="choose_option" class="x1jnnnf mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner x1jnnnf-s"><div class="inner-content mgz-container"><div class="fo44qh1 mgz-element mgz-element-column mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12"><div class="mgz-element-inner fo44qh1-s"><div class="nl739em mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner nl739em-s"><div class="inner-content mgz-container"><div class="t5evjls mgz-element mgz-element-column mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner t5evjls-s"><div class="k0iocrb mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner k0iocrb-s"><h2 style="text-align: center;">Choose your perfect promotions solution</h2></div></div><div class="oyfww58 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner oyfww58-s"><p style="text-align: center;">Build a smart discount system according to your needs</p></div></div></div></div></div></div></div><div class="ov3kflm mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner ov3kflm-s pbuilder-price-center"><div class="inner-content mgz-container"><div class="j0dvt0b mgz-element mgz-element-column col mgz-col-md-4 mgz-col-sm-6 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner j0dvt0b-s pbuilder-comparison-block-column"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax j0dvt0b-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="ic87r72 mgz-element mgz-element-section"><div class="mgz-element-inner ic87r72-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax ic87r72-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="a4otny0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner a4otny0-s comparison-heading"><p>Special Promotions</p></div></div><div class="eii5ykl mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner eii5ykl-s"></div></div><div class="gxea0oc mgz-element mgz-child mgz-element-single_product mgz-element-title-align-center mgz-product-listing"><div class="mgz-element-inner gxea0oc-s pbuilder-tariff-comparison-price"><div class="mgz-block"><div class="mgz-block-content"><div class="products wrapper grid products-grid"><ol class="products list items product-items"><li class="item product product-item"><div class="product-item-info"><div class="product details product-item-details "><div class="price-box price-final_price" data-role="priceBox" data-product-id="541" data-price-box="product-id-541"><span class="normal-price"><span class="price-container price-final_price&#x20;tax&#x20;weee" ><span id="old-price-541-final_price" data-price-amount="279" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$279</span></span> </span></span> </div></div></div></li></ol></div></div></div></div></div></div></div><div class="asgv9we mgz-element mgz-child mgz-element-text star-list"><div class="mgz-element-inner asgv9we-s font-size-14"><ul><li><span>20 extra promotion types</span></li> <li><span>Buy X Get Y rules</span></li> <li><span>Fixed and percent discounts</span></li> <li><span>Detailed discount breakdown</span></li> <li><span>Promotions based on spent amount</span></li> <li><span>Promotions with quantity steps</span></li> <li><span><span>Multiple Addresses support</span></span><span style="font-size: 14px;"></span></li> </ul></div></div><div class="pdi7avq mgz-element mgz-child mgz-element-single_product pbuilder-tariff-comparison-btn-bottom mgz-element-title-align-center mgz-product-listing"><div class="mgz-element-inner pdi7avq-s pbuilder-tariff-comparison-btn -outline pbuilder-add-to-cart-first"><div class="mgz-block"><div class="mgz-block-content"><div class="products wrapper grid products-grid"><ol class="products list items product-items"><li class="item product product-item"><div class="product-item-info"><div class="product details product-item-details "><div class="product-item-actions"><div class="actions-primary"><form data-role="tocart-form" action="https://amasty.com/special-promotions-for-magento-2.html?options=cart" method="post"><input type="hidden" name="product" value="541"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1mb3ItbWFnZW50by0yLmh0bWw_b3B0aW9ucz1jYXJ0"><input name="form_key" type="hidden" value="MHGQ3iWjobpQ13yt" /><button type="submit" data-amsite-analytics-js="btn-add-to-cart-in-page-builder-template" data-product-name-analytics="Special&#x20;Promotions&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span data-amsite-analytics-js="btn-add-to-cart-in-page-builder-template" data-product-name-analytics="Special&#x20;Promotions&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form></div></div></div></div></li></ol></div></div></div></div></div><div class="viydbmn mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner viydbmn-s"><p style="text-align: center;"><a href="https://amasty.com/special-promotions-for-magento-2.html" analytics-comparison-block-feature-list="special-promotions-m2">View full features list</a></p></div></div></div></div><div class="t1nrlo1 mgz-element mgz-element-column pbuilder-comparison-block-column-mobile-top mgz-col-md-4 mgz-col-sm-6 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner t1nrlo1-s pbuilder-comparison-block-column"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax t1nrlo1-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="wvw2wyv mgz-element mgz-element-section"><div class="mgz-element-inner wvw2wyv-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax wvw2wyv-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="h354wn7 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner h354wn7-s comparison-heading pbuilder-text-name"><p>Special Promotions Pro</p></div></div><div class="bdjytu4 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner bdjytu4-s"></div></div><div class="ojb826d mgz-element mgz-child mgz-element-single_product mgz-element-title-align-center mgz-product-listing"><div class="mgz-element-inner ojb826d-s pbuilder-tariff-comparison-price pbuilder-price-final"><div class="mgz-block"><div class="mgz-block-content"><div class="products wrapper grid products-grid"><ol class="products list items product-items"><li class="item product product-item"><div class="product-item-info"><div class="product details product-item-details "><div class="price-box price-final_price" data-role="priceBox" data-product-id="649" data-price-box="product-id-649"><span class="normal-price"><span class="price-container price-final_price&#x20;tax&#x20;weee" ><span id="old-price-649-final_price" data-price-amount="319" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$319</span></span> </span></span> </div></div></div></li></ol></div></div></div></div></div></div></div><div class="iis87gk mgz-element mgz-child mgz-element-text star-list"><div class="mgz-element-inner iis87gk-s font-size-14"><ul><li><strong>Special Promotions features included</strong></li> <li>Promotions based on customers' order history</li> <li>Apply customer attributes as rule conditions</li> <li>Product custom options as a rule condition</li> </ul></div></div><div class="e3jmd0l mgz-element mgz-child mgz-element-single_product pbuilder-tariff-comparison-btn-bottom mgz-element-title-align-center mgz-product-listing"><div class="mgz-element-inner e3jmd0l-s pbuilder-tariff-comparison-btn"><div class="mgz-block"><div class="mgz-block-content"><div class="products wrapper grid products-grid"><ol class="products list items product-items"><li class="item product product-item"><div class="product-item-info"><div class="product details product-item-details "><div class="product-item-actions"><div class="actions-primary"><form data-role="tocart-form" action="https://amasty.com/special-promotions-pro-for-magento-2.html?options=cart" method="post"><input type="hidden" name="product" value="649"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1sP29wdGlvbnM9Y2FydA~~"><input name="form_key" type="hidden" value="MHGQ3iWjobpQ13yt" /><button type="submit" data-amsite-analytics-js="btn-add-to-cart-in-page-builder-template" data-product-name-analytics="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2" title="Add to Cart" class="action tocart primary"><span data-amsite-analytics-js="btn-add-to-cart-in-page-builder-template" data-product-name-analytics="Special&#x20;Promotions&#x20;Pro&#x20;for&#x20;Magento&#x20;2">Add to Cart</span></button></form></div></div></div></div></li></ol></div></div></div></div></div><div class="al4pwtt mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner al4pwtt-s pbuilder-text-final"><p style="text-align: center;"><a href="https://amasty.com/special-promotions-pro-for-magento-2.html" analytics-comparison-block-feature-list="special-promotions-pro-m2">View full features list</a></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="gu9cj3u mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner gu9cj3u-s"><div class="inner-content mgz-container"><div class="fvxxsyh mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner fvxxsyh-s"><div class="we29yb4 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner we29yb4-s"><h2 style="text-align: center;"><span style="font-weight: 400;">Improve promotions with Spin to Win</span></h2></div></div><div class="boflkhp mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner boflkhp-s"><div class="inner-content mgz-container"><div class="fhqmtrv mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner fhqmtrv-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax fhqmtrv-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="k0dwd42 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner k0dwd42-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/marketing/SpintoWinreqestdemand12.png" alt="SpintoWinreqestdemand12" title="" /></div></div></div></div></div></div></div></div></div><div class="don33qw mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner don33qw-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax don33qw-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="cdb11lh mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner cdb11lh-s"><div class="ywuyv0a mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ywuyv0a-s"><p><span style="font-weight: 400;">The <strong>Spin to Win </strong> for Magento 2 adds an engaging and interactive spin-to-win feature to your eCommerce store, designed to boost user engagement and conversions. Customers can spin a wheel for a chance to win discounts or rewards, increasing retention and driving more sales.</span></p></div></div><div class="r3uyld2 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner r3uyld2-s"><ul><li><span style="font-weight: 400;"> Improved User Engagement</span></li> <li><span style="font-weight: 400;">Better Data Collection</span></li> <li><span style="font-weight: 400;"> Boost Repeat Purchases</span></li> <li><span style="font-weight: 400;">Unique Brand Positioning</span></li> <li><span style="font-weight: 400;">Improved Seasonal Promotions</span></li> </ul></div></div></div></div><div class="pms332b mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner pms332b-s"><div class="od1aack mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner od1aack-s"><h3 class="feature-new"><strong>Leave request for this feature</strong></h3></div></div><div class="g11vbiw mgz-element mgz-child mgz-element-static_block"><div class="mgz-element-inner g11vbiw-s"><form class="rendered-form amform-form mb-12 mx-auto group-[.am-dialog-popup]:mb-0 default" id="amform-form-223" action="https://amasty.com/amasty_customform/form/submit/" enctype="multipart/form-data" method="post"><input name="form_key" type="hidden" value="MHGQ3iWjobpQ13yt" /><input name="form_id" type="hidden" value="223" /><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="page1223"><!-- Simple input --><div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" x-data="{ focused: false, value: '' }"><input type="text" id="last-name-form-223" name="last-name" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" maxlength="40" required placeholder="Type&#x20;here..." ><label class=" label " for="last-name-form-223">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-223" name="email" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" style="default;" maxlength="253" required placeholder="Type&#x20;here..." ><label class=" label " for="email-form-223">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="initFormEvents223().processSubmit( $refs.page1223, $refs.tab1223, $event)">NOTIFY ME</button> </div></div></div><!--Validations--><!--Dependencies--><!--Survey--><!--Default values--><!--Init google map--></form></div></div></div></div></div></div></div></div></div></div></div></div><div class="fc9j6lc mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner fc9j6lc-s"><div class="inner-content mgz-container"><div class="e7c6iyl mgz-element mgz-element-column mgz-col-md-6 mgz-col-sm-12 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner e7c6iyl-s pbuilder-product-featuring"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax e7c6iyl-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="d6r2n1e mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner d6r2n1e-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/extensions/magento-2/product-labels-for-magento-2.png" alt="product-labels-for-magento-2" width="111" height="111" title="" /></div></div></div></div><div class="v1kd19v mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner v1kd19v-s"><h2 style="text-align: center;"><span>Attract customers' attention with catchy labels</span></h2></div></div><div class="gog7c8o mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner gog7c8o-s"><p>Highlight new arrivals, as well as special products and offers to immediately draw customers' attention and grow sales up to 55% with <a href="https://amasty.com/product-labels-for-magento-2.html">Product Labels</a> extension.</p></div></div></div></div><div class="v0ps458 mgz-element mgz-element-column mgz-col-md-6 mgz-col-sm-12 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner v0ps458-s pbuilder-product-featuring"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax v0ps458-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="hnv1718 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner hnv1718-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/extensions/magento-2/related-products.png" alt="related-products" width="111" height="111" title="" /></div></div></div></div><div class="b74n73x mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner b74n73x-s"><h2 style="text-align: center;">Increase the average order value</h2></div></div><div class="qe89k03 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner qe89k03-s"><p>Apply our <a href="https://amasty.com/automatic-related-products-for-magento-2.html">Magento 2 Automatic Related Products</a> extension to maximize profit by offering product bundle packs. Show customized bundles and increase spontaneous purchases.</p></div></div></div></div></div></div></div><div class="spcs5kk mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner spcs5kk-s"><div class="inner-content mgz-container"><div class="nt74hkd mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner nt74hkd-s"><div class="a9cersh mgz-element mgz-element-accordion mgz-element-title-align-center mgz-element-accordion-align-"><div class="mgz-element-inner a9cersh-s"><div class="mgz-block"><div class="mgz-block-heading mgz-block-heading-align-center"><h2 class="title">FAQ</h2></div><div class="mgz-block-content"><div class="mgz-panels mgz-panels-a9cersh " data-mage-init='{"Magezon_PageBuilder/js/collapse":{"collapsibleAll": false,"atLeastOneOpen": false,"icon": "","activeIcon": ""}}' data-spacing="0" data-gap="0"><div class="mgz-panel mgz-panel-first "><div class="mgz-panel-heading mgz-text-left mgz-icon-position-left"><h4 class="mgz-panel-heading-title"><a href="#tab-mbv2pu9" class="has-icon"><i class="mgz-accoridon-icon-plus "></i> <span>How can customers get a special price in your Magento 2 store? </span></a></h4></div><div class="mgz-panel-body" ><div class="mgz-panel-body-inner"><div class="mbv2pu9 mgz-element mgz-element-accordion_section"><div class="mgz-element-inner mbv2pu9-s"><div class="qc9qfrj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner qc9qfrj-s"><p><span>Your customers can get a special price in Magento 2 if you use different promo settings of the Special Promotions extension: </span></p><ul><li><strong>Buy X Get Y</strong> rule: Buy any dessert, get a drink for $ 1.99;</li> <li><strong>Each Nth</strong> rule: Buy 3 Monitors, get the 3rd for $ 59;</li> <li>Special price for <strong>Each Group of N</strong>: Buy 10 erasers for $ 2.99.</li> </ul></div></div></div></div></div></div></div><div class="mgz-panel mgz-panel-last"><div class="mgz-panel-heading mgz-text-left mgz-icon-position-left"><h4 class="mgz-panel-heading-title"><a href="#tab-jq7lakh" class="has-icon"><i class="mgz-accoridon-icon-plus "></i> <span>Built-in Segmentation functionality for Magento 2 Enterprise Edition </span></a></h4></div><div class="mgz-panel-body" ><div class="mgz-panel-body-inner"><div class="jq7lakh mgz-element mgz-element-accordion_section"><div class="mgz-element-inner jq7lakh-s"><div class="ct9e5ak mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ct9e5ak-s"><p><span>Magento 2 bundle product discount is used to increase customer loyalty, incentivize customers to purchase a specific product, introduce the consumer to a specific type of product, and increase the average check. All this allows you to increase sales of products and attract buyers.</span></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div> <div class="amsite-reason-choose"><div class="amsite-item -adobe"><div class="amsite-head"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/header-adobe.png" alt="" width="184" height="40"></div><div class="amsite-content"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/silver-partner-adobe.png" alt="Adobe partner logo" width="143" height="46"></div></div><div class="amsite-item -magento"><div class="amsite-head"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/header-magento.png" alt="" width="184" height="40"></div><div class="amsite-content"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/magento.svg" alt="Magento Marketplace logo" width="146" height="32"></div></div><div class="amsite-item -trust"><div class="amsite-head"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/header-trust.png" alt="" width="184" height="40"></div><div class="amsite-content"><div class="amsite-row"><span class="amsite-score">4.4</span> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/trust-logo.svg" width="100" height="23"></div><div class="amsite-row"><span class="amsite-text"> See 500+ verified reviews</span></div></div></div><div class="amsite-item -single"><div class="amsite-head"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/header-single.png" alt="" width="184" height="40"></div><div class="amsite-content"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/single.svg" alt="1 Single points of sales" width="136" height="52"></div></div><div class="amsite-item -amasty"><div class="amsite-head"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/header-amasty.png" alt="" width="184" height="40"></div><div class="amsite-content"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/amasty.svg" alt="Trusted by Customers" width="150" height="34"></div></div></div></div></div></div></div> <div class="am-tabs-item" role="tabpanel" ><template x-if="isAccordion || isMobile"><div class="amtab-accordion-tab" role="tab"><a href="#faq" data-tab="faq" aria-label="faq" class="flex justify-between py-4 items-center cursor-pointer w-full text-primary hover:text-primary border-b-1 analytics-product-tab-title" :class="{'border-b-1': !isActiveTab('amcustomtabs_tabs_4')}" @click.prevent.stop="setActiveTabs('amcustomtabs_tabs_4')" ><span class="title text-md md:text-lg font-semibold analytics-product-tab-title" aria-label="faq">FAQ</span> <span class="py-1 px-1 transition-transform transform duration-300 ease-in-out" :class="{'rotate-180': isActiveTab('amcustomtabs_tabs_4')}" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="icon-arrow" width="20" height="20" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </span></a></div></template><div class="tab-content pt-5 md:pt-10 faq" :class="{ 'card tab-view': !isAccordion && !isMobile, 'md:px-4 py-4 accordion-view': isAccordion, 'border-b-1': isMobile && isActiveTab('amcustomtabs_tabs_4') }" id="amcustomtabs_tabs_4" x-cloak x-show="isActiveTab('amcustomtabs_tabs_4')" ><div class="am-custom-tab am-custom-tab-4"><div class="amfaq-product-tab"> <div class="amfaq_questions widget"> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab62134" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">Are Amasty extensions compatible with all themes and extensions by other vendors?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab62134" x-ref="container_67bef4ab62134" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">Amasty extensions work with all plugins we issued and with most 3rd-party plugins. If you come across a Magento 2 compatibility issue with any third-party module, we’ll definitely try to help you. If you face any technical issues, please create a ticket...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/are-amasty-extensions-compatible-with-all-themes-and-extensions-by-other-vendors.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Are Amasty extensions compatible with all themes and extensions by other vendors?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab62579()" x-init="ratingInit_67bef4ab62579()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab62a8c" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">Will I get free support and updates?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab62a8c" x-ref="container_67bef4ab62a8c" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> Product updates for extensions purchased before Feb 1, 2022With the transition to product subscriptions, you will receive product updates for all extensions purchased before Feb 1, 2022 throughout the entire grace period — up to Aug 1, 2022. If you ...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/will-i-get-free-support-and-updates.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Will I get free support and updates?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab62ef4()" x-init="ratingInit_67bef4ab62ef4()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab6359f" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">Do you have the installation service in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab6359f" x-ref="container_67bef4ab6359f" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> Yes, you can use installation and configuration services that are available as the part of Pro and Premium add-ons for your product subscriptions.Please note that this installation service doesn’t include uninstallation. So, if you need to completely...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/can-i-have-amasty-extension-installed.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Do you have the installation service in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab638df()" x-init="ratingInit_67bef4ab638df()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab63d9d" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">Can I request a free trial?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab63d9d" x-ref="container_67bef4ab63d9d" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">Amasty doesn’t provide any trials of Magento extensions. There's one exception: Amasty extensions are provided for testing or demo purposes to our official Platinum Partners as a part of the “access to Amasty extensions for testing purposes with Composer...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/can-i-request-a-free-trial.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Can I request a free trial?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab63f8a()" x-init="ratingInit_67bef4ab63f8a()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab64334" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">Can I test an Amasty extension on a staging site before transferring it to a live one in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab64334" x-ref="container_67bef4ab64334" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">Yes, you can install any Amasty extension on a test site and configure all the settings there before doing it on your live store.</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/can-i-test-an-amasty-extension-on-a-staging-site.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Can I test an Amasty extension on a staging site before transferring it to a live one in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab64571()" x-init="ratingInit_67bef4ab64571()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab64944" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">How can I get a refund?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab64944" x-ref="container_67bef4ab64944" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> Amasty offers to its Customers a thirty (30) day money-back guarantee for the Software. In case the acquired extension didn’t meet your expectations, our support team is always ready to help you. Fees for support subscriptions and any services provided...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/can-i-get-a-refund-if-an-extension-doesn-t-suit-me.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">How can I get a refund?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab64d23()" x-init="ratingInit_67bef4ab64d23()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab65491" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">How can I receive a discount?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab65491" x-ref="container_67bef4ab65491" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> We are now working at a loyalty program for our customers that is supposed to bring even greater benefits in the long term. While it’s not out yet, you can look through these Special Offers. New discounts and specials are added every month. To stay ...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/will-i-get-any-other-benefits.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">How can I receive a discount?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab65815()" x-init="ratingInit_67bef4ab65815()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab65b1a" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">How to update a Magento 2 Amasty extension?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab65b1a" x-ref="container_67bef4ab65b1a" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> Updating an Amasty extension follows the same process as installing a module. To update a single extension:Run the following command to update a specific Amasty extension:composer update amasty/&lt;module-name&gt; To update multiple extensions:You can...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/upgrade-magento-2-extension.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">How to update a Magento 2 Amasty extension?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab65f75()" x-init="ratingInit_67bef4ab65f75()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab6627c" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">If I need additional features to be added to an Amasty extension, how can I ask for it in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab6627c" x-ref="container_67bef4ab6627c" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">To leave your feature request, log in to your customer account and open the Products tab. Then, scroll down to the bottom of the page, and leave your feature request in the following form: As soon as you send your request, it is considered by our ...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/how-to-ask-more-features-to-be-added-to-my-extension.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">If I need additional features to be added to an Amasty extension, how can I ask for it in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab66471()" x-init="ratingInit_67bef4ab66471()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab666d3" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">Magento 2 Amasty extensions installation</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab666d3" x-ref="container_67bef4ab666d3" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> Amasty extension packages include all necessary files, setup guides, and a license agreement, with some even offering example import files to simplify the process.Important: Since January 14, 2025, all Amasty extensions will only be available for installation...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/how-to-install-magento-2-extension.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Magento 2 Amasty extensions installation</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab66dbd()" x-init="ratingInit_67bef4ab66dbd()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab6752e" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">How can I prolong support in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab6752e" x-ref="container_67bef4ab6752e" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> If you have an active support service subscription, it grants you access to support services for all products purchased before Feb,1 as long as your subscription is active. Alternatively, support services are only available as the part of a product ...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/how-can-i-prolong-support.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">How can I prolong support in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab67860()" x-init="ratingInit_67bef4ab67860()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab67b2f" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">Can I change the EE extension to CE for free in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab67b2f" x-ref="container_67bef4ab67b2f" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">Usually, no, you can&rsquo;t exchange modules. Please, contact our support managers and they&rsquo;ll consider your case individually. &rarr; Learn more about our special offers</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/can-i-change-the-ee-extension-to-ce-for-free.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Can I change the EE extension to CE for free in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab67de8()" x-init="ratingInit_67bef4ab67de8()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab6816d" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">How can I get a discount to re-purchase plugins in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab6816d" x-ref="container_67bef4ab6816d" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">Usually, we don&rsquo;t provide any discounts. But you can contact us, and we&rsquo;ll consider your case individually. &rarr; Learn more about our special offers</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/how-can-i-get-a-discount-to-re-purchase-plugins.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">How can I get a discount to re-purchase plugins in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab68325()" x-init="ratingInit_67bef4ab68325()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab68dc3" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">What is the license policy? On how many websites can I use Amasty extensions?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab68dc3" x-ref="container_67bef4ab68dc3" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> Our license allows you to use a single extension license agreement on one Magento installation.If you run several domains on the same instance of Magento, you can use one extension license. However, if you run each website on a new installation of Magento...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/amasty-license-policy.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">What is the license policy? On how many websites can I use Amasty extensions?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab69161()" x-init="ratingInit_67bef4ab69161()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67bef4ab69503" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" 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> </span> <span class="question-text ml-4">How can I pay for Amasty extensions in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67bef4ab69503" x-ref="container_67bef4ab69503" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">You can pay for our extensions in any convenient for you way as a full range of payment methods are supported. The most common means are credit card or PayPal. Security and fraud protection are guaranteed. If you need to pay for the order with a non...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/how-can-i-pay-for-amasty-extensions.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">How can I pay for Amasty extensions in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67bef4ab69f5d()" x-init="ratingInit_67bef4ab69f5d()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote&#x20;yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote&#x20;no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <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></div></div></div> </div> <div x-data="productURLData_67bef4ab6f5d6()" x-init="initialize()" ></div> </div></div></div></div> <div class="am-tabs-item" role="tabpanel" ><template x-if="isAccordion || isMobile"><div class="amtab-accordion-tab" role="tab"><a href="#reviews" data-tab="reviews" aria-label="reviews" class="flex justify-between py-4 items-center cursor-pointer w-full text-primary hover:text-primary border-b-1 analytics-product-tab-title" :class="{'border-b-1': !isActiveTab('amcustomtabs_tabs_3')}" @click.prevent.stop="setActiveTabs('amcustomtabs_tabs_3')" ><span class="title text-md md:text-lg font-semibold analytics-product-tab-title" aria-label="reviews">Reviews</span> <span class="py-1 px-1 transition-transform transform duration-300 ease-in-out" :class="{'rotate-180': isActiveTab('amcustomtabs_tabs_3')}" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="icon-arrow" width="20" height="20" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </span></a></div></template><div class="tab-content pt-5 md:pt-10 reviews" :class="{ 'card tab-view': !isAccordion && !isMobile, 'md:px-4 py-4 accordion-view': isAccordion, 'border-b-1': isMobile && isActiveTab('amcustomtabs_tabs_3') }" id="amcustomtabs_tabs_3" x-cloak x-show="isActiveTab('amcustomtabs_tabs_3')" ><div class="am-custom-tab am-custom-tab-3"><div class="amtabs-review"> <div class="mx-auto items-center review-list customer-reviews" id="reviews" aria-label="Customer&#x20;Reviews" x-data="amReviews()" x-bind="eventListeners"><div ><div class="amreview-info-wrapper flex justify-between flex-wrap md:flex-nowrap md:pb-10 md:border-b-1"><div class="flex flex-col w-full sm:flex-row"> <div class="flex mb-3 pb-3 border-b-2 sm:border-b-0 sm:border-r-2 sm:pb-0 sm:pr-14 sm:mr-14"><p class="mr-3 mb-0 text-5xl">4.9</p><div class="amreview-rating-wrapper float-left"><p class="am-text-caption uppercase font-bold mb-2 mt-1">17 reviews</p><div class="amstars-rating-container flex -ml-1" title="4.9&#x20;stars" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-yellow-300" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5" aria-hidden="true"><defs><linearGradient id="amPartialFill"><stop offset="0%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;fcd34d"/><stop offset="90%" stop-color="&#x23;d1d5db"/><stop offset="100%" stop-color="&#x23;d1d5db"/></linearGradient></defs><g fill="url(#amPartialFill)"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg> </div></div></div> <div class="amreview-summary-details lg:border-r-2 border-solid border-gray-500 pr-4 pl-6 mr-auto m-0 align-middle h-fit order-3 lg:order-none basis-full lg:basis-auto" x-data="amSummaryDetails()" x-show="isVisibleDetails" x-bind="eventListeners" x-cloak> <button class="amreview-label block" rel="nofollow" @click="applyFilterByStars(5)"><label for="amreview-bar-5" class="amreview-stars inline-block min-w-[3rem] text-right text-sm text-gray-500 hover:text-amber-500 hover:cursor-pointer">5 stars</label> <progress class="amreview-bar lg:w-20 h-1.5 align-middle mx-4 [&::-webkit-progress-bar]:bg-gray-200 [&::-webkit-progress-value]:bg-yellow-300" id="amreview-bar-5" value="88" max="100"></progress><p class="amreview-text inline-block text-sm hover:text-amber-500">88% (15)</p></button> <button class="amreview-label block" rel="nofollow" @click="applyFilterByStars(4)"><label for="amreview-bar-4" class="amreview-stars inline-block min-w-[3rem] text-right text-sm text-gray-500 hover:text-amber-500 hover:cursor-pointer">4 stars</label> <progress class="amreview-bar lg:w-20 h-1.5 align-middle mx-4 [&::-webkit-progress-bar]:bg-gray-200 [&::-webkit-progress-value]:bg-yellow-300" id="amreview-bar-4" value="12" max="100"></progress><p class="amreview-text inline-block text-sm hover:text-amber-500">12% (2)</p></button> <button class="amreview-label block" rel="nofollow" @click="applyFilterByStars(3)"><label for="amreview-bar-3" class="amreview-stars inline-block min-w-[3rem] text-right text-sm text-gray-500 hover:text-amber-500 hover:cursor-pointer">3 stars</label> <progress class="amreview-bar lg:w-20 h-1.5 align-middle mx-4 [&::-webkit-progress-bar]:bg-gray-200 [&::-webkit-progress-value]:bg-yellow-300" id="amreview-bar-3" value="0" max="100"></progress><p class="amreview-text inline-block text-sm hover:text-amber-500">0% (0)</p></button> <button class="amreview-label block" rel="nofollow" @click="applyFilterByStars(2)"><label for="amreview-bar-2" class="amreview-stars inline-block min-w-[3rem] text-right text-sm text-gray-500 hover:text-amber-500 hover:cursor-pointer">2 stars</label> <progress class="amreview-bar lg:w-20 h-1.5 align-middle mx-4 [&::-webkit-progress-bar]:bg-gray-200 [&::-webkit-progress-value]:bg-yellow-300" id="amreview-bar-2" value="0" max="100"></progress><p class="amreview-text inline-block text-sm hover:text-amber-500">0% (0)</p></button> <button class="amreview-label block" rel="nofollow" @click="applyFilterByStars(1)"><label for="amreview-bar-1" class="amreview-stars inline-block min-w-[3rem] text-right text-sm text-gray-500 hover:text-amber-500 hover:cursor-pointer">1 star</label> <progress class="amreview-bar lg:w-20 h-1.5 align-middle mx-4 [&::-webkit-progress-bar]:bg-gray-200 [&::-webkit-progress-value]:bg-yellow-300" id="amreview-bar-1" value="0" max="100"></progress><p class="amreview-text inline-block text-sm hover:text-amber-500">0% (0)</p></button> </div> <div class="trustpilot-block"> <div class="flex items-center"> <span class="text-4xl mr-2"> 4.4 </span> <span class="review-trustpilot-icon inline-block"></span> </div> <a href="https://www.trustpilot.com/review/amasty.com" class="am-text-extrasmall uppercase font-bold link-as-text tracking-widest flex items-center" target="_blank"> See 500+ verified reviews <svg class="ml-1" width="14" height="14" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g id="heroicons-micro/arrow-top-right-on-square"> <g id="Union"> <path d="M6.21967 8.71967C5.92678 9.01256 5.92678 9.48744 6.21967 9.78033C6.51256 10.0732 6.98744 10.0732 7.28033 9.78033L12.5 4.56066V6.25C12.5 6.66421 12.8358 7 13.25 7C13.6642 7 14 6.66421 14 6.25V2.75C14 2.33579 13.6642 2 13.25 2H9.75C9.33579 2 9 2.33579 9 2.75C9 3.16421 9.33579 3.5 9.75 3.5H11.4393L6.21967 8.71967Z" /> <path d="M3.5 6.75C3.5 6.05964 4.05964 5.5 4.75 5.5H7C7.41421 5.5 7.75 5.16421 7.75 4.75C7.75 4.33579 7.41421 4 7 4H4.75C3.23122 4 2 5.23122 2 6.75V11.25C2 12.7688 3.23122 14 4.75 14H9.25C10.7688 14 12 12.7688 12 11.25V9C12 8.58579 11.6642 8.25 11.25 8.25C10.8358 8.25 10.5 8.58579 10.5 9V11.25C10.5 11.9404 9.94036 12.5 9.25 12.5H4.75C4.05964 12.5 3.5 11.9404 3.5 11.25V6.75Z" /> </g> </g> </svg> </a> </div></div> <div class="amreview-add-new mt-4 md:mt-0" x-data="initAddReviewClickBtn()" x-init="$dispatch('reload-customer-section-data')" @private-content-loaded.window="receiveCustomerData($event.detail.data)" ><a href="https://amasty.com/customer/account/login/" title="Add&#x20;Your&#x20;Review" aria-label="Add&#x20;Your&#x20;Review" @click.prevent="showAuthPopup()" id="amreview-toform" data-amreview-js="amreview-toform" data-amsl-scroll-to="#review-form" class="action secondary amreview-button min-w-[210px]">Add Your Review</a></div></div> <div class="amrev-items-block w-full py-6 md:py-0"> <ol class="items amreview-review-items"> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="10828" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Joe <br> <span class="text-secondary" itemprop="author">Banner , eCommerce Trading Manager</span> </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Apr&#x20;21,&#x20;2023">Apr 21, 2023</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">Helps to offer tailored promotions </span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>The extension helps us to offer a wider variety of promotions that are tailored to our customer base. Customers are engaging more with the discounts and we are seeing better conversion. The module is easy to use and is simply a build on top of the out of box Magento version. It&#039;s suitable for any business looking to expand their range of promotions and discounts to offer to their customers.</span> </div> </div> <div class="block pt-7"><p class="font-bold">Amasty answer</p><div class="mt-1">Hi Joe, thank you so much for the detailed feedback and for choosing Amasty&#039;s extensions! It&#039;s great to know that the module has helped you to increase customer engagement and conversion rates! If you have any further feedback or questions, feel free to reach out to us.</div></div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="10809" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Vincenzo <br> <span class="text-secondary" itemprop="author">Emazing srl, Commerciante </span> </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Mar&#x20;17,&#x20;2023">Mar 17, 2023</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">Aumento della conversione del 20%</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>L&#039;estensione ci ha aiutato ad aumentare la conversione del 20%. Lo consiglierei a tutti i proprietari di negozi Magento 2.</span> </div> </div> <div class="block pt-7"><p class="font-bold">Amasty answer</p><div class="mt-1">Hi Vincenzo, thank you for sharing your experience with the extension! It is great to see that you are enjoying its functionality and that it has already helped you to grow conversion rate by 20%. We&#039;re grateful to have you as our loyal customer!</div></div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="10551" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Alberto <br> <span class="text-secondary" itemprop="author">Pro Toys, Owner</span> </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Jan&#x20;19,&#x20;2021">Jan 19, 2021</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">Good tool to make promotions frequently, fast support</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>We needed a tool to make interesting promotions. But the existing processes were very slow. Now we are using Amasty’s Special Promotions Pro and launching various campaigns every week. I had a couple of questions about the module when I started to work with it, but the support resolved my issues in just a few hours! I was impressed with it. I would recommend the extension to every e-commerce store.</span> </div> </div> <div class="block pt-7"><p class="font-bold">Amasty answer</p><div class="mt-1">Hi Alberto, thank you so much for your feedback! It is great to hear that the plugin has helped you to run more engaging campaigns. Also, we are happy to know that you are satisfied with the level of support provided. Our team always does their best to be as fast and helpful as possible!</div></div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="10549" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Marco <br> <span class="text-secondary" itemprop="author">21eyez, Director</span> </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Jan&#x20;11,&#x20;2021">Jan 11, 2021</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">Big variety of promotion options</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>I will recommend this extension to all Magento stores because it will drive your sales up with a big variety of promotion options!</span> </div> </div> <div class="block pt-7"><p class="font-bold">Amasty answer</p><div class="mt-1">Hi Marco, thank you very much for the feedback. We&#039;ll look forward to seeing you in our store again!</div></div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="10548" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Martin <br> <span class="text-secondary" itemprop="author">Softstar, Marketer</span> </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Jan&#x20;6,&#x20;2021">Jan 6, 2021</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">More promotions beyond Magento standard cart rules</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>We wanted to offer more promotions to customers beyond Magento standard cart rules. With the extension, we were able to do this. We launched several successful campaigns that boosted our sales. Aside from providing more promotion options, the extension also allowed us to manage cart rules better. We can now duplicate cart rules and edit them in bulk. Any e-commerce business that plans to reach out to customers with regular sales promotions would benefit from this extension.</span> </div> </div> <div class="block pt-7"><p class="font-bold">Amasty answer</p><div class="mt-1">Hi Martin, thank you very much for your detailed feedback! It is great to hear that the extension enabled you to launch more successful promotions thus boosting your sales. We are grateful to have you as our loyal customer! Please contact us anytime you need additional functionality or if you have any questions, we&#039;ll be happy to help!</div></div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="10414" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Max Krukovsky <br> <span class="text-secondary" itemprop="author">KCG, Owner</span> </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Oct&#x20;16,&#x20;2020">Oct 16, 2020</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">Perfect for complex promo rules</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>With this extension now we can easily create complex promo rules. I seriously believe that this should be installed by default by any company running its business on Magento. I do not see a contemporary shop without this functionality. And the support team was fast to answer my questions. </span> </div> </div> <div class="block pt-7"><p class="font-bold">Amasty answer</p><div class="mt-1">Hi Max, thanks for your kind feedback! We’re happy that the extension was helpful, and it’s great to hear that you&#039;re satisfied with the level of support provided. Our team always does their best to assist our customers. </div></div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="10342" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Rob Collins <br> <span class="text-secondary" itemprop="author">KMS Tools &amp; Equipment, eCommerce Manager</span> </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Jun&#x20;27,&#x20;2020">Jun 27, 2020</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">Very easy to use and powerful in its abilities</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:true }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>I was looking for an extension that would simplify creating special price promotions. Our promos can get complicated and this extension solved a lot of issues. With this extension, I am able to generate multiple promotions that do not conflict with each other. I can also train our Marketing Team to make their own promotions without having to call our Developer. It&#039;s very easy and strait forward to use, and very powerful in its abilities. I would recommend this extension for anybody who has many promotions running at the same time, particularly if you carry a lot of different brands.</span> <span class="amshowmore-button text-sm text-blue-600 hover:cursor-pointer flex" @click="isHidden = !isHidden"><span x-text="isHidden ? 'Show more' : 'Show less'"></span> <span class="mx-0 my-auto"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="text-blue-600" width="13" height="13" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/></svg> </span></span> </div> </div> <div class="block pt-7"><p class="font-bold">Amasty answer</p><div class="mt-1">Hi Rob, thank you for sharing your feedback! Happy to see that the extension has made it easy for your team to run multiple promotions. Looking forward to seeing you in our store again!</div></div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="10269" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Gabriele Fröbel-Schach <br> <span class="text-secondary" itemprop="author">Mergedmedia AG, Onlineshopmanager</span> </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Apr&#x20;27,&#x20;2020">Apr 27, 2020</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name"> I would recommend this extensions for other stores eg food or fashion. There are more opportunities to promote specials.</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>I bought this mosule 7 month ago, because we need more Magento Cart and discount rules. After using it we offer more promotions in the shop since then and were able to increase the conversion rate. It is easy to install, good documentation for setup and operation. I would recommend this extensions for other stores eg food or fashion. There are more opportunities to promote specials.</span> </div> </div> <div class="block pt-7"><p class="font-bold">Amasty answer</p><div class="mt-1">Hi, Gabriele!<br /> <br /> Thank you for choosing Amasty Special Promotions Pro for Magento 2.<br /> We are glad that you appreciate it&#039;s installation guide.<br /> We would be happy to see you in our store again!</div></div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="10255" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Sean Brady <br> <span class="text-secondary" itemprop="author">One Eighty Smoke Vape Store, Analyst Product Management</span> </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Apr&#x20;17,&#x20;2020">Apr 17, 2020</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">I consider it a requirement for any magento store</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>The extension is easy to use. For us it was a difficulty controlling promotions to apply properly. Extensions helped us to precise control over shopping cart rules. I consider it a requirement for any magento store and we usw it a few years.</span> </div> </div> <div class="block pt-7"><p class="font-bold">Amasty answer</p><div class="mt-1">Hi Sean!<br /> Thank you for your feedback for our Special Promotions Pro for Magento 2.<br /> We would be happy to see you in our store again! </div></div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="10190" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Pawel <br> <span class="text-secondary" itemprop="author">GiftsDirect, Head Of Product</span> </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Feb&#x20;17,&#x20;2020">Feb 17, 2020</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">Ease of use and good Guide doc</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>Special Promotions Pro is used for 4 months. We wanted To offer more amp; better promotions, also to increase AOV. Module helped icrease in overall customer satisfaction. It is ease of use and good Guide doc. Support made answers to our qusetions. I can reccomend it To any e-commerce shop, that wants to expand its promo offering.</span> </div> </div> <div class="block pt-7"><p class="font-bold">Amasty answer</p><div class="mt-1">Dear Pawel!<br /> Thank you for choosing our extensions. I’m glad that you appreciate their quality. <br /> We would be happy to see you in our store again! </div></div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="10073" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Terry W <br> <span class="text-secondary" itemprop="author">E-Commerce &amp; Systems Manager</span> </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Nov&#x20;11,&#x20;2019">Nov 11, 2019</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">Very useful promotions extension</span> </div> <div class="amstars-rating-container flex mb-1" title="4&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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-gray-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> <span itemprop="ratingValue" class="hidden">80%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>This is a really useful extension if you want to offer promotional codes or discounts to customer groups. Logical approach to setting up each promotion and very easy to specify exclusions at category or product level. Promotions can be set to trigger on certain dates and expire on certain dates which is handy, but I would like to be able to set a specific time for start and end, which is currently missing from the module. Otherwise a very good and reliable solution. </span> </div> </div> <div class="block pt-7"><p class="font-bold">Amasty answer</p><div class="mt-1">Dear Terry, thank you for your review! We would be happy to see you in our store again! </div></div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="9960" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Zuzanna <div class="amreview-verified">Verified Buyer</div></div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Aug&#x20;13,&#x20;2019">Aug 13, 2019</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">very useful thing</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>Very good rich experience - useful thing</span> </div> </div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="9969" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Amit </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Jun&#x20;17,&#x20;2019">Jun 17, 2019</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">Very useful products!</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>Great module! I have bought 15+ extensions from Amasty. All of them are easy to install and add rich functionality. I particularly love special promotions pro, product labels, promo banners, improved sorting, order export. We depend on these modules, and they make our workflow easier.</span> </div> </div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="9144" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">ReePaulette </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Jul&#x20;5,&#x20;2018">Jul 5, 2018</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">Responsive support</span> </div> <div class="amstars-rating-container flex mb-1" title="4&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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-gray-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> <span itemprop="ratingValue" class="hidden">80%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>I want to say that for me it was hard to install but Amasty tech group did it from a to z. One thing could be better though, when you set promotions the info about it is like a small line above the cart screen. Some customers even don’t find it and then complain that I trick them. Would be nice to have this information in another way big and bright so no one misses it.</span> </div> </div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="8059" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Yolanda G </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Mar&#x20;10,&#x20;2018">Mar 10, 2018</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">Excellent extension for promotions</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:true }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>Actually, we started with another module, free gift. We wanted to give a gift when customer ordered min 100 items. Yet there was an error, and only changes in magento core could help. Amasty offered special promotions as an alternative. I don’t regret the switch. Special promotions is a stronger module that will do in my case as well. I just use catchy banners and promo items. Also, there are many other promo features. I wasn’t actually looking for them, but now they affect sales well. Recommended extension, really.</span> <span class="amshowmore-button text-sm text-blue-600 hover:cursor-pointer flex" @click="isHidden = !isHidden"><span x-text="isHidden ? 'Show more' : 'Show less'"></span> <span class="mx-0 my-auto"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="text-blue-600" width="13" height="13" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/></svg> </span></span> </div> </div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="8060" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Maria C. </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Feb&#x20;2,&#x20;2017">Feb 2, 2017</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">Good extension to diversify promos</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>A very practical extension for an online store. I heavily use promotions. I try different rule conditions to find those that pay off better. I had some questions regarding compatibility, and they answered very fast. No cons for now.</span> </div> </div> </div></li> <li class="review-item py-6 justify-between mb-0 flex-wrap border-solid border-b border-gray-300 block md:flex" data-amreview-js="review-entity" data-amreview-id="7135" itemscope itemprop="review" itemtype="http://schema.org/Review" x-data="amReviewItem()"><div class="md:w-1/4 relative mb-5"><div class="max-md:flex max-md:items-center max-md:justify-between"><div class="amreview-author break-all am-text-small mb-0 md:mr-7" itemprop="author">Rick H </div><p class="amreview-date text-secondary am-text-caption mb-0 md:mt-2"><time class="review-details-value" itemprop="datePublished" datetime="Dec&#x20;23,&#x20;2016">Dec 23, 2016</time></p></div></div><div class="amreview-description-wrap md:w-3/4 max-w-[100%]"><div class="amrev-desc-title items-center flex justify-between"><span class="amreview-title-review pb-3 text-lg font-bold" itemprop="name">A masterpiece</span> </div> <div class="amstars-rating-container flex mb-1" title="5&#x20;stars" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" > <meta itemprop="worstRating" content="1"/><meta itemprop="bestRating" content="100"/> <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> <span itemprop="ratingValue" class="hidden">100%</span> </div> <div class="my-2 break-words"> <div class="amshowmore-container" x-data="{ isHidden:false }"><span class="amreview-text block relative overflow-hidden my-1 text-ellipsis after:absolute after:bottom-1 after:right-0 after:left-0 after:pointer-events-none after:bg-gradient-to-b after:from-transparent after:to-white" :class="isHidden ? 'max-h-[6.25rem] after:h-8' : 'after:h-0'" x-cloak>A real masterpiece by Amasty - eventually, I have it on Magento 2. Works as described, smoothly and without conflicts. 22 ready-made flexible promotions and dozens of conditions to please and engage buyers. </span> </div> </div> </div></li> </ol><div class="toolbar review-toolbar amreview-toolbar-wrap"></div></div></div></div> <div x-data="hyva.modal()"> <div x-cloak x-bind="overlay('form-review-popup')" x-spread="overlay('form-review-popup')" class="am-overlay-popup z-60"><div class="am-container-popup inset-0"><div x-ref="form-review-popup" role="dialog" aria-modal="true" aria-labelledby="form-review-popup" class="am-dialog-popup w-full sm:max-w-[510px] sm:max-h-[90vh]"> <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" stroke="currentColor" viewBox="0 0 24 24" class="stroke-2" 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 class="mx-auto items-center" id="review-form" tabindex="0"><div class="card w-full flex flex-col items-center"><h3 class="am-title-h2 sm:text-4xl">Write your own review</h3><form class="review-form" id="review_form" @submit.prevent="submitForm()" action="https://amasty.com/review/product/post/id/649/" x-data="Object.assign(hyva.formValidation($el), initAmReviewForm_67bef4ab7949c())" data-product-id="649" enctype="multipart/form-data" > <fieldset><legend class="text-xs"><span> You&#039;re reviewing:</span> <span class="font-semibold">Special Promotions Pro for Magento 2</span></legend> <fieldset class="amreview-rating-group" name="rating-group"><div class="flex flex-col mt-4 mb-3"><div class="text-md hidden">Your Rating:</div><div><div id="product-review-table"> <div class=""><p class="text-center">Please rate name <span class="font-bold">Special Promotions Pro for Magento 2</span> <span class="block"> from 1 to 5 stars</span></p><div class="relative flex justify-center mt-2 focus-within:ring-1 " > <div class="" @click="clickedRatingId = 1 || 0" @mouseover="hovered = 1 || 0" @mouseleave="hovered = 0;" ><label class="rating-1 m-0 cursor-pointer text-gray-400" for="Overall&#x20;extension&#x20;rating_1_67bef4ab7949c" id="Overall&#x20;extension&#x20;rating_1_67bef4ab7949c_label" ><span class="text-gray-400" :class="{ 'text-yellow-400' : 1 <= clickedRatingId || 1 <= hovered }" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" width="32" height="32" 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> </span> <input class="absolute opacity-0 bottom-0 left-0 cursor-pointer" type="radio" required data-msg-required="Please&#x20;select&#x20;one&#x20;of&#x20;each&#x20;of&#x20;the&#x20;ratings&#x20;above." name="ratings[1]" id="Overall&#x20;extension&#x20;rating_1_67bef4ab7949c" value="1" aria-label="1&#x20;star" /></label></div> <div class="" @click="clickedRatingId = 2 || 0" @mouseover="hovered = 2 || 0" @mouseleave="hovered = 0;" ><label class="rating-2 m-0 cursor-pointer text-gray-400" for="Overall&#x20;extension&#x20;rating_2_67bef4ab7949c" id="Overall&#x20;extension&#x20;rating_2_67bef4ab7949c_label" ><span class="text-gray-400" :class="{ 'text-yellow-400' : 2 <= clickedRatingId || 2 <= hovered }" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" width="32" height="32" 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> </span> <input class="absolute opacity-0 bottom-0 left-0 cursor-pointer" type="radio" name="ratings[1]" id="Overall&#x20;extension&#x20;rating_2_67bef4ab7949c" value="2" aria-label="2&#x20;stars" /></label></div> <div class="" @click="clickedRatingId = 3 || 0" @mouseover="hovered = 3 || 0" @mouseleave="hovered = 0;" ><label class="rating-3 m-0 cursor-pointer text-gray-400" for="Overall&#x20;extension&#x20;rating_3_67bef4ab7949c" id="Overall&#x20;extension&#x20;rating_3_67bef4ab7949c_label" ><span class="text-gray-400" :class="{ 'text-yellow-400' : 3 <= clickedRatingId || 3 <= hovered }" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" width="32" height="32" 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> </span> <input class="absolute opacity-0 bottom-0 left-0 cursor-pointer" type="radio" name="ratings[1]" id="Overall&#x20;extension&#x20;rating_3_67bef4ab7949c" value="3" aria-label="3&#x20;stars" /></label></div> <div class="" @click="clickedRatingId = 4 || 0" @mouseover="hovered = 4 || 0" @mouseleave="hovered = 0;" ><label class="rating-4 m-0 cursor-pointer text-gray-400" for="Overall&#x20;extension&#x20;rating_4_67bef4ab7949c" id="Overall&#x20;extension&#x20;rating_4_67bef4ab7949c_label" ><span class="text-gray-400" :class="{ 'text-yellow-400' : 4 <= clickedRatingId || 4 <= hovered }" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" width="32" height="32" 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> </span> <input class="absolute opacity-0 bottom-0 left-0 cursor-pointer" type="radio" name="ratings[1]" id="Overall&#x20;extension&#x20;rating_4_67bef4ab7949c" value="4" aria-label="4&#x20;stars" /></label></div> <div class="" @click="clickedRatingId = 5 || 0" @mouseover="hovered = 5 || 0" @mouseleave="hovered = 0;" ><label class="rating-5 m-0 cursor-pointer text-gray-400" for="Overall&#x20;extension&#x20;rating_5_67bef4ab7949c" id="Overall&#x20;extension&#x20;rating_5_67bef4ab7949c_label" ><span class="text-gray-400" :class="{ 'text-yellow-400' : 5 <= clickedRatingId || 5 <= hovered }" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" width="32" height="32" 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> </span> <input class="absolute opacity-0 bottom-0 left-0 cursor-pointer" type="radio" name="ratings[1]" id="Overall&#x20;extension&#x20;rating_5_67bef4ab7949c" value="5" aria-label="5&#x20;stars" /></label></div> </div></div></div><input type="hidden" name="validate_rating" value=""/></div></div></fieldset> <div class="mt-8"><div class="am-input field field-reserved required"><input name="nickname" type="text" required id="nickname_field_67bef4ab7949c" placeholder="Nickname" /><label class="label" for="nickname_field_67bef4ab7949c">Nickname</label></div> <div class="am-input field field-reserved required"><input name="title" type="text" required id="summary_field_67bef4ab7949c" placeholder="Summary&#x20;of&#x20;your&#x20;review" /><label class="label" for="summary_field_67bef4ab7949c">Summary of your review</label></div><div class="am-input field field-reserved required"><textarea name="detail" required cols="5" id="review_field_67bef4ab7949c" placeholder="Review" ></textarea> <label class="label" for="review_field_67bef4ab7949c">Review</label></div><div class="am-input field field-reserved"><input name="company" type="text" id="review_company" placeholder="Company" /><label class="field-optional after:text-secondary-lighter label" for="review_company">Company </label></div><div class="am-input field field-reserved"><input name="position" type="text" id="review_position" placeholder="Position" /><label class="field-optional after:text-secondary-lighter label" for="review_position">Position </label></div> <div class="am-input field field-reserved"><textarea name="like_about" rows="3" maxlength="700" id="amreview-pros-field_67bef4ab7949c" placeholder="Advantages" ></textarea> <label class="field-optional after:text-secondary-lighter label" for="amreview-pros-field_67bef4ab7949c">Advantages </label></div><div class="am-input field field-reserved"><textarea name="not_like_about" rows="3" maxlength="700" id="amreview-cons-field_67bef4ab7949c" placeholder="Disadvantages" ></textarea> <label class="field-optional after:text-secondary-lighter label" for="amreview-cons-field_67bef4ab7949c">Disadvantages </label></div> <div class="review-field-image w-full flex !mt-3 field pl-0.5 "><label class="label mr-14 font-bold">Add your photo</label> <input class="amrev-input" name="review_images[]" accept="image/*" multiple type="file" ></div> </div></fieldset><div class="mt-3"><div class="text-center"><button type="submit" class="btn btn-primary">Send Review</button></div></div></form></div></div></div></div></div></div></div></div></div></div> <div class="am-tabs-item" role="tabpanel" ><template x-if="isAccordion || isMobile"><div class="amtab-accordion-tab" role="tab"><a href="#customization" data-tab="customization" aria-label="customization" class="flex justify-between py-4 items-center cursor-pointer w-full text-primary hover:text-primary border-b-1 analytics-product-tab-title" :class="{'border-b-1': !isActiveTab('amcustomtabs_tabs_15')}" @click.prevent.stop="setActiveTabs('amcustomtabs_tabs_15')" ><span class="title text-md md:text-lg font-semibold analytics-product-tab-title" aria-label="customization">Customization</span> <span class="py-1 px-1 transition-transform transform duration-300 ease-in-out" :class="{'rotate-180': isActiveTab('amcustomtabs_tabs_15')}" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="icon-arrow" width="20" height="20" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </span></a></div></template><div class="tab-content pt-5 md:pt-10 customization" :class="{ 'card tab-view': !isAccordion && !isMobile, 'md:px-4 py-4 accordion-view': isAccordion, 'border-b-1': isMobile && isActiveTab('amcustomtabs_tabs_15') }" id="amcustomtabs_tabs_15" x-cloak x-show="isActiveTab('amcustomtabs_tabs_15')" ><div class="am-custom-tab am-custom-tab-15"><div class="amsite-tab-content -customization"> <h2 class="amsite-title">Do you need specific features added so you can achieve your business goals?</h2> <p class=amsite-text>Drop us a line and we'll customize this extension for you!</p> </div> <form class="rendered-form amform-form mb-12 mx-auto group-[.am-dialog-popup]:mb-0 default" id="amform-form-9" action="https://amasty.com/amasty_customform/form/submit/" enctype="multipart/form-data" method="post"><input name="form_key" type="hidden" value="MHGQ3iWjobpQ13yt" /><input name="form_id" type="hidden" value="9" /><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="page19"> <!-- 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-9" name="first-name" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" maxlength="40" required placeholder="Type&#x20;here..." ><label class=" label " for="first-name-form-9">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-9" 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;" maxlength="255" required placeholder="Type&#x20;here..." ><label class=" label " for="last-name-form-9">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-9" name="email" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" style="default;" maxlength="255" required placeholder="Type&#x20;here..." ><label class=" label " for="email-form-9">Business email</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" style="default;" x-data="{ focused: false, value: '' }"> <input type="text" id="phone-form-9" name="phone" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" style="default;" maxlength="255" required placeholder="Type&#x20;here..." ><label class=" label " for="phone-form-9">Business Phone Number</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-9" 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="4" placeholder="Type&#x20;here..." ></textarea> <label class=" label " for="description-form-9">What&#039;s your wish?</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="initFormEvents9().processSubmit( $refs.page19, $refs.tab19, $event)">Send request</button> </div></div> </div> <!--Validations--><!--Dependencies--><!--Survey--> <!--Default values--><!--Init google map--></form></div></div></div> <div class="am-tabs-item" role="tabpanel" ><template x-if="isAccordion || isMobile"><div class="amtab-accordion-tab" role="tab"><a href="#changelog" data-tab="changelog" aria-label="changelog" class="flex justify-between py-4 items-center cursor-pointer w-full text-primary hover:text-primary border-b-1 analytics-product-tab-title" :class="{'border-b-1': !isActiveTab('amcustomtabs_tabs_16')}" @click.prevent.stop="setActiveTabs('amcustomtabs_tabs_16')" ><span class="title text-md md:text-lg font-semibold analytics-product-tab-title" aria-label="changelog">Change Log</span> <span class="py-1 px-1 transition-transform transform duration-300 ease-in-out" :class="{'rotate-180': isActiveTab('amcustomtabs_tabs_16')}" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="icon-arrow" width="20" height="20" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </span></a></div></template><div class="tab-content pt-5 md:pt-10 change log" :class="{ 'card tab-view': !isAccordion && !isMobile, 'md:px-4 py-4 accordion-view': isAccordion, 'border-b-1': isMobile && isActiveTab('amcustomtabs_tabs_16') }" id="amcustomtabs_tabs_16" x-cloak x-show="isActiveTab('amcustomtabs_tabs_16')" ><div class="am-custom-tab am-custom-tab-16"><div class="amsite-changelog-tab"> <div class="amsite-changelog-top"><div class="amtheme-content"><div class="amtheme-card-block flex"><p class="!mb-5">You can install extensions and updates via Composer</p><div class="amtheme-actions !mt-auto"><a class="action" title="Check&#x20;Now" aria-label="Check&#x20;Now" href="https://amasty.com/knowledge-base/upgrade-magento-2-extension.html">Check now →</a></div></div><div class="amtheme-card-block"><p>See Magento (and other software) versions we support and guarantee their compatibility with our extensions</p><div class="amtheme-actions"><a class="action" title="Check&#x20;Now" aria-label="Check&#x20;Now" href="https://amasty.com/knowledge-base/what-magento-versions-amasty-supports.html">Check now →</a></div></div></div><div class="amtheme-actions customer-login"> <a class="action secondary" href="https://amasty.com/customer/account/login/" title="My&#x20;Downloads" aria-label="My&#x20;Downloads" data-social-login-redirect="/amcustomer/account/products">My Downloads</a></div></div> <div class="changelog-block -multi" data-mage-init='{"amsiteChangelogTabs": {}}' > <div class="changelog-nav "> <ul class="items"> <li class="item link"><a href="#changelog" class="action -active" data-amsite-js="changelog-nav-item-main" data-product-id="0" title="Special&#x20;Promotions&#x20;for&#x20;M2&#x20;&#x28;Pro&#x29;" aria-label="Special&#x20;Promotions&#x20;for&#x20;M2&#x20;&#x28;Pro&#x29;">Special Promotions for M2 (Pro)</a></li> <li class="item link"><a href="#changelog_1" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="1" title="Special&#x20;Promotions&#x20;for&#x20;M2" aria-label="Special&#x20;Promotions&#x20;for&#x20;M2">Special Promotions for M2</a></li> <li class="item link"><a href="#changelog_2" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="2" title="Promotions&#x20;Manager&#x20;for&#x20;M2" aria-label="Promotions&#x20;Manager&#x20;for&#x20;M2">Promotions Manager for M2</a></li> </ul> <div class="field -changelog-select "> <label class="label" for="changelog-nav-select">Select item</label> <select id="changelog-nav-select" data-amsite-js="changelog-nav-select" tabindex="-1"> <option value="0" selected="selected" >Special Promotions for M2 (Pro)</option> <option value="1" >Special Promotions for M2</option> <option value="2" >Promotions Manager for M2</option></select> </div></div> <div class="changelog-list" data-amsite-js="changelog-list-main"> <div class="tab-item " id="main_changelog_0" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.17.0</span></span> <div class="amsite-date">Last Update: Jan 20, 2025</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.17.0</span> - Jan 20, 2025</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> added a Discount Dropdown, allowing customers to select cart price rule discounts via a drop-down list on the cart or checkout page (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">New</span> we added a new extension to the module that allows Cart discounts to be displayed in the Mini cart (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> introduced a new condition, &#039;Subscribed to Newsletter&#039;, enabling the configuration of rules based on the newsletter subscription status of registered customers (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Fix</span> corrected discount calculations for Bundle products</li> <li class="item"><span class="amsite-label">Fix</span> resolved an issue with incorrect rule application when multiple rules with the conditions &#039;Total Sales Amount&#039; and &#039;Period after order was placed&#039; are present</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View&#x20;All&#x20;Previous&#x20;Updates" aria-label="View&#x20;All&#x20;Previous&#x20;Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.16.1</span></span> <div class="amsite-date">Last Update: Dec 10, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.16.1</span> - Dec 10, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> enhanced the module&#039;s compatibility with GraphQL Application Server</li> </ul> <div class="amsite-date"><span class="amsite-label">2.16.0</span> - Oct 15, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the Discount Breakdown functionality of the Special Promotion Pro module is now compatible with both Hyvä Theme and Hyvä Checkout. You can find the &#039;amasty/module-special-promotions-hyva&#039; package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.15.0</span></span> <div class="amsite-date">Last Update: Sep 04, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.15.0</span> - Sep 04, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added the ability to display a discount label even if the discount amount is 0</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Improved Layered Navigation, and navigation filters can now be configured without errors</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue where the &#039;Most Expensive&#039; rule was applied incorrectly when &#039;Maximum Qty Discount is Applied To&#039; was set to 1</li> <li class="item"><span class="amsite-label">Fix</span> the discount is now calculated correctly when applying the rule via GraphQL</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the recalculation of the discount amount when changing the currency in the cart</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.14.0</span></span> <div class="amsite-date">Last Update: Apr 29, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.14.0</span> - Apr 29, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved the &#039;Product Set&#039; action, so now sets based on categories can be created an unlimited number of times</li> <li class="item"><span class="amsite-label">Refactoring</span> we removed the \Amasty\Rules\Model\Rule\Action\Discount\AbstractSetof::formCategorySet() method (Please note: this release is backward incompatible. After this update, third-party customizations on your instance may become incompatible with the module)</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the incorrect discount calculation when using the &#039;Each N-th&#039; group of actions </li> <li class="item"><span class="amsite-label">Fix</span> the issue with rules duplication was resolved</li> <li class="item"><span class="amsite-label">Fix</span> now the &#039;Skip Items with Special Price (incl. Catalog Price Rules)&#039; option works correctly</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the &#039;amasty_rulespro_cache_warmer&#039; cron job error</li> <li class="item"><span class="amsite-label">Fix</span> the issue of incorrectly rounding the discount amount was resolved</li> <li class="item"><span class="amsite-label">Fix</span> we fixed discounts calculation when Catalog prices include taxes</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with applying the &quot;Product Set&quot; action to group products</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.13.1</span></span> <div class="amsite-date">Last Update: Apr 17, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.13.1</span> - Apr 17, 2024</div><ul class="items"> <li class="item"><span class="amsite-label"></span> 2.13.1</li> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.7. For correct compatibility, please install the &#039;amasty/module-mage-2.4.7-fix&#039; package, which can be found in the composer suggest.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.13.0</span> - Nov 30, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> new Cart Price Rules action &#039;Percent Discount: Buy X (Buy 1 for 10% off, Buy 2 for 20% off, etc)&#039; was added so it is now possible to set up tiered discount promotions (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Refactoring</span> we refactored variables and methods in the frontend code of the promo banners lite module according to the code standards</li> <li class="item"><span class="amsite-label">Fix</span> we solved the issue with the error that occurred during the execution of amasty_rulespro_cache_warmer cron job</li> <li class="item"><span class="amsite-label">Fix</span> now the ‘Fixed Price: each 5th, 10th, 15th for $49’ rule does not add value to discounted products if their regular price is lower than the discounted price</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.12.2</span></span> <div class="amsite-date">Last Update: Aug 14, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.12.2</span> - Aug 14, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved the sort order of discount breakdown when Checkout Totals Sort Order is changed</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the discount calculation when it is based on the original price</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the discount not applying when products with expired special prices are skipped</li> <li class="item"><span class="amsite-label">Fix</span> we optimized the indexer ‘amasty_amrules_purchase_history_index’</li> </ul> <div class="amsite-date"><span class="amsite-label">2.12.1</span> - Jun 20, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with the Promo Rules coupon code application</li> </ul> <div class="amsite-date"><span class="amsite-label">2.12.0</span> - Jun 01, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now it is possible to Import and Export Cart Price Rules (Note: functionality is available as part of an active product subscription or Support Subscription) </li> <li class="item"><span class="amsite-label">New</span> new Cart Price Rule action &#039;Fixed Price: The Cheapest, also for Buy 1 get 1 free&#039; was added so it is now possible to set up fixed price promotions for the cheapest product</li> <li class="item"><span class="amsite-label">New</span> we added new &#039;Applied Cart Price Rule&#039; condition for Cart Price Rules (Note: functionality is available as part of an active product subscription or Support Subscription) </li> <li class="item"><span class="amsite-label">Improvement</span> we changed the Cart Price Rules duration settings format for CE Magento from ‘date’ to &#039;date and time’ (Note: functionality is available as part of an active product subscription or Support Subscription) </li> <li class="item"><span class="amsite-label">Improvement</span> we improved the Cart Price Rules processing and validation performance</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the &#039;Percent discount for product set&#039; rule applying when configurable products are being used as &#039;Define product set&#039; products</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.11.1</span></span> <div class="amsite-date">Last Update: Apr 06, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.11.1</span> - Apr 06, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the error occurred as a result of the API /rest/V1/integration/customer/token request</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the reindexation issue with &#039;amasty_amrules_purchase_history_index&#039; index</li> </ul> <div class="amsite-date"><span class="amsite-label">2.11.0</span> - Feb 09, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved the active rules validation process on the Cart and Checkout pages by adding additional caching and asynchronous cache warming on the back-end</li> <li class="item"><span class="amsite-label">Improvement</span> we optimized column types in the Database</li> <li class="item"><span class="amsite-label">Improvement</span> minor improvements in system messages to avert issues while configure discounts applying </li> <li class="item"><span class="amsite-label">Improvement</span> &#039;Amasty: Special Promotions - Purchase History Indexer&#039; index was added in order to speed up the ‘Purchases history’ and &#039;Orders Subselection&#039; conditions processing</li> <li class="item"><span class="amsite-label">Refactoring</span> we refactored the module(Promo banners Lite) code to avert issues with adding rule promo banner image via API</li> <li class="item"><span class="amsite-label">Fix</span> we solved the &#039;Fixed price for product set&#039; rule discount calculating problem when adding two or more sets</li> <li class="item"><span class="amsite-label">Fix</span> now the &#039;Fixed Price: each 5th, 10th, 15th for $49&#039; rule calculates the discount correctly</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.10.0</span></span> <div class="amsite-date">Last Update: Dec 21, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.10.0</span> - Dec 21, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> new Cart Price Rule action &#039;Buy X get Y free (any products)&#039; was added. It allows to create the Cart Price Rule with any number of Gift items from any category in one rule application</li> <li class="item"><span class="amsite-label">Improvement</span> we replaced the &quot;Skip Items with Special Price&quot; setting with &quot;Skip Items with&quot; setting and expanded its functionality to allow more flexible Cart Price Rules configuration</li> <li class="item"><span class="amsite-label">Improvement</span> we added Shipping to Multiple Addresses support for the module actions</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with incorrect discount calculation when Max Amount of Discount setting is being used</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the error occurred while adding a product to the cart and page reloading</li> <li class="item"><span class="amsite-label">Fix</span> the issue with discount amount rounding in the cart was resolved</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.9.0</span></span> <div class="amsite-date">Last Update: Sep 26, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.9.0</span> - Sep 26, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now the extension works with bundle products so you can offer your customers discounts on bundled products</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.8.7</span></span> <div class="amsite-date">Last Update: Sep 20, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.8.7</span> - Sep 20, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we updated the extension packages to avoid tariff conflicts during upgrading</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.6</span> - Mar 16, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> compatibility with Amasty Order Status was improved</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with Current Uses and Global Uses Limit settings</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.5</span> - Oct 14, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we reduced the number of queries to the database to improve performance</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.4</span> - Apr 17, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added information tooltip for Maximum Qty Discount field</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.3</span> - Apr 02, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved compatibility with Amasty Free Gift extension</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.2</span> - Feb 27, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with label saving in Cart Price Rule</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.1</span> - Feb 19, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with coupon code saving</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.0</span> - Feb 17, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> ability to limit a number of times the particular cart price rule will be triggered was added. Now, you can limit any cart price rule usage without the necessity to configure coupons</li> <li class="item"><span class="amsite-label">Compatibility</span> we enhanced the compatible with Amasty Abandoned Cart extension</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.7.10</span></span> <div class="amsite-date">Last Update: Nov 04, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.7.10</span> - Nov 04, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with Group of N rule</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with displaying banner on all store views</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.9</span> - Aug 13, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> max length for Promo SKU field was increased</li> <li class="item"><span class="amsite-label">Improvement</span> alidation for Y products in \&quot;Buy X Get Y\&quot; action was added: MFTF tests was enhanced for \&quot;Buy X get Y\&quot; action</li> <li class="item"><span class="amsite-label">Fix</span> the issue with cart updating was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.8</span> - Jun 26, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with rounding to 1 cent for Each Group of N: Fixed price action was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.7</span> - Jun 06, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now extension covered by 29 Magento Functional Testing Framework tests</li> <li class="item"><span class="amsite-label">Fix</span> the issue with cart price rule schedule update was fixed</li> <li class="item"><span class="amsite-label">Fix</span> the issue with duplicating customer attributes in condition tree was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.6</span> - May 10, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with banners displaying was resolved</li> <li class="item"><span class="amsite-label">Improvement</span> extension was covered by unit tests</li> <li class="item"><span class="amsite-label">Improvement</span> code was refactored according to Magento Standards</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.5</span> - Apr 29, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with Promotions Manager dependency through composer installation was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.4</span> - Mar 27, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with maximum amount of discount after order placing was fixed</li> <li class="item"><span class="amsite-label">Fix</span> the issue with saving cart price rule after uploading banner image was resolved</li> <li class="item"><span class="amsite-label">Improvement</span> the code for actions \&quot;The Cheapest\&quot; and \&quot;The Most Expensive\&quot; was refactored and enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.3</span> - Mar 27, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with maximum amount of discount after order placing was fixed</li> <li class="item"><span class="amsite-label">Fix</span> the issue with saving cart price rule after uploading banner image was resolved</li> <li class="item"><span class="amsite-label">Improvement</span> the code for actions \&quot;The Cheapest\&quot; and \&quot;The Most Expensive\&quot; was refactored and enhanced</li> <li class="item"><span class="amsite-label">Fix</span> the issue with SKU validation for \&quot;Each Group of N\&quot; action was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.2</span> - Feb 27, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with validation by SKU for configurable products was fixed</li> <li class="item"><span class="amsite-label">Fix</span> the issue with calculating product set discount was resolved</li> <li class="item"><span class="amsite-label">Improvement</span> the css code was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.1</span> - Dec 07, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with undefined index was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.0</span> - Nov 29, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issues with \&quot;Buy X get Y\&quot; action were resolved</li> <li class="item"><span class="amsite-label">Improvement</span> minor adjustments affecting the behaviour of Amasty One Step Checkout discount breakdown were made</li> <li class="item"><span class="amsite-label">New</span> the ability to select promo products based on categories for the actions of a \&quot;Product Set\&quot; type was added. Now you can specify a category instead of manual listing all applicable products</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.6.2</span></span> <div class="amsite-date">Last Update: Nov 13, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.6.2</span> - Nov 13, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with install extension on Magento 2.2.0 was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.1</span> - Nov 02, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the integration with Amasty Promo Banners and Amasty Product Labels extensions was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.0</span> - Oct 31, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> introducing the ability to show promo banners and labels on products to highlight promotions</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.5.3</span></span> <div class="amsite-date">Last Update: Oct 23, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.5.3</span> - Oct 23, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with the extension update was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.4</span> - Oct 23, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with extension updating was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.2</span> - Oct 18, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with the Cart Price Rules was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.1</span> - Oct 11, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with the cart price rule preview on Magento Commerce was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the issues with the scheduler on Magento Commerce 2.2.x were resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.0</span> - Sep 05, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the fields order and the text prompts are changed to simplify the cart price rules settings.</li> <li class="item"><span class="amsite-label">New</span> the debug mode for a shopping cart was added. Now you can see the discounts applied to each item in the cart</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.4.4</span></span> <div class="amsite-date">Last Update: Aug 22, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.4.4</span> - Aug 22, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the compatibility with the Amasty Shipping Rules extension was improved</li> <li class="item"><span class="amsite-label">Improvement</span> the work of the discount breakdown feature was improved</li> <li class="item"><span class="amsite-label">Improvement</span> the integration with Amasty Promo Banners and Amasty Product Labels extensions was added</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.3</span> - Jul 30, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with a group discount when making PayPal payment was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with the counting of items for the action &#039;buy x get y&#039; was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.2</span> - Jul 19, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with reward points was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.1</span> - Jul 13, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with cron in scheduler on Magento Enterprise Edition (Magento Commerce) was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.0</span> - Jul 05, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the ability to apply discounts to the same products in the cart via \&quot;Each N-th\&quot; actions was added</li> <li class="item"><span class="amsite-label">New</span> the ability to read/update/create rules via Magento API was added</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.3.0</span></span> <div class="amsite-date">Last Update: Jun 08, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.3.0</span> - Jun 08, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the information section was added. Now you can see the version of installed extension, available updates, User Guide link and other useful data right on the module Configuration page</li> <li class="item"><span class="amsite-label">New</span> the ability to apply a discount to the cheapest or the most expensive products first, by configuring &#039;Each N-th&#039;, &#039;Each Group of N&#039; and &#039;Each Product After N&#039;, was added</li> <li class="item"><span class="amsite-label">Improvement</span> the &#039;Calculate Discount Based On&#039; setting was removed from &#039;Each N-th&#039;, &#039;Buy X Get Y&#039; and &#039;Each Product After N&#039; actions</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.2.5</span></span> <div class="amsite-date">Last Update: Jun 06, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.2.5</span> - Jun 06, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with Magento versions less than 2.2.4 was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.4</span> - Jun 01, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> &#039;Calculate Discount Based On&#039; setting was removed from &#039;Each N-th&#039;, &#039;Buy X Get Y&#039; and &#039;Each Product After N&#039; actions as non-applicable.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.3</span> - May 07, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> design of Discount Breakdown was adjusted</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.2</span> - May 02, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> Magento Enterprise Schedule feature support was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.1</span> - Apr 19, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Links to usage examples were added</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.0</span> - Apr 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> compatibility with Amasty Customer Attributes introduced</li> <li class="item"><span class="amsite-label">New</span> discount breakdown introduced. Now you can see all promotion rules applied with discount amount for each</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.0</span></span> <div class="amsite-date">Last Update: Mar 14, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - Mar 14, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Improved the &#039;Product set&#039; action. Now, only SKUs can be used to create a set</li> <li class="item"><span class="amsite-label"></span> FIxed an issue with &#039;Max Amount of Discount&#039; setting</li> <li class="item"><span class="amsite-label"></span> Fixed the logic of the &#039;Product set&#039; and &#039;Group of N&#039; actions</li> <li class="item"><span class="amsite-label"></span> Improved usability by removing the &#039;Maximum Qty Discount is Applied To&#039; setting from the &#039;Group of N&#039; action</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.5</span></span> <div class="amsite-date">Last Update: Mar 02, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.5</span> - Mar 02, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with installation on Magento 2.2.2</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.4</span> - Jan 18, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Compatibility with 3rd party extensions was improved</li> <li class="item"><span class="amsite-label"></span> Rare issue with extension installation on Magento Enterprise Edition was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.3</span> - Jan 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> &#039;Each N-th&#039; action behavior was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.2</span> - Dec 14, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> The discount calculation for the \&quot;Each Nth\&quot; rules was fixed.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.1</span> - Dec 04, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> The installation script was fixed.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Nov 29, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> The issue with promo rule labels display was fixed.</li> <li class="item"><span class="amsite-label"></span> The advanced conditions display on Magento Enterprise Edition was changed.</li> <li class="item"><span class="amsite-label"></span> The configuration of several promo actions was simplified:</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.3.1</span></span> <div class="amsite-date">Last Update: Oct 23, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.3.1</span> - Oct 23, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed discount display in admin area</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.0</span> - Oct 20, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed the rare case of division by zero</li> <li class="item"><span class="amsite-label">New</span> Magento Enterprise edition Schedule feature compatibility</li> <li class="item"><span class="amsite-label">New</span> Customer ID can be used as customer condition</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.2.4</span></span> <div class="amsite-date">Last Update: Oct 05, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.2.4</span> - Oct 05, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Magento 2.2 compatibility tested and confirmed</li> <li class="item"><span class="amsite-label"></span> \&quot;Each M-th after X-th\&quot; rule logic fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.3</span> - Aug 30, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Magento 2.2 compatibility introduced</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_1" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.16.0</span></span> <div class="amsite-date">Last Update: Jan 20, 2025</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.16.0</span> - Jan 20, 2025</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> added a Discount Dropdown, allowing customers to select cart price rule discounts via a drop-down list on the cart or checkout page (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">New</span> we added a new extension to the module that allows Cart discounts to be displayed in the Mini cart (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> introduced a new condition, &#039;Subscribed to Newsletter&#039;, enabling the configuration of rules based on the newsletter subscription status of registered customers (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Fix</span> corrected discount calculations for Bundle products</li> <li class="item"><span class="amsite-label">Fix</span> resolved an issue with incorrect rule application when multiple rules with the conditions &#039;Total Sales Amount&#039; and &#039;Period after order was placed&#039; are present</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View&#x20;All&#x20;Previous&#x20;Updates" aria-label="View&#x20;All&#x20;Previous&#x20;Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.15.1</span></span> <div class="amsite-date">Last Update: Dec 10, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.15.1</span> - Dec 10, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> enhanced the module&#039;s compatibility with GraphQL Application Server</li> </ul> <div class="amsite-date"><span class="amsite-label">2.15.0</span> - Sep 04, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added the ability to display a discount label even if the discount amount is 0</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Improved Layered Navigation, and navigation filters can now be configured without errors</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue where the &#039;Most Expensive&#039; rule was applied incorrectly when &#039;Maximum Qty Discount is Applied To&#039; was set to 1</li> <li class="item"><span class="amsite-label">Fix</span> the discount is now calculated correctly when applying the rule via GraphQL</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the recalculation of the discount amount when changing the currency in the cart</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.14.1</span></span> <div class="amsite-date">Last Update: Apr 29, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.14.1</span> - Apr 29, 2024</div><ul class="items"></ul> <div class="amsite-date"><span class="amsite-label">2.14.0</span> - Apr 29, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved the &#039;Product Set&#039; action, so now sets based on categories can be created an unlimited number of times</li> <li class="item"><span class="amsite-label">Refactoring</span> we removed the \Amasty\Rules\Model\Rule\Action\Discount\AbstractSetof::formCategorySet() method (Please note: this release is backward incompatible. After this update, third-party customizations on your instance may become incompatible with the module)</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the incorrect discount calculation when using the &#039;Each N-th&#039; group of actions </li> <li class="item"><span class="amsite-label">Fix</span> the issue with rules duplication was resolved</li> <li class="item"><span class="amsite-label">Fix</span> now the &#039;Skip Items with Special Price (incl. Catalog Price Rules)&#039; option works correctly</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the &#039;amasty_rulespro_cache_warmer&#039; cron job error</li> <li class="item"><span class="amsite-label">Fix</span> the issue of incorrectly rounding the discount amount was resolved</li> <li class="item"><span class="amsite-label">Fix</span> we fixed discounts calculation when Catalog prices include taxes</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with applying the &quot;Product Set&quot; action to group products</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.13.1</span></span> <div class="amsite-date">Last Update: Apr 17, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.13.1</span> - Apr 17, 2024</div><ul class="items"> <li class="item"><span class="amsite-label"></span> 2.13.1</li> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.7</li> </ul> <div class="amsite-date"><span class="amsite-label">2.13.0</span> - Nov 30, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> new Cart Price Rules action &#039;Percent Discount: Buy X (Buy 1 for 10% off, Buy 2 for 20% off, etc)&#039; was added so it is now possible to set up tiered discount promotions (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Refactoring</span> we refactored variables and methods in the frontend code of the promo banners lite module according to the code standards</li> <li class="item"><span class="amsite-label">Fix</span> we solved the issue with the error that occurred during the execution of amasty_rulespro_cache_warmer cron job</li> <li class="item"><span class="amsite-label">Fix</span> now the ‘Fixed Price: each 5th, 10th, 15th for $49’ rule does not add value to discounted products if their regular price is lower than the discounted price</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.12.2</span></span> <div class="amsite-date">Last Update: Aug 14, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.12.2</span> - Aug 14, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved the sort order of discount breakdown when Checkout Totals Sort Order is changed</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the discount calculation when it is based on the original price</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the discount not applying when products with expired special prices are skipped</li> </ul> <div class="amsite-date"><span class="amsite-label">2.12.0</span> - Jun 01, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> new Cart Price Rule action ‘Fixed Price: The Cheapest, also for Buy 1 get 1 free&#039; was added so it is now possible to set up fixed price promotions for the cheapest product</li> <li class="item"><span class="amsite-label">Improvement</span> we changed the Cart Price Rules duration settings format for CE Magento from ‘date’ to &#039;date and time’ (Note: functionality is available as part of an active product subscription or Support Subscription) </li> <li class="item"><span class="amsite-label">Improvement</span> we improved the Cart Price Rules processing and validation performance</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the &#039;Percent discount for product set&#039; rule applying when configurable products are being used as &#039;Define product set&#039; products</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.11.2</span></span> <div class="amsite-date">Last Update: Feb 09, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.11.2</span> - Feb 09, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we optimized column types in the Database</li> <li class="item"><span class="amsite-label">Refactoring</span> we refactored the module(Promo banners Lite) code to avert issues with adding rule promo banner image via API</li> <li class="item"><span class="amsite-label">Fix</span> we solved the &#039;Fixed price for product set&#039; rule discount calculating problem when adding two or more sets</li> <li class="item"><span class="amsite-label">Fix</span> now the &#039;Fixed Price: each 5th, 10th, 15th for $49&#039; rule calculates the discount correctly</li> </ul> <div class="amsite-date"><span class="amsite-label">2.11.1</span> - Jan 13, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Shipping Rules</li> </ul> <div class="amsite-date"><span class="amsite-label">2.11.0</span> - Dec 21, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> new Cart Price Rule action &#039;Buy X get Y free (any products)&#039; was added. It allows to create the Cart Price Rule with any number of Gift items from any category in one rule application </li> <li class="item"><span class="amsite-label">Improvement</span> we replaced the &quot;Skip Items with Special Price&quot; setting with &quot;Skip Items with&quot; setting and expanded its functionality to allow more flexible Cart Price Rules configuration</li> <li class="item"><span class="amsite-label">Improvement</span> we added Shipping to Multiple Addresses support for the module actions</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with incorrect discount calculation when Max Amount of Discount setting is being used </li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the error occurred while adding a product to the cart and page reloading</li> <li class="item"><span class="amsite-label">Fix</span> the issue with discount amount rounding in the cart was resolved</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.10.0</span></span> <div class="amsite-date">Last Update: Sep 26, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.10.0</span> - Sep 26, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now the extension works with bundle products so you can offer your customers discounts on bundled products</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.9.5</span></span> <div class="amsite-date">Last Update: Aug 10, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.9.5</span> - Aug 10, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected Max Amount of Discount setting work</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.4</span> - Jul 05, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected the discount amount calculation when &quot;Get $Y for each $X spent&quot; action is being used</li> <li class="item"><span class="amsite-label">Fix</span> the issue with adding products to cart when module is disabled was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.3</span> - Apr 11, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.3-p2 and 2.4.4</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.2</span> - Mar 16, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we enhanced the extension’s perfomance by removing an extra totals calculation</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with shielding single quotes</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the issue with discounting bundle products</li> <li class="item"><span class="amsite-label">Fix</span> we addressed the calculation issue with ‘Percent Discount: Each 5 Items with 10% off’ action</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.1</span> - Aug 16, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.3, 2.4.2-p2, 2.3.7-p1</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.0</span> - Jun 16, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added a couple of new Actions so now you can organize multiple tiered discounts for the shopping cart with ease - motivate your customers to spend more for getting bigger discounts</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.8.0</span></span> <div class="amsite-date">Last Update: Feb 09, 2021</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.8.0</span> - Feb 09, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added a new option that allows combining promo campaigns. So now you can allow your customers to apply several conditions for products with special price and do not lose profitability - the algorithm compares Special Price with Final Price after discount and chooses the value you need depending on module configuration.</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.7.18</span></span> <div class="amsite-date">Last Update: Dec 07, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.7.18</span> - Dec 07, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with rule preview</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with Use for Same Product setting</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.17</span> - Oct 13, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> MFTF tests were moved to additional packages particular for Magento 2.3.5+ and Magento 2.4.0+</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.16</span> - Sep 17, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with discount price rounding</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.15</span> - Feb 26, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> MFTF tests were enhanced for \&quot;Buy X get Y\&quot; action</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.14</span> - Feb 13, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we implemented an enhancement for cart price rules validation</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.13</span> - Jan 23, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with applying \&quot;Percent Discount: Buy X Get Y Free\&quot; rule</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.12</span> - Dec 19, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> MFTF-tests were updated.</li> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Magento 2.3.x was improved (this change affects unit-tests only).</li> <li class="item"><span class="amsite-label">Fix</span> issues with The Most Expensive and Each Group of N rules were fixed.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.11</span> - Nov 20, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we implemented an additional validation for Buy X Get Y rules</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.10</span> - Nov 04, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with Group of N rule</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with displaying banner on all store views</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.9</span> - Aug 12, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> max length for Promo SKU field was increased</li> <li class="item"><span class="amsite-label">Improvement</span> validation for Y products in \&quot;Buy X Get Y\&quot; action was added</li> <li class="item"><span class="amsite-label">Improvement</span> MFTF tests were enhanced for \&quot;Buy X get Y\&quot; action</li> <li class="item"><span class="amsite-label">Fix</span> the issue with cart updating was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.8</span> - Jun 26, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with rounding to 1 cent for Each Group of N: Fixed price action was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.7</span> - Jun 06, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now extension covered by Magento Functional Testing Framework tests</li> <li class="item"><span class="amsite-label">Fix</span> the issue with cart price rule schedule update was fixed</li> <li class="item"><span class="amsite-label">Fix</span> the issue with js error on checkout page was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.6</span> - May 10, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the code was refactored according to Magento standards</li> <li class="item"><span class="amsite-label">Improvement</span> the extension was covered by unit tests</li> <li class="item"><span class="amsite-label">Fix</span> the issue with banners displaying was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.5</span> - Apr 29, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with Promotions Manager dependency through composer installation was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.4</span> - Mar 27, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the code for actions \&quot;The Cheapest\&quot; and \&quot;The Most Expensive\&quot; was refactored and enhanced</li> <li class="item"><span class="amsite-label">Fix</span> the issue with saving cart price rule after uploading banner image was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with maximum amount of discount after order placing was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.3</span> - Mar 18, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with SKU validation for \&quot;Each Group of N\&quot; action was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.2</span> - Feb 27, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the css code was enhanced</li> <li class="item"><span class="amsite-label">Fix</span> the issue with calculating product set discount was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with validation by SKU for configurable products was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.1</span> - Dec 07, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with undefined index was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.0</span> - Nov 28, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the ability to select promo products based on categories for the actions of a \&quot;Product Set\&quot; type was added. Now you can specify a category instead of manual listing all applicable products</li> <li class="item"><span class="amsite-label">Improvement</span> minor adjustments affecting the behaviour of Amasty One Step Checkout discount breakdown were made</li> <li class="item"><span class="amsite-label">Fix</span> the issues with \&quot;Buy X get Y\&quot; action were resolved</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.6.2</span></span> <div class="amsite-date">Last Update: Nov 13, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.6.2</span> - Nov 13, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with install extension on Magento 2.2.0 was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.1</span> - Nov 02, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the integration with Amasty Promo Banners and Amasty Product Labels extensions was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.0</span> - Oct 24, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> introducing the ability to show promo banners and labels on products to highlight promotions</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.5.3</span></span> <div class="amsite-date">Last Update: Oct 23, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.5.3</span> - Oct 23, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with the extension update was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.2</span> - Oct 18, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with the Cart Price Rules was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.1</span> - Oct 11, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issues with the scheduler on Magento Commerce 2.2.x were resolved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with the cart price rule preview on Magento Commerce was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.0</span> - Sep 05, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the debug mode for a shopping cart was added. Now you can see the discounts applied to each item in the cart</li> <li class="item"><span class="amsite-label">Improvement</span> the fields order and the text prompts are changed to simplify the cart price rules settings</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.4.4</span></span> <div class="amsite-date">Last Update: Aug 22, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.4.4</span> - Aug 22, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the integration with Amasty Promo Banners and Amasty Product Labels extensions was added</li> <li class="item"><span class="amsite-label">Improvement</span> the work of the discount breakdown feature was improved</li> <li class="item"><span class="amsite-label">Improvement</span> the compatibility with the Amasty Shipping Rules extension was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.3</span> - Jul 25, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with the counting of items for the action &#039;buy x get y&#039; was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with a group discount when making PayPal payment was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.2</span> - Jul 18, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with reward points was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.1</span> - Jul 13, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with cron in scheduler on Magento Enterprise Edition (Magento Commerce) was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.0</span> - Jul 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the ability to read/update/create rules via Magento API was added</li> <li class="item"><span class="amsite-label">New</span> the ability to apply discounts to the same products in the cart via \&quot;Each N-th\&quot; actions was added</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.3.0</span></span> <div class="amsite-date">Last Update: Jun 08, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.3.0</span> - Jun 08, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the ability to apply a discount to the cheapest or the most expensive products first, by configuring &#039;Each N-th&#039;, &#039;Each Group of N&#039; and &#039;Each Product After N&#039;, was added</li> <li class="item"><span class="amsite-label">New</span> the information section was added. Now you can see the version of installed extension, available updates, User Guide link and other useful data right on the module Configuration page</li> <li class="item"><span class="amsite-label">Improvement</span> the &#039;Calculate Discount Based On&#039; setting was removed from &#039;Each N-th&#039;, &#039;Buy X Get Y&#039; and &#039;Each Product After N&#039; actions</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.2.5</span></span> <div class="amsite-date">Last Update: Jun 06, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.2.5</span> - Jun 06, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with Magento versions less than 2.2.4 was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.4</span> - Jun 01, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> &#039;Calculate Discount Based On&#039; setting was removed from &#039;Each N-th&#039;, &#039;Buy X Get Y&#039; and &#039;Each Product After N&#039; actions as non-applicable.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.3</span> - May 07, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> design of Discount Breakdown was adjusted</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.2</span> - May 02, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> Magento Enterprise Schedule feature support was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.1</span> - Apr 19, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Links to usage examples were added</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.0</span> - Apr 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> discount breakdown introduced. Now you can see all promotion rules applied with discount amount for each</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.0</span></span> <div class="amsite-date">Last Update: Mar 14, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - Mar 14, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Improved the &#039;Product set&#039; action. Now, only SKUs can be used to create a set</li> <li class="item"><span class="amsite-label"></span> Improved usability by removing the &#039;Maximum Qty Discount is Applied To&#039; setting from the &#039;Group of N&#039; action</li> <li class="item"><span class="amsite-label"></span> Fixed the logic of the &#039;Product set&#039; and &#039;Group of N&#039; actions</li> <li class="item"><span class="amsite-label"></span> FIxed an issue with &#039;Max Amount of Discount&#039; setting</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.5</span></span> <div class="amsite-date">Last Update: Mar 02, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.5</span> - Mar 02, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with installation on Magento 2.2.2</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.4</span> - Jan 18, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Rare issue with extension installation on Magento Enterprise Edition was fixed</li> <li class="item"><span class="amsite-label"></span> Compatibility with 3rd party extensions was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.3</span> - Jan 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> &#039;Each N-th&#039; action behavior was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.2</span> - Dec 14, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> The discount calculation for the \&quot;Each Nth\&quot; rules was fixed.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.1</span> - Dec 04, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> The installation script was fixed.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Nov 29, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> The configuration of several promo actions was simplified:</li> <li class="item"><span class="amsite-label"></span> The issue with promo rule labels display was fixed.</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.3.1</span></span> <div class="amsite-date">Last Update: Oct 23, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.3.1</span> - Oct 23, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed discount display in admin area</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.0</span> - Oct 20, 2017</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> Magento Enterprise edition Schedule feature compatibility</li> <li class="item"><span class="amsite-label"></span> Fixed the rare case of division by zero</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.2.9</span></span> <div class="amsite-date">Last Update: Oct 05, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.2.9</span> - Oct 05, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> \&quot;Each M-th after X-th\&quot; rule logic fixed</li> <li class="item"><span class="amsite-label"></span> Magento 2.2 compatibility tested and confirmed</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.8</span> - Aug 18, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Magento 2.1.8 compatibility improved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.7</span> - Jun 19, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Catalog Rules reindex optimization</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.6</span> - Apr 05, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fix issue with maximum discount amount</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.5</span> - Mar 09, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fix for Schedule feature in Enterprise</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.4</span> - Nov 16, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Compatibility with Shipping Rules and Shipping Restrictions extensions</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.3</span> - Sep 26, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed minor issue on cart rule edit page</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.2</span> - Aug 24, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Improved compatibility with Amasty Free Gift extension</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.1</span> - Jul 26, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fix for JavaScript error which lead to fields being invisible in some cases</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.0</span> - Jul 07, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Compatibility with Magento 2.1</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.2</span></span> <div class="amsite-date">Last Update: Jun 10, 2016</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.2</span> - Jun 10, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Two new settings added for actions conditions: Custom Options&#039; SKU, Custom Options&#039; Values.</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_2" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.10</span></span> <div class="amsite-date">Last Update: Apr 29, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.10</span> - Apr 29, 2024</div><ul class="items"></ul> <div class="amsite-date"><span class="amsite-label">1.0.9</span> - May 16, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with duplicating a Cart Price Rule was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.8</span> - Mar 16, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the issue with the Current Uses value after the rule is duplicated</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.7</span> - Dec 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the code was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.4</span> - Sep 26, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with the coupon codes after deactivating the rules was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.3</span> - Mar 26, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Compatibility with Magento 2 Enterprise Edition improved</li> <li class="item"><span class="amsite-label"></span> Fixed an issue with duplicating very large amount of rules</li> </ul> </div></div> </div> </div></div></div></div></div></div></div></div><style> @media only screen and (min-width: 768px) { [id^="tab-label-amcustomtabs_tabs"][data-role="collapsible"] { max-width: 20%; } } </style> <div class="block related" data-mage-init='{"relatedProducts":{"relatedCheckbox":".related.checkbox"}}' data-limit="0" data-shuffle="0"> <div class="block-title title" id="block-related-heading" role="heading" title="Recommended&#x20;for&#x20;you" aria-level="2">Recommended for you</div><div class="block-content content" aria-labelledby="block-related-heading"><div class="products wrapper grid products-grid products-related"><ol class="products list items product-items amtheme-products-secondary amtheme-slick-slider" data-mage-init='{"slickSlider": { "isOnMobile": true, "sliderOptions": { "dots": true, "infinite": false, "slidesToShow": 5, "slidesToScroll": 5, "responsive": [ { "breakpoint": 1024, "settings": { "slidesToShow": 4, "slidesToScroll": 4 } }, { "breakpoint": 769, "settings": { "slidesToShow": 3.5, "slidesToScroll": 2, "dots": false, "arrows": false } }, { "breakpoint": 640, "settings": { "slidesToShow": 2.5, "slidesToScroll": 1, "dots": false, "arrows": false } }, { "breakpoint": 480, "settings": { "slidesToShow": 2.2, "slidesToScroll": 1, "dots": false, "arrows": false } }, { "breakpoint": 360, "settings": { "slidesToShow": 1.5, "slidesToScroll": 1, "dots": false, "arrows": false } } ] } }}'> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/product-labels-for-magento-2.html" title="Product&#x20;Labels&#x20;M2" aria-label="Product&#x20;Labels&#x20;M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><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/ba238ead2674f123f2c985de93ccf97b/p/r/product-labels-for-magento-2_61a5ece777124.png" alt="Product Labels for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-538-cat amasty-label-for-538" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"538","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "538", "selector": ".amasty-label-container-13-538-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-13-538-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Product&#x20;Labels&#x20;for&#x20;Magento&#x20;2" alt="Product&#x20;Labels&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Product&#x20;Labels&#x20;M2" aria-label="Product&#x20;Labels&#x20;M2" href="https://amasty.com/product-labels-for-magento-2.html">Product Labels M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="538" data-price-box="product-id-538"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-538" data-price-amount="209" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$209</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&#x5C;&#x2F;product&#x5C;&#x2F;538&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;538&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" data-product-name-analytics="Product&#x20;Labels&#x20;M2" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/abandoned-cart-email-for-magento-2.html" title="Abandoned&#x20;Cart&#x20;Email&#x20;M2" aria-label="Abandoned&#x20;Cart&#x20;Email&#x20;M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><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/ba238ead2674f123f2c985de93ccf97b/a/b/abandoned-cart-email-for-magento-2_61bc5e3610a55.png" alt="Abandoned Cart Email for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Abandoned&#x20;Cart&#x20;Email&#x20;M2" aria-label="Abandoned&#x20;Cart&#x20;Email&#x20;M2" href="https://amasty.com/abandoned-cart-email-for-magento-2.html">Abandoned Cart Email M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="607" data-price-box="product-id-607"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-607" data-price-amount="149" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$149</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&#x5C;&#x2F;product&#x5C;&#x2F;607&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;607&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" data-product-name-analytics="Abandoned&#x20;Cart&#x20;Email&#x20;M2" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/loyalty-program-for-magento-2.html" title="Loyalty&#x20;Program&#x20;M2" aria-label="Loyalty&#x20;Program&#x20;M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><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/ba238ead2674f123f2c985de93ccf97b/l/o/loyalty-program-for-magento-2_2x.png" alt="Loyalty Program for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Loyalty&#x20;Program&#x20;M2" aria-label="Loyalty&#x20;Program&#x20;M2" href="https://amasty.com/loyalty-program-for-magento-2.html">Loyalty Program M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="673" data-price-box="product-id-673"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-673" data-price-amount="349" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$349</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&#x5C;&#x2F;product&#x5C;&#x2F;673&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;673&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" data-product-name-analytics="Loyalty&#x20;Program&#x20;M2" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/push-notifications-for-magento-2.html" title="Push&#x20;Notifications&#x20;M2" aria-label="Push&#x20;Notifications&#x20;M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><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/ba238ead2674f123f2c985de93ccf97b/i/c/icon-push-notifications-_2x_1.png" alt="Push Notifications for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Push&#x20;Notifications&#x20;M2" aria-label="Push&#x20;Notifications&#x20;M2" href="https://amasty.com/push-notifications-for-magento-2.html">Push Notifications M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="884" data-price-box="product-id-884"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-884" data-price-amount="129" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$129</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&#x5C;&#x2F;product&#x5C;&#x2F;884&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;884&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" data-product-name-analytics="Push&#x20;Notifications&#x20;M2" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/custom-options-conditions-for-magento-2.html" title="Custom&#x20;Promo&#x20;Conditions&#x20;M2" aria-label="Custom&#x20;Promo&#x20;Conditions&#x20;M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><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/ba238ead2674f123f2c985de93ccf97b/c/u/custom-promo-conditions-for-magento-2_2x.png" alt="Custom Promo Conditions for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Custom&#x20;Promo&#x20;Conditions&#x20;M2" aria-label="Custom&#x20;Promo&#x20;Conditions&#x20;M2" href="https://amasty.com/custom-options-conditions-for-magento-2.html">Custom Promo Conditions M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="921" data-price-box="product-id-921"> <span class="old-price sly-old-price no-display"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span class="price-label">Regular Price</span> <span id="old-price-921" data-price-amount="99" data-price-type="oldPrice" class="price-wrapper " ><span class="price">$99</span></span> </span></span> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-921" data-price-amount="79" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$79</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&#x5C;&#x2F;product&#x5C;&#x2F;921&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;921&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" data-product-name-analytics="Custom&#x20;Promo&#x20;Conditions&#x20;M2" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/social-login-for-magento-2.html" title="Social&#x20;Login&#x20;M2" aria-label="Social&#x20;Login&#x20;M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><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/ba238ead2674f123f2c985de93ccf97b/i/c/icon-social-login-lite-for-magento-2.png" alt="Social Login for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Social&#x20;Login&#x20;M2" aria-label="Social&#x20;Login&#x20;M2" href="https://amasty.com/social-login-for-magento-2.html">Social Login M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="925" data-price-box="product-id-925"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-925" data-price-amount="179" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$179</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&#x5C;&#x2F;product&#x5C;&#x2F;925&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;925&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" data-product-name-analytics="Social&#x20;Login&#x20;M2" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/banner-slider-for-magento-2.html" title="Banner&#x20;Slider&#x20;M2" aria-label="Banner&#x20;Slider&#x20;M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><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/ba238ead2674f123f2c985de93ccf97b/s/l/slider-for-magento-2_2x.png" alt="Banner Slider for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Banner&#x20;Slider&#x20;M2" aria-label="Banner&#x20;Slider&#x20;M2" href="https://amasty.com/banner-slider-for-magento-2.html">Banner Slider M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="1481" data-price-box="product-id-1481"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-1481" data-price-amount="139" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$139</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&#x5C;&#x2F;product&#x5C;&#x2F;1481&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;1481&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" data-product-name-analytics="Banner&#x20;Slider&#x20;M2" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/custom-button-for-magento-2.html" title="Custom&#x20;Button&#x20;M2" aria-label="Custom&#x20;Button&#x20;M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><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/ba238ead2674f123f2c985de93ccf97b/i/c/icon-custom-button-for-magento-2_1.png" alt="Custom Button for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-14-1767-cat amasty-label-for-1767" 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":"1767","label":14,"margin":7,"alignment":0,"order":7,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "1767", "selector": ".amasty-label-container-14-1767-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-14-1767-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/amasty-recommended-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Custom&#x20;Button&#x20;for&#x20;Magento&#x20;2" alt="Custom&#x20;Button&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Custom&#x20;Button&#x20;M2" aria-label="Custom&#x20;Button&#x20;M2" href="https://amasty.com/custom-button-for-magento-2.html">Custom Button M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="1767" data-price-box="product-id-1767"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-1767" data-price-amount="49" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$49</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&#x5C;&#x2F;product&#x5C;&#x2F;1767&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;1767&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" data-product-name-analytics="Custom&#x20;Button&#x20;M2" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/product-feed-for-magento-2.html" title="Product&#x20;Feed&#x20;M2" aria-label="Product&#x20;Feed&#x20;M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><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/ba238ead2674f123f2c985de93ccf97b/p/r/product-feed-for-magento-2_63f6257390eef.png" alt="Product Feed for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-521-cat amasty-label-for-521" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"521","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "521", "selector": ".amasty-label-container-13-521-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-13-521-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Product&#x20;Feed&#x20;for&#x20;Magento&#x20;2" alt="Product&#x20;Feed&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Product&#x20;Feed&#x20;M2" aria-label="Product&#x20;Feed&#x20;M2" href="https://amasty.com/product-feed-for-magento-2.html">Product Feed M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="521" data-price-box="product-id-521"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-521" data-price-amount="229" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$229</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&#x5C;&#x2F;product&#x5C;&#x2F;521&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;521&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" data-product-name-analytics="Product&#x20;Feed&#x20;M2" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/free-gift-for-magento-2.html" title="Free&#x20;Gift&#x20;M2" aria-label="Free&#x20;Gift&#x20;M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><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/ba238ead2674f123f2c985de93ccf97b/f/r/free-gift-for-magento-2_627a6860de3db.png" alt="Free Gift for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-508-cat amasty-label-for-508" 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":"508","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "508", "selector": ".amasty-label-container-13-508-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-13-508-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Free&#x20;Gift&#x20;for&#x20;Magento&#x20;2" alt="Free&#x20;Gift&#x20;for&#x20;Magento&#x20;2" ></div></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Free&#x20;Gift&#x20;M2" aria-label="Free&#x20;Gift&#x20;M2" href="https://amasty.com/free-gift-for-magento-2.html">Free Gift M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="508" data-price-box="product-id-508"> <span class="normal-price"> <span class="price-container price-final_price&#x20;tax&#x20;weee" > <span id="product-price-508" data-price-amount="239" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$239</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='&#x7B;&quot;action&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;amasty.com&#x5C;&#x2F;checkout&#x5C;&#x2F;cart&#x5C;&#x2F;add&#x5C;&#x2F;uenc&#x5C;&#x2F;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&#x5C;&#x2F;product&#x5C;&#x2F;508&#x5C;&#x2F;&quot;,&quot;data&quot;&#x3A;&#x7B;&quot;product&quot;&#x3A;&quot;508&quot;,&quot;uenc&quot;&#x3A;&quot;aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s&quot;&#x7D;&#x7D;' title="Add&#x20;to&#x20;Cart" data-product-name-analytics="Free&#x20;Gift&#x20;M2" aria-label="Add&#x20;to&#x20;Cart">Add to Cart</button> </div></div></div></li> </ol></div></div></div> </div></div><footer class="page-footer"> <div class="bg-indigo-800"><div class="p-6 text-white text-center lg:flex lg:items-center lg:justify-between lg:px-12 max-w-screen-3xl xl:px-20 xl:mx-auto"><div><h4 class="m-0 mb-2 mx-auto font-gilr max-xs:max-w-xs !text-lg xs:!text-2xl lg:mb-0 lg:text-left">Never miss an update, join our newsletter club!</h4><p class="m-0 lg:text-left">Get the news, special offers, digests in your inbox</p></div><div class="lg:ml-5 lg:grow"><form class="form subscribe" action="https://amasty.com/newsletter/subscriber/new/" method="post" x-data="Object.assign(hyva.formValidation($el), initNewsletterForm())" @submit.prevent="submitForm()" id="newsletter-validate-detail" aria-label="Subscribe&#x20;to&#x20;Newsletter" ><div class="flex max-xs:flex-col justify-center gap-2 lg:justify-end"><div class="am-input field field-reserved !mb-0 light-error-text min-w-56 lg:w-full lg:max-w-sm"><input name="email" type="email" required id="newsletter-subscribe" placeholder="Enter&#x20;your&#x20;email&#x20;address" aria-describedby="footer-newsletter-heading" ><label for="newsletter-subscribe">Email Address</label> <input name="form_key" type="hidden" value="MHGQ3iWjobpQ13yt" /></div> <button class="btn btn-secondary h-fit max-xs:mt-5" type="submit">Subscribe</button></div></form><script data-info="not-move-to-bottom"> function initNewsletterForm() { return { errors: 0, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#newsletter-validate-detail'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); } } }</script></div></div></div> <div x-data="initAmBackToTopBtn()" x-cloak @keyup.enter="$el.click()" class="p-4 bg-gray-600 transition-all hover:bg-gray-500 text-white text-center font-bold cursor-pointer am-text-small md:fixed md:right-0 md:bottom-[313px] md:z-[999] md:py-4 md:pl-2 md:pr-2 md:text-xs md:rounded-bl-xl md:rounded-tl-xl md:flex md:flex-col md:items-center md:gap-2 md:opacity-0" tabindex="0" data-role="button"><svg xmlns="http://www.w3.org/2000/svg" width="26" height="18" viewBox="0 0 30 30" fill="none" class="fill-white hidden md:!inline-block md:rotate-90" role="img"> <path fill-rule="evenodd" clip-rule="evenodd" d="M7.65685 22.0711L1.29289 15.7071C0.902369 15.3166 0.902369 14.6834 1.29289 14.2929L7.65685 7.92893C8.04738 7.53841 8.68054 7.53841 9.07107 7.92893C9.46159 8.31946 9.46159 8.95262 9.07107 9.34315L4.41421 14L28 14V16L4.41421 16L9.07107 20.6569C9.46159 21.0474 9.46159 21.6805 9.07107 22.0711C8.68054 22.4616 8.04738 22.4616 7.65685 22.0711Z"/> <title>arrow-left</title></svg> <div class="tracking-widest md:[writing-mode:tb-rl] md:rotate-180">BACK TO TOP</div></div><script data-info="not-move-to-bottom"> function initAmBackToTopBtn() { const SCROLL_THRESHOLD = 600; const CSS_CLASSES = { visibleClass: 'md:opacity-100' }; return { isMobile: true, init() { const matchMedia = window.matchMedia('(max-width: 768px)'); this.isMobile = matchMedia.matches; if (!this.isMobile) { this._addScrollListener(); } this._initClickOnBtnListeners(); }, _initClickOnBtnListeners() { this.$el.addEventListener('click', () => window.scrollTo({ top: 0, behavior: 'smooth' })); }, _addScrollListener() { window.addEventListener('scroll', this.throttle(() => { if (window.scrollY > SCROLL_THRESHOLD) { this.$el.classList.add(CSS_CLASSES.visibleClass); } else { this.$el.classList.remove(CSS_CLASSES.visibleClass); } }, 100)); }, ...AmsiteUtils() } }</script><div class="footer content"> <div class="bg-gray-800"><div class="pt-9 px-8 max-xs:px-6 lg:px-12 xl:px-20 lg:flex lg:pt-16 max-w-screen-3xl xl:mx-auto"><div class="flex lg:flex-col items-start justify-between mb-8"><div class="lg:mb-5"><div class="max-w-36 lg:max-w-none"> <a class="logo flex" href="https://amasty.com/" title="1" aria-label="store logo"><img src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/images/footer-logo.svg" title="Amasty&#x20;logo" alt="Amasty&#x20;logo" class="lazy logo-image" width="198" height="48" /></a></div> <ul class="flex items-center ul-reset mt-4 lg:mt-5"><li class="m-0"><a href="https://www.youtube.com/user/AmastyTeam?sub_confirmation=1" class="inline-block" target="_blank" aria-label="Youtube" rel="nofollow" ><svg xmlns="http://www.w3.org/2000/svg" width="23" height="28" fill="none" class="fill-gray-400 hover:fill-gray-300" role="img"><path d="M19.455 20.481H17.94l.007-.893a.72.72 0 01.713-.72h.097a.72.72 0 01.715.72l-.017.893zm-5.682-1.913c-.384 0-.698.262-.698.583v4.341c0 .32.314.581.698.581.386 0 .7-.26.7-.581v-4.34c0-.322-.314-.584-.7-.584zM23 16.14v8.258C23 26.38 21.307 28 19.237 28H3.763C1.693 28 0 26.38 0 24.398V16.14c0-1.98 1.693-3.602 3.763-3.602h15.474c2.07 0 3.763 1.621 3.763 3.602zM4.795 25.295v-8.7l1.917.002v-1.29L1.6 15.3v1.267l1.596.005v8.723h1.6zm5.75-7.403H8.946v4.645c0 .672.04 1.008-.002 1.126-.13.36-.715.743-.943.04-.038-.124-.004-.496-.005-1.134l-.006-4.677H6.4l.004 4.604c.001.705-.016 1.231.006 1.47.039.423.025.915.41 1.196.72.526 2.1-.078 2.444-.83l-.003.96 1.285.001v-7.401zm5.117 5.32l-.004-3.867c-.001-1.473-1.088-2.356-2.562-1.164l.006-2.874-1.597.002-.008 9.922 1.314-.02.12-.617c1.678 1.562 2.733.491 2.73-1.383zm5.005-.513l-1.2.006-.003.165v.679a.66.66 0 01-.655.659h-.235a.66.66 0 01-.656-.66v-1.785h2.746v-1.048c0-.767-.02-1.532-.082-1.97-.196-1.386-2.114-1.606-3.082-.897a1.83 1.83 0 00-.671.916c-.136.399-.204.943-.204 1.635v2.305c0 3.832 4.589 3.29 4.042-.005zm-6.152-12.516c.083.204.211.369.385.493.172.123.391.184.654.184.231 0 .435-.063.613-.193.177-.13.327-.324.449-.582l-.03.636h1.782v-7.69h-1.403v5.985c0 .324-.263.59-.585.59a.59.59 0 01-.584-.59V3.03h-1.464v5.188c0 .66.011 1.101.03 1.324.02.222.071.435.153.641zM9.113 5.84c0-.739.06-1.315.181-1.73.122-.415.34-.748.656-.999.315-.252.718-.379 1.208-.379.413 0 .766.083 1.061.243.297.162.526.372.684.631.162.26.271.528.33.801.06.277.09.696.09 1.26v1.945c0 .713-.029 1.238-.084 1.571-.054.334-.17.644-.351.935a1.676 1.676 0 01-.686.64 2.164 2.164 0 01-.968.206c-.406 0-.748-.057-1.03-.176a1.418 1.418 0 01-.658-.534 2.386 2.386 0 01-.335-.862c-.067-.336-.099-.842-.099-1.516l.001-2.036zm1.396 3.055c0 .435.32.79.71.79.389 0 .707-.355.707-.79V4.8c0-.434-.318-.79-.708-.79-.389 0-.709.356-.709.79v4.095zm-4.933 2.067h1.682l.001-5.899L9.247.01h-1.84L6.351 3.764 5.279 0H3.46l2.114 5.066.003 5.896z"/><title>social/social-youtube</title></svg> </a></li> <li class="m-0 ml-5"><a href="https://www.linkedin.com/company/amasty" class="inline-block" target="_blank" aria-label="Linkedin" rel="nofollow" ><svg xmlns="http://www.w3.org/2000/svg" width="23" height="23" fill="none" class="fill-gray-400 hover:fill-gray-300" role="img"><path d="M2.778 0c1.51.001 2.754 1.25 2.75 2.771C5.526 4.364 4.208 5.564 2.76 5.53 1.29 5.559-.001 4.329 0 2.761A2.775 2.775 0 012.778 0zM4.381 22.997H1.147a.76.76 0 01-.76-.762V8.405c0-.42.34-.76.76-.76h3.234c.42 0 .76.34.76.76v13.83a.76.76 0 01-.76.762zM23 12.502c0-2.9-2.345-5.25-5.237-5.25h-.83a4.646 4.646 0 00-4.076 2.411.348.348 0 00-.043-.005V7.96a.316.316 0 00-.316-.316H8.463a.316.316 0 00-.315.316v14.72c0 .175.141.317.315.317h4.123a.316.316 0 00.316-.315v-8.505c0-1.47 1.17-2.69 2.636-2.707a2.667 2.667 0 012.698 2.673v8.54c0 .174.141.316.315.316l4.133.001a.316.316 0 00.316-.316V12.5z"/><title>social/social-linkedin</title></svg> </a></li> <li class="m-0 ml-5"><a href="https://www.facebook.com/Amasty.Ltd" class="inline-block" target="_blank" aria-label="Facebook" rel="nofollow" ><svg xmlns="http://www.w3.org/2000/svg" width="13" height="25" fill="none" class="fill-gray-400 hover:fill-gray-300" role="img"><path d="M8.503 25.484V14.266h3.765l.564-4.372h-4.33V7.103c0-1.266.352-2.129 2.167-2.129h2.315V1.062C12.584 1.01 11.21.89 9.611.89 6.273.89 3.988 2.928 3.988 6.67v3.224H.213v4.372h3.775v11.218h4.515z"/><title>social/social-facebook</title></svg> </a></li> <li class="m-0 ml-5"><a href="https://twitter.com/AmastyTeam" class="inline-block" target="_blank" aria-label="Twitter" rel="nofollow" ><svg xmlns="http://www.w3.org/2000/svg" width="28" height="22" fill="none" class="fill-gray-400 hover:fill-gray-300" role="img"><path d="M8.805 22c10.567 0 16.346-8.465 16.346-15.805 0-.24 0-.48-.017-.718A11.482 11.482 0 0028 2.6c-1.049.45-2.16.744-3.3.874A5.611 5.611 0 0027.227.403a11.754 11.754 0 01-3.648 1.348 5.813 5.813 0 00-3.26-1.678 5.921 5.921 0 00-3.642.585 5.641 5.641 0 00-2.523 2.606 5.392 5.392 0 00-.365 3.553A16.748 16.748 0 017.23 5.133a16.22 16.22 0 01-5.281-4.12 5.4 5.4 0 00-.63 4.049 5.562 5.562 0 002.408 3.367 5.851 5.851 0 01-2.607-.695v.07c0 1.282.46 2.525 1.3 3.518a5.784 5.784 0 003.309 1.927 5.927 5.927 0 01-2.594.096 5.571 5.571 0 002.044 2.76 5.88 5.88 0 003.323 1.097 11.78 11.78 0 01-7.134 2.383c-.458-.001-.914-.028-1.368-.08a16.67 16.67 0 008.805 2.49"/><title>social/social-twitter</title></svg> </a></li></ul></div> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/new-trustpilot.svg" alt="Trustpilot logo" width="120" height="52"></div> <div x-data="initFooterLinksAccordion()" data-amsite-js="footer-links-accordion" class="lg:flex lg:justify-between lg:ml-24 xl:ml-32 lg:flex-grow lg:max-w-4xl"><details class="py-3 lg:p-0 border-b border-primary-darker lg:border-none"><summary x-data="{ isOpen: false }" @click="isOpen = $event.target.open && window.matchMedia('(max-width: 1023px)') ? true : !isOpen" class="flex justify-between items-center"><h3 class="m-0 text-gray-50">Legal</h3><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray w-5 h-5 lg:hidden" width="20" height="20" :class="{ 'rotate-180': isOpen }" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </summary><ul class="ul-reset pt-3"><li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Terms and conditions page" href="https://amasty.com/terms-and-conditions.html"> Terms &amp; Conditions </a></li> <li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Data processing consent page" href="https://amasty.com/data-processing-consent.html"> Data Processing Consent </a></li> <li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Privacy policy page" href="https://amasty.com/privacy-policy.html"> Privacy Policy </a></li> <li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to License agreement page" href="https://amasty.com/license.html"> License Agreement </a></li> <li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Support License Agreement page" href="https://amasty.com/support-license-agreement.html"> Support License Agreement </a></li></ul></details><details class="py-3 lg:p-0 border-b border-primary-darker lg:border-none"><summary x-data="{ isOpen: false }" @click="isOpen = $event.target.open && window.matchMedia('(max-width: 1023px)') ? true : !isOpen" class="flex justify-between items-center"><h3 class="m-0 text-gray-50">Knowledge Base</h3><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray w-5 h-5 lg:hidden" width="20" height="20" :class="{ 'rotate-180': isOpen }" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </summary><ul class="ul-reset pt-3"><li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Knowledge page" href="https://amasty.com/knowledge-base/"> FAQ </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Support Knowledge Base page" target="_blank" href="https://support.amasty.com/portal/en/kb"> Support Knowledge Base </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Product Comparison page" href="https://amasty.com/extension-comparisons.html"> Product Comparison </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to User Guides page" href="https://amasty.com/docs/doku.php?id=magento_2"> User Guides </a> </li></ul></details><details class="py-3 lg:p-0 border-b border-primary-darker lg:border-none"><summary x-data="{ isOpen: false }" @click="isOpen = $event.target.open && window.matchMedia('(max-width: 1023px)') ? true : !isOpen" class="flex justify-between items-center"><h3 class="m-0 text-gray-50">Corporate</h3><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray w-5 h-5 lg:hidden" width="20" height="20" :class="{ 'rotate-180': isOpen }" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </summary><ul class="ul-reset pt-3"><li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to About Us page" href="https://amasty.com/about.html"> About Us </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Media Kit page" href="https://amasty.com/about.html#media-kit"> Media Kit </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Blog" href="https://amasty.com/blog/"> Blog </a> </li></ul></details></div><script data-info="not-move-to-bottom"> 'use strict'; function initFooterLinksAccordion() { const detailsElements = document.querySelectorAll('[data-amsite-js="footer-links-accordion"] details'); const matchMedia = window.matchMedia('(max-width: 1023px)'); function detectMobile() { return matchMedia.matches; } function setBehavior() { const isMobile = detectMobile(); if (!isMobile) { detailsElements.forEach((details) => { details.setAttribute('open', ''); details.addEventListener('click', preventClose); }); } else { detailsElements.forEach((details) => { details.removeAttribute('open'); details.removeEventListener('click', preventClose); }); } } function preventClose(e) { if (e.target.nodeName !== 'A') { e.preventDefault(); } } matchMedia.addEventListener('change', setBehavior); return { init() { setBehavior(); } } }</script></div><div class="flex gap-2 pt-7 px-6 xs:px-8 max-xs:px-6 bg-gray-800 lg:pt-16 lg:justify-center"> <img class="lazy amsite-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/paypal.svg" alt="Paypal card" ><img class="lazy amsite-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/american.svg" alt="American Express card" ><img class="lazy amsite-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/discover.svg" alt="Discover card" ><img class="lazy amsite-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/mastercard.svg" alt="Mastercard" ><img class="lazy amsite-image" src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/visa.svg" alt="Visa card" ></div><!-- styles for cms block --><div class="hidden text-gray hover:text-gray-300 mb-1"></div></div> <div class="amtheme-footer-section"> </div></div></footer> <div x-data="{...hyva.modal(), ...initAmGdprPolicyPopup()}" x-init="initGdprPopup()" x-spread="eventListeners" x-bind="eventListeners"><div x-cloak x-spread="overlay('amgdpr-policy-popup')" x-bind="overlay('amgdpr-policy-popup')" class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-50 z-40"><div x-ref="amgdpr-policy-popup" role="dialog" aria-labelledby="amgdpr-policy-content" class="flex flex-col bg-white shadow-xl rounded-lg p-10 max-h-[95vh] max-w-6xl relative"><div tabindex="0" @focusin="focusAcceptButton()"></div><button @click="$dispatch('amgdpr-close-policy')" x-ref="amgdpr-close-policy" aria-label="Close" class="absolute right-4 top-4 text-gray-300 transition hover:text-black focus:drop-shadow-md hover:drop-shadow-md"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="h-6 w-6" width="24" height="24" role="img"><path fill-rule="evenodd" d="M4.293 4.293a1 1 0 0 1 1.414 0L10 8.586l4.293-4.293a1 1 0 1 1 1.414 1.414L11.414 10l4.293 4.293a1 1 0 0 1-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 0 1-1.414-1.414L8.586 10 4.293 5.707a1 1 0 0 1 0-1.414Z" clip-rule="evenodd"/><title>x</title></svg> </button> <div class="flex w-full"><p class="w-full text-blue-500 text-3xl mb-5 ml-3" x-text="title"></p></div><div x-show="notificationText && policyData.versionChanged" class="flex w-full"><p class="mb-4 p-4 bg-yellow-100 w-full" x-text="notificationText"></p></div><div id="amgdpr-policy-content" class="max-h-[500px] overflow-auto first:mx-0 child:mx-0" tabindex="0" x-html="policyText"></div><div class="mt-8 flex w-full justify-center"><button x-focus-first @click="$dispatch('amgdpr-accept-policy')" x-ref="amgdpr-accept-policy" type="button" class="btn btn-primary uppercase font-bold" aria-label="I&#x20;have&#x20;read&#x20;and&#x20;accept">I have read and accept</button></div><div tabindex="0" @focusin="focusCloseButton()"></div></div></div></div> <style> :root { /* Bar Color Settings */ --ambar-background: #fff; --ambar-links-color: #326ed1; --ambar-policy-text: #374151; /* Buttons Color Settings */ --ambar-button-accept-color: #337ab7; --ambar-button-accept-hover-color: #337ab7; --ambar-button-accept-text: #fff; --ambar-button-accept-hover-text: #fff; --ambar-button-allow-color: #337ab7; --ambar-button-allow-hover-color: #337ab7; --ambar-button-allow-text: #fff; --ambar-button-allow-hover-text: #fff; --ambar-button-decline-color: #337ab7; --ambar-button-decline-hover-color: #337ab7; --ambar-button-decline-text: #fff; --ambar-button-decline-hover-text: #fff; --ambar-button-settings-color: #337ab7; --ambar-button-settings-hover-color: #337ab7; --ambar-button-settings-text: #fff; --ambar-button-settings-hover-text: #fff; /* Buttons Order Settings */ --ambar-button-accept-order: 0; --ambar-button-allow-order: 0; --ambar-button-settings-order: 0; --ambar-button-decline-order: 0; }</style> <section x-cloak x-data="{isLoading: false}" @amcaptcha-loading-start.window="isLoading = true" @amcaptcha-loading-stop.window="isLoading = false"> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></section> <style> :root { --amlabel-margin-between: 7px; }</style> <div x-data="{ ...hyva.modal({ duration: 150, transitionEnter: 'transform duration-150', transitionLeave: 'transform duration-150' }), ...initAmastyCookieBar() }" x-init="initBar()" x-spread="eventListeners" x-bind="eventListeners" x-cloak id="am-cookie-bar" > <div x-cloak x-bind="overlay('am-cookie-bar')" x-spread="overlay('am-cookie-bar')" class=""><div class="fixed flex justify-center items-center text-left z-10 inset-0"><div x-ref="am-cookie-bar" role="dialog" aria-modal="true" x-no-overlay aria-label="Cookie&#x20;Bar" class="flex w-[90%] max-w-screen-md shadow-xl rounded-lg relative p-12 overflow-auto bg-container"> <div class="flex flex-col max-w-[740px] justify-center"><div class="flex w-full justify-end"><button type="button" @click="$dispatch('close-cookie-bar')" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button></div><div class="flex w-full justify-center flex-col"> <div class="w-full"><p class="text-ambar-policy-text am-text-small text-center">We use cookies to help improve our services, make personal offers, and enhance your experience. If you do not accept optional cookies below, your experience may be affected. If you want to know more, please read the <a href="/privacy-policy.html" title="Cookie Policy">Cookie Policy</a></p></div> <div class="flex flex-wrap w-full justify-center gap-4 mt-6"> <button @click.prevent="$dispatch(&#x27;cookiebar-action-allow&#x27;)" class="ambar-btn-accept&#x20;btn&#x20;btn-secondary" data-role="action">Accept Cookies</button> <button @click.prevent="$dispatch(&#x27;cookiebar-action-settings&#x27;)" class="ambar-btn-settings&#x20;btn&#x20;btn-as-text&#x20;&#x21;px-4" data-role="action">Custom Settings</button> </div></div></div></div></div></div></div> <div x-data="{...hyva.modal(), ...initCookieBarSettings()}" x-spread="eventListeners" x-bind="eventListeners"><div x-cloak x-spread="overlay('am-cookie-bar-settings')" x-bind="overlay('am-cookie-bar-settings')" class="am-overlay-popup"><div class="am-container-popup inset-0 items-center"><div x-ref="am-cookie-bar-settings" role="dialog" aria-labelledby="cookiebar-groups" class="am-dialog-popup max-w-3xl max-h-[92vh] max-xs:!mx-4 max-lg:mx-16 !rounded-xl"><div tabindex="0" @focusin="focusDoneButton()"></div><button type="button" @click="$dispatch(hide('close-am-cookie-bar-settings'))" x-ref="ambar-settings-close" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <p class="mb-7">Please select and accept your Cookies Group</p><div id="cookiebar-groups" class="max-h-[500px] overflow-auto mb-6 pr-7"> <div class="w-full flex flex-col"><template x-for="group in $store.AmastyCookieGroups.groupData" :key="group.groupId"><div class="mb-10"><div class="flex justify-between items-start mb-2"><h3 class="!text-base md:!text-xl ambar-group-title" x-text="group.name"></h3><div class="am-pretty-checkbox"><input type="checkbox" name="groups[]" x-model="group.checked" :id="`amcookie-popup-group-${group.groupId}`" :disabled="group.isEssential" :value="group.groupId" :aria-label="group.name" ><label :for="`amcookie-popup-group-${group.groupId}`"></label></div></div><p class="am-text-caption md:!text-sm ambar-group-description" x-html="group.description"></p><button class="btn btn-as-link md:!text-sm md:am-text-small" type="button" aria-label="More Information" @click="$dispatch('popup\u002Dopen\u002Dam\u002Dcookie\u002Dgroup\u002Dinfo', group)">More Information</button></div></template></div> <div x-data="{...hyva.modal(), ...initCookieGroupInfo_67bef4ab9cae2()}" x-spread="eventListeners" x-bind="eventListeners"><div x-cloak x-spread="overlay('popup-am-cookie-group-info')" x-bind="overlay('popup-am-cookie-group-info')" class="am-overlay-popup"><div class="am-container-popup inset-0 items-center"><div x-ref="popup-am-cookie-group-info" role="dialog" aria-labelledby="the-label" class="am-dialog-popup max-w-7xl max-h-[92vh] max-xs:!mx-4 max-lg:mx-16 !rounded-xl"><template x-if="group"><div x-focus-first><button type="button" @click="$dispatch('popup-close-am-cookie-group-info')" x-ref="ambar-settings-close" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <div class="md:flex md:justify-start pb-4"><h3 class="text-xl font-semibold" x-text="group.name"></h3></div><template x-if="group.description"><p class="mb-4" x-html="group.description"></p></template><div class="overflow-x-scroll md:overflow-x-auto"><table class="table-auto w-full mb-4 text-left"><thead><tr class="table table-fixed w-full"><th class="am-text-caption">Cookie Name</th><th class="am-text-caption">Cookie Provider</th><th class="am-text-caption">Cookie Description</th><th class="am-text-caption">Cookie Lifetime</th><th class="am-text-caption">Cookie Type</th></tr></thead><tbody class="block max-h-[500px] overflow-auto"><template x-for="(item, index) in group.cookies" :key="index"><tr class="table table-fixed w-full"><td x-text="item.name" class="break-words"></td><td x-text="item.provider" class=""></td><td x-html="item.description" class=""></td><td x-text="item.lifetime" class=""></td><td x-text="item.type" class=""></td></tr></template></tbody></table></div></div></template><button @click="$dispatch('popup-close-am-cookie-group-info')" aria-label="Done" class="btn btn-secondary w-full">Done</button></div></div></div></div></div><div class="w-full flex"><button class="btn btn-secondary w-full" x-ref="ambar-settings-done" x-focus-first @click="$dispatch('cookiebar-action-accept', $store.AmastyCookieGroups.getCheckedGroupIds())">Done</button></div><div tabindex="0" @focusin="focusCloseButton()"></div></div></div></div></div> <script data-info="not-move-to-bottom"> (function() { const PROMOTION_SELECTOR = '[data-promo-id]'; _trackPromotions(PROMOTION_SELECTOR); _initListener(); setTimeout(function () { console.log('delay_backstopjs_ready'); }, 7000); function _initListener () { document.body.addEventListener('initAnalyticsPromotion', function (e) { _trackPromotions(e.detail.element); }); } function _trackPromotions(selector) { const ecommerceAttributes = ['id', 'name', 'creative', 'position']; const elements = document.querySelectorAll(selector); [...elements].forEach((element) => { const elementPromotion = element; const params = {}; ecommerceAttributes.forEach((item) => { params[item] = elementPromotion.getAttribute('data-promo-' + item); }); _trackPromotionViews(elementPromotion, params); _trackPromotionClick(elementPromotion, params); }); } function _trackPromotionViews(element, params) { const observer = new IntersectionObserver(function (entries, observerer) { entries.forEach(function (entry) { if (entry.isIntersecting && entry.target.offsetHeight !== 0) { window.dataLayer.push({ 'event': 'view_promotion', any_transmitted_info: params.creative, any_transmitted_info_2: params.id, any_transmitted_info_3: params.name }); observerer.unobserve(entry.target); } }); }); observer.observe(element); } function _trackPromotionClick (element, params) { element.addEventListener('click', function () { if (!window.hasOwnProperty('google_tag_manager')) { return; } window.dataLayer.push({ 'event': 'select_promotion', 'any_transmitted_info': params.creative, 'any_transmitted_info_2': params.id, 'any_transmitted_info_3': params.name }); }); } }())</script> <script data-info="not-move-to-bottom"> 'use strict'; (function () { _initListeners(); function _initListeners() { _triggerAddToCartEvents(); } function _triggerDefaultAddToCartMatomo(productObject) { productObject.items.forEach(function(item) { window._mtm.push({ 'event': 'SuccessfulAddCart', 'any_transmitted_info': item.item_name }); }); } function _triggerAddToCartEvents() { let isAddCartFromPopup = false; let isAddCartFromProductPageFirstScree = false; const addCartBtn = document.querySelector('.amtheme-product-wrap [data-amtheme-js="addtocart-button"]'); if (addCartBtn) { addCartBtn.addEventListener('click', function () { if (!addCartBtn.closest('.amtheme-popup-block')) { isAddCartFromProductPageFirstScree = true; } }); } document.body.addEventListener('addProductFromBundlePopup', function () { isAddCartFromPopup = true; }); document.body.addEventListener('am.popupOpened', function () { const btnInPopup = document.querySelector('.amtheme-popup-block [data-amtheme-js="addtocart-button"]'); if (btnInPopup) { document.querySelector('.amtheme-popup-block [data-amtheme-js="addtocart-button"]').addEventListener('click', function () { isAddCartFromPopup = true; }); } }); document.body.addEventListener('successfulAddCart', (e) => { e.detail.forEach(function (productObject) { if (productObject.product_name) { if (isAddCartFromPopup) { window.dataLayer.push( { 'event': 'AddCartPopup', 'product_name': productObject.product_name } ); window._mtm.push({ 'event': 'AddCartPopup', 'any_transmitted_info': productObject.product_name }); } else if (isAddCartFromProductPageFirstScree) { window.dataLayer.push( { 'event': 'AddCartProduct', 'product_name': productObject.product_name } ); window._mtm.push({ 'event': 'AddCartProduct', 'any_transmitted_info': productObject.product_name, }); } } window.dataLayer.push({ event: 'SuccessfulAddCart', ecommerce: { value: productObject.value, items: productObject.items } }); _triggerDefaultAddToCartMatomo(productObject); }); isAddCartFromPopup = false; }); } }())</script> <script data-info="not-move-to-bottom"> (function() { const sentAnalyticsData = function (data) { data.forEach((item) => { if (item.event && item.event === 'triggerCustomSubmitForm') { window.dataLayer.push({ 'event': item.data }); } if (item.event && item.event === 'successfulAddCart') { document.body.dispatchEvent(new CustomEvent('successfulAddCart', { detail: item.data })); checkUpdateMiniCart(); } }); }; document.addEventListener('DOMContentLoaded', function () { const urlString = `${window.BASE_URL}rest/V1/amasty_gtm/get-analytics-data`; fetch(urlString) .then(response => response.json()) .then(function (response) { if (response.length) { const data = JSON.parse(response); if (typeof window.dataLayer === 'undefined') { window.dataLayer = []; } const interval = setInterval(() => { if (window.MatomoTagManager) { clearInterval(interval); sentAnalyticsData(data); } }, 1000); } }); }); function checkUpdateMiniCart() { window.dispatchEvent(new CustomEvent('reload-customer-section-data')); } }())</script> <script data-info="not-move-to-bottom"> 'use strict'; (function() { const SELECTORS = { footerSubscriptionForm: '#newsletter-validate-detail', customerAccountSubscriptionForm: '[data-amsite-js="customer-account-newsletter-form"]', customerAccountCheckboxNewsletter: '[data-amsite-js="checkbox-newsletter-customer-account"]', requestQuoteTopForm: '#amform-form-51', requestQuoteDescriptionForm: '#amform-form-52' }; _checkSubmitSubscribeInFooter(); _checkSubmitSubscribeInCustomerAccount(); _submitCustomOneVariableForms(SELECTORS.requestQuoteTopForm, 'SendFormPDPRequestQuote', 'SendFormPDPRequestQuote'); _submitCustomOneVariableForms(SELECTORS.requestQuoteDescriptionForm, 'SendFormPDPRequestQuote', 'SendAdditionalFormPDPRequestQuote'); _universalTrackingSubmitForm(); function _checkSubmitSubscribeInFooter() { const subscriptionForm = document.querySelector(SELECTORS.footerSubscriptionForm); if (subscriptionForm) { subscriptionForm.addEventListener('submit', () => { window.hyva.formValidation(subscriptionForm).validate() .then(() => { window.dataLayer.push( { 'event': 'setPositionToSubscribeNewsletter', 'subscribe_newsletter_position': 'SubscriptionFooter' }); }) .catch(() => { return false; }); }); } } function _checkSubmitSubscribeInCustomerAccount() { const subscriptionForm = document.querySelector(SELECTORS.customerAccountSubscriptionForm); if (subscriptionForm) { subscriptionForm.addEventListener('submit', () => { hyva.formValidation(subscriptionForm).validate() .then(() => { if (subscriptionForm.querySelector(SELECTORS.customerAccountCheckboxNewsletter).checked) { window.dataLayer.push( { 'event': 'setPositionToSubscribeNewsletter', 'subscribe_newsletter_position': 'SubscriptionCustomerAccount' }); } }) .catch(() => { return false; }); }); } } function _submitCustomOneVariableForms(formSelector, eventName, variableValue = '') { const form = document.querySelector(formSelector); if (form) { form.addEventListener('submit', () => { if (jQuery(form).validation('isValid')) { window.dataLayer.push( { 'event': eventName, 'any_transmitted_info': variableValue }); } }); } } function _universalTrackingSubmitForm() { window.addEventListener('amcform-success-submitted', () => { setTimeout(() => { fetch(`${window.BASE_URL}rest/V1/amasty_gtm/get-analytics-data`) .then((response) => { return response.json(); }) .then((data) => { if (data) { _checkFormAnalytics(JSON.parse(data)); } }) .catch(function(error) { console.log(error.message); }); }, 1000); }); } function _checkFormAnalytics(data) { data.forEach(function(item) { if (item.event && item.event === 'triggerCustomSubmitForm') { window.dataLayer.push({ 'event': item.data }); } }); } })();</script> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002] hidden" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-data="{ isLoading: false }" x-on:show-global-loader.window="isLoading = true; $root.classList.remove('hidden');" x-on:hide-global-loader.window="isLoading = false; $root.classList.add('hidden');" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div> <script data-info="not-move-to-bottom"> 'use strict'; (function() { const SELECTORS = [ { selector: '[data-amsite-analytics-js="btn-add-to-cart-in-page-builder-template"]', action: 'add_to_cart_tariff_block', attr: 'data-product-name-analytics' }, { selector: '[analytics-comparison-block-feature-list]', action: 'view_features_tariff_block', attr: 'analytics-comparison-block-feature-list' }, { selector: '[analytics-comparison-block-demo-view]', action: 'view_demo_tariff_block', attr: 'analytics-comparison-block-demo-view' }, { selector: '[analytics-comparison-block-product-name]', action: 'click_product_name_tariff_block', attr: 'analytics-comparison-block-product-name' } ]; function attachEventListener(selector, action, attr) { document.querySelectorAll(selector).forEach((button) => { button.addEventListener('click', () => { const productName = button.getAttribute(attr); pushAnalyticsFromComparisonBlock(action, productName); }); }); } function pushAnalyticsFromComparisonBlock(actionName, productName) { window.dataLayer.push({ 'event': 'ClickOnComparisonBlock', 'any_transmitted_info': actionName, 'product_name': productName }); } function trackMatomoProductViews() { window._paq.push(['setEcommerceView', "special-promotions-pro-for-magento-2", "Special Promotions Pro for Magento 2", "Magento 2" ]); window._paq.push(['trackPageView']); } SELECTORS.forEach(({ selector, action, attr }) => attachEventListener(selector, action, attr)); window.addEventListener('matomo-has-loaded', trackMatomoProductViews); })();</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="MHGQ3iWjobpQ13yt" /> <fieldset class="fieldset login"><legend class="mb-3"><h2 class="text-xl font-medium title-font text-primary">Login</h2></legend><div class="text-secondary-darker mb-6 text-center group-[.amsl-hyva-popup-block]:text-left">If you have an account with us, please log in.</div><div class="am-input field field-reserved email required"><input name="login[username]" class="form-input" required value="" autocomplete="off" id="email" type="email" placeholder="Email" /><label class="label" for="email">Email</label></div><div class="am-input field password field-reserved required control !mt-6 peer"><input name="login[password]" class="form-input" required :type="customer_form_login_popup_showPassword ? 'text' : 'password'" placeholder="Password" autocomplete="off" id="am-pass" /><label for="am-pass" class="label">Password</label></div><a class="am-text-caption block -mt-5 peer-[.field-error]:-mt-2" href="https://amasty.com/customer/account/forgotpassword/">Forgot password?</a> <button type="submit" class="btn btn-primary mt-6 w-full disabled:opacity-75" name="send" >Log In</button> <div><template x-if="displayErrorMessage"><p class="text-red flex items-center"><span class="inline-block w-8 h-8 mr-3"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><title>exclamation-circle</title></svg> </span> <template x-for="errorMessage in errorMessages"><span x-html="errorMessage"></span></template></p></template></div></fieldset></form></div></div></div> </div></template> <div class="am-social-icons max-w-[480px] mx-auto" data-amsite-js="am-social-icons"><span class="amsl-separator flex items-center justify-center my-7 w-full h-px bg-gray-200"><span class="am-text-caption text-secondary-lighter uppercase font-bold bg-white px-2">or continue with</span></span> <div class="amsl-social-wrapper&#x20;with-labels" ><div class="amsl-social-login -labeled-buttons"><template x-if="socialErrorMessage"><p class="amsl-error -social message error mb-4" x-text="socialErrorMessage"></p></template><div class="amsl-buttons flex flex-col xs:flex-row gap-3" :class="{'-show-all': canShowAllSocialIcons()}" > <div class="amsl-button-wrapper w-full group google with-label"><a class="amsl-button -google&#x20;-rectangular group-[.facebook]:bg-blue-800 hover:opacity-80 group-[.google]:bg-blue-500 flex items-center px-3 py-2 rounded transition" x-on:click="socialLoginClick($event)" href="https://amasty.com/amsociallogin/social/login/?type=google" title="Sign in with Google" role="link" ><span class="amsl-social-icon pointer-events-none bg-white rounded group-[.facebook]:text-blue-800" role="img" aria-label="Sign in with Google" ><svg xmlns="http://www.w3.org/2000/svg" xmlns:v="https://vecta.io/nano" viewBox="0 0 31 33" fill="none" width="24" height="24" role="img"><path d="M1.125 10.662c-.726 1.85-1.1 3.841-1.023 5.869-.061 3.005.825 5.947 2.383 8.465l4.781-3.654c-.261-.501-.478-1.03-.643-1.586-.625-1.678-.712-3.469-.371-5.174l-5.127-3.92z" fill="#fbbc05"/><path d="M15.832.502l-.775.045c-6.14.075-11.7 4.435-13.93 10.115l5.125 3.918c.711-3.552 3.289-6.733 6.809-7.75 3.23-1.155 6.557.145 9.322 1.85 1.399-1.331 2.71-2.751 3.998-4.189C23.437 1.989 19.706.395 15.832.502zm.016 13.736v.041l.047-.041c-.016 0-.031 0-.047 0z" fill="#ea4335"/><path d="M23.387 14.219c-2.298-.001-4.595.006-6.891.01l-.648.496.008 4.953 9.035.107c-.76 2.645-2.493 5.106-5.121 6.061-4.56 2.039-10.247-.148-12.514-4.533l-4.777 3.662c1.906 3.086 4.822 5.537 8.256 6.682 5.873 2.003 13.093.505 17.002-4.602 2.853-3.577 3.502-8.348 3.193-12.805l-7.543-.031z" fill="#34a853"/><path d="M23.385 14.219c-2.514-.001-5.026.006-7.537.01l.008 5.449 9.035.107c-.69 2.401-2.185 4.647-4.42 5.756l4.959 3.84c.852-.669 1.63-1.442 2.307-2.326 2.853-3.577 3.502-8.348 3.193-12.805l-7.545-.031z" fill="#4285f4"/><title>google</title></svg> </span> <span class="amsl-text pointer-events-none text-white am-text-small w-[80%] xs:w-[85%] text-center">Google</span> </a></div></div></div></div> </div></div></div><div id="amsl-register-content" x-show="activeTab === 'amsl-register'" x-cloak role="tabpanel" aria-labelledby="tab-amsl-register" ><template x-if="formMessages.has('amsl-register')"><div class="mt-4"><template x-for="message in formMessages.get( 'amsl-register' )" :key="message" ><div class="message error"><span x-html="message"></span></div></template></div></template><div class="amsl-content amsl-register-content"><template x-if="!isLogged"><div class="amsl-form"> <div class="mb-8 max-w-[480px] mx-auto"><form class="form create hyva-account form-create-account" action="https://amasty.com/customer/account/createpost/" x-data="Object.assign(hyva.formValidation($el), initForm())" id="accountcreate" @submit.prevent="submitForm()" method="post" id="form-validate" enctype="multipart/form-data" autocomplete="off" ><input name="form_key" type="hidden" value="MHGQ3iWjobpQ13yt" /> <div class="flex flex-col"><p class="text-center group-[.amsl-hyva-popup-block]:text-left mb-0">Use your customer account to view all invoices and purchases for one-clickdownloads, update extensions to the latest versions for free, and extend your support period.</p><fieldset class="mt-6 card"><legend class="hidden"><span> Personal Information</span></legend><input type="hidden" name="success_url" value=""><input type="hidden" name="error_url" value=""><div class="group-[.amsl-hyva-popup-block]:flex gap-2"><div class="am-input field field-reserved w-full"><input type="text" id="firstname" name="firstname" value="" placeholder="First&#x20;Name" minlength="2" data-validate='{"validate-not-only-special": true}' required @input.debounce="onChange"><label for="firstname">First Name</label></div><div class="am-input field field-reserved w-full"><input type="text" id="lastname" name="lastname" value="" placeholder="Last&#x20;Name" minlength="2" data-validate='{"validate-not-only-special": true}' required @input.debounce="onChange"><label for="lastname">Last Name</label></div></div></fieldset><fieldset class="my-5 card group-[.amsl-hyva-popup-block]:mt-0 !mb-2"><legend class="hidden"><span> Sign-in Information</span></legend><div class="am-input field field-reserved"><input type="email" name="email" autocomplete="email" id="am-email-address" placeholder="Email" required value="" class="form-input" data-validate-hidden @input.debounce="onChange" /><label for="am-email-address">Email</label></div><div class="flex xs:gap-2 flex-col xs:flex-row"><div class="am-input field field-reserved w-full sm:!mb-0"> <input :type="customer_form_register_popup_showPassword ? 'text' : 'password'" type="password" data-validate-hidden id="password" name="password" minlength="8" class="form-input" placeholder="Password" data-validate='{"password-strength": {"minCharacterSets": 3}}' @input.debounce="onChange" autocomplete="off" ><label for="password">Password</label> <span class="option">8 or more characters</span> <div id="password-strength-meter-container" data-role="password-strength-meter" aria-live="polite" class="hidden" ><div id="password-strength-meter" class="password-strength-meter">Strength: <span id="password-strength-meter-label" data-role="password-strength-meter-label">No Password</span></div></div></div><div class="am-input field field-reserved w-full !mb-0"><input :type="customer_form_register_popup_showPasswordConfirm ? 'text' : 'password'" type="password" name="password_confirmation" title="Confirm&#x20;Password" id="password-confirmation" placeholder="Confirm&#x20;Password" data-validate='{"equalTo": "password"}' @input.debounce="onChange" required class="form-input" autocomplete="off" ><label for="password-confirmation">Confirm Password</label></div></div> <div class="mt-6"> <div class="field field-reserved choice choice-wrapper gdpr !mb-4" data-role="amasty-gdpr-consent" data-amgdpr-content-from="registration"><input type="hidden" name="amgdpr_agreement[privacy_checkbox]" value="0"><input type="checkbox" name="amgdpr_agreement[privacy_checkbox]" title="Privacy&#x20;Checkbox" id="amprivacy-checkbox-67bef4aba215d" class="amgdpr-checkbox" data-consent-id="1" required value="1"><label for="amprivacy-checkbox-67bef4aba215d" class="label amgdpr-label"><span class="amgdpr-text">I have read and accepted the <a href="/terms-and-conditions.html" target="_blank" title="Go to this page">Terms & Conditions</a>, <a href="/privacy-policy.html" target="_blank" title="Go to this page">Privacy Policy</a>, <a href="/license.html" target="_blank" title="Go to this page">License Agreement</a>, and <a href="/support-license-agreement.html" target="_blank" title="Go to this page">Support License Agreement</a></span></label> </div> <div class="field field-reserved choice choice-wrapper gdpr !mb-4" data-role="amasty-gdpr-consent" data-amgdpr-content-from="registration"><input type="hidden" name="amgdpr_agreement[data_processing_consent]" value="0"><input type="checkbox" name="amgdpr_agreement[data_processing_consent]" title="Processing&#x20;of&#x20;my&#x20;personal&#x20;data" id="amprivacy-checkbox-67bef4aba2178" class="amgdpr-checkbox" data-consent-id="2" value="1"><label for="amprivacy-checkbox-67bef4aba2178" class="label amgdpr-label"><span class="amgdpr-text">I hereby give my consent with <a href="/data-processing-consent.html" target="_blank" title="Go to this page">processing of my personal data</a> for marketing purposes</span></label> <span class="optional">Optional</span> </div> <input type="hidden" name="am-gdpr-checkboxes-from" value="registration" /></div></fieldset></div><button type="submit" class="action submit primary btn btn-primary disabled:opacity-75 w-full" >Create an Account</button></form></div> </div></template> <div class="am-social-icons max-w-[480px] mx-auto" data-amsite-js="am-social-icons"><span class="amsl-separator flex items-center justify-center my-7 w-full h-px bg-gray-200"><span class="am-text-caption text-secondary-lighter uppercase font-bold bg-white px-2">or continue with</span></span> <div class="amsl-social-wrapper&#x20;with-labels" ><div class="amsl-social-login -labeled-buttons"><template x-if="socialErrorMessage"><p class="amsl-error -social message error mb-4" x-text="socialErrorMessage"></p></template><div class="amsl-buttons flex flex-col xs:flex-row gap-3" :class="{'-show-all': canShowAllSocialIcons()}" > <div class="amsl-button-wrapper w-full group google with-label"><a class="amsl-button -google&#x20;-rectangular group-[.facebook]:bg-blue-800 hover:opacity-80 group-[.google]:bg-blue-500 flex items-center px-3 py-2 rounded transition" x-on:click="socialLoginClick($event)" href="https://amasty.com/amsociallogin/social/login/?type=google" title="Sign in with Google" role="link" ><span class="amsl-social-icon pointer-events-none bg-white rounded group-[.facebook]:text-blue-800" role="img" aria-label="Sign in with Google" ><svg xmlns="http://www.w3.org/2000/svg" xmlns:v="https://vecta.io/nano" viewBox="0 0 31 33" fill="none" width="24" height="24" role="img"><path d="M1.125 10.662c-.726 1.85-1.1 3.841-1.023 5.869-.061 3.005.825 5.947 2.383 8.465l4.781-3.654c-.261-.501-.478-1.03-.643-1.586-.625-1.678-.712-3.469-.371-5.174l-5.127-3.92z" fill="#fbbc05"/><path d="M15.832.502l-.775.045c-6.14.075-11.7 4.435-13.93 10.115l5.125 3.918c.711-3.552 3.289-6.733 6.809-7.75 3.23-1.155 6.557.145 9.322 1.85 1.399-1.331 2.71-2.751 3.998-4.189C23.437 1.989 19.706.395 15.832.502zm.016 13.736v.041l.047-.041c-.016 0-.031 0-.047 0z" fill="#ea4335"/><path d="M23.387 14.219c-2.298-.001-4.595.006-6.891.01l-.648.496.008 4.953 9.035.107c-.76 2.645-2.493 5.106-5.121 6.061-4.56 2.039-10.247-.148-12.514-4.533l-4.777 3.662c1.906 3.086 4.822 5.537 8.256 6.682 5.873 2.003 13.093.505 17.002-4.602 2.853-3.577 3.502-8.348 3.193-12.805l-7.543-.031z" fill="#34a853"/><path d="M23.385 14.219c-2.514-.001-5.026.006-7.537.01l.008 5.449 9.035.107c-.69 2.401-2.185 4.647-4.42 5.756l4.959 3.84c.852-.669 1.63-1.442 2.307-2.326 2.853-3.577 3.502-8.348 3.193-12.805l-7.545-.031z" fill="#4285f4"/><title>google</title></svg> </span> <span class="amsl-text pointer-events-none text-white am-text-small w-[80%] xs:w-[85%] text-center">Google</span> </a></div></div></div></div> </div></div></div></div><div class="amsl-tabs-wrapper -forgot" x-show="activeTab === 'amsl-forgot'" title="Forgot Your Password Form" x-cloak ><ul class="amsl-tablist mb-12 ul-reset text-center" role="tablist" ><li class="amsl-title" id="tab-amsl-forgot" role="tab" aria-controls="amsl-forgot-content" ><span class="amsl-link -active am-title-h2 font-bold" @click.prevent >Forgot your password?</span></li></ul><div id="amsl-forgot-content" role="tabpanel" aria-labelledby="tab-amsl-forgot"><template x-if="formMessages.has('amsl-forgot')"><div class="mt-4"><template x-for="message in formMessages.get('amsl-forgot')" :key="message" ><div class="message error"><span x-html="message"></span></div></template></div></template><div class="amsl-content amsl-forgot-content"><template x-if="!isLogged"><div class="amsl-form"> <div class="max-w-[480px] mx-auto my-0"><div class=""><form action="https://amasty.com/catalog/product/forgotpasswordpost/" method="post" class="!max-w-[inherit] !mb-7" id="user_forgotpassword" x-data="Object.assign(hyva.formValidation($el), initPasswordForm())" @submit.prevent="submitForm();"><input name="form_key" type="hidden" value="MHGQ3iWjobpQ13yt" /> <input type="hidden" name="formId" value="user_forgotpassword"/> <fieldset class="fieldset mb-6"><div class="text-center mb-6">Please enter your email address below to receive a password reset link.</div><div class="am-input field field-reserved email required !mb-0"><input type="email" name="email" alt="email" id="email_address" class="form-input" placeholder="Email&#x20;address" required value="" /><label class="label" for="email_address">Email address</label></div></fieldset><button type="submit" class="action submit w-full primary disabled:opacity-75" >Reset My Password</button></form><div class="text-center">or go back to <a class="back" href="https://amasty.com/customer/account/login/" aria-label="Login&#x20;page" >Login page</a></div></div></div> </div></template></div></div></div></div><button type="button" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> </div></div></div></div> <div x-data="AmAuthPopupNotification()" x-init="initialize()" x-on:amsl-popup-show-notification.window="showNotification($event.detail)" > <div x-cloak x-bind="overlay('amsl-popup-notification')" x-spread="overlay('amsl-popup-notification')" class="am-overlay-popup"><div class="amsl-popup-notification am-container-popup inset-0"><div x-ref="amsl-popup-notification" role="dialog" aria-modal="true" class="am-dialog-popup w-full sm:max-w-[560px] !bg-green-50"> <span class="absolute top-0 left-0 pt-1 w-full rounded-tl-md rounded-tr-md bg-lime-500"></span> <div class="py-10 text-center"><div class="mb-8"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="45" viewBox="0 0 34 35" fill="none" role="img"> <path d="M0 34.38H34V0.38H0V34.38Z" fill="url(#pattern0)"/> <defs> <pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> <use xlink:href="#image0" transform="scale(0.015625)"/> </pattern> <image id="image0" width="64" height="64" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAP90lEQVR4AeyZA5CtRxCFpyqFZ9u2bdu2bduvrGfbtm2bq9hO1kbnnP8iU/fdODPhrfp6d6/7/NPdZ2aV5dv/NwnonTb+WoV58rDBDXnW8jN53uobedL0efLdWktxf0mgbMJgDQkamSPiVIGPUu7XFXnVVSRggEjgQPzsJ/Kyg0AUibtafjpQtmCwxle7M52JuVRKUh7UE3ndG8kPA8NdPwP6iLxoKykP60vMxVJbgbIBgxUkaFSmL3dnksgzhV0CBPR1JR80Aj/JUIjSXVAWknyvtkScLrQcKNMwWAFXOcNXezInfn8kFxPkFfcIAEa6fgagHF52FHncSBJuVJLvD+dsApRJGKwRfrLAtW/2Z5XE29VEXvf0EQDw79c9vKsg7HjeD4EyCYM10PzmYhUIGqLIq85vCsDfWRrPWzsNMfZSaQk9mrspUKZgsAaWeNPPtqaT2Mul0fDaOc3PVwBOBTZDedRQEm9Wka/3ZtkOlCkYrIFGmBGTIDHqbBFnmUvgEKALAAIHewVIulNDvj2YPRgoUzBYJfRYntfhJ/KJPGmiCaA1Ql2A29UpQDTKIT1QJmCwCUfi/sjThdjpmSwY7iPAoB9L4FY1CsB+UPBfIwAs74Koc0VpePwLEMAe0IZewRmFaJqcCAWBMgGDVVIe1O0VcaogryoF0EuAv9MWe8cgm+WXuzLGJN6qmhEoEzBYBXO+UcRpCPC4sR8BhtMiu5d/VWGpfLAu9YdAmYLBKnB6zTgFOOu1MagJ0I3LH16hvHx3KIeELE19AShTMFgFdT037kpZkZed/DpBGiQu/5iLJYSe4eNNaeYAZQoGm9AOv5t8r5ZmhUfqAnAvgPlf09k0fbg+Ne1wpX+NFcbsr8ftMGucZwG8+v4FqOHU//trUn8BlEkYbEE7fJ3NjXMe9a8lP8qnBGoJ+8RHG9OcBsokDFZIeVC/fvT5Yhx/3AprFniUJsAwbw+IvlBcPt2SdhNQJmGwQuiR3F9xacvL9lrt+wow2CkBeAV4gDL0AHuAMgmDcWBnj8VdLef2/4O02h+l4d4HvOrkrJKEm1XYAD/6x58HwPYujjpbVHAW4O78/pIfqQnQ1REKllkoGk6QJgFlCgZjIPGx4Sfzs6trc3/kzwgwhCLRJNEMcTfIwxNOhI14v0L/KAHwxYeEHctDS8uEmByT9Ff7mgA8He7vNEJ52pS9gCJwU8TTocSIkwW2fHc4Z0Og/iwY/nTg9IaFHnUn/6y5Xve++Agw3PEHzipgKTxv5bwHN0XcP6Ck3OTDmUL+eVhdzaLOFWuDhtkTAg1GuY2IvVRqbMzFkqOx+vh3B0yeynjsLaD8wfCngi8zIvSYnvzAX5m8R4D+oA+Txygs4ewHWEZIhv80kaS7NWmk+N6Eq4uT5U3oNZ618DTUj+EsFwHlC8OfBr5cb1hd1rz7yGug/2XvmzwJ1ErgaTPBFRb6Bgjq9IFElALPEHCW6P6fwlAw/Bfg+/VzzhfoLbAqzgClo35o3p7DJGmSMIDX+Xr82bZt27Zt27Zt27Zt27Zt5MXv6Yt5ajGzu5//eKfQ1VnheDOzx5+eEKG3dszd9w3sEFg7vLBYhNdM4YkJw8MjxnZWa6CCqNjTxjNeREjKZ8UfoAHS+80usDhBdYDw9rSMCboCb+IJmVIJ4/Ru1CeXDaPOxYglUnPbQJXwp7/47taJLzIl/e7WSQKTBsD5xDxiuvrTNzeN/3EI+uJX1451T+Tmt1qdPk7AVH7A6FaeZxU9S+HFWDoBgzKEY7BJoe25VLwn5XPc3HFSVBnS2F9HJP03UIE//SBCcJ98aVMQmBEIwRMgFw3MWwZXvLLaD5LyDEYpypkFxgZq+ene6Y0JjALk8U4FksEGHP5keWo5KUBuDrTEppZM3ePmaITo+HJNyPiicOZVoenFlBRSBpZfWpbwdM+LB015WJ3yxmbs8v45g/OScFW8AjCZPQI7Sp5R+LyP4fqGLkIu8llcoQNnKcqMG/OLthJdaqZABf5AN0LRW2xPEcoCJQGz4PQv55ovHZhK32PRo7yiGf1+MhOg8tap7VKMpwirEDq6Z6VYJIoWxvdd4CTQASjNgaKFwXi+BIcob8e4LxzW+Dmc3BGowJ86xqA4werK/maoKZ+hn3uBBI0eXl4/vqU8uksDBdb6eE1RhBI9v1hPYCjpwBCi1RGkjfvSRuRITd//8Lwhy2vHNcpjuzW8Y7tAlcgTYIBdBk7pdWFQlO5H+cxPKSZEeZawb5zYWu7YqL3cvVmb9QAzwkiLIUKJocpH5w8tPVDj8nVwhOhIGGIB11GMizGiFdtZLu+c1lFeOLRRHt6xUe7Zoq18cM4QxweqOrpPIAS+/bf1eM8GkKvqip7Pc8IU27MO+MhOjXL+Ml3lrCW7yp2btJdHd26Ux3dvlCf3apSn92tQympReTW8yrMM5fjSkY3y7IGN8kg8z4hXr9pZzli8q5y+WNdHLx7emC9Q9Y084f3/REh++Tsqnwbox/vWAOU7A7xzemd57qBGuXPj9nLNap3loe1bKGV5vLx0RFP5Fw8PxDk4f/6QRnlm/6aBntij4egeo6j60umLmJKfEoaaqqcVIQaYIAnGoCs5cMrX254Kje5qsaq7Iie0hftL4d0Ht2spb5zQKuTlvnAHz8lxU2a/K6oVvgWyayFLCqTPnKPMURumV0xttc3fv81RBpgvq3nP6FnBgff+GtoU4UKJOYrwV7C+CcWsA1JYePMegxBa0dMGPUd5+4oiyFi1no8bYKA6i3foZNo2AyUPiNow7I8xu+wIVOAPMMCqBjEgEPi3RI3uEp5QFMHy9Hmexf1NfBjAJIjygHkmGELU8Cwl1ZKawstTGLA/NcZzIk2X0RUUUgVy3b5/IsMAW7Iea7Ks429liHrlJ6zwR2a0MLO7NIBKzgDyWiSYBsdusiqv/UE8NyFWaGstU0C4U9S1VABKC31RFnxg5iJydAk14a1T2o8JVFDlSeTl3qk81IzwGyieyvPWcgQ2VRWWCqAQZwAKIiy2wxRDuS8qACeQIowklKUOokNBnURNYBT3kqrjBjyPqYoe7VGXibE79g1UUOVJeOUoSgtRwvZlhEBvSkL/7tXzc1VhKjx5rdsAPJMG4GkzymBr0e6kwTAMYmpsEQR8rhhKBaSnP5iWwqIE/VU3mstqYbxo9eXloxuibJpABVWehFdOTy8xAvRrhIGD5+uFKfk5/o62yn9UNVOAkEJbBCQZun+r1vLUPo0I17agsB2B9vJ2EJv3ztTWhvWcaPAdhst6AdLGvoKoUUitIvmtka023OHiQJXoPom8OTsnJvK0X0P0hNV6wKp1xQM8T/lm25KfwpTXeArPJ7xw91M6yl+/Zme5IYATYIb3bhmG2boVUdLr8QPRgiPoGjZSm/g/MeLt54M3PLVvAz/w2UU9bo5GDz0l1+PkKUMQnjG0R0jl8jqrr+fzO5DXdcWzImfPZgBdQI5KA3ktDYS3kMfybt+wqTgyhMc/vEOj3LtFa7ltg45yw1qd5cqVu8plKzaBNN20Tke5df0On2OQvgtY4dMx5lSBqm90n4SwB6awqrRJShqjv6Cc5zxfr8Z1pLdrCENDGkAaZBSkEYQ372J92pacDaPAiI4mRp7zvPzW3kSQcyvIoK44useob0ZXGbG33wlqgxsliyI4UKJfLEphymSrUYFVY3mtuNXgGmr3H53Hc+6p2tIgo0A7JDCFFUHLV9KCgmZx2pijAuh73q+d5hFEl6N36Q65FqAmfPfVNWO2B6o68oQBZqOEAfrF/F5i2poK17w3vYoLuXrkfh25ekRhIFie9ycKJkZUFEJCZ+/HCawSO3ouqXAdnJNwTW7jM67vKp5b9LQxwgDtYbUfAzwEKahBKEBQrau7t+Lw3986KaGErZB0T29X3YFiejboy2kQY9bH9TkjGiOK4JBpAII78r6qnjzAWJxCSd52bh4ASYTIb2wGkzbGvTRQ1dF9ApH3t/WlcC409NNfLZLGoijBzOJUbuxNbgpjQspDLc7zlrgYhkHqxug2qnvZEi1goMOIC8EZVzvDAZx7h2cxPMhxyFw3rHeQ20zz06gf0UavClR11C9EwWYpWK6uhNAWKwimqGS7UlgwMwMrVOhlMQWNnSHCamfytR+DMAYjMqb0yehwTinPmAdog5bH1IFPLxmhxPa6EPY+UeE5shlHiPuuczKDe96lfjAcCmxR5ZBAVUf9ggGG8sUUplaZkQtK8QCPq8gE4nmWRTKsvFjOQlrksRf7DqJiDOCNfoyRcM1YDKBva3mMqre/GRQ2CFEQmsFEmnFFIAWNm0giJDKxSGMxJL6guI4VqOroPknEjOr0bC8Gw8cpYqMTNbVqi6cTiGBIiMGf2LO5CnPRcl36tc9Y3BK33CWQqFHUagaZsBYd9h2a7yS0MXM8fMD6AKM8c0CT+DAyr6oXUgY+CHCI/0wRkchQTKx859NYWltsoH4g4RfdYd0fcm1NSHuRF1IKu8oVGAIRDNm4db2Oct0aneXMJSxBdZUHtmkRFSgoKiot8HHG6J7k5LoejzGMc/cZQBE09rWrd5Yb1w4E8cEMXSNAiE9+dnMs8t4S70eCHH126QpdX4YBrwoDbRekbchA1T/07yYjzELp9DSLW6biZWF+z+ZtxcuuCEHOWSrW7kJpip+9ZCi/eJwv3vUtpnbfVq0MRRnRwBDCUFSIKkaRUoE4xrnU8rma8kaE7WO7NgojksPiKK9a1zceumuJ7NmICI5Aj+t4aIfGp8ElOgJVb+jpA0aYJxT/JAenNC+gnRQ9ZdGm0hcs0/VGhOi1T+3dOCiEXD0K1AzBJ4aOQjTfXZu2fZXhK2piKioiclFCDZHP4JrnLVl5hoJ4fDPfRUxz1Vf6qBXZSbLgKdQIknQSTWaOova8QNUbev0wprZDh2DHxWTkmytW6ipXrdr1YZzf8mQoG5GxXBSZ8aIr/D1Q9Q/BFkeL1dy7pIaIET0iIgzLi2Z65ubh3S5HxZTQINXUAcYSLTqO1FEjKIyf1MgZ7jJHkqokPowp6jp+9W+EwtLDhlUnD5bXEqgGFbHQuX7UiVflrNRQMxhDdKG80ouyVnkprngpdj5nGJGhFUoPNQJl5vlsn7mBmq1PgRU5UmZAP63x5w9BeOmf4en1btug/f5Llu8ql0YqqSEZHTnzUzyzzty3ZSuDMILuQxm1AvPUNQAh00myVYsUz2l99gm+jgj+z1/m3+YSEf7ThZIHRrV+qrlx0awppwZca32XR8pFxChmWpnNDx5VTOW3gik19HotWpQkJ1EcTZ/VruMCVW/w509FdISxYwtr0WcPamwZxfKwwLkRCdfHVta9ERlPPLh9y4tP7l1Ll4N1BmkCLfVeb5GE0kU0Pb5H4/pYg2gEqt7gz18ekfczhpH2jwL6ZBjj82jHnwdV/jwU/jyKbPM87scW2ifRQc6J1FggUA0M/gfsGVXkq95xtgAAAABJRU5ErkJggg=="/> </defs> <title>thumb</title></svg> </div><template x-if="notification"><div x-html="notification"></div></template></div></div></div></div></div> <div><div x-data="AmAuthPopupReviewForm()" x-on:private-content-loaded.window.once="initializeReviewForm()" ></div></div> <div class="copyright px-6 xs:px-8 pt-4 lg:pt-5 lg:pb-12 pb-9 bg-gray-800 text-secondary-lighter lg:text-center text-sm"><span>© 2009-2025 Amasty. All Rights Reserved.</span></div> </div><script> var LOCALE = 'en\u002DUS'; var BASE_URL = 'https\u003A\u002F\u002Famasty.com\u002F'; var require = { 'baseUrl': 'https\u003A\u002F\u002Fcdn.amasty.com\u002Fstatic\u002Fversion1740558685\u002Ffrontend\u002FAmasty\u002FAmTheme\u002Fen_US' };</script><script type="text/javascript" src="https://cdn.amasty.com/static/version1740558685/_cache/merged/99d148032876ed95668760c4893bc3be.min.js"></script><script type="text/x-magento-init"> { "*": { "Magento_PageCache/js/form-key-provider": { "isPaginationCacheEnabled": 0 } } }</script><script> const initAmsiteCookieConsent = function () { let isFirstVisit = false; let allCookiesAllowed = false; let analyticsCookiesAllowed = false; let statisticsCookiesAllowed = false; let advertisingCookiesAllowed = false; const ACTION_DEFAULT = 'default'; const ACTION_UPDATE = 'update'; const CONSENT_GRANTED = 'granted'; const CONSENT_DENIED = 'denied'; const COOKIE_TYPES = { analytics_storage: 'analytics_storage', ad_personalization: 'ad_personalization', ad_storage: 'ad_storage', ad_user_data: 'ad_user_data' }; _setConsentValue(ACTION_DEFAULT); _setAdditionData(); _listenCookieUpdate(); function _getCookie(name) { let matches = document.cookie.match(new RegExp( "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)" )); return matches ? decodeURIComponent(matches[1]) : undefined; } function _checkCookieAnalyticIsAllowed() { const amCookieAllowed = _getCookie('amcookie_allowed'); const ID_ADVERTISING = '2'; const ID_ANALYTICS_GROUP = '3'; const ID_STATISTICS = '4'; isFirstVisit = !amCookieAllowed; allCookiesAllowed = amCookieAllowed && amCookieAllowed === '0'; analyticsCookiesAllowed = amCookieAllowed && amCookieAllowed.includes(ID_ANALYTICS_GROUP); statisticsCookiesAllowed = amCookieAllowed && amCookieAllowed.includes(ID_STATISTICS); advertisingCookiesAllowed = amCookieAllowed && amCookieAllowed.includes(ID_ADVERTISING); } function _listenCookieUpdate() { window.addEventListener('cookiebar-action-accept-finish', () => _setConsentValue(ACTION_UPDATE)); window.addEventListener('cookiebar-action-allow-finish', () => _setConsentValue(ACTION_UPDATE)); } function _setConsentValue(action) { let consentTypes = ["ad_storage","ad_user_data","ad_personalization","analytics_storage"]; _checkCookieAnalyticIsAllowed(); if (action === ACTION_DEFAULT && isFirstVisit) { _setDefaultValues(consentTypes); } else if (action === ACTION_DEFAULT && !isFirstVisit) { _updateValues(consentTypes, ACTION_DEFAULT); } else { _updateValues(consentTypes, ACTION_UPDATE); } } function _setAdditionData() { if (1) { gtag('set', 'url_passthrough', true); } if (1) { gtag('set', 'ads_data_redaction', true); } } function _setDefaultValues(consentTypes) { let config = {}; consentTypes.forEach(key => config[key] = CONSENT_GRANTED); gtag('consent', ACTION_DEFAULT, config); let configForCountryWithRestrictions = {...config}; consentTypes.forEach(key => configForCountryWithRestrictions[key] = CONSENT_DENIED); configForCountryWithRestrictions.region = ['AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR','DE','EL','HU','IS','IE','IT','LV','LI','LT','LU','MT','NL','NO','PL','PT','RO','SK','SI','ES','SE','UK','US-CA','US-CO','US-CT','US-VA','US-UT'] gtag('consent', ACTION_DEFAULT, configForCountryWithRestrictions); } function _updateValues(consentTypes, action) { let isAnalyticsStoragePresent = consentTypes.includes(COOKIE_TYPES.analytics_storage); let isPersonalizationStoragePresent = consentTypes.includes(COOKIE_TYPES.ad_personalization); let isStoragePresent = consentTypes.includes(COOKIE_TYPES.ad_storage); let isUserDataPresent = consentTypes.includes(COOKIE_TYPES.ad_user_data); let config = {}; consentTypes.forEach(key => config[key] = CONSENT_DENIED); if (allCookiesAllowed) { consentTypes.forEach(key => config[key] = CONSENT_GRANTED); } if (isAnalyticsStoragePresent && analyticsCookiesAllowed || isAnalyticsStoragePresent && statisticsCookiesAllowed) { config[COOKIE_TYPES.analytics_storage] = CONSENT_GRANTED; } if (isPersonalizationStoragePresent && advertisingCookiesAllowed) { config[COOKIE_TYPES.ad_personalization] = CONSENT_GRANTED; } if (isStoragePresent && advertisingCookiesAllowed) { config[COOKIE_TYPES.ad_storage] = CONSENT_GRANTED; } if (isUserDataPresent && advertisingCookiesAllowed) { config[COOKIE_TYPES.ad_user_data] = CONSENT_GRANTED; } gtag('consent', action, config); } }</script><script> window._vwo_code = window._vwo_code || (function(){ var account_id=634212, settings_tolerance=2000, library_tolerance=2500, use_existing_jquery=false, is_spa=1, hide_element='body', /* DO NOT EDIT BELOW THIS LINE */ f=false,d=document,code={use_existing_jquery:function(){return use_existing_jquery;},library_tolerance:function(){return library_tolerance;},finish:function(){if(!f){f=true;var a=d.getElementById('_vis_opt_path_hides');if(a)a.parentNode.removeChild(a);}},finished:function(){return f;},load:function(a){var b=d.createElement('script');b.src=a;b.type='text/javascript';b.innerText;b.onerror=function(){_vwo_code.finish();};d.getElementsByTagName('head')[0].appendChild(b);},init:function(){ window.settings_timer=setTimeout(function () {_vwo_code.finish() },settings_tolerance);var a=d.createElement('style'),b=hide_element?hide_element+'{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}':'',h=d.getElementsByTagName('head')[0];a.setAttribute('id','_vis_opt_path_hides');a.setAttribute('type','text/css');if(a.styleSheet)a.styleSheet.cssText=b;else a.appendChild(d.createTextNode(b));h.appendChild(a);this.load('https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&f='+(+is_spa)+'&r='+Math.random());return settings_timer; }};window._vwo_settings_timer = code.init(); return code; }());</script><script> var BASE_URL = 'https://amasty.com/'; var THEME_PATH = 'https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US'; var COOKIE_CONFIG = { "expires": null, "path": "\u002F", "domain": ".amasty.com", "secure": true, "lifetime": "31556952", "cookie_restriction_enabled": false }; var CURRENT_STORE_CODE = 'default'; var CURRENT_WEBSITE_ID = '1'; window.hyva = window.hyva || {} window.cookie_consent_groups = window.cookie_consent_groups || {} window.cookie_consent_groups['necessary'] = true; window.cookie_consent_config = window.cookie_consent_config || {}; window.cookie_consent_config['necessary'] = [].concat( window.cookie_consent_config['necessary'] || [], [ 'user_allowed_save_cookie', 'form_key', 'mage-messages', 'private_content_version', 'mage-cache-sessid', 'last_visited_store', 'section_data_ids' ] );</script><script> 'use strict'; (function( hyva, undefined ) { function lifetimeToExpires(options, defaults) { const lifetime = options.lifetime || defaults.lifetime; if (lifetime) { const date = new Date; date.setTime(date.getTime() + lifetime * 1000); return date; } return null; } function generateRandomString() { const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', length = 16; let formKey = '', charactersLength = allowedCharacters.length; for (let i = 0; i < length; i++) { formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] } return formKey; } const sessionCookieMarker = {noLifetime: true} const cookieTempStorage = {}; const internalCookie = { get(name) { const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); return v ? v[2] : null; }, set(name, value, days, skipSetDomain) { let expires, path, domain, secure, samesite; const defaultCookieConfig = { expires: null, path: '/', domain: null, secure: false, lifetime: null, samesite: 'lax' }; const cookieConfig = window.COOKIE_CONFIG || {}; expires = days && days !== sessionCookieMarker ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; path = cookieConfig.path || defaultCookieConfig.path; domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); secure = cookieConfig.secure || defaultCookieConfig.secure; samesite = cookieConfig.samesite || defaultCookieConfig.samesite; document.cookie = name + "=" + encodeURIComponent(value) + (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + (path ? '; path=' + path : '') + (domain ? '; domain=' + domain : '') + (secure ? '; secure' : '') + (samesite ? '; samesite=' + samesite : 'lax'); }, isWebsiteAllowedToSaveCookie() { const allowedCookies = this.get('user_allowed_save_cookie'); if (allowedCookies) { const allowedWebsites = JSON.parse(unescape(allowedCookies)); return allowedWebsites[CURRENT_WEBSITE_ID] === 1; } return false; }, getGroupByCookieName(name) { const cookieConsentConfig = window.cookie_consent_config || {}; let group = null; for (let prop in cookieConsentConfig) { if (!cookieConsentConfig.hasOwnProperty(prop)) continue; if (cookieConsentConfig[prop].includes(name)) { group = prop; break; } } return group; }, isCookieAllowed(name) { const cookieGroup = this.getGroupByCookieName(name); return cookieGroup ? window.cookie_consent_groups[cookieGroup] : this.isWebsiteAllowedToSaveCookie(); }, saveTempStorageCookies() { for (const [name, data] of Object.entries(cookieTempStorage)) { if (this.isCookieAllowed(name)) { this.set(name, data['value'], data['days'], data['skipSetDomain']); delete cookieTempStorage[name]; } } } }; hyva.getCookie = (name) => { const cookieConfig = window.COOKIE_CONFIG || {}; if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; } return internalCookie.get(name); } hyva.setCookie = (name, value, days, skipSetDomain) => { const cookieConfig = window.COOKIE_CONFIG || {}; if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { cookieTempStorage[name] = {value, days, skipSetDomain}; return; } return internalCookie.set(name, value, days, skipSetDomain); } hyva.setSessionCookie = (name, value, skipSetDomain) => { return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) } hyva.getBrowserStorage = () => { const browserStorage = window.localStorage || window.sessionStorage; if (!browserStorage) { console.warn('Browser Storage is unavailable'); return false; } try { browserStorage.setItem('storage_test', '1'); browserStorage.removeItem('storage_test'); } catch (error) { console.warn('Browser Storage is not accessible', error); return false; } return browserStorage; } hyva.postForm = (postParams) => { const form = document.createElement("form"); let data = postParams.data; if (! postParams.skipUenc && ! data.uenc) { data.uenc = btoa(window.location.href); } form.method = "POST"; form.action = postParams.action; Object.keys(postParams.data).map(key => { const field = document.createElement("input"); field.type = 'hidden' field.value = postParams.data[key]; field.name = key; form.appendChild(field); }); const form_key = document.createElement("input"); form_key.type = 'hidden'; form_key.value = hyva.getFormKey(); form_key.name="form_key"; form.appendChild(form_key); document.body.appendChild(form); form.submit(); } hyva.getFormKey = function () { let formKey = hyva.getCookie('form_key'); if (!formKey) { formKey = generateRandomString(); hyva.setCookie('form_key', formKey); } return formKey; } hyva.formatPrice = (value, showSign) => { const formatter = new Intl.NumberFormat( 'en\u002DUS', { style: 'currency', currency: 'USD', signDisplay: showSign ? "always" : "auto" } ); return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? formatter.formatToParts(value).map(({type, value}) => { switch (type) { case 'currency': return '$' || value; case 'minusSign': return '- '; case 'plusSign': return '+ '; default : return value; } }).reduce((string, part) => string + part) : formatter.format(value); } const formatStr = function (str, nStart) { const args = Array.from(arguments).slice(2); return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { const idx = parseInt(n) - nStart; if (args[idx] === null || args[idx] === void 0) { return m; } return p.length % 2 ? p.slice(0, -1).replace('%%', '%') + args[idx] : p.replace('%%', '%') + n; }) } hyva.str = function (string) { const args = Array.from(arguments); args.splice(1, 0, 1); return formatStr.apply(undefined, args); } hyva.strf = function () { const args = Array.from(arguments); args.splice(1, 0, 0); return formatStr.apply(undefined, args); } /** * Take a html string as `content` parameter and * extract an element from the DOM to replace in * the current page under the same selector, * defined by `targetSelector` */ hyva.replaceDomElement = (targetSelector, content) => { const parser = new DOMParser(); const doc = parser.parseFromString(content, 'text/html'); const contentNode = doc.querySelector(targetSelector); if (!contentNode) { return; } const tmpScripts = contentNode.getElementsByTagName('script'); if (tmpScripts.length > 0) { const scripts = []; for (let i = 0; i < tmpScripts.length; i++) { scripts.push(tmpScripts[i]); } for (let i = 0; i < scripts.length; i++) { let script = document.createElement('script'); script.innerHTML = scripts[i].innerHTML; document.head.appendChild(script); scripts[i].parentNode.removeChild(scripts[i]); } } document.querySelector(targetSelector).replaceWith(contentNode); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); hyva.initMessages(); } const replace = {['+']: '-', ['/']: '_', ['=']: ','}; hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); let currentTrap; const focusableElements = (rootElement) => { const selector = 'button, [href], input, select, textarea, details'; return Array.from(rootElement.querySelectorAll(selector)) .filter(el => el.style.display !== 'none' && !el.disabled && el.tabIndex !== -1) } const focusTrap = (e) => { const isTabPressed = e.key === 'Tab' || e.keyCode === 9; if (!isTabPressed) return; const focusable = focusableElements(currentTrap) const firstFocusableElement = focusable[0] const lastFocusableElement = focusable[focusable.length - 1] e.shiftKey ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) }; hyva.releaseFocus = (rootElement) => { if (currentTrap && (!rootElement || rootElement === currentTrap)) { currentTrap.removeEventListener('keydown', focusTrap) currentTrap = null } } hyva.trapFocus = (rootElement) => { if (!rootElement) return; hyva.releaseFocus() currentTrap = rootElement rootElement.addEventListener('keydown', focusTrap) const firstElement = focusableElements(rootElement)[0] firstElement && firstElement.focus() } hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) }( window.hyva = window.hyva || {} ));</script><script> (function() { const proLargeOption = 'Maintenance included for all products purchased before Feb 1, 2022 ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + '- <a href="/knowledge-base/what-magento-versions-amasty-supports.html">Compatibility with Magento</a>' + ' versions supported by Adobe <br>' + '- Bug fixes <br>' + '- Security patches</span></span>'; const trainingSession = 'Training sessions ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-left">' + '<span class="tooltip-toggle"></span><span class="tooltip-content large">' + 'Extensions covered by the training:<br>' + '<span class="for-tooltip-left-indent -dot"> Promotion Suite for Magento 2</span><br>' + '<span class="for-tooltip-left-indent">Special Promotions Pro for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Loyalty Program for Magento 2</span><br>' + '<span class="for-tooltip-left-indent">Free Gift for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot">Reward Points for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Google Page Speed Optimizer for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> SEO Toolkit for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Suite for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Table Rates for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Restrictions for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Rules for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Delivery Date Manager for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping & Payment By Customer Groups for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Cost Calculator for Magento 2</span><br>' + '<span class="for-tooltip-left-indent">Free Shipping Bar for Magento 2</span><br>' + '</span></span>'; const configurationSession = 'Free configuration service ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content large">' + 'Extension covered within the configuration service:<br>' + '<span class="for-tooltip-left-indent -dot"> Google Page Speed Optimizer</span><br>' + '<span class="for-tooltip-left-indent -dot">Free Gift</span><br>' + '<span class="for-tooltip-left-indent -dot">Special Promotions (Pro)</span><br>' + '<span class="for-tooltip-left-indent -dot">Shipping Suite</span><br>' + '<span class="for-tooltip-left-indent -dot">SEO Toolkit</span><br>' + '<span class="for-tooltip-left-indent -dot">Import and Export</span><br>' + '</span></span>' + '<span class="option-caption"> on request</span>'; const litePerfomance = 'Lite Performance Audit ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-left">' + '<span class="tooltip-toggle"></span><span class="tooltip-content large">' + 'In terms of the Performance Audit (Lite version) we will:<br>' + '<span class="for-tooltip-left-indent -dot"> scan your website using Google PageSpeed Insights</span><br>' + '<span class="for-tooltip-left-indent -dot"> analyse Core web Vitals</span><br>' + '<span class="for-tooltip-left-indent -dot"> offer basic technical guidance in alignment with Magento code' + ' standards and overall coding practices</span><br>' + '<span class="for-tooltip-left-indent -dot"> provide recommendations for optimizing your Magento usage ' + '(version management, updates, security patches, module usage)</span><br>' + '<span class="for-tooltip-left-indent -dot"> furnish general recommendations for server and cache' + ' management</span><br>' + '</span></span>' + '<br><span class="option-caption">once per quarter</span>'; const litePerfomanceCoreWebVitals = 'Lite Performance Audit + special offer for Core Web Vitals optimization ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-left">' + '<span class="tooltip-toggle"></span><span class="tooltip-content large">' + 'In terms of the Performance Audit (Lite version) we will:<br>' + '<span class="for-tooltip-left-indent -dot"> scan your website using Google PageSpeed Insights</span><br>' + '<span class="for-tooltip-left-indent -dot"> analyse Core web Vitals</span><br>' + '<span class="for-tooltip-left-indent -dot"> offer basic technical guidance in alignment with Magento code' + ' standards and overall coding practices</span><br>' + '<span class="for-tooltip-left-indent -dot"> provide recommendations for optimizing your Magento usage ' + '(version management, updates, security patches, module usage)</span><br>' + '<span class="for-tooltip-left-indent -dot"> furnish general recommendations for server and cache' + ' management</span><br>' + '</span></span>' + '<br><span class="option-caption">once per quarter</span>'; const partnerPricePro = '<span class="special-partner">Special price for partners</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get annual subscription by a special price based on your partner level:<br>' + '<span class="for-tooltip-left-indent -dot"> Bronze - $2199</span><br>' + '<span class="for-tooltip-left-indent -dot"> Silver - $2069</span><br>' + '<span class="for-tooltip-left-indent -dot"> Gold - $1939</span><br>' + '<span class="for-tooltip-left-indent -dot"> Platinum - $1809</span><br>' + '</span></span>'; const partnerPricePremium = '<span class="special-partner">Special price for partners</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get annual subscription by a special price based on your partner level:<br>' + '<span class="for-tooltip-left-indent -dot"> Bronze - $2439</span><br>' + '<span class="for-tooltip-left-indent -dot"> Silver - $2299</span><br>' + '<span class="for-tooltip-left-indent -dot"> Gold - $2149</span><br>' + '<span class="for-tooltip-left-indent -dot"> Platinum - $2009</span><br>' + '</span></span>'; const partnerPriceAmastyOne = '<span class="special-partner">Special price for partners</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get annual subscription by a special price based on your partner level:<br>' + '<span class="for-tooltip-left-indent -dot"> Bronze - $2929</span><br>' + '<span class="for-tooltip-left-indent -dot"> Silver - $2759</span><br>' + '<span class="for-tooltip-left-indent -dot"> Gold - $2589</span><br>' + '<span class="for-tooltip-left-indent -dot"> Platinum - $2409</span><br>' + '</span></span>'; const partnerPriceAgencyPremium = '<span class="special-partner"><a href="/partnership-program.html">Partner ' + 'Program</a> Discounts</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get a <b>20% discount</b> on <br>' + 'the deposit of any level.' + '</span></span><br><span class="option-caption">for agencies only</span>'; const partnerPriceAgencyAmastyOne = '<span class="special-partner"><a href="/partnership-program.html">Partner ' + 'Program</a> Discounts</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get a <b>30% discount</b> on <br>' + 'the deposit of any level.' + '</span></span><br><span class="option-caption">for agencies only</span>'; window.dataForSubscriptions = Object.freeze({ individual: { month: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>' ], 'Amasty One': [ 'Premium included', 'Personal account manager', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals ] }, annual: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', litePerfomance ], 'Amasty One': [ 'Premium included', 'Personal account manager', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals ] } }, corporate: { month: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession, partnerPricePro ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', '<span class="special-partner">Personal account manager</span>', partnerPricePremium, partnerPriceAgencyPremium ], 'Amasty One': [ 'Premium included', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals, '<span class="special-partner">Support for 10 clients is included in the annual ' + 'subscription</span>', partnerPriceAmastyOne, partnerPriceAgencyAmastyOne ] }, annual: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession, partnerPricePro ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', litePerfomance, '<span class="special-partner">Personal account manager</span>', partnerPricePremium, partnerPriceAgencyPremium ], 'Amasty One': [ 'Premium included', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals, '<span class="special-partner">Support for 10 clients is included in the annual ' + 'subscription</span>', partnerPriceAmastyOne, partnerPriceAgencyAmastyOne ] } }, partner: { month: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession, partnerPricePro ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', '<span class="special-partner">Personal account manager</span>', partnerPricePremium, partnerPriceAgencyPremium ], 'Amasty One': [ 'Premium included', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals, '<span class="special-partner">Support for 10 clients is included in the annual ' + 'subscription</span>', partnerPriceAmastyOne, partnerPriceAgencyAmastyOne ] }, annual: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession, partnerPricePro ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', litePerfomance, '<span class="special-partner">Personal account manager</span>', partnerPricePremium, partnerPriceAgencyPremium ], 'Amasty One': [ 'Premium included', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals, '<span class="special-partner">Support for 10 clients is included in the annual ' + 'subscription</span>', partnerPriceAmastyOne, partnerPriceAgencyAmastyOne ] } } }); })();</script><script> 'use strict'; (() => { hyva.formatPrice = (value, showSign, options = {}) => { const formatter = new Intl.NumberFormat( 'en\u002DUS', Object.assign({ style: 'currency', currency: 'USD', signDisplay: showSign ? 'always' : 'auto' }, options) ); return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? formatter.formatToParts(value).map(({type, value}) => { switch (type) { case 'currency': return '\u0024' || value; case 'minusSign': return '- '; case 'plusSign': return '+ '; default : return value; } }).reduce((string, part) => string + part) : formatter.format(value); } })()</script><script src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Magento_Theme/js/utils/svg-amasty-sprite.min.js" async></script><script type="text/x-magento-init"> { "body": { "addToWishlist": {"productType":["simple","virtual","downloadable","bundle","grouped","configurable"]} } }</script><script type="text/x-magento-init"> { "*": { "cookieStatus": {} } }</script><script type="text/x-magento-init"> { "*": { "mage/cookies": { "expires": null, "path": "\u002F", "domain": ".amasty.com", "secure": true, "lifetime": "31556952" } } }</script><script> window.cookiesConfig = window.cookiesConfig || {}; window.cookiesConfig.secure = true; </script><script> require.config({ map: { '*': { wysiwygAdapter: 'mage/adminhtml/wysiwyg/tiny_mce/tinymce5Adapter' } } });</script><script> (function () { 'use strict'; window.amRecaptchaModel = { formsToProtect: "\u0023form\u002Dforgotpassword,\u0023user_forgotpassword,form\u005Baction\u002A\u003D\u0022createpost\u0022\u005D,\u0023review_form,\u0023adyen\u002Dcc\u002Dform,\u005Bdata\u002Damsite\u002Djs\u003D\u0022billing\u002Daddress\u002Dform\u0022\u005D,.form.form\u002Dlogin,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fcreatepost\u0022\u005D,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002FloginPost\u0022\u005D,form\u005Baction\u002A\u003D\u0022newsletter\u002Fsubscriber\u002Fnew\u0022\u005D,form\u005Baction\u002A\u003D\u0022contact\u002Findex\u002Fpost\u0022\u005D,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fforgotpasswordpost\u0022\u005D,\u0023review_form,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fresetpasswordpost\u0022\u005D,form\u005Baction\u002A\u003D\u0022checkout_payment_captcha\u0022\u005D,form\u005Baction\u002A\u003D\u0022amasty_customform\u002Fform\u002Fsubmit\u0022\u005D,form\u005Baction\u002A\u003D\u0022faq\u002Findex\u002Fsave\u0022\u005D,.form.password.forget", isEnabledOnPayments: "1", checkoutRecaptchaValidateUrl: "https://amasty.com/amcapthca/checkout/validate/", invisibleCaptchaCustomForm: "1", recaptchaConfig: { lang: "hl\u003Den" || 'hl=en', theme: "light", badge: "bottomleft", sitekey: "6LcoY6UZAAAAAP7Dqjtr6MPM8yGySn617oAlWVSx", size: "invisible" }, url: 'https://www.google.com/recaptcha/api.js', isCaptchaScriptLoaded: false, isInvisible: "invisible" === 'invisible', /** * Submit event * * @param {Object} $event * @return {void} */ execute: function ($event) { const eventTarget = $event?.target; if (this.isCaptchaScriptLoaded) { this.executeCaptcha(eventTarget); } else { window.addEventListener('amcaptcha-script-loaded', () => { this.isCaptchaScriptLoaded = true; this.executeCaptcha(eventTarget); this.initAmcaptchaBadges(); }); this.loadRecaptchaScript(); } }, /** * Execute original submit * * @param {Object} $event * @param {HTMLElement} $el * @return {void} */ recaptchaCallback: function ($event, $el) { this.shouldExecuteCallback($event, $el) && $el.dispatchEvent(new CustomEvent('amrecaptcha-executable-callback')); }, /** * Reset captcha * * @param {Object} $event * @param {HTMLElement} $el */ expiredCallback: function($event, $el) { this.shouldExecuteCallback($event, $el) && grecaptcha.reset($event.detail.widgetId); }, /** * Checks if event is fired on submitted element * * @param {Object} $event * @param {HTMLElement} $el * @return {boolean} */ shouldExecuteCallback: function($event, $el) { const eventWidgetId = $event.detail.widgetId; const elementWidgetId = $el.dataset.amCaptchaWidgetId || $el.closest('form')?.dataset.amCaptchaWidgetId; return eventWidgetId === elementWidgetId; }, /** * Run captcha for widget by id * * @param {HTMLElement} eventTarget * @return {void} */ executeCaptcha: function(eventTarget) { if (!eventTarget.dataset.hasOwnProperty('amCaptchaRendered')) { this.bindCaptchaGlobalCallbacks(eventTarget); this.renderCaptcha(eventTarget); eventTarget.dataset.amCaptchaRendered = ''; } const widgetId = this.getWidgetId(eventTarget); if (!widgetId) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: 'Recaptcha\u0020cannot\u0020properly\u0020validate\u0020form.' } ]); return; } window.dispatchEvent(new CustomEvent('amcaptcha-loading-start')); grecaptcha.reset(widgetId); if (!this.isInvisible) { this.stopAmcaptchaLoading(); return; } grecaptcha.execute(widgetId) .then(() => this.stopAmcaptchaLoading()) .catch(() => this.stopAmcaptchaLoading()); }, /** * Add recaptcha script to page * * @return {void} */ loadRecaptchaScript: function () { const lang = window.amRecaptchaModel.recaptchaConfig.lang; const url = `${window.amRecaptchaModel.url}?onload=amRecaptchaLoadCallback&render=explicit&${lang}`; const script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; script.async = true; document.head.appendChild(script); }, /** * Stop loader on page * * @return {void} */ stopAmcaptchaLoading: function () { window.dispatchEvent(new CustomEvent('amcaptcha-loading-stop')); }, /** * Add attributes to hide captcha badge * * @return {void} */ initAmcaptchaBadges: function () { if (!this.isInvisible) { return; } document.querySelectorAll('.grecaptcha-badge')?.forEach(captchaBadge => { captchaBadge?.setAttribute('x-data', '{ visible: true }'); captchaBadge?.setAttribute('x-on:amcaptcha-loading-start.window', 'visible = true'); captchaBadge?.setAttribute('x-on:amcaptcha-loading-stop.window', 'visible = false'); captchaBadge?.setAttribute(':class', '!visible && "invisible"'); }); }, /** * Get form widgetId * * @param {HTMLElement} eventTarget * @return {string} */ getWidgetId: function (eventTarget) { return eventTarget.dataset.amCaptchaWidgetId || eventTarget.closest('form')?.dataset.amCaptchaWidgetId; }, /** * Add captcha badge or checkbox to protected form. * Store widgetId in dataset to pass this info in callbacks * * @param {HTMLElement} eventTarget * @return {void} */ renderCaptcha: function (eventTarget) { const captchaElement = document.createElement('div'); const formContent = eventTarget.closest('form')?.querySelector('[data-element="form-content"]') ?? eventTarget.closest('form'); formContent?.appendChild(captchaElement); eventTarget.dataset.amCaptchaWidgetId = grecaptcha.render(captchaElement, { ...window.amRecaptchaModel?.recaptchaConfig, callback: () => { window.dispatchEvent(new CustomEvent( 'amrecaptcha-callback', { detail: this.getCaptchaCallbackDetail(eventTarget) })); }, 'expired-callback': () => { window.dispatchEvent(new CustomEvent( 'amrecaptcha-expired-callback', { detail: this.getCaptchaCallbackDetail(eventTarget) })); } }); }, /** * Get detail property for callback event * * @param {HTMLElement} eventTarget * @return {object} */ getCaptchaCallbackDetail: function (eventTarget) { return { widgetId: eventTarget.dataset.amCaptchaWidgetId, form: eventTarget } }, /** * Add functions that will be called on the global state * * @param {HTMLElement} eventTarget * @return {void} */ bindCaptchaGlobalCallbacks: function (eventTarget) { eventTarget.setAttribute( 'x-on:amrecaptcha-callback.window', `amRecaptchaModel.recaptchaCallback($event, $el)` ); eventTarget.setAttribute( 'x-on:amrecaptcha-expired-callback.window', 'amRecaptchaModel.expiredCallback($event, $el)' ); } }; })(window.amRecaptchaModel = window.amRecaptchaModel || {}); window.amRecaptchaLoadCallback = function () { window.dispatchEvent(new CustomEvent('amcaptcha-script-loaded')); }</script><script> (function (hyva) { 'use strict'; /** * We use multiple Store objects depending on which Alpine version is */ const isAlpineV3 = true; /** * @returns {string} */ function getInitEventName() { return isAlpineV3 ? 'alpine:init' : 'spruce:init'; } /** * @returns {Object} */ function getStoreObject() { return isAlpineV3 ? Alpine : Spruce; } hyva.amStorage = { /** * @param {string} key * @param {Object} object * @returns {void} */ create: (key, object) => { const eventName = key.toLowerCase() + '-created'; document.addEventListener(getInitEventName(), () => { getStoreObject().store(key, object); document.dispatchEvent(new Event(eventName)); }); }, /** * @param {string} key * @returns {Object} */ getStorage: (key) => { return getStoreObject().store(key); }, /** * @param {string} key * @param {Object} object * @returns {void} */ reInit: (key, object) => { isAlpineV3 ? getStoreObject().store(key, object) : getStoreObject().reset(key, object); } }; }(window.hyva = window.hyva || {}));</script><script> window.amastyCookieManager = window.amastyCookieManager || {};</script><script> window.amRecaptchaModel = window.amRecaptchaModel || {};</script><script> 'use strict'; (function(hyva) { const formValidationRules = { required(value, options, field, context) { const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element, msg = 'This\u0020is\u0020a\u0020required\u0020field.'; if (el.type === 'radio' || el.type === 'checkbox') { return (value === undefined || value.length === 0) ? msg : true; } el.setAttribute('required', ''); el.checkValidity(); return el.validity.valueMissing ? msg : true; }, maxlength(value, options, field, context) { const n = Number(options) if (value.length > n) { return n === 1 ? hyva.strf('Please\u0020enter\u0020no\u0020more\u0020than\u00201\u0020character.') : hyva.strf('Please\u0020enter\u0020no\u0020more\u0020than\u0020\u00250\u0020characters.', options) } return true; }, minlength(value, options, field, context) { const n = Number(options) if (value.length > 0 && value.length < n) { return n === 1 ? hyva.strf('Please\u0020enter\u0020at\u0020least\u00201\u0020character.') : hyva.strf('Please\u0020enter\u0020at\u0020least\u0020\u00250\u0020characters.', options) } return true; }, max(value, options, field, context) { field.element.setAttribute('max', options); field.element.checkValidity(); if (field.element.validity.rangeOverflow) { return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020less\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00250\u0022.', options); } return true; }, min(value, options, field, context) { field.element.setAttribute('min', options); field.element.checkValidity(); if (field.element.validity.rangeUnderflow) { return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020greater\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00250\u0022.', options); } return true; }, step(value, options, field, context) { field.element.setAttribute('step', options); field.element.checkValidity(); if (field.element.validity.stepMismatch) { const val = Number(options); return hyva.strf('Please\u0020enter\u0020a\u0020valid\u0020value.\u0020The\u0020two\u0020nearest\u0020valid\u0020values\u0020are\u0020\u0022\u00250\u0022\u0020and\u0020\u0022\u00251\u0022.', Math.floor(val), Math.ceil(val)); } return true; }, pattern(value, options, field, context) { field.element.setAttribute('pattern', options); field.element.checkValidity(); if (field.element.validity.patternMismatch) { return field.element.title ? hyva.strf('Please\u0020match\u0020the\u0020requested\u0020format\u003A\u0020\u00250.', field.element.title) : 'Please\u0020match\u0020the\u0020requested\u0020format.' } return true; }, email(value, options, field, context) { const rule = /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i; if (value.length > 0 && !rule.test(value)) { return 'Please\u0020enter\u0020a\u0020valid\u0020email\u0020address.'; } return true; }, password(value, options, field, context) { const rule = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/; if (value.length > 0 && !rule.test(value)) { return 'Please\u0020provide\u0020at\u0020least\u0020one\u0020upper\u0020case,\u0020one\u0020lower\u0020case,\u0020one\u0020digit\u0020and\u0020one\u0020special\u0020character\u0020\u0028\u0023\u003F\u0021\u0040\u0024\u0025\u005E\u0026\u002A\u002D\u0029'; } return true; }, equalTo(value, options, field, context) { const dependencyField = context.fields[options].element; if (value !== dependencyField.value) { const dependencyFieldName = dependencyField.label || dependencyField.title || (dependencyField.labels && dependencyField.labels[0] && dependencyField.labels[0].innerText) || dependencyField.name; return hyva.strf('This\u0020field\u0020value\u0020must\u0020be\u0020the\u0020same\u0020as\u0020\u0022\u00250\u0022.', dependencyFieldName); } return true; } }; function raceSome(promises, pred) { return new Promise((resolve, reject) => { if (promises.length === 0) { return resolve(); } let settled = false, nDone = 0; const resolveIf = v => { if (!settled && (pred(v) || ++nDone === promises.length)) { settled = true; resolve(v); } return v; } promises.map(promise => { promise.then(resolveIf).catch(reason => { settled = true; reject(reason) }); return promise; }); }); } const INPUT_ATTRIBUTE_RULES = {min: 'min', max: 'max', required: 'required', minlength: 'minlength', maxlength: 'maxlength', step: 'step', pattern: 'pattern'} const INPUT_TYPE_RULES = {email: 'email'} function getRules(element) { let rules = {}; Object.keys(INPUT_ATTRIBUTE_RULES).forEach(attrName => { if (element.hasAttribute(attrName)) { rules[INPUT_ATTRIBUTE_RULES[attrName]] = element.getAttribute(attrName); } }) if (INPUT_TYPE_RULES[element.type]) { rules[INPUT_TYPE_RULES[element.type]] = true; } if (element.dataset.validate) { try { Object.assign(rules, JSON.parse(element.dataset.validate)); } catch (error) { console.error('Validator error. Cannot parse data-validate attribute of element:\n', element); } } return rules; } function isInvalidRuleResult(ruleState) { return typeof ruleState === 'string' || !ruleState || (ruleState.type && ruleState.content); } async function runValidateFn(rule, options, value, field) { return formValidationRules[rule](value, options, field, this); } function generateId() { let id; do { id = `${this.idPrefix}-${++this.idSeq}`; } while (document.getElementById(id)); return id; } function isVisible(element) { const el = element.type !== 'hidden' ? element : (element.parentElement || {}); return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length) } function elementWillValidate(element) { return (element.willValidate || element.type === 'hidden') && element.tagName !== 'BUTTON' && element.disabled === false && !(element.tagName === 'INPUT' && element.type === 'submit') && (element.hasAttribute('data-validate-hidden') || isVisible(element)) } function createMessageContainer(el, fieldWrapperClassName) { if (! el.parentElement) { return; } const refocus = document.activeElement === el; const wrapper = document.createElement('div'); wrapper.classList.add.apply(wrapper.classList, fieldWrapperClassName.split(' ')); el.parentElement.insertBefore(wrapper, el); wrapper.appendChild(el); refocus && document.activeElement !== el && el.focus(); return wrapper; } function containerNotFound(selector, el) { const msg = `Cannot find message container element ${selector} of ${el.name}`; console.error(msg, el); throw msg; } function createTextInputFrom(el) { const text = document.createElement('INPUT'); text.type = 'text'; text.value = el.value; return text; } function classNamesToSelector(classNames) { return classNames.split(' ') .filter(className => className.length > 0) .map(className => `.${className}`) .join('') } function hasMessagesWrapper(field, messagesWrapperClassName) { return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); } function getMessagesWrapper(field, messagesWrapperClassName) { if (hasMessagesWrapper.call(this, field, messagesWrapperClassName)) { return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); } const msgWrapper = document.createElement('ul'); const msgId = generateId.call(this); msgWrapper.id = msgId; field.element.setAttribute('aria-errormessage', msgId); field.element.setAttribute('aria-describedby', msgId); msgWrapper.classList.add.apply(msgWrapper.classList, messagesWrapperClassName.split(' ')); if (field.validateOnChange) { msgWrapper.setAttribute('aria-live', 'polite'); } this.getMessageContainer(field).appendChild(msgWrapper); return msgWrapper; } function getCheckedValues(field) { const name = field.element.name.replace(/([\\"])/g, '\\$1'); const elements = field.element.form.querySelectorAll('input[name="' + name + '"]:checked'); return Array.from(elements).map(el => el.value); } function escapeHtml(s) { const div = document.createElement('div') div.innerText = s; return div.innerHTML; } function formValidation(formElement, options) { if (formElement.tagName === 'FORM') { formElement.setAttribute('novalidate', ''); } else { console.error('formValidation can be initialized only on FORM element', formElement); return; } options = Object.assign({ fieldWrapperClassName: 'field field-reserved', messagesWrapperClassName: 'messages', validClassName: 'field-success', invalidClassName: 'field-error', pageMessagesWrapperSelector: null, scrollToFirstError: true, }, options || {}); return { state: { valid: false, }, fields: {}, idSeq: 0, idPrefix: formElement.id || 'vld-msg', setupFields(elements) { this.fields = {}; Array.from(elements).forEach(element => { if (elementWillValidate(element)) { this.setupField(element); } }); }, setupField(element) { if (! element) return; const onChange = !!element.dataset.onChange; if (elementWillValidate(element)) { const rules = getRules(element); if (Object.keys(rules).length > 0) { if (this.fields[element.name]) { Object.assign(this.fields[element.name].rules, rules); } else { this.fields[element.name] = { element, rules: rules, validateOnChange: onChange, state: { valid: null, rules: {} } } } } } else { console.error('Element will not validate', element); } }, onSubmit(event) { if (event.target.tagName === 'FORM') { event.preventDefault(); this.validate() .then(() => event.target.submit()) .catch(invalidElements => {}); } }, onChange(event) { event.target.dataset.onChange = 'true'; if (!Object.keys(this.fields).length) { this.setupFields(formElement.elements); } if (!Object.keys(this.fields).includes(event.target.name)) { this.setupField(event.target); } const field = this.fields[event.target.name]; this.validateField(field); field && field.element.removeAttribute('data-on-change') }, validateSafe() { return new Promise(resolve => this.validate().then(() => resolve(true)).catch(() => {})) }, validate() { if (!Object.keys(this.fields).length || !Object.keys(this.fields).length !== formElement.elements.length) { this.setupFields(formElement.elements); } return new Promise(async (resolve, reject) => { if (formElement.elements) { await raceSome(this.validateFields(), result => result !== true) const invalidFields = Object.values(this.fields).filter(field => !field.state.valid); this.state.valid = invalidFields.length === 0; if (this.state.valid) { resolve(); } else { if (options.scrollToFirstError && invalidFields.length > 0) { invalidFields[0].element.focus() invalidFields[0].element.select && invalidFields[0].element.select(); } reject(invalidFields.map(field => field.element)); } } }); }, validateFields() { const fields = Object.values(this.fields); fields.forEach(field => { this.getMessageContainer(field).classList.remove(options.validClassName, options.invalidClassName) }); return fields.map(field => this.validateField(field)) }, validateField(field) { if (! field || ! elementWillValidate(field.element)) { return new Promise(resolve => resolve(true)) } let value; if (field.element.type === 'checkbox') { value = getCheckedValues(field); } else if (field.element.type === 'radio') { value = getCheckedValues(field)[0] || undefined; } else if (field.element.tagName === 'SELECT' && field.element.multiple) { value = Array.from(field.element.selectedOptions).map(opt => opt.value); } else { value = field.element.value; } const rules = field.rules || {}; field.state.valid = true; this.showFieldState(field); const fieldValidations = Object.keys(rules).filter(rule => formValidationRules[rule]).map(async rule => { return runValidateFn.call(this, rule, rules[rule], value, field).then(result => { field.state.rules[rule] = result; return result; }) }); return new Promise(resolve => { Promise.all(fieldValidations).then(results => { field.state.valid = !elementWillValidate(field.element) || rules.length === 0 || !results.some(isInvalidRuleResult) this.showFieldState(field); resolve(field.state.valid); }) }); }, getMessagesByField(field) { const messages = []; const invalidRules = Object.keys(field.state.rules).filter(rule => isInvalidRuleResult(field.state.rules[rule])); field.rules && Object.keys(field.rules).forEach((rule) => { if (invalidRules.includes(rule)) { const customMessage = field.element.getAttribute('data-msg-' + rule); const message = customMessage ? customMessage : field.state.rules[rule]; const ruleOptions = JSON.parse(JSON.stringify(field.rules[rule])); if (typeof message === 'undefined' || message === null || (typeof message !== 'string' && ! message.type)) { messages.push(hyva.strf('Validation rule "%0" failed.', rule)); } else if (Array.isArray(ruleOptions)) { ruleOptions.unshift(message.type ? message.content : message); const content = hyva.strf.apply(null, ruleOptions); messages.push(message.type ? {type: message.type, content} : content); } else { const content = hyva.strf(message.type ? message.content : message, ruleOptions) messages.push(message.type ? {type: message.type, content} : content); } } }); return messages; }, /** @deprecated */ getFieldWrapper(field) { return this.getMessageContainer(field) }, getMessageContainer(field) { let container; const pageSelector = field.element.getAttribute('data-validation-container') || options.pageMessagesContainerSelector; if (pageSelector) { container = document.querySelector(pageSelector) || containerNotFound(pageSelector, field.element) } else { const containerSelector = classNamesToSelector(options.fieldWrapperClassName); container = field.element.closest(containerSelector) || createMessageContainer(field.element, options.fieldWrapperClassName) || containerNotFound(containerSelector, field.element); } return container; }, showFieldState(field) { const container = this.getMessageContainer(field), hasErrorMessages = hasMessagesWrapper.call(this, field, options.messagesWrapperClassName), messages = this.getMessagesByField(field).map(m => { return m.type !== 'html' ? escapeHtml(m.type ? m.content : m) : m.content; }); container.classList.toggle(options.validClassName, field.state.valid && ! hasErrorMessages); container.classList.toggle(options.invalidClassName, !field.state.valid || hasErrorMessages); this.createHtmlErrorMessage(field, messages); if (field.state.valid) { field.element.removeAttribute('aria-invalid'); } else { field.element.setAttribute('aria-invalid', 'true'); if (! document.activeElement) { field.element.focus(); } } }, removeMessages(field, messagesClass) { if (! hasMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName)) { return; } const msgWrapper = getMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName); const messages = msgWrapper.querySelectorAll(`[data-msg-field='${field.element.name}']`); Array.from(messages).forEach(msg => msg.remove()); if (msgWrapper && msgWrapper.childElementCount === 0) { field.element.removeAttribute('aria-errormessage'); field.element.removeAttribute('aria-describedby'); msgWrapper.remove(); } }, createErrorMessage(field, messages) { const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml) this.createHtmlErrorMessage(field, htmlMessages); }, createHtmlErrorMessage(field, messages) { this.removeMessages(field, options.messagesWrapperClassName); field.element.removeAttribute('aria-errormessage'); field.element.removeAttribute('aria-describedby'); if (!field.state.valid) { const msgWrapper = this.addHtmlMessages(field, options.messagesWrapperClassName, messages); field.element.setAttribute('aria-errormessage', msgWrapper.id); field.element.setAttribute('aria-describedby', msgWrapper.id); } }, /** @deprecated */ createMessage(field, message) { return this.addMessages(field, options.messagesWrapperClassName, message); }, addMessages(field, messagesClass, messages) { const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml) return this.addHtmlMessages(field, messagesClass, htmlMessages); }, addHtmlMessages(field, messagesClass, htmlMessages) { const msgWrapper = getMessagesWrapper.call(this, field, messagesClass); (Array.isArray(htmlMessages) ? htmlMessages : [htmlMessages]).forEach((htmlMessage) => { const li = document.createElement('li'); li.innerHTML = htmlMessage; li.setAttribute('data-msg-field', field.element.name); msgWrapper.appendChild(li); }); return msgWrapper; }, setField(name, value) { this.fields[name].element.value = value; this.fields[name].element.dispatchEvent((new Event('input'))); this.validateField(this.fields[name]); } } } hyva.formValidation = formValidation; hyva.formValidation.rules = formValidationRules; hyva.formValidation.setInputAttributeRuleName = (attrName, ruleName) => INPUT_ATTRIBUTE_RULES[attrName] = ruleName || attrName; hyva.formValidation.setInputTypeRuleName = (typeName, ruleName) => INPUT_TYPE_RULES[typeName] = ruleName || typeName; hyva.formValidation.addRule = (name, validator) => formValidationRules[name] = validator; }(window.hyva = window.hyva || {}));</script><script> function initHeader () { return { searchOpen: false, cart: {}, isCartOpen: false, getData(data) { if (data.cart) { this.cart = data.cart } }, isCartEmpty() { return !this.cart.summary_count }, toggleCart(event) { if (event.detail && event.detail.isOpen !== undefined) { this.isCartOpen = event.detail.isOpen if (!this.isCartOpen && this.$refs && this.$refs.cartButton) { this.$refs.cartButton.focus() } } else { this.isCartOpen = true } }, openShoppingCart() { window.location.href = this.$el.getAttribute('data-href'); } } }</script><script> 'use strict'; function amXsearchProductsComponent() { return { getResultProductsCount() { const suggestions = this.sections.products; const totalCount = suggestions?.total_count ?? 0; const itemsCount = suggestions?.items?.length ?? 0; return totalCount > 0 ? totalCount - itemsCount : 0; }, processProductName(value) { if (value.items) { value.items = value.items.map(item => { item.name = this.addHighlight(item, 'name'); item.sku = this.addHighlight(item, 'sku'); item.name = this.truncateWithDots(item.name, this.productNameMaxLength, true); return item; }); } return value; }, addHighlight(product, key = 'name') { const name = product[key]; const { latestQuery } = this; const queries = latestQuery.toLowerCase().split(" "); let highlightedName = name; for (const query of queries) { if (query.trim() !== "") { const regex = new RegExp(`(?!<[^>]*)(${query})(?![^<]*>)`, "gi"); highlightedName = highlightedName.replace(regex, match => `<span class="amsearch-highlight">${match}</span>`); } } return highlightedName; }, truncateWithDots(str, maxLength, returnOriginal = false) { if (maxLength === '' || maxLength < 1) { return returnOriginal ? str : ""; } let output = []; let tagBuffer = []; let count = 0; let inTag = false; for (const char of str) { if (char === "<") { inTag = true; } if (inTag) { tagBuffer.push(char); } else { count++; } if (char === ">") { inTag = false; output.push(tagBuffer.join("")); tagBuffer = []; } else if (!inTag) { output.push(char); } if (count >= maxLength) { break; } } if (count >= maxLength) { output.push("..."); } while (tagBuffer.length > 0) { const closingTagPos = str.indexOf(">", str.indexOf(tagBuffer.join("")) + tagBuffer.length); if (closingTagPos !== -1) { output.push(str.slice(str.indexOf(tagBuffer.join("")) + tagBuffer.length, closingTagPos + 1)); tagBuffer = []; } else { break; } } return output.join(""); }, getProductUrl(product) { return window.BASE_URL + product.url_key + (product.url_suffix || ''); }, getProductImageUrl(product) { const imageUrl = product.small_image.url; let mediaURL = this.config.customMediaUrl || imageUrl; if (mediaURL.includes('/media') && imageUrl.startsWith('media/')) { mediaURL = mediaURL.replace('/media', ''); } return (imageUrl.includes('://') ? '' : mediaURL) + imageUrl; }, /** * * @param product */ getRating(product) { const { rating_summary } = product; product.ratingData = { ratingSteps: 5, starsFilled: Math.floor(+rating_summary / 100 * 5), starFragment: rating_summary / 100 * 5 % 1, starsEmpty: Math.floor(5 - (+rating_summary / 100 * 5)), yellowHex: '#FE9901', greyHex: '#cbd5e0', averageRating: (rating_summary / 20).toFixed(1) }; return product; }, isM1(product) { return product.type === 1 }, isSaas(product) { return product.custom_stock_status === 'Saas' }, isService(product) { return product.type === +'99' }, isRequestQuote(product) { return product.custom_stock_status === 'Request a quote' }, isRevisingDemand(product) { return product.custom_stock_status === 'Revising demand' }, isCalcurates(product) { return product.id === 1490 } } }</script><script> 'use strict'; (()=> { const browserCache = { set(key, value) { const now = new Date(); const item = { value: value, expiry: now.getTime() + 5 * 60 * 1000, }; localStorage.setItem(key, JSON.stringify(item)); }, get(key) { const itemStr = localStorage.getItem(key); if (!itemStr) { return null; } const item = JSON.parse(itemStr); const now = new Date(); if (now.getTime() > item.expiry) { localStorage.removeItem(key); return null; } return item.value; } }; window._amXSearchConfigFetcher = null; window.amXsearchAutocompleteComponent = () => { const INITIAL_QUERY_CACHE_KEY = 'x.InitialQuery'; const CONFIG_QUERY_CACHE_KEY = 'x.ConfigQuery'; const PREV_QUERY_CACHE_KEY = 'x.PrevQuery'; const HEADER_TYPE = 'b'; const cache = {}; const dataSections = { products: false, category: false, page: false, faq: false, landingPage: false, browsingHistory: false, popularSearches: false, bestsellers: false, recentSearches: false, recentlyViewed: false, brand: false, blog: false }; return { isLoading: false, searchInitialized: false, latestQuery: '', productNameMaxLength: 100, resultPageUrl: 'https://amasty.com/catalogsearch/result/?q=', minSearchLength: 3, maxSearchLength: 128, isDefaultSearchInput: true, isFullWidthSearch: false, searchPopupWidth: 900, showOverlay: false, config: {}, slider: { bestsellers: false, recentlyViewed: false }, isHorizontalView: true, noResultsFound: false, errorMessage: null, isProductsShown: false, regex: { tags: /(<([^>]+)>)/gi }, sections: Object.create(dataSections), isHyvaUiHeader() { return HEADER_TYPE.length && HEADER_TYPE !== 'default'; }, checkHyvaUiHeaderVariant(needle) { return this.isHyvaUiHeader() && needle === HEADER_TYPE; }, dynamicLayout($el) { const matchMedia = window.matchMedia('(max-width: 768px)'); const isHorizontalViewPopupWidth = this.searchPopupWidth < 700 && !this.isDefaultSearchInput && !this.isFullWidthSearch; this.isHorizontalView = !matchMedia.matches ? isHorizontalViewPopupWidth : true; matchMedia.addEventListener('change', event => { this.isHorizontalView = !matchMedia.matches ? isHorizontalViewPopupWidth : true; }) if (!window._amXSearchConfigFetcher) { window._amXSearchConfigFetcher = new Promise(async resolve => { const cachedData = browserCache.get(CONFIG_QUERY_CACHE_KEY); if (cachedData) { return resolve(cachedData); } const query = `query {config: storeConfig { isProductReviewsBlockEnabled: amasty_xsearch_product_reviews isProductAddToCartBlockEnabled: amasty_xsearch_product_add_to_cart isRedirectToSingleProductEnabled: amasty_xsearch_product_redirect_single_product isFullScreenMode: amasty_xsearch_general_full_screen isGridView: amasty_xsearch_product_popup_display isShowSku: amasty_xsearch_product_show_sku shortDescriptionLength: amasty_xsearch_product_desc_length customMediaUrl: secure_base_media_url amasty_xsearch_products_title: amasty_xsearch_product_title amasty_xsearch_popularSearches_title: amasty_xsearch_popular_searches_title amasty_xsearch_browsingHistory_title: amasty_xsearch_browsing_history_title amasty_xsearch_recentSearches_title: amasty_xsearch_recent_searches_title amasty_xsearch_recentlyViewed_title: amasty_xsearch_recently_viewed_title amasty_xsearch_landingPage_title: amasty_xsearch_landing_page_title amasty_xsearch_bestsellers_position amasty_xsearch_faq_title amasty_xsearch_brand_title amasty_xsearch_blog_title amasty_xsearch_category_title amasty_xsearch_bestsellers_title amasty_xsearch_page_title amasty_xsearch_popularSearches_first_click: amasty_xsearch_popular_searches_first_click amasty_xsearch_browsingHistory_first_click: amasty_xsearch_browsing_history_first_click amasty_xsearch_recentSearches_first_click: amasty_xsearch_recent_searches_first_click amasty_xsearch_layout_enabled amasty_xsearch_layout_border amasty_xsearch_layout_hover amasty_xsearch_layout_highlight amasty_xsearch_layout_background amasty_xsearch_layout_text amasty_xsearch_layout_hover_text amasty_xsearch_layout_search_button amasty_xsearch_layout_search_button_text }}`; const response = await this.fetch(query, {}, CONFIG_QUERY_CACHE_KEY, false); if (response.errors && response.errors.length > 0) { console.error(response.errors); } browserCache.set(CONFIG_QUERY_CACHE_KEY, response); resolve(response); }); } _amXSearchConfigFetcher.then(response => { if (!response?.data?.config) { return; } this.config = response.data.config; this.processCustomLayoutStyles($el); }); if (typeof this.searchOpen !== "undefined") { this.$watch('searchOpen', val => { if (!val && this.isMobile('(max-width: 1023px)')) { document.body.classList.remove('amxsearch-open'); $el.classList.add('hidden'); return; } if (this.isMobile('(max-width: 1023px)')) { $el.classList.remove('hidden'); document.body.classList.add('amxsearch-open'); } else { if (val) { $el.classList.add('show-search-wrapper'); } } if (document.body.classList.contains('-ammenu-opened')) { const event = new Event('click'); document.querySelector('[data-ammenu-js="menu-toggle"]').dispatchEvent(event); } requestAnimationFrame(() => { const searchInput = document.querySelector('#search'); searchInput && searchInput.focus(); }); }); } if (typeof this.showOverlay !== "undefined") { this.$watch('showOverlay', val => { if (!val) { return; } this.applyHyvaUiHeaderConfig() }); } this.applyHeaderTypeToContainers(); }, isSidebarSectionsDisabled() { if (!this.isHorizontalView) { return !Object.entries(this.sections).some(([key, value]) => key !== 'products' && key !== 'bestsellers' && key !== 'recentlyViewed' && value.total_count > 0 ); } }, showSideBar() { const recentlyViewed = this.sections?.recentlyViewed; return this.latestQuery.length >= 3 || (recentlyViewed && recentlyViewed?.items?.length); }, showHandler(blockName) { if (this.isProductsShown) { if (blockName === 'products') { return true; } else { return false } } else { return this.latestQuery.length >= this.minSearchLength || this.showOnFirstClick(blockName); } }, showOnFirstClick(blockName) { const sectionsToCheck = [ 'popularSearches', 'browsingHistory', 'recentSearches' ]; if (!sectionsToCheck.includes(blockName)) { return false; } return this.latestQuery.length < this.minSearchLength && this.config[`amasty_xsearch_${blockName}_first_click`] && this.sections[blockName]?.items?.length; }, processCustomLayoutStyles() { const conf = key => this.config[`amasty_xsearch_layout_${key}`]; if (!conf("enabled")) { return ""; } const styles = [ "border", "hover", "highlight", "background", "text", "hover_text", 'search_button', 'search_button_text' ]; const cachedConf = styles.reduce((acc, key) => { acc[key] = conf(key); return acc; }, {}); const getDarken = (color, amount) => { const hex = parseInt(color.slice(1), 16); const r = Math.min(255, Math.max(0, ((hex >> 16) & 0xff) + amount)); const g = Math.min(255, Math.max(0, ((hex >> 8) & 0xff) + amount)); const b = Math.min(255, Math.max(0, (hex & 0xff) + amount)); return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, "0")}`; }; const prefix = "--amsearch-color-"; styles.forEach((key) => { const color = cachedConf[key]; document.body.style.setProperty(prefix + key, `#${color}`); document.body.style.setProperty(`${prefix + key}-focus`, getDarken(`#${color}`, -12)); document.body.style.setProperty(`${prefix + key}-hover`, getDarken(`#${color}`, -16)); }); }, canShowSection(sectionData) { return sectionData && sectionData.items && sectionData.items.length > 0; }, initialSectionLoad() { const req = this.fetch(`query xSearchQuery { recentlyViewed: xsearchRecentlyViewed { items { small_image { label url } id is_salable short_description { html } name options_container rating_summary reviews_count sku url_key url_suffix price_range { minimum_price { regular_price { value currency } final_price { value currency } } maximum_price { regular_price { value currency } final_price { value currency } } } } } popularSearches: xsearchPopularSearches { code items { name num_results url } total_count } recentSearches: xsearchRecentSearches { code items { name num_results url } total_count } browsingHistory: xsearchBrowsingHistory { code items { name url } total_count } }`, {}, INITIAL_QUERY_CACHE_KEY); req.then(response => { if (response.errors && response.errors.length > 0) { console.error(response.errors); } this.searchInitialized = true; this.processResponse(response); }); }, encodeHtml(html) { const txt = document.createElement('textarea'); txt.textContent = this.stripTags(html) || ''; return txt.innerHTML; }, stripTags: function (string) { if (this.regex.tags.test(string)) { return string.replace(this.regex.tags, ''); } return string; }, sanitize(value) { if (typeof DOMPurify === 'function') { return DOMPurify.sanitize(value) } else { return this.encodeHtml(value) } }, doSearch() { const { searchInput } = this.$refs; const { latestQuery, minSearchLength } = this; const inputText = this.sanitize(searchInput.value); if (inputText !== latestQuery && cache[PREV_QUERY_CACHE_KEY]) { delete cache[PREV_QUERY_CACHE_KEY]; } this.latestQuery = this.sanitize(searchInput.value); if (inputText.length < minSearchLength) { this.showOverlay = true; this.initialSectionLoad(); return; } this.noResultsFound = null; this.errorMessage = null; const query = `query xSearchQuery($inputText: String!) { products: xsearchProducts(search: $inputText) { code items { __typename small_image { label url } id is_salable short_description { html } name rating_summary reviews_count sku url_key url_suffix price_range { minimum_price { regular_price { value currency } final_price { value currency } } maximum_price { regular_price { value currency } final_price { value currency } } } type hyva_compatible custom_stock_status opposite_product is_salable_service show_in_ajax_search opposite_product_data { name type is_salable url_key url_suffix price_range { minimum_price { regular_price { value currency } final_price { value currency } } maximum_price { final_price { value currency } } } } product_label { label_id name status priority is_single use_for_parent frontend_settings { label_text type image image_size position style alt_tag redirect_url } tooltip { status color background_color content } } } total_count } browsingHistory: xsearchBrowsingHistory { code items { name url } total_count } recentSearches: xsearchRecentSearches { code items { name num_results url } total_count } popularSearches: xsearchPopularSearches { code items { name num_results url } total_count } terms: xsearchRelatedTerms(search: $inputText) { items { count name } } } `; const req = this.fetch(query, { inputText }, PREV_QUERY_CACHE_KEY); req.then(response => { if (response.errors && response.errors.length > 0) { this.errorMessage = response.errors[0].message; console.error(this.errorMessage); } this.searchInitialized = true; this.processResponse(response); }); }, fetch(query, variables = {}, cacheKey = null, useLoading = true) { if (cacheKey && cache[cacheKey]) { return Promise.resolve(cache[cacheKey]); } if (useLoading) { this.isLoading = true; } const req = fetch(`${BASE_URL}graphql`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query, variables}), }); req.catch(reason => console.error(reason)); return req.then(response => { if (!response.ok) { throw new Error(`HTTP error: ${response.status}`); } const body = response.json(); if (cacheKey) { cache[cacheKey] = body; } return body; }); }, checkSearchInput() { if (this.$refs.searchInput.value === '') { this.clear(); } }, redirect() { this.isLoading = true; const { searchInput } = this.$refs; const inputText = this.sanitize(searchInput.value); const products = this.sections.products; if (products && products.items.length === 1 && this.config.isRedirectToSingleProductEnabled) { location.href = this.getProductUrl(products.items[0]); return; } const url = 'https://amasty.com/catalogsearch/result/?q='; location.href = url + inputText; }, focusElement(element) { if (element && element.nodeName === "DIV") { element.focus(); return true; } return false; }, processResponse(response) { this.updateSections(response.data); }, clear() { const initialQueryCache = cache[INITIAL_QUERY_CACHE_KEY]; if (!initialQueryCache) { return; } initialQueryCache.then(result => { this.updateSections(result.data ?? {}); }); }, closeSearch() { if (this.searchOpen) { this.searchOpen = false; this.$root.classList.remove('show-search-wrapper'); } this.$nextTick(() => { this.showOverlay = false; this.searchInitialized = false; }) if (this.checkHyvaUiHeaderVariant('c')) { this.$refs.searchContainerDesktop.classList.remove(HEADER_TYPE + '-header-type'); } }, processItemsWithRating(value) { if (value.items) { value.items = value.items.map(this.getRating.bind(this)); } return value; }, processSection(key, value) { if (!value) { return value; } let processedValue; switch (key) { case 'recentlyViewed': case 'bestsellers': processedValue = this.processItemsWithRating(value); if (processedValue.items) { processedValue.items = (processedValue.items || []).map(item => { item.isSliderItem = true; return item; }); } break; case 'products': processedValue = this.processItemsWithRating(value); processedValue = this.processProductName(processedValue); break; default: processedValue = value; } processedValue.title = this.config[`amasty_xsearch_${key}_title`]; return processedValue; }, updateSections(rows) { this.isProductsShown = false; if (!this.showOverlay) { this.showOverlay = true; } this.isLoading = false; this.noResultsFound = !rows.products?.total_count && this.latestQuery.length >= this.minSearchLength; if (!this.noResultsFound) { this.errorMessage = null; } if (rows.products?.total_count) { this.isProductsShown = true; } for (const key in dataSections) { const data = rows[key]; this.sections[key] = data?.items?.length > 0 ? this.processSection(key, data) : {items: [], total_count: 0}; } if (this.latestQuery.length >= this.minSearchLength) { return; } for (const key in this.slider) { const items = rows[key]?.items; if (rows.hasOwnProperty(key) && items?.length && !this.slider[key]) { this.slider[key] = this.amXsearchCarouselComponent(key, items.length); } } }, ...AmsiteUtils() } } })();</script><script> 'use strict'; /** * Carousel component for xsearch * * @param key * @param itemCount * @returns Object */ function amXsearchCarouselComponent(key, itemCount) { return { itemCount, pageSize: 4, active: 0, slider: null, pageFillers: 0, sliderEl: false, smallWindowItemWidth: false, init($refs) { const sliderEl = $refs[`${key}Container`]; if (!sliderEl || itemCount === 0) { return this; } if (sliderEl) { if (!this.isDefaultSearchInput && !this.isFullWidthSearch) { if (this.searchPopupWidth <= 900) { this.smallWindowItemWidth = sliderEl.clientWidth / 3; } if (this.searchPopupWidth <= 700) { this.smallWindowItemWidth = sliderEl.clientWidth / 2; } if (this.searchPopupWidth <= 500) { this.smallWindowItemWidth = sliderEl.clientWidth - 30; } } } this.sliderEl = sliderEl; this.recalculate(); }, getSlider() { return this.sliderEl.querySelector('.carousel-slides'); }, calcPageSize() { const slider = this.getSlider(); if (!slider) { return this; } const slides = slider.querySelectorAll('.carousel-slide'); if (this.smallWindowItemWidth) { slides.forEach(slide => { slide.style.width = `${this.smallWindowItemWidth}px`; }); } const firstSlide = slides[0]; this.itemCount = slides.length; this.pageSize = Math.round(slider.clientWidth / firstSlide.clientWidth); this.pageFillers = this.pageSize * Math.ceil(this.itemCount / this.pageSize) - this.itemCount; }, calcActive() { const slider = this.getSlider(); if (!slider) { return this; } const sliderItems = Math.round(this.itemCount) + Math.round(this.pageFillers); const calculatedActiveSlide = Math.round( Math.round(slider.scrollLeft) / (Math.round(slider.scrollWidth) / sliderItems) ); this.active = Math.round(calculatedActiveSlide / Math.round(this.pageSize)) * Math.round(this.pageSize); }, prev() { this.scrollTo(this.active - this.pageSize); }, next() { this.scrollTo(this.active + this.pageSize); }, scrollTo(index) { const slider = this.getSlider(); if (!slider) { return this; } const slideWidth = slider.scrollWidth / (this.itemCount + this.pageFillers); slider.scrollLeft = Math.floor(slideWidth) * index; this.calcActive(); }, isActive(index) { return index === this.active; }, recalculate() { this.calcPageSize(); setTimeout(() => this.calcActive(), 100); }, onResize() { this.calcPageSize(); setTimeout(() => this.calcActive(), 100); } }; }</script><script> 'use strict'; function amXsearchAutocompleteHyvaUIHeaderCompat() { const HEADER_TYPE = 'b'; return { applyHyvaUiHeaderConfig() { const searchContent = document.getElementById('search-content'); if (this.isFullWidthSearch) { if (!this.isHorizontalView) { if (this.checkHyvaUiHeaderVariant('b')) { searchContent.style = 'max-width:none'; searchContent.parentNode.style = 'padding-right:0; padding-left:0;'; } if (this.checkHyvaUiHeaderVariant('c')) { this.$refs.searchContainerDesktop.classList.add(HEADER_TYPE + '-header-type'); this.$refs.searchForm.style = 'padding-right:0; padding-left:0;'; } } if (this.checkHyvaUiHeaderVariant('a')) { searchContent.style = 'max-width: none'; } } }, applyHeaderTypeToContainers() { const searchHeader = document.getElementById('header'); const columnMain = document.querySelector('.column.main'); const searchContent = document.getElementById('search-content'); const headerTypeClass = HEADER_TYPE + '-header-type'; if (searchHeader || columnMain) { searchHeader.classList.add(headerTypeClass); columnMain.classList.add(headerTypeClass); } if (this.checkHyvaUiHeaderVariant('a')) { searchContent.className = 'container'; } } } }</script><script> 'use strict'; function initAmlabel_67bef4ab25d93() { 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_67bef4ab25f87() { return { element: null, elementStyle: null, parent: null, parentWidth: null, initialized: false, wrapperClass: '', wrapperStyle: null, labelContainer: null, labelWidth: null, amLabelStyle: null, /** * @param $el */ initLabel($el) { this.element = $el; this.labelContainer = this.$refs.amLabel; this.labelWidth = Number(this.$refs.amLabelElement.dataset.size); this.parent = this.$refs.amLabelParent; this.parentWidth = this.$refs.amLabelImgParent.width; this.wrapperClass = `[data-wrapper-class=${this.$refs.amLabelElement.dataset.wrapperClass}]`; this.wrapperStyle = this.$refs.amLabelWrapper.classList; switch ($el.dataset.position) { case '0': this.elementStyle = ' top-0 left-0'; this.amLabelStyle = ' items-start' break; case '1': this.elementStyle = ' top-0 mx-auto'; this.amLabelStyle = ' items-start' break; case '2': this.elementStyle = ' top-0 right-0'; this.amLabelStyle = ' items-end' break; case '3': this.elementStyle = ' top-1/2 -translate-y-1/2 left-0'; this.amLabelStyle = ' items-start' break; case '4': this.elementStyle = ' top-1/2 -translate-y-1/2 mx-auto'; this.amLabelStyle = ' items-start' break; case '5': this.elementStyle = ' top-1/2 -translate-y-1/2 right-0'; this.amLabelStyle = ' items-end' break; case '6': this.elementStyle = ' bottom-0 left-0'; this.amLabelStyle = ' items-start' break; case '7': this.elementStyle = ' bottom-0 mx-auto'; this.amLabelStyle = ' items-start' break; case '8': this.elementStyle = ' bottom-0 right-0'; this.amLabelStyle = ' items-end' break; } this.$refs.amLabelWrapper.classList = this.wrapperStyle + this.elementStyle; if ('0' === '0') { this.$refs.amLabelWrapper.classList = this.$refs.amLabelWrapper.classList + this.amLabelStyle; } }, /** * @return {void} */ render() { if (this.element.dataset.amlabelObserved) { return; } this.element.dataset.amlabelObserved = true; this.parentContainerProcessor.process(this); this.labelItemProcessor.process(this); this.initialized = true; }, /** * @param url * @returns {string} */ getImgLabelPath(url) { const baseUrl = BASE_URL.replace('index.php/', ''); return `${baseUrl}media/amasty/amlabel/${url}`; }, /** * @param url */ labelRedirect(url) { return window.location.assign(`${BASE_URL + url}`); }, /** * @returns {string|string} */ getImageSize() { return this.labelWidth ? this.parentWidth * this.labelWidth / 100 + 'px': ''; } } }</script><script> function initCartDrawer() { return { isGlobalOpen: false, open: false, isLoading: false, cart: {}, maxItemsToDisplay: 10, itemsCount: 0, isHoverOnCartWrapper: false, totalCartAmount: 0, removedBlock: [], mainBlock: [], getData(data) { if (data.cart) { this.cart = data.cart; this.itemsCount = data.cart.items && data.cart.items.length || 0; this.totalCartAmount = this.cart.summary_count; this.setCartItems(); } }, cartItems: [], setCartItems() { this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; if (this.maxItemsToDisplay > 0) { this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); } this.removeActions(); }, deleteItemFromCart(item, target) { const formKey = hyva.getFormKey(); const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; this.isLoading = true; this.animationRemoveItem(item.item_id, target); fetch(postUrl, { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, "body": "form_key=" + formKey + "&item_id=" + item.item_id, "method": "POST", "mode": "cors", "credentials": "include" }).then(response => { if (response.redirected) { window.location.href = response.url; } else if (response.ok) { return response.json(); } else { window.dispatchMessages && window.dispatchMessages([{ type: 'warning', text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' }]); this.isLoading = false; } }).then(result => { if (!result.success) { window.dispatchMessages && window.dispatchMessages([{ type: 'error', text: result.error_message }], 5000) this.isLoading = false; } window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }); }, toggleCartDrawer(event) { if (this.isMobile('(max-width: 1023px)')) { return; } if (event.detail && event.detail.isOpen !== undefined) { if (event.detail.isOpen) { this.isOpen = true; this.openCartDrawer() this.isGlobalOpen = !event.detail.showAfterAdd; } else { this.open = false; this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent) } } else { this.openCartDrawer() } }, openCartDrawer() { this.open = true; this.$nextTick(() => { this.$refs && this.$refs.cartDialogContent }) setTimeout(() => { this.$refs.cartDialogContent.focus() }, 500); if (this.closeTimeout) { clearTimeout(this.closeTimeout); } this.closeTimeout = setTimeout(() => { if (!this.isGlobalOpen) { this.closeCartDrawer(); } }, 5000); }, closeCartDrawer() { this.$dispatch('toggle-cart', { isOpen: false }); }, closeCartWithDelay() { this.isGlobalOpen = false; setTimeout(() => { if (this.isGlobalOpen) { return; } this.closeCartDrawer(); }, 500); }, getAdditionalOptions(item) { var period = item.product_subscription_period, typeUser = item.subscription_type.toLowerCase(), typeVersion = item.product_subscription_version; period = period === 'year' ? 'annual' : period; if (window.dataForSubscriptions[typeUser]) { return '<p class="list-item">&mdash; ' + window.dataForSubscriptions[typeUser][period][typeVersion] .join('</p><p class="list-item">&mdash; ') + '</p>'; } return ''; }, animationRemoveItem(itemId, target) { const itemBlock = target.closest(`[data-amsite-js="${itemId}"]`); const removeBlock = document.querySelector('[data-amsite-js="removeBlock"]'); const mainBlock = itemBlock.querySelector('[data-amsite-js="item-main-block"]'); const clonedRemoveBlock = removeBlock.cloneNode(true); mainBlock.classList.add('hidden'); itemBlock.appendChild(clonedRemoveBlock); clonedRemoveBlock.classList.remove('hidden'); this.removedBlock.push(clonedRemoveBlock); this.mainBlock.push(mainBlock); }, removeActions() { if (this.removedBlock.length) { this.removedBlock.forEach((block) => { block.remove(); }); this.mainBlock.forEach((block) => { block.classList.remove('hidden'); }); this.isLoading = false; if (document.body.classList.contains('checkout-cart-index')) { window.location.reload(); } } }, showRemoveMessage(item, target) { window.dispatchEvent( new CustomEvent('minicart-popup-show-notification', {detail: {item, target}}) ) }, ...AmsiteUtils() } }</script><script> const AmMiniCartPopupNotification = function () { const TEXTS = { transferred: 'This\u0020product\u0020is\u0020transferred.\u0020If\u0020you\u0020delete\u0020it,\u0020you\u0020will\u0020no\u0020longer\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020be\u0020able\u0020to\u0020buy\u0020it\u0020with\u0020a\u0020100\u0025\u0020discount\u0020for\u0020the\u0020initial\u0020order.\u0020Would\u0020you\u0020still\u0020like\u0020to\u0020proceed\u003F', free: 'Are\u0020you\u0020sure\u0020you\u0020want\u0020to\u0020remove\u0020the\u0020free\u0020gift\u0020from\u0020the\u0020cart\u003F\u0020Once\u0020deleted\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020you\u0020won\u2019t\u0020be\u0020able\u0020to\u0020add\u0020it\u0020again.', }; return { item: {}, target: null, showNotification(data) { this.item = data.detail.item; this.target = data.detail.$el; this.createContentForPopup(this.item ); this.show('minicart-popup-notification'); }, createContentForPopup(item) { const itemType = item.is_transfered ? 'transferred' : 'free'; this.$refs.minicartNotificationContent.textContent = TEXTS[itemType]; } } }</script><script type="text/x-magento-init"> { ".breadcrumbs": { "breadcrumbs": {"categoryUrlSuffix":".html","useCategoryPathInUrl":1,"product":"Special Promotions Pro for Magento 2","breadcrumbs":[{"label":"Promotions","link":"https:\/\/amasty.com\/promotions-extensions-for-magento-2.html"},{"label":"Magento 2 Extensions","link":"https:\/\/amasty.com\/magento-2-extensions.html"}]} } }</script><script type="text/x-magento-init"> { "*": { "Magento_Ui/js/core/app": { "components": { "messages": { "component": "Magento_Theme/js/view/messages", "floatingMessages": "true" } } } } }</script><script type="text/x-magento-init"> { "[data-gallery-role=gallery-placeholder]": { "amsiteGalleryInit": { "mixins":["magnifier/magnify"], "magnifierOpts": {"fullscreenzoom":"20","top":"","left":"","width":"","height":"","eventType":"hover","enabled":false}, "data": [{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9ad1e.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9ad1e.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9ad1e.png","caption":"Special Promotions Pro for Magento 2","position":"2","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/s\/p\/special-promotions-pro-for-magento-2_661f84ad3f2b7.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/s\/p\/special-promotions-pro-for-magento-2_661f84ad3f2b7.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/s\/p\/special-promotions-pro-for-magento-2_661f84ad3f2b7.png","caption":"Special Promotions Pro for Magento 2","position":"3","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/s\/p\/special-promotions-pro-for-magento-2_661f84ad3f854.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/s\/p\/special-promotions-pro-for-magento-2_661f84ad3f854.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/s\/p\/special-promotions-pro-for-magento-2_661f84ad3f854.png","caption":"Special Promotions Pro for Magento 2","position":"4","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/s\/p\/special-promotions-pro-for-magento-2_661f84ad3f8b8.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/s\/p\/special-promotions-pro-for-magento-2_661f84ad3f8b8.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/s\/p\/special-promotions-pro-for-magento-2_661f84ad3f8b8.png","caption":"Special Promotions Pro for Magento 2","position":"5","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9b40e.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9b40e.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9b40e.png","caption":"Special Promotions Pro for Magento 2","position":"6","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/s\/p\/special-promotions-pro-for-magento-2_65784ba5a3950.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/s\/p\/special-promotions-pro-for-magento-2_65784ba5a3950.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/s\/p\/special-promotions-pro-for-magento-2_65784ba5a3950.png","caption":"Special Promotions Pro for Magento 2","position":"7","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/s\/p\/special-promotions-pro-for-magento-2_67a4c367b3f0b.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/s\/p\/special-promotions-pro-for-magento-2_67a4c367b3f0b.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/s\/p\/special-promotions-pro-for-magento-2_67a4c367b3f0b.png","caption":"Special Promotions Pro for Magento 2","position":"8","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/s\/p\/special-promotions-pro-for-magento-2_67a4c367b4397.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/s\/p\/special-promotions-pro-for-magento-2_67a4c367b4397.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/s\/p\/special-promotions-pro-for-magento-2_67a4c367b4397.png","caption":"Special Promotions Pro for Magento 2","position":"9","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9b4f4.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9b4f4.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9b4f4.png","caption":"Special Promotions Pro for Magento 2","position":"11","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9b542.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9b542.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9b542.png","caption":"Special Promotions Pro for Magento 2","position":"12","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9b590.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9b590.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/s\/p\/special-promotions-pro-for-magento-2_63ce747a9b590.png","caption":"Special Promotions Pro for Magento 2","position":"13","isMain":false,"type":"image","videoUrl":null}], "options": {"nav":"thumbs","loop":true,"keyboard":true,"arrows":true,"allowfullscreen":true,"showCaption":false,"width":960,"thumbwidth":180,"thumbheight":132,"height":704,"transitionduration":600,"transition":"crossfade","navarrows":true,"navtype":"slides","navdir":"horizontal","thumbmargin":2}, "fullscreen": {"nav":"thumbs","loop":true,"navdir":"horizontal","navarrows":true,"navtype":"slides","arrows":true,"showCaption":false,"transitionduration":600,"transition":"crossfade"}, "breakpoints": {"mobile":{"conditions":{"max-width":"1023px"},"options":{"options":{"nav":false}}}} ,"amGalleryConfig": { "position": "bottom" } } } }</script><script type="text/x-magento-init"> { "[data-gallery-role=gallery-placeholder]": { "Magento_ProductVideo/js/fotorama-add-video-events": { "videoData": [{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false}], "videoSettings": [{"playIfBase":"0","showRelated":"0","videoAutoRestart":"0"}], "optionsVideoData": {"651":[],"652":[],"2816":[]} } } }</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-options]": { "Magento_Swatches/js/swatch-renderer": { "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["651"]},{"id":"5","label":"Enterprise","products":["652"]},{"id":"81","label":"Magento Cloud","products":["2816"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"651":{"baseOldPrice":{"amount":319},"oldPrice":{"amount":319},"basePrice":{"amount":319},"finalPrice":{"amount":319},"tierPrices":[],"msrpPrice":{"amount":0}},"652":{"baseOldPrice":{"amount":619},"oldPrice":{"amount":619},"basePrice":{"amount":619},"finalPrice":{"amount":619},"tierPrices":[],"msrpPrice":{"amount":0}},"2816":{"baseOldPrice":{"amount":919},"oldPrice":{"amount":919},"basePrice":{"amount":919},"finalPrice":{"amount":919},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":319},"oldPrice":{"amount":319},"basePrice":{"amount":319},"finalPrice":{"amount":319}},"productId":"649","chooseText":"Choose an Option...","images":[],"index":{"651":{"135":"4"},"652":{"135":"5"},"2816":{"135":"81"}},"salable":{"135":{"4":["651"],"5":["652"],"81":["2816"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"651":"special-promotions-pro-for-magento-2-ce","652":"special-promotions-pro-for-magento-2-ee","2816":"special-promotions-pro-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"649"}, "jsonSwatchConfig": {"135":{"4":{"type":"0","value":"Community","label":"Community"},"5":{"type":"0","value":"Enterprise","label":"Enterprise"},"81":{"type":"0","value":"Magento Cloud","label":"Magento Cloud"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":1,\"use_product_image_for_swatch\":0}"}}, "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "gallerySwitchStrategy": "prepend", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}}, "showTooltip": 1 } }, "*" : { "Magento_Swatches/js/catalog-add-to-cart": {} } }</script><script type="text/x-magento-init"> { "*": { "Amasty_Stockstatus/js/amstockstatus": {"changeConfigurableStatus":1,"type":"product.info.options.swatches","info_block":"","display_in_dropdowns":1,"should_load_stock":true,"4":{"custom_status":"","custom_status_text":"","product_id":"651","is_in_stock":1,"pricealert":""},"5":{"custom_status":"","custom_status_text":"","product_id":"652","is_in_stock":1,"pricealert":""},"81":{"custom_status":"","custom_status_text":"","product_id":"2816","is_in_stock":1,"pricealert":""}} } }</script><script> require([ 'jquery', ], function($){ //<![CDATA[ $.extend(true, $, { calendarConfig: { dayNames: ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], dayNamesMin: ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], monthNames: ["January","February","March","April","May","June","July","August","September","October","November","December"], monthNamesShort: ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"], infoTitle: 'About\u0020the\u0020calendar', firstDay: 1, closeText: 'Close', currentText: 'Go\u0020Today', prevText: 'Previous', nextText: 'Next', weekHeader: 'WK', timeText: 'Time', hourText: 'Hour', minuteText: 'Minute', dateFormat: "D, d M yy", // $.datepicker.RFC_2822 showOn: 'button', showAnim: '', changeMonth: true, changeYear: true, buttonImageOnly: null, buttonImage: null, showButtonPanel: true, showWeek: true, timeFormat: '', showTime: false, showHour: false, showMinute: false } }); enUS = {"m":{"wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}}; // en_US locale reference //]]> });</script><script type="text/x-magento-init"> { "#instant-purchase": { "Magento_Ui/js/core/app": {"components":{"instant-purchase":{"component":"Magento_InstantPurchase\/js\/view\/instant-purchase","config":{"template":"Magento_InstantPurchase\/instant-purchase","buttonText":"Instant Purchase","purchaseUrl":"https:\/\/amasty.com\/instantpurchase\/button\/placeOrder\/"}}}} } }</script><script type="text/x-magento-init"> { "body": { "addToWishlist": {"productType":"configurable"} } }</script><script> window.swatchesOptionsConfig = {"Year":{"ce":{"recurringPrice":["$195"],"finalPrice":["$319"],"periodSupportText":["12 months"],"isNewPricingPolicy":false},"ee":{"recurringPrice":["$375"],"finalPrice":["$619"],"periodSupportText":["12 months"],"isNewPricingPolicy":false},"mce":{"recurringPrice":["$555"],"finalPrice":["$919"],"periodSupportText":["12 months"],"isNewPricingPolicy":false}}};</script><script> require([ 'jquery', 'priceBox' ], function($){ var dataPriceBoxSelector = '[data-role="priceBox"]', dataProductIdSelector = '[data-product-id="649"]', priceBoxes = $(dataPriceBoxSelector + dataProductIdSelector), productPopupSelector = '.amtheme-product-popup'; if (priceBoxes.closest(productPopupSelector).length) { priceBoxes = $(productPopupSelector + ' ' + dataPriceBoxSelector + dataProductIdSelector); } priceBoxes = priceBoxes.filter(function(index, elem){ return !$(elem).find('.price-from').length; }); priceBoxes.priceBox({'priceConfig': {"productId":649,"priceFormat":{"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":319,"adjustments":[]},"oldPrice":{"amount":319,"adjustments":[]},"basePrice":{"amount":319,"adjustments":[]},"finalPrice":{"amount":319,"adjustments":[]}},"idSuffix":"_clone","tierPrices":[],"calculationAlgorithm":"TOTAL_BASE_CALCULATION","baseOldPrice":{"amount":319,"adjustments":[]}}}); });</script><script type="text/javascript"> require(['jquery', 'Amasty_Preorder/js/product/preorder_configurable'], function($) { $widget = $.mage.amastyPreorderConfigurable({ availabilityElement: '.product-preorder-message', isAllProductsPreorder: 0, preOrderNote: 'You pay for the pre-order at a discounted price and receive the extension\'s package once it’s released', addToCartLabel: 'PRE-ORDER', map: [], currentAttributes: {"135":"Edition"}, originalNote: 'In stock' }); });</script><script type="text/x-magento-init"> { "#amrelated-pack-59-67bef4ab3fd45": { "Amasty_Mostviewed/js/ampack":{"product_id":649,"discount_amount":10,"parent_info":{"price":319,"qty":1},"discount_type":2,"apply_for_parent":true,"apply_only_for_all":false,"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"products":{"508":{"price":239,"qty":1,"discount_amount":null},"538":{"price":209,"qty":1,"discount_amount":null}},"conditional_discounts":{"2":10,"3":15},"priceFormatFull":{"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true},"isCollapsibleOnMobile":false} } }</script><script type="text/x-magento-init"> { "[data-amrelated-js='add-to-cart']": { "Amasty_Mostviewed/js/ampackcart":{"url":"https:\/\/amasty.com\/ammostviewed\/cart\/add\/","isAjaxCartEnabled":0} } }</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\/649\/","handles":["default","catalog_product_view","catalog_product_view_type_configurable","catalog_product_view_id_649","catalog_product_view_sku_special-promotions-pro-for-magento-2","hyva_default","hyva_catalog_product_view","hyva_catalog_product_view_type_configurable","hyva_catalog_product_view_id_649","hyva_catalog_product_view_sku_special-promotions-pro-for-magento-2","hyva_amcookiebar_popup","am_mega_menu_layout","catalog_product_view_custom_stock_status_in_stock"],"originalRequest":{"route":"catalog","controller":"product","action":"view","uri":"\/special-promotions-pro-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":"649"}; const formData = 'form_id=' + formId + '&product_id=' + params.productId; const form = document.getElementById('amform-form-' + formId + ''); const parseXData = function (node) { try { const xDataString = (node.getAttribute('x-data') ?? '{}') .replace(/[\n ]+/g, '') .replace(/(\w+):/g, '"$1":') .replace(/'/g, '"'); return JSON.parse(xDataString); } catch (e) { console.log(e); return null; } }; const updateWrapperXData = function (inputNode, inputData) { try { const inputWrapper = inputNode.closest('.fieldset-block'); const xDataObject = parseXData(inputWrapper); if (typeof xDataObject.value !== 'undefined' && xDataObject.value !== inputData) { xDataObject.value = inputData; inputWrapper.setAttribute('x-data', JSON.stringify(xDataObject)); } } catch (e) { console.error(e); } }; const getValueAsArray = function(inputData) { return ( typeof inputData === 'string' ? [inputData] : Array.isArray(inputData) ? inputData : [] ); } const checkNodesByValues = function(nodes, values, attributeName) { values.forEach(function (value) { const nodeToSetAttribute = nodes.find(node => node.getAttribute('value') === value); nodeToSetAttribute && (nodeToSetAttribute[attributeName] = true); }); } const textInputFiller = { supportedInputTypes: [ 'text', 'email', 'number', 'date', 'time' ], supportedTagNames: [ 'textarea' ], support: function (inputNode) { return this.supportedInputTypes.includes(inputNode.getAttribute('type')) || this.supportedTagNames.includes(inputNode.tagName.toLowerCase()); }, fill: function (inputNode, inputData) { if (typeof inputData !== 'string') { return; } inputNode.value = inputData; updateWrapperXData(inputNode, inputData); } }; const selectInputFiller = { supportedTagNames: [ 'select' ], support: function (inputNode) { return this.supportedTagNames.includes(inputNode.tagName.toLowerCase()); }, fill: function (inputNode, inputData) { const optionValues = getValueAsArray(inputData); if (optionValues.length === 0) { return; } this.clearSelectedAttribute(inputNode); checkNodesByValues(Array.from(inputNode.options), optionValues, 'selected'); updateWrapperXData(inputNode, optionValues); }, clearSelectedAttribute: function (inputNode) { Array.from(inputNode.options).forEach((option) => { option.selected = false; option.removeAttribute('selected'); }); } }; const checkableInputFiller = { supportedInputTypes: [ 'checkbox', 'radio' ], support: function (inputNode) { return this.supportedInputTypes.includes(inputNode.getAttribute('type')); }, fill: function (inputNode, inputData) { const inputName = inputNode.getAttribute('name'); const checkboxList = document.querySelectorAll(`input[name="${inputName}"]`); const checkboxValues = getValueAsArray(inputData); if (checkboxValues.length === 0) { return; } this.uncheck(checkboxList); checkNodesByValues(Array.from(checkboxList), checkboxValues, 'checked'); this.fillRating(inputNode, inputData); }, fillRating(inputNode, inputData) { if (!this.isRating(inputNode) || typeof inputData !== 'string') { return; } const xDataContainer = inputNode.closest('[x-data]'); if (!xDataContainer?.getAttribute('x-data').includes('clickedRatingId')) { return; } const xData = parseXData(xDataContainer); if (!xData) { return; } xData.clickedRatingId = inputData; xDataContainer.setAttribute('x-data', JSON.stringify(xData)); xDataContainer.querySelector('input:checked')?.click(); }, isRating: function(inputNode) { return inputNode.name.startsWith('rating-'); }, uncheck: function (checkboxList) { checkboxList.forEach(function (checkbox) { checkbox.checked = false; }); } }; const inputFillerPool = { excludedInputNames: [ 'form_id', 'form_key', 'is_survey' ], inputFillers: [ textInputFiller, selectInputFiller, checkableInputFiller ], fill: function (inputNode, inputData) { if (this.shouldExclude(inputNode)) { return; } for (const fillerIndex in this.inputFillers) { if (this.inputFillers[fillerIndex].support(inputNode)) { this.inputFillers[fillerIndex].fill(inputNode, inputData); inputNode.closest('.fieldset-block').dispatchEvent(new Event('change')); break; } } }, shouldExclude: function (inputNode) { return this.excludedInputNames.includes(inputNode.getAttribute('name')) || inputNode.getAttribute('type') === 'hidden'; } }; function requestData(url, body) { return new Promise((resolve, reject) => { fetch(url, { method: 'POST', body: body, headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'X-Requested-With': 'XMLHttpRequest' } }).then(response => response.json()) .then(data => { resolve(data); }) .catch((error) => { reject(error); }); }); } requestData(params.urlSession, formData).then(data => { const formFields = data.form_fields ?? {}; const persistedInputNames = Object.keys(formFields); persistedInputNames.forEach(inputName => { const inputNode = form.querySelector(`[name^="${inputName}"]`); !!inputNode && inputFillerPool.fill(inputNode, formFields[inputName]); }); }) })(188);</script><script type="text/x-magento-init"> { "body": { "requireCookie": {"noCookieUrl":"https:\/\/amasty.com\/cookie\/index\/noCookies\/","triggers":[".action.towishlist"],"isRedirectCmsPage":true} } }</script><script type="text/x-magento-init"> { "*": { "Magento_Catalog/js/product/view/provider": { "data": {"items":{"649":{"add_to_cart_button":{"post_data":"{\"action\":\"https:\\\/\\\/amasty.com\\\/checkout\\\/cart\\\/add\\\/uenc\\\/%25uenc%25\\\/product\\\/649\\\/\",\"data\":{\"product\":\"649\",\"uenc\":\"%uenc%\"}}","url":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/%25uenc%25\/product\/649\/","required_options":true},"add_to_compare_button":{"post_data":null,"url":"{\"action\":\"https:\\\/\\\/amasty.com\\\/catalog\\\/product_compare\\\/add\\\/\",\"data\":{\"product\":\"649\",\"uenc\":\"aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s\"}}","required_options":null},"price_info":{"final_price":319,"max_price":319,"max_regular_price":319,"minimal_regular_price":319,"special_price":null,"minimal_price":319,"regular_price":319,"formatted_prices":{"final_price":"<span class=\"price\">$319.00<\/span>","max_price":"<span class=\"price\">$319.00<\/span>","minimal_price":"<span class=\"price\">$319.00<\/span>","max_regular_price":"<span class=\"price\">$319.00<\/span>","minimal_regular_price":null,"special_price":null,"regular_price":"<span class=\"price\">$319.00<\/span>"},"extension_attributes":{"msrp":{"msrp_price":"<span class=\"price\">$0.00<\/span>","is_applicable":"","is_shown_price_on_gesture":"","msrp_message":"","explanation_message":"Our price is lower than the manufacturer&#039;s &quot;minimum advertised price.&quot; As a result, we cannot show you the price in catalog or the product page. <br><br> You have no obligation to purchase the product once you know the price. You can simply remove the item from your cart."},"tax_adjustments":{"final_price":319,"max_price":319,"max_regular_price":319,"minimal_regular_price":319,"special_price":319,"minimal_price":319,"regular_price":319,"formatted_prices":{"final_price":"<span class=\"price\">$319.00<\/span>","max_price":"<span class=\"price\">$319.00<\/span>","minimal_price":"<span class=\"price\">$319.00<\/span>","max_regular_price":"<span class=\"price\">$319.00<\/span>","minimal_regular_price":null,"special_price":"<span class=\"price\">$319.00<\/span>","regular_price":"<span class=\"price\">$319.00<\/span>"}},"weee_attributes":[],"weee_adjustment":"<span class=\"price\">$319.00<\/span>"}},"images":[{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/bb8e97a9ddc3d82fc043ed846d9f3d1c\/s\/p\/special-promotions-pro-for-magento-2_64d0cf2c44caf.png","code":"recently_viewed_products_grid_content_widget","height":485,"width":485,"label":"Special Promotions Pro for Magento 2","resized_width":485,"resized_height":485},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/bb8e97a9ddc3d82fc043ed846d9f3d1c\/s\/p\/special-promotions-pro-for-magento-2_64d0cf2c44caf.png","code":"recently_viewed_products_list_content_widget","height":485,"width":485,"label":"Special Promotions Pro for Magento 2","resized_width":485,"resized_height":485},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/c0f736f50f461282ed263518cf9066d1\/s\/p\/special-promotions-pro-for-magento-2_64d0cf2c44caf.png","code":"recently_viewed_products_images_names_widget","height":80,"width":80,"label":"Special Promotions Pro for Magento 2","resized_width":80,"resized_height":80},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/bb8e97a9ddc3d82fc043ed846d9f3d1c\/s\/p\/special-promotions-pro-for-magento-2_64d0cf2c44caf.png","code":"recently_compared_products_grid_content_widget","height":485,"width":485,"label":"Special Promotions Pro for Magento 2","resized_width":485,"resized_height":485},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/bb8e97a9ddc3d82fc043ed846d9f3d1c\/s\/p\/special-promotions-pro-for-magento-2_64d0cf2c44caf.png","code":"recently_compared_products_list_content_widget","height":485,"width":485,"label":"Special Promotions Pro for Magento 2","resized_width":485,"resized_height":485},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/c0f736f50f461282ed263518cf9066d1\/s\/p\/special-promotions-pro-for-magento-2_64d0cf2c44caf.png","code":"recently_compared_products_images_names_widget","height":80,"width":80,"label":"Special Promotions Pro for Magento 2","resized_width":80,"resized_height":80}],"url":"https:\/\/amasty.com\/special-promotions-pro-for-magento-2.html","id":649,"name":"Special Promotions Pro for Magento 2","type":"configurable","is_salable":"1","store_id":1,"currency_code":"USD","extension_attributes":{"review_html":" <div class=\"product-reviews-summary short flex gap-2\"><p class=\"mb-0 am-text-small font-bold\">4.9<\/p><a href=\"https:\/\/amasty.com\/special-promotions-pro-for-magento-2.html#reviews\" class=\"flex max-w-[85px]\" data-amsite-js=\"scroll-open-tab\" data-tab-destination=\"reviews\" > <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"currentColor\" viewBox=\"0 0 20 20\" class=\"text-yellow-300\" width=\"20\" height=\"20\" aria-hidden=\"true\"><path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z\"\/><\/svg>\n <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>\n <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>\n <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>\n <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"w-5 h-5\" aria-hidden=\"true\"><defs><linearGradient id=\"amPartialFill\"><stop offset=\"0%\" stop-color=\"&#x23;fcd34d\"\/><stop offset=\"90%\" stop-color=\"&#x23;fcd34d\"\/><stop offset=\"90%\" stop-color=\"&#x23;d1d5db\"\/><stop offset=\"100%\" stop-color=\"&#x23;d1d5db\"\/><\/linearGradient><\/defs><g fill=\"url(#amPartialFill)\"><path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\"\/><\/g><\/svg> <\/a> <a class=\"am-text-small link-as-text\" data-amsite-js=\"scroll-open-tab\" data-tab-destination=\"reviews\" href=\"https:\/\/amasty.com\/special-promotions-pro-for-magento-2.html#reviews\" aria-label=\"Reviews\" >17&nbsp;<span>Reviews<\/span><\/a><\/div>","wishlist_button":{"post_data":null,"url":"{\"action\":\"https:\\\/\\\/amasty.com\\\/wishlist\\\/index\\\/add\\\/\",\"data\":{\"product\":649,\"uenc\":\"aHR0cHM6Ly9hbWFzdHkuY29tL3NwZWNpYWwtcHJvbW90aW9ucy1wcm8tZm9yLW1hZ2VudG8tMi5odG1s\"}}","required_options":null}},"is_available":true}},"store":"1","currency":"USD","productCurrentScope":"website"} } } }</script><script> 'use strict'; function amReviews() { return Object.assign({ reviewSelectors: { customerReviewList: '#reviews' }, eventListeners: { ['@amreviews-filter.window'](event) { this.filterReviews(event.detail.url); } }, /** * @param {string} url * @returns {void} */ filterReviews: function (url) { fetch(url, { method: 'GET', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }).then(response => { return response.ok ? response.text() : Promise.reject(`${response.status} ${response.statusText}`); }).then(result => { !!result && hyva.replaceDomElement(this.reviewSelectors.customerReviewList, result); this.$nextTick(() => { this.scrollToReviewsBlock(); }) }).catch(error => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: error } ]); }) }, /** * @returns {void} */ scrollToReviewsBlock: function () { document.querySelector(this.reviewSelectors.customerReviewList).scrollIntoView({ behavior: 'smooth', block: 'start' }); } }, typeof amReviewCommentsHandler === 'function' ? amReviewCommentsHandler() : {} ); }</script><script> 'use strict'; function initFormEvents223() { 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-223')); 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-223'); }, 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-223'); 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-223'); if (result) { form.submit(); } } } }</script><script> (function setDependencies() { const form = document.getElementById('amform-form-223'); 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":223,"productId":"649"}; 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]); }); }) })(223);</script><script> function ratingData_67bef4ab62579() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab62579() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab62ef4() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab62ef4() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab638df() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab638df() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab63f8a() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab63f8a() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab64571() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab64571() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab64d23() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab64d23() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab65815() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab65815() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab65f75() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab65f75() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab66471() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936,7586], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab66471() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab66dbd() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936,7586,7647], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab66dbd() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab67860() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936,7586,7647,8188], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab67860() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab67de8() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936,7586,7647,8188,8196], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab67de8() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab68325() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936,7586,7647,8188,8196,8197], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab68325() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab69161() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936,7586,7647,8188,8196,8197,8], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab69161() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67bef4ab69f5d() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936,7586,7647,8188,8196,8197,8,1134], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67bef4ab69f5d() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script type="application/ld+json"> {"@context":"http:\/\/schema.org","@type":"FAQPage","speakable":{"@type":"SpeakableSpecification","xPath":["\/html\/head\/title"]},"mainEntity":[{"@type":"Question","position":"-116","name":"Are Amasty extensions compatible with all themes and extensions by other vendors?","text":"Are Amasty extensions compatible with all themes and extensions by other vendors?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Amasty extensions work with all plugins we issued and with most 3rd-party plugins. If you come across a Magento 2 compatibility issue with any third-party module, we\u2019ll definitely try to help you.\r\nIf you face any technical issues, please create a ticket ...","dateCreated":"2025-02-25 18:43:54","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/are-amasty-extensions-compatible-with-all-themes-and-extensions-by-other-vendors.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-115","name":"Will I get free support and updates?","text":"Will I get free support and updates?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" Product updates\u00a0for extensions purchased before Feb 1, 2022With the transition to product subscriptions, you will receive product updates for all extensions purchased before Feb 1, 2022 throughout the entire grace period \u2014 up to Aug 1, 2022.\u00a0If you want ...","dateCreated":"2025-02-26 08:35:50","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/will-i-get-free-support-and-updates.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-114","name":"Do you have the installation service in magento?","text":"Do you have the installation service in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" Yes, you can use installation and configuration services that are available as the part of Pro and Premium add-ons for your product subscriptions.Please note that this installation service doesn\u2019t include uninstallation. So, if you need to completely uninstall...","dateCreated":"2025-02-25 13:47:32","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/can-i-have-amasty-extension-installed.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-113","name":"Can I request a free trial?","text":"Can I request a free trial?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Amasty doesn\u2019t provide any trials of Magento extensions.\r\nThere's one exception: Amasty extensions are provided for testing or demo purposes to our official Platinum Partners as a part of the \u201caccess to Amasty extensions for testing purposes with Composer...","dateCreated":"2025-02-25 17:47:13","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/can-i-request-a-free-trial.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-112","name":"Can I test an Amasty extension on a staging site before transferring it to a live one in magento?","text":"Can I test an Amasty extension on a staging site before transferring it to a live one in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Yes, you can install any Amasty extension on a test site and configure all the settings there before doing it on your live store.","dateCreated":"2025-02-25 12:28:48","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/can-i-test-an-amasty-extension-on-a-staging-site.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-111","name":"How can I get a refund?","text":"How can I get a refund?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" Amasty offers to its Customers a thirty (30) day money-back guarantee for the Software. In case the acquired extension didn\u2019t meet your expectations, our support team is always ready to help you. Fees for support subscriptions and any services provided by...","dateCreated":"2025-02-25 11:01:23","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/can-i-get-a-refund-if-an-extension-doesn-t-suit-me.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-110","name":"How can I receive a discount?","text":"How can I receive a discount?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" We are now working at a loyalty program for our customers that is supposed to bring even greater benefits in the long term.\u00a0While it\u2019s not out yet, you can look through these Special Offers. New discounts and specials are added every month.\u00a0To stay updated...","dateCreated":"2025-02-21 16:28:24","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/will-i-get-any-other-benefits.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-109","name":"How to update a Magento 2 Amasty extension?","text":"How to update a Magento 2 Amasty extension?","author":"Guest","dateCreated":"2021-09-04 07:37:01","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" Updating an Amasty extension follows the same process as installing a module.\u00a0To update a single extension:Run the following command to update a specific Amasty extension:composer update amasty\/&lt;module-name&gt;\u00a0To update multiple extensions:You can update...","dateCreated":"2025-02-26 10:55:20","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/upgrade-magento-2-extension.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-108","name":"If I need additional features to be added to an Amasty extension, how can I ask for it in magento?","text":"If I need additional features to be added to an Amasty extension, how can I ask for it in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:01","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"To leave your feature request, log in to your customer account and open the Products tab. Then, scroll down to the bottom of the page, and leave your feature request in the following form:\r\n\r\nAs soon as you send your request, it is considered by our Product...","dateCreated":"2025-02-14 13:22:29","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/how-to-ask-more-features-to-be-added-to-my-extension.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-106","name":"Magento 2 Amasty extensions installation","text":"Magento 2 Amasty extensions installation","author":"Guest","dateCreated":"2021-09-04 07:37:01","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" Amasty extension packages include all necessary files, setup guides, and a license agreement, with some even offering example import files to simplify the process.Important: Since January 14, 2025, all Amasty extensions will only be available for installation...","dateCreated":"2025-02-26 10:56:18","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/how-to-install-magento-2-extension.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-104","name":"How can I prolong support in magento?","text":"How can I prolong support in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:01","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" If you have an active support service subscription, it grants you access to support services for all products purchased before Feb,1 as long as your subscription is active.\u00a0Alternatively, support services are only available as the part of a product subscription...","dateCreated":"2025-02-19 10:23:59","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/how-can-i-prolong-support.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-101","name":"Can I change the EE extension to CE for free in magento?","text":"Can I change the EE extension to CE for free in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:01","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Usually, no, you can&rsquo;t exchange modules. Please, contact our support managers and they&rsquo;ll consider your case individually.\r\n&rarr; Learn more about our special offers","dateCreated":"2025-02-26 08:15:34","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/can-i-change-the-ee-extension-to-ce-for-free.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-100","name":"How can I get a discount to re-purchase plugins in magento?","text":"How can I get a discount to re-purchase plugins in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:01","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Usually, we don&rsquo;t provide any discounts. But you can contact us, and we&rsquo;ll consider your case individually.\r\n&rarr; Learn more about our special offers","dateCreated":"2025-02-24 23:03:07","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/how-can-i-get-a-discount-to-re-purchase-plugins.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-20","name":"What is the license policy? On how many websites can I use Amasty extensions?","text":"What is the license policy? On how many websites can I use Amasty extensions?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" Our license allows you to use a single extension license\u00a0agreement on one Magento installation.If you run several domains on the same instance of Magento, you can use one extension license.\u00a0However, if you run each website on a new installation of Magento...","dateCreated":"2025-02-26 09:29:01","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/amasty-license-policy.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-14","name":"How can I pay for Amasty extensions in magento?","text":"How can I pay for Amasty extensions in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"You can pay for our extensions in any convenient for you way as a full range of payment methods are supported. The most common means are credit card or PayPal. Security and fraud protection are guaranteed.\r\nIf you need to pay for the order with a non-standard...","dateCreated":"2025-02-19 08:31:07","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/how-can-i-pay-for-amasty-extensions.html","upvoteCount":"0","downvoteCount":"0"}}]}</script><script> function productURLData_67bef4ab6f5d6() { const COOKIE_EXPIRES = 1; const COOKIE_NAME = 'faq_product'; const COOKIE_VALUE = window.location.href; return { initialize() { hyva.setCookie(COOKIE_NAME, COOKIE_VALUE, COOKIE_EXPIRES); }, } }</script><script> 'use strict'; function amSummaryDetails() { return { isVisibleDetails: false, filterReviewUrl: 'https://amasty.com/review/product/listAjax/amreview_sort/newest/stars/STAR/id/649/', eventListeners: { ['@toggle-state-summary-details.window'](event) { this.isVisibleDetails = event.detail.isVisibleDetails; }, ['@am-stars-filter-clear.window'](event) { const productUrl = event.detail.productUrl; !!productUrl && this.dispatchFilterEvent(productUrl); }, }, /** * @param {int} stars * @returns {void} */ applyFilterByStars: function (stars) { this.dispatchFilterEvent(this.filterReviewUrl.replace('STAR', stars.toString())); }, /** * @param {string} url * @returns {void} */ dispatchFilterEvent: function (url) { window.dispatchEvent(new CustomEvent('amreviews-filter', { detail: { url: url }})); } } }</script><script> function initAddReviewClickBtn() { return { isLoggedIn: false, receiveCustomerData(privateData) { this.isLoggedIn = this.isCustomerLoggedIn(privateData); }, showAuthPopup() { if (!this.isLoggedIn) { const browserStorage = hyva.getBrowserStorage(); if (browserStorage) { browserStorage.removeItem('data_social_login_redirect'); } window.dispatchEvent( new CustomEvent('hyva-modal-show', {detail: {dialog: "social-login-popup"}}) ) } else { window.dispatchEvent( new CustomEvent('hyva-modal-show', {detail: {dialog: "form-review-popup"}}) ) } }, ...AmsiteUtils(), ...AmAuthPopup() } }</script><script> 'use strict'; function amReviewItem() { return { reply: false, comments: false, qtyComments: 0, /** * @returns {void} */ toggleReply: function () { if (this.comments && !this.reply) { this.reply = true; return; } if (this.comments && this.reply) { this.reply = false; this.comments = false; return; } this.reply = !this.reply; }, /** * @returns {void} */ toggleComments: function () { if (!this.qtyComments) { return; } if (this.reply && !this.comments) { this.comments = true; return; } this.comments = !this.comments; this.toggleReply(); } } }</script><script> function initAmReviewForm_67bef4ab7949c() { return { displayNickname: false, displayErrorMessage: false, errorMessages: [], errors: 0, hovered: 0, clickedRatingId: 0, nickname: null, summary: null, ratings: [], review: null, url: 'https://amasty.com/review/product/post/', /** * @returns void */ submitForm: function () { this.validate() .then(() => { const $form = this.$root; if (this.errors === 0) { this.placeReview(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); }, /** * @returns void */ placeReview: function () { const form = this.$root; const body = new FormData(form); const productId = form.dataset.productId ?? 0; const url = new URL(this.url + `id/${productId}/`) body.append('form_key', hyva.getFormKey()); this.displayErrorMessage = false; fetch(url.toString(), { method: 'POST', headers: Object.assign({ 'X-Requested-With': 'XMLHttpRequest' }), body: body }).then(response => { if (!response.redirected) { return response.json(); } let data = {}; if (response.status !== 200 || !response.ok) { data.errors = true; } this.setMessage(data); }).then(() => { this.hide(); form.reset(); this.clickedRatingId = 0; window.scrollTo({ top: 0, behavior: 'smooth' }); window.dispatchMessages([ { type: "success", text: "You submitted your review for moderation." } ], 5000); }); }, /** * @param {Object} data * @returns void */ setMessage: function(data) { if (data.errors) { this.displayErrorMessage = true; this.hide(); window.scrollTo({ top: 0, behavior: 'smooth' }); window.dispatchMessages([ { type: "error", text: "Submitting your review failed, please try again" } ], 5000); } } } }</script><script> 'use strict'; function initFormEvents9() { 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-9')); 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-9'); }, 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-9'); 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-9'); if (result) { form.submit(); } } } }</script><script> (function setDependencies() { const form = document.getElementById('amform-form-9'); 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":9,"productId":"649"}; 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]); }); }) })(9);</script><script> function amCustomTabs() { const hash = window.location.hash; const selectors = { tabItem: '.am-tabs-item' } return { isChangelogVersion: '2.17.0', isMobile: false, tabs: [{"name":"amcustomtabs_tabs_1","title":"Description","alias":"description","isActive":false},{"name":"amcustomtabs_tabs_4","title":"FAQ","alias":"faq","isActive":false},{"name":"amcustomtabs_tabs_3","title":"Reviews","alias":"reviews","isActive":false},{"name":"amcustomtabs_tabs_15","title":"Customization","alias":"customization","isActive":false},{"name":"amcustomtabs_tabs_16","title":"Change Log","alias":"changelog","isActive":false}], isAccordion: false, isOpenAllTabs: false, initAmCustomTabs() { this.checkIsMobileResolution(); this.prepareTabs(); this.$nextTick(() => { this.checkOpenTabs(); }) }, prepareTabs() { if (this.tabs.some(tab => tab.alias === 'product-overview-tab')) { this.removeTab('description'); } }, removeTab(tabName) { this.tabs = this.tabs.filter(tab => tab.alias !== tabName); }, setActiveTabs(currentName) { const anchor = document.getElementById(currentName).closest(selectors.tabItem); const behavior = this.isAccordion ? 'instant' : 'smooth'; for (let tab of this.tabs) { if (this.isOpenAllTabs) { this._toggleCollapsible(currentName, tab); } else { if (tab.isActive && this.isMobile) { tab.isActive = false; } else { tab.isActive = currentName === tab.name; } } } if (!this.isOpenAllTabs && this.isMobile) { this._scrollToElement(anchor, behavior); } }, isActiveTab(currentName) { for (let tab of this.tabs) { if (currentName === tab.name) { return tab.isActive; } } }, checkIsMobileResolution() { this.isMobile = window.matchMedia('(max-width: 768px)').matches; }, checkOpenTabs() { if (hash) { this._activatePreselectedTab(); } else { if (!this.isOpenAllTabs) { this.tabs[0].isActive = true; } else { this._setActiveAllTabs(); } } }, _activatePreselectedTab() { let tabAnchor; for (let tab of this.tabs) { if (hash === '#' + tab.alias) { tabAnchor = document.getElementById(tab.name).closest(selectors.tabItem); tab.isActive = true; this._dispatchTabCollapsedEvent(tabAnchor, 'smooth'); } } if (this.isOpenAllTabs) { this._setActiveAllTabs(); this._dispatchTabCollapsedEvent(tabAnchor, 'smooth'); } }, _dispatchTabCollapsedEvent(data) { window.dispatchEvent(new CustomEvent('amtabs-collapsed', { detail: { element: data, } })); }, _setActiveAllTabs() { for (let tab of this.tabs) { tab.isActive = true; } }, _toggleCollapsible(currentName, tab) { if (currentName === tab.name) { tab.isActive = !tab.isActive; } }, _scrollToElement(el, behavior) { setTimeout(() => { const stickyProductBlock = document.querySelector('.amsticky-cart-block.-amsticky-cart-active'); const additionalHeight = stickyProductBlock ? stickyProductBlock.offsetHeight : 0; window.scrollTo(({ top: el.getBoundingClientRect().top + window.scrollY - additionalHeight, behavior: behavior ? behavior : "auto" })) },50); }, eventListeners: { ['@amtabs-collapsed.window'](event) { this._scrollToElement(event.detail.element, 'smooth'); } } } }</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"> { ".block.related": { "amRelatedAnalytics": { "viewUrl": "https://amasty.com/ammostviewed/analytics/view/", "blockId": 6, "relatedProducts": [521,508], "clickUrl": "https://amasty.com/ammostviewed/analytics/click/" } } }</script><script type="text/x-magento-init"> { "*": { "Amasty_Preorder/js/product/preorder_list": { "jsonConfig" : {"538":{"configurable":{"entity":"538","swatchOpt":".swatch-opt-538","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"538":{"135":"Edition"}},"isAllProductsPreorder":0}},"607":{"configurable":{"entity":"607","swatchOpt":".swatch-opt-607","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"607":{"135":"Edition"}},"isAllProductsPreorder":0}},"673":{"configurable":{"entity":"673","swatchOpt":".swatch-opt-673","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"673":{"135":"Edition"}},"isAllProductsPreorder":0}},"884":{"configurable":{"entity":"884","swatchOpt":".swatch-opt-884","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"884":{"135":"Edition"}},"isAllProductsPreorder":0}},"921":{"configurable":{"entity":"921","swatchOpt":".swatch-opt-921","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"921":{"135":"Edition"}},"isAllProductsPreorder":0}},"925":{"configurable":{"entity":"925","swatchOpt":".swatch-opt-925","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"925":{"135":"Edition"}},"isAllProductsPreorder":0}},"1481":{"configurable":{"entity":"1481","swatchOpt":".swatch-opt-1481","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"1481":{"135":"Edition"}},"isAllProductsPreorder":0}},"1767":{"configurable":{"entity":"1767","swatchOpt":".swatch-opt-1767","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"1767":{"135":"Edition"}},"isAllProductsPreorder":0}},"521":{"configurable":{"entity":"521","swatchOpt":".swatch-opt-521","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"521":{"135":"Edition"}},"isAllProductsPreorder":0}},"508":{"configurable":{"entity":"508","swatchOpt":".swatch-opt-508","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"508":{"135":"Edition"}},"isAllProductsPreorder":0}}} } } }</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" : [] } } }</script><script type="text/x-magento-init"> { "*": { "Magento_Ui/js/core/app": { "components": { "storage-manager": { "component": "Magento_Catalog/js/storage-manager", "appendTo": "", "storagesConfiguration" : {"recently_viewed_product":{"requestConfig":{"syncUrl":"https:\/\/amasty.com\/catalog\/product\/frontend_action_synchronize\/"},"lifetime":"1000","allowToSendRequest":null},"recently_compared_product":{"requestConfig":{"syncUrl":"https:\/\/amasty.com\/catalog\/product\/frontend_action_synchronize\/"},"lifetime":"1000","allowToSendRequest":null},"product_data_storage":{"updateRequestConfig":{"url":"https:\/\/amasty.com\/rest\/default\/V1\/products-render-info"},"requestConfig":{"syncUrl":"https:\/\/amasty.com\/catalog\/product\/frontend_action_synchronize\/"},"allowToSendRequest":null}} } } } } }</script><script type="text/x-magento-init"> { "*": { "Amasty_AdminCustomerSections/js/adminCustomerSections": {} } }</script><script> 'use strict'; function initAmGdprPolicyPopup() { return { /** * @typedef PolicyData * @property {string} policyVersion * @property {boolean} show * @property {string} title * @property{boolean} versionChanged * @property {boolean} hideClose * @property {boolean} action */ eventListeners: { ['@amgdpr-accept-policy']() { if (this.consentId) { window.dispatchEvent(new CustomEvent('amgdpr-consent-accepted', {detail: this.consentId})); this.consentId = undefined; this.hide('amgdpr-policy-popup'); } else { this.acceptPolicy(); } }, ['@amgdpr-show-policy.window'](event) { this.consentId = event.detail; this.fetchPolicyContent().then(() => { this.$nextTick(() => { this.show('amgdpr-policy-popup'); }); }); }, ['@amgdpr-close-policy']() { this.hide('amgdpr-policy-popup'); } }, textUrl: 'https://amasty.com/gdpr/policy/policytext/', acceptUrl: 'https://amasty.com/gdpr/policy/accept/', popupDataUrl: 'https://amasty.com/gdpr/policy/popupData/', notificationText: 'We would like to inform you that our Privacy Policy has been amended.Please, read and accept the new terms.', showOnPageLoad: '', /** * @type PolicyData */ policyData: { policyVersion: '', show: false, title: '', versionChanged: false, hideClose: false, action: true }, title: '', policyText: '', consentId: undefined, initGdprPopup: function () { this.fetchPolicyData().then(() => { if ((this.showOnPageLoad && this.policyData.show) || this.policyData.versionChanged) { this.fetchPolicyContent().then(() => { this.$nextTick(() => { this.show('amgdpr-policy-popup'); }); }); } }); }, /** * @returns {Promise} */ fetchPolicyData: function () { return fetch(this.popupDataUrl) .then(response => response.json()) .then((data) => { this.policyData = {...data} }) .catch(error => this.dispatchErrorMessage(error)); }, /** * @returns {Promise} */ fetchPolicyContent: function () { this.title = ''; this.policyText = ''; const params = !!this.consentId ? '?' + new URLSearchParams({consent_id: this.consentId}) : '' return fetch(this.textUrl + params) .then(response => response.json()) .then(policyContent => { this.title = policyContent.title; this.policyText = policyContent.content; }).catch(error => this.dispatchErrorMessage(error)); }, /** * @returns {void} */ acceptPolicy: function () { window.dispatchEvent(new Event('amgdpr-loading-start')); const body = new URLSearchParams({form_key: hyva.getFormKey(), ...this.policyData}); const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; fetch(this.acceptUrl, {method: 'POST', body, headers: {'Content-Type': contentType}}) .then(response => response.json()) .then(data => { if (data.error) { this.dispatchErrorMessage(data.message) } else { this.notificationText = ''; this.hide('amgdpr-policy-popup'); } }) .catch(error => this.dispatchErrorMessage(error)) .finally(() => window.dispatchEvent(new Event('amgdpr-loading-stop'))); }, /** * @param {string} message * @returns {void} */ dispatchErrorMessage: function (message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: message } ]); }, /** * @returns {void} */ focusAcceptButton: function () { this.$refs['amgdpr-accept-policy']?.focus(); }, /** * @returns {void} */ focusCloseButton: function () { this.$refs['amgdpr-close-policy']?.focus(); } } }</script><script>require(['magezonBuilder']);</script><script>require(['Magezon_PageBuilder/js/common']);</script><script> (() => { function src_default(Alpine) { Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { let evaluate = evaluateLater(expression); let options = { rootMargin: getRootMargin(modifiers), threshold: getThreshhold(modifiers) }; let observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting === (value === "leave")) return; evaluate(); modifiers.includes("once") && observer.disconnect(); }); }, options); observer.observe(el); cleanup(() => { observer.disconnect(); }); }); } function getThreshhold(modifiers) { if (modifiers.includes("full")) return 0.99; if (modifiers.includes("half")) return 0.5; if (!modifiers.includes("threshold")) return 0; let threshold = modifiers[modifiers.indexOf("threshold") + 1]; if (threshold === "100") return 1; if (threshold === "0") return 0; return Number(`.${threshold}`); } function getLengthValue(rawValue) { let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); return match ? match[1] + (match[2] || "px") : void 0; } function getRootMargin(modifiers) { const key = "margin"; const fallback = "0px 0px 0px 0px"; const index = modifiers.indexOf(key); if (index === -1) return fallback; let values = []; for (let i = 1; i < 5; i++) { values.push(getLengthValue(modifiers[index + i] || "")); } values = values.filter((v) => v !== void 0); return values.length ? values.join(" ").trim() : fallback; } document.addEventListener("alpine:init", () => { window.Alpine.plugin(src_default); }); })();</script><script type="module" src="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Hyva_Theme/js/alpine3.min.js" defer crossorigin ></script><script> 'use strict'; function dispatchMessages(messages, hideAfter) { const messagesEvent = new CustomEvent("messages-loaded", { detail: { messages: messages, hideAfter: hideAfter } }); window.dispatchEvent(messagesEvent); } if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } (function( hyva, undefined ) { hyva.initFormKey = () => { const inputSelector = 'input[name="form_key"]', formKey = hyva.getFormKey(); Array.from(document.querySelectorAll(inputSelector)).map(function (input) { input.value = formKey }); } hyva.initMessages = () => { try { const messages = hyva.getCookie('mage-messages'); window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; dispatchMessages(window.mageMessages); const skipSetDomain = true; hyva.setCookie('mage-messages','', -1, skipSetDomain); } catch (error) { console.warn('Error parsing Cookie Messages:', error); } } window.addEventListener('DOMContentLoaded', hyva.initFormKey); hyva.alpineInitialized(hyva.initMessages) }( window.hyva = window.hyva || {} ));</script><script> 'use strict'; { const private_content_key = 'mage-cache-storage'; const private_content_expire_key = 'mage-cache-timeout'; const private_content_version_key = 'private_content_version'; const section_data_ids_key = 'section_data_ids'; const mage_cache_session_id_key = 'mage-cache-sessid'; const last_visited_store_key = 'last_visited_store'; const ttl = 3600; if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } function loadSectionData () { const browserStorage = hyva.getBrowserStorage(); if (!browserStorage) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "warning", text: "Please enable LocalStorage in your browser." }] ); return; } try { let isInvalid = false; if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { isInvalid = true; } hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); if (!hyva.getCookie(mage_cache_session_id_key)) { isInvalid = true; const skipSetDomain = true; const days = false; hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) } const cookieVersion = hyva.getCookie(private_content_version_key); const storageVersion = browserStorage.getItem(private_content_version_key); if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { isInvalid = true; } const privateContentExpires = browserStorage.getItem(private_content_expire_key); if (privateContentExpires && new Date(privateContentExpires) < new Date()) { browserStorage.removeItem(private_content_key); } if (isInvalid) { fetchPrivateContent([]); } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); if ( privateContent && privateContentExpires && privateContent.cart && privateContent.customer ) { dispatchPrivateContent(privateContent); } else { fetchPrivateContent([]); } } else { dispatchPrivateContent({}); } } catch (error) { console.warn('Error retrieving Private Content:', error); } } hyva.alpineInitialized(loadSectionData) window.addEventListener('reload-customer-section-data', loadSectionData); function dispatchPrivateContent(data) { const privateContentEvent = new CustomEvent("private-content-loaded", { detail: { data: data } }); window.dispatchEvent(privateContentEvent); } function fetchPrivateContent(sections) { fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { method: 'GET', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }) .then(response => response.json()) .then( data => { if (data) { try { const browserStorage = hyva.getBrowserStorage(); const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { delete oldSectionData['checkout-data']; } const newSectionData = Object.assign(oldSectionData, data); dispatchPrivateContent(newSectionData); if (newSectionData.messages && newSectionData.messages.messages ) { newSectionData.messages.messages = []; } browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); browserStorage.setItem(private_content_expire_key, expiresAt); const newCookieVersion = hyva.getCookie(private_content_version_key); browserStorage.setItem(private_content_version_key, newCookieVersion); hyva.setCookie( section_data_ids_key, JSON.stringify( Object.keys(data).reduce((sectionDataIds, sectionKey) => { sectionDataIds[sectionKey] = data[sectionKey]['data_id']; return sectionDataIds; }, {}) ), false, true ); } catch (error) { console.warn("Couldn't store privateContent", error); } } } ); } }</script><script> (() => { document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); })()</script><script> (events => { const dispatchUserInteractionEvent = () => { events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) window.dispatchEvent(new Event('init-external-scripts')) }; events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])</script><script> (function () { const reviewComponent = document.querySelector('[x-data="initReviewForm()"]'); reviewComponent?.setAttribute( 'x-init', `$watch( 'errorMessages', errorMessages => { errorMessages?.length > 0 && window.dispatchEvent(new CustomEvent("reload-customer-section-data")) } );${reviewComponent.getAttribute('x-init') || ''}` ); })();</script><script> 'use strict'; (function () { const modals = []; const excludedFromFocusTrapping = new Set(); function loadInertPolyfill(callback) { if (window.hyva.modal.disableInertPolyfill) { callback && callback(); } else { const polyfill = document.createElement('script'); polyfill.src = 'https\u003A\u002F\u002Fcdn.amasty.com\u002Fstatic\u002Fversion1740558685\u002Ffrontend\u002FAmasty\u002FAmTheme\u002Fen_US\u002FHyva_Theme\u002Fjs\u002Fwicg\u002Dinert\u002D3.1.1\u002Finert.min.js'; callback && polyfill.addEventListener('load', callback); const firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(polyfill, firstScriptTag); } } let isInertPolyfillLoaded = 0; function setSiblingsInert(dialogElement, toState) { if (isInertPolyfillLoaded === 0) { isInertPolyfillLoaded = 1; loadInertPolyfill(() => { isInertPolyfillLoaded = 2; setSiblingsInert(dialogElement, toState) }) return; } if (isInertPolyfillLoaded === 1) { return; } let el = dialogElement; while (el && (el = el.parentElement)) { if (el === document.body || el.parentElement === null) continue; Array.from(el.parentElement.children).forEach(sibling => { if (sibling !== el) { sibling.inert = toState; } }) } (function setChildrenInert(el, toState) { if (el) { el.inert = toState; Array.from(el.children).forEach(child => setChildrenInert(child, toState)); } })(findParentWithOverlaySpread(dialogElement), ! toState) excludedFromFocusTrapping.forEach(selector => { Array.from(document.querySelectorAll(selector)).map(el => el.inert = false); }) } function findParentWithOverlaySpread(el) { while (el && (el = el.parentElement)) { if (el === document.body || el.parentElement === null) continue; if (el.hasAttribute('x-spread') && el.getAttribute('x-spread').indexOf('overlay(') !== -1) { return el; } } } function freeFocusFromModalTrap(modal) { const dialogElement = modal.instance.$refs[modal.name]; isOverlayDisabled(dialogElement) || modal.instance.$nextTick(() => setSiblingsInert(dialogElement, false)); } function trapFocusInNextModalWithOverlay() { for (let idx = modals.length -1; idx >= 0; idx--) { const nextOnStack = modals[idx]; const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; if (! isOverlayDisabled(nextDialogElement)) { nextOnStack.instance.$nextTick(() => setSiblingsInert(nextDialogElement, true)); break; } } } function focusables(dialogElement) { const selector = 'a, button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; return Array.from(dialogElement.querySelectorAll(selector)) .filter(el => !el.hasAttribute('disabled')); } function firstVisible(elements) { const a = Array.from(elements); for (let i = 0; i < a.length; i++) { if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; } return null; } function isInViewport(element) { const rect = element && element.getBoundingClientRect(); return rect && rect.top >= 0 && rect.left >= 0 && rect.right <= window.innerWidth && rect.bottom <= window.innerHeight; } function setFocusAfterTransition(dialogElement, duration) { window.setTimeout(() => { const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || focusables(dialogElement)[0] || null; focusElement && isInViewport(focusElement) && focusElement.focus(); }, duration + 1); } function determineTrigger($refs, dialog, trigger) { if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target && dialog.target.focus) { return dialog.target; } if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target && trigger.target.focus) { return trigger.target; } if (typeof trigger === 'string') { try { return $refs[trigger] || document.querySelector(trigger) } catch (e) {} } if (trigger instanceof Element) { return trigger; } return null; } function isOverlayDisabled(dialog) { return dialog && dialog.hasAttribute('x-no-overlay') } function areRemainingModalsWithoutOverlay(modals) { const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); return overflowDisabled.length === modals.length; } window.hyva.modal = function(options) { const config = Object.assign({ dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', transitionEnterStart: 'opacity-0', transitionEnterEnd: 'opacity-100', transitionLeave: 'transition ease-in duration-300', transitionLeaveStart: 'opacity-100', transitionLeaveEnd: 'opacity-0', }, options); let lastHide = 0; return { opened: {}, show(dialog, trigger) { const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); const name = typeof dialog === 'string' ? dialog : config.dialog; const dialogElement = this.$refs[name]; if (! dialogElement) { return; } const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); dialogElement.scrollTop = 0; if (this.opened[name]) { return; } if (focusTargetAfterHide) { focusTargetAfterHide.setAttribute('aria-expanded', 'true'); } this.opened[name] = true; useOverlay && this.$nextTick(() => setSiblingsInert(dialogElement, true)); setFocusAfterTransition(dialogElement, config.duration); const frame = {name, instance: this, focusTarget: focusTargetAfterHide, time: Date.now()}; modals.push(frame); if (useOverlay) { document.body.classList.add('overflow-hidden'); } return new Promise(resolve => frame.resolve = resolve); }, cancel() { this.hide(false); }, ok() { this.hide(true); }, hide(value) { if (Date.now() - lastHide < config.duration) { return; } lastHide = Date.now(); const modal = modals.pop() || {}; const name = modal.name; this.opened[name] = false; freeFocusFromModalTrap(modal) trapFocusInNextModalWithOverlay(); const nextFocusAfterHide = modal.focusTarget; nextFocusAfterHide && setTimeout(() => { nextFocusAfterHide.setAttribute('aria-expanded', 'false'); nextFocusAfterHide.focus() }, config.duration); if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { document.body.classList.remove('overflow-hidden'); } modal.resolve(value); }, overlay(dialog) { const name = typeof dialog === 'string' ? dialog : config.dialog; return { ['x-show']() { return this.opened[name] }, ['x-transition:enter']: config.transitionEnter, ['x-transition:enter-start']: config.transitionEnterStart, ['x-transition:enter-end']: config.transitionEnterEnd, ['x-transition:leave']: config.transitionLeave, ['x-transition:leave-start']: config.transitionLeaveStart, ['x-transition:leave-end']: config.transitionLeaveEnd, ['@hyva-modal-show.window'](event) { event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) } }; } }; } window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] window.hyva.modal.pop = function () { if (modals.length > 0) { const modal = modals[modals.length -1]; modal.instance.hide(); } } window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { typeof selectors === 'string' || selectors instanceof String ? excludedFromFocusTrapping.add(selectors) : selectors.map(selector => excludedFromFocusTrapping.add(selector)); } window.hyva.modal.eventListeners = { keydown: event => { if (event.key === 'Escape') { window.hyva.modal.pop(); } }, click: event => { if (modals.length > 0) { const modal = modals[modals.length -1]; const dialog = modal.instance.$refs[modal.name]; if (modal.time + 50 < Date.now() && ! isOverlayDisabled(dialog) && ! dialog.contains(event.target)) { modal.instance.hide(); } } } }; document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); document.addEventListener('click', window.hyva.modal.eventListeners.click); })();</script><script> (function () { 'use strict'; const storageName = 'AmastyCookieGroups'; !!hyva.amStorage && hyva.amStorage.create(storageName, { /** * @type {{ * checked: boolean, * cookies: {description: string, lifetime: number|null, name: string, provider: string, type: string}[], * description: string, * groupId: string|number, * isEssential: boolean, * name: string * }[]} name */ groupData: [], cookiePolicy: undefined, lastUpdate: undefined, /** * @returns {string|number[]} */ getEssentialGroupIds: function () { return this.groupData.reduce(function (essentialGroupIds, group) { if (group.isEssential) { essentialGroupIds.push(group.groupId) } return essentialGroupIds; }, []); }, /** * @returns {string|number[]} */ getCheckedGroupIds: function () { return this.groupData.reduce(function (checkedGroupIds, group) { if (group.checked) { checkedGroupIds.push(group.groupId); } return checkedGroupIds; }, []); }, /** * @param {string} cookieName * @returns {boolean} */ isCookieEssential: function (cookieName) { const allEssentialCookies = this.getEssentialCookies(); return !!allEssentialCookies.find(cookie => cookie.name === cookieName); }, /** * @returns {array} */ getEssentialCookies: function () { return this.groupData .filter(group => group.isEssential) .map(group => group.cookies) .flat(); }, /** * @returns {boolean} */ hasGroupData: function () { return !!this.groupData.length; }, /** * @param {string} cookieName * @param {string} pattern * @returns {boolean} */ isEssentialByPattern: function (cookieName, pattern) { const essentialCookiePatterns = this.getEssentialCookiesPattern(pattern); return essentialCookiePatterns.some((pattern) => !!cookieName.match(this.getCookiePattern(pattern))); }, /** * @param {string} pattern * @return {Array} */ getEssentialCookiesPattern: function (pattern) { return this.getCookiesByPattern(pattern, this.getEssentialCookies()); }, /** * @param {string} pattern * @param {Array|undefined} cookies * @return {Array} */ getCookiesByPattern: function (pattern, cookies) { if (typeof cookie === 'undefined') { cookies = this.getAllCookies(); } return cookies .map((cookie) => typeof cookie === 'object' ? cookie.name : cookie.split('=')[0].trim()) .filter((cookie) => cookie.match(pattern) !== null); }, /** * @returns {array} */ getDisallowedCookies: function () { const disallowedCookie = decodeURIComponent(hyva.getCookie('amcookie_disallowed') ?? ''); if (!disallowedCookie) { return []; } return disallowedCookie.split(','); }, /** * @returns {string} */ getCookiePattern: function (pattern) { return `^${pattern.replaceAll('*', '.*')}$`; }, /** * @returns {array} */ getAllCookies: function () { return document.cookie.split(';'); }, /** * @param {boolean} setAcceptance * @returns {Promise} */ updateGroupData: function (setAcceptance = false) { const cookieFetchUrl = `${BASE_URL}amcookie/cookie/cookies`; return fetch(cookieFetchUrl, { method: "POST", headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest' }, body: new URLSearchParams({ allowed: hyva.getCookie('amcookie_allowed'), restriction: hyva.getCookie('amcookie_policy_restriction') }) }).then(response => { if (response.ok) { return response.json(); } return Promise.reject(`${response.status} ${response.statusText}`); }).then(data => { this.cookiePolicy = data.cookiePolicy ?? 'allowed'; this.lastUpdate = data.lastUpdate ?? 0; this.groupData = [...data.groupData]; hyva.setCookie('amcookie_policy_restriction', this.cookiePolicy, 10); if (setAcceptance) { amastyCookieManager.setLastCookieAcceptance(this.lastUpdate); } return data; }).catch(error => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: error } ]); }).finally(() => window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated'))); } }); })();</script><script> (function (amastyCookieManager) { 'use strict'; amastyCookieManager.pattern = '{(?<cookiePattern>.*)}'; amastyCookieManager.getAmastyCookieGroupStorage = function () { return hyva?.amStorage?.getStorage('AmastyCookieGroups') ?? {}; }; amastyCookieManager.deleteDisallowedCookie = function () { const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage(); const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? []; disallowedCookies.forEach((name) => { const pattern = name.match(this.pattern); if (!!pattern && !!amastyCookieGroupStorage) { const cookiePattern = amastyCookieGroupStorage.getCookiePattern(pattern.groups.cookiePattern) ?? ''; amastyCookieGroupStorage.getCookiesByPattern(cookiePattern).forEach((cookieName) => { this.deleteNotEssentialCookie(cookieName); }); } else { this.deleteNotEssentialCookie(name); } }); }; amastyCookieManager.isCookieAllowed = function (cookieName) { const allowedGroups = hyva.getCookie('amcookie_allowed'); const disallowedCookie = this.getAmastyCookieGroupStorage()?.getDisallowedCookies() ?? []; const isCookiePolicyAllowed = hyva.getCookie('amcookie_policy_restriction') === 'allowed'; const isCookieEssential = this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName); const isCookieEssentialByPattern = this.getAmastyCookieGroupStorage()?.isEssentialByPattern(cookieName, this.pattern); if (!isCookiePolicyAllowed || isCookieEssential || isCookieEssentialByPattern) { return true; } return !((!allowedGroups && !disallowedCookie) || this.isCookieDisallowed(cookieName)); }; amastyCookieManager.isCookieDisallowed = function (cookieName) { const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage(); const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? []; return disallowedCookies.some((cookie) => { const pattern = cookie.match(this.pattern); return !!pattern && !!cookieName.match(amastyCookieGroupStorage?.getCookiePattern(pattern.groups.cookiePattern)); }) || disallowedCookies.indexOf(cookieName) !== -1; }; amastyCookieManager.processManageableCookies = function () { let cookieScripts = document.querySelectorAll('script[data-amcookie-groupid][type="text/plain"]'); cookieScripts.forEach((elem) => { if (this.isChecked(elem.dataset['amcookie-groupid'])) { let elClone = elem.cloneNode(true).setAttribute('type', 'text/javascript'); elem.remove(); document.body.appendChild(elClone); } }); }; amastyCookieManager.deleteNotEssentialCookie = function (cookieName) { if (!this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName)) { hyva.setCookie(cookieName, '', -1, true); } }; amastyCookieManager.setLastCookieAcceptance = function (lastUpdate) { localStorage.setItem('am-last-cookie-acceptance', lastUpdate); }; window.addEventListener('amasty-cookie-group-updated', () => { amastyCookieManager.deleteDisallowedCookie(); }); window.addEventListener('private-content-loaded', () => { amastyCookieManager.getAmastyCookieGroupStorage()?.hasGroupData() && amastyCookieManager.deleteDisallowedCookie(); }); }(window.amastyCookieManager = window.amastyCookieManager || {}));</script><script> (function () { 'use strict'; window.addEventListener('cookiebar-action-accept', (event) => { const groups = event.detail; const url = `${BASE_URL}amcookie/cookie/savegroups`; const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; const body = new URLSearchParams({ form_key: hyva.getFormKey() }); groups.length && groups.map(groupId => body.append('groups[]', groupId)); fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}}) .then(response => { if (response.ok) { return response.json(); } return Promise.reject(`${response.status} ${response.statusText}`); }) .then(data => { if (data.success) { !!hyva.amStorage && hyva.amStorage.getStorage('AmastyCookieGroups').updateGroupData(true); } }) .catch(error => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: error } ]); }) .finally(() => { amastyCookieManager.processManageableCookies(); window.dispatchEvent(new CustomEvent('cookiebar-action-accept-finish')); window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated')); setTimeout(() => { window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }, 100); }); }); })();</script><script> (function () { 'use strict'; window.addEventListener('cookiebar-action-allow', () => { const url = `${BASE_URL}amcookie/cookie/allow`; const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; const body = new URLSearchParams({ form_key: hyva.getFormKey() }); fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}}) .then(response => { if (response.ok) { return response; } return Promise.reject(`${response.status} ${response.statusText}`); }) .then(() => { !!hyva.amStorage && hyva.amStorage.getStorage('AmastyCookieGroups').updateGroupData(true); }) .catch(error => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: error } ]); }) .finally(() => { amastyCookieManager.processManageableCookies(); window.dispatchEvent(new CustomEvent('cookiebar-action-allow-finish')); setTimeout(() => { window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }, 100); }); }); })();</script><script> (function () { 'use strict'; window.addEventListener('cookiebar-action-settings', () => { window.dispatchEvent(new Event('open-am-cookie-bar-settings')); }); })();</script><script> window.addEventListener('init-fancybox', () => { if (!!window.Fancybox) { return; } const script = document.createElement('script'); script.src = 'https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Amasty_AdvancedReviewHyva/vendor/fancybox/fancybox.min.js'; script.async = true; document.body.appendChild(script); script.onload = () => { window.dispatchEvent(new CustomEvent('fancyboxLoaded', {})); } const styles = document.createElement('link'); styles.rel = 'stylesheet'; styles.href = 'https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Amasty_AdvancedReviewHyva/vendor/fancybox/fancybox.min.css'; document.head.appendChild(styles); }, { once: true, passive: true }); window.addEventListener('fancyboxLoaded', () => { Fancybox.bind('[data-fancybox="gallery"]', { Thumbs : false }); });</script><script> 'use strict'; function initParentContainerProcessor() { const selectors = { labelContainer: '.amasty-label-container', galleryImg: '#gallery img:not(.amasty-label-image)' } return { /** * @param {AmlabelComponent} label * @return {void} */ process: function (label) { this.moveLabelToParent(label); this.setParentStyles(label); }, /** * @param {AmlabelComponent} label * @return {void} */ moveLabelToParent: function (label) { const newParent = this.getNewParent(label); if (!newParent) { return; } const wrapperElement = newParent.querySelector(label.wrapperClass); label.parent = newParent; if (wrapperElement && !wrapperElement.isSameNode(label.element)) { this.insertLabelByPriority(label, wrapperElement); } else { newParent.prepend(label.element); } }, /** * @param {AmlabelComponent} label * @return {HTMLElement|null} */ getNewParent: function (label) { let newParent = label.element.closest(label.config.path) || this.findPreviousNodeExcludingScriptsAndDifferentLabels(label.element)?.querySelector(label.config.path) || label.parent.querySelector(label.config.path); if (!newParent && label.config.move !== 1 && label.config.mode === 'prod') { newParent = document.querySelector(selectors.galleryImg)?.parentElement; } return newParent; }, /** * @param {HTMLElement} element * @return {HTMLElement|null} */ findPreviousNodeExcludingScriptsAndDifferentLabels: function (element) { const previousElement = element?.previousElementSibling; if (!previousElement) { return null; } if (previousElement?.tagName !== 'SCRIPT' && !previousElement?.className?.includes?.('amlabel-position-wrapper') ) { return previousElement; } return this.findPreviousNodeExcludingScriptsAndDifferentLabels(previousElement); }, /** * @param {AmlabelComponent} label * @param {HTMLElement} wrapperElement * @return {void} */ insertLabelByPriority: function (label, wrapperElement) { const labelContainers = wrapperElement.querySelectorAll(selectors.labelContainer); const currentLabelOrder = label.labelContainer.dataset.amlabelOrder; let insertAfterContainer = null; labelContainers.forEach(labelContainer => { if (labelContainer.dataset.amlabelOrder < currentLabelOrder) { insertAfterContainer = labelContainer; } }); insertAfterContainer === null ? wrapperElement.prepend(label.labelContainer) : insertAfterContainer.after(label.labelContainer); label.element.remove(); label.element = wrapperElement; }, /** * @param {AmlabelComponent} label * @return {void} */ setParentStyles: function (label) { /* required for child position absolute */ !(label.parent.style.position === 'absolute') && (label.parent.style.position = 'relative'); !label.parent.style.width && label.parent.classList.add('w-fit-content'); !label.parent.style.marginLeft && label.parent.classList.add('ml-auto'); !label.parent.style.marginRight && label.parent.classList.add('mr-auto'); }, } }</script><script> 'use strict'; function initLabelItemProcessor() { /** * @typedef {Object} AmlabelComponent * * @property {HTMLElement} element Label wrapper element * @property {HTMLElement} parent Element where label should be placed * @property {boolean} initialized Is label initialized * @property {string} wrapperClass Dynamic class for label wrapper to place multiple labels properly by position * @property {HTMLElement} labelContainer Container for label text image and tooltip * @property {Config} config Label Configuration * @property {Object} parentContainerProcessor * @property {Object} labelItemProcessor */ /** * @typedef {Object} AmLabelConfig * * @property {0|1} alignment Labels Alignment config value (0 - Horizontal| 1 - Vertical) * @property {number} label Label Id * @property {number} margin Margin between labels config value * @property {('cat'|'prod')} mode Label mode * @property {number} move * @property {number} order Label order * @property {string} path The css selector to which label should place * @property {string} position Label position * @property {string} product Product Id * @property {string} redirect_url * @property {string} size Label size * @property {{ * backgroundColor: string, * color: string, * content: string, * status: 1|2|3 * }} tooltip */ return { /** * @param {AmlabelComponent} label * @return {void} */ process: function(label) { this.setLabelSize(label); this.setLinkProps(label); }, /** * @param {AmlabelComponent} label * @return {void} */ setLabelSize: function (label) { if (!label.config.size) { return; } label.labelContainer.style.width = label.parent.offsetWidth * label.config.size / 100 + 'px'; }, /** * * @param {Object} $event * @param {HTMLElement} tooltipNode */ placeTooltip: function($event, tooltipNode) { const labelNode = $event.target; const labelNodeRect = labelNode.getBoundingClientRect(); tooltipNode.style.bottom = (window.innerHeight - labelNodeRect.top) + 'px'; tooltipNode.style.left = (labelNodeRect.left + labelNode.offsetWidth / 2 ) + 'px'; }, /** * @param {AmlabelComponent} label * @return {void} */ setLinkProps: function (label) { !!label.config.redirect_url && label.labelContainer.classList.add('-link', 'cursor-pointer'); }, /** * @param {Object} $event Click event * @param {string} redirectUrl */ openLink: function($event, redirectUrl) { if (redirectUrl.length === 0) { return; } $event.preventDefault(); window.open(redirectUrl, '_blank'); } } }</script><script> (function () { 'use strict'; const observedEvent = 'amlabel-swatch-product-changed'; const selectors = { swatchOptions: 'div[x-data^=initConfigurable][x-data*=Options]', addToCartFormOnListing: 'form.product_addtocart_form', galleryImage: '#gallery img:not(.amasty-label-image)', labelWrapper: '.amlabel-position-wrapper' } /** * @return {void} */ const injectLabelObserver = function () { const swatches = document.querySelectorAll(selectors.swatchOptions); swatches.forEach(swatch => { const isListing = !!swatch.closest(selectors.addToCartFormOnListing); const injectedDispatch = `$dispatch('${observedEvent}', ` + `{productIndex: productIndex, element: $el, optionConfig: optionConfig, isListing: ${isListing ? 1 : 0}})`; let mutatedInitAttribute = swatch.getAttribute('x-init'); mutatedInitAttribute += `; $watch('productIndex', (productIndex) => { ${injectedDispatch} });`; swatch.setAttribute('x-init', mutatedInitAttribute); }); } /** * @param {{ * productIndex: number, * element: HTMLElement, * optionConfig: Object, * isListing: 0|1 * }} payload * @return {void} */ const updateLabel = function ({detail: payload}) { const {productIndex, element, optionConfig, isListing} = payload; if (!productIndex) { return; } const reloadUrl = optionConfig.label_reload; const headers = { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }; const body = new URLSearchParams({ product_ids: productIndex, in_product_list: isListing }); const labelContainerSelector = isListing ? optionConfig.label_category : optionConfig.label_product; fetch(`${reloadUrl}?${body.toString()}`, {headers: headers, method: 'GET'}).then((response) => { if (response.ok) { return response.json(); } }).then((result) => { const labelHtml = result.labels && result.labels[productIndex]; let labelContainer = findClosest(element, labelContainerSelector); if (labelContainer === null && isListing === 0) { labelContainer = document.querySelector(selectors.galleryImage)?.parentElement; } if (!!labelContainer) { !!labelHtml ? replaceLabels(labelContainer, labelHtml) : clearLabelWrapper(labelContainer); } }).catch((error) => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: 'error', text: error }], 5000 ); }); } /** * We use approach from hyva.replaceDomElement method to replace labels and init components * * @param {HTMLElement} labelContainer * @param {string} labelHtml * @return {void} */ function replaceLabels(labelContainer, labelHtml) { const parser = new DOMParser(); const doc = parser.parseFromString(labelHtml, 'text/html'); const nodes = doc.querySelectorAll(selectors.labelWrapper); if (!nodes) { return; } clearLabelWrapper(labelContainer); const tmpScripts = doc.getElementsByTagName('script'); if (tmpScripts.length > 0) { const scripts = [...tmpScripts]; scripts.forEach(script => { let scriptNode = document.createElement('script'); scriptNode.innerHTML = script.innerHTML; document.head.appendChild(scriptNode); script.parentNode.removeChild(script); }); } labelContainer.append(...nodes); } /** * @param {HTMLElement} labelContainer * @return {void} */ function clearLabelWrapper(labelContainer) { labelContainer.querySelectorAll(selectors.labelWrapper).forEach(wrapper => wrapper.remove()); } /** * @param {HTMLElement} currentElement * @param {string} selector * @return {HTMLElement|null} */ function findClosest(currentElement, selector) { const maxDepth = 3; let counter = 0; let closest = null; while (currentElement.parentNode && closest === null && counter < maxDepth) { ++counter; currentElement = currentElement.parentNode; closest = currentElement.querySelector(selector); } return closest; } injectLabelObserver(); window.addEventListener(observedEvent, updateLabel); })();</script><script> (function () { 'use strict'; const selectors = { body: '.catalog-product-view', productItem: 'product-item' } window.addEventListener('alpine:init', () => { Alpine.directive('amintersect', (el, { expression }, { evaluate, cleanup }) => { const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) { evaluate(expression); observer.disconnect(); } }) }, { threshold: 0.5 }); observer.observe(getElement()); cleanup(() => { observer.disconnect() }); function getElement() { return !!document.querySelector(selectors.body) ? el.parentNode : getCategoryProductBlock(el); } function getCategoryProductBlock(el) { if (el.previousElementSibling === null) { return el; } if (!el.previousElementSibling.classList.contains(selectors.productItem)) { return getCategoryProductBlock(el.previousElementSibling); } return el.previousElementSibling; } }); }); })();</script><script> 'use strict'; (() => { function _calculateStrength({elementID, valid}) { const password = document.getElementById(elementID), emailElm = document.getElementById('email_address'); let displayScore; if (!password || !password.value) { displayScore = 0; } else { if (emailElm && password.value && emailElm.value && password.value.toLowerCase() === emailElm.value.toLowerCase()) { displayScore = 1; } else { const zxcvbnScore = zxcvbn(password.value).score; displayScore = valid && zxcvbnScore > 0 ? zxcvbnScore : 1; } } _displayStrength(displayScore); } function _displayStrength(displayScore) { let strengthLabel = '', className; switch (displayScore) { case 0: strengthLabel = "No\u0020Password"; className = 'password-none'; break; case 1: strengthLabel = "Weak"; className = 'password-weak'; break; case 2: strengthLabel = "Medium"; className = 'password-medium'; break; case 3: strengthLabel = "Strong"; className = 'password-strong'; break; case 4: strengthLabel = "Very\u0020Strong"; className = 'password-very-strong'; break; } const meterElm = document.getElementById('password-strength-meter-container'), meterLabelElm = document.getElementById('password-strength-meter-label'); if (meterElm) { meterElm.className = ''; meterElm.classList.add(className); meterLabelElm.textContent = strengthLabel; } } let loading = false; const callbacks = []; function loadZxcvbn(cb) { callbacks.push(cb); if (loading) return; loading = true; const script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'https\u003A\u002F\u002Fcdn.amasty.com\u002Fstatic\u002Fversion1740558685\u002Ffrontend\u002FAmasty\u002FAmTheme\u002Fen_US\u002Fjs\u002Fzxcvbn.min.js'; script.async = true; script.onload = () => callbacks.forEach(cb => cb()); document.head.appendChild(script); } window.addEventListener('password-validate', function (evt) { const meterElm = document.getElementById('password-strength-meter-container'), meterLabelElm = document.getElementById('password-strength-meter-label'); if (meterElm && meterLabelElm) { if (evt.detail && evt.detail.elementID) { const cb = () => _calculateStrength(evt.detail); window.zxcvbn ? cb() : loadZxcvbn(cb) } } }); document.addEventListener('DOMContentLoaded', () => { hyva && hyva.formValidation && hyva.formValidation.addRule('password-strength', function(value, options, field, context) { let counter = 0; const minCharacterSets = options.minCharacterSets !== undefined ? options.minCharacterSets : 1; if (value.match(/\d+/)) { counter++; } if (value.match(/[a-z]+/)) { counter++; } if (value.match(/[A-Z]+/)) { counter++; } if (value.match(/[^a-zA-Z0-9]+/)) { counter++; } queueMicrotask(() => { window.dispatchEvent(new CustomEvent('password-validate', { detail: { elementID: field.element.id || 'password', valid: field.state.valid }})); }); if (counter < minCharacterSets) { const missing = minCharacterSets - counter; return hyva.str('The\u0020password\u0020must\u0020include\u0020at\u0020least\u0020\u00251\u0020or\u0020more\u0020of\u003A\u0020uppercase\u0020\u0028A\u002DZ\u0029,\u0020lowercase\u0020\u0028a\u002Dz\u0029,\u0020number\u0020and\u0020symbol.', missing); } return true; }); }) })();</script><script> 'use strict'; function initAmastyCookieBar() { return { eventListeners: { ['@close-cookie-bar']() { this.hide('am-cookie-bar'); }, ['@open-cookie-bar']() { this.show('am-cookie-bar'); }, ['@amasty-cookie-group-updated.window']() { const lastUpdate = !!hyva.amStorage ? hyva.amStorage.getStorage('AmastyCookieGroups').lastUpdate : 0; if (this.isShowNotificationBar(this.firstShowProcess, lastUpdate)) { !this.opened['am-cookie-bar'] && this.show('am-cookie-bar'); } else { !!this.opened['am-cookie-bar'] && this.hide('am-cookie-bar'); } } }, firstShowProcess: '0', initBar: function () { window.isGdprCookieEnabled = true; !!hyva.amStorage && hyva.amStorage.getStorage('AmastyCookieGroups').updateGroupData(); }, /** * @param {string|number} firstShowProcess * @param {number} lastUpdate * @returns {boolean} */ isShowNotificationBar: function (firstShowProcess, lastUpdate) { return (this.isNeedFirstShow(firstShowProcess, lastUpdate) && !hyva.getCookie('amcookie_allowed') || this.isNeedShowOnUpdate(lastUpdate)); }, /** * @param {string|number} firstShowProcess * @param {number} lastUpdate * @returns {boolean} */ isNeedFirstShow: function (firstShowProcess, lastUpdate) { hyva.getBrowserStorage().setItem('amCookieBarFirstShowTime', lastUpdate); if (firstShowProcess === '0') { return true; } if (hyva.getBrowserStorage().getItem('amCookieBarFirstShow') !== '1') { hyva.getBrowserStorage().setItem('amCookieBarFirstShow', '1'); return true; } return false; }, /** * @param {number} lastUpdate * @returns {boolean} */ isNeedShowOnUpdate: function (lastUpdate) { if (!lastUpdate) { return false; } return this.isNeedShowAfterLastVisit(lastUpdate) || this.isNeedShowAfterLastAccept(lastUpdate); }, /** * @param {number} lastUpdate * @returns {boolean} */ isNeedShowAfterLastVisit: function (lastUpdate) { let needToShowAfterLastVisit = lastUpdate > hyva.getBrowserStorage().getItem('amCookieBarFirstShowTime'); if (needToShowAfterLastVisit) { hyva.getBrowserStorage().setItem('amCookieBarFirstShow', null); hyva.setCookie('amcookie_allowed', '', -1, true); } return needToShowAfterLastVisit; }, /** * @param {number} lastUpdate * @returns {boolean} */ isNeedShowAfterLastAccept: function (lastUpdate) { let needToShowAfterLastAccept = false; if (hyva.getBrowserStorage().getItem('am-last-cookie-acceptance')) { needToShowAfterLastAccept = lastUpdate > hyva.getBrowserStorage().getItem('am-last-cookie-acceptance'); } return needToShowAfterLastAccept; }, }; }</script><script> 'use strict'; function initCookieGroupInfo_67bef4ab9cae2() { return { group: null, eventListeners: { ['@popup-close-am-cookie-group-info.window']() { this.hide('popup-am-cookie-group-info'); }, ['@popup-open-am-cookie-group-info.window'](event) { this.group = event.detail; if (!!this.group) { /* If modal have big cookies list this can lead to trigger hide event in hyva.modal.eventListeners.click, so we should wait till this.group is reassigned */ this.$nextTick(() => this.show('popup-am-cookie-group-info')); } } } } }</script><script> 'use strict'; function initCookieBarSettings() { return { eventListeners: { ['@close-am-cookie-bar-settings.window']() { !!this.opened['am-cookie-bar-settings'] && this.hide('am-cookie-bar-settings'); }, ['@open-am-cookie-bar-settings.window']() { !this.opened['am-cookie-bar-settings'] && this.show('am-cookie-bar-settings'); }, ['@cookiebar-action-accept-finish.window']() { !!this.opened['am-cookie-bar-settings'] && this.hide('am-cookie-bar-settings'); } }, focusDoneButton: function () { this.$refs['ambar-settings-done']?.focus(); }, focusCloseButton: function () { this.$refs['ambar-settings-close']?.focus(); } } }</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/amasty.com\/","name":"Home"}}]}</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"WebSite","url":"https:\/\/amasty.com\/","name":"Amasty","potentialAction":{"@type":"SearchAction","target":"https:\/\/amasty.com\/catalogsearch\/result\/?q={search_term_string}","query-input":"required name=search_term_string"}}</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Organization","url":"https:\/\/amasty.com\/","name":"Amasty","logo":"https:\/\/cdn.amasty.com\/static\/version1700640514\/frontend\/Amasty\/AmastyTheme\/en_US\/images\/logo.svg","description":"Amasty is a leading provider of feature-rich Magento extensions, robust e-commerce solutions and all-round e-commerce IT services. An official Adobe partner, Amasty has been continuously growing its vast catalog of 300+ powerful Magento extensions since 2009. Amasty\u2019s Improved Layered Navigation has been installed on over 15.3K stores, solidifying its position as a leader in the Magento market....","contactPoint":[{"@type":"ContactPoint","telephone":"+1-347-897-9078","contactType":"technical support"},{"@type":"ContactPoint","telephone":"+1-347-897-9078","contactType":"customer service"}],"address":{"addressCountry":"Cyprus","postalCode":"2407","addressRegion":"Egkomi","addressLocality":"Nicosia","streetAddress":"73 Metochiou"},"sameAs":["https:\/\/www.facebook.com\/Amasty.Ltd\/","https:\/\/twitter.com\/AmastyTeam","https:\/\/www.instagram.com\/amastypeople\/","https:\/\/www.youtube.com\/user\/AmastyTeam","https:\/\/www.linkedin.com\/company\/amasty","https:\/\/www.pinterest.com\/amastybusiness\/"]}</script><script type="text/x-magento-init"> { "nav.navigation": { "amMenu": {} }, "[data-amtheme-js='form-minisearch']": { "amSearch": {} }, "[data-amtheme-js='backtotop-wrap']": { "backTop": {} } }</script><script type="text/x-magento-init"> { ".products-grid.grid, .products-list.list": { "amsiteBehaviorProductItem": {} }, "[data-role=vertical-screenshot-link], .faq-screenshot-thumb, .amblog-content img.size-full": { "amsiteOpenImageFancybox": {} }, "[btn-fancybox-popup]": { "amsiteOpenHtmlFancybox": {} }, ".swiper-container:not(.lazy-swiper)": { "amsiteMainSwiper": {} }, "[data-role=vertical-screenshots]": { "amsiteVerticalSwiper": {} }, "*": { "amsiteFishText": {} } }</script><script type="text/x-magento-init"> { ".mgz-block-content [data-role=tocart-form], #product_addtocart_form, #ajax-product_addtocart_form": { "amAjaxCart": { "actionUrl": "https://amasty.com/amasty_jettheme/ajax/addToCart/", "classes":{ "addToCartButtonDisable": "disabled -show-spinner" } } } }</script><script> var amsiteGlobalPriceFormat = {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true};</script><script> 'use strict'; window.addEventListener('DOMContentLoaded', () => { (function() { hyva.formValidation.addRule('required', (value, options, field, context) => { const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element, msg = 'This\u0020is\u0020a\u0020required\u0020field'; if (el.type === 'radio' || el.type === 'checkbox') { return (value === undefined || value.length === 0) ? msg : true; } el.setAttribute('required', ''); el.checkValidity(); return el.validity.valueMissing ? msg : true; }) hyva.formValidation.addRule('email', (value, options, field, context) => { const rule = /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i; if (value.length > 0 && !rule.test(value)) { return 'Please\u0020enter\u0020a\u0020valid\u0020email'; } return true; }) hyva.formValidation.addRule('minlength', (value, options, field, context) => { const n = Number(options) if (value.length > 0 && value.length < n) { return n === 1 ? hyva.strf('Please\u0020enter\u0020at\u0020least\u00201\u0020character.') : hyva.strf('This\u0020text\u0020length\u0020should\u0020be\u0020more\u0020than\u0020\u00250\u0020characters', options) } return true; }) hyva.formValidation.addRule('validate-not-only-special', (value, options, field, context) => { const test = /^[ \t[\]\\$&+,:;=?@#|'<>{}".^*()%!-]+$/.test(value); if (test) { return 'This\u0020field\u0020can\u0027t\u0020contain\u0020special\u0020characters\u0020only'; } return true; }) hyva.formValidation.addRule('validate-domain-url', (value, options, field, context) => { const test = value.length === 0 || /^((https?:\/\/)?(www\.)?((?!www\.)[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$)(:(\d+))?\/?/i.test(value); if (test) { return true; } return 'Please\u0020enter\u0020a\u0020valid\u0020domain.\u0020Ex.\u003A\u0020storename.com'; }) function createTextInputFrom(el) { const text = document.createElement('INPUT'); text.type = 'text'; text.value = el.value; return text; } })(); })</script><script> 'use strict'; (() => { document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); }); document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { const tabLink = tabHeader.querySelector('a'); const tabId = tabLink.getAttribute('href').replace('#', ''); tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); if (index === defaultActiveTab) { tab.setAttribute('x-data', `{ tab: '${tabId}' }`); } }); }); })();</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Product","name":"Special Promotions Pro for Magento 2","description":"Add our Magento 2 Advanced Promotions extension to shape your discounts with clever conditions. Create promotions based on customers' info and purchase history. Use 20 actions to be sure that your promotions are unique and relevant. \r\n","image":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/s\/p\/special-promotions-pro-for-magento-2_64d0cf2c44caf.png","offers":[{"@type":"Offer","priceCurrency":"USD","price":319,"availability":"https:\/\/schema.org\/InStock","itemCondition":"https:\/\/schema.org\/NewCondition","seller":{"@type":"Organization","name":"Amasty Store"},"url":"https:\/\/amasty.com\/special-promotions-pro-for-magento-2.html","sku":"special-promotions-pro-for-magento-2","mpn":"special-promotions-pro-for-magento-2"}],"url":"https:\/\/amasty.com\/special-promotions-pro-for-magento-2.html","aggregateRating":{"@type":"AggregateRating","ratingValue":98,"bestRating":100,"reviewCount":17},"review":[{"@type":"Review","author":{"@type":"Person","name":"Joe"},"datePublished":"2023-04-21 14:45:25","name":"Helps to offer tailored promotions ","reviewBody":"The extension helps us to offer a wider variety of promotions that are tailored to our customer base. Customers are engaging more with the discounts and we are seeing better conversion. The module is easy to use and is simply a build on top of the out of box Magento version. It's suitable for any business looking to expand their range of promotions and discounts to offer to their customers.","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Vincenzo"},"datePublished":"2023-03-17 14:28:54","name":"Aumento della conversione del 20%","reviewBody":"L'estensione ci ha aiutato ad aumentare la conversione del 20%. Lo consiglierei a tutti i proprietari di negozi Magento 2.","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Alberto"},"datePublished":"2021-01-18 21:00:00","name":"Good tool to make promotions frequently, fast support","reviewBody":"We needed a tool to make interesting promotions. But the existing processes were very slow. Now we are using Amasty\u2019s Special Promotions Pro and launching various campaigns every week. I had a couple of questions about the module when I started to work with it, but the support resolved my issues in just a few hours! I was impressed with it. I would recommend the extension to every e-commerce store.","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Marco"},"datePublished":"2021-01-10 21:00:00","name":"Big variety of promotion options","reviewBody":"I will recommend this extension to all Magento stores because it will drive your sales up with a big variety of promotion options!","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Martin"},"datePublished":"2021-01-05 21:00:00","name":"More promotions beyond Magento standard cart rules","reviewBody":"We wanted to offer more promotions to customers beyond Magento standard cart rules. With the extension, we were able to do this. We launched several successful campaigns that boosted our sales. Aside from providing more promotion options, the extension also allowed us to manage cart rules better. We can now duplicate cart rules and edit them in bulk. Any e-commerce business that plans to reach out to customers with regular sales promotions would benefit from this extension.","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Max Krukovsky"},"datePublished":"2020-10-15 21:00:00","name":"Perfect for complex promo rules","reviewBody":"With this extension now we can easily create complex promo rules. I seriously believe that this should be installed by default by any company running its business on Magento. I do not see a contemporary shop without this functionality. And the support team was fast to answer my questions.\r\n","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Rob Collins"},"datePublished":"2020-06-26 21:00:00","name":"Very easy to use and powerful in its abilities","reviewBody":"I was looking for an extension that would simplify creating special price promotions. Our promos can get complicated and this extension solved a lot of issues. \r\n\r\nWith this extension, I am able to generate multiple promotions that do not conflict with each other. I can also train our Marketing Team to make their own promotions without having to call our Developer. \r\n\r\nIt's very easy and strait forward to use, and very powerful in its abilities. I would recommend this extension for anybody who has many promotions running at the same time, particularly if you carry a lot of different brands.","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Gabriele Fr\u00f6bel-Schach"},"datePublished":"2020-04-26 21:00:00","name":" I would recommend this extensions for other stores eg food or fashion. There are more opportunities to promote specials.","reviewBody":"I bought this mosule 7 month ago, because we need more Magento Cart and discount rules. After using it we offer more promotions in the shop since then and were able to increase the conversion rate. \r\nIt is easy to install, good documentation for setup and operation. I would recommend this extensions for other stores eg food or fashion. There are more opportunities to promote specials.","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Sean Brady"},"datePublished":"2020-04-16 21:00:00","name":"I consider it a requirement for any magento store","reviewBody":"The extension is easy to use. For us it was a difficulty controlling promotions to apply properly. Extensions helped us to precise control over shopping cart rules. I consider it a requirement for any magento store and we usw it a few years.","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Pawel"},"datePublished":"2020-02-16 21:00:00","name":"Ease of use and good Guide doc","reviewBody":"Special Promotions Pro is used for 4 months. We wanted To offer more amp; better promotions, also to increase AOV. Module helped icrease in overall customer satisfaction. It is ease of use and good Guide doc. Support made answers to our qusetions. I can reccomend it To any e-commerce shop, that wants to expand its promo offering.","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Terry W"},"datePublished":"2019-11-10 21:00:00","name":"Very useful promotions extension","reviewBody":"This is a really useful extension if you want to offer promotional codes or discounts to customer groups. Logical approach to setting up each promotion and very easy to specify exclusions at category or product level. Promotions can be set to trigger on certain dates and expire on certain dates which is handy, but I would like to be able to set a specific time for start and end, which is currently missing from the module. Otherwise a very good and reliable solution. ","reviewRating":{"@type":"Rating","ratingValue":80,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Zuzanna"},"datePublished":"2019-08-12 21:00:00","name":"very useful thing","reviewBody":"Very good rich experience - useful thing","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Amit"},"datePublished":"2019-06-16 21:00:00","name":"Very useful products!","reviewBody":"Great module! I have bought 15+ extensions from Amasty. All of them are easy to install and add rich functionality. I particularly love special promotions pro, product labels, promo banners, improved sorting, order export. We depend on these modules, and they make our workflow easier.","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"ReePaulette"},"datePublished":"2018-07-04 21:00:00","name":"Responsive support","reviewBody":"I want to say that for me it was hard to install but Amasty tech group did it from a to z. One thing could be better though, when you set promotions the info about it is like a small line above the cart screen. Some customers even don\u2019t find it and then complain that I trick them. Would be nice to have this information in another way big and bright so no one misses it.","reviewRating":{"@type":"Rating","ratingValue":80,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Yolanda G"},"datePublished":"2018-03-09 21:00:00","name":"Excellent extension for promotions","reviewBody":"Actually, we started with another module, free gift. We wanted to give a gift when customer ordered min 100 items. Yet there was an error, and only changes in magento core could help. Amasty offered special promotions as an alternative. I don\u2019t regret the switch. Special promotions is a stronger module that will do in my case as well. I just use catchy banners and promo items. Also, there are many other promo features. I wasn\u2019t actually looking for them, but now they affect sales well. Recommended extension, really.","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Maria C."},"datePublished":"2017-02-01 21:00:00","name":"Good extension to diversify promos","reviewBody":"A very practical extension for an online store. I heavily use promotions. I try different rule conditions to find those that pay off better. I had some questions regarding compatibility, and they answered very fast. No cons for now.","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}},{"@type":"Review","author":{"@type":"Person","name":"Rick H"},"datePublished":"2016-12-22 21:00:00","name":"A masterpiece","reviewBody":"A real masterpiece by Amasty - eventually, I have it on Magento 2. Works as described, smoothly and without conflicts. 22 ready-made flexible promotions and dozens of conditions to please and engage buyers. ","reviewRating":{"@type":"Rating","ratingValue":100,"bestRating":100}}],"sku":"special-promotions-pro-for-magento-2","mpn":"special-promotions-pro-for-magento-2"}</script><script type="text/x-magento-init"> { "*": { "amsiteAsyncLoadCss": { "cssFileUrl": "https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/css/source/bundle-module/product-page/bundle-async-load.min.css" } } }</script><script> const AmAuthPopupReloadContent = function () { const customerMenuSelector = '\u0023customer\u002Dmenu\u0020\u007E\u0020nav'; return { contentUpdaters: [], initContentUpdaters() { window.addEventListener('amsl-register-content-updater', (event) => { event.stopPropagation(); if (typeof event.detail === 'function') { this.registerContentUpdater(event.detail); } }, true) }, reloadContent() { return Promise.all([ this.reloadHeader(), ...this.contentUpdaters.map(updater => updater()) ]).then(this.updateFormKey); }, registerContentUpdater(updater) { this.contentUpdaters.push(updater); }, async reloadHeader() { const response = await fetch( `${BASE_URL}amsociallogin_hyva\u002Fheader\u002Fupdate?isAjax=1`, { method: 'GET', headers: { 'Content-type': 'application/json' } } ); const result = await response.json(); const {customer_menu_html: customerMenuHtml} = result; const container = document.createElement('div'); container.innerHTML = customerMenuHtml; const currentMenu = document.querySelector(customerMenuSelector); const newMenu = container.querySelector(customerMenuSelector); if (currentMenu && newMenu) { currentMenu.replaceWith(newMenu); } }, updateFormKey() { const formKeyInputs = document.querySelectorAll('input[name="form_key"]'); formKeyInputs.forEach(input => input.value = hyva.getFormKey()); } } }</script><script> const AmAuthPopupRedirect = function () { const redirectTimeout = 4000; const redirectUrl = 'https://amasty.com/customer/account/'; return { processRedirect(forceRedirectUrl) { if (forceRedirectUrl) { setTimeout(() => { this.resetSessionCookie(); window.location.assign(forceRedirectUrl); }, redirectTimeout); return; } setTimeout(() => { this.resetSessionCookie(); window.location.assign(this._getRedirectUrl()); }, redirectTimeout); }, _getRedirectUrl() { const browserStorage = hyva.getBrowserStorage(); if (browserStorage) { const url = browserStorage.getItem('data_social_login_redirect') || redirectUrl; browserStorage.removeItem('data_social_login_redirect'); return url; } }, reloadCustomerData() { this.resetSessionCookie(); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); }, resetSessionCookie() { hyva.setCookie('mage-cache-sessid', '', -1, true); }, reloadPage() { setTimeout(() => { this.resetSessionCookie(); window.location.reload(true) }, redirectTimeout) }, reloadViaAjax() { window.addEventListener('private-content-loaded', () => { this.reloadContent().then(() => { window.dispatchEvent( new CustomEvent('amsl-content-updated') ); }).catch( (error) => { console.error(error); this.reloadPage(); } ); }, {once: true}); this.reloadCustomerData(); window.dispatchEvent( new CustomEvent('amsl-popup-ajax-login-success') ); } } }</script><script> const AmAuthPopupNotification = function () { const modalName = 'amsl\u002Dpopup\u002Dnotification'; return { ...AmAuthPopupModal(modalName), notification: '', initialize() { this.initModalSettings(); }, showNotification(messages) { if (!messages) { return; } this.notification = Array.isArray(messages) ? messages.join('<br>') : messages; window.dispatchEvent( new CustomEvent('amsl-hide-popup') ); this.show(modalName); } } }</script><script> const AmAuthPopupModal = function (modalName) { const canCloseByOverlayClick = true; return { ...hyva.modal(), animationDuration: 500, initModalSettings() { if (!canCloseByOverlayClick) { this.restrictOverlayClick(); } }, restrictOverlayClick() { document.addEventListener('click', (event) => { const modal = this.$refs[modalName]; const isVisible = this.opened[modalName]; if (isVisible && !modal.contains(event.target) && !modal.hasAttribute('x-no-overlay')) { event.stopPropagation(); } }, {capture: true}); } } }</script><script> function initCustomerLoginForm() { return { errors: 0, customer_form_login_popup_showPassword: false, displayErrorMessage: false, errorMessages: [], setErrorMessages(messages) { this.errorMessages = [messages] this.displayErrorMessage = this.errorMessages.length }, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#customer-login-form'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); } } }</script><script> function AmSocialLogin() { return { socialErrorMessage: '', isPopupEnabled: '1', initializeSocialLogin() { this.initContentUpdaters(); }, socialLoginClick(event) { if (this.messageEventListener) { window.removeEventListener('message', this.messageEventListener); } this.messageEventListener = this.onMessageEvent.bind(this); window.addEventListener('message', this.messageEventListener); if (this.isPopupEnabled) { window.open( event.currentTarget.href + '&isAjax=true', event.currentTarget.title, this.getPopupParams() ); } else { window.location.assign(event.currentTarget.href); } event.stopPropagation(); event.preventDefault(); return false; }, onSocialResponse(data) { const isSuccessfulResult = data.result === 1; if (isSuccessfulResult) { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: data.messages } ) ); if (data.redirect_data && data.redirect_data.url) { this.processRedirect(data.redirect_data.url); } else { this.processRedirect(); } } else { this.socialErrorMessage = data.messages.pop(); setTimeout(() => { this.socialErrorMessage = ''; }, 5000); if (data?.redirect_data?.redirectWithError) { this.processRedirect(); } } }, onMessageEvent(event) { if (event.data['redirect_data']) { this.onSocialResponse(event.data); } }, getPopupParams(w, h, l, t) { let screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft, screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop, outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth, outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22), width = w ? w : 500, height = h ? h : 420, left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10), top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10); return ( 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top ); }, ...AmAuthPopupRedirect(), ...AmAuthPopupReloadContent() } }</script><script> function initForm() { return { errors: 0, customer_form_register_popup_showPassword: false, customer_form_register_popup_showPasswordConfirm: false, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#accountcreate'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); }, } }</script><script> function AmSocialLogin() { return { socialErrorMessage: '', isPopupEnabled: '1', initializeSocialLogin() { this.initContentUpdaters(); }, socialLoginClick(event) { if (this.messageEventListener) { window.removeEventListener('message', this.messageEventListener); } this.messageEventListener = this.onMessageEvent.bind(this); window.addEventListener('message', this.messageEventListener); if (this.isPopupEnabled) { window.open( event.currentTarget.href + '&isAjax=true', event.currentTarget.title, this.getPopupParams() ); } else { window.location.assign(event.currentTarget.href); } event.stopPropagation(); event.preventDefault(); return false; }, onSocialResponse(data) { const isSuccessfulResult = data.result === 1; if (isSuccessfulResult) { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: data.messages } ) ); if (data.redirect_data && data.redirect_data.url) { this.processRedirect(data.redirect_data.url); } else { this.processRedirect(); } } else { this.socialErrorMessage = data.messages.pop(); setTimeout(() => { this.socialErrorMessage = ''; }, 5000); if (data?.redirect_data?.redirectWithError) { this.processRedirect(); } } }, onMessageEvent(event) { if (event.data['redirect_data']) { this.onSocialResponse(event.data); } }, getPopupParams(w, h, l, t) { let screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft, screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop, outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth, outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22), width = w ? w : 500, height = h ? h : 420, left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10), top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10); return ( 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top ); }, ...AmAuthPopupRedirect(), ...AmAuthPopupReloadContent() } }</script><script> function initPasswordForm() { return { errors: 0, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#user_forgotpassword'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); } } }</script><script> const AmAuthPopup = function () { const TAB_ID_LOGIN = 'amsl\u002Dlogin'; const TAB_ID_REGISTER = 'amsl\u002Dregister'; const TAB_ID_FORGOT = 'amsl\u002Dforgot'; const IS_KNOWN_CUSTOMER = false; const modalName = 'social\u002Dlogin\u002Dpopup'; let componentInitialized = false; const reCaptchaStatusBySection = { login: '', register: '', forgotPassword: '', } const reCaptchaStatusFor = section => reCaptchaStatusBySection[section]; return { isGuestCheckoutAllowed: true, isAccountForgotPasswordPage: false, activeTab: TAB_ID_LOGIN, tabs: [TAB_ID_LOGIN, TAB_ID_REGISTER], socialIconsExpansionState: { [TAB_ID_LOGIN]: false, [TAB_ID_REGISTER]: false }, isLoading: false, modalName, isLogged: false, socialIconsExpanded: false, initializeAuthPopup(privateData) { this.browserStorage = hyva.getBrowserStorage(); if (privateData?.data?.customer?.firstname && !IS_KNOWN_CUSTOMER) { componentInitialized = false; this.reloadExpiredCustomerData(); return; } if (componentInitialized) { return; } componentInitialized = true; const origShow = this.show; const origHide = this.hide; this.show = (name, event, activeTabName) => { origShow.call(this, name, event); this.activeTab = activeTabName || TAB_ID_LOGIN; } this.hide = (...args) => { origHide.call(this, args); setTimeout(() => { this.clearForms(); this.clearFormMessages(); }, this.animationDuration + 1) } this.initModalSettings(); this.bindLinksEvents(privateData); this.initContentUpdaters(); if (!this.isGuestCheckoutAllowed) { this.bindAuthenticationEvent(); } }, _setCustomRedirectUrl(elem) { const redirectUrl = elem.getAttribute('data-social-login-redirect'); if (this.browserStorage) { this.browserStorage.removeItem('data_social_login_redirect'); } if (redirectUrl && this.browserStorage) { this.browserStorage.setItem('data_social_login_redirect', redirectUrl); } }, bindAuthenticationEvent() { window.addEventListener('toggle-authentication', (event) => { event.stopPropagation(); if (!this.isLoggedIn()) { this.show( this.modalName, event ); } else { window.location.assign(event.detail.url) } }, true) }, bindLinksEvents(privateData) { if (!this.isLoggedIn(privateData)) { this.bindOpeningEvents(); this.bindForgotLinkEvent(); requestAnimationFrame(() => { this.processForms(); }) } else { this.initLogout(); } }, bindOpeningEvents() { const accountLinks = document.querySelectorAll(`nav.am-authorization-link a[href^="${BASE_URL}customer/account"], .amsite-changelog-tab a[href^="${BASE_URL}customer/account"]`) || []; accountLinks.forEach(elem => { const isRegisterLink = /create\/?(\?.+)?(\#.+)?$/.test(elem.href); elem.removeAttribute('onclick'); elem.setAttribute('aria-haspopup', 'dialog'); elem.addEventListener('click', (event) => { this._setCustomRedirectUrl(elem); event.preventDefault(); this.show( this.modalName, event, isRegisterLink ? TAB_ID_REGISTER : TAB_ID_LOGIN ); }) }); if (reCaptchaStatusFor('register')) { this.moveRecaptchaElement('.recaptcha-create-wrapper'); } if (reCaptchaStatusFor('login')) { this.moveRecaptchaElement('.recaptcha-login-wrapper'); } }, bindForgotLinkEvent() { const modalContainer = this.$el || this.$root; const forgotLinks = modalContainer.querySelectorAll( `a[href^="${BASE_URL}customer/account/forgotpassword"]` ) || []; forgotLinks.forEach((element) => { element.addEventListener('click', (event) => { event.preventDefault(); element.setAttribute('aria-haspopup', 'dialog'); this.activeTab = TAB_ID_FORGOT; }) }) if (reCaptchaStatusFor('forgotPassword') && !this.isAccountForgotPasswordPage) { this.moveRecaptchaElement('.recaptcha-forgot-wrapper'); } }, isLoggedIn(privateData) { try { privateData = privateData?.data || JSON.parse(hyva.getBrowserStorage()['mage-cache-storage']); return this.isLogged = !!(privateData?.customer?.firstname); } catch { } return this.isLogged = false; }, showOnExternalEvent(event) { const eventData = event.detail || {}; const message = eventData?.message; const tabName = eventData?.tabName || TAB_ID_LOGIN; this.show(this.modalName, event, tabName); if (message) { this.setFormMessages(tabName, [message]); } }, canShowAllSocialIcons() { return this.socialIconsExpansionState[this.activeTab]; }, showAllSocialIcons() { this.socialIconsExpanded = true; this.socialIconsExpansionState[this.activeTab] = true; }, setLoading(isLoading) { const formButtons = this.$refs[this.modalName].querySelectorAll('[type="submit"]'); formButtons.forEach(button => { if (isLoading) { button.setAttribute('disabled', 'disabled') } else { button.removeAttribute('disabled'); } }) this.isLoading = isLoading; }, reloadExpiredCustomerData() { const sections = ['mage-cache-storage', 'private_content_version', 'mage-cache-timeout']; sections.forEach(section => localStorage.removeItem(section)); hyva.setCookie('mage-cache-sessid', '', -1); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); }, moveRecaptchaElement(element) { const captchaElement = document.querySelector(element); if (!captchaElement) { return; } const container = captchaElement.closest('.amsl-form').querySelector('.actions-toolbar'); container.prepend(captchaElement); }, onKeypress(event) { const activeTabIndex = this.tabs.indexOf(this.activeTab); if (activeTabIndex < 0 || event.code === 'Tab') { return; } switch (event.code) { case 'Enter': case 'Space': this.activeTab = event.target.id.replace('tab-', ''); break; case 'ArrowRight': this.activeTab = this.tabs[(activeTabIndex + 1) % this.tabs.length] break; case 'ArrowLeft': this.activeTab = this.tabs[(activeTabIndex + this.tabs.length - 1) % this.tabs.length] break; case 'End': this.activeTab = this.tabs[this.tabs.length - 1] break; case 'Home': this.activeTab = this.tabs[0] break; } document.getElementById('tab-' + this.activeTab).focus(); }, ...AmAuthPopupModal(modalName), ...AmAuthPopupForms(), ...AmAuthPopupRedirect(), ...AmAuthPopupReloadContent(), ...AmAuthPopupLogout(), ...(typeof AmSocialLogin === 'function' ? AmSocialLogin() : {}) } }</script><script> (function () { const resetPasswordForms = document.querySelectorAll('form[action*="/forgotpasswordpost"]'); resetPasswordForms.forEach(form => { form.classList.add('form','password', 'forget'); }); })(); const AmAuthPopupForms = function () { const TAB_ID_LOGIN = 'amsl\u002Dlogin'; const TAB_ID_REGISTER = 'amsl\u002Dregister'; const TAB_ID_FORGOT = 'amsl\u002Dforgot'; const formsConfig = JSON.parse(`\u007B\u0022amsl\u002Dlogin\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dlogin\u0022,\u0022formId\u0022\u003A\u0022customer\u002Dlogin\u002Dform\u0022,\u0022successMessage\u0022\u003A\u0022You\u0020have\u0020successfully\u0020logged\u0020in\u0022,\u0022submitUrlReplacement\u0022\u003A\u0022amsociallogin\u005C\u002Faccount\u0022\u007D,\u0022amsl\u002Dregister\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dregister\u0022,\u0022formId\u0022\u003A\u0022accountcreate\u0022,\u0022successMessage\u0022\u003A\u0022Thank\u0020you\u0020for\u0020registering\u0020with\u0020us\u0022,\u0022submitUrlReplacement\u0022\u003A\u0022amsociallogin\u005C\u002Faccount\u0022\u007D,\u0022amsl\u002Dforgot\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dforgot\u0022,\u0022formId\u0022\u003A\u0022user_forgotpassword\u0022,\u0022customSubmitUrl\u0022\u003A\u0022\u005C\u002Fcustomer\u005C\u002Faccount\u005C\u002Fforgotpasswordpost\u0022\u007D\u007D`); return { formMessages: new Map(), processForms() { Object.values(formsConfig).forEach((formOptions) => { this.processForm(formOptions); }) }, processForm(formOptions) { const { formId } = formOptions; const formElement = document.querySelector(`#social-login-popup #${formId}`); if (formElement) { this.bindFormSubmit(formElement, formOptions); } }, bindFormSubmit(formElement, formOptions) { const { formType, successMessage, submitUrlReplacement, customSubmitUrl } = formOptions; let submitUrl = customSubmitUrl || formElement.action; if (submitUrlReplacement) { submitUrl = submitUrl.replace('customer/account', submitUrlReplacement); } formElement.submit = () => { this.clearFormMessages(); this.setLoading(true); this.browserStorage = hyva.getBrowserStorage(); this.formAjaxSubmit( formElement, submitUrl ).then((result) => { if (result.errors) { this.setFormMessages(formType, result.errors); return; } const notification = result.success || successMessage; this.hide(this.modalName); if (notification) { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: notification } ) ); } if (!submitUrl.includes('forgotpasswordpost')) { this.processRedirect(); } else { setTimeout(() => { document.querySelector('[x-data="AmAuthPopupNotification()"] > .am-overlay-popup').style.display = 'none'; }, 4000) } }).finally(() => { this.setLoading(false); }) } }, async formAjaxSubmit(form, url) { let errors = null; let success = null; try { const response = await fetch(url, { method: 'POST', body: new FormData(form) }) const messages = this.extractMageMessages(); const errorMessages = messages.filter(({type}) => type === 'error'); const successMessages = messages.filter(({type}) => type === 'success'); if (errorMessages.length) { errors = errorMessages.map(({text}) => text); } if (successMessages.length) { success = successMessages.pop().text || ''; } if (errors && Array.isArray(errors) && this.detectSpecialBehaviour(response, errors)) { errors = null; } } catch (error) { console.error(error); errors = ['Sorry,\u0020something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.']; } return { errors, success }; }, extractMageMessages() { const messagesCookie = hyva.getCookie('mage-messages'); const messages = messagesCookie ? JSON.parse(decodeURIComponent(messagesCookie)) : []; hyva.setCookie('mage-messages','', -1, true); return messages; }, clearFormMessages() { this.formMessages = new Map(); }, setFormMessages(formType, messages) { const formMessages = new Map(this.formMessages); formMessages.set(formType, messages); this.formMessages = formMessages; }, clearForms() { const forms = this.$refs[this.modalName].querySelectorAll('form') || []; forms.forEach((form) => form.reset()); }, detectSpecialBehaviour(response, errors) { const errorPattern = 'You have an active'; const ulrPattern = 'amasty_recurring/customer/subscriptions/'; const cookieLifeTime = 31536000; if (errors[0].includes(errorPattern) && response.url.includes(ulrPattern)) { this.browserStorage.setItem('data_social_login_redirect', response.url); window.hyva.setCookie('mage-messages', `[{"type":"error","text":"${errors[0]}"}]`, cookieLifeTime, true); return true; } return false; } } }</script><script> const AmAuthPopupLogout = function () { return { initLogout() { const logoutLinks = document.querySelectorAll(`a[href*="customer/account/logout"]`) || []; logoutLinks.forEach(elem => { elem.addEventListener('click', (event) => { event.preventDefault(); this.sendLogOut() }) }) }, sendLogOut() { fetch(BASE_URL + "customer/account/logout", { method: 'GET', credentials: "include" }).then(response => { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: 'You\u0020have\u0020signed\u0020out\u0020and\u0020will\u0020go\u0020to\u0020our\u0020homepage\u0020in\u00205\u0020seconds' } ) ); this.processRedirect(this.isInAccountSection() ? BASE_URL : ''); }) .catch(error => { console.error(error); this.processRedirect(); }) }, isInAccountSection() { return document.querySelector('body').classList.contains('account'); } } }</script><script> const AmAuthPopupReviewForm = function () { const reloadUrl = 'https\u003A\u002F\u002Famasty.com\u002Famsociallogin_hyva\u002Fajax\u002Freviewform\u002Fid\u002F649\u002F'; const reviewFormBlockSelector = '\u0023review\u002Dform'; function cloneScriptNode(node) { const scriptClone = document.createElement('script') scriptClone.text = node.innerHTML; Array.from(node.attributes).forEach(attribute => { scriptClone.setAttribute(attribute.name, attribute.value); }); return scriptClone; } function reExecuteScripts(node) { node.querySelectorAll('script').forEach( (scriptNode) => node.replaceWith(cloneScriptNode(node)) ); } return { initializeReviewForm() { window.dispatchEvent( new CustomEvent( 'amsl-register-content-updater', { detail: this.reloadReviewForm.bind(this) } ) ) }, async reloadReviewForm() { try { const response = await fetch( reloadUrl, { method: 'GET', headers: { 'Content-Type': 'application/json' } } ); const result = await response.json(); if (result && result.form) { const bufferElement = document.createElement('div'); bufferElement.innerHTML = result.form; const newElement = bufferElement.querySelector(reviewFormBlockSelector); const existingElement = document.querySelector(reviewFormBlockSelector); reExecuteScripts(newElement); existingElement.replaceWith(newElement); } } catch (error) { console.error('Failed to update review form'); console.error(error); } } } }</script><script> (() => { 'use strict'; const gridSizes = { options: { elementSelector: '[data-mage-init*="components/grid-sizes"]', childrenInLine: '[class*="amtab-cell"], [class*="amtab-title"]', childrenInRow: '[class*="amtab-table"], [class*="amtab-head"]', cellSelect: '.amtab-cell', lineSelect: '.amtab-table-line', hoverlineClass: '-amtab-hoverline', activeClass: '-active', wrapperClass: '.amtab-grid-wrapper', tabWrapperClass: '.tab-content' }, targetElem: {}, initGridSizes: function () { let self = this; let elements = document.querySelectorAll(this.options.elementSelector); if (!elements.length) { return; } this._loadGridCss(); for (let element of elements) { let lines = element.querySelectorAll(this.options.lineSelect); for (let line of lines) { self._initClickOnLine(line, element); } this._setTabsGridPaddings(element); } }, _initClickOnLine(line, element) { let cells = line.querySelectorAll(this.options.cellSelect); for (let cell of cells) { cell.addEventListener('click', (event) => { this._gridHighlight(event, element) }); } }, _gridHighlight: function (e, element) { let self = this; self._clearTable(element); e.target.classList.add(self.options.activeClass); self.targetElem = { node: e.target, position: null }; self._highlightRow(element); self._highlightColumn(element); }, _highlightRow: function () { let self = this, targetLine = self.targetElem.node.closest(self.options.lineSelect); targetLine.classList.add(self.options.activeClass); let lineChildren = targetLine.querySelectorAll(self.options.childrenInLine); for (let [index, cell] of lineChildren.entries()) { if (cell.classList.contains(self.options.activeClass)) { self.targetElem.position = index; break; } cell.classList.add(self.options.hoverlineClass); } }, _highlightColumn: function (element) { let self = this; let childrenInRow = element.querySelectorAll(self.options.childrenInRow); for (let elem of childrenInRow) { if (elem.classList.contains(self.options.activeClass)) { break; } let cells = elem.querySelectorAll(self.options.childrenInLine); for (let [index, cell] of cells.entries()) { if (index === parseInt(self.targetElem.position)) { cell.classList.add(self.options.hoverlineClass); } } } }, _clearTable: function (element) { let self = this; element.querySelectorAll('.' + self.options.hoverlineClass).forEach((el) => { el.classList.remove(self.options.hoverlineClass) }); element.querySelectorAll('.' + self.options.activeClass).forEach((el) => { el.classList.remove(self.options.activeClass) }); }, _setTabsGridPaddings(element) { const gridWrapper = element.closest(this.options.wrapperClass); const tabWrapper = gridWrapper.closest(this.options.tabWrapperClass); if (gridWrapper.classList.contains('-small')) { tabWrapper.classList.add('md:pb-36'); } }, _loadGridCss() { const styles = document.createElement('link'); styles.rel = 'stylesheet'; styles.href = 'https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/Amasty_CustomTabsHyva/css/grids.min.css'; document.head.appendChild(styles); } } document.addEventListener('DOMContentLoaded', () => { gridSizes.initGridSizes(); }); })()</script><script> 'use strict'; (() => { const allAnchorLinks = document.querySelectorAll('[data-amsite-js="scroll-open-tab"]'); const allDeprecatedAnchorLinks = document.querySelectorAll('[observed-link-tab]'); const isMobile = AmsiteUtils().isMobile('(max-width: 769px)'); [...allAnchorLinks, ...allDeprecatedAnchorLinks].forEach(anchorLink => { anchorLink.addEventListener('click', (event) => { event.preventDefault(); const tabDestination = anchorLink.getAttribute('data-tab-destination') || anchorLink.getAttribute('href').replace('#', ''); const tab = document.querySelector(`[data-tab="${tabDestination}"]`); const indent = isMobile ? 140 : 100; if (tab) { tab.click(); window.scrollTo({ top: tab.getBoundingClientRect().top + window.scrollY - indent, behavior: 'smooth' }); } }); }); })()</script><script> (function () { 'use strict'; /** * Config to determine which element is responsible for the form submission * * @type {[{elementSelector: undefined|string, submitAttribute: string}]} */ const formWrapperConfig = [{"elementSelector":null,"submitAttribute":"submit"},{"elementSelector":"[type=\"submit\"]","submitAttribute":"click"}]; const initWrapFormSubmit = function () { document.addEventListener("DOMContentLoaded", function () { wrapFormSubmit(window.amRecaptchaModel?.formsToProtect || ''); }); }; /** * Replace protected forms submit with amRecaptchaModel.execute($event) method. * Call original submit on amrecaptcha-callback event after successful captcha validation. * * @return {void} */ const wrapFormSubmit = function (formsSelector) { if (formsSelector.length === 0) { return; } document.querySelectorAll(formsSelector)?.forEach(formElement => { if (!formElement) { return; } const { elementToWrap, attributeNameToWrap } = resolveElementWrapping(formElement); if (!elementToWrap || !attributeNameToWrap) { return; } setElementAttributes(formElement, elementToWrap, attributeNameToWrap); }); }; /** * Call wrapFormSubmit on event to add form to amRecaptchaModel protection - for forms which are created dynamically */ document.addEventListener("add-form-to-amrecaptcha-protection", (event) => { wrapFormSubmit(event.detail); }); /** * Find submit event and DOM element that has this event using formWrapperConfig. * * @param {HTMLElement} formElement * @return {{elementToWrap: undefined|string, attributeNameToWrap: undefined|string}} */ const resolveElementWrapping = function (formElement) { let result = { elementToWrap: undefined, attributeNameToWrap: undefined }; formWrapperConfig.forEach(({ elementSelector, submitAttribute }) => { const elementToWrap = !!elementSelector ? formElement.querySelector(elementSelector) : formElement; if (!elementToWrap) { return; } const attributeNameToWrap = elementToWrap.getAttributeNames().find( (elementAttribute) => { /** @type {string[]} */ const submitAttributeVariations = ['@', 'x-on:'].map(variation => variation + submitAttribute); return submitAttributeVariations.some( (submitAttributeVariation) => elementAttribute.startsWith(submitAttributeVariation) ) } ); if (!attributeNameToWrap) { return; } result.elementToWrap = elementToWrap; result.attributeNameToWrap = attributeNameToWrap; }); return result; } /** * Set attribute to wrap original submit, add eventListeners for captcha callbacks * * @param {HTMLElement} formElement * @param {HTMLElement} elementToWrap * @param {string} attributeNameToWrap */ const setElementAttributes = function (formElement, elementToWrap, attributeNameToWrap) { const originalSubmit = elementToWrap.getAttribute(attributeNameToWrap); elementToWrap.removeAttribute(attributeNameToWrap); /** * To properly set submit attribute - we need to replace '@' with 'x-on:' * and add preventDefault behaviour */ elementToWrap.setAttribute( attributeNameToWrap.replace(/^@/, 'x-on:').replace(/.prevent$/, '') + '.prevent', 'amRecaptchaModel.execute($event)' ); elementToWrap.setAttribute( 'x-on:amrecaptcha-executable-callback', originalSubmit ); } initWrapFormSubmit(); })(window.amRecaptchaModel = window.amRecaptchaModel || {});</script><script>window.amlazy = function() {if (typeof window.amlazycallback !== "undefined") {setTimeout(window.amlazycallback, 500);setTimeout(window.amlazycallback, 1500);}}</script><script> var yall=function(){"use strict";return function(e){var t=(e=e||{}).lazyClass||"lazy",n=e.lazyBackgroundClass||"lazy-bg",o="idleLoadTimeout"in e?e.idleLoadTimeout:200,r=e.observeChanges||!1,i=e.events||{},a=e.noPolyfill||!1,s=window,c="requestIdleCallback",l="IntersectionObserver",u=l in s&&l+"Entry"in s,d=/baidu|(?:google|bing|yandex|duckduck)bot/i.test(navigator.userAgent),v=["srcset","src","poster"],f=[],b=function(e,o){return f.slice.call((o||document).querySelectorAll(e||"img[data-src],video."+t+",iframe."+t+", ."+n))},g=function(t){var o=t.parentNode;"PICTURE"==o.nodeName&&h(b("source",o),m),"VIDEO"==t.nodeName&&h(b("source",t),m),m(t);var r=t.classList;r.contains(n)&&(r.remove(n),r.add(e.lazyBackgroundLoaded||"lazy-bg-loaded"))},y=function(e){for(var t in i)e.addEventListener(t,i[t].listener||i[t],i[t].options||void 0)},m=function(e){for(var n in v)if(v[n]in e.dataset){e.setAttribute(v[n],e.dataset[v[n]]);e.classList.add("lazy-loaded");var o=e.parentNode;"SOURCE"===e.nodeName&&o.autoplay&&(o.load(),/Trident/.test(navigator.userAgent)&&o.play(),o.classList.remove(t)),e.classList.remove(t)}},h=function(e,t){for(var n=0;n<e.length;n++)s[l]&&t instanceof s[l]?t.observe(e[n]):t(e[n])},p=b();if(h(p,y),u&&!d){var L=new s[l](function(e){h(e,function(e){if(e.isIntersecting||e.intersectionRatio){var t=e.target;c in s&&o?s[c](function(){g(t)},{timeout:o}):g(t),L.unobserve(t),(p=p.filter(function(e){return e!=t})).length||r||L.disconnect()}})},{rootMargin:("threshold"in e?e.threshold:200)+"px 0%"});h(p,L),r&&h(b(e.observeRootSelector||"body"),function(t){new MutationObserver(function(){h(b(),function(e){p.indexOf(e)<0&&(p.push(e),y(e),u&&!d?L.observe(e):(a||d)&&h(p,g))})}).observe(t,e.mutationObserverOptions||{childList:!0,subtree:!0})})}else(a||d)&&h(p,g)}}(); window.amlazycallback = function () { yall() }; yall({ events: { load: function (event) { if (!event.target.classList.contains("lazy") && event.target.nodeName == "IMG") { event.target.classList.add("lazy-loaded"); } } } }); </script><noscript id="deferred-css"><link rel="stylesheet" type="text/css" media="print" href="https://cdn.amasty.com/static/version1740558685/frontend/Amasty/AmTheme/en_US/css/print.min.css" /><link rel="stylesheet" type="text/css" media="all" href="https://cdn.amasty.com/static/version1740558685/_cache/merged/fonts_ea0ed758deb0843f830f0e98146097db.min.css" /></noscript><script>var loadDeferredStyles = function() {var addStylesNode = document.getElementById("deferred-css");var replacement = document.createElement("div");replacement.innerHTML = addStylesNode.textContent;document.body.appendChild(replacement);addStylesNode.parentElement.removeChild(addStylesNode);};window.addEventListener('load', loadDeferredStyles);</script></body></html>

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