It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: https://technave.easy.co/products/vitamarketingradar/

  1. <!doctype html>
  2. <!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
  3. <!--[if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
  4. <!--[if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]-->
  5. <!--[if IE 9 ]><html class="ie9 no-js"> <![endif]-->
  6. <!--[if (gt IE 9)|!(IE)]><!--> <html class="no-js"> <!--<![endif]-->
  7. <head>
  8.  
  9.  <!-- Basic page needs ================================================== -->
  10.  <meta charset="utf-8">
  11.  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  12.  
  13.  
  14.  <link rel="icon" href="https://cdn.store-assets.com/s/922320/f/8463850.png" />
  15.  
  16.  
  17.  <!-- Title and description ================================================== -->
  18.  <title>
  19.  VitaMarketingRadar &ndash; Technave
  20.  </title>
  21.  
  22.  
  23.  
  24.  <!-- Social meta ================================================== -->
  25.  
  26.  
  27.  <meta property="og:type" content="product">
  28.  <meta property="og:title" content="VitaMarketingRadar">
  29.  <meta property="og:url" content="https://technave.easy.co/products/vitamarketingradar">
  30.  
  31.  <meta property="og:price:amount" content="50">
  32.  <meta property="og:price:currency" content="USD">
  33.  
  34.  
  35. <meta property="og:description" content="Technave">
  36. <meta property="og:site_name" content="Technave">
  37.  
  38.  
  39.  
  40.  <meta name="twitter:card" content="summary">
  41.  
  42.  
  43.  
  44.  <meta name="twitter:site" content="@">
  45.  
  46.  
  47.  <meta name="twitter:title" content="VitaMarketingRadar">
  48.  <meta name="twitter:description" content="">
  49.  <meta name="twitter:image" content="/assets/images/products/no_image.png">
  50.  <meta name="twitter:image:width" content="480">
  51.  <meta name="twitter:image:height" content="480">
  52.  
  53.  
  54.  
  55.  
  56.  <!-- Helpers ================================================== -->
  57.  <link rel="canonical" href="https://technave.easy.co/products/vitamarketingradar">
  58.  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
  59.  <meta name="theme-color" content="#121212">
  60.  
  61.  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript" ></script>
  62.  
  63.  <!-- Header hook for plugins ================================================== -->
  64.  
  65. <!-- ScriptTags -->
  66. <script>window.__st={'p': 'product', 'cid': ''};</script><script src='/assets/events.js'></script><script>const __es_ads = {'country_code':'PK' ,'title': 'Online store by <img src="https://s3.ap-southeast-1.amazonaws.com/easystore.website/images/logo/svg/easystore-logo-horizontal.svg" alt="EasyStore" style="display: block !important;width:8em;margin:-2px 0 0 8px;"> <i style="width: 1px;height: 25px;margin: 0 10px;background: #E3E7EB;"></i> Create yours for free today.','title_mb': 'Create online store with <img src="https://s3.ap-southeast-1.amazonaws.com/easystore.website/images/logo/svg/easystore-logo-horizontal.svg" alt="EasyStore" style="display: block !important;width:8em;margin:-2px 8px 0;">','cta': 'Get started'}</script><script src='/assets/js/ads/storefront-ads.js'></script><script>(function(){function asyncLoad(){var urls=['/assets/traffic.js?v=1'];for(var i=0;i<urls.length;i++){var s=document.createElement('script');s.type='text/javascript';s.async=true;s.src=urls[i];var x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);}}window.attachEvent ? window.attachEvent('onload', asyncLoad) : window.addEventListener('load', asyncLoad, false);})();</script>
  67. <!-- /ScriptTags -->
  68.  
  69.  
  70.  
  71.  <script src="https://themes.easystore.co/63057/assets/global.js?t=1716787059" defer="defer"></script>
  72.  
  73.  
  74.  
  75.  <script>
  76.  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  77.  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  78.  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  79.  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
  80.  
  81.  ga('create', 'UA-37789107-2', 'auto','myTracker');
  82.  ga('myTracker.send', 'pageview');
  83.  
  84.  </script>
  85.  
  86.  <script src="/assets/storefront.js?id=3f4f74218829cbf9e2d5" type="text/javascript" ></script>
  87.  
  88.  
  89.  <!-- CSS ================================================== -->
  90.  <style>
  91.      @font-face {
  92.        font-family: 'Rubik';
  93.        font-style: normal;
  94.        font-weight: regular;
  95.        src: local('Rubik regular'), local('Rubik-regular'), url(https://fonts.gstatic.com/s/rubik/v14/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4i1UE80V4bVkA.ttf) format('truetype');
  96.      }
  97.  
  98.      @font-face {
  99.        font-family: 'Archivo Black';
  100.        font-style: normal;
  101.        font-weight: regular;
  102.        src: local('Archivo Black regular'), local('Archivo Black-regular'), url(https://fonts.gstatic.com/s/archivoblack/v10/HTxqL289NzCGg4MzN6KJ7eW6OYuP_x7yx3A.ttf) format('truetype');
  103.      }
  104.  
  105.      :root {
  106.        --font-body-family: 'Rubik', sans-serif;
  107.        --font-body-style: normal;
  108.        --font-body-weight: 300;
  109.  
  110.        --font-heading-family: 'Archivo Black', sans-serif;
  111.        --font-heading-style: normal;
  112.        --font-heading-weight: 700;
  113.  
  114.        --color-heading-text: 18,18,18;
  115.        --color-base-text: 18,18,18;
  116.        --color-base-background-1: 255,255,255;
  117.        --color-base-background-2: 255,255,255;
  118.        
  119.        --color-base-solid-button-labels: 255,255,255;
  120.        --color-base-outline-button-labels: 18,18,18;
  121.        
  122.        --color-base-accent-1: 18,18,18;
  123.        --color-base-accent-2: 18,18,18;
  124.        --payment-terms-background-color: 255,255,255;
  125.  
  126.        --gradient-base-background-1: 255,255,255;
  127.        --gradient-base-background-2: 255,255,255;
  128.        --gradient-base-accent-1: 18,18,18;
  129.        --gradient-base-accent-2: 18,18,18;
  130.  
  131.        --page-width: 145rem;
  132.      }
  133.  
  134.      *,
  135.      *::before,
  136.      *::after {
  137.        box-sizing: inherit;
  138.      }
  139.  
  140.      html {
  141.        box-sizing: border-box;
  142.        font-size: 62.5%;
  143.        height: 100%;
  144.      }
  145.  
  146.      body {
  147.        display: grid;
  148.        grid-template-rows: auto auto 1fr auto;
  149.        grid-template-columns: 100%;
  150.        min-height: 100%;
  151.        margin: 0;
  152.        font-size: 1.5rem;
  153.        letter-spacing: 0.06rem;
  154.        line-height: 1.8;
  155.        font-family: var(--font-body-family);
  156.        font-style: var(--font-body-style);
  157.        font-weight: var(--font-body-weight);
  158.        
  159.      }
  160.  
  161.      @media screen and (min-width: 750px) {
  162.        body {
  163.          font-size: 1.6rem;
  164.        }
  165.      }
  166.   </style>
  167.  
  168.  <link href="https://themes.easystore.co/63057/assets/base.css?t=1716787059" rel="stylesheet" type="text/css" media="screen" />
  169.  
  170.  
  171.  
  172. <!-- Snippet:global/head: Google Analytics -->
  173. <script>ga('create', 'UA-37789107-9', 'auto', 'SFTracker'); ga('SFTracker.set', 'hostname', '{https://technave.easy.co}'); ga('SFTracker.send', 'pageview');</script>
  174.                    <script>$(document).ready(function(){ $('#AddToCart').click(function(){ga('SFTracker.send','event', 'Cart', 'Add');});
  175.                    $('.update-cart').click(function(){ga('SFTracker.send','event', 'Cart', 'Update');});
  176.                    $('.checkout').click(function(){ga('SFTracker.send','event', 'Checkout', 'Lead');});
  177.                    $('#PlaceOrder,#btn-pay-again').click(function(){ga('SFTracker.send','event', 'Checkout', 'Pay');});});
  178.                    if (window.performance) { var timeSincePageLoad = Math.round(performance.now());
  179.                      ga('SFTracker.send', 'timing', 'JS Dependencies', 'load', timeSincePageLoad);}</script>
  180. <!-- /Snippet -->
  181.  
  182.  
  183.  <script>document.documentElement.className = document.documentElement.className.replace('no-js', 'js');</script>
  184. </head>
  185.  
  186. <body id="vitamarketingradar" class="template-product" >
  187.  
  188. <!-- Snippet:global/body_start: Console Extension -->
  189. <div id='es_console' style='display: none;'>1341678</div>
  190. <!-- /Snippet -->
  191.  
  192. <style>
  193.  header {
  194.    --logo-width: 120px;
  195.  }
  196.  .header-wrapper,
  197.  .header-wrapper .list-menu--disclosure,
  198.  .header-wrapper .search-modal{
  199.    background-color: #F1F1F1;
  200.  }
  201.  .header-wrapper .search-modal .field__input{
  202.    background-color: rgb(var(--color-background));
  203.  }
  204.  .header-wrapper summary .icon-caret,
  205.  .header-wrapper .header__menu-item a,
  206.  .header-wrapper .list-menu__item,
  207.  .header-wrapper .link--text{
  208.    color: #000000;
  209.  }
  210.  
  211.  .search-modal__form{
  212.    position: relative;
  213.  }
  214.  
  215.  .dropdown {
  216.    display: none;
  217.    position: absolute;
  218.    top: 100%;
  219.    left: 0;
  220.    width: 100%;
  221.    padding: 5px 0;
  222.    background-color: #fff;
  223.    color:#000;
  224.    z-index: 1000;
  225.    border-bottom-left-radius: 15px;
  226.    border-bottom-right-radius: 15px;
  227.    border: 1px solid rgba(var(--color-foreground), 1);
  228.    border-top: none;
  229.    overflow-x: hidden;
  230.    overflow-y: auto;
  231.    max-height: 350px;
  232.  }
  233.  
  234.  .dropdown-item {
  235.    padding: 0.4rem 2rem;
  236.    cursor: pointer;
  237.    line-height: 1.4;
  238.    overflow: hidden;
  239.    text-overflow: ellipsis;
  240.    white-space: nowrap;
  241.  }
  242.  
  243.  .dropdown-item:hover{
  244.    background-color: #f3f3f3;
  245.  }
  246.  
  247.  .search__input.is-focus{
  248.    border-radius: 15px;
  249.    border-bottom-left-radius: 0;
  250.    border-bottom-right-radius: 0;
  251.    border: 1px solid rgba(var(--color-foreground), 1);
  252.    border-bottom: none;
  253.    box-shadow: none;
  254.  }
  255.  
  256.  .clear-all {
  257.    text-align: right;
  258.    padding: 0 2rem 0.2rem;
  259.    line-height: 1;
  260.    font-size: 70%;
  261.    margin-bottom: -2px;
  262.  }
  263.  
  264.  .clear-all:hover{
  265.    background-color: #fff;
  266.  }
  267.  
  268.  .search-input-focus .easystore-section-header-hidden{
  269.    transform: none;
  270.  }
  271. </style>
  272.  
  273. <link rel="preload" href="https://themes.easystore.co/63057/assets/section-header.css?t=1716787059" as="style" onload="this.onload=null;this.rel='stylesheet'">
  274. <link rel="preload" href="https://themes.easystore.co/63057/assets/component-list-menu.css?t=1716787059" as="style" onload="this.onload=null;this.rel='stylesheet'">
  275. <link rel="preload" href="https://themes.easystore.co/63057/assets/component-menu-drawer.css?t=1716787059" as="style" onload="this.onload=null;this.rel='stylesheet'">
  276. <link rel="preload" href="https://themes.easystore.co/63057/assets/component-cart-notification.css?v1.1?t=1716787059" as="style" onload="this.onload=null;this.rel='stylesheet'">
  277.  
  278. <script src="https://themes.easystore.co/63057/assets/cart-notification.js?t=1716787059" defer="defer"></script>
  279. <script src="https://themes.easystore.co/63057/assets/details-modal.js?t=1716787059" defer="defer"></script>
  280.  
  281. <svg xmlns="http://www.w3.org/2000/svg" class="hidden">
  282.  <symbol id="icon-search" viewbox="0 0 18 19" fill="none">
  283.    <path fill-rule="evenodd" clip-rule="evenodd" d="M11.03 11.68A5.784 5.784 0 112.85 3.5a5.784 5.784 0 018.18 8.18zm.26 1.12a6.78 6.78 0 11.72-.7l5.4 5.4a.5.5 0 11-.71.7l-5.41-5.4z" fill="currentColor"/>
  284.  </symbol>
  285.  
  286.  <symbol id="icon-close" class="icon icon-close" fill="none" viewBox="0 0 18 17">
  287.    <path d="M.865 15.978a.5.5 0 00.707.707l7.433-7.431 7.579 7.282a.501.501 0 00.846-.37.5.5 0 00-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 10-.707-.708L8.991 7.853 1.413.573a.5.5 0 10-.693.72l7.563 7.268-7.418 7.417z" fill="currentColor">
  288.  </symbol>
  289. </svg>
  290.  
  291.  
  292. <div id="easystore-section-header">
  293.  <sticky-header class="header-wrapper header-wrapper--border-bottom">
  294.    <header class="header header--middle-left page-width header--has-menu">
  295.      <header-drawer data-breakpoint="tablet">
  296.        <details class="menu-drawer-container menu-opening">
  297.          <summary class="header__icon header__icon--menu header__icon--summary link link--text focus-inset" aria-label="Menu" role="button" aria-expanded="true" aria-controls="menu-drawer">
  298.            <span>
  299.              
  300.  
  301.  
  302.    <svg class="icon icon-hamburger " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M32.5,65h535a25,25,0,0,0,0-50H32.5a25,25,0,0,0,0,50Z" fill="currentColor"/><path d="M567.5,275H32.5a25,25,0,0,0,0,50h535a25,25,0,0,0,0-50Z" fill="currentColor"/><path d="M567.5,535H32.5a25,25,0,0,0,0,50h535a25,25,0,0,0,0-50Z" fill="currentColor"/></svg>
  303.  
  304.  
  305.  
  306.              
  307.  
  308.  
  309.    <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg>
  310.  
  311.  
  312.  
  313.            </span>
  314.          </summary>
  315.          <div id="menu-drawer" class="menu-drawer motion-reduce" tabindex="-1">
  316.            <div class="menu-drawer__inner-container">
  317.              <div class="menu-drawer__navigation-container">
  318.                <nav class="menu-drawer__navigation">
  319.                  <ul class="menu-drawer__menu list-menu" role="list">
  320.                    
  321.                    
  322.                      
  323.                        <li>
  324.                          <a href="/"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
  325.                            Home
  326.                          </a>
  327.                        </li>
  328.                      
  329.                    
  330.                    
  331.                      
  332.                        
  333.                        <li>
  334.                          <details>
  335.                                <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags">
  336.                                  <a href="/collections/all"  class="link--text list-menu__item menu-drawer__menu-item">
  337.                                    Catalog
  338.                                  </a>
  339.                                  
  340.  
  341.  
  342.    <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg>
  343.  
  344.  
  345.  
  346.                                  
  347.  
  348.  
  349.    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
  350.      <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path>
  351.    </svg>
  352.  
  353.  
  354.  
  355.                                </summary>
  356.                                <div class="menu-drawer__submenu motion-reduce" tabindex="-1">
  357.                                  <div class="menu-drawer__inner-submenu">
  358.                                    <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true">
  359.                                      
  360.  
  361.  
  362.    <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg>
  363.  
  364.  
  365.  
  366.                                      Catalog
  367.                                    </button>
  368.                                    <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1">
  369.                                      
  370.                                        
  371.                                        
  372.                                          <li>
  373.                                            <a href="/collections/new-arrival"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
  374.                                              New arrival
  375.                                            </a>
  376.                                          </li>
  377.                                        
  378.                                      
  379.                                        
  380.                                        
  381.                                          <li>
  382.                                            <a href="/collections/hot-selling"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
  383.                                              Hot selling
  384.                                            </a>
  385.                                          </li>
  386.                                        
  387.                                      
  388.                                      
  389.                                    </ul>
  390.                                  </div>
  391.                                </div>
  392.                          </details>
  393.                        </li>
  394.                      
  395.                    
  396.                    
  397.                      
  398.                        <li>
  399.                          <a href="/blogs/news"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
  400.                            News
  401.                          </a>
  402.                        </li>
  403.                      
  404.                    
  405.                    
  406.                      
  407.                        <li>
  408.                          <a href="/store-locator"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
  409.                            Location
  410.                          </a>
  411.                        </li>
  412.                      
  413.                    
  414.                  </ul>
  415.                </nav>
  416.  
  417.                <div class="menu-drawer__utility-links">
  418.  
  419.                  
  420.  
  421.  
  422.  
  423.  
  424.                  
  425.                  
  426.                  
  427.                    <a href="/account/login" class="menu-drawer__account link link--text focus-inset h5">
  428.                      
  429.  
  430.  
  431.    <svg class="icon icon-account " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M300,296.19c-70.7,0-137.11,28.74-187,80.93-49.59,51.87-76.9,120.77-76.9,194v25H563.89v-25c0-73.22-27.31-142.12-76.9-194C437.11,324.93,370.7,296.19,300,296.19ZM87.42,546.11C99.29,433.81,190.1,346.19,300,346.19s200.71,87.62,212.58,199.92Z" fill="currentColor"/><path d="M300,285.34c77.6,0,140.73-63.13,140.73-140.73S377.6,3.89,300,3.89,159.27,67,159.27,144.61,222.4,285.34,300,285.34Zm0-231.45a90.73,90.73,0,1,1-90.73,90.72A90.82,90.82,0,0,1,300,53.89Z" fill="currentColor"/></svg>
  432.  
  433.  
  434.                      
  435.                      Log in
  436.                    </a>
  437.                  
  438.                    <a href="/account/register" class="menu-drawer__account link link--text focus-inset h5">
  439.                      
  440.                      
  441.  
  442.  
  443.    <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus " fill="none" viewBox="0 0 10 10">
  444.      <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"></path>
  445.    </svg>
  446.  
  447.  
  448.                      Create account
  449.                    </a>
  450.                  
  451.                  
  452.                  
  453.                </div>
  454.              </div>
  455.            </div>
  456.          </div>
  457.        </details>
  458.      </header-drawer>
  459.  
  460.      
  461.        <h1 class="header__heading">
  462.          Technave
  463.        </h1>
  464.      
  465.  
  466.      
  467.      <div class="header__search-input" tabindex="-1">
  468.        <form action="/search" method="get" role="search" class="search search-modal__form">
  469.          <div class="field">
  470.            <input class="search__input field__input"
  471.              id="Search-In-Modal"
  472.              type="search"
  473.              name="q"
  474.              value=""
  475.              placeholder="Search"
  476.              autocomplete="off"
  477.            >
  478.            <label class="field__label" for="Search-In-Modal">Search</label>
  479.            <div class="dropdown" id="searchDropdown"></div>
  480.            <input type="hidden" name="search_history" class="hidden_search_history">
  481.            <input type="hidden" name="options[prefix]" value="last">
  482.            <button class="search__button field__button" aria-label="Search">
  483.              <svg class="icon icon-search" aria-hidden="true" focusable="false" role="presentation">
  484.                <use href="#icon-search">
  485.              </svg>
  486.            </button>
  487.          </div>
  488.        </form>
  489.      </div>
  490.      
  491.  
  492.      <nav class="header__inline-menu">
  493.        <ul class="list-menu list-menu--inline" role="list">
  494.          
  495.            
  496.              
  497.                <li>
  498.                  <a href="/"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
  499.                    Home
  500.                  </a>
  501.                </li>
  502.              
  503.            
  504.            
  505.              
  506.                
  507.                <li>
  508.                  <details-disclosure>
  509.                    <details>
  510.                      <summary class="header__menu-item list-menu__item link focus-inset">
  511.                        <a href="/collections/all"  >Catalog</a>
  512.                        
  513.  
  514.  
  515.    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
  516.      <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path>
  517.    </svg>
  518.  
  519.  
  520.  
  521.                      </summary>
  522.                      <ul class="header__submenu list-menu list-menu--disclosure caption-large motion-reduce" role="list" tabindex="-1">
  523.                        
  524.                        
  525.                        
  526.                          
  527.                            
  528.                            <li>
  529.                              <a href="/collections/new-arrival"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
  530.                                New arrival
  531.                              </a>
  532.                            </li>
  533.                          
  534.                        
  535.                        
  536.                          
  537.                            
  538.                            <li>
  539.                              <a href="/collections/hot-selling"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
  540.                                Hot selling
  541.                              </a>
  542.                            </li>
  543.                          
  544.                        
  545.                      </ul>
  546.                    </details>
  547.                  </details-disclosure>
  548.                </li>
  549.              
  550.            
  551.            
  552.              
  553.                <li>
  554.                  <a href="/blogs/news"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
  555.                    News
  556.                  </a>
  557.                </li>
  558.              
  559.            
  560.            
  561.              
  562.                <li>
  563.                  <a href="/store-locator"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
  564.                    Location
  565.                  </a>
  566.                </li>
  567.              
  568.            
  569.            
  570.            
  571.              
  572.                
  573.                  
  574.                
  575.                  
  576.                
  577.              
  578.            
  579.        </ul>
  580.      </nav>
  581.      <div class="header__icons">
  582.  
  583.        
  584.          
  585.            <div class="header__icon header__icon--account link link--text focus-inset small-hide medium-hide">
  586.              <a href="/account/login" class="header__icon link link--text focus-inset p-2">
  587.                
  588.  
  589.  
  590.    <svg class="icon icon-account " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M300,296.19c-70.7,0-137.11,28.74-187,80.93-49.59,51.87-76.9,120.77-76.9,194v25H563.89v-25c0-73.22-27.31-142.12-76.9-194C437.11,324.93,370.7,296.19,300,296.19ZM87.42,546.11C99.29,433.81,190.1,346.19,300,346.19s200.71,87.62,212.58,199.92Z" fill="currentColor"/><path d="M300,285.34c77.6,0,140.73-63.13,140.73-140.73S377.6,3.89,300,3.89,159.27,67,159.27,144.61,222.4,285.34,300,285.34Zm0-231.45a90.73,90.73,0,1,1-90.73,90.72A90.82,90.82,0,0,1,300,53.89Z" fill="currentColor"/></svg>
  591.  
  592.  
  593.  
  594.                <span id="my-account" class="header__link-label">Login</span>
  595.              </a>
  596.          </div>
  597.          
  598.        
  599.  
  600.        <a href="/cart" class="header__icon link link--text focus-inset" id="cart-icon-bubble">
  601.          <span class="header__icon--cart">
  602.            
  603.  
  604.  
  605.    <svg class="icon icon-cart-empty " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496.56 600"><path d="M453.52,128.63a25,25,0,0,0-24.91-22.8H364.72a117.48,117.48,0,0,0-232.89,0H67.94A25,25,0,0,0,43,128.63L8.8,515.21a72.11,72.11,0,0,0,19.05,55.6,79,79,0,0,0,58.22,25.3H410.49a79,79,0,0,0,58.22-25.3,72.11,72.11,0,0,0,19.05-55.6ZM248.28,53.89a67.58,67.58,0,0,1,65.65,51.94H182.63A67.57,67.57,0,0,1,248.28,53.89ZM431.83,537.05a28.85,28.85,0,0,1-21.34,9.06H86.07a28.85,28.85,0,0,1-21.34-9.06,22.69,22.69,0,0,1-6.13-17.43L90.82,155.83h40v51.23a25,25,0,0,0,50,0V155.83h135v51.23a25,25,0,0,0,50,0V155.83h40L438,519.62A22.68,22.68,0,0,1,431.83,537.05Z" fill="currentColor"/></svg>
  606.  
  607.  
  608.  
  609.            <div class="cart-count-bubble hidden">
  610.              <span aria-hidden="true" class="js-content-cart-count">0</span>
  611.            </div>
  612.          </span>
  613.          <span class="header__link-label medium-hide small-hide">
  614.            Cart
  615.          </span>
  616.        </a>
  617.        
  618.      </div>
  619.    </header>
  620.  </sticky-header>
  621.  
  622. <cart-notification>
  623.  <div class="cart-notification-wrapper page-width color-background-1">
  624.    <div id="cart-notification" class="cart-notification focus-inset" aria-modal="true" aria-label="Added to cart" role="dialog" tabindex="-1">
  625.      <div class="cart-notification__header">
  626.        <h2 class="cart-notification__heading caption-large">
  627.  
  628.  
  629.    <svg class="icon icon-checkmark color-foreground-text " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 9" fill="none">
  630.      <path fill-rule="evenodd" clip-rule="evenodd" d="M11.35.643a.5.5 0 01.006.707l-6.77 6.886a.5.5 0 01-.719-.006L.638 4.845a.5.5 0 11.724-.69l2.872 3.011 6.41-6.517a.5.5 0 01.707-.006h-.001z" fill="currentColor"></path>
  631.    </svg>
  632.  
  633.  
  634. Added to cart</h2>
  635.        <button type="button" class="cart-notification__close modal__close-button link link--text focus-inset" aria-label="accessibility.close">
  636.          
  637.  
  638.  
  639.    <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg>
  640.  
  641.  
  642.  
  643.        </button>
  644.      </div>
  645.      <div id="cart-notification-product" class="cart-notification-product"></div>
  646.      <div class="cart-notification__links">
  647.        <a href="/cart" id="cart-notification-button" class="button button--secondary button--full-width">View cart (<span class="js-content-cart-count">0</span>)</a>
  648.        <form action="/cart" method="post" id="cart-notification-form">
  649.          <input type="hidden" name="_token" value="pU0PSxftXGMWu8q5Xc6IYHAj3bWNT26ZKyAu3lIE">
  650.          <input type="hidden" name="current_currency" value="USD">
  651.          <button class="button button--primary button--full-width" name="checkout" value="true">Checkout</button>
  652.        </form>
  653.        <button type="button" class="link button-label">Continue shopping</button>
  654.      </div>
  655.    </div>
  656.  </div>
  657. </cart-notification>
  658. <style>
  659.  .cart-notification {
  660.     display: none;
  661.  }
  662. </style>
  663. <script>
  664. document.getElementById('cart-notification-form').addEventListener('submit',(event)=>{
  665.  if(event.submitter) event.submitter.classList.add('loading');
  666. })
  667.  
  668. </script>
  669.  
  670. </div>
  671.  
  672.  
  673. <script>
  674.  
  675.  class StickyHeader extends HTMLElement {
  676.    constructor() {
  677.      super();
  678.    }
  679.  
  680.    connectedCallback() {
  681.      this.header = document.getElementById('easystore-section-header');
  682.      this.headerBounds = {};
  683.      this.currentScrollTop = 0;
  684.      this.preventReveal = false;
  685.  
  686.      this.onScrollHandler = this.onScroll.bind(this);
  687.      this.hideHeaderOnScrollUp = () => this.preventReveal = true;
  688.  
  689.      this.addEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp);
  690.      window.addEventListener('scroll', this.onScrollHandler, false);
  691.  
  692.      this.createObserver();
  693.    }
  694.  
  695.    disconnectedCallback() {
  696.      this.removeEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp);
  697.      window.removeEventListener('scroll', this.onScrollHandler);
  698.    }
  699.  
  700.    createObserver() {
  701.      let observer = new IntersectionObserver((entries, observer) => {
  702.        this.headerBounds = entries[0].intersectionRect;
  703.        observer.disconnect();
  704.      });
  705.  
  706.      observer.observe(this.header);
  707.    }
  708.  
  709.    onScroll() {
  710.      const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
  711.  
  712.      if (scrollTop > this.currentScrollTop && scrollTop > this.headerBounds.bottom) {
  713.        requestAnimationFrame(this.hide.bind(this));
  714.      } else if (scrollTop < this.currentScrollTop && scrollTop > this.headerBounds.bottom) {
  715.        if (!this.preventReveal) {
  716.          requestAnimationFrame(this.reveal.bind(this));
  717.        } else {
  718.          window.clearTimeout(this.isScrolling);
  719.  
  720.          this.isScrolling = setTimeout(() => {
  721.            this.preventReveal = false;
  722.          }, 66);
  723.  
  724.          requestAnimationFrame(this.hide.bind(this));
  725.        }
  726.      } else if (scrollTop <= this.headerBounds.top) {
  727.        requestAnimationFrame(this.reset.bind(this));
  728.      }
  729.  
  730.  
  731.      this.currentScrollTop = scrollTop;
  732.    }
  733.  
  734.    hide() {
  735.      this.header.classList.add('easystore-section-header-hidden', 'easystore-section-header-sticky');
  736.      this.closeMenuDisclosure();
  737.      // this.closeSearchModal();
  738.    }
  739.  
  740.    reveal() {
  741.      this.header.classList.add('easystore-section-header-sticky', 'animate');
  742.      this.header.classList.remove('easystore-section-header-hidden');
  743.    }
  744.  
  745.    reset() {
  746.      this.header.classList.remove('easystore-section-header-hidden', 'easystore-section-header-sticky', 'animate');
  747.    }
  748.  
  749.    closeMenuDisclosure() {
  750.      this.disclosures = this.disclosures || this.header.querySelectorAll('details-disclosure');
  751.      this.disclosures.forEach(disclosure => disclosure.close());
  752.    }
  753.  
  754.    // closeSearchModal() {
  755.    //   this.searchModal = this.searchModal || this.header.querySelector('details-modal');
  756.    //   this.searchModal.close(false);
  757.    // }
  758.  }
  759.  
  760.  customElements.define('sticky-header', StickyHeader);
  761.  
  762.  
  763.  class DetailsDisclosure extends HTMLElement{
  764.    constructor() {
  765.      super();
  766.      this.mainDetailsToggle = this.querySelector('details');
  767.      // this.mainDetailsToggle.addEventListener('focusout', this.onFocusOut.bind(this));
  768.      this.mainDetailsToggle.addEventListener('mouseover', this.open.bind(this));
  769.      this.mainDetailsToggle.addEventListener('mouseleave', this.close.bind(this));
  770.    }
  771.  
  772.    onFocusOut() {
  773.      setTimeout(() => {
  774.        if (!this.contains(document.activeElement)) this.close();
  775.      })
  776.    }
  777.  
  778.    open() {
  779.      this.mainDetailsToggle.setAttribute('open',1)
  780.    }
  781.  
  782.    close() {
  783.      this.mainDetailsToggle.removeAttribute('open')
  784.    }
  785.  }
  786.  
  787.  customElements.define('details-disclosure', DetailsDisclosure);
  788.  
  789.  function clearAll() {
  790.    localStorage.removeItem('searchHistory');
  791.    
  792.    var customer = "";
  793.    if(customer) {
  794.      // Your logic to clear all data or call an endpoint
  795.      fetch('/account/search_histories', {
  796.          method: 'DELETE',
  797.          headers: {
  798.            "Content-Type": "application/json",
  799.            "X-Requested-With": "XMLHttpRequest"
  800.          },
  801.          body: JSON.stringify({
  802.            _token: "pU0PSxftXGMWu8q5Xc6IYHAj3bWNT26ZKyAu3lIE"
  803.          }),
  804.      })
  805.      .then(response => response.json())
  806.    }
  807.  }
  808.  // End - delete search history from local storage
  809.  
  810.  // search history dropdown  
  811.  var searchInputs = document.querySelectorAll('.search__input');
  812.  
  813.  if(searchInputs.length > 0) {
  814.    
  815.    searchInputs.forEach((searchInput)=> {
  816.    
  817.      searchInput.addEventListener('focus', function() {
  818.        var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown');
  819.        searchDropdown.innerHTML = ''; // Clear existing items
  820.  
  821.        // retrieve data from local storage
  822.        var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || [];
  823.  
  824.        // Convert JSON to string
  825.        var search_history_json = JSON.stringify(searchHistoryData);
  826.  
  827.        // Set the value of the hidden input
  828.        searchInput.closest('form').querySelector(".hidden_search_history").value = search_history_json;
  829.  
  830.        // create dropdown items
  831.        var clearAllItem = document.createElement('div');
  832.        clearAllItem.className = 'dropdown-item clear-all';
  833.        clearAllItem.textContent = 'Clear';
  834.        clearAllItem.addEventListener('click', function() {
  835.          clearAll();
  836.          searchDropdown.style.display = 'none';
  837.          searchInput.classList.remove('is-focus');
  838.        });
  839.        searchDropdown.appendChild(clearAllItem);
  840.  
  841.        // create dropdown items
  842.        searchHistoryData.forEach(function(item) {
  843.          var dropdownItem = document.createElement('div');
  844.          dropdownItem.className = 'dropdown-item';
  845.          dropdownItem.textContent = item.term;
  846.          dropdownItem.addEventListener('click', function() {
  847.            searchInput.value = item.term;
  848.            searchInput.closest('form').submit();
  849.            searchDropdown.style.display = 'none';
  850.          });
  851.          searchDropdown.appendChild(dropdownItem);
  852.        });
  853.  
  854.        if(searchHistoryData.length > 0){
  855.          // display the dropdown
  856.          searchInput.classList.add('is-focus');
  857.          document.body.classList.add('search-input-focus');
  858.          searchDropdown.style.display = 'block';
  859.        }
  860.      });
  861.  
  862.      searchInput.addEventListener("focusout", (event) => {
  863.        var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown');
  864.        searchInput.classList.remove('is-focus');
  865.        searchDropdown.classList.add('transparent');
  866.        setTimeout(()=>{
  867.          searchDropdown.style.display = 'none';
  868.          searchDropdown.classList.remove('transparent');
  869.          document.body.classList.remove('search-input-focus');
  870.        }, 400);
  871.      });
  872.    })
  873.  }
  874.  // End - search history dropdown
  875. </script>
  876.  
  877.  
  878.  <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1">
  879.    
  880.    
  881. <!-- <link href="https://themes.easystore.co/63057/assets/component-rte.css?t=1716787059" rel="stylesheet" type="text/css" media="screen" /> -->
  882. <link rel="preload" href="https://themes.easystore.co/63057/assets/section-main-product.css?t=1716787059" as="style" onload="this.onload=null;this.rel='stylesheet'">
  883. <link rel="preload" href="https://themes.easystore.co/63057/assets/component-price.css?t=1716787059" as="style" onload="this.onload=null;this.rel='stylesheet'">
  884.  
  885. <style>
  886.  .product-wrapper_color{
  887.    background-color: rgba(245, 245, 245, 1);
  888.    padding: 30px;
  889.    border-radius: 20px;
  890.  }
  891.  .product-card-wrapper{
  892.    background-color: rgba(245, 245, 245, 1);
  893.  }
  894. </style>
  895.  
  896. <link rel="preload" href="https://themes.easystore.co/63057/assets/component-slider.css?t=1716787059" as="style" onload="this.onload=null;this.rel='stylesheet'">
  897. <script src="https://themes.easystore.co/63057/assets/product-form.js?t=1716787059" defer="defer"></script>
  898.  
  899.  
  900. <section class="product-section page-width spaced-section">
  901.  
  902.  <div class="product grid grid--1-col grid--2-col-tablet">
  903.    
  904.    
  905.  
  906.      <div class="grid__item product__media-wrapper text-center">
  907.        
  908.        <img src="/assets/images/products/no_image.png" alt="Empty Image">
  909.      </div>
  910.  
  911.    
  912.  
  913.  
  914.    <div class="grid__item product__info-wrapper">
  915.      <div id="ProductInfo" class="product__info-container product__info-container--sticky">
  916.        <div class="product-wrapper_color">
  917.          
  918.  
  919.          <h1 class="product__title">
  920.            VitaMarketingRadar
  921.          </h1>
  922.  
  923.          <!-- price -->
  924.          <div id="price">
  925.            
  926.  
  927. <div class="price
  928.   price--large
  929.  
  930.   price--on-sale "
  931.  data-expires="">
  932.  
  933.  <dl>
  934.    <div class="price__regular">
  935.      <dt>
  936.        <span class="visually-hidden visually-hidden--inline">Regular price</span>
  937.      </dt>
  938.      <dd >
  939.        <span class="price-item price-item--regular">
  940.          
  941.            
  942.  
  943.    <span class=money data-ori-price='50.00'>$ 50.00 </span>
  944.  
  945.  
  946.          
  947.        </span>
  948.      </dd>
  949.    </div>
  950.    <div class="price__sale">
  951.      <dt>
  952.        <span class="visually-hidden visually-hidden--inline">Sale price</span>
  953.      </dt>
  954.      <dd >
  955.        <span id="ProductPrice" class="price-item price-item--sale">
  956.          
  957.            
  958.  
  959.    <span class=money data-ori-price='50.00'>$ 50.00 </span>
  960.  
  961.  
  962.          
  963.        </span>
  964.      </dd>
  965.      
  966.      <dt class="price__compare">
  967.        <span class="visually-hidden visually-hidden--inline">Regular price</span>
  968.      </dt>
  969.      <dd class="price__compare">
  970.        <s class="price-item price-item--regular">
  971.          
  972.            <span class=money data-ori-price='100.00'>$ 100.00 </span>
  973.          
  974.          
  975.        </s>
  976.      </dd>
  977.      
  978.    </div>
  979.  </dl>
  980.  
  981.    <span class="badge price__badge-sale color-accent-2" aria-hidden="true">
  982.      Sale
  983.    </span>
  984.  
  985.    <span class="badge price__badge-sold-out" aria-hidden="true">
  986.      Sold Out
  987.    </span>
  988.  
  989. </div>
  990.  
  991.          </div>
  992.  
  993.          <div class="product_upsell-info">
  994.            
  995.              
  996.              
  997.              <div class="product_upsell-box">
  998.                
  999.                  <div class="product_upsell-icon">
  1000.                    <img src="https://cdn.store-assets.com/s/943101/f/8656454.png" alt="Free worldwide shipping | Technave">
  1001.                  </div>
  1002.                
  1003.                
  1004.                  <div class="product_upsell-text">
  1005.                    Free worldwide shipping
  1006.                  </div>
  1007.                
  1008.              </div>
  1009.            
  1010.              
  1011.              
  1012.              <div class="product_upsell-box">
  1013.                
  1014.                  <div class="product_upsell-icon">
  1015.                    <img src="https://cdn.store-assets.com/s/943101/f/8656465.png" alt="Secure payments | Technave">
  1016.                  </div>
  1017.                
  1018.                
  1019.                  <div class="product_upsell-text">
  1020.                    Secure payments
  1021.                  </div>
  1022.                
  1023.              </div>
  1024.            
  1025.              
  1026.              
  1027.              <div class="product_upsell-box">
  1028.                
  1029.                  <div class="product_upsell-icon">
  1030.                    <img src="https://cdn.store-assets.com/s/943101/f/8656462.png" alt="7 Days Free Return | Technave">
  1031.                  </div>
  1032.                
  1033.                
  1034.                  <div class="product_upsell-text">
  1035.                    7 Days Free Return
  1036.                  </div>
  1037.                
  1038.              </div>
  1039.            
  1040.          </div>
  1041.  
  1042.          <product-form class="product-form">
  1043.            <form action="/cart/add" method="post" enctype="multipart/form-data" data-addtocart='{"id":11378407,"name":"VitaMarketingRadar","sku":"","price":50.0,"quantity":1,"variant":"Default Title","category":"Feature on homepage","brands":""}' id="AddToCartForm">
  1044.  
  1045.              <style>
  1046. .sf_promo-promo-label, #sf_promo-view-more-tag, .sf_promo-label-unclickable:hover {
  1047.    color: #4089e4
  1048. }
  1049. </style>
  1050. <div class="sf_promo-tag-wrapper">
  1051.    <div id="sf_promo-tag-label"></div>
  1052.    <div class="sf_promo-tag-container">
  1053.        <div id="sf_promo-tag"></div>
  1054.        <a id="sf_promo-view-more-tag" class="sf_promo-promo-label hide" onclick="getPromotionList(true)">View More</a>
  1055.    </div>
  1056. </div>
  1057.  
  1058.  
  1059.              <select name="id" id="productSelect" class="hide">
  1060.                
  1061.                  
  1062.  
  1063.                    <option  selected="selected"  data-sku="" value="52556718">Default Title - <span class=money data-ori-price='5,000.00'>$ 5,000.00 </span></option>
  1064.  
  1065.                  
  1066.                
  1067.              </select>
  1068.  
  1069.              
  1070.  
  1071.              <!-- quantity_selector -->
  1072.              <div class="product-form__input product-form__quantity">
  1073.                <label class="form__label" for="Quantity">
  1074.                  Quantity
  1075.                </label>
  1076.  
  1077.                <quantity-input class="quantity">
  1078.                  <button class="quantity__button no-js-hidden" name="minus" type="button">
  1079.                    
  1080.  
  1081.  
  1082.    <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-minus " fill="none" viewBox="0 0 10 2">
  1083.      <path fill-rule="evenodd" clip-rule="evenodd" d="M.5 1C.5.7.7.5 1 .5h8a.5.5 0 110 1H1A.5.5 0 01.5 1z" fill="currentColor"></path>
  1084.    </svg>
  1085.  
  1086.  
  1087.  
  1088.                  </button>
  1089.                  <input class="quantity__input"
  1090.                      type="number"
  1091.                      name="quantity"
  1092.                      id="Quantity"
  1093.                      min="1"
  1094.                      value="1"
  1095.                    >
  1096.                  <button class="quantity__button no-js-hidden" name="plus" type="button">
  1097.                    
  1098.  
  1099.  
  1100.    <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus " fill="none" viewBox="0 0 10 10">
  1101.      <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"></path>
  1102.    </svg>
  1103.  
  1104.  
  1105.  
  1106.                  </button>
  1107.                </quantity-input>
  1108.              </div>
  1109.  
  1110.  
  1111.              <div class="product-form__buttons">
  1112.  
  1113.                
  1114.  
  1115.                <button
  1116.                  type="submit"
  1117.                  name="add"
  1118.                  id="AddToCart"
  1119.                  class="product-form__submit button button--full-width button--primary btn--radius"
  1120.                
  1121.                >
  1122.                    
  1123.                      Add to Cart
  1124.                    
  1125.                </button>
  1126.  
  1127.                
  1128.  
  1129.              </div>
  1130.              
  1131.              <div class="form__message hidden" tabindex="-1" autofocus>
  1132.                <span class="visually-hidden">accessibility.error </span>
  1133.                
  1134.  
  1135.  
  1136.    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-error " viewBox="0 0 13 13">
  1137.      <circle cx="6.5" cy="6.50049" r="5.5" stroke="white" stroke-width="2"/>
  1138.      <circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width="0.7"/>
  1139.      <path d="M5.87413 3.52832L5.97439 7.57216H7.02713L7.12739 3.52832H5.87413ZM6.50076 9.66091C6.88091 9.66091 7.18169 9.37267 7.18169 9.00504C7.18169 8.63742 6.88091 8.34917 6.50076 8.34917C6.12061 8.34917 5.81982 8.63742 5.81982 9.00504C5.81982 9.37267 6.12061 9.66091 6.50076 9.66091Z" fill="white"/>
  1140.      <path d="M5.87413 3.17832H5.51535L5.52424 3.537L5.6245 7.58083L5.63296 7.92216H5.97439H7.02713H7.36856L7.37702 7.58083L7.47728 3.537L7.48617 3.17832H7.12739H5.87413ZM6.50076 10.0109C7.06121 10.0109 7.5317 9.57872 7.5317 9.00504C7.5317 8.43137 7.06121 7.99918 6.50076 7.99918C5.94031 7.99918 5.46982 8.43137 5.46982 9.00504C5.46982 9.57872 5.94031 10.0109 6.50076 10.0109Z" fill="white" stroke="#EB001B" stroke-width="0.7"/>
  1141.    </svg>
  1142.  
  1143.  
  1144.  
  1145.                <div class="js-error-content"></div>
  1146.              </div>
  1147.  
  1148.            </form>
  1149.          </product-form>
  1150.  
  1151.  
  1152.          <div>
  1153.            
  1154.  
  1155.  
  1156.  
  1157.  
  1158. <share-button class="share-button">
  1159.  <button class="share-button__button hidden">
  1160.    
  1161.      
  1162.  
  1163.  
  1164.    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-share " width="18" height="18" viewBox="0 0 24 24" stroke-width="1" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  1165.      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
  1166.      <circle cx="6" cy="12" r="3" />
  1167.      <circle cx="18" cy="6" r="3" />
  1168.      <circle cx="18" cy="18" r="3" />
  1169.      <line x1="8.7" y1="10.7" x2="15.3" y2="7.3" />
  1170.      <line x1="8.7" y1="13.3" x2="15.3" y2="16.7" />
  1171.    </svg>
  1172.  
  1173.  
  1174.  
  1175.      Share
  1176.    
  1177.  </button>
  1178.  <details>
  1179.    <summary class="share-button__button">
  1180.      
  1181.        
  1182.  
  1183.  
  1184.    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-share " width="18" height="18" viewBox="0 0 24 24" stroke-width="1" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  1185.      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
  1186.      <circle cx="6" cy="12" r="3" />
  1187.      <circle cx="18" cy="6" r="3" />
  1188.      <circle cx="18" cy="18" r="3" />
  1189.      <line x1="8.7" y1="10.7" x2="15.3" y2="7.3" />
  1190.      <line x1="8.7" y1="13.3" x2="15.3" y2="16.7" />
  1191.    </svg>
  1192.  
  1193.  
  1194.  
  1195.        Share
  1196.      
  1197.    </summary>
  1198.    <div id="Product-share-id" class="share-button__fallback motion-reduce ">
  1199.  
  1200.      <div class="social-sharing-icons" data-permalink="https://technave.easy.co/products/vitamarketingradar">
  1201.        <div class="sharing-icons-label"><small>Share it on</small></div>
  1202.  
  1203.        <a target="_blank" href="//www.facebook.com/sharer.php?u=https://technave.easy.co/products/vitamarketingradar" class="share-icon-button">
  1204.          
  1205.  
  1206.  
  1207.    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook "
  1208.    viewBox="0 0 18 18">
  1209.      <path fill="currentColor"
  1210.        d="M16.42.61c.27 0 .5.1.69.28.19.2.28.42.28.7v15.44c0 .27-.1.5-.28.69a.94.94 0 01-.7.28h-4.39v-6.7h2.25l.31-2.65h-2.56v-1.7c0-.4.1-.72.28-.93.18-.2.5-.32 1-.32h1.37V3.35c-.6-.06-1.27-.1-2.01-.1-1.01 0-1.83.3-2.45.9-.62.6-.93 1.44-.93 2.53v1.97H7.04v2.65h2.24V18H.98c-.28 0-.5-.1-.7-.28a.94.94 0 01-.28-.7V1.59c0-.27.1-.5.28-.69a.94.94 0 01.7-.28h15.44z">
  1211.      </path>
  1212.    </svg>
  1213.  
  1214.  
  1215.  
  1216.        </a>
  1217.  
  1218.        <a target="_blank" href="//twitter.com/share?text=VitaMarketingRadar&amp;url=https://technave.easy.co/products/vitamarketingradar" class="share-icon-button">
  1219.          
  1220.  
  1221.  
  1222.    <svg class="icon icon-twitter " viewBox="0 0 22 22" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  1223.      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
  1224.      <path d="M3 3l11.733 16h4.267l-11.733 -16z" />
  1225.      <path d="M3 19l6.768 -6.768m2.46 -2.46l6.772 -6.772" />
  1226.    </svg>
  1227.  
  1228.  
  1229.  
  1230.        </a>
  1231.  
  1232.        
  1233.  
  1234.          <a target="_blank" href="//pinterest.com/pin/create/button/?url=https://technave.easy.co/products/vitamarketingradar&amp;media=/assets/images/products/no_image.png&amp;description=VitaMarketingRadar" class="share-icon-button">
  1235.            
  1236.  
  1237.  
  1238.  <svg class="icon icon-pinterest " xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><g id="Layer_1" data-name="Layer 1"><circle cx="512" cy="512" r="450" fill="transparent"/><path d="M536,962H488.77a23.77,23.77,0,0,0-3.39-.71,432.14,432.14,0,0,1-73.45-10.48c-9-2.07-18-4.52-26.93-6.8a7.6,7.6,0,0,1,.35-1.33c.6-1,1.23-2,1.85-3,18.19-29.57,34.11-60.23,43.17-93.95,7.74-28.83,14.9-57.82,22.3-86.74,2.91-11.38,5.76-22.77,8.77-34.64,2.49,3.55,4.48,6.77,6.83,9.69,15.78,19.58,36.68,31.35,60.16,39,25.41,8.3,51.34,8.07,77.41,4.11C653.11,770,693.24,748.7,726.79,715c32.57-32.73,54.13-72.14,68.33-115.76,12-37,17.81-75.08,19.08-114,1-30.16-1.94-59.73-11.72-88.36C777.38,323.39,728.1,271.81,658,239.82c-45.31-20.67-93.27-28.06-142.89-26.25a391.16,391.16,0,0,0-79.34,10.59c-54.59,13.42-103.37,38.08-143.29,78-61.1,61-91.39,134.14-83.34,221.41,2.3,25,8.13,49.08,18.84,71.86,15.12,32.14,37.78,56.78,71,70.8,11.87,5,20.67.54,23.82-12,2.91-11.56,5.5-23.21,8.88-34.63,2.72-9.19,1.2-16.84-5.15-24-22.84-25.84-31.36-56.83-30.88-90.48A238.71,238.71,0,0,1,300,462.16c10.93-55.27,39.09-99.84,85.3-132.46,33.39-23.56,71-35.54,111.53-38.54,30.47-2.26,60.5,0,89.89,8.75,27.38,8.16,51.78,21.59,71.77,42.17,31.12,32,44.38,71.35,45.61,115.25a383.11,383.11,0,0,1-3.59,61.18c-4.24,32-12.09,63-25.45,92.47-11.37,25.09-26,48-47.45,65.79-23.66,19.61-50.51,28.9-81.43,23.69-34-5.75-57.66-34-57.56-68.44,0-13.46,4.16-26.09,7.8-38.78,8.67-30.19,18-60.2,26.45-90.46,5.26-18.82,9.13-38,6.91-57.8-1.58-14.1-5.77-27.31-15.4-38-16.55-18.4-37.68-22.29-60.75-17-23.26,5.3-39.56,20.36-51.58,40.26-15,24.89-20.26,52.22-19.2,81a179.06,179.06,0,0,0,13.3,62.7,9.39,9.39,0,0,1,.07,5.31c-17.12,72.65-33.92,145.37-51.64,217.87-9.08,37.15-14.72,74.52-13.67,112.8.13,4.55,0,9.11,0,14.05-1.62-.67-3.06-1.22-4.46-1.86A452,452,0,0,1,103.27,700.4,441.83,441.83,0,0,1,63.54,547.58c-.41-5.44-1-10.86-1.54-16.29V492.71c.51-5.3,1.13-10.58,1.52-15.89A436.78,436.78,0,0,1,84,373,451.34,451.34,0,0,1,368.54,85.49a439.38,439.38,0,0,1,108.28-22c5.31-.39,10.59-1,15.89-1.52h38.58c1.64.28,3.26.65,4.9.81,14.34,1.42,28.77,2.2,43,4.3a439.69,439.69,0,0,1,140.52,45.62c57.3,29.93,106.14,70.19,146,121.07Q949,340.12,960.52,474.86c.4,4.64,1,9.27,1.48,13.91v46.46a22.06,22.06,0,0,0-.7,3.36,426.12,426.12,0,0,1-10.51,74.23C930,702,886.41,778.26,819.48,840.65c-75.94,70.81-166,110.69-269.55,119.84C545.29,960.91,540.65,961.49,536,962Z" fill="currentColor"/></g></svg>
  1239.  
  1240.  
  1241.  
  1242.          </a>
  1243.  
  1244.        
  1245.        
  1246.        <a target="_blank" href="//social-plugins.line.me/lineit/share?url=https://technave.easy.co/products/vitamarketingradar" class="share-icon-button">
  1247.          
  1248.  
  1249.  
  1250.    <svg class="icon icon-line " xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024">
  1251.      <g id="Layer_1" data-name="Layer 1"><circle cx="512" cy="512" r="450" fill="currentColor"/>
  1252.        <g id="TYPE_A" data-name="TYPE A">
  1253.          <path d="M811.32,485c0-133.94-134.27-242.9-299.32-242.9S212.68,351,212.68,485c0,120.07,106.48,220.63,250.32,239.65,9.75,2.1,23,6.42,26.37,14.76,3,7.56,2,19.42,1,27.06,0,0-3.51,21.12-4.27,25.63-1.3,7.56-6,29.59,25.93,16.13s172.38-101.5,235.18-173.78h0c43.38-47.57,64.16-95.85,64.16-149.45" fill="#fff"/>
  1254.          <path d="M451.18,420.26h-21a5.84,5.84,0,0,0-5.84,5.82V556.5a5.84,5.84,0,0,0,5.84,5.82h21A5.83,5.83,0,0,0,457,556.5V426.08a5.83,5.83,0,0,0-5.83-5.82" fill="currentColor"/>
  1255.          <path d="M595.69,420.26h-21a5.83,5.83,0,0,0-5.83,5.82v77.48L509.1,422.85a5.39,5.39,0,0,0-.45-.59l0,0a4,4,0,0,0-.35-.36l-.11-.1a3.88,3.88,0,0,0-.31-.26l-.15-.12-.3-.21-.18-.1-.31-.17-.18-.09-.34-.15-.19-.06c-.11-.05-.23-.08-.34-.12l-.21-.05-.33-.07-.25,0a3,3,0,0,0-.31,0l-.3,0H483.26a5.83,5.83,0,0,0-5.83,5.82V556.5a5.83,5.83,0,0,0,5.83,5.82h21a5.83,5.83,0,0,0,5.83-5.82V479l59.85,80.82a5.9,5.9,0,0,0,1.47,1.44l.07,0c.11.08.23.15.35.22l.17.09.28.14.28.12.18.06.39.13.09,0a5.58,5.58,0,0,0,1.49.2h21a5.83,5.83,0,0,0,5.84-5.82V426.08a5.83,5.83,0,0,0-5.84-5.82" fill="currentColor"/>
  1256.          <path d="M400.57,529.66H343.52V426.08a5.81,5.81,0,0,0-5.82-5.82h-21a5.82,5.82,0,0,0-5.83,5.82V556.49h0a5.75,5.75,0,0,0,1.63,4,.34.34,0,0,0,.08.09l.09.08a5.75,5.75,0,0,0,4,1.63h83.88a5.82,5.82,0,0,0,5.82-5.83v-21a5.82,5.82,0,0,0-5.82-5.83" fill="currentColor"/>
  1257.          <path d="M711.64,452.91a5.81,5.81,0,0,0,5.82-5.83v-21a5.82,5.82,0,0,0-5.82-5.83H627.76a5.79,5.79,0,0,0-4,1.64l-.06.06-.1.11a5.8,5.8,0,0,0-1.61,4h0v130.4h0a5.75,5.75,0,0,0,1.63,4,.34.34,0,0,0,.08.09l.08.08a5.78,5.78,0,0,0,4,1.63h83.88a5.82,5.82,0,0,0,5.82-5.83v-21a5.82,5.82,0,0,0-5.82-5.83h-57v-22h57a5.82,5.82,0,0,0,5.82-5.84v-21a5.82,5.82,0,0,0-5.82-5.83h-57v-22Z" fill="currentColor"/>
  1258.        </g>
  1259.      </g>
  1260.    </svg>
  1261.  
  1262.  
  1263.  
  1264.        </a>
  1265.  
  1266.        
  1267.      </div>
  1268.  
  1269.      <div class="share-button_copy-wrapper">
  1270.        <div class="field">
  1271.          <span id="ShareMessage-id" class="share-button__message hidden" role="status">
  1272.          </span>
  1273.          <input type="text"
  1274.                class="field__input"
  1275.                id="url"
  1276.                value="https://technave.easy.co/products/vitamarketingradar"
  1277.                placeholder="Link"
  1278.                onclick="this.select();"
  1279.                readonly
  1280.          >
  1281.          <label class="field__label" for="url">Link</label>
  1282.        </div>
  1283.        <button class="share-button__close hidden no-js-hidden">
  1284.          
  1285.  
  1286.  
  1287.    <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg>
  1288.  
  1289.  
  1290.  
  1291.          <span class="visually-hidden">general.share.close</span>
  1292.        </button>
  1293.        <button class="share-button__copy no-js-hidden">
  1294.          
  1295.  
  1296.  
  1297.    <svg class="icon icon-clipboard " width="11" height="13" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewBox="0 0 11 13">
  1298.      <path fill-rule="evenodd" clip-rule="evenodd" d="M2 1a1 1 0 011-1h7a1 1 0 011 1v9a1 1 0 01-1 1V1H2zM1 2a1 1 0 00-1 1v9a1 1 0 001 1h7a1 1 0 001-1V3a1 1 0 00-1-1H1zm0 10V3h7v9H1z" fill="currentColor"/>
  1299.    </svg>
  1300.  
  1301.  
  1302.  
  1303.          <span class="visually-hidden">general.share.copy_to_clipboard</span>
  1304.        </button>
  1305.      </div>
  1306.      
  1307.    </div>
  1308.    <div class="modal-overlay float-bottom-modal-overlay large-up-hide"></div>
  1309.  </details>
  1310. </share-button>
  1311. <script src="https://themes.easystore.co/63057/assets/share.js?t=1716787059" defer="defer"></script>
  1312.  
  1313.  
  1314.  
  1315.          </div>
  1316.  
  1317.        
  1318.        </div>
  1319.  
  1320.        <link href="/assets/css/promotion.css?v2.91" rel="stylesheet" type="text/css" media="screen" />
  1321. <style>
  1322. .sf_promo-ribbon{
  1323.  color: #4089e4;
  1324.  background-color: #4089e4
  1325. }
  1326. .sf_promo-ribbon-text,
  1327. .sf_promo-ribbon-text span{
  1328.  color: #fff;
  1329.  color: #fff;
  1330. }
  1331.  
  1332. </style>
  1333.  
  1334.  
  1335.  <div id="promotion-section" class="sf_promo-container">
  1336.    <div id="sf_promo-container" >
  1337.    </div>
  1338.    <div class="text-center">
  1339.      <button id="get-more-promotion" class="btn btn--secondary hide" onclick="getPromotionList(true)">View More</button>
  1340.    </div>
  1341.  </div>
  1342.  <div class="text-center">
  1343.    <button id="view-more-promotion" class="btn btn--secondary hide" onclick="expandPromoSection()">View More</button>
  1344.  </div>
  1345.  
  1346.  
  1347. <script>var shop_money_format = "<span class=money data-ori-price='{{amount}}'>$ {{amount}} </span>";</script>
  1348. <script src="/assets/js/promotion/promotion.js?v1.11" type="text/javascript"></script>
  1349.  
  1350. <script>
  1351.  
  1352.  var param = {limit:5, page:1};
  1353.  
  1354.  function getPromotionList(load_more){
  1355.  
  1356.    var element = document.getElementById("sf_promo-container"),
  1357.        promo_section = document.getElementById("promotion-section"),
  1358.        promo_btn = document.getElementById("get-more-promotion"),
  1359.        view_more_btn = document.getElementById("view-more-promotion"),
  1360.        view_more_tag_btn = document.getElementById("sf_promo-view-more-tag"),
  1361.        page_value = parseInt(param.page);
  1362.  
  1363.    if(load_more) {
  1364.      view_more_tag_btn.classList.add("sf_promo-is-loading");
  1365.      promo_btn.classList.add("btn--loading");
  1366.    }
  1367.  
  1368.    $.ajax({
  1369.      type: "GET",
  1370.      data: param,
  1371.      dataType: 'json',
  1372.      url: "/products/vitamarketingradar/promotions",
  1373.      success: function(response){
  1374.  
  1375.        document.getElementById("sf_promo-container").innerHTML += response.html;
  1376.  
  1377.  
  1378.        var promotion_tag_html = "";
  1379.        var promotion_tag_label_html = "";
  1380.  
  1381.        var total_addon_discount = 0;
  1382.  
  1383.        if(response.data.total_promotions > 0){
  1384.          promotion_tag_label_html += `<div style="display:block;"><label>Promotions</label></div>`;
  1385.  
  1386.          for (let promotion of response.data.promotions) {
  1387.            var label_class = "sf_promo-label-clickable",
  1388.                svg_icon = "";
  1389.            if(promotion.prerequisite_subtotal_range != null || promotion.prerequisite_to_entitlement_quantity_ratio == null) {
  1390.              label_class = "sf_promo-label-unclickable";
  1391.            }else{
  1392.              total_addon_discount += 1
  1393.              svg_icon = `<svg class="sf_promo-svg-icon" xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-right" viewBox="0 0 24 24" stroke-width="2.8" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  1394.                            <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
  1395.                            <polyline points="9 6 15 12 9 18" />
  1396.                          </svg>`;
  1397.            }
  1398.            promotion_tag_html +=
  1399.            ` <a onclick="promoScrollToView('${promotion.id}')" class="sf_promo-promo-label ${label_class}">
  1400.                <b class="sf_promo-tag-label-title">${promotion.title.replace('&', '&amp;').replace('>','&gt;').replace('<','&lt;').replace('/','&sol;').replace('“', '&quot;').replace("'","&#39;") }</b>${svg_icon}
  1401.              </a>
  1402.            `;
  1403.          }
  1404.        }
  1405.  
  1406.        if(total_addon_discount > 1 && !load_more){
  1407.          promo_section.classList.add('sf_promo-container-height-opacity','sf_promo-container-white-gradient')
  1408.          view_more_btn.classList.remove("hide");
  1409.        }else{
  1410.          promo_section.classList.remove('sf_promo-container-height-opacity','sf_promo-container-white-gradient')
  1411.          view_more_btn.classList.add("hide");
  1412.        }
  1413.  
  1414.        if(response.data.page_count > param.page) {
  1415.          view_more_tag_btn.classList.remove("hide");
  1416.          promo_btn.classList.remove("hide");
  1417.        }else{
  1418.          view_more_tag_btn.classList.add("hide");
  1419.          promo_btn.classList.add("hide");
  1420.        }
  1421.  
  1422.        document.getElementById("sf_promo-tag-label").innerHTML = promotion_tag_label_html;
  1423.        document.getElementById("sf_promo-tag").innerHTML += promotion_tag_html;
  1424.  
  1425.        view_more_tag_btn.classList.remove("sf_promo-is-loading");
  1426.        promo_btn.classList.remove("btn--loading");
  1427.  
  1428.  
  1429.        promoVariantDetailInitial()
  1430.  
  1431.        page_value = isNaN(page_value) ? 0 : page_value;
  1432.        page_value++;
  1433.  
  1434.        param.page = page_value;
  1435.      },
  1436.      error: function(xhr){
  1437.  
  1438.      }
  1439.    });
  1440.  }
  1441.  
  1442.  var is_show_product_page = "1"
  1443.  
  1444.  if(is_show_product_page){
  1445.    getPromotionList();
  1446.  }
  1447. </script>
  1448.  
  1449.  
  1450.        
  1451.  
  1452.  
  1453.      </div>
  1454.      
  1455.    </div>
  1456.  </div>
  1457.  
  1458.  
  1459.  
  1460.  
  1461.  
  1462.  <!-- The Modal -->
  1463.  <div id="product-modal" class="modal hide">
  1464.    <span class="js-image-modal-close product-media-modal__toggle product-modal-close">
  1465.  
  1466.  
  1467.    <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg>
  1468.  
  1469.  
  1470. </span>
  1471.    <img class="modal-content" id="modal-img">
  1472.  </div>
  1473.  
  1474. </section>
  1475.  
  1476.  
  1477.  <section class="product-section page-width spaced-section">
  1478.    <div id="recommend-products-content" class="wrapper"></div>
  1479.  
  1480. <script>
  1481.  console.log("Product recommendation enabled.");
  1482.  
  1483.  const url_params = new URLSearchParams(window.location.search);
  1484.  
  1485.  fetch(`/products/vitamarketingradar/recommend?${url_params.toString()}`, {
  1486.      method: 'GET'
  1487.    })
  1488.    .then(response => response.json())
  1489.    .then((res) => {
  1490.      if(res.status == "success"){
  1491.        console.log("Success");
  1492.        document.querySelector('#recommend-products-content').innerHTML = res.html;
  1493.        EasyStore.Currencies.convertAll()
  1494.      }
  1495.      else{
  1496.        console.log("Not Success");
  1497.      }
  1498.    })
  1499.  
  1500. </script>
  1501.  </section>
  1502.  
  1503.  
  1504.  
  1505. <script>
  1506.  let this_el = document.querySelector.bind(document),
  1507.      all_this_el = document.querySelectorAll.bind(document),
  1508.      is_variants_initial = false,
  1509.      variants = [{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null}],
  1510.      variants_unavailable = variants.filter(value => value.available == false);
  1511.  
  1512.  window.onload = (event) => {
  1513.    document.getElementById("main-image-wrapper").scrollTo({left: 0, behavior: "smooth"});
  1514.  };
  1515.  
  1516.  document.addEventListener( 'DOMContentLoaded', function() {
  1517.  
  1518.    var selectCallback = function(variant, selector) {
  1519.      console.log('variant, selector',variant, selector);
  1520.      VariantSelector.onVariantChange(variant);
  1521.      if(variants_unavailable && variants_unavailable.length > 0 && VariantSelector.updateVariantsUnavailable) VariantSelector.updateVariantsUnavailable(variants,variants_unavailable);
  1522.      
  1523.      var img_wrapper = document.getElementById("main-image-wrapper");
  1524.      if(variant.featured_image != null && variant.featured_image.id && is_variants_initial){
  1525.        const img_item = document.getElementById("image-item-" + variant.featured_image.id);
  1526.        img_wrapper.insertAdjacentElement("afterbegin", img_item);
  1527.        img_wrapper.scrollTo({left: 0, behavior: "smooth"});
  1528.      }
  1529.      is_variants_initial = true
  1530.    }
  1531.  
  1532.    EasyStore.OptionSelectorsNew.create('productSelect', 'radio', {
  1533.        product: {"id":11378407,"handle":"vitamarketingradar","name":"VitaMarketingRadar","title":"VitaMarketingRadar","url":"\/products\/vitamarketingradar","price":50,"price_min":"50.0","price_max":"50.0","price_varies":false,"compare_at_price":100,"compare_at_price_min":"100.0","compare_at_price_max":"100.0","compare_at_price_varies":false,"available":true,"options_with_values":[],"options_by_name":[],"options":["Title"],"has_only_default_variant":true,"sole_variant_id":52556718,"variants":[{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null}],"selected_variant":{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"first_available_variant":{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"selected_or_first_available_variant":{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"img_url":"\/assets\/images\/products\/no_image.png","featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[],"media":[],"featured_media":null,"metafields":[],"expires":null,"published_at":"2024-02-15T10:47:28.000+05:00","created_at":"2024-02-15T10:47:28.000+05:00","is_wishlisted":null,"content":null,"description":null,"meta_description":null,"brands":[],"tags":[],"vendor":null,"collections":[{"handle":"feature-on-homepage","title":"Feature on homepage"}],"view_history":{"product_id":11378407,"viewed_at":"2024-05-28T22:00:33.960+05:00"},"promotions":[]},
  1534.        onVariantSelected: selectCallback,
  1535.        enableHistoryState: false
  1536.    })
  1537.  
  1538.    //modal
  1539.    var product_modal = document.getElementById("product-modal");
  1540.    const body = document.querySelector("body");
  1541.    all_this_el('.js-image-modal-toggle').forEach(imgModal => imgModal.addEventListener("click", (event)=>{
  1542.      var modalImg = document.getElementById("modal-img");
  1543.      product_modal.classList.remove("hide");
  1544.      product_modal.classList.add("show");
  1545.      modalImg.src = imgModal.src;
  1546.      if (product_modal.classList.contains("show")) {
  1547.          // Disable scroll
  1548.          body.style.overflow = "hidden";
  1549.      }
  1550.    }))
  1551.  
  1552.    // close modal
  1553.    var modal_close = document.getElementsByClassName("product-modal-close")[0];
  1554.    modal_close.onclick = function() {
  1555.      product_modal.classList.add("hide");
  1556.      if (product_modal.classList.contains("hide")) {
  1557.          // Disable scroll
  1558.          body.style.overflow = "";
  1559.      }
  1560.    }
  1561.    window.onclick = function(event) {
  1562.    if (event.target == product_modal) {
  1563.        product_modal.classList.add("hide");
  1564.        body.style.overflow = "";
  1565.      }
  1566.    }
  1567.  
  1568.  
  1569.  } );
  1570.    
  1571.  // retrieve & store view history in local storage
  1572.  var productViewHistoryData = [];
  1573.  var storedProductViewHistory = localStorage.getItem('productViewHistory');
  1574.  
  1575.  if(storedProductViewHistory !== null) {
  1576.      productViewHistoryData = JSON.parse(storedProductViewHistory);
  1577.  }
  1578.  
  1579.  if(productViewHistoryData.length > 0) {
  1580.    var currentViewedProduct = {"product_id":11378407,"viewed_at":"2024-05-28T22:00:33.960+05:00"}
  1581.    var currentViewedAt = new Date(currentViewedProduct.viewed_at);
  1582.    var matchProductID = false;
  1583.  
  1584.    productViewHistoryData.forEach(data => {
  1585.      // Check if product_id is similar
  1586.      if (data.product_id == currentViewedProduct.product_id) {
  1587.        var previousViewedAt = new Date(data.viewed_at);
  1588.        if (currentViewedAt > previousViewedAt) {
  1589.          data.viewed_at = currentViewedProduct.viewed_at;
  1590.        }
  1591.        matchProductID = true;
  1592.      }
  1593.    });
  1594.  
  1595.    // sort "viewed_at" desc
  1596.    productViewHistoryData.sort((a, b) => {
  1597.      var viewedAt1 = new Date(a.viewed_at);
  1598.      var viewedAt2 = new Date(b.viewed_at);
  1599.      return viewedAt2 - viewedAt1;
  1600.    });
  1601.  
  1602.    if (!matchProductID) {
  1603.      productViewHistoryData.unshift(currentViewedProduct);
  1604.    }
  1605.  }
  1606.  else {
  1607.      productViewHistoryData.push({"product_id":11378407,"viewed_at":"2024-05-28T22:00:33.960+05:00"});
  1608.  }
  1609.  
  1610.  productViewHistoryData = JSON.stringify(productViewHistoryData);
  1611.  localStorage.setItem('productViewHistory', productViewHistoryData);
  1612.  
  1613.  // End - retrieve & store view history in local storage
  1614.    
  1615. </script>
  1616.  
  1617.  
  1618.  
  1619.  
  1620.    
  1621.  </main>
  1622. <style>
  1623.  .footer{
  1624.    background-color: #010517;
  1625.    color: #FEFEFE;
  1626.    --color-foreground: 254,254,254;
  1627.  }
  1628.  .footer .link--text,
  1629.  .footer .list-menu__item--link,
  1630.  .footer .footer-block__details-content .list-menu__item--link{
  1631.    color: #FEFEFE;
  1632.  }
  1633.  .footer-block__heading{
  1634.    color: #FFFFFF;
  1635.  }
  1636. </style>
  1637.  
  1638. <link rel="preload" href="https://themes.easystore.co/63057/assets/section-footer.css?t=1716787059" as="style" onload="this.onload=null;this.rel='stylesheet'">
  1639.  
  1640. <footer class="footer color-background-1">
  1641.  <div class="footer__content-top page-width">
  1642.    <div class="grid grid--1-col grid--4-col-tablet ">
  1643.      
  1644.      
  1645.      
  1646.        <div class="grid__item">
  1647.          
  1648.              <h2 class="footer-block__heading">Follow us</h2>
  1649.              <ul class="footer__list-social list-unstyled list-social footer-block__details-content" role="list">
  1650.                
  1651.                  <li class="list-social__item">
  1652.                    <a href="https://twitter.com/" class="link link--text list-social__link">
  1653.                      
  1654.  
  1655.  
  1656.    <svg class="icon icon-twitter " viewBox="0 0 22 22" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  1657.      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
  1658.      <path d="M3 3l11.733 16h4.267l-11.733 -16z" />
  1659.      <path d="M3 19l6.768 -6.768m2.46 -2.46l6.772 -6.772" />
  1660.    </svg>
  1661.  
  1662.  
  1663.  
  1664.                    </a>
  1665.                  </li>
  1666.                
  1667.                
  1668.                  <li class="list-social__item">
  1669.                    <a href="https://facebook.com/" class="link link--text list-social__link">
  1670.                      
  1671.  
  1672.  
  1673.    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook "
  1674.    viewBox="0 0 18 18">
  1675.      <path fill="currentColor"
  1676.        d="M16.42.61c.27 0 .5.1.69.28.19.2.28.42.28.7v15.44c0 .27-.1.5-.28.69a.94.94 0 01-.7.28h-4.39v-6.7h2.25l.31-2.65h-2.56v-1.7c0-.4.1-.72.28-.93.18-.2.5-.32 1-.32h1.37V3.35c-.6-.06-1.27-.1-2.01-.1-1.01 0-1.83.3-2.45.9-.62.6-.93 1.44-.93 2.53v1.97H7.04v2.65h2.24V18H.98c-.28 0-.5-.1-.7-.28a.94.94 0 01-.28-.7V1.59c0-.27.1-.5.28-.69a.94.94 0 01.7-.28h15.44z">
  1677.      </path>
  1678.    </svg>
  1679.  
  1680.  
  1681.  
  1682.                    </a>
  1683.                  </li>
  1684.                
  1685.                
  1686.                  <li class="list-social__item">
  1687.                    <a href="https://instagram.com/" class="link link--text list-social__link">
  1688.                      
  1689.  
  1690.  
  1691.    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram "
  1692.    viewBox="0 0 18 18">
  1693.      <path fill="currentColor"
  1694.        d="M8.77 1.58c2.34 0 2.62.01 3.54.05.86.04 1.32.18 1.63.3.41.17.7.35 1.01.66.3.3.5.6.65 1 .12.32.27.78.3 1.64.05.92.06 1.2.06 3.54s-.01 2.62-.05 3.54a4.79 4.79 0 01-.3 1.63c-.17.41-.35.7-.66 1.01-.3.3-.6.5-1.01.66-.31.12-.77.26-1.63.3-.92.04-1.2.05-3.54.05s-2.62 0-3.55-.05a4.79 4.79 0 01-1.62-.3c-.42-.16-.7-.35-1.01-.66-.31-.3-.5-.6-.66-1a4.87 4.87 0 01-.3-1.64c-.04-.92-.05-1.2-.05-3.54s0-2.62.05-3.54c.04-.86.18-1.32.3-1.63.16-.41.35-.7.66-1.01.3-.3.6-.5 1-.65.32-.12.78-.27 1.63-.3.93-.05 1.2-.06 3.55-.06zm0-1.58C6.39 0 6.09.01 5.15.05c-.93.04-1.57.2-2.13.4-.57.23-1.06.54-1.55 1.02C1 1.96.7 2.45.46 3.02c-.22.56-.37 1.2-.4 2.13C0 6.1 0 6.4 0 8.77s.01 2.68.05 3.61c.04.94.2 1.57.4 2.13.23.58.54 1.07 1.02 1.56.49.48.98.78 1.55 1.01.56.22 1.2.37 2.13.4.94.05 1.24.06 3.62.06 2.39 0 2.68-.01 3.62-.05.93-.04 1.57-.2 2.13-.41a4.27 4.27 0 001.55-1.01c.49-.49.79-.98 1.01-1.56.22-.55.37-1.19.41-2.13.04-.93.05-1.23.05-3.61 0-2.39 0-2.68-.05-3.62a6.47 6.47 0 00-.4-2.13 4.27 4.27 0 00-1.02-1.55A4.35 4.35 0 0014.52.46a6.43 6.43 0 00-2.13-.41A69 69 0 008.77 0z">
  1695.      </path>
  1696.      <path fill="currentColor"
  1697.        d="M8.8 4a4.5 4.5 0 100 9 4.5 4.5 0 000-9zm0 7.43a2.92 2.92 0 110-5.85 2.92 2.92 0 010 5.85zM13.43 5a1.05 1.05 0 100-2.1 1.05 1.05 0 000 2.1z">
  1698.      </path>
  1699.    </svg>
  1700.  
  1701.  
  1702.  
  1703.                    </a>
  1704.                  </li>
  1705.                
  1706.                
  1707.                  <li class="list-social__item">
  1708.                    <a href="https://tiktok.com/" class="link link--text list-social__link">
  1709.                      
  1710.  
  1711.  
  1712.    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-tiktok " width="16"
  1713.    height="18" fill="none" xmlns="http://www.w3.org/2000/svg">
  1714.      <path
  1715.        d="M8.02 0H11s-.17 3.82 4.13 4.1v2.95s-2.3.14-4.13-1.26l.03 6.1a5.52 5.52 0 11-5.51-5.52h.77V9.4a2.5 2.5 0 101.76 2.4L8.02 0z"
  1716.        fill="currentColor">
  1717.      </path>
  1718.    </svg>
  1719.  
  1720.  
  1721.  
  1722.                    </a>
  1723.                  </li>
  1724.                
  1725.                
  1726.                  <li class="list-social__item">
  1727.                    <a href="https://wa.me/" class="link link--text list-social__link">
  1728.                      
  1729.  
  1730.  
  1731.    <svg class="icon icon-whatsapp " fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 750"><path d="M703.5,195.64A371,371,0,0,0,572,56C523.89,26,471.51,8.4,415.21,2.51A370.48,370.48,0,0,0,316.5,5.42,364,364,0,0,0,215.23,37.47a369,369,0,0,0-132.68,108Q17.36,230.17,7,336.63A370.11,370.11,0,0,0,53.42,554.94a7.23,7.23,0,0,1,.61,4.9Q36.48,624.6,18.7,689.27C13.24,709.19,7.75,729.1,2.14,749.5c1.23-.26,1.93-.36,2.61-.55q95.75-25.11,191.54-50.2a8.43,8.43,0,0,1,5.19.61c12.79,5.8,25.28,12.34,38.29,17.59A370.28,370.28,0,0,0,666.09,604q69.06-86.36,80-196.47A370.36,370.36,0,0,0,743,311.86,361,361,0,0,0,703.5,195.64ZM684.64,388c-3.6,65.27-25.48,123.75-66.06,174.9-44.89,56.63-102.85,93.24-173.19,109.84a297.41,297.41,0,0,1-91.27,7A305.68,305.68,0,0,1,215.31,635a17.54,17.54,0,0,0-15.2-2.14c-35.5,9.58-71.1,18.74-106.66,28-.49.13-1,.21-2.14.45,1.72-6.37,3.29-12.22,4.89-18Q109,596.7,121.66,550.07a7.12,7.12,0,0,0-1-5.07c-12.37-19.32-23.31-39.25-31.6-60.64A309,309,0,0,1,70.4,410.63c-6.11-49.35-.93-97.44,16.1-144.15,57.86-160.1,234.55-243,394.65-185.11a308.31,308.31,0,0,1,120.2,79.18c34.9,37.19,59.32,80.31,72.81,129.53A304.75,304.75,0,0,1,684.64,388Z"/><path d="M556,454.42c-13.84-6.52-27.43-13.55-41.24-20.12-11.47-5.46-23-10.89-34.73-15.69-9.1-3.73-13.09-1.72-19.12,6.06-9.39,12.09-19.09,23.95-28.89,35.71-4.7,5.63-9.47,6.79-16.1,3.8-12.32-5.56-24.82-10.9-36.58-17.51-39.6-22.29-69.59-54.3-92.67-93.11-4.87-8.2-4.3-12.16,2.14-19.13,9.07-9.9,18.4-19.63,24.09-32.12a17.42,17.42,0,0,0,.47-14.67c-9.55-23-19-46-28.75-68.92a75.82,75.82,0,0,0-7-12.7c-2.56-3.82-6.6-5.49-11.28-5.36H255.78v-.56c-5.48.29-11,.11-16.39,1-8.66,1.37-15,6.75-20.95,12.94-25.46,26.48-34.58,57.89-28.66,93.83a145.64,145.64,0,0,0,20.75,53.75C220.48,377.5,231.32,393,242.65,408a435.09,435.09,0,0,0,70.53,73.19c31.48,26,67,44.54,105.56,57.58,16.1,5.44,32.08,11.08,49.36,11.42,11.52.22,23,.08,34.16-3.22a110.77,110.77,0,0,0,42.1-23.61c5.48-4.81,10.48-10.18,13.19-17a110.56,110.56,0,0,0,7.57-37.2C565.27,461.93,562.42,457.42,556,454.42Z"/></svg>
  1732.  
  1733.  
  1734.  
  1735.                    </a>
  1736.                  </li>
  1737.                
  1738.                
  1739.                  <li class="list-social__item">
  1740.                    <a href="https://line.com/" class="link link--text list-social__link">
  1741.                      
  1742.  
  1743.  
  1744.    <svg class="icon icon-line-footer " fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 750"><path d="M375,.5C168.17.5.5,168.17.5,375S168.17,749.5,375,749.5,749.5,581.83,749.5,375,581.83.5,375,.5ZM570.75,476.91C518.48,537.06,401.6,610.33,375,621.53s-22.66-7.13-21.57-13.42c.63-3.76,3.55-21.33,3.55-21.33.83-6.36,1.66-16.23-.83-22.52-2.81-7-13.83-10.54-21.95-12.29C214.51,536.14,125.9,452.45,125.9,352.53,125.9,241,237.64,150.38,375,150.38s249.1,90.68,249.1,202.15h0C624.14,397.14,606.85,437.32,570.75,476.91Z"/><polygon points="324.38 298.65 324.38 298.65 324.38 298.65 324.38 298.65"/><path d="M324.38,298.65H306.91a4.86,4.86,0,0,0-4.86,4.85V412a4.86,4.86,0,0,0,4.86,4.85h17.47a4.86,4.86,0,0,0,4.85-4.85V303.5A4.86,4.86,0,0,0,324.38,298.65Z"/><path d="M444.67,298.65h-17.5a4.85,4.85,0,0,0-4.85,4.85V368l-49.73-67.17a4.57,4.57,0,0,0-.38-.49,2.76,2.76,0,0,0-.29-.3l-.09-.09a2.65,2.65,0,0,0-.26-.21l-.12-.1-.25-.18-.15-.08-.26-.14-.15-.08-.28-.12-.16,0-.28-.1-.18,0-.27-.06H351.08a4.85,4.85,0,0,0-4.85,4.84V412a4.85,4.85,0,0,0,4.85,4.85h17.48a4.85,4.85,0,0,0,4.85-4.85V347.54l49.81,67.26a5.15,5.15,0,0,0,1.22,1.2h.06l.29.18.14.07.24.12.23.1.15,0,.32.11H426a4.69,4.69,0,0,0,1.24.16h17.48a4.85,4.85,0,0,0,4.86-4.84h0V303.5A4.87,4.87,0,0,0,444.67,298.65Z"/><path d="M282.26,389.67h0l0,0H234.79V303.5a4.85,4.85,0,0,0-4.83-4.85H212.47a4.84,4.84,0,0,0-4.85,4.84h0V412a4.74,4.74,0,0,0,1.35,3.32.27.27,0,0,0,.07.08l.07.07a4.81,4.81,0,0,0,3.33,1.35h69.81a4.84,4.84,0,0,0,4.84-4.84h0V394.52A4.84,4.84,0,0,0,282.26,389.67Z"/><path d="M541.16,371.34a4.85,4.85,0,0,0,4.85-4.85h0V349a4.85,4.85,0,0,0-4.84-4.85H493.72V325.84l47.42,0A4.83,4.83,0,0,0,546,321V303.5a4.85,4.85,0,0,0-4.84-4.86H471.34A4.81,4.81,0,0,0,468,300l-.05.05-.08.09a4.82,4.82,0,0,0-1.34,3.33V412a4.77,4.77,0,0,0,1.35,3.33l.07.07.07.07a4.8,4.8,0,0,0,3.32,1.36h69.81A4.85,4.85,0,0,0,546,412h0V394.5a4.85,4.85,0,0,0-4.84-4.85H493.72V371.34Z"/></svg>
  1745.  
  1746.  
  1747.  
  1748.                    </a>
  1749.                  </li>
  1750.                
  1751.                
  1752.                  <li class="list-social__item">
  1753.                    <a href="https://wechat.com/" class="link link--text list-social__link">
  1754.                      
  1755.  
  1756.  
  1757.    <svg class="icon icon-wechat " fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 750"><path d="M372.31,344.63c30-25,64.6-40.77,102.63-49.15a300.24,300.24,0,0,1,45.43-6.61c5.81-.38,11.6-.81,17.41-1.1,1.9-.1,2.82-.61,2.47-2.74s-.43-4.35-.63-6.54a225,225,0,0,0-7.31-40.71c-10.79-38.76-31.69-71.57-59.89-99.89C443.56,108.89,409.5,88,371.11,74.1a288,288,0,0,0-92.8-17.38,214.68,214.68,0,0,0-24.59.6c-13.23,1.22-26.59,2.34-39.62,4.87-27.42,5.32-53.55,14.74-78.56,27.19C81.1,116.52,40.88,157.11,17.8,213.92c-10,24.63-16.23,50.2-17.22,76.79a268,268,0,0,0,1.54,35.94c2,20.14,7.8,39.35,16.06,57.79,16.49,36.82,41.46,67,72.92,91.91,5.45,4.32,11.08,8.43,16.67,12.58,5,3.74,7.24,8.41,5.45,14.69-1.45,5-2.91,10.06-4.07,15.16-4.66,21.08-9.21,42.18-13.79,63.28-.68,3.14-1.33,6.31-2.17,10.23l4.22-2.53c25-15.68,50.07-31.42,75.19-47,5.66-3.53,11.39-7.13,17.5-9.66,8.26-3.45,17.1-2,25.72-1.11,10.89,1.14,21.75,2.45,32.56,3.79,11.34,1.4,22.65,2.92,34,4.38,4.22.54,8.47,1,13,1.58V538.6c-.54-9-1.36-18.05-1.62-27.1a207.12,207.12,0,0,1,5.51-54.13C310.33,411.15,336.31,374.6,372.31,344.63Zm5.22-135.5a40,40,0,1,1,.23,80.06c-23,0-40.94-17.52-40.93-39.93C336.85,227.31,355.16,209.25,377.53,209.13Zm-199.24,80c-22.67,0-40.12-17.42-40.18-40.2-.06-22.15,17.59-39.69,40-39.8s41,18.18,41,40.45C219.19,271.27,200.73,289.12,178.29,289.17Z"/><path d="M741.59,452.47c-17.42-53.21-52.3-91.29-102.2-115.63-37.18-18.16-76.75-25.44-118.12-23.14a233.78,233.78,0,0,0-42.61,6.1c-46.81,11.45-86.29,35.2-117,72.49-29.88,36.26-43.68,77.93-39.29,125a162.57,162.57,0,0,0,20.91,65.36c17.84,31.48,42.83,56.1,73.27,75.36a201,201,0,0,0,61.39,25.71,231.39,231.39,0,0,0,41.51,5.7c14.43.74,28.84.56,43-2.4,11.91-2.47,23.58-6,35.4-8.94,13.89-3.42,27.81-3.75,41.31,1.49,9.47,3.67,18.62,8.2,27.9,12.36,1,.45,2,1,3,1.43l.45-.57-1.22-3.17A46,46,0,0,1,666.47,666c1.52-9.87,6.35-18.15,13-25.33,5.49-6,11.45-11.48,17.3-17.11,30.78-29.85,48.84-65.91,52.23-108.8A158.69,158.69,0,0,0,741.59,452.47ZM435.15,478.14a34.86,34.86,0,1,1,.74-69.71h0c19.66.06,34.87,15.6,34.76,35.51C470.54,463,454.75,478.26,435.15,478.14ZM596.63,478c-19.58-.43-34.46-15.65-34.16-35.13a34.6,34.6,0,0,1,34.88-34.32h.12c19,0,34,15.64,34,35.3A34.23,34.23,0,0,1,597.17,478Z"/></svg>
  1758.  
  1759.  
  1760.  
  1761.                    </a>
  1762.                  </li>
  1763.                
  1764.                
  1765.                  <li class="list-social__item">
  1766.                    <a href="https://youtube.com/" class="link link--text list-social__link">
  1767.                      
  1768.  
  1769.  
  1770.    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-youtube "
  1771.    viewBox="0 0 100 70">
  1772.      <path
  1773.        d="M98 11c2 7.7 2 24 2 24s0 16.3-2 24a12.5 12.5 0 01-9 9c-7.7 2-39 2-39 2s-31.3 0-39-2a12.5 12.5 0 01-9-9c-2-7.7-2-24-2-24s0-16.3 2-24c1.2-4.4 4.6-7.8 9-9 7.7-2 39-2 39-2s31.3 0 39 2c4.4 1.2 7.8 4.6 9 9zM40 50l26-15-26-15v30z"
  1774.        fill="currentColor">
  1775.      </path>
  1776.    </svg>
  1777.  
  1778.  
  1779.  
  1780.                    </a>
  1781.                  </li>
  1782.                
  1783.                
  1784.              </ul>
  1785.            
  1786.        </div>
  1787.      
  1788.      
  1789.      
  1790.        <div class="grid__item">
  1791.          
  1792.              <h2 class="footer-block__heading">We accept</h2>
  1793.              <div class="footer-block__details-content footer__payment">
  1794.                <ul class="list list-payment" role="list">
  1795.                  
  1796.                    <li class="list-payment__item">
  1797.                      
  1798.  
  1799.  
  1800.    <svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img"
  1801.    width="38" height="24" aria-labelledby="pi-visa">
  1802.      <path opacity=".07"
  1803.        d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path>
  1804.      <path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32">
  1805.      </path>
  1806.      <path
  1807.        d="M28.3 10.1H28c-.4 1-.7 1.5-1 3h1.9c-.3-1.5-.3-2.2-.6-3zm2.9 5.9h-1.7c-.1 0-.1 0-.2-.1l-.2-.9-.1-.2h-2.4c-.1 0-.2 0-.2.2l-.3.9c0 .1-.1.1-.1.1h-2.1l.2-.5L27 8.7c0-.5.3-.7.8-.7h1.5c.1 0 .2 0 .2.2l1.4 6.5c.1.4.2.7.2 1.1.1.1.1.1.1.2zm-13.4-.3l.4-1.8c.1 0 .2.1.2.1.7.3 1.4.5 2.1.4.2 0 .5-.1.7-.2.5-.2.5-.7.1-1.1-.2-.2-.5-.3-.8-.5-.4-.2-.8-.4-1.1-.7-1.2-1-.8-2.4-.1-3.1.6-.4.9-.8 1.7-.8 1.2 0 2.5 0 3.1.2h.1c-.1.6-.2 1.1-.4 1.7-.5-.2-1-.4-1.5-.4-.3 0-.6 0-.9.1-.2 0-.3.1-.4.2-.2.2-.2.5 0 .7l.5.4c.4.2.8.4 1.1.6.5.3 1 .8 1.1 1.4.2.9-.1 1.7-.9 2.3-.5.4-.7.6-1.4.6-1.4 0-2.5.1-3.4-.2-.1.2-.1.2-.2.1zm-3.5.3c.1-.7.1-.7.2-1 .5-2.2 1-4.5 1.4-6.7.1-.2.1-.3.3-.3H18c-.2 1.2-.4 2.1-.7 3.2-.3 1.5-.6 3-1 4.5 0 .2-.1.2-.3.2M5 8.2c0-.1.2-.2.3-.2h3.4c.5 0 .9.3 1 .8l.9 4.4c0 .1 0 .1.1.2 0-.1.1-.1.1-.1l2.1-5.1c-.1-.1 0-.2.1-.2h2.1c0 .1 0 .1-.1.2l-3.1 7.3c-.1.2-.1.3-.2.4-.1.1-.3 0-.5 0H9.7c-.1 0-.2 0-.2-.2L7.9 9.5c-.2-.2-.5-.5-.9-.6-.6-.3-1.7-.5-1.9-.5L5 8.2z"
  1808.        fill="#142688"></path>
  1809.    </svg>
  1810.  
  1811.  
  1812.  
  1813.                    </li>
  1814.                  
  1815.                  
  1816.                    <li class="list-payment__item">
  1817.                      
  1818.  
  1819.  
  1820.    <svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img"
  1821.    width="38" height="24" aria-labelledby="pi-master">
  1822.      <path opacity=".07"
  1823.        d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path>
  1824.      <path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32">
  1825.      </path>
  1826.      <circle fill="#EB001B" cx="15" cy="12" r="7"></circle>
  1827.      <circle fill="#F79E1B" cx="23" cy="12" r="7"></circle>
  1828.      <path fill="#FF5F00"
  1829.        d="M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z"></path>
  1830.    </svg>
  1831.  
  1832.  
  1833.  
  1834.                    </li>
  1835.                  
  1836.                  
  1837.                    <li class="list-payment__item">
  1838.                      
  1839.  
  1840.  
  1841.    <svg class="icon icon--full-color " xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24"
  1842.      width="38" height="24" aria-labelledby="pi-american_express">
  1843.      <g fill="none">
  1844.        <path fill="#000"
  1845.          d="M35,0 L3,0 C1.3,0 0,1.3 0,3 L0,21 C0,22.7 1.4,24 3,24 L35,24 C36.7,24 38,22.7 38,21 L38,3 C38,1.3 36.6,0 35,0 Z"
  1846.          opacity=".07"></path>
  1847.        <path fill="#006FCF"
  1848.          d="M35,1 C36.1,1 37,1.9 37,3 L37,21 C37,22.1 36.1,23 35,23 L3,23 C1.9,23 1,22.1 1,21 L1,3 C1,1.9 1.9,1 3,1 L35,1">
  1849.        </path>
  1850.        <path fill="#FFF"
  1851.          d="M8.971,10.268 L9.745,12.144 L8.203,12.144 L8.971,10.268 Z M25.046,10.346 L22.069,10.346 L22.069,11.173 L24.998,11.173 L24.998,12.412 L22.075,12.412 L22.075,13.334 L25.052,13.334 L25.052,14.073 L27.129,11.828 L25.052,9.488 L25.046,10.346 L25.046,10.346 Z M10.983,8.006 L14.978,8.006 L15.865,9.941 L16.687,8 L27.057,8 L28.135,9.19 L29.25,8 L34.013,8 L30.494,11.852 L33.977,15.68 L29.143,15.68 L28.065,14.49 L26.94,15.68 L10.03,15.68 L9.536,14.49 L8.406,14.49 L7.911,15.68 L4,15.68 L7.286,8 L10.716,8 L10.983,8.006 Z M19.646,9.084 L17.407,9.084 L15.907,12.62 L14.282,9.084 L12.06,9.084 L12.06,13.894 L10,9.084 L8.007,9.084 L5.625,14.596 L7.18,14.596 L7.674,13.406 L10.27,13.406 L10.764,14.596 L13.484,14.596 L13.484,10.661 L15.235,14.602 L16.425,14.602 L18.165,10.673 L18.165,14.603 L19.623,14.603 L19.647,9.083 L19.646,9.084 Z M28.986,11.852 L31.517,9.084 L29.695,9.084 L28.094,10.81 L26.546,9.084 L20.652,9.084 L20.652,14.602 L26.462,14.602 L28.076,12.864 L29.624,14.602 L31.499,14.602 L28.987,11.852 L28.986,11.852 Z">
  1852.        </path>
  1853.      </g>
  1854.    </svg>
  1855.  
  1856.  
  1857.  
  1858.                    </li>
  1859.                  
  1860.                  
  1861.                    <li class="list-payment__item">
  1862.                      
  1863.  
  1864.  
  1865.    <svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" width="38"
  1866.      height="24" role="img" aria-labelledby="pi-paypal">
  1867.      <path opacity=".07"
  1868.        d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path>
  1869.      <path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32">
  1870.      </path>
  1871.      <path fill="#003087"
  1872.        d="M23.9 8.3c.2-1 0-1.7-.6-2.3-.6-.7-1.7-1-3.1-1h-4.1c-.3 0-.5.2-.6.5L14 15.6c0 .2.1.4.3.4H17l.4-3.4 1.8-2.2 4.7-2.1z">
  1873.      </path>
  1874.      <path fill="#3086C8"
  1875.        d="M23.9 8.3l-.2.2c-.5 2.8-2.2 3.8-4.6 3.8H18c-.3 0-.5.2-.6.5l-.6 3.9-.2 1c0 .2.1.4.3.4H19c.3 0 .5-.2.5-.4v-.1l.4-2.4v-.1c0-.2.3-.4.5-.4h.3c2.1 0 3.7-.8 4.1-3.2.2-1 .1-1.8-.4-2.4-.1-.5-.3-.7-.5-.8z">
  1876.      </path>
  1877.      <path fill="#012169"
  1878.        d="M23.3 8.1c-.1-.1-.2-.1-.3-.1-.1 0-.2 0-.3-.1-.3-.1-.7-.1-1.1-.1h-3c-.1 0-.2 0-.2.1-.2.1-.3.2-.3.4l-.7 4.4v.1c0-.3.3-.5.6-.5h1.3c2.5 0 4.1-1 4.6-3.8v-.2c-.1-.1-.3-.2-.5-.2h-.1z">
  1879.      </path>
  1880.    </svg>
  1881.  
  1882.  
  1883.  
  1884.                    </li>
  1885.                  
  1886.                  
  1887.                    <li class="list-payment__item">
  1888.                      
  1889.  
  1890.  
  1891.    <svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img"
  1892.      width="38" height="24" aria-labelledby="pi-diners_club">
  1893.      <path opacity=".07"
  1894.        d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path>
  1895.      <path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32">
  1896.      </path>
  1897.      <path
  1898.        d="M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z"
  1899.        fill="#3086C8"></path>
  1900.    </svg>
  1901.  
  1902.  
  1903.  
  1904.                    </li>
  1905.                  
  1906.                  
  1907.                    <li class="list-payment__item">
  1908.                      
  1909.  
  1910.  
  1911.    <svg class="icon icon--full-color " viewBox="0 0 38 24" width="38" height="24" role="img"
  1912.      aria-labelledby="pi-discover" fill="none" xmlns="http://www.w3.org/2000/svg">
  1913.      <path fill="#000" opacity=".07"
  1914.        d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path>
  1915.      <path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z" fill="#fff">
  1916.      </path>
  1917.      <path
  1918.        d="M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z"
  1919.        fill="#231F20"></path>
  1920.      <path d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z" fill="url(#pi-paint0_linear)">
  1921.      </path>
  1922.      <path opacity=".65" d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z"
  1923.        fill="url(#pi-paint1_linear)"></path>
  1924.      <path
  1925.        d="M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z"
  1926.        fill="#231F20"></path>
  1927.      <path
  1928.        d="M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z"
  1929.        fill="#231F20"></path>
  1930.      <path d="M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z" fill="#F48120">
  1931.      </path>
  1932.      <defs>
  1933.        <linearGradient id="pi-paint0_linear" x1="21.657" y1="12.275" x2="19.632" y2="9.104"
  1934.          gradientUnits="userSpaceOnUse">
  1935.          <stop stop-color="#F89F20"></stop>
  1936.          <stop offset=".25" stop-color="#F79A20"></stop>
  1937.          <stop offset=".533" stop-color="#F68D20"></stop>
  1938.          <stop offset=".62" stop-color="#F58720"></stop>
  1939.          <stop offset=".723" stop-color="#F48120"></stop>
  1940.          <stop offset="1" stop-color="#F37521"></stop>
  1941.        </linearGradient>
  1942.        <linearGradient id="pi-paint1_linear" x1="21.338" y1="12.232" x2="18.378" y2="6.446"
  1943.          gradientUnits="userSpaceOnUse">
  1944.          <stop stop-color="#F58720"></stop>
  1945.          <stop offset=".359" stop-color="#E16F27"></stop>
  1946.          <stop offset=".703" stop-color="#D4602C"></stop>
  1947.          <stop offset=".982" stop-color="#D05B2E"></stop>
  1948.        </linearGradient>
  1949.      </defs>
  1950.    </svg>
  1951.  
  1952.  
  1953.  
  1954.                    </li>
  1955.                  
  1956.              </div>
  1957.              
  1958.        </div>
  1959.      
  1960.      
  1961.      
  1962.        <div class="grid__item">
  1963.          
  1964.              <h2 class="footer-block__heading">
  1965.                Quick links
  1966.              </h2>
  1967.              <ul class="footer-block__details-content list-unstyled">
  1968.                
  1969.                <li>
  1970.                  <a href="/store-locator"  class="link link--text list-menu__item list-menu__item--link">
  1971.                    Location
  1972.                  </a>
  1973.                </li>
  1974.                
  1975.                
  1976.              </ul>
  1977.            
  1978.        </div>
  1979.      
  1980.      
  1981.      
  1982.        <div class="grid__item">
  1983.          
  1984.              <h2 class="footer-block__heading">Our mission</h2>
  1985.              <div class="footer-block__details-content">
  1986.                <p>Quality materials, good designs, craftsmanship and sustainability.</p>
  1987.              </div>
  1988.            
  1989.        </div>
  1990.      
  1991.    </div>
  1992.  </div>
  1993.  <div class="footer__content-bottom">
  1994.    <div class="footer__content-bottom-wrapper page-width">
  1995.      <div class="footer__column footer__column--info">
  1996.  
  1997.        
  1998.  
  1999.  
  2000.  
  2001.        
  2002.        <div class="footer__copyright caption">
  2003.          <div class="copyright__content">© 2024 Technave. Powered by <a href="http://www.easystore.co/?utm_source=storefront&utm_medium=sf_ref_footer&utm_campaign=sf_ref">EasyStore</a></div>
  2004.        </div>
  2005.  
  2006.        <div class="footer__copyright caption">
  2007.          
  2008.            <div>
  2009.            
  2010.            
  2011.              
  2012.                <a href="/legal/terms-of-service">Terms of Service</a>
  2013.              
  2014.              
  2015.            
  2016.              
  2017.                | <a href="/legal/privacy-policy">Privacy Policy</a>
  2018.              
  2019.              
  2020.            
  2021.              
  2022.                | <a href="/legal/refund-policy">Refund Policy</a>
  2023.              
  2024.              
  2025.            
  2026.            </div>
  2027.        
  2028.        </div>
  2029.        
  2030.      </div>
  2031.    </div>
  2032.  </div>
  2033. </footer>
  2034.  
  2035.  
  2036.  
  2037.  
  2038.  
  2039.  <script>
  2040.  EasyStore.Currencies.init([{"name":"US Dollar","code":"USD","rate":"1.0","format_prefix":"$","format_suffix":null,"format_decimals":2,"thousand_separator":",","is_primary":true}])
  2041. </script>
  2042.  
  2043.  
  2044.  
  2045.  <script>
  2046.    let page_template = 'product';
  2047.  
  2048.    if(document.querySelector('.currency-picker')) EasyStore.Currencies.change(document.querySelector('.currency-picker').value)
  2049.  
  2050.    document.querySelectorAll('.currency-picker').forEach((el)=>{
  2051.      el.addEventListener('change',(event)=>{
  2052.        console.log(event.target.value);
  2053.        EasyStore.Currencies.change(event.target.value)
  2054.  
  2055.        document.querySelectorAll('[name=currencies],[name=current_currency]').forEach((el)=>{
  2056.          el.value = event.target.value
  2057.        })
  2058.  
  2059.        if(page_template == 'cart') location.reload();
  2060.      })
  2061.    })
  2062.  </script>
  2063.  
  2064.  
  2065.  
  2066.  
  2067.  <script>
  2068.  
  2069.    window.variantStrings = {
  2070.      addToCart: `Add to Cart`,
  2071.      soldOut: `Sold Out`,
  2072.      unavailable: `Unavailable`,
  2073.    }
  2074.  
  2075.    window.accessibilityStrings = {
  2076.      shareSuccess: `Link copied to clipboard`,
  2077.    }
  2078.  </script>
  2079.  <script>
  2080.  
  2081.  /*
  2082.  
  2083.    ------
  2084.    Events
  2085.    ------
  2086.  
  2087.    pages/viewed
  2088.  
  2089.    customers/signup
  2090.  
  2091.    customers/login
  2092.  
  2093.    products/searched
  2094.  
  2095.    collections/viewed
  2096.  
  2097.    products/viewed
  2098.  
  2099.    products/shared
  2100.  
  2101.    wishlists/item_added
  2102.  
  2103.    carts/items_added
  2104.  
  2105.    carts/viewed
  2106.  
  2107.    carts/item_removed
  2108.  
  2109.    checkouts/initiated
  2110.  
  2111.    checkouts/shipping_info_added
  2112.  
  2113.    checkouts/payment_info_added
  2114.  
  2115.    checkouts/completed
  2116.  
  2117.    orders/placed
  2118.  
  2119.    orders/purchased
  2120.  
  2121.    payments/captured
  2122.  
  2123.    payments/failed
  2124.  
  2125.  */
  2126.  
  2127.  let latest_cart = null
  2128.  
  2129.  const _selector = document.querySelector.bind(document),
  2130.        _selectorAll = document.querySelectorAll.bind(document)
  2131.  
  2132.  document.addEventListener('DOMContentLoaded', (event) => {
  2133.  
  2134.    const default_currency = getCookie("currency")
  2135.    const customer_id = window.__st.cid
  2136.    const template    = window.__st.p
  2137.  
  2138.    onPageView()
  2139.  
  2140.    //-----------------------//
  2141.    //        Configs        //
  2142.    //-----------------------//
  2143.  
  2144.    window.dataLayer = window.dataLayer || []
  2145.  
  2146.    Array.prototype.last = Array.prototype.last || function() {
  2147.      return this[this.length - 1] || null
  2148.    }
  2149.  
  2150.    Array.prototype.first = Array.prototype.first || function() {
  2151.      return this[0] || null
  2152.    }
  2153.  
  2154.    //----------------------//
  2155.    //       Triggers       //
  2156.    //----------------------//
  2157.  
  2158.    const XHR = window.XMLHttpRequest
  2159.  
  2160.    function xhr() {
  2161.  
  2162.      const xhr = new XHR()
  2163.  
  2164.      xhr.addEventListener("readystatechange", function() {
  2165.  
  2166.        if(xhr.readyState != 4) return
  2167.  
  2168.        try {
  2169.  
  2170.          const response_url = xhr.responseURL
  2171.  
  2172.          if (response_url.includes("cart/add")) {
  2173.  
  2174.            latest_cart = JSON.parse(xhr.response)
  2175.  
  2176.            onCartItemsAdded() // ok
  2177.  
  2178.          }
  2179.  
  2180.          if (response_url.includes("cart/remove_item_quantity")) {
  2181.  
  2182.            latest_cart = JSON.parse(xhr.response)
  2183.  
  2184.            onCartItemRemoved() // ok
  2185.  
  2186.          }
  2187.  
  2188.          if (response_url.includes("new_cart?retrieve=true")) {
  2189.  
  2190.            result = JSON.parse(xhr.response)
  2191.  
  2192.            if (result.cart) {
  2193.              latest_cart = result.cart
  2194.            }
  2195.  
  2196.          }
  2197.  
  2198.        } catch(e) {
  2199.  
  2200.          console.error(e)
  2201.  
  2202.        }
  2203.  
  2204.      }, false);
  2205.  
  2206.      return xhr
  2207.  
  2208.    }
  2209.  
  2210.    window.XMLHttpRequest = xhr
  2211.  
  2212.    switch(template) {
  2213.  
  2214.      case 'cart': onCartView() // ok
  2215.      break
  2216.      case 'product': onProductView() // ok
  2217.      break
  2218.      case 'collection': onCollectionView() // ok
  2219.      break
  2220.      case 'blog': onBlogView()
  2221.      break
  2222.      case 'article': onArticleView()
  2223.      break
  2224.      case 'payment_completed': onOrderPlace()
  2225.      break
  2226.      case 'payment_fail': onPaymentFail()
  2227.      break
  2228.  
  2229.    }
  2230.  
  2231.    // _selector('form[action="/checkout/payments"]').addEventListener("submit", onPaymentInfoAdded(_selector('form[action="/checkout/payments"]')))
  2232.    if (_selector('form[action="/checkout/detail"]'))                            _selector('form[action="/checkout/detail"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/detail"]'))})  // ok
  2233.    if (_selector('form[action="/checkout/shipping"]'))                          _selector('form[action="/checkout/shipping"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/shipping"]'))})  // ok
  2234.    if (_selector('form[action="/account/register"]'))                           _selector('form[action="/account/register"]').addEventListener("submit", onSignUp)  // ok
  2235.    if (_selector('form[action="/account/login"]'))                              _selector('form[action="/account/login"]').addEventListener("submit", onLogin)  // ok
  2236.    if (_selector('form[action="/search"]'))                                     _selector('form[action="/search"]').addEventListener("submit", onProductSearch()) // ok
  2237.    if (_selector('#line-login-btn'))                                            _selector('#line-login-btn').addEventListener('click', onLineLogin) // ok
  2238.    if (_selector('#PlaceOrder'))                                                _selector('#PlaceOrder').addEventListener("click", ()=>{onCheckoutComplete(_selector('form[action="/checkout/payments"]'))});  // ok
  2239.    if (_selector('#add_wishlist'))                                              _selector('#add_wishlist').addEventListener("click", onWishlistItemAdded) // ok
  2240.    if (_selectorAll('a[href="/account/logout"]'))                               _selectorAll('a[href="/account/logout"]').forEach(logoutButton => logoutButton.addEventListener("click", onLogout)) // ok
  2241.    if (_selector('.CartDrawerTrigger.cart-page-link'))                          _selector('.CartDrawerTrigger.cart-page-link').addEventListener("click", onCartView) // ok
  2242.    if (_selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link'))    _selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link').addEventListener("click", onCartView) // ok
  2243.    if (_selectorAll('a[class^="share-"]'))                                      _selectorAll('a[class^="share-"]').forEach(shareButton => shareButton.addEventListener("click", ()=>{onProductShare(shareButton)}) ) // ok
  2244.    if (_selectorAll('[name$="checkout"]'))                                      _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate))
  2245.  
  2246.    // For append elements
  2247.    const bodyMutationObserver = new MutationObserver(() => {
  2248.      if (_selector('#form__spc #PlaceOrder'))             _selector('#form__spc #PlaceOrder').addEventListener("click", onSinglePageCheckout) // ok
  2249.      if (_selectorAll('[name$="checkout"]'))              _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate))
  2250.    });
  2251.    bodyMutationObserver.observe(_selector("body"), {subtree: true, childList: true});
  2252.  
  2253.    //------------------------------//
  2254.    //        Event handlers        //
  2255.    //------------------------------//
  2256.  
  2257.    function onPageView() {
  2258.  
  2259.      EasyStore.Event.dispatch('pages/viewed', {
  2260.        page: {
  2261.          type: template,
  2262.          title: document.title,
  2263.          description: _selector('meta[name=description]') ? _selector('meta[name=description]').getAttribute('content') : null,
  2264.          url: location.href,
  2265.        }
  2266.      })
  2267.  
  2268.    }
  2269.  
  2270.    function onSignUp() {
  2271.  
  2272.      const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)
  2273.      const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/)
  2274.  
  2275.      const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "")
  2276.  
  2277.      let data = {}
  2278.  
  2279.      if (email_regex.test(email_or_phone)) {
  2280.        data.method = 'email'
  2281.        data.email = email_or_phone
  2282.      }
  2283.  
  2284.      if (phone_regex.test(email_or_phone)) {
  2285.        data.method = "phone"
  2286.        data.phone = email_or_phone
  2287.      }
  2288.  
  2289.      if (!data.method) return
  2290.  
  2291.      EasyStore.Event.dispatch('customers/signup', data)
  2292.  
  2293.    }
  2294.  
  2295.    function onLogin() {
  2296.  
  2297.      const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)
  2298.      const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/)
  2299.  
  2300.      const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "")
  2301.  
  2302.      let data = {}
  2303.  
  2304.      if (email_regex.test(email_or_phone)) {
  2305.        data.method = 'email'
  2306.        data.email = email_or_phone
  2307.      }
  2308.  
  2309.      if (phone_regex.test(email_or_phone)) {
  2310.        data.method = "phone"
  2311.        data.phone = email_or_phone
  2312.      }
  2313.  
  2314.      if (!data.method) return
  2315.  
  2316.      EasyStore.Event.dispatch('customers/login', data)
  2317.  
  2318.    }
  2319.  
  2320.    function onLineLogin() {
  2321.  
  2322.      EasyStore.Event.dispatch('customers/login', { method: 'line' })
  2323.  
  2324.    }
  2325.  
  2326.    function onLogout() {
  2327.  
  2328.      EasyStore.Event.dispatch('customers/logout', { customer_id })
  2329.  
  2330.    }
  2331.  
  2332.    function onBlogView() {
  2333.  
  2334.      const blog = ""
  2335.  
  2336.      EasyStore.Event.dispatch('blogs/viewed', { blog })
  2337.  
  2338.    }
  2339.  
  2340.    function onArticleView() {
  2341.  
  2342.      const article = ""
  2343.  
  2344.      EasyStore.Event.dispatch('articles/viewed', { article })
  2345.  
  2346.    }
  2347.  
  2348.    function onProductSearch() {
  2349.  
  2350.      const query = _selector('input[name=q]').value
  2351.  
  2352.      if (!query) return
  2353.  
  2354.      EasyStore.Event.dispatch('products/searched', { query })
  2355.  
  2356.    }
  2357.  
  2358.    function onCollectionView() {
  2359.  
  2360.      const collection = ""
  2361.  
  2362.      EasyStore.Event.dispatch('collections/viewed', { collection })
  2363.  
  2364.    }
  2365.  
  2366.    function onProductView() {
  2367.  
  2368.      const product = {"id":11378407,"handle":"vitamarketingradar","name":"VitaMarketingRadar","title":"VitaMarketingRadar","url":"\/products\/vitamarketingradar","price":50,"price_min":"50.0","price_max":"50.0","price_varies":false,"compare_at_price":100,"compare_at_price_min":"100.0","compare_at_price_max":"100.0","compare_at_price_varies":false,"available":true,"options_with_values":[],"options_by_name":[],"options":["Title"],"has_only_default_variant":true,"sole_variant_id":52556718,"variants":[{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null}],"selected_variant":{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"first_available_variant":{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"selected_or_first_available_variant":{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"img_url":"\/assets\/images\/products\/no_image.png","featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[],"media":[],"featured_media":null,"metafields":[],"expires":null,"published_at":"2024-02-15T10:47:28.000+05:00","created_at":"2024-02-15T10:47:28.000+05:00","is_wishlisted":null,"content":null,"description":null,"meta_description":null,"brands":[],"tags":[],"vendor":null,"collections":[{"handle":"feature-on-homepage","title":"Feature on homepage"}],"view_history":{"product_id":11378407,"viewed_at":"2024-05-28T22:00:33.960+05:00"},"promotions":[]}
  2369.  
  2370.      EasyStore.Event.dispatch("products/viewed", { product })
  2371.  
  2372.    }
  2373.  
  2374.    function onProductShare(el) {
  2375.  
  2376.      const product = {"id":11378407,"handle":"vitamarketingradar","name":"VitaMarketingRadar","title":"VitaMarketingRadar","url":"\/products\/vitamarketingradar","price":50,"price_min":"50.0","price_max":"50.0","price_varies":false,"compare_at_price":100,"compare_at_price_min":"100.0","compare_at_price_max":"100.0","compare_at_price_varies":false,"available":true,"options_with_values":[],"options_by_name":[],"options":["Title"],"has_only_default_variant":true,"sole_variant_id":52556718,"variants":[{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null}],"selected_variant":{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"first_available_variant":{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"selected_or_first_available_variant":{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"img_url":"\/assets\/images\/products\/no_image.png","featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[],"media":[],"featured_media":null,"metafields":[],"expires":null,"published_at":"2024-02-15T10:47:28.000+05:00","created_at":"2024-02-15T10:47:28.000+05:00","is_wishlisted":null,"content":null,"description":null,"meta_description":null,"brands":[],"tags":[],"vendor":null,"collections":[{"handle":"feature-on-homepage","title":"Feature on homepage"}],"view_history":{"product_id":11378407,"viewed_at":"2024-05-28T22:00:33.960+05:00"},"promotions":[]}
  2377.  
  2378.      const channel = el.getAttribute("class").split("-").last()
  2379.  
  2380.      EasyStore.Event.dispatch('products/shared', { product, channel })
  2381.  
  2382.    }
  2383.  
  2384.    function onWishlistItemAdded() {
  2385.  
  2386.      let product  = {"id":11378407,"handle":"vitamarketingradar","name":"VitaMarketingRadar","title":"VitaMarketingRadar","url":"\/products\/vitamarketingradar","price":50,"price_min":"50.0","price_max":"50.0","price_varies":false,"compare_at_price":100,"compare_at_price_min":"100.0","compare_at_price_max":"100.0","compare_at_price_varies":false,"available":true,"options_with_values":[],"options_by_name":[],"options":["Title"],"has_only_default_variant":true,"sole_variant_id":52556718,"variants":[{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null}],"selected_variant":{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"first_available_variant":{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"selected_or_first_available_variant":{"id":52556718,"title":"Default Title","sku":"","taxable":false,"barcode":null,"available":true,"inventory_quantity":null,"featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"price":5000,"compare_at_price":10000,"is_enabled":true,"options":["Default Title"],"option1":"Default Title","option2":null,"option3":null},"img_url":"\/assets\/images\/products\/no_image.png","featured_image":{"alt":"Empty Image","img_url":"\/assets\/images\/products\/no_image.png","src":"\/assets\/images\/products\/no_image.png","type":"images"},"secondary_image":{"alt":"","img_url":"","src":"","type":""},"images":[],"media":[],"featured_media":null,"metafields":[],"expires":null,"published_at":"2024-02-15T10:47:28.000+05:00","created_at":"2024-02-15T10:47:28.000+05:00","is_wishlisted":null,"content":null,"description":null,"meta_description":null,"brands":[],"tags":[],"vendor":null,"collections":[{"handle":"feature-on-homepage","title":"Feature on homepage"}],"view_history":{"product_id":11378407,"viewed_at":"2024-05-28T22:00:33.960+05:00"},"promotions":[]}
  2387.      const quantity = _selector("#Quantity").value
  2388.  
  2389.      EasyStore.Event.dispatch('wishlists/item_added', { product })
  2390.  
  2391.    }
  2392.  
  2393.    async function onCartItemsAdded() {
  2394.  
  2395.      const cart = await getCart()
  2396.  
  2397.      if(cart && cart.items != undefined && cart.items.length > 0) {
  2398.  
  2399.        EasyStore.Event.dispatch('carts/item_added', { cart })
  2400.  
  2401.      }
  2402.  
  2403.    }
  2404.  
  2405.    async function onCartView() {
  2406.  
  2407.      const cart = await getCart()
  2408.  
  2409.      EasyStore.Event.dispatch('carts/viewed', { cart })
  2410.  
  2411.    }
  2412.  
  2413.    async function onCartItemRemoved() {
  2414.  
  2415.      const cart = await getCart()
  2416.  
  2417.      cart.items = []
  2418.  
  2419.      if(cart) {
  2420.  
  2421.        EasyStore.Event.dispatch('carts/item_removed', { cart })
  2422.  
  2423.      }
  2424.  
  2425.    }
  2426.  
  2427.    async function onCheckoutInitiate() {
  2428.  
  2429.      const cart = await getCart()
  2430.  
  2431.      EasyStore.Event.dispatch('checkouts/initiated', { cart })
  2432.  
  2433.    }
  2434.  
  2435.    async function onShippingInfoAdded(form) {
  2436.      let checkout = getCheckout()
  2437.  
  2438.      let form_data = {}
  2439.      new FormData(form).forEach((value, key) => form_data[key] = value)
  2440.  
  2441.      let shipping_tier = null
  2442.  
  2443.      if (form_data.type && form_data.type.startsWith("r_pickup")) {
  2444.        shipping_tier = `Pickup - ${form_data.pick_location}`
  2445.      }
  2446.  
  2447.      if (form_data.s_id) {
  2448.        shipping_tier = _selector(`input[id='`+form_data.s_id+`']`).getAttribute("data-shipping-name")
  2449.      }
  2450.  
  2451.      if (!shipping_tier) return
  2452.  
  2453.      EasyStore.Event.dispatch('checkouts/shipping_info_added', { checkout, shipping_tier })
  2454.  
  2455.    }
  2456.  
  2457.    async function onPaymentInfoAdded(form) {
  2458.  
  2459.      let checkout = getCheckout()
  2460.  
  2461.      let payment_type = new FormData(form).get('payment_method')
  2462.  
  2463.      EasyStore.Event.dispatch("checkouts/payment_info_added", { checkout, payment_type })
  2464.  
  2465.    }
  2466.  
  2467.    async function onOrderPlace() {
  2468.  
  2469.      let cart_token  = getCookie("cart_js")
  2470.      let previous_cart_token = getCookie("previous_cart_ga4_js")
  2471.  
  2472.      if (previous_cart_token && previous_cart_token == cart_token) {
  2473.        // Prevent duplicate purchase tracking
  2474.        return
  2475.      }
  2476.  
  2477.      let order = getOrder()
  2478.  
  2479.      EasyStore.Event.dispatch('orders/placed', { order })
  2480.  
  2481.      if(order.is_manual_payment) {
  2482.  
  2483.        EasyStore.Event.dispatch('orders/purchased', { order })
  2484.  
  2485.      }
  2486.  
  2487.      const last_transaction = order.transactions.last()
  2488.  
  2489.      if (last_transaction.status) {
  2490.  
  2491.        EasyStore.Event.dispatch('orders/purchased', { order })
  2492.        EasyStore.Event.dispatch('payments/captured', { order })
  2493.  
  2494.      }
  2495.  
  2496.    }
  2497.  
  2498.    async function onPaymentFail() {
  2499.  
  2500.      const order = getOrder()
  2501.  
  2502.      EasyStore.Event.dispatch('payments/failed', { order })
  2503.  
  2504.    }
  2505.  
  2506.    async function onCheckoutComplete(form) {
  2507.  
  2508.      onPaymentInfoAdded(form)
  2509.  
  2510.      const checkout = getCheckout()
  2511.  
  2512.      EasyStore.Event.dispatch('checkouts/completed', { checkout })
  2513.  
  2514.    }
  2515.  
  2516.    async function onSinglePageCheckout() {
  2517.  
  2518.      // let checkout = $("[data-app-checkout]").data("app-checkout")
  2519.  
  2520.      let checkout = getCheckout()
  2521.  
  2522.      // const payment_type = _selector("#app_spc_payment_method").find(`[class*="label-content"]`).first().find("b").first().text()
  2523.      const payment_type = _selector("#app_spc_payment_method").getElementsByClassName('label-content')[0].getElementsByTagName('b')[0].innerHTML
  2524.  
  2525.      const shipping_method = _selector("#delivery_method").value
  2526.  
  2527.      let shipping_tier = null
  2528.      let app_spc_customer_info_label = _selector("#app_spc_customer_info").getElementsByClassName('label-content')
  2529.      if (shipping_method == "shipping") {
  2530.        shipping_tier = app_spc_customer_info_label[app_spc_customer_info_label.length - 1].getElementsByTagName('b')[0].innerHTML
  2531.      }
  2532.  
  2533.      if (shipping_method == "pickup") {
  2534.        shipping_tier = app_spc_customer_info_label[0].innerHTML
  2535.      }
  2536.  
  2537.      if (shipping_tier) {
  2538.  
  2539.        EasyStore.Event.dispatch('checkouts/shipping_info_added', {
  2540.          checkout,
  2541.          shipping_tier,
  2542.        })
  2543.  
  2544.      }
  2545.  
  2546.      if (payment_type) {
  2547.  
  2548.        EasyStore.Event.dispatch('checkouts/payment_info_added', {
  2549.          checkout,
  2550.          payment_type,
  2551.        })
  2552.  
  2553.      }
  2554.  
  2555.      EasyStore.Event.dispatch('checkouts/completed', { checkout })
  2556.  
  2557.    }
  2558.  
  2559.  })
  2560.  
  2561.  
  2562.  //-----------------------//
  2563.  //       Functions       //
  2564.  //-----------------------//
  2565.  
  2566.  function getCookie(name) {
  2567.  
  2568.    name += "="
  2569.  
  2570.    decodedCookie = decodeURIComponent(document.cookie)
  2571.  
  2572.    ca = decodedCookie.split(";")
  2573.  
  2574.    for(i = 0; i < ca.length; i++) {
  2575.      c = ca[i]
  2576.      while (c.charAt(0) == " ") {
  2577.        c = c.substring(1)
  2578.      }
  2579.      if (c.indexOf(name) == 0) {
  2580.        return c.substring(name.length, c.length)
  2581.      }
  2582.    }
  2583.  
  2584.    return ""
  2585.  
  2586.  }
  2587.  
  2588.  const parsePrice = price => {
  2589.    if(typeof price === 'string') {
  2590.      return parseFloat(price.split(',').join(''))
  2591.    }
  2592.  
  2593.    return price
  2594.  }
  2595.  
  2596.  const requestCart = async (method, data) => {
  2597.  
  2598.  let response = await fetch('/cart.json', {method: 'GET',headers: {'Content-Type': 'application/json'}})
  2599.    result = await response.json()
  2600.  
  2601.    return result.cart
  2602.  
  2603.  }
  2604.  const getCart = async (latest = false) => {
  2605.  
  2606.    let cart = latest_cart
  2607.  
  2608.    const cart_invalid = !cart || !cart.items || (cart.total_price > 0 && !cart.items.length)
  2609.  
  2610.    if(latest || cart_invalid) {
  2611.      cart = await requestCart()
  2612.    }
  2613.  
  2614.    cart.items = cart.items || []
  2615.  
  2616.    return mapCart(cart)
  2617.  
  2618.  }
  2619.  
  2620.  const getCheckout = async () => {
  2621.    mapCheckout(latest_cart || await requestCart())
  2622.  }
  2623.  
  2624.  const getOrder = async () => {
  2625.    mapOrder(latest_cart || await requestCart())
  2626.  }
  2627.  
  2628.  //-----------------------//
  2629.  //        Mappers        //
  2630.  //-----------------------//
  2631.  
  2632.  const fallbackAttribute = (object, attribute) => {
  2633.  
  2634.    if(!Array.isArray(attribute)) {
  2635.      attribute = [attribute]
  2636.    }
  2637.  
  2638.    let final_value = null
  2639.  
  2640.    do {
  2641.  
  2642.      final_value = object[attribute.shift()]
  2643.  
  2644.    } while(!final_value && attribute.length)
  2645.  
  2646.    return final_value
  2647.  
  2648.  }
  2649.  
  2650.  const map = (object, mapper) => {
  2651.  
  2652.    const newObject = {}
  2653.  
  2654.    for(const key in mapper) {
  2655.  
  2656.      // Handle different keys between new and old format
  2657.      newObject[key] = fallbackAttribute(object, mapper[key])
  2658.  
  2659.      // Cast price to float
  2660.      if(newObject[key] && ['price', 'amount', 'discount', 'discounts'].some(x => key.endsWith(x))) {
  2661.        newObject[key] = parsePrice(newObject[key])
  2662.      }
  2663.  
  2664.      if(newObject[key] === undefined) {
  2665.        delete newObject[key]
  2666.      }
  2667.  
  2668.    }
  2669.  
  2670.    return newObject
  2671.  
  2672.  }
  2673.  
  2674.  const mapCart = cart => {
  2675.  
  2676.    const oldCart = cart
  2677.  
  2678.    const mapper = {
  2679.      id: 'id',
  2680.      currency: 'currency',
  2681.      item_count: 'item_count',
  2682.      items: 'items',
  2683.      total_price: 'total_price',
  2684.      latest_items: 'latest_items'
  2685.    }
  2686.  
  2687.    cart = map(cart, mapper)
  2688.  
  2689.    const discounts = (oldCart.storewide_discounts || []).concat((oldCart.voucher_discounts || []))
  2690.  
  2691.    cart.discount_applications = discounts.map(discount => ({
  2692.      title: discount.voucher_code || null,
  2693.      value: parsePrice(discount.amount),
  2694.    }))
  2695.  
  2696.    cart.original_total_price = cart.items.length
  2697.    ? cart.items
  2698.      .map(item => item.original_price)
  2699.      .reduce((sum, price) => sum + price)
  2700.    : 0
  2701.  
  2702.    cart.total_discount = cart.discount_applications.length
  2703.    ? cart.discount_applications
  2704.      .map(discount => parsePrice(discount.value))
  2705.      .reduce((sum, value) => sum + value)
  2706.    : 0
  2707.  
  2708.    cart.items = cart.items.map(item => mapLineItem(item))
  2709.  
  2710.    return cart
  2711.  
  2712.  }
  2713.  
  2714.  const mapCheckout = checkout => {
  2715.  
  2716.    const mapper = {
  2717.      note: 'note',
  2718.      attributes: 'note_attributes',
  2719.      billing_address: 'billing_address',
  2720.      currency: 'currency',
  2721.      customer_id: 'customer_id',
  2722.      discounts_amount: 'total_discount',
  2723.      id: 'id',
  2724.      line_items: 'order_item',
  2725.      order_number: 'order_number',
  2726.      shipping_address: 'shipping_address',
  2727.      shipping_price: 'shipping_tax',
  2728.      shipping_method: 'shipping_method_name',
  2729.      tax_price: 'total_tax',
  2730.    }
  2731.  
  2732.    checkout = map(checkout, mapper)
  2733.  
  2734.    checkout.requires_shipping = checkout.line_items.some(item => item.shipping_required)
  2735.  
  2736.    checkout.line_items = checkout.line_items.map(item => mapLineItem(item))
  2737.  
  2738.    return checkout
  2739.  
  2740.  }
  2741.  
  2742.  const mapOrder = order => {
  2743.  
  2744.    const mapper = {
  2745.      attributes: 'note_attributes',
  2746.      billing_address: 'billing_address',
  2747.      cancelled: 'is_cancelled',
  2748.      cancelled_at: 'cancelled_at',
  2749.      created_at: 'created_at',
  2750.      customer_id: 'customer_id',
  2751.      // discount_applications: 'discount_applications',
  2752.      email: 'email',
  2753.      financial_status: 'financial_status',
  2754.      fulfillment_status: 'fulfillment_status',
  2755.      line_items: 'order_item',
  2756.      note: 'note',
  2757.      order_number: 'order_number',
  2758.      phone: 'phone',
  2759.      shipping_address: 'shipping_address',
  2760.      shipping_methods: 'shipping_methods',
  2761.      shipping_price: 'total_shipping',
  2762.      subtotal_price: 'subtotal_price',
  2763.      // tax_lines: 'tax_lines',
  2764.      tax_price: 'total_tax',
  2765.      total_discounts: 'total_discount',
  2766.      total_net_amount: 'total_amount_include_transaction',
  2767.      total_price: 'total_price',
  2768.      transactions: 'transaction_records',
  2769.      is_manual_payment: 'is_manual_payment',
  2770.    }
  2771.  
  2772.    order.email = order.billing_address.email
  2773.    order.phone = order.billing_address.phone
  2774.    order.shipping_method = order.shipping_method_name
  2775.  
  2776.    order = map(order, mapper)
  2777.  
  2778.    order.line_items = order.line_items.map(item => mapLineItem(item))
  2779.    order.transactions = order.transactions.map(transaction => mapTransaction(transaction))
  2780.  
  2781.    return order
  2782.  
  2783.  }
  2784.  
  2785.  const mapLineItem = line_item => {
  2786.  
  2787.    const old_line_item = line_item
  2788.  
  2789.    const mapper = {
  2790.      final_price: 'price',
  2791.      image: 'img_url',
  2792.      message: 'message',
  2793.      original_line_price: 'original_line_price',
  2794.      original_price: 'original_price',
  2795.      properties: 'properties',
  2796.      quantity: 'quantity',
  2797.      requires_shipping: 'shipping_required',
  2798.      sku: 'sku',
  2799.      taxable: 'taxable',
  2800.      title: 'product_name',
  2801.      product_name: 'product_name',
  2802.      url: 'url',
  2803.      product_id: 'product_id',
  2804.      variant_id: 'variant_id',
  2805.      id: ['id', 'i_id'],
  2806.    }
  2807.  
  2808.    line_item = map(line_item, mapper)
  2809.  
  2810.    line_item.product_id = line_item.product_id || (old_line_item.product && old_line_item.product.id) || null
  2811.    line_item.variant_id = line_item.variant_id || (old_line_item.variant && old_line_item.variant.id) || null
  2812.    line_item.image      = line_item.image || (old_line_item.image && old_line_item.image.url) || null
  2813.  
  2814.    return line_item
  2815.  
  2816.  }
  2817.  
  2818.  const mapTransaction = transaction => {
  2819.  
  2820.    const mapper = {
  2821.      amount: 'amount',
  2822.      created_at: 'created_at',
  2823.      gateway: 'gateway_type',
  2824.      id: 'id',
  2825.      status: 'status',
  2826.    }
  2827.  
  2828.    transaction = map(transaction, mapper)
  2829.  
  2830.    return transaction
  2831.  
  2832.  }
  2833.  
  2834.  
  2835. </script>
  2836.  
  2837. </body>
  2838. </html>
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda