PageSourceSearch

https://www.nori.com.my/account/register

html nori.com.my collected 2026-09-26 13:31:51 UTC 145,391 bytes, 4,128 lines download raw bytes

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/251247/f/14831591.png" />
15  
16
17  <!-- Title and description ================================================== -->
18  <title>
19  Login &ndash; nori.com.my
20  </title>
21
22  
23
24  <!-- Social meta ================================================== -->
25  
26
27  <meta property="og:type" content="website">
28  <meta property="og:title" content="Login">
29  <meta property="og:url" content="https://www.nori.com.my/account/login">
30  
31    <meta property="og:image" content="https://cdn.store-assets.com/s/251247/f/14831580.jpg">
32    <meta property="og:image:secure_url" content="https://cdn.store-assets.com/s/251247/f/14831580.jpg">
33  
34
35
36<meta property="og:description" content="Nori is the place where you can find the best Celebrity Branded Health and Beauty products. We have products that enhances your beauty and help you stay healthy.">
37<meta property="og:site_name" content="nori.com.my">
38
39
40
41  <meta name="twitter:card" content="summary">
42
43
44
45  <meta name="twitter:site" content="@">
46
47
48
49
50
51  <!-- Helpers ================================================== -->
52  <link rel="canonical" href="https://www.nori.com.my/account/login">
53  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
54  <meta name="theme-color" content="#000000">
55  
56  
56<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript" ></script>
56
57  
58  <!-- Header hook for plugins ================================================== -->
59  
60<!-- ScriptTags -->
61<script>window.__st={p: "customers",cid: null,cem: null,cph: null,cfn: null,cln: null,cge: null,cdb: null,ccc: null};</script>
61<script src='/assets/events.js'></script>
61<script>(function(){function asyncLoad(){var urls=['/assets/facebook-pixel.js?v=1.2.1669860959','/assets/traffic.js?v=1','https://apps.easystore.co/sales-pop/script.js?shop=nori.easy.co','https://apps.easystore.co/google-analytics/script.js?shop=nori.easy.co','https://apps.easystore.co/google-analytics-4/script.js?shop=nori.easy.co','https://apps.easystore.co/hotjar/script.js?shop=nori.easy.co&t=1752054084','https://chimpstatic.com/mcjs-connected/js/users/6db777a9ed8a20cdf3b457723/fc072f0ebecff5b09d0928c84.js','https://smartarget.online/loader.js?type=int&u=f6cf4c864794ea6e890a35db28f2cc23cf485568&source=easystore_whatsapp'];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>
61
62<!-- /ScriptTags -->
63
64  
65  
66  
66<script src="https://store-themes.easystore.co/251247/themes/282847/assets/global.js?t=1790328533" defer="defer"></script>
66
67
68  
69  
70    
70<script src="/assets/shop_common.js" type="text/javascript" ></script>
70
71    
71<script src="/assets/customer_area.js" type="text/javascript" ></script>
71
72  
73  
73<script>
74  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
75  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
76  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
77  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
78
79  ga('create', '', 'auto','myTracker');
80  ga('myTracker.send', 'pageview');
81
82  </script>
82
83  
84  
84<script src="/assets/storefront.js?id=1d419de2011a5572c98b" type="text/javascript" ></script>
84
85  
86
87  <!-- CSS ================================================== -->
88  <style>
89      @font-face {
90        font-family: 'Chivo';
91        font-style: normal;
92        font-weight: regular;
93        src: local('Chivo regular'), local('Chivo-regular'), url(https://fonts.gstatic.com/s/chivo/v12/va9I4kzIxd1KFoBvS-J3kbDP.ttf) format('truetype');
94      }
95
96      @font-face {
97        font-family: 'Amethysta';
98        font-style: normal;
99        font-weight: regular;
100        src: local('Amethysta regular'), local('Amethysta-regular'), url(https://fonts.gstatic.com/s/amethysta/v9/rP2Fp2K15kgb_F3ibfWIGDWCBl0O8Q.ttf) format('truetype');
101      }
102
103      :root {
104        --font-body-family: 'Chivo', sans-serif;
105        --font-body-style: normal;
106        --font-body-weight: 500;
107
108        --font-heading-family: 'Amethysta', serif;
109        --font-heading-style: normal;
110        --font-heading-weight: 400;
111
112        --color-heading-text: 0,0,0;
113        --color-base-text: 0,0,0;
114        --color-base-background-1: 241,238,231;
115        --color-base-background-2: 241,238,231;
116        
117        --color-base-solid-button-labels: 255,255,255;
118        --color-base-outline-button-labels: 57,67,104;
119        
120        --color-base-accent-1: 0,0,0;
121        --color-base-accent-2: 0,0,0;
122        --payment-terms-background-color: 241,238,231;
123
124        --gradient-base-background-1: 241,238,231;
125        --gradient-base-background-2: 241,238,231;
126        --gradient-base-accent-1: 0,0,0;
127        --gradient-base-accent-2: 0,0,0;
128
129        --page-width: 145rem;
130      }
131
132      *,
133      *::before,
134      *::after {
135        box-sizing: inherit;
136      }
137
138      html {
139        box-sizing: border-box;
140        font-size: 62.5%;
141        height: 100%;
142      }
143
144      body {
145        display: grid;
146        grid-template-rows: auto auto 1fr auto;
147        grid-template-columns: 100%;
148        min-height: 100%;
149        margin: 0;
150        font-size: 1.5rem;
151        letter-spacing: 0.06rem;
152        line-height: 1.8;
153        font-family: var(--font-body-family);
154        font-style: var(--font-body-style);
155        font-weight: var(--font-body-weight);
156        
157        background-image: url('https://cdn.store-assets.com/s/251247/f/14694395.jpg');
158        background-position: top center;
159        
160        
161      }
162
163      @media screen and (min-width: 750px) {
164        body {
165          font-size: 1.6rem;
166        }
167      }
168   </style>
169  
170  <link href="https://store-themes.easystore.co/251247/themes/282847/assets/base.css?t=1790328533" rel="stylesheet" type="text/css" media="screen" />
171
172  
173  
174<!-- Snippet:global/head: InvolveAsia -->
175<script type="text/javascript" src="https://apps.easystore.co/involve-asia/nori.easy.co/script.js" ></script>
175
176<!-- /Snippet -->
177
178<!-- Snippet:global/head: Intercom -->
179<meta name="intercom" content="intercom" />
180<!-- /Snippet -->
181
182<!-- Snippet:global/head: OnVoard Product Recommender -->
183<script>
184  (function() {
185    window.OnVoard = window.OnVoard || function() {
186      (window.OnVoard.q = window.OnVoard.q || []).push(arguments);
187    };
188    var script = document.createElement("script");
189    var parent = document.getElementsByTagName("script")[0].parentNode;
190    script.async = 1;
191
192    
193    script.src = "https://scripts.onvoard.com/apps/loader.js";
194    
195    parent.appendChild(script);
196  })();
197</script>
197
198
199
200<script>
201
202var ovData = {};
203ovData["ecommerce_platform"] = "easystore";
204ovData["account_id"] = "acct_19939zey3htaynr";
205
206
207  ovData["template"] = "customers";
208  ovData["cart"] = {"item_count":0,"total_price":0,"announcements":[]};
209  ovData["product"] = "";
210  ovData["shop"] = {};
211  ovData["customer"] = {};
212
213  
214    ovData["shop"] = {
215      "currency": "MYR",
216      "domain": "www.nori.com.my",
217      "url": "https://www.nori.com.my",
218      "money_format": "<span class=money data-ori-price='{{amount}}'>RM {{amount}} </span>",
219    };
220  
221
222  
223
224  window.OnVoardData = ovData;
225</script>
225
226
227<!-- /Snippet -->
228
229<!-- Snippet:global/head: Insert Code -->
230
231<!--TikTok -->
vendor: 998 bytes, lines 232-239
232<script>
233!function (w, d, t) {
234  w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for(var e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var i="https://analytics.tiktok.com/i18n/pixel/events.js";ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=i,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};var o=document.createElement("script");o.type="text/javascript",o.async=!0,o.src=i+"?sdkid="+e+"&lib="+t;var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(o,a)};
235
236  ttq.load('CD03UM3C77U53J7CIR9G');
237  ttq.page();
238}(window, document, 'ttq');
239</script>
239
240<!--Nori Jolie's Facebook Pixel -->
241<!-- Meta Pixel Code -->
242<script>
vendor: 426 bytes, lines 242-251
242
243  !function(f,b,e,v,n,t,s)
244  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
245  n.callMethod.apply(n,arguments):n.queue.push(arguments)};
246  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
247  n.queue=[];t=b.createElement(e);t.async=!0;
248  t.src=v;s=b.getElementsByTagName(e)[0];
249  s.parentNode.insertBefore(t,s)}(window, document,'script',
250  'https://connect.facebook.net/en_US/fbevents.js');
251  fbq('init', '
2511171022940276880
vendor: 34 bytes, lines 251-252
251');
252  fbq('track', 'PageView');
253</script>
253
254<noscript><img height="1" width="1" style="display:none"
255  src="https://www.facebook.com/tr?id=1171022940276880&ev=PageView&noscript=1"
256/></noscript>
257<!-- End Meta Pixel Code -->
258<!--Microsoft Clarity -->
259<script type="text/javascript">
260    (function(c,l,a,r,i,t,y){
261        c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
262        t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
263        y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
264    })(window, document, "clarity", "script", "snyzvmbc69");
265</script>
265
266<!-- /Snippet -->
267
268
269  
269<script>document.documentElement.className = document.documentElement.className.replace('no-js', 'js');</script>
269
270</head>
271
272<body id="login" class="template-customers" >
273	
274  
275<!-- Snippet:global/body_start: Announcement Bar -->
276<link rel="stylesheet" href="https://apps.easystore.co/assets/css/annoucement-bar/slider.css?v1.01">
277
278<input type="hidden" id="total_announcement_left" name="total_announcement_left" value="3">
279<input type="hidden" id="locale" name="locale" value="en_US">
280
281<slider-announcement-bar-app id="announcement-bar" name="announcement-bar" style="
282    border: unset;
283    padding: 4px 0px;
284    margin: 0px;
285    z-index:2999;
286    background:rgb(74, 51, 11);
287    color:rgb(248, 248, 248);
288    position: -webkit-sticky; position: sticky; top: 0;
289">
290
291  <div style="
292    display: flex;
293    justify-content: space-between;
294    align-items: center;
295    padding: 0px 0px;
296    border-top: 0px;
297    border-bottom: 0px;
298    border-color: transparent;
299  ">
300    <div style="height: 24px;">
301            <a id="previous-announcement-bar-button" class="announcement-bar-direction-button" type="button" name="previous" style="height: 24px;">
302        <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-left" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="white" fill="none" stroke-linecap="round" stroke-linejoin="round">
303          <path stroke="none" d="M0 0h24v24H0z" fill="none" />
304          <polyline points="15 6 9 12 15 18" />
305        </svg>
306      </a>
307          </div>
308
309    <ul style="flex-grow: 2; margin: 0px;">
310            <li id="announcement_bar_0" style="
311          display: flex;
312          justify-content: center;
313          align-items: center;
314          flex-wrap: wrap;
315          margin: 0px;
316          width: 100%;
317          word-wrap: break-word;
318        ">
319        ENJOY FREE SHIPPING WITH MINIMUM PURCHASE OF RM80
320                        <input type="hidden" id="expired_at_0" name="expired_at_0" value="2023-03-21 12:00">
321      </li>
322            <li id="announcement_bar_1" style="
323          display: flex;
324          justify-content: center;
325          align-items: center;
326          flex-wrap: wrap;
327          margin: 0px;
328          width: 100%;
329          word-wrap: break-word;
330        ">
331        10% OFF ANY ITEM
332                        <input type="hidden" id="expired_at_1" name="expired_at_1" value="2026-03-25 00:00">
333      </li>
334            <li id="announcement_bar_2" style="
335          display: flex;
336          justify-content: center;
337          align-items: center;
338          flex-wrap: wrap;
339          margin: 0px;
340          width: 100%;
341          word-wrap: break-word;
342        ">
343        4 DAYS ONLY: BUY 3x EDP get 33% OFF
344                        <input type="hidden" id="expired_at_2" name="expired_at_2" value="2026-03-25 00:00">
345      </li>
346          </ul>
347
348    <div style="display: flex;">
349            <a id="next-announcement-bar-button" class="announcement-bar-direction-button" type="button" name="next" style="height: 24px;">
350        <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-chevron-right" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="white" fill="none" stroke-linecap="round" stroke-linejoin="round">
351          <path stroke="none" d="M0 0h24v24H0z" fill="none" />
352          <polyline points="9 6 15 12 9 18" />
353        </svg>
354      </a>
355                </div>
356  </div>
357
358
359</slider-announcement-bar-app>
360
361<script>
362  $(function() {
363    var is_top_enabled =  1;
364
365    const loadScript = function(url, callback) {
366      const script = document.createElement("script");
367      script.type = "text/javascript";
368      // If the browser is Internet Explorer.
369      if (script.readyState) {
370        script.onreadystatechange = function() {
371          if (script.readyState == "loaded" || script.readyState == "complete") {
372            script.onreadystatechange = null;
373            callback();
374          }
375        };
376        // For any other browser.
377      } else {
378        script.onload = function() {
379          callback();
380        };
381      }
382      script.src = url;
383      document.getElementsByTagName("head")[0].appendChild(script);
384    };
385
386    const announcementBarAppJS = function($) {
387
388      $('#announcement-close-button').on('click', function() {
389        $('#announcement-bar, #announcement-bar-top').hide();
390        $('#easystore-section-header, .sticky-topbar').css('top', '');
391      });
392    }
393
394    if (typeof jQuery === 'undefined') {
395      loadScript('//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js', function() {
396        jQuery = jQuery.noConflict(true);
397        announcementBarAppJS(jQuery);
398      });
399    } else {
400      announcementBarAppJS(jQuery);
401    }
402
403
404    
405    if(is_top_enabled){
406      // Prevent announcement bar block header
407      setTimeout(()=>{
408        $('#easystore-section-header, .sticky-topbar').css('top', $('#announcement-bar').height()+'px');
409      }, 2000);
410    }
411  });
412
413  setInterval(function() {
414    const total_announcement = "3"
415    var total_announcement_left = $("#total_announcement_left").val();
416
417    for (let i = 0; i <= total_announcement; i++) {
418      const startDate = new Date();
419      const endDateStr = $("#expired_at_" + i).val();
420      const endDate = endDateStr == undefined ? new Date() : new Date(endDateStr.replace(/-/g, "/"));
421      const seconds = (endDate.getTime() - startDate.getTime()) / 1000;
422
423      const days = parseInt(seconds / 86400);
424      const hours = parseInt((seconds % 86400) / 3600);
425      const mins = parseInt((seconds % 86400 % 3600) / 60);
426      const secs = parseInt((seconds % 86400 % 3600) % 60);
427
428      // use to translate countdown unit
429      // (translate based on the preferred language when save announcement bar setting)
430      String.prototype.translate = function() {
431        try {
432          if ($("#locale").val() == "zh_TW") {
433            if (this.toString() === 'day') {
434              return "天";
435            }
436            if (this.toString() === 'hour') {
437              return "小時";
438            }
439            if (this.toString() === 'min') {
440              return "分鐘";
441            }
442            if (this.toString() === 'sec') {
443              return "秒";
444            }
445          } else {
446            if (this.toString() === 'day') {
447              if (days > 0) {
448                return "Days";
449              } else {
450                return "Day";
451              }
452            } else if (this.toString() === 'hour') {
453              if (hours > 0) {
454                return "Hours";
455              } else {
456                return "Hour";
457              }
458            } else if (this.toString() === 'min') {
459              if (mins > 0) {
460                return "Mins";
461              } else {
462                return "Min";
463              }
464            } else if (this.toString() === 'sec') {
465              if (secs > 0) {
466                return "Secs";
467              } else {
468                return "Sec";
469              }
470            }
471          }
472        } catch (error) {
473          console.log("Some errors heres", error);
474        }
475      };
476
477      const announcementBar_countdown = document.getElementById("announcementBar_countdown_" + i);
478      if (announcementBar_countdown && seconds > 0) {
479
480        $(announcementBar_countdown).show()
481        announcementBar_countdown.innerHTML = `
482          <div>
483            ${days} <small>${'day'.translate()}</small>
484          </div>
485          <div>
486            ${hours} <small>${'hour'.translate()}</small>
487          </div>
488          <div>
489            ${mins} <small>${'min'.translate()}</small>
490          </div>
491          <div>
492            ${secs} <small>${'sec'.translate()}</small>
493          </div>
494        `;
495
496
497      } else if (announcementBar_countdown && seconds <= 0) {
498        $("#announcement_bar_" + i).remove();
499        total_announcement_left = total_announcement_left - 1;
500        $("#total_announcement_left").val(total_announcement_left);
501      }
502    }
503
504    showOrHide(total_announcement_left);
505  }, 1000);
506
507
508  function showOrHide(total_announcement_left) {
509    if (total_announcement_left <= 1) {
510      $("#previous-announcement-bar-button,#next-announcement-bar-button").hide();
511    } else {
512      $("#previous-announcement-bar-button,#next-announcement-bar-button").show();
513    }
514
515    if (total_announcement_left == 0) {
516      $("#announcement-close-button").hide();
517      $("#announcement-bar").hide();
518      $('#announcement-bar-top').hide();
519      $('#easystore-section-header, .sticky-topbar').css('top', '');
520    }
521  };
522
523  let annoucementBarAutoMoveInterval = '';
524  class AnnouncementBarAppSlider extends HTMLElement {
525    constructor() {
526      super();
527      this.slider = this.querySelector('ul');
528      this.sliderItems = this.querySelectorAll('li');
529      this.prevButton = this.querySelector('a[name="previous"]');
530      this.nextButton = this.querySelector('a[name="next"]');
531
532      if (!this.slider || !this.nextButton) return;
533
534      const resizeObserver = new ResizeObserver(entries => this.initPages());
535      resizeObserver.observe(this.slider);
536
537      this.slider.addEventListener('scroll', this.update.bind(this));
538      this.prevButton.addEventListener('click', this.onButtonClick.bind(this));
539      this.nextButton.addEventListener('click', this.onButtonClick.bind(this));
540
541
542    }
543
544    initPages() {
545      const sliderItemsToShow = Array.from(this.sliderItems).filter(element => element.clientWidth > 0);
546      this.sliderLastItem = sliderItemsToShow[sliderItemsToShow.length - 1];
547      if (sliderItemsToShow.length === 0) return;
548      this.slidesPerPage = Math.floor(this.slider.clientWidth / sliderItemsToShow[0].clientWidth);
549      this.totalPages = sliderItemsToShow.length - this.slidesPerPage + 1;
550      this.update();
551      let self = this
552      var total_announcement_left = $("#total_announcement_left").val();
553      annoucementBarAutoMoveInterval = setInterval(function() {
554        if (total_announcement_left > 1) {
555          self.moveSlide('next')
556        }
557      }, 5000)
558    }
559
560    update() {
561      this.currentPage = Math.round(this.slider.scrollLeft / this.sliderLastItem.clientWidth) + 1;
562    }
563
564    onButtonClick(event) {
565      event.preventDefault();
566      let self = this;
567      self.moveSlide(event.currentTarget.name);
568    }
569
570
571    moveSlide(move_to) {
572
573      clearInterval(annoucementBarAutoMoveInterval);
574      let self = this;
575      annoucementBarAutoMoveInterval = setInterval(function() {
576        self.moveSlide('next');
577      }, 5000)
578
579      if (move_to === 'previous' && this.currentPage === 1) {
580        this.slider.scrollTo({
581          left: this.sliderLastItem.clientWidth * (this.totalPages - 1)
582        });
583      } else if (move_to === 'next' && this.currentPage === this.totalPages) {
584        this.slider.scrollTo({
585          left: 0
586        });
587      } else {
588        const slideScrollPosition = move_to === 'next' ? this.slider.scrollLeft + this.sliderLastItem
589          .clientWidth : this.slider.scrollLeft - this.sliderLastItem.clientWidth;
590        this.slider.scrollTo({
591          left: slideScrollPosition
592        });
593      }
594    }
595
596  }
597
598  customElements.define('slider-announcement-bar-app', AnnouncementBarAppSlider);
599</script>
599
600
601<!-- /Snippet -->
602
603<!-- Snippet:global/body_start: Easy Pop Up -->
604<style>
605  .easy_popup-app-style {
606    background-position: center;
607    vertical-align: middle;
608    justify-content: center;
609    text-align: center;
610    position: absolute;
611    top: 50%;
612    left: 50%;
613    margin-right: -55%;
614    transform: translate(-50%, -50%);
615    padding: 3em;
616  }
617
618  @media  only screen and (max-width: 480px) {
619    .easy_popup-app-style {
620      background-position: center;
621      vertical-align: middle;
622      justify-content: center;
623      text-align: center;
624      padding: 1em;
625      position: absolute;
626      top: 50%;
627      left: 50%;
628      margin-right: -50%;
629      transform: translate(-50%, -50%)
630    }
631  }
632
633  .easy_popup-app-modal-window {
634    border: 0px solid #E8E8E8;
635    border-radius: 5px;
636    position: fixed;
637    top: 0;
638    right: 0;
639    bottom: 0;
640    left: 0;
641    width: 100vw;
642    height: 100vh;
643    display: flex;
644    align-items: center;
645    justify-content: center;
646    z-index: 100000;
647    background-color: rgba(0, 0, 0, 0.45);
648  }
649
650  .easy_popup-app-container {
651    border: 0px solid #E0E0E0;
652    border-radius: 5px;
653    height: 350px;
654    width: 90%;
655    max-width: 520px;
656    position: relative;
657    display: block;
658    background-repeat: no-repeat;
659    background-position: center;
660  }
661
662  .easy_popup-app-discount-container{
663    height: 300px;
664    max-width: 600px;
665    position: relative;
666    display: block;
667    background-repeat: no-repeat;
668    background-position: center;
669  }
670
671  .new_easy_popup-app-container {
672    height: 450px;
673    width: 90%;
674    max-width: 520px;
675    margin: auto;
676    box-sizing: border-box;
677    position: relative;
678    display: block;
679    overflow: visible;
680    background-repeat: no-repeat;
681    background-position: center;
682    justify-content: center;
683    transform-origin: top left;
684    border: 0px solid #E8E8E8;
685    border-radius: 5px;
686    background: white;
687    background-size: contain;
688  }
689
690  .new_upper_easy_popup-app-container {
691    height: 200px;
692    max-width: 520px;
693    width: 100%;
694    border-radius: 5px 5px 0 0;
695  }
696
697  .new_lower_easy_popup-app-container {
698    width: 100%;
699    max-width: 520px;
700    position: relative;
701    background: white;
702    text-align: center;
703    display: flex;
704    justify-content: center;
705    align-items: center;
706    border-radius: 0 0 5px 5px;
707  }
708
709  @media  only screen and (max-width: 480px) {
710    .easy_popup-app-container {
711      height: 238px;
712    }
713  }
714
715  .easy_popup-app-title {
716    font-size: 32px;
717  }
718
719  @media  only screen and (max-width: 480px) {
720    .easy_popup-app-title {
721      font-size: 28px !important;
722    }
723  }
724
725  .easy_popup-app-content {
726    font-size: 24px;
727    margin-bottom: 10px;
728  }
729
730  @media  only screen and (max-width: 480px) {
731    .easy_popup-app-content {
732      font-size: 20px !important;
733      margin-bottom: 10px;
734    }
735  }
736
737  .easy_popup-app-close {
738    position: absolute;
739    right: -18px;
740    top: -18px;
741    width: 31px;
742    height: 31px;
743    padding: 5px 5px 5px 5px;
744    border: 3px solid #E8E8E8;
745    border-radius: 50px;
746    background-color: #FFFFFF;
747    display: block !important;
748    box-sizing: border-box;
749  }
750
751  .easy_popup-app-close:hover {
752    opacity: 1;
753  }
754
755  .easy_popup-app-close:before,
756  .easy_popup-app-close:after {
757    position: absolute;
758    left: 11.7px;
759    top: 5.5px;
760    content: ' ';
761    height: 15px;
762    width: 2px;
763    background-color: #CBCBCB;
764  }
765
766  .easy_popup-app-close:before {
767    transform: rotate(45deg);
768  }
769
770  .easy_popup-app-close:after {
771    transform: rotate(-45deg);
772  }
773
774  .easy_popup-app-noscroll {
775    position: fixed;
776    overflow: hidden;
777    height: 100%;
778    width: 100%;
779  }
780
781  .easy_popup-Short {
782    width: 200px;
783    padding: 5px;
784    height: 45px;
785    border-radius: 5px;
786    border: 0px;
787    display: inline-block;
788    text-decoration: none;
789    padding: 10px 50px;
790    margin: 14px;
791    box-shadow: 0px 2px 5px rgb(0 0 0 / 15%);
792    transition: .4s;
793  }
794
795  .easy_popup-Short:hover,
796  .easy_popup-Short:focus {
797    box-shadow: 0px 2px 5px rgb(0 0 0 / 25%);
798    transform: scale(.99);
799    opacity: 0.9;
800  }
801
802  .easy_popup-Long {
803    width: 100%;
804    max-width: 300px;
805    border: 0;
806    border-radius: 5px;
807    display: inline-block;
808    text-decoration: none;
809    margin-top: 14px;
810    box-shadow: 0px 2px 5px rgb(0 0 0 / 15%);
811    transition: .4s;
812    padding: 15px 25px;
813    font-weight: bold;
814    line-height: 1.1;
815  }
816
817  .easy_popup-Long:hover,
818  .easy_popup-Long:focus {
819    box-shadow: 0px 2px 5px rgb(0 0 0 / 25%);
820    transform: scale(.99);
821    opacity: 0.9;
822  }
823
824  .easy_popup-Border {
825    display: inline-block;
826    text-decoration: none;
827    padding: 10px 52px;
828    margin-top: 14px;
829    box-shadow: 0px 2px 5px rgb(0 0 0 / 15%);
830    border: 2px solid;
831    background: none;
832    border-radius: 3px;
833    transition: .4s;
834  }
835
836  .easy_popup-Border:hover,
837  .easy_popup-Border:focus {
838    box-shadow: 0px 2px 5px rgb(0 0 0 / 25%);
839    transform: scale(.99);
840    opacity: 0.9;
841  }
842
843  .easy_popup-noimage {
844    background-color: #FFBC00;
845  }
846
847  @media  only screen and (max-width: 360px) {
848    .easy_popup-withimage {
849      background-image: url("https://s3.dualstack.ap-southeast-1.amazonaws.com/app-assets.easystore.co/apps/405/Classic.jpg");
850      background-size: contain;
851      vertical-align: middle;
852    }
853  }
854
855  @media  only screen and (min-width: 361px) {
856    .easy_popup-withimage {
857      background-image: url("https://s3.dualstack.ap-southeast-1.amazonaws.com/app-assets.easystore.co/apps/405/Classic.jpg");
858      background-size: cover;
859      vertical-align: middle;
860    }
861  }
862
863  @media  only screen and (max-width: 360px) {
864    .easy_popup-withcustomimage {
865      background-image: url(https://s3.ap-southeast-1.amazonaws.com/apps.easystore.co/easy-pop-up/nori.easy.co/images/background.jpg?v=5836);
866      background-size: contain;
867      vertical-align: middle;
868    }
869  }
870
871  @media  only screen and (min-width: 361px) {
872    .easy_popup-withcustomimage {
873      background-image: url(https://s3.ap-southeast-1.amazonaws.com/apps.easystore.co/easy-pop-up/nori.easy.co/images/background.jpg?v=5836);
874      background-size: cover;
875      vertical-align: middle;
876    }
877  }
878
879  #copyIcon:hover {
880    fill: #D9D9D9;
881  }
882
883</style>
884
885<body>
886
887  <div id="modalcontainer" style='display:none'  class="easy_popup-app-modal-window">
888    <div class="new_easy_popup-app-container" style="height: auto">
889      <div id="popup" class="new_upper_easy_popup-app-container" style="height: auto">
890                  <img src="https://s3.ap-southeast-1.amazonaws.com/apps.easystore.co/easy-pop-up/nori.easy.co/images/background.jpg?v=5836.jpg" width="100%">
891              </div>
892      <div class="new_lower_easy_popup-app-container" style="padding: 20px;">
893        <section id="enter_section" style="width: 100%; max-width: 300px;">
894          <div>
895            <div id="modaltitle" class="easy_popup-app-title" style="margin-bottom: 5px;text-align: center; display: flex; justify-content: center; align-items: center; color: #FCD200;  line-height: 1;">
896            .
897            </div>
898            <div id="modalcontent" class="easy_popup-app-content" style=" text-align: center; display: flex; justify-content: center; align-items: center; color: #FCD200; margin: 5px; padding: 0; line-height: 1.5;">
899            ,
900            </div>
901          </div>
902          <div style="text-align: center; display: flex; justify-content: center; align-items: center;">
903            <form id="emailForm" action="https://apps.easystore.co/easy-pop-up/proxy/insert-customer" method="post" style="width: 100%;">
904              <div style="margin: 20px 0; margin-bottom: 6px;width:100%; max-width: 300px; height: 45px; border: 1px solid #D9D9D9; border-radius: 5px; color: black; font-size: 18px; text-align: left; display: flex; justify-content: left; align-items: center;">
905                <svg width="25px" height="25px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin: 10px;"><path d="M4 7.00005L10.2 11.65C11.2667 12.45 12.7333 12.45 13.8 11.65L20 7" stroke="#C5C5C5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
906                  <rect x="3" y="5" width="18" height="14" rx="2" stroke="#C5C5C5" stroke-width="2" stroke-linecap="round"/>
907                </svg>
908                <input id="emailInput" name="emailInput" type="email"  placeholder="[email protected]" style="margin:0;box-shadow: none;outline: none;width: 100%;max-width: 300px; height: 43px; border: 0px; border-radius: 5px; " required>
909              </div>
910              <button id="submitButton" class="easy_popup-Long" style="width: 100%;max-width: 300px; margin-top: 0px; color: #FFFFFF; font-size: 17px; background: #495BD5;" >
911                Subscribe
912              </button>
913            </form>
914        </section>
915
916        <section id ="discount_code_section"  style="width: 100%; max-width: 300px; display:none;">
917            <div style="text-align: center; display: flex; justify-content: center; align-items: center;" >
918              <input id="emailInput2"   name="emailInput2" type="email" readonly style="font-size:0px; color: white;border:0px;" hidden>
919              <input id="domain"   name="domain"  readonly style="font-size:0px; color: white;border:0px;" hidden >
920            </div>
921            <div>
922              <b style="font-size:28px;margin: 0; padding: 0; line-height: 1;">Enjoy your discount!</b>
923              <div style="font-size:16px;margin: 0; padding: 10px; line-height: 1;">You can apply the discount code during checkout</div>
924            </div>
925            <div style="margin-top:5px;">
926              <div style="text-align: center; justify-content: center; align-items: center; display: block;">
927                <div style="margin: 5px;  max-width: 300px; height: 45px; border: 1px solid #D9D9D9; border-radius: 5px; color: black; font-size: 18px; text-align: center; display: flex; justify-content: center; align-items: center;">
928                <div style="margin:0px;max-width: 300px; height: 45px; border: 0px solid #D9D9D9; border-radius: 0px; color: #ccc; font-size: 18px;text-align: center; display: flex; justify-content: center; align-items: center; ">
929                    <div>WLCOME123</div>
930                  </div>
931                  <svg id="copyIcon" width="25px" height="25px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="cursor: pointer; margin: 10px; text-align: right; display: flex; justify-content: right; align-items: center; " onclick="copyToClipboard()">
932                    <path d="M6 11C6 8.17157 6 6.75736 6.87868 5.87868C7.75736 5 9.17157 5 12 5H15C17.8284 5 19.2426 5 20.1213 5.87868C21 6.75736 21 8.17157 21 11V16C21 18.8284 21 20.2426 20.1213 21.1213C19.2426 22 17.8284 22 15 22H12C9.17157 22 7.75736 22 6.87868 21.1213C6 20.2426 6 18.8284 6 16V11Z" stroke="#D9D9D9" stroke-width="1.5"></path> <path d="M6 19C4.34315 19 3 17.6569 3 16V10C3 6.22876 3 4.34315 4.17157 3.17157C5.34315 2 7.22876 2 11 2H15C16.6569 2 18 3.34315 18 5" stroke="#D9D9D9" stroke-width="1.5"></path>
933                  </svg>
934                </div>
935                <a href="/collections/all" class="easy_popup-Long" style="cursor: pointer;margin-top: 0px; color: #FFFFFF; font-size: 17px; background: #495BD5;display: flex;justify-content: center;align-items: center;">
936                  Shop Now
937                </a>
938              </div>
939        </section>
940      </div>
941      <a href="javascript:void(0);" class="easy_popup-app-close" onclick="PopUp('hide')"></a>
942    </div>
943  </div>
944
945  <div id="modalcontainer2" style='display:none'  class="easy_popup-app-modal-window" onclick="PopUp('hide')">
946    <div class="new_easy_popup-app-container">
947      <div id="popup" class="new_upper_easy_popup-app-container easy_popup-withcustomimage">
948      </div>
949      <div class="new_lower_easy_popup-app-container">
950        <section  >
951          <div style="">
952          <div style="margin: 0 0 30px 0;">
953            <div id="modaltitle" class="easy_popup-app-title" style="text-align: center; display: flex; justify-content: center; align-items: center; color: #FCD200; margin: 15px; padding: 0; line-height: 1;">
954             .
955            </div>
956            <div id="modalcontent" class="easy_popup-app-content" style="margin: 0; text-align: center; display: flex; justify-content: center; align-items: center; color: #FCD200; margin: 0; padding: 0; line-height: 1.5;">
957             ,
958            </div>
959          </div>
960            <span><a href="https://www.nori.com.my/account/register" class="easy_popup-Long" style="color: #FFC300; font-size: 20px; background: #000000; line-height: 1.1; margin:3px;">SIGN UP NOW!</a></span>
961        </section>
962      </div>
963      <a href="javascript:void(0);" class="easy_popup-app-close" onclick="PopUp('hide')"></a>
964    </div>
965  </div>
966
967  <div id="modalcontainer3" style='display:none'  class="easy_popup-app-modal-window" onclick="PopUp('hide')">
968    <div id="popup" class="easy_popup-app-container easy_popup-withcustomimage">
969      <section class="easy_popup-app-style" style="font-family: arial">
970        <div id="modaltitle" class="easy_popup-app-title" style=" color: #FCD200;">
971          .
972        </div>
973        <div id="modalcontent" class="easy_popup-app-content" style=" color: #FCD200;">
974          ,
975        </div>
976        <span><a href="https://www.nori.com.my/account/register" class="easy_popup-Long" style="color: #FFC300; font-size: 20px; background: #000000; line-height: 1.1; margin:3px;">SIGN UP NOW!</a></span>
977      </section>
978
979      <a href="javascript:void(0);" class="easy_popup-app-close" onclick="PopUp('hide')"></a>
980    </div>
981  </div>
982
983  
983<script>
984  function redirect(){
985    window.location.replace("/collections/all");
986  }
987
988  document.getElementById('emailForm').addEventListener('submit', async (e) => {
989    e.preventDefault();
990
991    try {
992      const response = await fetch('/apps/easypopup/insert-customer', {
993        method: 'POST',
994        headers: {
995          'Accept': 'application/json',
996          'Content-Type': 'application/json',
997        },
998        body: JSON.stringify({
999      'email': document.getElementById('emailInput').value,
1000      'shop': window.location.hostname,
1001    }),
1002      });
1003      console.log(response);
1004      if (!response.ok) {
1005        console.error('Failed to insert customer');
1006      }
1007      const responseData = await response.json();
1008        console.log('Customer inserted successfully:', responseData);
1009
1010    } catch (error) {
1011      console.error('Error:', error);
1012    }
1013  });
1014
1015    function copyToClipboard() {
1016      var textToCopy = "WLCOME123";
1017      var tempInput = document.createElement("input");
1018
1019      tempInput.value = textToCopy;
1020      document.body.appendChild(tempInput);
1021      tempInput.select();
1022      document.execCommand("copy");
1023      document.body.removeChild(tempInput);
1024
1025      var copyIcon = document.getElementById("copyIcon");
1026      copyIcon.style.pointerEvents = "none";
1027      copyIcon.setAttribute("fill", "#888888");
1028
1029    }
1030
1031    function showDiscountCode(emailInputValue) {
1032      document.getElementById("discount_code_section").style.display = "block";
1033      document.getElementById("enter_section").style.display = "none";
1034      document.getElementById('emailInput2').value = emailInputValue;
1035      var domain = window.location.hostname;
1036      document.getElementById('domain').value=domain;
1037    }
1038
1039    document.getElementById('emailForm').addEventListener('submit', function (e) {
1040        e.preventDefault();
1041        var emailInputValue = document.getElementById('emailInput').value;
1042        showDiscountCode(emailInputValue);
1043    });
1044
1045    var newFeature_enable = "false";
1046    var layout_option = "full_dialog";
1047
1048    function PopUp(hideOrshow) {
1049      if (hideOrshow == 'hide' || window.location.href.indexOf("checkout") > -1) {
1050        document.getElementById('modalcontainer').style.display = "none";
1051        document.getElementById('modalcontainer2').style.display = "none";
1052        document.getElementById('modalcontainer3').style.display = "none";
1053        document.getElementsByTagName("body")[0].classList.remove("easy_popup-app-noscroll");
1054      } else if (sessionStorage.getItem("popupWasShown") == null) {
1055        sessionStorage.setItem("popupWasShown", 1);
1056        if(newFeature_enable=='true' ){
1057          document.getElementById('modalcontainer').removeAttribute('style');
1058        }else if(newFeature_enable=='false' && layout_option=='top_bottom')
1059        {
1060          document.getElementById('modalcontainer2').removeAttribute('style');
1061        }else{
1062          document.getElementById('modalcontainer3').removeAttribute('style');
1063        }
1064        document.getElementsByTagName("body")[0].classList.add("easy_popup-app-noscroll");
1065      }
1066    }
1067
1068    window.onload = function() {
1069    document.getElementById("modaltitle").innerHTML = document.getElementById("modaltitle").innerText;
1070    document.getElementById("modalcontent").innerHTML = document.getElementById("modalcontent").innerText;
1071      setTimeout(function() {
1072        PopUp('show');
1073      }, 0);
1074    }
1075
1076  </script>
1076
1077</body>
1078
1079<!-- /Snippet -->
1080
1081<!-- Snippet:global/body_start: Console Extension -->
1082<div id='es_console' style='display: none;'>251247</div>
1083<!-- /Snippet -->
1084<link href="/assets/css/wishlist.css?v1.02" rel="stylesheet" type="text/css" media="screen" />
1085<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
1086
1087<script src="/assets/js/wishlist/wishlist.js" type="text/javascript"></script>
1087
1088	
1089 	<style>
1090  header {
1091    --logo-width: 120px;
1092  }
1093  .header-wrapper,
1094  .header-wrapper .list-menu--disclosure,
1095  .header-wrapper .search-modal{
1096    background-color: #FCF6E1;
1097  }
1098  .header-wrapper .search-modal .field__input{
1099    background-color: rgb(var(--color-background));
1100  }
1101  .header-wrapper summary .icon-caret,
1102  .header-wrapper .header__menu-item a,
1103  .header-wrapper .list-menu__item,
1104  .header-wrapper .link--text{
1105    color: #000000;
1106  }
1107  
1108  .search-modal__form{
1109    position: relative;
1110  }
1111  
1112  .dropdown {
1113    display: none;
1114    position: absolute;
1115    top: 100%;
1116    left: 0;
1117    width: 100%;
1118    padding: 5px 0;
1119    background-color: #fff;
1120    color:#000;
1121    z-index: 1000;
1122    border-bottom-left-radius: 15px;
1123    border-bottom-right-radius: 15px;
1124    border: 1px solid rgba(var(--color-foreground), 1);
1125    border-top: none;
1126    overflow-x: hidden;
1127    overflow-y: auto;
1128    max-height: 350px;
1129  }
1130  
1131  .dropdown-item {
1132    padding: 0.4rem 2rem;
1133    cursor: pointer;
1134    line-height: 1.4;
1135    overflow: hidden;
1136    text-overflow: ellipsis;
1137    white-space: nowrap;
1138  }
1139  
1140  .dropdown-item:hover{
1141    background-color: #f3f3f3;
1142  }
1143  
1144  .search__input.is-focus{
1145    border-radius: 15px;
1146    border-bottom-left-radius: 0;
1147    border-bottom-right-radius: 0;
1148    border: 1px solid rgba(var(--color-foreground), 1);
1149    border-bottom: none;
1150    box-shadow: none;
1151  }
1152  
1153  .clear-all {
1154    text-align: right;
1155    padding: 0 2rem 0.2rem;
1156    line-height: 1;
1157    font-size: 70%;
1158    margin-bottom: -2px;
1159  }
1160  
1161  .clear-all:hover{
1162    background-color: #fff;
1163  }
1164  
1165  .search-input-focus .easystore-section-header-hidden{
1166    transform: none;
1167  }
1168  .referral-notification {
1169    position: absolute;
1170    top: 100%;
1171    right: 0;
1172    background: white;
1173    border: 1px solid #e0e0e0;
1174    border-radius: 8px;
1175    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1176    width: 280px;
1177    z-index: 1000;
1178    padding: 16px;
1179    margin-top: 8px;
1180    font-size: 14px;
1181    line-height: 1.4;
1182  }
1183  
1184  .referral-notification::before {
1185    content: '';
1186    position: absolute;
1187    top: -8px;
1188    right: 20px;
1189    width: 0;
1190    height: 0;
1191    border-left: 8px solid transparent;
1192    border-right: 8px solid transparent;
1193    border-bottom: 8px solid white;
1194  }
1195  
1196  .referral-notification::after {
1197    content: '';
1198    position: absolute;
1199    top: -9px;
1200    right: 20px;
1201    width: 0;
1202    height: 0;
1203    border-left: 8px solid transparent;
1204    border-right: 8px solid transparent;
1205    border-bottom: 8px solid #e0e0e0;
1206  }
1207  
1208  .referral-notification h4 {
1209    margin: 0 0 8px 0;
1210    color: #2196F3;
1211    font-size: 16px;
1212    font-weight: 600;
1213  }
1214  
1215  .referral-notification p {
1216    margin: 0 0 12px 0;
1217    color: #666;
1218  }
1219  
1220  .referral-notification .referral-code {
1221    background: #f5f5f5;
1222    padding: 8px;
1223    border-radius: 4px;
1224    font-family: monospace;
1225    font-size: 13px;
1226    text-align: center;
1227    margin: 8px 0;
1228    border: 1px solid #ddd;
1229  }
1230  
1231  .referral-notification .close-btn {
1232    position: absolute;
1233    top: 8px;
1234    right: 8px;
1235    background: none;
1236    border: none;
1237    font-size: 18px;
1238    color: #999;
1239    cursor: pointer;
1240    padding: 0;
1241    width: 20px;
1242    height: 20px;
1243    line-height: 1;
1244  }
1245  
1246  .referral-notification .close-btn:hover {
1247    color: #333;
1248  }
1249  
1250  .referral-notification .action-btn {
1251    background: #2196F3;
1252    color: white;
1253    border: none;
1254    padding: 8px 16px;
1255    border-radius: 4px;
1256    cursor: pointer;
1257    font-size: 12px;
1258    margin-right: 8px;
1259    margin-top: 8px;
1260  }
1261  
1262  .referral-notification .action-btn:hover {
1263    background: #1976D2;
1264  }
1265  
1266  .referral-notification .dismiss-btn {
1267    background: transparent;
1268    color: #666;
1269    border: 1px solid #ddd;
1270    padding: 8px 16px;
1271    border-radius: 4px;
1272    cursor: pointer;
1273    font-size: 12px;
1274    margin-top: 8px;
1275  }
1276  
1277  .referral-notification .dismiss-btn:hover {
1278    background: #f5f5f5;
1279  }
1280  .referral-modal__dialog {
1281    transform: translate(-50%, 0);
1282    transition: transform var(--duration-default) ease, visibility 0s;
1283    z-index: 10000;
1284    position: fixed;
1285    top: 20vh;
1286    left: 50%;
1287    width: 100%;
1288    max-width: 350px;
1289    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1290    border-radius: 12px;
1291    background-color: #fff;
1292    color: #000;
1293    padding: 20px;
1294    text-align: center;
1295  }
1296
1297  .modal-overlay.referral-modal-overlay {
1298    position: fixed;
1299    top: 0;
1300    left: 0;
1301    width: 100%;
1302    height: 100%;
1303    background-color: rgba(0, 0, 0, 0.7);
1304    z-index: 2001;
1305    display: block;
1306    opacity: 1;
1307    transition: opacity var(--duration-default) ease, visibility 0s;
1308  }
1309</style>
1310
1311<link rel="preload" href="https://store-themes.easystore.co/251247/themes/282847/assets/section-header.css?t=1790328533" as="style" onload="this.onload=null;this.rel='stylesheet'">
1312<link rel="preload" href="https://store-themes.easystore.co/251247/themes/282847/assets/component-list-menu.css?t=1790328533" as="style" onload="this.onload=null;this.rel='stylesheet'">
1313<link rel="preload" href="https://store-themes.easystore.co/251247/themes/282847/assets/component-menu-drawer.css?t=1790328533" as="style" onload="this.onload=null;this.rel='stylesheet'">
1314<link rel="preload" href="https://store-themes.easystore.co/251247/themes/282847/assets/component-cart-notification.css?v1.1?t=1790328533" as="style" onload="this.onload=null;this.rel='stylesheet'">
1315
1316<script src="https://store-themes.easystore.co/251247/themes/282847/assets/cart-notification.js?t=1790328533" defer="defer"></script>
vendor: 1 bytes, line 1316
1316
1317<script src="https://store-themes.easystore.co/251247/themes/282847/assets/details-modal.js?t=1790328533" defer="defer"></script>
1317
1318
1319<svg xmlns="http://www.w3.org/2000/svg" class="hidden">
1320  <symbol id="icon-search" viewbox="0 0 18 19" fill="none">
1321    <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"/>
1322  </symbol>
1323
1324  <symbol id="icon-close" class="icon icon-close" fill="none" viewBox="0 0 18 17">
1325    <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">
1326  </symbol>
1327</svg>
1328
1329
1330<div id="easystore-section-header">
1331  <sticky-header class="header-wrapper header-wrapper--border-bottom">
1332    <header class="header header--top-center page-width header--has-menu" itemscope itemtype="http://schema.org/Organization">
1333      <header-drawer data-breakpoint="tablet">
1334        <details class="menu-drawer-container menu-opening">
1335          <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">
1336            <span>
1337              
1338
1339
1340    <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>
1341
1342  
1343
1344              
1345
1346
1347    <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>
1348
1349  
1350
1351            </span>
1352          </summary>
1353          <div id="menu-drawer" class="menu-drawer motion-reduce" tabindex="-1">
1354            <div class="menu-drawer__inner-container">
1355              <div class="menu-drawer__navigation-container">
1356                <nav class="menu-drawer__navigation">
1357                  <ul class="menu-drawer__menu list-menu" role="list">
1358                    
1359                    
1360                      
1361                        <li>
1362                          <a href="/"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
1363                            Home
1364                          </a>
1365                        </li>
1366                      
1367                    
1368                    
1369                      
1370                        
1371                        <li>
1372                          <details>
1373                                <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags">
1374                                  <a href="/collections/others"  class="link--text list-menu__item menu-drawer__menu-item">
1375                                    Skincare
1376                                  </a>
1377                                  
1378
1379
1380    <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>
1381
1382  
1383
1384                                  
1385
1386
1387    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
1388      <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>
1389    </svg>
1390
1391  
1392
1393                                </summary>
1394                                <div class="menu-drawer__submenu motion-reduce" tabindex="-1">
1395                                  <div class="menu-drawer__inner-submenu">
1396                                    <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true">
1397                                      
1398
1399
1400    <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>
1401
1402  
1403
1404                                      Skincare
1405                                    </button>
1406                                    <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1">
1407                                      
1408                                        
1409                                        
1410                                          <li>
1411                                            <a href="/collections/nori-skincare-2"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1412                                              All Products
1413                                            </a>
1414                                          </li>
1415                                        
1416                                      
1417                                        
1418                                        
1419                                          <li>
1420                                            <a href="/collections/cleanser"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1421                                              Cleanser
1422                                            </a>
1423                                          </li>
1424                                        
1425                                      
1426                                        
1427                                        
1428                                          <li>
1429                                            <a href="/collections/toner"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1430                                              Toner
1431                                            </a>
1432                                          </li>
1433                                        
1434                                      
1435                                        
1436                                        
1437                                          <li>
1438                                            <a href="/collections/serum"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1439                                              Serum
1440                                            </a>
1441                                          </li>
1442                                        
1443                                      
1444                                        
1445                                        
1446                                          <li>
1447                                            <a href="/collections/moisteriser"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1448                                              Moisturizer
1449                                            </a>
1450                                          </li>
1451                                        
1452                                      
1453                                        
1454                                        
1455                                          <li>
1456                                            <a href="/collections/sun-screen"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1457                                              Sun Screen
1458                                            </a>
1459                                          </li>
1460                                        
1461                                      
1462                                      
1463                                    </ul>
1464                                  </div>
1465                                </div>
1466                          </details>
1467                        </li>
1468                      
1469                    
1470                    
1471                      
1472                        
1473                        <li>
1474                          <details>
1475                                <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags">
1476                                  <a href="/collections/haircare"  class="link--text list-menu__item menu-drawer__menu-item">
1477                                    Haircare
1478                                  </a>
1479                                  
1480
1481
1482    <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>
1483
1484  
1485
1486                                  
1487
1488
1489    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
1490      <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>
1491    </svg>
1492
1493  
1494
1495                                </summary>
1496                                <div class="menu-drawer__submenu motion-reduce" tabindex="-1">
1497                                  <div class="menu-drawer__inner-submenu">
1498                                    <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true">
1499                                      
1500
1501
1502    <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>
1503
1504  
1505
1506                                      Haircare
1507                                    </button>
1508                                    <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1">
1509                                      
1510                                        
1511                                        
1512                                          <li>
1513                                            <a href="/collections/all-product-1"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1514                                              All Suri Haircare Products
1515                                            </a>
1516                                          </li>
1517                                        
1518                                      
1519                                        
1520                                        
1521                                          <li>
1522                                            <a href="/collections/suri-hairfall"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1523                                              Suri Hairfall
1524                                            </a>
1525                                          </li>
1526                                        
1527                                      
1528                                        
1529                                        
1530                                          <li>
1531                                            <a href="/collections/suri-dandruff"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1532                                              Suri Dandruff
1533                                            </a>
1534                                          </li>
1535                                        
1536                                      
1537                                      
1538                                    </ul>
1539                                  </div>
1540                                </div>
1541                          </details>
1542                        </li>
1543                      
1544                    
1545                    
1546                      
1547                        
1548                        <li>
1549                          <details>
1550                                <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags">
1551                                  <a href="/collections/celebrities"  class="link--text list-menu__item menu-drawer__menu-item">
1552                                    Fragrance
1553                                  </a>
1554                                  
1555
1556
1557    <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>
1558
1559  
1560
1561                                  
1562
1563
1564    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
1565      <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>
1566    </svg>
1567
1568  
1569
1570                                </summary>
1571                                <div class="menu-drawer__submenu motion-reduce" tabindex="-1">
1572                                  <div class="menu-drawer__inner-submenu">
1573                                    <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true">
1574                                      
1575
1576
1577    <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>
1578
1579  
1580
1581                                      Fragrance
1582                                    </button>
1583                                    <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1">
1584                                      
1585                                        
1586                                        
1587                                          <li>
1588                                            <a href="/collections/all-product"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1589                                              All Perfume Products
1590                                            </a>
1591                                          </li>
1592                                        
1593                                      
1594                                        
1595                                        
1596                                          <li>
1597                                            <a href="/collections/lisa-surihani"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1598                                              Suri Collection
1599                                            </a>
1600                                          </li>
1601                                        
1602                                      
1603                                        
1604                                        
1605                                          <li>
1606                                            <a href="/collections/aaron-aziz"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1607                                              The Oud Collection
1608                                            </a>
1609                                          </li>
1610                                        
1611                                      
1612                                        
1613                                        
1614                                          <li>
1615                                            <a href="/collections/sherry-al-hadad"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1616                                     
1616         Ma Cherie Collection
1617                                            </a>
1618                                          </li>
1619                                        
1620                                      
1621                                        
1622                                        
1623                                          <li>
1624                                            <a href="/collections/eve-collection"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1625                                              EVE Collection
1626                                            </a>
1627                                          </li>
1628                                        
1629                                      
1630                                        
1631                                        
1632                                          <li>
1633                                            <a href="/collections/eyra-hazali"  class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
1634                                              Nori Collection
1635                                            </a>
1636                                          </li>
1637                                        
1638                                      
1639                                      
1640                                    </ul>
1641                                  </div>
1642                                </div>
1643                          </details>
1644                        </li>
1645                      
1646                    
1647                    
1648                      
1649                        <li>
1650                          <a href="/pages/about-us-1"  class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
1651                            About Us
1652                          </a>
1653                        </li>
1654                      
1655                    
1656                  </ul>
1657                </nav>
1658
1659                <div class="menu-drawer__utility-links">
1660
1661                  
1662
1663
1664
1665                  
1666                  
1667                  
1668                    <a href="/account/login" class="menu-drawer__account link link--text focus-inset h5">
1669                       
1670
1671
1672    <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>
1673
1674  
1675 
1676                      
1677                      Log in
1678                    </a>
1679                  
1680                    <a href="/account/register" class="menu-drawer__account link link--text focus-inset h5">
1681                      
1682                       
1683
1684
1685    <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">
1686      <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>
1687    </svg>
1688
1689  
1690 
1691                      Create account
1692                    </a>
1693                  
1694                  
1695                  
1696                </div>
1697              </div>
1698            </div>
1699          </div>
1700        </details>
1701      </header-drawer>
1702  
1703      
1704        <a href="/" class="header__heading-link link link--text focus-inset" itemprop="url">
1705          <img src="https://cdn.store-assets.com/s/251247/f/14073118.png" class="header__heading-logo" alt="nori.com.my" loading="lazy" itemprop="logo">
1706        </a>
1707      
1708
1709      
1710      <div class="header__search-input" tabindex="-1">
1711        <form action="/search" method="get" role="search" class="search search-modal__form">
1712          <div class="field">
1713            <input class="search__input field__input" 
1714              id="Search-In-Modal"
1715              type="search"
1716              name="q"
1717              value=""
1718              placeholder="Search"
1719              autocomplete="off"
1720            >
1721            <label class="field__label" for="Search-In-Modal">Search</label>
1722            <div class="dropdown" id="searchDropdown"></div>
1723            <input type="hidden" name="search_history" class="hidden_search_history">
1724            <input type="hidden" name="options[prefix]" value="last">
1725            <button class="search__button field__button" aria-label="Search">
1726              <svg class="icon icon-search" aria-hidden="true" focusable="false" role="presentation">
1727                <use href="#icon-search">
1728              </svg>
1729            </button> 
1730          </div>
1731        </form>
1732      </div>
1733      
1734
1735      <nav class="header__inline-menu">
1736        <ul class="list-menu list-menu--inline" role="list">
1737          
1738            
1739              
1740                <li>
1741                  <a href="/"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
1742                    Home
1743                  </a>
1744                </li>
1745              
1746            
1747            
1748              
1749                
1750                <li>
1751                  <details-disclosure>
1752                    <details>
1753                      <summary class="header__menu-item list-menu__item link focus-inset">
1754                        <a href="/collections/others"  >Skincare</a>
1755                        
1756
1757
1758    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
1759      <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>
1760    </svg>
1761
1762  
1763
1764                      </summary>
1765                      <ul class="header__submenu list-menu list-menu--disclosure caption-large motion-reduce" role="list" tabindex="-1">
1766                        
1767                        
1768                        
1769                          
1770                            
1771                            <li>
1772                              <a href="/collections/nori-skincare-2"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1773                                All Products
1774                              </a>
1775                            </li>
1776                          
1777                        
1778                        
1779                          
1780                            
1781                            <li>
1782                              <a href="/collections/cleanser"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1783                                Cleanser
1784                              </a>
1785                            </li>
1786                          
1787                        
1788                        
1789                          
1790                            
1791                            <li>
1792                              <a href="/collections/toner"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1793                                Toner
1794                              </a>
1795                            </li>
1796                          
1797                        
1798                        
1799                          
1800                            
1801                            <li>
1802                              <a href="/collections/serum"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1803                                Serum
1804                              </a>
1805                            </li>
1806                          
1807                        
1808                        
1809                          
1810                            
1811                            <li>
1812                              <a href="/collections/moisteriser"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1813                                Moisturizer
1814                              </a>
1815                            </li>
1816                          
1817                        
1818                        
1819                          
1820                            
1821                            <li>
1822                              <a href="/collections/sun-screen"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1823                                Sun Screen
1824                              </a>
1825                            </li>
1826                          
1827                        
1828                      </ul>
1829                    </details>
1830                  </details-disclosure>
1831                </li>
1832              
1833            
1834            
1835              
1836                
1837                <li>
1838                  <details-disclosure>
1839                    <details>
1840                      <summary class="header__menu-item list-menu__item link focus-inset">
1841                        <a href="/collections/haircare"  >Haircare</a>
1842                        
1843
1844
1845    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
1846      <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>
1847    </svg>
1848
1849  
1850
1851                      </summary>
1852                      <ul class="header__submenu list-menu list-menu--disclosure caption-large motion-reduce" role="list" tabindex="-1">
1853                        
1854                        
1855                        
1856                          
1857                            
1858                            <li>
1859                              <a href="/collections/all-product-1"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1860                                All Suri Haircare Products
1861                              </a>
1862                            </li>
1863                          
1864                        
1865                        
1866                          
1867                            
1868                            <li>
1869                              <a href="/collections/suri-hairfall"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1870                                Suri Hairfall
1871                              </a>
1872                            </li>
1873                          
1874                        
1875                        
1876                          
1877                            
1878                            <li>
1879                              <a href="/collections/suri-dandruff"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1880                                Suri Dandruff
1881                              </a>
1882                            </li>
1883                          
1884                        
1885                      </ul>
1886                    </details>
1887                  </details-disclosure>
1888                </li>
1889              
1890            
1891            
1892              
1893                
1894                <li>
1895                  <details-disclosure>
1896                    <details>
1897                      <summary class="header__menu-item list-menu__item link focus-inset">
1898                        <a href="/collections/celebrities"  >Fragrance</a>
1899                        
1900
1901
1902    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
1903      <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>
1904    </svg>
1905
1906  
1907
1908                      </summary>
1909                      <ul class="header__submenu list-menu list-menu--disclosure caption-large motion-reduce" role="list" tabindex="-1">
1910                        
1911                        
1912                        
1913                          
1914                            
1915                            <li>
1916                              <a href="/collections/all-product"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1917                                All Perfume Products
1918                              </a>
1919                            </li>
1920                          
1921                        
1922                        
1923                          
1924                            
1925                            <li>
1926                              <a href="/collections/lisa-surihani"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1927                                Suri Collection
1928                              </a>
1929                            </li>
1930                          
1931                        
1932                        
1933                          
1934                            
1935                            <li>
1936                              <a href="/collections/aaron-aziz"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1937                                The Oud Collection
1938                              </a>
1939                            </li>
1940                          
1941                        
1942                        
1943                          
1944                            
1945                            <li>
1946                              <a href="/collections/sherry-al-hadad"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1947                                Ma Cherie Collection
1948                              </a>
1949                            </li>
1950                          
1951                        
1952                        
1953                          
1954                            
1955                            <li>
1956                              <a href="/collections/eve-collection"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1957                                EVE Collection
1958                              </a>
1959                            </li>
1960                          
1961                        
1962                        
1963                          
1964                            
1965                            <li>
1966                              <a href="/collections/eyra-hazali"  class="header__menu-item list-menu__item link link--text focus-inset caption-large">
1967                                Nori Collection
1968                              </a>
1969                            </li>
1970                          
1971                        
1972                      </ul>
1973                    </details>
1974                  </details-disclosure>
1975                </li>
1976              
1977            
1978            
1979              
1980                <li>
1981                  <a href="/pages/about-us-1"  class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
1982                    About Us
1983                  </a>
1984                </li>
1985              
1986            
1987            
1988            
1989              
1990                
1991                  
1992                
1993                  
1994                
1995              
1996            
1997        </ul>
1998      </nav>
1999      <div class="header__icons">
2000
2001        
2002          
2003            <div class="header__icon header__icon--account link link--text focus-inset small-hide medium-hide" style="position: relative;">
2004              <a href="/account/login" class="header__icon link link--text focus-inset p-2">
2005                
2006
2007
2008    <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>
2009
2010  
2011
2012                <span id="my-account" class="header__link-label">Login</span>
2013              </a>
2014
2015              <!-- Referral Notification Popup for Desktop -->
2016              <div id="referralNotification" class="referral-notification" style="display: none;">
2017                <button class="close-btn" onclick="dismissReferralNotification()">&times;</button>
2018                <div style="text-align: center; margin-bottom: 16px;">
2019                  <div style="width: 100px; height: 100px; margin: 0 auto;">
2020                    <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg">
2021                  </div>
2022                </div>
2023                <p id="referralSignupMessage" style="text-align: center; font-size: 14px; color: #666; margin: 0 0 20px 0;">
2024                  Your friend gifted you   credit! Sign up now to redeem.
2025                </p>
2026                <div style="text-align: center;">
2027                  <button class="btn" onclick="goToSignupPage()" style="width: 100%;">
2028                    Sign Up
2029                  </button>
2030                </div>
2031              </div>
2032            </div>
2033          
2034        
2035
2036        <a href="/cart" class="header__icon link link--text focus-inset" id="cart-icon-bubble">
2037          <span class="header__icon--cart">
2038            
2039
2040
2041    <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>
2042
2043  
2044
2045            <div class="cart-count-bubble hidden">
2046              <span aria-hidden="true" class="js-content-cart-count">0</span>
2047            </div>
2048          </span>
2049          <span class="header__link-label medium-hide small-hide">
2050            Cart
2051          </span>
2052        </a>
2053
2054        
2055          
2056          <!-- Referral Notification Modal for Mobile -->
2057          <details-modal class="referral-modal" id="referralMobileModal">
2058            <details>
2059              <summary class="referral-modal__toggle" aria-haspopup="dialog" aria-label="Open referral modal" style="display: none;">
2060              </summary>
2061              <div class="modal-overlay referral-modal-overlay"></div>
2062              <div class="referral-modal__dialog" role="dialog" aria-modal="true" aria-label="Referral notification">
2063                <div class="referral-modal__content">
2064                  <button type="button" class="modal__close-button" aria-label="Close" onclick="closeMobileReferralModal()" style="position: absolute; top: 16px; right: 16px; background: none; border: none; font-size: 24px; cursor: pointer;">
2065                    &times;
2066                  </button>
2067                  
2068                  <div style="margin-bottom: 24px;">
2069                    <div style="width: 120px; height: 120px; margin: 0 auto 20px;">
2070                      <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg" style="width: 100%; height: 100%;">
2071                    </div>
2072                  </div>
2073                  
2074                  <p id="referralSignupMessageMobile" style="font-size: 16px; color: #333; margin: 0 0 30px 0; line-height: 1.5;">
2075                    Your friend gifted you   credit! Sign up now to redeem.
2076                  </p>
2077                  
2078                  <button type="button" class="btn" onclick="goToSignupPageFromMobile()" style="width: 100%;">
2079                    Sign Up
2080                  </button>
2081                </div>
2082              </div>
2083            </details>
2084          </details-modal>
2085          
2086        
2087        
2088      </div>
2089    </header>
2090  </sticky-header>
2091  
2092<cart-notification>
2093  <div class="cart-notification-wrapper page-width color-background-1">
2094    <div id="cart-notification" class="cart-notification focus-inset" aria-modal="true" aria-label="Added to cart" role="dialog" tabindex="-1">
2095      <div class="cart-notification__header">
2096        <h2 class="cart-notification__heading caption-large">
2097
2098
2099    <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">
2100      <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>
2101    </svg>
2102
2103  
2104 Added to cart</h2>
2105        <button type="button" class="cart-notification__close modal__close-button link link--text focus-inset" aria-label="accessibility.close">
2106          
2107
2108
2109    <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>
2110
2111  
2112
2113        </button>
2114      </div>
2115      <div id="cart-notification-product" class="cart-notification-product"></div>
2116      <div class="cart-notification__links">
2117        <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>
2118        <form action="/cart" method="post" id="cart-notification-form">
2119          <input type="hidden" name="_token" value="XYmWcVVl4QLQaA5mLkFyZbn4QVnbDUIcwZ74PaUE">
2120          <input type="hidden" name="current_currency" value="">
2121          <button class="button button--primary button--full-width" name="checkout" value="true">Checkout</button>
2122        </form>
2123        <button type="button" class="link button-label">Continue shopping</button>
2124      </div>
2125    </div>
2126  </div>
2127</cart-notification>
2128<style>
2129  .cart-notification {
2130     display: none;
2131  }
2132</style>
2133<script>
2134document.getElementById('cart-notification-form').addEventListener('submit',(event)=>{
2135  if(event.submitter) event.submitter.classList.add('loading');
2136})
2137
2138</script>
2138
2139
2140</div>
2141
2142
2143<script>
2144
2145  class StickyHeader extends HTMLElement {
2146    constructor() {
2147      super();
2148    }
2149
2150    connectedCallback() {
2151      this.header = document.getElementById('easystore-section-header');
2152      this.headerBounds = {};
2153      this.currentScrollTop = 0;
2154      this.preventReveal = false;
2155
2156      this.onScrollHandler = this.onScroll.bind(this);
2157      this.hideHeaderOnScrollUp = () => this.preventReveal = true;
2158
2159      this.addEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp);
2160      window.addEventListener('scroll', this.onScrollHandler, false);
2161
2162      this.createObserver();
2163    }
2164
2165    disconnectedCallback() {
2166      this.removeEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp);
2167      window.removeEventListener('scroll', this.onScrollHandler);
2168    }
2169
2170    createObserver() {
2171      let observer = new IntersectionObserver((entries, observer) => {
2172        this.headerBounds = entries[0].intersectionRect;
2173        observer.disconnect();
2174      });
2175
2176      observer.observe(this.header);
2177    }
2178
2179    onScroll() {
2180      const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
2181
2182      if (scrollTop > this.currentScrollTop && scrollTop > this.headerBounds.bottom) {
2183        requestAnimationFrame(this.hide.bind(this));
2184      } else if (scrollTop < this.currentScrollTop && scrollTop > this.headerBounds.bottom) {
2185        if (!this.preventReveal) {
2186          requestAnimationFrame(this.reveal.bind(this));
2187        } else {
2188          window.clearTimeout(this.isScrolling);
2189
2190          this.isScrolling = setTimeout(() => {
2191            this.preventReveal = false;
2192          }, 66);
2193
2194          requestAnimationFrame(this.hide.bind(this));
2195        }
2196      } else if (scrollTop <= this.headerBounds.top) {
2197        requestAnimationFrame(this.reset.bind(this));
2198      }
2199
2200
2201      this.currentScrollTop = scrollTop;
2202    }
2203
2204    hide() {
2205      this.header.classList.add('easystore-section-header-hidden', 'easystore-section-header-sticky');
2206      this.closeMenuDisclosure();
2207      // this.closeSearchModal();
2208    }
2209
2210    reveal() {
2211      this.header.classList.add('easystore-section-header-sticky', 'animate');
2212      this.header.classList.remove('easystore-section-header-hidden');
2213    }
2214
2215    reset() {
2216      this.header.classList.remove('easystore-section-header-hidden', 'easystore-section-header-sticky', 'animate');
2217    }
2218
2219    closeMenuDisclosure() {
2220      this.disclosures = this.disclosures || this.header.querySelectorAll('details-disclosure');
2221      this.disclosures.forEach(disclosure => disclosure.close());
2222    }
2223
2224    // closeSearchModal() {
2225    //   this.searchModal = this.searchModal || this.header.querySelector('details-modal');
2226    //   this.searchModal.close(false);
2227    // }
2228  }
2229
2230  customElements.define('sticky-header', StickyHeader);
2231
2232  
2233  class DetailsDisclosure extends HTMLElement{
2234    constructor() {
2235      super();
2236      this.mainDetailsToggle = this.querySelector('details');
2237      // this.mainDetailsToggle.addEventListener('focusout', this.onFocusOut.bind(this));
2238      this.mainDetailsToggle.addEventListener('mouseover', this.open.bind(this));
2239      this.mainDetailsToggle.addEventListener('mouseleave', this.close.bind(this));
2240    }
2241
2242    onFocusOut() {
2243      setTimeout(() => {
2244        if (!this.contains(document.activeElement)) this.close();
2245      })
2246    }
2247
2248    open() {
2249      this.mainDetailsToggle.setAttribute('open',1)
2250    }
2251
2252    close() {
2253      this.mainDetailsToggle.removeAttribute('open')
2254    }
2255  }
2256
2257  customElements.define('details-disclosure', DetailsDisclosure);
2258
2259  function clearAll() {
2260    localStorage.removeItem('searchHistory'); 
2261    
2262    var customer = "";
2263    if(customer) {
2264      // Your logic to clear all data or call an endpoint
2265      fetch('/account/search_histories', {
2266          method: 'DELETE',
2267          headers: {
2268            "Content-Type": "application/json",
2269            "X-Requested-With": "XMLHttpRequest"
2270          },
2271          body: JSON.stringify({
2272            _token: "XYmWcVVl4QLQaA5mLkFyZbn4QVnbDUIcwZ74PaUE"
2273          }),
2274      })
2275      .then(response => response.json())
2276    }
2277  }
2278  // End - delete search history from local storage
2279  
2280  // search history dropdown  
2281  var searchInputs = document.querySelectorAll('.search__input');
2282  
2283  if(searchInputs.length > 0) {
2284    
2285    searchInputs.forEach((searchInput)=> {
2286    
2287      searchInput.addEventListener('focus', function() {
2288        var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown');
2289        searchDropdown.innerHTML = ''; // Clear existing items
2290  
2291        // retrieve data from local storage
2292        var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || [];
2293  
2294        // Convert JSON to string
2295        var search_history_json = JSON.stringify(searchHistoryData);
2296  
2297        // Set the value of the hidden input
2298        searchInput.closest('form').querySelector(".hidden_search_history").value = search_history_json;
2299  
2300        // create dropdown items
2301        var clearAllItem = document.createElement('div');
2302        clearAllItem.className = 'dropdown-item clear-all';
2303        clearAllItem.textContent = 'Clear';
2304        clearAllItem.addEventListener('click', function() {
2305          clearAll();
2306          searchDropdown.style.display = 'none';
2307          searchInput.classList.remove('is-focus');
2308        });
2309        searchDropdown.appendChild(clearAllItem);
2310  
2311        // create dropdown items
2312        searchHistoryData.forEach(function(item) {
2313          var dropdownItem = document.createElement('div');
2314          dropdownItem.className = 'dropdown-item';
2315          dropdownItem.textContent = item.term;
2316          dropdownItem.addEventListener('click', function() {
2317            searchInput.value = item.term;
2318            searchInput.closest('form').submit();
2319            searchDropdown.style.display = 'none';
2320          });
2321          searchDropdown.appendChild(dropdownItem);
2322        });
2323  
2324        if(searchHistoryData.length > 0){
2325          // display the dropdown
2326          searchInput.classList.add('is-focus');
2327          document.body.classList.add('search-input-focus');
2328          searchDropdown.style.display = 'block';
2329        }
2330      });
2331  
2332      searchInput.addEventListener("focusout", (event) => {
2333        var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown');
2334        searchInput.classList.remove('is-focus');
2335        searchDropdown.classList.add('transparent');
2336        setTimeout(()=>{
2337          searchDropdown.style.display = 'none';
2338          searchDropdown.classList.remove('transparent');
2339          document.body.classList.remove('search-input-focus');
2340        }, 400);
2341      });
2342    })
2343  }
2344  // End - search history dropdown
2345
2346  // referral notification popup
2347  const referralMessageTemplate = 'Your friend gifted you __CURRENCY_CODE__ __CREDIT_AMOUNT__ credit! Sign up now to redeem.';
2348  const shopCurrency = 'RM';
2349
2350  function getCookie(name) {
2351    const value = `; ${document.cookie}`;
2352    const parts = value.split(`; ${name}=`);
2353    if (parts.length === 2) return parts.pop().split(';').shift();
2354    return null;
2355  }
2356
2357  function removeCookie(name) {
2358    document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
2359  }
2360
2361  function showReferralNotification() {
2362    const referralCode = getCookie('customer_referral_code');
2363    
2364    
2365    const customerReferralCode = null;
2366    
2367    
2368    const activeReferralCode = referralCode || customerReferralCode;
2369    const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {};
2370    
2371    if (referralData.timestamp && referralData.expirationDays) {
2372      const expirationTime = referralData.timestamp + (referralData.expirationDays * 24 * 60 * 60 * 1000);
2373      if (Date.now() > expirationTime) {
2374        localStorage.removeItem('referral_notification_data');
2375        return;
2376      }
2377    }
2378    
2379    if (referralData.dismissed) return;
2380    
2381    if (activeReferralCode) {
2382      if (referralData.creditAmount) {
2383        displayReferralNotification(referralData.creditAmount);
2384      } else {
2385        fetchReferralCampaignData(activeReferralCode);
2386      }
2387    }
2388  }
2389    
2390  function fetchReferralCampaignData(referralCode) {
2391    fetch(`/customer/referral_program/campaigns/${referralCode}`)
2392      .then(response => {
2393        if (!response.ok) {
2394          throw new Error('Network response was not ok');
2395        }
2396        return response.json();
2397      })
2398      .then(data => {
2399        let refereeCreditAmount = null;
2400        if (data.data.campaign && data.data.campaign.referral_rules) {
2401          const refereeRule = data.data.campaign.referral_rules.find(rule => 
2402            rule.target_type === 'referee' && 
2403            rule.event_name === 'customer/create' && 
2404            rule.entitlement && 
2405            rule.entitlement.type === 'credit'
2406          );
2407          
2408          if (refereeRule) {
2409            refereeCreditAmount = refereeRule.entitlement.amount;
2410          }
2411        }
2412        
2413        const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {};
2414        referralData.creditAmount = refereeCreditAmount;
2415        referralData.dismissed = referralData.dismissed || false;
2416        referralData.timestamp = Date.now();
2417        referralData.expirationDays = 3;
2418        localStorage.setItem('referral_notification_data', JSON.stringify(referralData));
2419        
2420        displayReferralNotification(refereeCreditAmount);
2421      })
2422      .catch(error => {
2423        removeCookie('customer_referral_code');
2424      });
2425  }
2426    
2427  function displayReferralNotification(creditAmount = null) {
2428    const isMobile = innerWidth <= 749;
2429    
2430    if (isMobile) {
2431      const mobileModal = document.querySelector('#referralMobileModal details');
2432      const mobileMessageElement = document.getElementById('referralSignupMessageMobile');
2433      
2434      if (mobileModal && mobileMessageElement) {
2435        if (creditAmount) {
2436          const finalMessage = referralMessageTemplate
2437            .replace('__CREDIT_AMOUNT__', creditAmount)
2438            .replace('__CURRENCY_CODE__', shopCurrency);
2439          
2440          mobileMessageElement.textContent = finalMessage;
2441        }
2442        
2443        mobileModal.setAttribute('open', '');
2444      }
2445    } else {
2446      const notification = document.getElementById('referralNotification');
2447      
2448      if (notification) {
2449        if (creditAmount) {
2450          const messageElement = document.getElementById('referralSignupMessage');
2451          if (messageElement) {
2452            const finalMessage = referralMessageTemplate
2453              .replace('__CREDIT_AMOUNT__', creditAmount)
2454              .replace('__CURRENCY_CODE__', shopCurrency);
2455            
2456            messageElement.textContent = finalMessage;
2457          }
2458        }
2459        
2460        notification.style.display = 'block';
2461      }
2462    }
2463  }
2464
2465  showReferralNotification();
2466
2467  addEventListener('beforeunload', function() {
2468    const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {};
2469    
2470    if (referralData.creditAmount !== undefined) {
2471      referralData.creditAmount = null;
2472      localStorage.setItem('referral_notification_data', JSON.stringify(referralData));
2473    }
2474  });
2475
2476  function closeReferralNotification() {
2477    const notification = document.getElementById('referralNotification');
2478    if (notification) {
2479      notification.style.display = 'none';
2480    }
2481  }
2482
2483  function dismissReferralNotification() {
2484    const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {};
2485    
2486    referralData.dismissed = true;
2487    referralData.timestamp = referralData.timestamp || Date.now();
2488    referralData.expirationDays = referralData.expirationDays || 3;
2489    
2490    localStorage.setItem('referral_notification_data', JSON.stringify(referralData));
2491    
2492    closeReferralNotification();
2493  }
2494
2495  function goToSignupPage() {
2496    location.href = '/account/register';
2497    dismissReferralNotification();
2498  }
2499
2500  function closeMobileReferralModal() {
2501    const mobileModal = document.querySelector('#referralMobileModal details');
2502    if (mobileModal) {
2503      mobileModal.removeAttribute('open');
2504    }
2505    
2506    const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {};
2507    referralData.dismissed = true;
2508    referralData.timestamp = referralData.timestamp || Date.now();
2509    referralData.expirationDays = referralData.expirationDays || 3;
2510    localStorage.setItem('referral_notification_data', JSON.stringify(referralData));
2511  }
2512
2513  function goToSignupPageFromMobile() {
2514    location.href = '/account/register';
2515    closeMobileReferralModal();
2516  }
2517  // End - referral notification popup
2518</script>
2518
2519
2520
2521
2522  <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1">
vendor: 81 bytes, lines 2522-2525
2522
2523    
2524    
2525<script src="https://www.recaptcha.net/recaptcha/enterprise.js?render=
25256LdMNdIqAAAAALegJp7y4weVcCIlnwmIN8TWseEF
vendor: 12 bytes, line 2525
2525"></script>
2526<link rel="preload" href="https://store-themes.easystore.co/251247/themes/282847/assets/customer.css?t=1790328533" as="style" onload="this.onload=null;this.rel='stylesheet'">
2527<style>
2528  main.main-content .field > label{
2529    display: none;
2530  }
2531  .h3{
2532    font-size: 18px;
2533  }
2534  .button--full-width{
2535    width: 100%;
2536  }
2537  .tab-wrapper{
2538    display: inline-flex;
2539    justify-content: center;
2540    align-items: center;
2541    margin: 10px auto 20px;
2542    background-color: #eaeaea;
2543    border-radius: 200px;
2544    padding: 5px;
2545    gap: 10px;
2546  }
2547  .tab-wrapper .tab-label {
2548    display: inline-block;
2549    min-width: 130px;
2550    padding: 8px 15px;
2551    border-radius: 100px;
2552    cursor: pointer;
2553    font-size: 17px;
2554    line-height: 1.1;
2555    user-select: none;
2556    margin: 0;
2557    color: #000;
2558  }
2559  #register-tos a {
2560    display: inline;
2561  }
2562  @media screen and (max-width: 400px){
2563    .tab-wrapper .tab-label {
2564      min-width: 110px;
2565    }
2566  }
2567  .tab-wrapper input[type='radio']:checked + .tab-label {
2568    background-color: #fff;
2569    box-shadow: 2px 2px 25px -10px #333;
2570  }
2571
2572  @media screen and (min-width: 500px){
2573    .large--five-twelfths{
2574      min-width: 420px;
2575    }
2576  }
2577</style>
2578
2579
2580
2581
2582<div class="customer login section-width-control small-width large--five-twelfths text-center wrapper">
2583  <div class="card">
2584    <h1 id="login" tabindex="-1" class="mb-0">
2585      Welcome
2586    </h1>
2587    <p class="h3 mt-0">
2588      
2589        Sign up or log in to continue
2590      
2591    </p>
2592    <div>
2593      
2594
2595      
2596
2597      
2598
2599      
2600
2601      
2602
2603      
2604
2605      
2606
2607      
2608
2609      
2610      <div class="tab-wrapper">
2611        <div>
2612          <input type="radio" name="type" id="tab-register" class="hide hidden" checked>
2613          <label for="tab-register" class="tab-label">
2614            Sign up
2615          </label>
2616        </div>
2617        <div>
2618          <input type="radio" name="type" id="tab-login" class="hide hidden">
2619          <label for="tab-login" class="tab-label">
2620            Login
2621          </label>
2622        </div>
2623      </div>
2624      
2625
2626      <form id="form-login" action="/account/auth" method="post" class="mt-2">
2627        <input type="hidden" name="_token" value="XYmWcVVl4QLQaA5mLkFyZbn4QVnbDUIcwZ74PaUE">
2628        <input type="hidden" name="location_id" value="">
2629        <input type="hidden" name="staff_id" value="">
2630        <input type="hidden" id="recaptchaResponse" name="g-recaptcha-response">
2631
2632        
2633        <div id="error-content"></div>
2634
2635        <div class="field">
2636          <input
2637            type="text"
2638            name="customer[email_or_phone]"
2639            id="CustomerDetail"
2640            autocorrect="off"
2641            autocapitalize="off"
2642            placeholder="Email"
2643            required
2644          >
2645          <label for="CustomerDetail">
2646            Email
2647          </label>
2648        </div>
2649
2650        <button
2651          type="submit"
2652          form="form-login"
2653          class="btn button--full-width g-recaptcha">
2654          Continue
2655        </button>
2656
2657        <div class="button-snippet">
2658                          
2659        </div>
2660
2661        
2662
2663        <div id="register-tos">
2664          By signing up, I agree to the nori.com.my's <a target="_blank" href="/legal/privacy-policy">Privacy Policy</a>, <a target="_blank" href="/legal/refund-policy">Refund Policy</a>, <a target="_blank" href="/pages/delivery-policy">Delivery Policy</a> and <a target="_blank" href="/legal/terms-of-service">Terms & Conditions</a>.
2665        </div>
2666
2667      </form>
2668    </div>
2669  </div>
2670
2671</div>
2672
2673
2674
2675<script>
2676  const register_tab = document.querySelector('#tab-register');
2677  const login_tab = document.querySelector('#tab-login');
2678  const register_tos = document.querySelector('#register-tos');
2679  const isRegistrationEnabled = "1";
2680
2681  if (register_tab) {
2682    register_tab.addEventListener('click', function() {
2683      if (register_tos) {
2684        register_tos.style.display = 'block';
2685      }
2686    });
2687  }
2688  if (login_tab) {
2689    login_tab.addEventListener('click', function() {
2690      if (register_tos) {
2691        register_tos.style.display = 'none';
2692      }
2693    });
2694  }
2695
2696  const methodSwitchBtn = document.getElementById('phone-login-btn');
2697  if (methodSwitchBtn) {
2698    methodSwitchBtn.onclick = function () {
2699      var type = (register_tab && register_tab.checked) ? 'register' : 'login';
2700      window.location.href = '/account/login?method=phone&type=' + type;
2701    };
2702  }
2703
2704  let lastPathSegment = window.location.pathname.split('/').filter(segment => segment.length > 0).pop();
2705  
2706  // Redirect to login if trying to access register when self registration is disabled
2707  if (!isRegistrationEnabled) {
2708    if (lastPathSegment === 'register') {
2709      window.location.href = '/account/login';
2710    } else if (lastPathSegment === 'login' || lastPathSegment === 'auth') {
2711      if (register_tos) {
2712        register_tos.style.display = 'none';
2713      }
2714    } 
2715  } else {
2716    // Only proceed with tab logic if not redirecting
2717    if(lastPathSegment === 'login') {
2718      if (login_tab) {
2719        login_tab.checked = true;
2720      }
2721      if (register_tos) {
2722        register_tos.style.display = 'none';
2723      }
2724    } else {
2725      if (register_tos) {
2726        register_tos.style.display = 'block';
2727      }
2728    }
2729  }
2730
2731  const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
2732  const phonePattern = /^(?:\+?\d{1,3}[\s-]?)?(?:\d{1,14}[\s-]?){1,5}$/;
2733
2734  let form = document.querySelector('#form-login'),
2735      input = document.querySelector('#CustomerDetail'),
2736      error_content = document.querySelector('#error-content');
2737
2738
2739  // One attempt at a time: the reCAPTCHA wait below is async, so without
2740  // this a double-click starts two continuations and posts the form twice.
2741  var submitting = false;
2742
2743  form.addEventListener('submit', async function (event) {
2744    // preventDefault FIRST: a re-entrant submit must still be cancelled, or the
2745    // browser performs a native post with no captcha token.
2746    event.preventDefault();
2747    if (submitting) return;
2748
2749    let input_value = input.value
2750    error_content.innerHTML = '';
2751    if (!input_value.match(emailPattern) && !input_value.match(phonePattern)) {
2752      error_content.innerHTML = `<div class="errors note">Invalid Email or Phone</div>`;
2753      return false;
2754    }
2755
2756    submitting = true;
2757    document.querySelector('#form-login .btn').classList.add('btn--loading','loading');
2758
2759    // reCAPTCHA is unreachable from some regions (google.com is blocked in
2760    // mainland China). Fail open the same way checkout and forgot-password do:
2761    // submit without a token rather than leave the button spinning forever.
2762    try {
2763      if (window.grecaptcha && typeof window.grecaptcha.enterprise === 'object') {
2764        // The loader defines a stub {ready} synchronously and fetches the real
2765        // implementation asynchronously, so execute() may not exist yet.
2766        // ready() queues until it does; the timeout stops a bundle that never
2767        // arrives from hanging the button.
2768        await new Promise(function (resolve) {
2769          setTimeout(resolve, 3000);
2770          try { grecaptcha.enterprise.ready(resolve); } catch (e) { resolve(); }
2771        });
2772
2773        const token = await grecaptcha.enterprise.execute('6LdMNdIqAAAAALegJp7y4weVcCIlnwmIN8TWseEF', { action: 'LOGIN' });
2774        document.getElementById('recaptchaResponse').value = token;
2775      }
2776    } catch (e) { /* fail open */ }
2777
2778    document.getElementById('form-login').submit();
2779  });
2780
2781
2782</script>
2782
2783
2784    
2785  </main>
2786 	<style>
2787  .footer{
2788    background-color: #F1EEE7;
2789    color: #000000;
2790    --color-foreground: 0,0,0;
2791  }
2792  .footer .link--text,
2793  .footer .list-menu__item--link,
2794  .footer .footer-block__details-content .list-menu__item--link{
2795    color: #000000;
2796  }
2797  .footer-block__heading{
2798    color: #000000;
2799  }
2800  .rounded{
2801    border-radius: 10px;
2802  }
2803  .shopping-app-border{
2804    border: 1px #ECECEC solid;
2805    margin-right: 3px;
2806  }
2807  .app-download-badge{
2808    display: inline-block; 
2809    margin-right: 3px;
2810  }
2811</style>
2812
2813<link rel="preload" href="https://store-themes.easystore.co/251247/themes/282847/assets/section-footer.css?t=1790328533" as="style" onload="this.onload=null;this.rel='stylesheet'">
2814
2815<footer class="footer color-background-1">
2816  <div class="footer__content-top page-width">
2817    <div class="grid grid--1-col grid--4-col-tablet ">
2818      
2819      
2820      
2821        <div class="grid__item">
2822          
2823              <h2 class="footer-block__heading">Follow us</h2>
2824              <ul class="footer__list-social list-unstyled list-social footer-block__details-content" role="list">
2825                
2826                
2827                  <li class="list-social__item">
2828                    <a href="https://www.facebook.com/NoriOfficialHQ" class="link link--text list-social__link">
2829                      
2830
2831
2832    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook "
2833    viewBox="0 0 18 18">
2834      <path fill="currentColor"
2835        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">
2836      </path>
2837    </svg>
2838
2839  
2840
2841                    </a>
2842                  </li>
2843                
2844                
2845                  <li class="list-social__item">
2846                    <a href="https://instagram.com/noriofficial.hq" class="link link--text list-social__link">
2847                      
2848
2849
2850    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram "
2851    viewBox="0 0 18 18">
2852      <path fill="currentColor"
2853        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">
2854      </path>
2855      <path fill="currentColor"
2856        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">
2857      </path>
2858    </svg>
2859
2860  
2861
2862                    </a>
2863                  </li>
2864                
2865                
2866                  <li class="list-social__item">
2867                    <a href="https://www.tiktok.com/@nori.fragrance" class="link link--text list-social__link">
2868                      
2869
2870
2871    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-tiktok " width="16"
2872    height="18" fill="none" xmlns="http://www.w3.org/2000/svg">
2873      <path
2874        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"
2875        fill="currentColor">
2876      </path>
2877    </svg>
2878
2879  
2880
2881                    </a>
2882                  </li>
2883                
2884                
2885                  <li class="list-social__item">
2886                    <a href="https://wa.link/29v29w" class="link link--text list-social__link">
2887                      
2888
2889
2890    <svg class="icon icon-whatsapp " fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 750">
2890<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>
2891
2892  
2893
2894                    </a>
2895                  </li>
2896                
2897                
2898                
2899                
2900                  <li class="list-social__item">
2901                    <a href="https://www.youtube.com/@noriofficialyoutube" class="link link--text list-social__link">
2902                      
2903
2904
2905    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-youtube "
2906    viewBox="0 0 100 70">
2907      <path
2908        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"
2909        fill="currentColor">
2910      </path>
2911    </svg>
2912
2913  
2914
2915                    </a>
2916                  </li>
2917                
2918                
2919              </ul>
2920            
2921        </div>
2922      
2923      
2924      
2925        <div class="grid__item">
2926          
2927              <h2 class="footer-block__heading">We accept</h2>
2928              <div class="footer-block__details-content footer__payment">
2929                <ul class="list list-payment" role="list">
2930                  
2931                    <li class="list-payment__item">
2932                      
2933
2934
2935    <svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img"
2936    width="38" height="24" aria-labelledby="pi-visa">
2937      <path opacity=".07"
2938        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>
2939      <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">
2940      </path>
2941      <path
2942        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.
29421-.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"
2943        fill="#142688"></path>
2944    </svg>
2945
2946  
2947
2948                    </li>
2949                  
2950                  
2951                    <li class="list-payment__item">
2952                      
2953
2954
2955    <svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img"
2956    width="38" height="24" aria-labelledby="pi-master">
2957      <path opacity=".07"
2958        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>
2959      <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">
2960      </path>
2961      <circle fill="#EB001B" cx="15" cy="12" r="7"></circle>
2962      <circle fill="#F79E1B" cx="23" cy="12" r="7"></circle>
2963      <path fill="#FF5F00"
2964        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>
2965    </svg>
2966
2967  
2968
2969                    </li>
2970                  
2971                  
2972                  
2973                  
2974                  
2975                  
2976                    
2977                      <li class="list-payment__item">
2978                        <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_ipay88.svg" alt="payment_ipay88" loading="lazy" width="85px">
2979                      </li>
2980                    
2981                      <li class="list-payment__item">
2982                        <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_atome.svg" alt="payment_atome" loading="lazy" width="85px">
2983                      </li>
2984                    
2985                 
2986                </ul>
2987              </div>
2988              <br>
2989            
2990        </div>
2991      
2992      
2993      
2994        <div class="grid__item">
2995          
2996              <h2 class="footer-block__heading">
2997                We Also Available
2998              </h2>
2999              <ul class="footer-block__details-content list-unstyled">
3000                
3001                <li>
3002                  <a href="https://shopee.com.my/suri.official_my"  class="link link--text list-menu__item list-menu__item--link">
3003                    Shopee
3004                  </a>
3005                </li>
3006                
3007                <li>
3008                  <a href="https://www.lazada.com.my/shop/noriofficial?spm=a2o4k.searchList.search.2.6012375eRB7KW3"  class="link link--text list-menu__item list-menu__item--link">
3009                    Lazada
3010                  </a>
3011                </li>
3012                
3013                <li>
3014                  <a href="https://www.tiktok.com/@suri.official_my?lang=en"  class="link link--text list-menu__item list-menu__item--link">
3015                    Tiktok
3016                  </a>
3017                </li>
3018                
3019                <li>
3020                  <a href="https://www.tiktok.com/@nori.fragrance"  class="link link--text list-menu__item list-menu__item--link">
3021                    Tiktok : Nori.Fragrance
3022                  </a>
3023                </li>
3024                
3025                <li>
3026                  <a href="https://www.tiktok.com/nori.beauty"  target="_blank"  class="link link--text list-menu__item list-menu__item--link">
3027                    Tiktok : Nori.Beauty
3028                  </a>
3029                </li>
3030                
3031                
3032              </ul>
3033            
3034        </div>
3035      
3036      
3037      
3038        <div class="grid__item">
3039          
3040              <h2 class="footer-block__heading">Our mission</h2>
3041              <div class="footer-block__details-content">
3042                <p>Nori aims to revolutionize the multi-billion dollar retail industry by empowering celebrities to build iconic brands one product at a time</p>
3043              </div>
3044            
3045        </div>
3046      
3047    </div>
3048  </div>
3049  <div class="footer__content-bottom">
3050    <div class="footer__content-bottom-wrapper page-width">
3051      <div class="footer__column footer__column--info">
3052
3053        
3054
3055
3056        
3057        <div class="footer__copyright caption">
3058          <div class="copyright__content">Copyright © 2024 Nori Malaysia Sdn Bhd    |  Nori Malaysia Sdn Bhd (201101026257 (954393-H))</div>
3059        </div>
3060
3061        <div class="footer__copyright caption">
3062          
3063            <div>
3064            
3065            
3066              
3067                <a href="/legal/privacy-policy">Privacy Policy</a>
3068              
3069              
3070            
3071              
3072                | <a href="/legal/refund-policy">Refund Policy</a>
3073              
3074              
3075            
3076              
3077                | <a href="/pages/delivery-policy">Delivery Policy</a>
3078              
3079              
3080            
3081              
3082                | <a href="/legal/terms-of-service">Terms &amp; Conditions</a>
3083              
3084              
3085            
3086            </div>
3087         
3088        </div>
3089        
3090      </div>
3091    </div>
3092  </div>
3093</footer>
3094
3095
3096
3097
3098  
3099
3100  
3100<script>
3101  EasyStore.Currencies.init([{"name":"Malaysian Ringgit","code":"MYR","rate":"1.0","format_prefix":"RM","format_suffix":null,"format_decimals":2,"thousand_separator":",","is_primary":true}], 1)
3102</script>
3102
3103
3104
3105
3106  
3106<script>
3107    let page_template = 'customers';
3108
3109    if(document.querySelector('.currency-picker')) {
3110      EasyStore.Currencies.change(document.querySelector('.currency-picker').value)
3111      EasyStore.Currencies.convertAll() 
3112    }
3113
3114    document.querySelectorAll('.currency-picker').forEach((el)=>{
3115      el.addEventListener('change',(event)=>{
3116        EasyStore.Currencies.change(event.target.value)
3117
3118        
3119          if (page_template == 'cart') {
3120            const params = new URLSearchParams(window.location.search);
3121            params.set('delete_cache', 1);
3122            window.location.search = params;
3123          } else {
3124            window.location.reload();
3125          }
3126
3127          return
3128        
3129
3130        document.querySelectorAll('[name=currencies],[name=current_currency]').forEach((el)=>{
3131          el.value = event.target.value
3132        })
3133
3134        if(page_template == 'cart') location.reload();
3135      })
3136    })
3137  </script>
3137
3138
3139
3140
3141
3142  
3142<script>
3143
3144    window.variantStrings = {
3145      addToCart: `Add to Cart`,
3146      soldOut: `Sold Out`,
3147      unavailable: `Unavailable`,
3148    }
3149
3150    window.accessibilityStrings = {
3151      shareSuccess: `Link copied to clipboard`,
3152    }
3153  </script>
3153
3154  
3155<!-- Snippet:global/body_end: Product Description Tabs -->
3156<style>
3157	.product-description-tabs{
3158		color: #000000;
3159	}
3160	.prod-desc-tab-container {
3161		padding: 15px;
3162		margin-right: auto;
3163		margin-left: auto;
3164		background-color: #ffffff;
3165	}
3166	/* Style the list */
3167	.prod-desc-tab {
3168		list-style-type: none;
3169		margin: 0;
3170		padding: 0;
3171		 border-bottom: solid 1px #ddd;
3172		/*overflow: hidden;
3173		border: 1px solid #e6e6e6;
3174		background-color: #fefefe;
3175		border-bottom: 1px solid #ddd;*/
3176	}
3177
3178	/* Float the list items side by side */
3179	li.tablinks {
3180		display: inline-block;
3181		border-top: 3px solid transparent;
3182		border-left: 1px solid transparent;
3183		border-right: 1px solid transparent;
3184		margin-bottom: -1px;
3185		margin-right: 3px;
3186		border-radius: 4px 4px 0 0;
3187		background-color: rgba(212,212,212,0.3);
3188	}
3189
3190	/* Style the links inside the list items */
3191	li.tablinks a {
3192    color: #000000;
3193    cursor: default;
3194    margin-right: 2px;
3195    line-height: 1.42857143;
3196    display: block;
3197    padding: 10px 15px;
3198	}
3199
3200	/* Change background color of links on hover */
3201	li.tablinks:hover {
3202		background-color: #ffffff;
3203		border-bottom-color: transparent;
3204		border-top: 3px solid #ddd;
3205		border-left: 1px solid #ddd;
3206		border-right: 1px solid #ddd;
3207	} /*rgba(212,212,212,0.3)*/
3208
3209	/* Create an active/current tablink class */
3210	li.tablinks a:focus, li.tablinks.active{
3211		border-top: 3px solid #ddd;
3212		border-left: 1px solid #ddd;
3213		border-right: 1px solid #ddd;
3214		background-color: #ffffff;
3215	}
3216
3217	/* Style the tab content */
3218	.prod-desc-tab-content {
3219		display: none;
3220		padding: 15px 15px;
3221		/*border: 1px solid #ccc;*/
3222		border-top: none;
3223		clear: both;
3224		-webkit-animation: fadeEffect 1s;
3225		animation: fadeEffect 1s; /* Fading effect takes 1 second */
3226	}
3227	.prod-desc-tab-content > ul{
3228		list-style-type: disc;
3229	} 
3230
3231	/* if user select is_show_title is true, the title will be displayed; if not, hide the title*/
3232	.prod-desc-tab-content > h2{
3233		display:block;
3234	}
3235
3236	@-webkit-keyframes fadeEffect {
3237		from {opacity: 0;}
3238		to {opacity: 1;}
3239	}
3240
3241	@keyframes fadeEffect {
3242		from {opacity: 0;}
3243		to {opacity: 1;}
3244	}
3245
3246	.tab_drawer_heading { display: none; }
3247
3248@media screen and (max-width: 480px) {
3249	.prod-desc-tab {
3250		display: none;
3251	}
3252
3253
3254	.tab_drawer_heading {
3255		background-color: transparent;
3256		color: #000000;
3257		border-bottom: 1px solid #ddd;
3258		margin: 0;
3259		padding: 6px 12px;
3260		display: block;
3261		cursor: default;
3262		-webkit-touch-callout: none;
3263		-webkit-user-select: none;
3264		-khtml-user-select: none;
3265		-moz-user-select: none;
3266		-ms-user-select: none;
3267		user-select: none;
3268	}
3269	.tab_drawer_heading:after {
3270		content: ' + ';
3271		right: 40px;
3272		position: absolute;
3273	}
3274	.d_active {
3275		background-color: rgba(212,212,212,0.3);
3276	}
3277	.d_active.tab_drawer_heading:after{
3278		content: ' - ';
3279		
3280	}
3281}
3282	</style>
3283
3284<script type="text/javascript">
3285
3286// If the page has no jquery
3287// if(typeof jQuery == 'undefined'){
3288// 	console.log(456);
3289// 	var script = document.createElement('script');
3290// 	script.type = "text/javascript";
3291// 	script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js";
3292// 	console.log(script);
3293// 	document.getElementsByTagName('head')[0].appendChild(script);
3294// }
3295
3296
3297  /* if in tab mode */
3298   $("body").on("click", ".tablinks", function(){
3299	var id = $(this).data("prod-desc-id");
3300
3301		// Get all elements with class="prod-desc-tab-content" and hide them
3302		$(".prod-desc-tab-content").hide();
3303
3304	    // Get all elements with class="tablinks" and remove the class "active"
3305	    $(".tablinks").removeClass("active");
3306
3307	    // Show the current tab, and add an "active" class to the link that opened the tab
3308	    $("#"+id).show();
3309	    $(this).addClass("active");
3310
3311	//make mobile view(drawer mode) also in same tab
3312	  $(".tab_drawer_heading").removeClass("d_active");
3313	  $(".tab_drawer_heading[data-prod-desc-id='"+id+"']").addClass("d_active");
3314	  
3315    });
3316	/* if in drawer mode */
3317	 $("body").on("click", ".tab_drawer_heading", function() {
3318     var id = $(this).data("prod-desc-id");
3319      
3320      $(".prod-desc-tab-content").hide();
3321	  $(".tab_drawer_heading").removeClass("d_active");
3322      $("#"+id).show();
3323	  
3324      $(this).addClass("d_active");
3325	  
3326	   $(".tablinks").removeClass("active");
3327	  $(".tablinks[data-prod-desc-id='"+id+"']").addClass("active");
3328    });	
3329
3330	$(function(){
3331		var x = $(".product-description").find("h1, h2, h3, h4, h5, h6");
3332		var title = null;
3333		var body = null;
3334
3335		if(x.length > 1){
3336			$(".product-description").after("<link href='/assets/css/froala_style.min.css' rel='stylesheet' type='text/css'/><div class='product-description-tabs fr-view'><ul class='prod-desc-tab'></ul><div class='prod-desc-tab-container'></div></div>");
3337			$(x).each(function(k, v){
3338				title = $(v).text();
3339
3340				if(k == 0){
3341					body = $(x[0]).nextUntil(x[1]).clone();
3342					$(".prod-desc-tab").append('<li class="tablinks active" data-prod-desc-id="'+k+'"><a>'+title+'</a></li>');
3343					$(".prod-desc-tab-container").append('<h3 class="tab_drawer_heading d_active" data-prod-desc-id="'+k+'">'+title+'</h3><div id="'+k+'" class="prod-desc-tab-content" style="display:block"><h2>'+title+'</h2></div>');
3344					$("#"+k+" h2").after(body);
3345				}
3346				else if(k == x.length){
3347					body = $(x[k]).nextAll().clone();
3348					$(".prod-desc-tab").append('<li class="tablinks" data-prod-desc-id="'+k+'"><a>'+title+'</a></li>');
3349					$(".prod-desc-tab-container").append('<h3 class="tab_drawer_heading" data-prod-desc-id="'+k+'">'+title+'</h3><div id="'+k+'" class="prod-desc-tab-content" style="display:none"><h2>'+title+'</h2></div>');
3350					$("#"+k+" h2").after(body);
3351				}
3352				else{
3353					body = $(x[k]).nextUntil(x[k+1]).clone();
3354					$(".prod-desc-tab").append('<li class="tablinks" data-prod-desc-id="'+k+'"><a>'+title+'</a></li>');
3355					$(".prod-desc-tab-container").append('<h3 class="tab_drawer_heading" data-prod-desc-id="'+k+'">'+title+'</h3><div id="'+k+'" class="prod-desc-tab-content" style="display:none"><h2>'+title+'</h2></div>');
3356					$("#"+k+" h2").after(body);
3357				}
3358			});
3359			$(".product-description").hide();
3360		}
3361
3362	});
3363</script>
3363
3364<!-- /Snippet -->
3365
3366<!-- Snippet:global/body_end: Mailchimp E-Commerce -->
3367<script id="mcjs">!function(c,h,i,m,p){m=c.createElement(h),p=c.getElementsByTagName(h)[0],m.async=1,m.src=i,p.parentNode.insertBefore(m,p)}(document,"script","https://chimpstatic.com/mcjs-connected/js/users/6db777a9ed8a20cdf3b457723/fc072f0ebecff5b09d0928c84.js");</script>
3367
3368<!-- /Snippet -->
3369<script>
3370
3371  /*
3372
3373    ------
3374    Events
3375    ------
3376
3377    pages/viewed
3378
3379    customers/signup
3380
3381    customers/login
3382
3383    products/searched
3384
3385    collections/viewed
3386
3387    products/viewed
3388
3389    products/shared
3390
3391    wishlists/item_added
3392
3393    carts/items_added
3394
3395    carts/viewed
3396
3397    carts/item_removed
3398
3399    checkouts/initiated
3400
3401    checkouts/shipping_info_added
3402
3403    checkouts/payment_info_added
3404
3405    checkouts/completed
3406
3407    orders/placed
3408
3409    orders/purchased
3410
3411    payments/captured
3412
3413    payments/failed
3414
3415  */
3416
3417  window.__latest_cart = window.__latest_cart || null;
3418
3419  const _selector = document.querySelector.bind(document),
3420        _selectorAll = document.querySelectorAll.bind(document)
3421
3422  document.addEventListener('DOMContentLoaded', (event) => {
3423
3424    const default_currency = getCookie("currency")
3425    const customer_id = window.__st.cid
3426    const template    = window.__st.p
3427
3428    onPageView()
3429
3430    //-----------------------//
3431    //        Configs        //
3432    //-----------------------//
3433
3434    window.dataLayer = window.dataLayer || []
3435
3436    Array.prototype.last = Array.prototype.last || function() {
3437      return this[this.length - 1] || null
3438    }
3439
3440    Array.prototype.first = Array.prototype.first || function() {
3441      return this[0] || null
3442    }
3443
3444    //----------------------//
3445    //       Triggers       //
3446    //----------------------//
3447
3448    const XHR = window.XMLHttpRequest
3449
3450    function xhr() {
3451
3452      const xhr = new XHR()
3453
3454      xhr.addEventListener("readystatechange", function() {
3455
3456        if(xhr.readyState != 4) return
3457
3458        try {
3459
3460          const response_url = xhr.responseURL
3461
3462          if (response_url.includes("cart/add")) {
3463
3464            window.__latest_cart = JSON.parse(xhr.response)
3465
3466            onCartItemsAdded() // ok
3467
3468          }
3469
3470          if (response_url.includes("cart/remove_item_quantity")) {
3471
3472            window.__latest_cart = JSON.parse(xhr.response)
3473
3474            onCartItemRemoved() // ok
3475
3476          }
3477
3478          if (response_url.includes("new_cart?retrieve=true")) {
3479
3480            result = JSON.parse(xhr.response)
3481
3482            if (result.cart) {
3483              window.__latest_cart = result.cart
3484            }
3485
3486          }
3487
3488        } catch(e) {
3489
3490          console.error(e)
3491
3492        }
3493
3494      }, false);
3495
3496      return xhr
3497
3498    }
3499
3500    window.XMLHttpRequest = xhr
3501
3502    switch(template) {
3503
3504      case 'cart': onCartView() // ok
3505      break
3506      case 'product': onProductView() // ok
3507      break
3508      case 'collection': onCollectionView() // ok
3509      break
3510      case 'blog': onBlogView()
3511      break
3512      case 'article': onArticleView()
3513      break
3514      case 'payment_completed': onOrderPlace()
3515      break
3516      case 'payment_fail': onPaymentFail()
3517      break
3518
3519    }
3520
3521    // _selector('form[action="/checkout/payments"]').addEventListener("submit", onPaymentInfoAdded(_selector('form[action="/checkout/payments"]')))
3522    if (_selector('form[action="/checkout/detail"]'))                            _selector('form[action="/checkout/detail"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/detail"]'))})  // ok
3523    if (_selector('form[action="/checkout/shipping"]'))                          _selector('form[action="/checkout/shipping"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/shipping"]'))})  // ok
3524    if (_selector('form[action="/account/register"]'))                           _selector('form[action="/account/register"]').addEventListener("submit", onSignUp)  // ok
3525    if (_selector('form[action="/account/login"]'))                              _selector('form[action="/account/login"]').addEventListener("submit", onLogin)  // ok
3526    if (_selector('form[action="/search"]'))                                     _selector('form[action="/search"]').addEventListener("submit", onProductSearch()) // ok
3527    if (_selector('#line-login-btn'))                                            _selector('#line-login-btn').addEventListener('click', onLineLogin) // ok
3528    if (_selector('#PlaceOrder'))                                                _selector('#PlaceOrder').addEventListener("click", ()=>{onCheckoutComplete(_selector('form[action="/checkout/payments"]'))});  // ok
3529    if (_selector('#add_wishlist'))                                              _selector('#add_wishlist').addEventListener("click", onWishlistItemAdded) // ok
3530    if (_selectorAll('a[href="/account/logout"]'))                               _selectorAll('a[href="/account/logout"]').forEach(logoutButton => logoutButton.addEventListener("click", onLogout)) // ok
3531    if (_selector('.CartDrawerTrigger.cart-page-link'))                          _selector('.CartDrawerTrigger.cart-page-link').addEventListener("click", onCartView) // ok
3532    if (_selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link'))    _selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link').addEventListener("click", onCartView) // ok
3533    if (_selectorAll('a[class^="share-"]'))                                      _selectorAll('a[class^="share-"]').forEach(shareButton => shareButton.addEventListener("click", ()=>{onProductShare(shareButton)}) ) // ok
3534    if (_selectorAll('[name$="checkout"]'))                                      _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate))
3535
3536    // For append elements
3537    const bodyMutationObserver = new MutationObserver(() => {
3538      if (_selector('#form__spc #PlaceOrder'))             _selector('#form__spc #PlaceOrder').addEventListener("click", onSinglePageCheckout) // ok
3539      if (_selectorAll('[name$="checkout"]'))              _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate))
3540    });
3541    bodyMutationObserver.observe(_selector("body"), {subtree: true, childList: true});
3542
3543    //------------------------------//
3544    //        Event handlers        //
3545    //------------------------------//
3546
3547    function onPageView() {
3548
3549      EasyStore.Event.dispatch('pages/viewed', {
3550        page: {
3551          type: template,
3552          title: document.title,
3553          description: _selector('meta[name=description]') ? _selector('meta[name=description]').getAttribute('content') : null,
3554          url: location.href,
3555        }
3556      })
3557
3558    }
3559
3560    function onSignUp() {
3561
3562      const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)
3563      const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/)
3564
3565      const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "")
3566
3567      let data = {}
3568
3569      if (email_regex.test(email_or_phone)) {
3570        data.method = 'email'
3571        data.email = email_or_phone
3572      }
3573
3574      if (phone_regex.test(email_or_phone)) {
3575        data.method = "phone"
3576        data.phone = email_or_phone
3577      }
3578
3579      if (!data.method) return
3580
3581      EasyStore.Event.dispatch('customers/signup', data)
3582
3583    }
3584
3585    function onLogin() {
3586
3587      const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)
3588      const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/)
3589
3590      const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "")
3591
3592      let data = {}
3593
3594      if (email_regex.test(email_or_phone)) {
3595        data.method = 'email'
3596        data.email = email_or_phone
3597      }
3598
3599      if (phone_regex.test(email_or_phone)) {
3600        data.method = "phone"
3601        data.phone = email_or_phone
3602      }
3603
3604      if (!data.method) return
3605
3606      EasyStore.Event.dispatch('customers/login', data)
3607
3608    }
3609
3610    function onLineLogin() {
3611
3612      EasyStore.Event.dispatch('customers/login', { method: 'line' })
3613
3614    }
3615
3616    function onLogout() {
3617
3618      EasyStore.Event.dispatch('customers/logout', { customer_id })
3619
3620    }
3621
3622    function onBlogView() {
3623
3624      const blog = ""
3625
3626      EasyStore.Event.dispatch('blogs/viewed', { blog })
3627
3628    }
3629
3630    function onArticleView() {
3631
3632      const article = ""
3633
3634      EasyStore.Event.dispatch('articles/viewed', { article })
3635
3636    }
3637
3638    function onProductSearch() {
3639
3640      const query = _selector('input[name=q]').value
3641
3642      if (!query) return
3643
3644      EasyStore.Event.dispatch('products/searched', { query })
3645
3646    }
3647
3648    function onCollectionView() {
3649
3650      const collection = ""
3651
3652      EasyStore.Event.dispatch('collections/viewed', { collection })
3653
3654    }
3655
3656    function onProductView() {
3657
3658      const product = ""
3659
3660      EasyStore.Event.dispatch("products/viewed", { product })
3661
3662    }
3663
3664    function onProductShare(el) {
3665
3666      const product = ""
3667
3668      const channel = el.getAttribute("class").split("-").last()
3669
3670      EasyStore.Event.dispatch('products/shared', { product, channel })
3671
3672    }
3673
3674    function onWishlistItemAdded() {
3675
3676      let product  = ""
3677      const quantity = _selector("#Quantity").value
3678
3679      EasyStore.Event.dispatch('wishlists/item_added', { product })
3680
3681    }
3682
3683    async function onCartItemsAdded() {
3684
3685      const cart = await getCart()
3686
3687      if(cart && cart.items != undefined && cart.items.length > 0) {
3688
3689        EasyStore.Event.dispatch('carts/item_added', { cart })
3690
3691      }
3692
3693    }
3694
3695    async function onCartView() {
3696
3697      const cart = await getCart()
3698
3699      EasyStore.Event.dispatch('carts/viewed', { cart })
3700
3701    }
3702
3703    async function onCartItemRemoved() {
3704
3705      const cart = await getCart()
3706
3707      cart.items = []
3708
3709      if(cart) {
3710
3711        EasyStore.Event.dispatch('carts/item_removed', { cart })
3712
3713      }
3714
3715    }
3716
3717    async function onCheckoutInitiate() {
3718
3719      const cart = await getCart()
3720
3721      EasyStore.Event.dispatch('checkouts/initiated', { cart })
3722
3723    }
3724
3725    async function onShippingInfoAdded(form) {
3726      let checkout = getCheckout()
3727
3728      let form_data = {}
3729      new FormData(form).forEach((value, key) => form_data[key] = value)
3730
3731      let shipping_tier = null
3732
3733      if (form_data.type && form_data.type.startsWith("r_pickup")) {
3734        shipping_tier = `Pickup - ${form_data.pick_location}`
3735      }
3736
3737      if (form_data.s_id) {
3738        shipping_tier = _selector(`input[id='`+form_data.s_id+`']`).getAttribute("data-shipping-name")
3739      }
3740
3741      if (!shipping_tier) return
3742
3743      EasyStore.Event.dispatch('checkouts/shipping_info_added', { checkout, shipping_tier })
3744
3745    }
3746
3747    async function onPaymentInfoAdded(form) {
3748
3749      let checkout = getCheckout()
3750
3751      let payment_type = new FormData(form).get('payment_method')
3752
3753      EasyStore.Event.dispatch("checkouts/payment_info_added", { checkout, payment_type })
3754
3755    }
3756
3757    async function onOrderPlace() {
3758
3759      let cart_token  = getCookie("cart_js")
3760      let previous_cart_token = getCookie("previous_cart_ga4_js")
3761
3762      if (previous_cart_token && previous_cart_token == cart_token) {
3763        // Prevent duplicate purchase tracking
3764        return
3765      }
3766
3767      let order = getOrder()
3768
3769      EasyStore.Event.dispatch('orders/placed', { order })
3770
3771      if(order.is_manual_payment) {
3772
3773        EasyStore.Event.dispatch('orders/purchased', { order })
3774
3775      }
3776
3777      const last_transaction = order.transactions.last()
3778
3779      if (last_transaction.status) {
3780
3781        EasyStore.Event.dispatch('orders/purchased', { order })
3782        EasyStore.Event.dispatch('payments/captured', { order })
3783
3784      }
3785
3786    }
3787
3788    async function onPaymentFail() {
3789
3790      const order = getOrder()
3791
3792      EasyStore.Event.dispatch('payments/failed', { order })
3793
3794    }
3795
3796    async function onCheckoutComplete(form) {
3797
3798      onPaymentInfoAdded(form)
3799
3800      const checkout = getCheckout()
3801
3802      EasyStore.Event.dispatch('checkouts/completed', { checkout })
3803
3804    }
3805
3806    async function onSinglePageCheckout() {
3807
3808      // let checkout = $("[data-app-checkout]").data("app-checkout")
3809
3810      let checkout = getCheckout()
3811
3812      // const payment_type = _selector("#app_spc_payment_method").find(`[class*="label-content"]`).first().find("b").first().text()
3813      const payment_type = _selector("#app_spc_payment_method").getElementsByClassName('label-content')[0].getElementsByTagName('b')[0].innerHTML
3814
3815      const shipping_method = _selector("#delivery_method").value
3816
3817      let shipping_tier = null
3818      let app_spc_customer_info_label = _selector("#app_spc_customer_info").getElementsByClassName('label-content')
3819      if (shipping_method == "shipping") {
3820        shipping_tier = app_spc_customer_info_label[app_spc_customer_info_label.length - 1].getElementsByTagName('b')[0].innerHTML
3821      }
3822
3823      if (shipping_method == "pickup") {
3824        shipping_tier = app_spc_customer_info_label[0].innerHTML
3825      }
3826
3827      if (shipping_tier) {
3828
3829        EasyStore.Event.dispatch('checkouts/shipping_info_added', {
3830          checkout,
3831          shipping_tier,
3832        })
3833
3834      }
3835
3836      if (payment_type) {
3837
3838        EasyStore.Event.dispatch('checkouts/payment_info_added', {
3839          checkout,
3840          payment_type,
3841        })
3842
3843      }
3844
3845      EasyStore.Event.dispatch('checkouts/completed', { checkout })
3846
3847    }
3848
3849  })
3850
3851
3852  //-----------------------//
3853  //       Functions       //
3854  //-----------------------//
3855
3856  function getCookie(name) {
3857
3858    name += "="
3859
3860    decodedCookie = decodeURIComponent(document.cookie)
3861
3862    ca = decodedCookie.split(";")
3863
3864    for(i = 0; i < ca.length; i++) {
3865      c = ca[i]
3866      while (c.charAt(0) == " ") {
3867        c = c.substring(1)
3868      }
3869      if (c.indexOf(name) == 0) {
3870        return c.substring(name.length, c.length)
3871      }
3872    }
3873
3874    return ""
3875
3876  }
3877
3878  const parsePrice = price => {
3879    if(typeof price === 'string') {
3880      return parseFloat(price.split(',').join(''))
3881    }
3882
3883    return price
3884  }
3885
3886  const requestCart = async (method, data) => {
3887
3888  let response = await fetch('/cart.json', {method: 'GET',headers: {'Content-Type': 'application/json'}})
3889    result = await response.json()
3890
3891    return result.cart
3892
3893  }
3894  const getCart = async (latest = false) => {
3895
3896    let cart = window.__latest_cart
3897
3898    const cart_invalid = !cart || !cart.items || (cart.total_price > 0 && !cart.items.length)
3899
3900    if(latest || cart_invalid) {
3901      cart = await requestCart()
3902    }
3903
3904    cart.items = cart.items || []
3905
3906    return mapCart(cart)
3907
3908  }
3909
3910  const getCheckout = async () => {
3911    mapCheckout(window.__latest_cart || await requestCart())
3912  }
3913
3914  const getOrder = async () => {
3915    mapOrder(window.__latest_cart || await requestCart())
3916  }
3917
3918  //-----------------------//
3919  //        Mappers        //
3920  //-----------------------//
3921
3922  const fallbackAttribute = (object, attribute) => {
3923
3924    if(!Array.isArray(attribute)) {
3925      attribute = [attribute]
3926    }
3927
3928    let final_value = null
3929
3930    do {
3931
3932      final_value = object[attribute.shift()]
3933
3934    } while(!final_value && attribute.length)
3935
3936    return final_value
3937
3938  }
3939
3940  const map = (object, mapper) => {
3941
3942    const newObject = {}
3943
3944    for(const key in mapper) {
3945
3946      // Handle different keys between new and old format
3947      newObject[key] = fallbackAttribute(object, mapper[key])
3948
3949      // Cast price to float
3950      if(newObject[key] && ['price', 'amount', 'discount', 'discounts'].some(x => key.endsWith(x))) {
3951        newObject[key] = parsePrice(newObject[key])
3952      }
3953
3954      if(newObject[key] === undefined) {
3955        delete newObject[key]
3956      }
3957
3958    }
3959
3960    return newObject
3961
3962  }
3963
3964  const mapCart = cart => {
3965
3966    const oldCart = cart
3967
3968    const mapper = {
3969      id: 'id',
3970      currency: 'currency',
3971      item_count: 'item_count',
3972      items: 'items',
3973      total_price: 'total_price',
3974      latest_items: 'latest_items'
3975    }
3976
3977    cart = map(cart, mapper)
3978
3979    const discounts = (oldCart.storewide_discounts || []).concat((oldCart.voucher_discounts || []))
3980
3981    cart.discount_applications = discounts.map(discount => ({
3982      title: discount.voucher_code || null,
3983      value: parsePrice(discount.amount),
3984    }))
3985
3986    cart.original_total_price = cart.items.length
3987    ? cart.items
3988      .map(item => item.original_price)
3989      .reduce((sum, price) => sum + price)
3990    : 0
3991
3992    cart.total_discount = cart.discount_applications.length
3993    ? cart.discount_applications
3994      .map(discount => parsePrice(discount.value))
3995      .reduce((sum, value) => sum + value)
3996    : 0
3997
3998    cart.items = cart.items.map(item => mapLineItem(item))
3999
4000    return cart
4001
4002  }
4003
4004  const mapCheckout = checkout => {
4005
4006    const mapper = {
4007      note: 'note',
4008      attributes: 'note_attributes',
4009      billing_address: 'billing_address',
4010      currency: 'currency',
4011      customer_id: 'customer_id',
4012      discounts_amount: 'total_discount',
4013      id: 'id',
4014      line_items: 'order_item',
4015      order_number: 'order_number',
4016      shipping_address: 'shipping_address',
4017      shipping_price: 'shipping_tax',
4018      shipping_method: 'shipping_method_name',
4019      tax_price: 'total_tax',
4020    }
4021
4022    checkout = map(checkout, mapper)
4023
4024    checkout.requires_shipping = checkout.line_items.some(item => item.shipping_required)
4025
4026    checkout.line_items = checkout.line_items.map(item => mapLineItem(item))
4027
4028    return checkout
4029
4030  }
4031
4032  const mapOrder = order => {
4033
4034    const mapper = {
4035      attributes: 'note_attributes',
4036      billing_address: 'billing_address',
4037      cancelled: 'is_cancelled',
4038      cancelled_at: 'cancelled_at',
4039      created_at: 'created_at',
4040      customer_id: 'customer_id',
4041      // discount_applications: 'discount_applications',
4042      email: 'email',
4043      financial_status: 'financial_status',
4044      fulfillment_status: 'fulfillment_status',
4045      line_items: 'order_item',
4046      note: 'note',
4047      order_number: 'order_number',
4048      phone: 'phone',
4049      shipping_address: 'shipping_address',
4050      shipping_methods: 'shipping_methods',
4051      shipping_price: 'total_shipping',
4052      subtotal_price: 'subtotal_price',
4053      // tax_lines: 'tax_lines',
4054      tax_price: 'total_tax',
4055      total_discounts: 'total_discount',
4056      total_net_amount: 'total_amount_include_transaction',
4057      total_price: 'total_price',
4058      transactions: 'transaction_records',
4059      is_manual_payment: 'is_manual_payment',
4060    }
4061
4062    order.email = order.billing_address.email
4063    order.phone = order.billing_address.phone
4064    order.shipping_method = order.shipping_method_name
4065
4066    order = map(order, mapper)
4067
4068    order.line_items = order.line_items.map(item => mapLineItem(item))
4069    order.transactions = order.transactions.map(transaction => mapTransaction(transaction))
4070
4071    return order
4072
4073  }
4074
4075  const mapLineItem = line_item => {
4076
4077    const old_line_item = line_item
4078
4079    const mapper = {
4080      final_price: 'price',
4081      image: 'img_url',
4082      message: 'message',
4083      original_line_price: 'original_line_price',
4084      original_price: 'original_price',
4085      properties: 'properties',
4086      quantity: 'quantity',
4087      requires_shipping: 'shipping_required',
4088      sku: 'sku',
4089      taxable: 'taxable',
4090      title: 'product_name',
4091      product_name: 'product_name',
4092      url: 'url',
4093      product_id: 'product_id',
4094      variant_id: 'variant_id',
4095      id: ['id', 'i_id'],
4096    }
4097
4098    line_item = map(line_item, mapper)
4099
4100    line_item.product_id = line_item.product_id || (old_line_item.product && old_line_item.product.id) || null
4101    line_item.variant_id = line_item.variant_id || (old_line_item.variant && old_line_item.variant.id) || null
4102    line_item.image      = line_item.image || (old_line_item.image && old_line_item.image.url) || null
4103
4104    return line_item
4105
4106  }
4107
4108  const mapTransaction = transaction => {
4109
4110    const mapper = {
4111      amount: 'amount',
4112      created_at: 'created_at',
4113      gateway: 'gateway_type',
4114      id: 'id',
4115      status: 'status',
4116    }
4117
4118    transaction = map(transaction, mapper)
4119
4120    return transaction
4121
4122  }
4123
4124
4125</script>
4125
4126
4127</body>
4128</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.