<!doctype html>
<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
<!--[if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]-->
<!--[if IE 9 ]><html class="ie9 no-js"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html class="no-js"> <!--<![endif]-->
<head>
<!-- Basic page needs ================================================== -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="icon" href="https://cdn.store-assets.com/s/922320/f/8463850.png" />
<!-- Title and description ================================================== -->
<title>
Page Not Found – Aliganag
</title>
<!-- Social meta ================================================== -->
<meta property="og:type" content="website">
<meta property="og:title" content="Page Not Found">
<meta property="og:url" content="">
<meta property="og:image" content="">
<meta property="og:image:secure_url" content="">
<meta property="og:description" content="Aliganag">
<meta property="og:site_name" content="Aliganag">
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@">
<!-- Helpers ================================================== -->
<link rel="canonical" href="">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
<meta name="theme-color" content="#121212">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript" ></script>
<!-- Header hook for plugins ================================================== -->
<!-- ScriptTags -->
<script>window.__st={'p': 'page', 'cid': ''};</script><script src='/assets/events.js'></script><script>const __es_ads = {'country_code':'PK' ,'title': 'Online store by <img src="https://s3.ap-southeast-1.amazonaws.com/easystore.website/images/logo/svg/easystore-logo-horizontal.svg" alt="EasyStore" style="display: block !important;width:8em;margin:-2px 0 0 8px;"> <i style="width: 1px;height: 25px;margin: 0 10px;background: #E3E7EB;"></i> Create yours for free today.','title_mb': 'Create online store with <img src="https://s3.ap-southeast-1.amazonaws.com/easystore.website/images/logo/svg/easystore-logo-horizontal.svg" alt="EasyStore" style="display: block !important;width:8em;margin:-2px 8px 0;">','cta': 'Get started'}</script><script src='/assets/js/ads/storefront-ads.js'></script><script>(function(){function asyncLoad(){var urls=['/assets/traffic.js?v=1'];for(var i=0;i<urls.length;i++){var s=document.createElement('script');s.type='text/javascript';s.async=true;s.src=urls[i];var x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);}}window.attachEvent ? window.attachEvent('onload', asyncLoad) : window.addEventListener('load', asyncLoad, false);})();</script>
<!-- /ScriptTags -->
<script src="https://themes.easystore.co/63057/assets/global.js?t=1734612272" defer="defer"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', '', 'auto','myTracker');
ga('myTracker.send', 'pageview');
</script>
<script src="/assets/storefront.js?id=5b96e48c778f63472284" type="text/javascript" ></script>
<!-- CSS ================================================== -->
<style>
@font-face {
font-family: 'Rubik';
font-style: normal;
font-weight: regular;
src: local('Rubik regular'), local('Rubik-regular'), url(https://fonts.gstatic.com/s/rubik/v14/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4i1UE80V4bVkA.ttf) format('truetype');
}
@font-face {
font-family: 'Archivo Black';
font-style: normal;
font-weight: regular;
src: local('Archivo Black regular'), local('Archivo Black-regular'), url(https://fonts.gstatic.com/s/archivoblack/v10/HTxqL289NzCGg4MzN6KJ7eW6OYuP_x7yx3A.ttf) format('truetype');
}
:root {
--font-body-family: 'Rubik', sans-serif;
--font-body-style: normal;
--font-body-weight: 300;
--font-heading-family: 'Archivo Black', sans-serif;
--font-heading-style: normal;
--font-heading-weight: 700;
--color-heading-text: 18,18,18;
--color-base-text: 18,18,18;
--color-base-background-1: 255,255,255;
--color-base-background-2: 255,255,255;
--color-base-solid-button-labels: 255,255,255;
--color-base-outline-button-labels: 18,18,18;
--color-base-accent-1: 18,18,18;
--color-base-accent-2: 18,18,18;
--payment-terms-background-color: 255,255,255;
--gradient-base-background-1: 255,255,255;
--gradient-base-background-2: 255,255,255;
--gradient-base-accent-1: 18,18,18;
--gradient-base-accent-2: 18,18,18;
--page-width: 145rem;
}
*,
*::before,
*::after {
box-sizing: inherit;
}
html {
box-sizing: border-box;
font-size: 62.5%;
height: 100%;
}
body {
display: grid;
grid-template-rows: auto auto 1fr auto;
grid-template-columns: 100%;
min-height: 100%;
margin: 0;
font-size: 1.5rem;
letter-spacing: 0.06rem;
line-height: 1.8;
font-family: var(--font-body-family);
font-style: var(--font-body-style);
font-weight: var(--font-body-weight);
}
@media screen and (min-width: 750px) {
body {
font-size: 1.6rem;
}
}
</style>
<link href="https://themes.easystore.co/63057/assets/base.css?t=1734612272" rel="stylesheet" type="text/css" media="screen" />
<script>document.documentElement.className = document.documentElement.className.replace('no-js', 'js');</script>
</head>
<body id="page-not-found" class="template-page" >
<!-- Snippet:global/body_start: Console Extension -->
<div id='es_console' style='display: none;'>1344242</div>
<!-- /Snippet -->
<style>
header {
--logo-width: 120px;
}
.header-wrapper,
.header-wrapper .list-menu--disclosure,
.header-wrapper .search-modal{
background-color: #F1F1F1;
}
.header-wrapper .search-modal .field__input{
background-color: rgb(var(--color-background));
}
.header-wrapper summary .icon-caret,
.header-wrapper .header__menu-item a,
.header-wrapper .list-menu__item,
.header-wrapper .link--text{
color: #000000;
}
.search-modal__form{
position: relative;
}
.dropdown {
display: none;
position: absolute;
top: 100%;
left: 0;
width: 100%;
padding: 5px 0;
background-color: #fff;
color:#000;
z-index: 1000;
border-bottom-left-radius: 15px;
border-bottom-right-radius: 15px;
border: 1px solid rgba(var(--color-foreground), 1);
border-top: none;
overflow-x: hidden;
overflow-y: auto;
max-height: 350px;
}
.dropdown-item {
padding: 0.4rem 2rem;
cursor: pointer;
line-height: 1.4;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.dropdown-item:hover{
background-color: #f3f3f3;
}
.search__input.is-focus{
border-radius: 15px;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
border: 1px solid rgba(var(--color-foreground), 1);
border-bottom: none;
box-shadow: none;
}
.clear-all {
text-align: right;
padding: 0 2rem 0.2rem;
line-height: 1;
font-size: 70%;
margin-bottom: -2px;
}
.clear-all:hover{
background-color: #fff;
}
.search-input-focus .easystore-section-header-hidden{
transform: none;
}
</style>
<link rel="preload" href="https://themes.easystore.co/63057/assets/section-header.css?t=1734612272" as="style" onload="this.onload=null;this.rel='stylesheet'">
<link rel="preload" href="https://themes.easystore.co/63057/assets/component-list-menu.css?t=1734612272" as="style" onload="this.onload=null;this.rel='stylesheet'">
<link rel="preload" href="https://themes.easystore.co/63057/assets/component-menu-drawer.css?t=1734612272" as="style" onload="this.onload=null;this.rel='stylesheet'">
<link rel="preload" href="https://themes.easystore.co/63057/assets/component-cart-notification.css?v1.1?t=1734612272" as="style" onload="this.onload=null;this.rel='stylesheet'">
<script src="https://themes.easystore.co/63057/assets/cart-notification.js?t=1734612272" defer="defer"></script>
<script src="https://themes.easystore.co/63057/assets/details-modal.js?t=1734612272" defer="defer"></script>
<svg xmlns="http://www.w3.org/2000/svg" class="hidden">
<symbol id="icon-search" viewbox="0 0 18 19" fill="none">
<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"/>
</symbol>
<symbol id="icon-close" class="icon icon-close" fill="none" viewBox="0 0 18 17">
<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">
</symbol>
</svg>
<div id="easystore-section-header">
<sticky-header class="header-wrapper header-wrapper--border-bottom">
<header class="header header--middle-left page-width header--has-menu">
<header-drawer data-breakpoint="tablet">
<details class="menu-drawer-container menu-opening">
<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">
<span>
<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>
<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>
</span>
</summary>
<div id="menu-drawer" class="menu-drawer motion-reduce" tabindex="-1">
<div class="menu-drawer__inner-container">
<div class="menu-drawer__navigation-container">
<nav class="menu-drawer__navigation">
<ul class="menu-drawer__menu list-menu" role="list">
<li>
<a href="/" class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
Home
</a>
</li>
<li>
<details>
<summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags">
<a href="/collections/all" class="link--text list-menu__item menu-drawer__menu-item">
Catalog
</a>
<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>
<svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
<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>
</svg>
</summary>
<div class="menu-drawer__submenu motion-reduce" tabindex="-1">
<div class="menu-drawer__inner-submenu">
<button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true">
<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>
Catalog
</button>
<ul class="menu-drawer__menu list-menu" role="list" tabindex="-1">
<li>
<a href="/collections/new-arrival" class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
New arrival
</a>
</li>
<li>
<a href="/collections/hot-selling" class="menu-drawer__menu-item link link--text list-menu__item focus-inset">
Hot selling
</a>
</li>
</ul>
</div>
</div>
</details>
</li>
<li>
<a href="/blogs/news" class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
News
</a>
</li>
<li>
<a href="/store-locator" class="menu-drawer__menu-item list-menu__item link link--text focus-inset">
Location
</a>
</li>
</ul>
</nav>
<div class="menu-drawer__utility-links">
<a href="/account/login" class="menu-drawer__account link link--text focus-inset h5">
<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>
Log in
</a>
<a href="/account/register" class="menu-drawer__account link link--text focus-inset h5">
<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">
<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>
</svg>
Create account
</a>
</div>
</div>
</div>
</div>
</details>
</header-drawer>
<h1 class="header__heading">
Aliganag
</h1>
<div class="header__search-input" tabindex="-1">
<form action="/search" method="get" role="search" class="search search-modal__form">
<div class="field">
<input class="search__input field__input"
id="Search-In-Modal"
type="search"
name="q"
value=""
placeholder="Search"
autocomplete="off"
>
<label class="field__label" for="Search-In-Modal">Search</label>
<div class="dropdown" id="searchDropdown"></div>
<input type="hidden" name="search_history" class="hidden_search_history">
<input type="hidden" name="options[prefix]" value="last">
<button class="search__button field__button" aria-label="Search">
<svg class="icon icon-search" aria-hidden="true" focusable="false" role="presentation">
<use href="#icon-search">
</svg>
</button>
</div>
</form>
</div>
<nav class="header__inline-menu">
<ul class="list-menu list-menu--inline" role="list">
<li>
<a href="/" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
Home
</a>
</li>
<li>
<details-disclosure>
<details>
<summary class="header__menu-item list-menu__item link focus-inset">
<a href="/collections/all" >Catalog</a>
<svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6">
<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>
</svg>
</summary>
<ul class="header__submenu list-menu list-menu--disclosure caption-large motion-reduce" role="list" tabindex="-1">
<li>
<a href="/collections/new-arrival" class="header__menu-item list-menu__item link link--text focus-inset caption-large">
New arrival
</a>
</li>
<li>
<a href="/collections/hot-selling" class="header__menu-item list-menu__item link link--text focus-inset caption-large">
Hot selling
</a>
</li>
</ul>
</details>
</details-disclosure>
</li>
<li>
<a href="/blogs/news" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
News
</a>
</li>
<li>
<a href="/store-locator" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset">
Location
</a>
</li>
</ul>
</nav>
<div class="header__icons">
<div class="header__icon header__icon--account link link--text focus-inset small-hide medium-hide">
<a href="/account/login" class="header__icon link link--text focus-inset p-2">
<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>
<span id="my-account" class="header__link-label">Login</span>
</a>
</div>
<a href="/cart" class="header__icon link link--text focus-inset" id="cart-icon-bubble">
<span class="header__icon--cart">
<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>
<div class="cart-count-bubble hidden">
<span aria-hidden="true" class="js-content-cart-count">0</span>
</div>
</span>
<span class="header__link-label medium-hide small-hide">
Cart
</span>
</a>
</div>
</header>
</sticky-header>
<cart-notification>
<div class="cart-notification-wrapper page-width color-background-1">
<div id="cart-notification" class="cart-notification focus-inset" aria-modal="true" aria-label="Added to cart" role="dialog" tabindex="-1">
<div class="cart-notification__header">
<h2 class="cart-notification__heading caption-large">
<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">
<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>
</svg>
Added to cart</h2>
<button type="button" class="cart-notification__close modal__close-button link link--text focus-inset" aria-label="accessibility.close">
<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>
</button>
</div>
<div id="cart-notification-product" class="cart-notification-product"></div>
<div class="cart-notification__links">
<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>
<form action="/cart" method="post" id="cart-notification-form">
<input type="hidden" name="_token" value="mEdtOnlGBZbClwHsl6b9BpXhhqifiNK7A8myalO9">
<input type="hidden" name="current_currency" value="USD">
<button class="button button--primary button--full-width" name="checkout" value="true">Checkout</button>
</form>
<button type="button" class="link button-label">Continue shopping</button>
</div>
</div>
</div>
</cart-notification>
<style>
.cart-notification {
display: none;
}
</style>
<script>
document.getElementById('cart-notification-form').addEventListener('submit',(event)=>{
if(event.submitter) event.submitter.classList.add('loading');
})
</script>
</div>
<script>
class StickyHeader extends HTMLElement {
constructor() {
super();
}
connectedCallback() {
this.header = document.getElementById('easystore-section-header');
this.headerBounds = {};
this.currentScrollTop = 0;
this.preventReveal = false;
this.onScrollHandler = this.onScroll.bind(this);
this.hideHeaderOnScrollUp = () => this.preventReveal = true;
this.addEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp);
window.addEventListener('scroll', this.onScrollHandler, false);
this.createObserver();
}
disconnectedCallback() {
this.removeEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp);
window.removeEventListener('scroll', this.onScrollHandler);
}
createObserver() {
let observer = new IntersectionObserver((entries, observer) => {
this.headerBounds = entries[0].intersectionRect;
observer.disconnect();
});
observer.observe(this.header);
}
onScroll() {
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
if (scrollTop > this.currentScrollTop && scrollTop > this.headerBounds.bottom) {
requestAnimationFrame(this.hide.bind(this));
} else if (scrollTop < this.currentScrollTop && scrollTop > this.headerBounds.bottom) {
if (!this.preventReveal) {
requestAnimationFrame(this.reveal.bind(this));
} else {
window.clearTimeout(this.isScrolling);
this.isScrolling = setTimeout(() => {
this.preventReveal = false;
}, 66);
requestAnimationFrame(this.hide.bind(this));
}
} else if (scrollTop <= this.headerBounds.top) {
requestAnimationFrame(this.reset.bind(this));
}
this.currentScrollTop = scrollTop;
}
hide() {
this.header.classList.add('easystore-section-header-hidden', 'easystore-section-header-sticky');
this.closeMenuDisclosure();
// this.closeSearchModal();
}
reveal() {
this.header.classList.add('easystore-section-header-sticky', 'animate');
this.header.classList.remove('easystore-section-header-hidden');
}
reset() {
this.header.classList.remove('easystore-section-header-hidden', 'easystore-section-header-sticky', 'animate');
}
closeMenuDisclosure() {
this.disclosures = this.disclosures || this.header.querySelectorAll('details-disclosure');
this.disclosures.forEach(disclosure => disclosure.close());
}
// closeSearchModal() {
// this.searchModal = this.searchModal || this.header.querySelector('details-modal');
// this.searchModal.close(false);
// }
}
customElements.define('sticky-header', StickyHeader);
class DetailsDisclosure extends HTMLElement{
constructor() {
super();
this.mainDetailsToggle = this.querySelector('details');
// this.mainDetailsToggle.addEventListener('focusout', this.onFocusOut.bind(this));
this.mainDetailsToggle.addEventListener('mouseover', this.open.bind(this));
this.mainDetailsToggle.addEventListener('mouseleave', this.close.bind(this));
}
onFocusOut() {
setTimeout(() => {
if (!this.contains(document.activeElement)) this.close();
})
}
open() {
this.mainDetailsToggle.setAttribute('open',1)
}
close() {
this.mainDetailsToggle.removeAttribute('open')
}
}
customElements.define('details-disclosure', DetailsDisclosure);
function clearAll() {
localStorage.removeItem('searchHistory');
var customer = "";
if(customer) {
// Your logic to clear all data or call an endpoint
fetch('/account/search_histories', {
method: 'DELETE',
headers: {
"Content-Type": "application/json",
"X-Requested-With": "XMLHttpRequest"
},
body: JSON.stringify({
_token: "mEdtOnlGBZbClwHsl6b9BpXhhqifiNK7A8myalO9"
}),
})
.then(response => response.json())
}
}
// End - delete search history from local storage
// search history dropdown
var searchInputs = document.querySelectorAll('.search__input');
if(searchInputs.length > 0) {
searchInputs.forEach((searchInput)=> {
searchInput.addEventListener('focus', function() {
var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown');
searchDropdown.innerHTML = ''; // Clear existing items
// retrieve data from local storage
var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || [];
// Convert JSON to string
var search_history_json = JSON.stringify(searchHistoryData);
// Set the value of the hidden input
searchInput.closest('form').querySelector(".hidden_search_history").value = search_history_json;
// create dropdown items
var clearAllItem = document.createElement('div');
clearAllItem.className = 'dropdown-item clear-all';
clearAllItem.textContent = 'Clear';
clearAllItem.addEventListener('click', function() {
clearAll();
searchDropdown.style.display = 'none';
searchInput.classList.remove('is-focus');
});
searchDropdown.appendChild(clearAllItem);
// create dropdown items
searchHistoryData.forEach(function(item) {
var dropdownItem = document.createElement('div');
dropdownItem.className = 'dropdown-item';
dropdownItem.textContent = item.term;
dropdownItem.addEventListener('click', function() {
searchInput.value = item.term;
searchInput.closest('form').submit();
searchDropdown.style.display = 'none';
});
searchDropdown.appendChild(dropdownItem);
});
if(searchHistoryData.length > 0){
// display the dropdown
searchInput.classList.add('is-focus');
document.body.classList.add('search-input-focus');
searchDropdown.style.display = 'block';
}
});
searchInput.addEventListener("focusout", (event) => {
var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown');
searchInput.classList.remove('is-focus');
searchDropdown.classList.add('transparent');
setTimeout(()=>{
searchDropdown.style.display = 'none';
searchDropdown.classList.remove('transparent');
document.body.classList.remove('search-input-focus');
}, 400);
});
})
}
// End - search history dropdown
</script>
<main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1">
<link rel="preload" href="https://themes.easystore.co/63057/assets/component-card.css?t=1734612272" as="style" onload="this.onload=null;this.rel='stylesheet'">
<link rel="preload" href="https://themes.easystore.co/63057/assets/component-price.css?t=1734612272" as="style" onload="this.onload=null;this.rel='stylesheet'">
<link rel="preload" href="https://themes.easystore.co/63057/assets/component-product-grid.css?t=1734612272" as="style" onload="this.onload=null;this.rel='stylesheet'">
<div style="text-align: center; display: flex; flex-direction: column; align-items: center; margin: 0rem 2rem;">
<h1>Oops...</h1>
<p>The page you're looking for has changed or doesn't exist anymore.</p>
<p>Feel free to explore our store using the search bar.</p>
<div class="template-search__search" style="width: 100%; max-width: 500px;">
<form action="/search" method="get" role="search" class="search">
<div class="field">
<input
class="search__input field__input"
id="Search-In-Template"
type="search"
name="q"
value=""
placeholder="Search"
autocomplete="off"
>
<label class="field__label" for="Search-In-Template">Search</label>
<div class="dropdown" id="searchDropdown"></div>
<input type="hidden" name="search_history" class="hidden_search_history">
<button type="submit" class="search__button field__button" aria-label="Search">
<svg class="icon icon-search"><use xlink:href="#icon-search"></svg>
</button>
</div>
</form>
</div>
</div>
<section class="product-section page-width spaced-section">
<product-recommendations>
<h2 class="product-recommendations__heading" style="text-align: center;">
A chosen few you'll love
</h2>
<ul class="grid grid--2-col product-grid grid--4-col-desktop grid--quarter-max" role="list">
<li class="grid__item">
<div class="product-card-wrapper card-wrapper">
<a href="/products/seo-october-11" class="full-unstyled-link">
<div class="card card--product grid-link__image--product" tabindex="-1">
<div class="card__inner">
<div class="media media--transparent media--square media--hover-effect">
<img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/products/no_image.png?width=480" alt="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/products/no_image.png" loading="lazy">
</div>
<div class="card__badge card__badge-on_sale card__badge-top-left"><span class="badge badge-ribbon badge--top-left color-accent-2" aria-hidden="true">Sale</span></div>
</div>
</div>
<div class="card-information">
<div class="card-information__wrapper">
<span class="card-information__text">
seo october 11
</span>
<span class="caption-large light"></span>
<div class="price
price--on-sale "
data-expires="">
<dl>
<div class="price__regular">
<dt>
<span class="visually-hidden visually-hidden--inline">Regular price</span>
</dt>
<dd >
<span class="price-item price-item--regular">
<span class=money data-ori-price='50.00'>$ 50.00 </span>
</span>
</dd>
</div>
<div class="price__sale">
<dt>
<span class="visually-hidden visually-hidden--inline">Sale price</span>
</dt>
<dd >
<span class="price-item price-item--sale">
<span class=money data-ori-price='50.00'>$ 50.00 </span>
</span>
</dd>
<dt class="price__compare">
<span class="visually-hidden visually-hidden--inline">Regular price</span>
</dt>
<dd class="price__compare">
<s class="price-item price-item--regular">
<span class=money data-ori-price='100.00'>$ 100.00 </span>
</s>
</dd>
</div>
</dl>
</div>
</div>
</div>
</a>
</div>
</li>
</ul>
</product-recommendations>
</section>
<script>
function clearAll() {
localStorage.removeItem('searchHistory');
var customer = "";
if(customer) {
// Your logic to clear all data or call an endpoint
fetch('/account/search_histories', {
method: 'DELETE',
headers: {
"Content-Type": "application/json",
"X-Requested-With": "XMLHttpRequest"
},
body: JSON.stringify({
_token: "mEdtOnlGBZbClwHsl6b9BpXhhqifiNK7A8myalO9"
}),
})
.then(response => response.json())
}
}
// End - delete search history from local storage
// search history dropdown
var searchInputs = document.querySelectorAll('.search__input');
if(searchInputs.length > 0) {
searchInputs.forEach((searchInput)=> {
searchInput.addEventListener('focus', function() {
var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown');
searchDropdown.innerHTML = ''; // Clear existing items
// retrieve data from local storage
var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || [];
// Convert JSON to string
var search_history_json = JSON.stringify(searchHistoryData);
// Set the value of the hidden input
searchInput.closest('form').querySelector(".hidden_search_history").value = search_history_json;
// create dropdown items
var clearAllItem = document.createElement('div');
clearAllItem.className = 'dropdown-item clear-all';
clearAllItem.textContent = 'Clear';
clearAllItem.addEventListener('click', function() {
clearAll();
searchDropdown.style.display = 'none';
searchInput.classList.remove('is-focus');
});
searchDropdown.appendChild(clearAllItem);
// create dropdown items
searchHistoryData.forEach(function(item) {
var dropdownItem = document.createElement('div');
dropdownItem.className = 'dropdown-item';
dropdownItem.textContent = item.term;
dropdownItem.addEventListener('click', function() {
searchInput.value = item.term;
searchInput.closest('form').submit();
searchDropdown.style.display = 'none';
});
searchDropdown.appendChild(dropdownItem);
});
if(searchHistoryData.length > 0){
// display the dropdown
searchInput.classList.add('is-focus');
document.body.classList.add('search-input-focus');
searchDropdown.style.display = 'block';
}
});
searchInput.addEventListener("focusout", (event) => {
var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown');
searchInput.classList.remove('is-focus');
searchDropdown.classList.add('transparent');
setTimeout(()=>{
searchDropdown.style.display = 'none';
searchDropdown.classList.remove('transparent');
document.body.classList.remove('search-input-focus');
}, 400);
});
})
}
// End - search history dropdown
</script>
</main>
<style>
.footer{
background-color: #010517;
color: #FEFEFE;
--color-foreground: 254,254,254;
}
.footer .link--text,
.footer .list-menu__item--link,
.footer .footer-block__details-content .list-menu__item--link{
color: #FEFEFE;
}
.footer-block__heading{
color: #FFFFFF;
}
.rounded{
border-radius: 10px;
}
.shopping-app-border{
border: 1px #ECECEC solid;
margin-right: 3px;
}
.app-download-badge{
display: inline-block;
margin-right: 3px;
}
</style>
<link rel="preload" href="https://themes.easystore.co/63057/assets/section-footer.css?t=1734612272" as="style" onload="this.onload=null;this.rel='stylesheet'">
<footer class="footer color-background-1">
<div class="footer__content-top page-width">
<div class="grid grid--1-col grid--4-col-tablet ">
<div class="grid__item">
<h2 class="footer-block__heading">Follow us</h2>
<ul class="footer__list-social list-unstyled list-social footer-block__details-content" role="list">
<li class="list-social__item">
<a href="https://twitter.com/" class="link link--text list-social__link">
<svg class="icon icon-twitter " viewBox="0 0 22 22" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M3 3l11.733 16h4.267l-11.733 -16z" />
<path d="M3 19l6.768 -6.768m2.46 -2.46l6.772 -6.772" />
</svg>
</a>
</li>
<li class="list-social__item">
<a href="https://facebook.com/" class="link link--text list-social__link">
<svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook "
viewBox="0 0 18 18">
<path fill="currentColor"
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">
</path>
</svg>
</a>
</li>
<li class="list-social__item">
<a href="https://instagram.com/" class="link link--text list-social__link">
<svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram "
viewBox="0 0 18 18">
<path fill="currentColor"
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">
</path>
<path fill="currentColor"
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">
</path>
</svg>
</a>
</li>
<li class="list-social__item">
<a href="https://tiktok.com/" class="link link--text list-social__link">
<svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-tiktok " width="16"
height="18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
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"
fill="currentColor">
</path>
</svg>
</a>
</li>
<li class="list-social__item">
<a href="https://wa.me/" class="link link--text list-social__link">
<svg class="icon icon-whatsapp " fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 750"><path d="M703.5,195.64A371,371,0,0,0,572,56C523.89,26,471.51,8.4,415.21,2.51A370.48,370.48,0,0,0,316.5,5.42,364,364,0,0,0,215.23,37.47a369,369,0,0,0-132.68,108Q17.36,230.17,7,336.63A370.11,370.11,0,0,0,53.42,554.94a7.23,7.23,0,0,1,.61,4.9Q36.48,624.6,18.7,689.27C13.24,709.19,7.75,729.1,2.14,749.5c1.23-.26,1.93-.36,2.61-.55q95.75-25.11,191.54-50.2a8.43,8.43,0,0,1,5.19.61c12.79,5.8,25.28,12.34,38.29,17.59A370.28,370.28,0,0,0,666.09,604q69.06-86.36,80-196.47A370.36,370.36,0,0,0,743,311.86,361,361,0,0,0,703.5,195.64ZM684.64,388c-3.6,65.27-25.48,123.75-66.06,174.9-44.89,56.63-102.85,93.24-173.19,109.84a297.41,297.41,0,0,1-91.27,7A305.68,305.68,0,0,1,215.31,635a17.54,17.54,0,0,0-15.2-2.14c-35.5,9.58-71.1,18.74-106.66,28-.49.13-1,.21-2.14.45,1.72-6.37,3.29-12.22,4.89-18Q109,596.7,121.66,550.07a7.12,7.12,0,0,0-1-5.07c-12.37-19.32-23.31-39.25-31.6-60.64A309,309,0,0,1,70.4,410.63c-6.11-49.35-.93-97.44,16.1-144.15,57.86-160.1,234.55-243,394.65-185.11a308.31,308.31,0,0,1,120.2,79.18c34.9,37.19,59.32,80.31,72.81,129.53A304.75,304.75,0,0,1,684.64,388Z"/><path d="M556,454.42c-13.84-6.52-27.43-13.55-41.24-20.12-11.47-5.46-23-10.89-34.73-15.69-9.1-3.73-13.09-1.72-19.12,6.06-9.39,12.09-19.09,23.95-28.89,35.71-4.7,5.63-9.47,6.79-16.1,3.8-12.32-5.56-24.82-10.9-36.58-17.51-39.6-22.29-69.59-54.3-92.67-93.11-4.87-8.2-4.3-12.16,2.14-19.13,9.07-9.9,18.4-19.63,24.09-32.12a17.42,17.42,0,0,0,.47-14.67c-9.55-23-19-46-28.75-68.92a75.82,75.82,0,0,0-7-12.7c-2.56-3.82-6.6-5.49-11.28-5.36H255.78v-.56c-5.48.29-11,.11-16.39,1-8.66,1.37-15,6.75-20.95,12.94-25.46,26.48-34.58,57.89-28.66,93.83a145.64,145.64,0,0,0,20.75,53.75C220.48,377.5,231.32,393,242.65,408a435.09,435.09,0,0,0,70.53,73.19c31.48,26,67,44.54,105.56,57.58,16.1,5.44,32.08,11.08,49.36,11.42,11.52.22,23,.08,34.16-3.22a110.77,110.77,0,0,0,42.1-23.61c5.48-4.81,10.48-10.18,13.19-17a110.56,110.56,0,0,0,7.57-37.2C565.27,461.93,562.42,457.42,556,454.42Z"/></svg>
</a>
</li>
<li class="list-social__item">
<a href="https://line.com/" class="link link--text list-social__link">
<svg class="icon icon-line-footer " fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 750"><path d="M375,.5C168.17.5.5,168.17.5,375S168.17,749.5,375,749.5,749.5,581.83,749.5,375,581.83.5,375,.5ZM570.75,476.91C518.48,537.06,401.6,610.33,375,621.53s-22.66-7.13-21.57-13.42c.63-3.76,3.55-21.33,3.55-21.33.83-6.36,1.66-16.23-.83-22.52-2.81-7-13.83-10.54-21.95-12.29C214.51,536.14,125.9,452.45,125.9,352.53,125.9,241,237.64,150.38,375,150.38s249.1,90.68,249.1,202.15h0C624.14,397.14,606.85,437.32,570.75,476.91Z"/><polygon points="324.38 298.65 324.38 298.65 324.38 298.65 324.38 298.65"/><path d="M324.38,298.65H306.91a4.86,4.86,0,0,0-4.86,4.85V412a4.86,4.86,0,0,0,4.86,4.85h17.47a4.86,4.86,0,0,0,4.85-4.85V303.5A4.86,4.86,0,0,0,324.38,298.65Z"/><path d="M444.67,298.65h-17.5a4.85,4.85,0,0,0-4.85,4.85V368l-49.73-67.17a4.57,4.57,0,0,0-.38-.49,2.76,2.76,0,0,0-.29-.3l-.09-.09a2.65,2.65,0,0,0-.26-.21l-.12-.1-.25-.18-.15-.08-.26-.14-.15-.08-.28-.12-.16,0-.28-.1-.18,0-.27-.06H351.08a4.85,4.85,0,0,0-4.85,4.84V412a4.85,4.85,0,0,0,4.85,4.85h17.48a4.85,4.85,0,0,0,4.85-4.85V347.54l49.81,67.26a5.15,5.15,0,0,0,1.22,1.2h.06l.29.18.14.07.24.12.23.1.15,0,.32.11H426a4.69,4.69,0,0,0,1.24.16h17.48a4.85,4.85,0,0,0,4.86-4.84h0V303.5A4.87,4.87,0,0,0,444.67,298.65Z"/><path d="M282.26,389.67h0l0,0H234.79V303.5a4.85,4.85,0,0,0-4.83-4.85H212.47a4.84,4.84,0,0,0-4.85,4.84h0V412a4.74,4.74,0,0,0,1.35,3.32.27.27,0,0,0,.07.08l.07.07a4.81,4.81,0,0,0,3.33,1.35h69.81a4.84,4.84,0,0,0,4.84-4.84h0V394.52A4.84,4.84,0,0,0,282.26,389.67Z"/><path d="M541.16,371.34a4.85,4.85,0,0,0,4.85-4.85h0V349a4.85,4.85,0,0,0-4.84-4.85H493.72V325.84l47.42,0A4.83,4.83,0,0,0,546,321V303.5a4.85,4.85,0,0,0-4.84-4.86H471.34A4.81,4.81,0,0,0,468,300l-.05.05-.08.09a4.82,4.82,0,0,0-1.34,3.33V412a4.77,4.77,0,0,0,1.35,3.33l.07.07.07.07a4.8,4.8,0,0,0,3.32,1.36h69.81A4.85,4.85,0,0,0,546,412h0V394.5a4.85,4.85,0,0,0-4.84-4.85H493.72V371.34Z"/></svg>
</a>
</li>
<li class="list-social__item">
<a href="https://wechat.com/" class="link link--text list-social__link">
<svg class="icon icon-wechat " fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 750"><path d="M372.31,344.63c30-25,64.6-40.77,102.63-49.15a300.24,300.24,0,0,1,45.43-6.61c5.81-.38,11.6-.81,17.41-1.1,1.9-.1,2.82-.61,2.47-2.74s-.43-4.35-.63-6.54a225,225,0,0,0-7.31-40.71c-10.79-38.76-31.69-71.57-59.89-99.89C443.56,108.89,409.5,88,371.11,74.1a288,288,0,0,0-92.8-17.38,214.68,214.68,0,0,0-24.59.6c-13.23,1.22-26.59,2.34-39.62,4.87-27.42,5.32-53.55,14.74-78.56,27.19C81.1,116.52,40.88,157.11,17.8,213.92c-10,24.63-16.23,50.2-17.22,76.79a268,268,0,0,0,1.54,35.94c2,20.14,7.8,39.35,16.06,57.79,16.49,36.82,41.46,67,72.92,91.91,5.45,4.32,11.08,8.43,16.67,12.58,5,3.74,7.24,8.41,5.45,14.69-1.45,5-2.91,10.06-4.07,15.16-4.66,21.08-9.21,42.18-13.79,63.28-.68,3.14-1.33,6.31-2.17,10.23l4.22-2.53c25-15.68,50.07-31.42,75.19-47,5.66-3.53,11.39-7.13,17.5-9.66,8.26-3.45,17.1-2,25.72-1.11,10.89,1.14,21.75,2.45,32.56,3.79,11.34,1.4,22.65,2.92,34,4.38,4.22.54,8.47,1,13,1.58V538.6c-.54-9-1.36-18.05-1.62-27.1a207.12,207.12,0,0,1,5.51-54.13C310.33,411.15,336.31,374.6,372.31,344.63Zm5.22-135.5a40,40,0,1,1,.23,80.06c-23,0-40.94-17.52-40.93-39.93C336.85,227.31,355.16,209.25,377.53,209.13Zm-199.24,80c-22.67,0-40.12-17.42-40.18-40.2-.06-22.15,17.59-39.69,40-39.8s41,18.18,41,40.45C219.19,271.27,200.73,289.12,178.29,289.17Z"/><path d="M741.59,452.47c-17.42-53.21-52.3-91.29-102.2-115.63-37.18-18.16-76.75-25.44-118.12-23.14a233.78,233.78,0,0,0-42.61,6.1c-46.81,11.45-86.29,35.2-117,72.49-29.88,36.26-43.68,77.93-39.29,125a162.57,162.57,0,0,0,20.91,65.36c17.84,31.48,42.83,56.1,73.27,75.36a201,201,0,0,0,61.39,25.71,231.39,231.39,0,0,0,41.51,5.7c14.43.74,28.84.56,43-2.4,11.91-2.47,23.58-6,35.4-8.94,13.89-3.42,27.81-3.75,41.31,1.49,9.47,3.67,18.62,8.2,27.9,12.36,1,.45,2,1,3,1.43l.45-.57-1.22-3.17A46,46,0,0,1,666.47,666c1.52-9.87,6.35-18.15,13-25.33,5.49-6,11.45-11.48,17.3-17.11,30.78-29.85,48.84-65.91,52.23-108.8A158.69,158.69,0,0,0,741.59,452.47ZM435.15,478.14a34.86,34.86,0,1,1,.74-69.71h0c19.66.06,34.87,15.6,34.76,35.51C470.54,463,454.75,478.26,435.15,478.14ZM596.63,478c-19.58-.43-34.46-15.65-34.16-35.13a34.6,34.6,0,0,1,34.88-34.32h.12c19,0,34,15.64,34,35.3A34.23,34.23,0,0,1,597.17,478Z"/></svg>
</a>
</li>
<li class="list-social__item">
<a href="https://youtube.com/" class="link link--text list-social__link">
<svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-youtube "
viewBox="0 0 100 70">
<path
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"
fill="currentColor">
</path>
</svg>
</a>
</li>
</ul>
</div>
<div class="grid__item">
<h2 class="footer-block__heading">We accept</h2>
<div class="footer-block__details-content footer__payment">
<ul class="list list-payment" role="list">
<li class="list-payment__item">
<svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img"
width="38" height="24" aria-labelledby="pi-visa">
<path opacity=".07"
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>
<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">
</path>
<path
d="M28.3 10.1H28c-.4 1-.7 1.5-1 3h1.9c-.3-1.5-.3-2.2-.6-3zm2.9 5.9h-1.7c-.1 0-.1 0-.2-.1l-.2-.9-.1-.2h-2.4c-.1 0-.2 0-.2.2l-.3.9c0 .1-.1.1-.1.1h-2.1l.2-.5L27 8.7c0-.5.3-.7.8-.7h1.5c.1 0 .2 0 .2.2l1.4 6.5c.1.4.2.7.2 1.1.1.1.1.1.1.2zm-13.4-.3l.4-1.8c.1 0 .2.1.2.1.7.3 1.4.5 2.1.4.2 0 .5-.1.7-.2.5-.2.5-.7.1-1.1-.2-.2-.5-.3-.8-.5-.4-.2-.8-.4-1.1-.7-1.2-1-.8-2.4-.1-3.1.6-.4.9-.8 1.7-.8 1.2 0 2.5 0 3.1.2h.1c-.1.6-.2 1.1-.4 1.7-.5-.2-1-.4-1.5-.4-.3 0-.6 0-.9.1-.2 0-.3.1-.4.2-.2.2-.2.5 0 .7l.5.4c.4.2.8.4 1.1.6.5.3 1 .8 1.1 1.4.2.9-.1 1.7-.9 2.3-.5.4-.7.6-1.4.6-1.4 0-2.5.1-3.4-.2-.1.2-.1.2-.2.1zm-3.5.3c.1-.7.1-.7.2-1 .5-2.2 1-4.5 1.4-6.7.1-.2.1-.3.3-.3H18c-.2 1.2-.4 2.1-.7 3.2-.3 1.5-.6 3-1 4.5 0 .2-.1.2-.3.2M5 8.2c0-.1.2-.2.3-.2h3.4c.5 0 .9.3 1 .8l.9 4.4c0 .1 0 .1.1.2 0-.1.1-.1.1-.1l2.1-5.1c-.1-.1 0-.2.1-.2h2.1c0 .1 0 .1-.1.2l-3.1 7.3c-.1.2-.1.3-.2.4-.1.1-.3 0-.5 0H9.7c-.1 0-.2 0-.2-.2L7.9 9.5c-.2-.2-.5-.5-.9-.6-.6-.3-1.7-.5-1.9-.5L5 8.2z"
fill="#142688"></path>
</svg>
</li>
<li class="list-payment__item">
<svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img"
width="38" height="24" aria-labelledby="pi-master">
<path opacity=".07"
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>
<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">
</path>
<circle fill="#EB001B" cx="15" cy="12" r="7"></circle>
<circle fill="#F79E1B" cx="23" cy="12" r="7"></circle>
<path fill="#FF5F00"
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>
</svg>
</li>
<li class="list-payment__item">
<svg class="icon icon--full-color " xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24"
width="38" height="24" aria-labelledby="pi-american_express">
<g fill="none">
<path fill="#000"
d="M35,0 L3,0 C1.3,0 0,1.3 0,3 L0,21 C0,22.7 1.4,24 3,24 L35,24 C36.7,24 38,22.7 38,21 L38,3 C38,1.3 36.6,0 35,0 Z"
opacity=".07"></path>
<path fill="#006FCF"
d="M35,1 C36.1,1 37,1.9 37,3 L37,21 C37,22.1 36.1,23 35,23 L3,23 C1.9,23 1,22.1 1,21 L1,3 C1,1.9 1.9,1 3,1 L35,1">
</path>
<path fill="#FFF"
d="M8.971,10.268 L9.745,12.144 L8.203,12.144 L8.971,10.268 Z M25.046,10.346 L22.069,10.346 L22.069,11.173 L24.998,11.173 L24.998,12.412 L22.075,12.412 L22.075,13.334 L25.052,13.334 L25.052,14.073 L27.129,11.828 L25.052,9.488 L25.046,10.346 L25.046,10.346 Z M10.983,8.006 L14.978,8.006 L15.865,9.941 L16.687,8 L27.057,8 L28.135,9.19 L29.25,8 L34.013,8 L30.494,11.852 L33.977,15.68 L29.143,15.68 L28.065,14.49 L26.94,15.68 L10.03,15.68 L9.536,14.49 L8.406,14.49 L7.911,15.68 L4,15.68 L7.286,8 L10.716,8 L10.983,8.006 Z M19.646,9.084 L17.407,9.084 L15.907,12.62 L14.282,9.084 L12.06,9.084 L12.06,13.894 L10,9.084 L8.007,9.084 L5.625,14.596 L7.18,14.596 L7.674,13.406 L10.27,13.406 L10.764,14.596 L13.484,14.596 L13.484,10.661 L15.235,14.602 L16.425,14.602 L18.165,10.673 L18.165,14.603 L19.623,14.603 L19.647,9.083 L19.646,9.084 Z M28.986,11.852 L31.517,9.084 L29.695,9.084 L28.094,10.81 L26.546,9.084 L20.652,9.084 L20.652,14.602 L26.462,14.602 L28.076,12.864 L29.624,14.602 L31.499,14.602 L28.987,11.852 L28.986,11.852 Z">
</path>
</g>
</svg>
</li>
<li class="list-payment__item">
<svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" width="38"
height="24" role="img" aria-labelledby="pi-paypal">
<path opacity=".07"
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>
<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">
</path>
<path fill="#003087"
d="M23.9 8.3c.2-1 0-1.7-.6-2.3-.6-.7-1.7-1-3.1-1h-4.1c-.3 0-.5.2-.6.5L14 15.6c0 .2.1.4.3.4H17l.4-3.4 1.8-2.2 4.7-2.1z">
</path>
<path fill="#3086C8"
d="M23.9 8.3l-.2.2c-.5 2.8-2.2 3.8-4.6 3.8H18c-.3 0-.5.2-.6.5l-.6 3.9-.2 1c0 .2.1.4.3.4H19c.3 0 .5-.2.5-.4v-.1l.4-2.4v-.1c0-.2.3-.4.5-.4h.3c2.1 0 3.7-.8 4.1-3.2.2-1 .1-1.8-.4-2.4-.1-.5-.3-.7-.5-.8z">
</path>
<path fill="#012169"
d="M23.3 8.1c-.1-.1-.2-.1-.3-.1-.1 0-.2 0-.3-.1-.3-.1-.7-.1-1.1-.1h-3c-.1 0-.2 0-.2.1-.2.1-.3.2-.3.4l-.7 4.4v.1c0-.3.3-.5.6-.5h1.3c2.5 0 4.1-1 4.6-3.8v-.2c-.1-.1-.3-.2-.5-.2h-.1z">
</path>
</svg>
</li>
<li class="list-payment__item">
<svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img"
width="38" height="24" aria-labelledby="pi-diners_club">
<path opacity=".07"
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>
<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">
</path>
<path
d="M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z"
fill="#3086C8"></path>
</svg>
</li>
<li class="list-payment__item">
<svg class="icon icon--full-color " viewBox="0 0 38 24" width="38" height="24" role="img"
aria-labelledby="pi-discover" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="#000" opacity=".07"
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>
<path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z" fill="#fff">
</path>
<path
d="M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z"
fill="#231F20"></path>
<path d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z" fill="url(#pi-paint0_linear)">
</path>
<path opacity=".65" d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z"
fill="url(#pi-paint1_linear)"></path>
<path
d="M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z"
fill="#231F20"></path>
<path
d="M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z"
fill="#231F20"></path>
<path d="M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z" fill="#F48120">
</path>
<defs>
<linearGradient id="pi-paint0_linear" x1="21.657" y1="12.275" x2="19.632" y2="9.104"
gradientUnits="userSpaceOnUse">
<stop stop-color="#F89F20"></stop>
<stop offset=".25" stop-color="#F79A20"></stop>
<stop offset=".533" stop-color="#F68D20"></stop>
<stop offset=".62" stop-color="#F58720"></stop>
<stop offset=".723" stop-color="#F48120"></stop>
<stop offset="1" stop-color="#F37521"></stop>
</linearGradient>
<linearGradient id="pi-paint1_linear" x1="21.338" y1="12.232" x2="18.378" y2="6.446"
gradientUnits="userSpaceOnUse">
<stop stop-color="#F58720"></stop>
<stop offset=".359" stop-color="#E16F27"></stop>
<stop offset=".703" stop-color="#D4602C"></stop>
<stop offset=".982" stop-color="#D05B2E"></stop>
</linearGradient>
</defs>
</svg>
</li>
</div>
<br>
</div>
<div class="grid__item">
<h2 class="footer-block__heading">
Quick links
</h2>
<ul class="footer-block__details-content list-unstyled">
<li>
<a href="/store-locator" class="link link--text list-menu__item list-menu__item--link">
Location
</a>
</li>
</ul>
</div>
<div class="grid__item">
<h2 class="footer-block__heading">Our mission</h2>
<div class="footer-block__details-content">
<p>Quality materials, good designs, craftsmanship and sustainability.</p>
</div>
</div>
</div>
</div>
<div class="footer__content-bottom">
<div class="footer__content-bottom-wrapper page-width">
<div class="footer__column footer__column--info">
<div class="footer__copyright caption">
<div class="copyright__content">© 2024 aliganag. Powered by <a href="http://www.easystore.co/?utm_source=storefront&utm_medium=sf_ref_footer&utm_campaign=sf_ref">EasyStore</a></div>
</div>
<div class="footer__copyright caption">
<div>
<a href="/legal/terms-of-service">Terms of Service</a>
| <a href="/legal/privacy-policy">Privacy Policy</a>
| <a href="/legal/refund-policy">Refund Policy</a>
</div>
</div>
</div>
</div>
</div>
</footer>
<script>
EasyStore.Currencies.init([{"name":"US Dollar","code":"USD","rate":"1.0","format_prefix":"$","format_suffix":null,"format_decimals":2,"thousand_separator":",","is_primary":true}], 1)
</script>
<script>
let page_template = 'page';
if(document.querySelector('.currency-picker')) {
EasyStore.Currencies.change(document.querySelector('.currency-picker').value)
EasyStore.Currencies.convertAll()
}
document.querySelectorAll('.currency-picker').forEach((el)=>{
el.addEventListener('change',(event)=>{
EasyStore.Currencies.change(event.target.value)
if (page_template == 'cart') {
const params = new URLSearchParams(window.location.search);
params.set('delete_cache', 1);
window.location.search = params;
} else {
window.location.reload();
}
return
document.querySelectorAll('[name=currencies],[name=current_currency]').forEach((el)=>{
el.value = event.target.value
})
if(page_template == 'cart') location.reload();
})
})
</script>
<script>
window.variantStrings = {
addToCart: `Add to Cart`,
soldOut: `Sold Out`,
unavailable: `Unavailable`,
}
window.accessibilityStrings = {
shareSuccess: `Link copied to clipboard`,
}
</script>
<script>
/*
------
Events
------
pages/viewed
customers/signup
customers/login
products/searched
collections/viewed
products/viewed
products/shared
wishlists/item_added
carts/items_added
carts/viewed
carts/item_removed
checkouts/initiated
checkouts/shipping_info_added
checkouts/payment_info_added
checkouts/completed
orders/placed
orders/purchased
payments/captured
payments/failed
*/
window.__latest_cart = window.__latest_cart || null;
const _selector = document.querySelector.bind(document),
_selectorAll = document.querySelectorAll.bind(document)
document.addEventListener('DOMContentLoaded', (event) => {
const default_currency = getCookie("currency")
const customer_id = window.__st.cid
const template = window.__st.p
onPageView()
//-----------------------//
// Configs //
//-----------------------//
window.dataLayer = window.dataLayer || []
Array.prototype.last = Array.prototype.last || function() {
return this[this.length - 1] || null
}
Array.prototype.first = Array.prototype.first || function() {
return this[0] || null
}
//----------------------//
// Triggers //
//----------------------//
const XHR = window.XMLHttpRequest
function xhr() {
const xhr = new XHR()
xhr.addEventListener("readystatechange", function() {
if(xhr.readyState != 4) return
try {
const response_url = xhr.responseURL
if (response_url.includes("cart/add")) {
window.__latest_cart = JSON.parse(xhr.response)
onCartItemsAdded() // ok
}
if (response_url.includes("cart/remove_item_quantity")) {
window.__latest_cart = JSON.parse(xhr.response)
onCartItemRemoved() // ok
}
if (response_url.includes("new_cart?retrieve=true")) {
result = JSON.parse(xhr.response)
if (result.cart) {
window.__latest_cart = result.cart
}
}
} catch(e) {
console.error(e)
}
}, false);
return xhr
}
window.XMLHttpRequest = xhr
switch(template) {
case 'cart': onCartView() // ok
break
case 'product': onProductView() // ok
break
case 'collection': onCollectionView() // ok
break
case 'blog': onBlogView()
break
case 'article': onArticleView()
break
case 'payment_completed': onOrderPlace()
break
case 'payment_fail': onPaymentFail()
break
}
// _selector('form[action="/checkout/payments"]').addEventListener("submit", onPaymentInfoAdded(_selector('form[action="/checkout/payments"]')))
if (_selector('form[action="/checkout/detail"]')) _selector('form[action="/checkout/detail"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/detail"]'))}) // ok
if (_selector('form[action="/checkout/shipping"]')) _selector('form[action="/checkout/shipping"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/shipping"]'))}) // ok
if (_selector('form[action="/account/register"]')) _selector('form[action="/account/register"]').addEventListener("submit", onSignUp) // ok
if (_selector('form[action="/account/login"]')) _selector('form[action="/account/login"]').addEventListener("submit", onLogin) // ok
if (_selector('form[action="/search"]')) _selector('form[action="/search"]').addEventListener("submit", onProductSearch()) // ok
if (_selector('#line-login-btn')) _selector('#line-login-btn').addEventListener('click', onLineLogin) // ok
if (_selector('#PlaceOrder')) _selector('#PlaceOrder').addEventListener("click", ()=>{onCheckoutComplete(_selector('form[action="/checkout/payments"]'))}); // ok
if (_selector('#add_wishlist')) _selector('#add_wishlist').addEventListener("click", onWishlistItemAdded) // ok
if (_selectorAll('a[href="/account/logout"]')) _selectorAll('a[href="/account/logout"]').forEach(logoutButton => logoutButton.addEventListener("click", onLogout)) // ok
if (_selector('.CartDrawerTrigger.cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link').addEventListener("click", onCartView) // ok
if (_selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link').addEventListener("click", onCartView) // ok
if (_selectorAll('a[class^="share-"]')) _selectorAll('a[class^="share-"]').forEach(shareButton => shareButton.addEventListener("click", ()=>{onProductShare(shareButton)}) ) // ok
if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate))
// For append elements
const bodyMutationObserver = new MutationObserver(() => {
if (_selector('#form__spc #PlaceOrder')) _selector('#form__spc #PlaceOrder').addEventListener("click", onSinglePageCheckout) // ok
if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate))
});
bodyMutationObserver.observe(_selector("body"), {subtree: true, childList: true});
//------------------------------//
// Event handlers //
//------------------------------//
function onPageView() {
EasyStore.Event.dispatch('pages/viewed', {
page: {
type: template,
title: document.title,
description: _selector('meta[name=description]') ? _selector('meta[name=description]').getAttribute('content') : null,
url: location.href,
}
})
}
function onSignUp() {
const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)
const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/)
const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "")
let data = {}
if (email_regex.test(email_or_phone)) {
data.method = 'email'
data.email = email_or_phone
}
if (phone_regex.test(email_or_phone)) {
data.method = "phone"
data.phone = email_or_phone
}
if (!data.method) return
EasyStore.Event.dispatch('customers/signup', data)
}
function onLogin() {
const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)
const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/)
const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "")
let data = {}
if (email_regex.test(email_or_phone)) {
data.method = 'email'
data.email = email_or_phone
}
if (phone_regex.test(email_or_phone)) {
data.method = "phone"
data.phone = email_or_phone
}
if (!data.method) return
EasyStore.Event.dispatch('customers/login', data)
}
function onLineLogin() {
EasyStore.Event.dispatch('customers/login', { method: 'line' })
}
function onLogout() {
EasyStore.Event.dispatch('customers/logout', { customer_id })
}
function onBlogView() {
const blog = ""
EasyStore.Event.dispatch('blogs/viewed', { blog })
}
function onArticleView() {
const article = ""
EasyStore.Event.dispatch('articles/viewed', { article })
}
function onProductSearch() {
const query = _selector('input[name=q]').value
if (!query) return
EasyStore.Event.dispatch('products/searched', { query })
}
function onCollectionView() {
const collection = ""
EasyStore.Event.dispatch('collections/viewed', { collection })
}
function onProductView() {
const product = ""
EasyStore.Event.dispatch("products/viewed", { product })
}
function onProductShare(el) {
const product = ""
const channel = el.getAttribute("class").split("-").last()
EasyStore.Event.dispatch('products/shared', { product, channel })
}
function onWishlistItemAdded() {
let product = ""
const quantity = _selector("#Quantity").value
EasyStore.Event.dispatch('wishlists/item_added', { product })
}
async function onCartItemsAdded() {
const cart = await getCart()
if(cart && cart.items != undefined && cart.items.length > 0) {
EasyStore.Event.dispatch('carts/item_added', { cart })
}
}
async function onCartView() {
const cart = await getCart()
EasyStore.Event.dispatch('carts/viewed', { cart })
}
async function onCartItemRemoved() {
const cart = await getCart()
cart.items = []
if(cart) {
EasyStore.Event.dispatch('carts/item_removed', { cart })
}
}
async function onCheckoutInitiate() {
const cart = await getCart()
EasyStore.Event.dispatch('checkouts/initiated', { cart })
}
async function onShippingInfoAdded(form) {
let checkout = getCheckout()
let form_data = {}
new FormData(form).forEach((value, key) => form_data[key] = value)
let shipping_tier = null
if (form_data.type && form_data.type.startsWith("r_pickup")) {
shipping_tier = `Pickup - ${form_data.pick_location}`
}
if (form_data.s_id) {
shipping_tier = _selector(`input[id='`+form_data.s_id+`']`).getAttribute("data-shipping-name")
}
if (!shipping_tier) return
EasyStore.Event.dispatch('checkouts/shipping_info_added', { checkout, shipping_tier })
}
async function onPaymentInfoAdded(form) {
let checkout = getCheckout()
let payment_type = new FormData(form).get('payment_method')
EasyStore.Event.dispatch("checkouts/payment_info_added", { checkout, payment_type })
}
async function onOrderPlace() {
let cart_token = getCookie("cart_js")
let previous_cart_token = getCookie("previous_cart_ga4_js")
if (previous_cart_token && previous_cart_token == cart_token) {
// Prevent duplicate purchase tracking
return
}
let order = getOrder()
EasyStore.Event.dispatch('orders/placed', { order })
if(order.is_manual_payment) {
EasyStore.Event.dispatch('orders/purchased', { order })
}
const last_transaction = order.transactions.last()
if (last_transaction.status) {
EasyStore.Event.dispatch('orders/purchased', { order })
EasyStore.Event.dispatch('payments/captured', { order })
}
}
async function onPaymentFail() {
const order = getOrder()
EasyStore.Event.dispatch('payments/failed', { order })
}
async function onCheckoutComplete(form) {
onPaymentInfoAdded(form)
const checkout = getCheckout()
EasyStore.Event.dispatch('checkouts/completed', { checkout })
}
async function onSinglePageCheckout() {
// let checkout = $("[data-app-checkout]").data("app-checkout")
let checkout = getCheckout()
// const payment_type = _selector("#app_spc_payment_method").find(`[class*="label-content"]`).first().find("b").first().text()
const payment_type = _selector("#app_spc_payment_method").getElementsByClassName('label-content')[0].getElementsByTagName('b')[0].innerHTML
const shipping_method = _selector("#delivery_method").value
let shipping_tier = null
let app_spc_customer_info_label = _selector("#app_spc_customer_info").getElementsByClassName('label-content')
if (shipping_method == "shipping") {
shipping_tier = app_spc_customer_info_label[app_spc_customer_info_label.length - 1].getElementsByTagName('b')[0].innerHTML
}
if (shipping_method == "pickup") {
shipping_tier = app_spc_customer_info_label[0].innerHTML
}
if (shipping_tier) {
EasyStore.Event.dispatch('checkouts/shipping_info_added', {
checkout,
shipping_tier,
})
}
if (payment_type) {
EasyStore.Event.dispatch('checkouts/payment_info_added', {
checkout,
payment_type,
})
}
EasyStore.Event.dispatch('checkouts/completed', { checkout })
}
})
//-----------------------//
// Functions //
//-----------------------//
function getCookie(name) {
name += "="
decodedCookie = decodeURIComponent(document.cookie)
ca = decodedCookie.split(";")
for(i = 0; i < ca.length; i++) {
c = ca[i]
while (c.charAt(0) == " ") {
c = c.substring(1)
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length)
}
}
return ""
}
const parsePrice = price => {
if(typeof price === 'string') {
return parseFloat(price.split(',').join(''))
}
return price
}
const requestCart = async (method, data) => {
let response = await fetch('/cart.json', {method: 'GET',headers: {'Content-Type': 'application/json'}})
result = await response.json()
return result.cart
}
const getCart = async (latest = false) => {
let cart = window.__latest_cart
const cart_invalid = !cart || !cart.items || (cart.total_price > 0 && !cart.items.length)
if(latest || cart_invalid) {
cart = await requestCart()
}
cart.items = cart.items || []
return mapCart(cart)
}
const getCheckout = async () => {
mapCheckout(window.__latest_cart || await requestCart())
}
const getOrder = async () => {
mapOrder(window.__latest_cart || await requestCart())
}
//-----------------------//
// Mappers //
//-----------------------//
const fallbackAttribute = (object, attribute) => {
if(!Array.isArray(attribute)) {
attribute = [attribute]
}
let final_value = null
do {
final_value = object[attribute.shift()]
} while(!final_value && attribute.length)
return final_value
}
const map = (object, mapper) => {
const newObject = {}
for(const key in mapper) {
// Handle different keys between new and old format
newObject[key] = fallbackAttribute(object, mapper[key])
// Cast price to float
if(newObject[key] && ['price', 'amount', 'discount', 'discounts'].some(x => key.endsWith(x))) {
newObject[key] = parsePrice(newObject[key])
}
if(newObject[key] === undefined) {
delete newObject[key]
}
}
return newObject
}
const mapCart = cart => {
const oldCart = cart
const mapper = {
id: 'id',
currency: 'currency',
item_count: 'item_count',
items: 'items',
total_price: 'total_price',
latest_items: 'latest_items'
}
cart = map(cart, mapper)
const discounts = (oldCart.storewide_discounts || []).concat((oldCart.voucher_discounts || []))
cart.discount_applications = discounts.map(discount => ({
title: discount.voucher_code || null,
value: parsePrice(discount.amount),
}))
cart.original_total_price = cart.items.length
? cart.items
.map(item => item.original_price)
.reduce((sum, price) => sum + price)
: 0
cart.total_discount = cart.discount_applications.length
? cart.discount_applications
.map(discount => parsePrice(discount.value))
.reduce((sum, value) => sum + value)
: 0
cart.items = cart.items.map(item => mapLineItem(item))
return cart
}
const mapCheckout = checkout => {
const mapper = {
note: 'note',
attributes: 'note_attributes',
billing_address: 'billing_address',
currency: 'currency',
customer_id: 'customer_id',
discounts_amount: 'total_discount',
id: 'id',
line_items: 'order_item',
order_number: 'order_number',
shipping_address: 'shipping_address',
shipping_price: 'shipping_tax',
shipping_method: 'shipping_method_name',
tax_price: 'total_tax',
}
checkout = map(checkout, mapper)
checkout.requires_shipping = checkout.line_items.some(item => item.shipping_required)
checkout.line_items = checkout.line_items.map(item => mapLineItem(item))
return checkout
}
const mapOrder = order => {
const mapper = {
attributes: 'note_attributes',
billing_address: 'billing_address',
cancelled: 'is_cancelled',
cancelled_at: 'cancelled_at',
created_at: 'created_at',
customer_id: 'customer_id',
// discount_applications: 'discount_applications',
email: 'email',
financial_status: 'financial_status',
fulfillment_status: 'fulfillment_status',
line_items: 'order_item',
note: 'note',
order_number: 'order_number',
phone: 'phone',
shipping_address: 'shipping_address',
shipping_methods: 'shipping_methods',
shipping_price: 'total_shipping',
subtotal_price: 'subtotal_price',
// tax_lines: 'tax_lines',
tax_price: 'total_tax',
total_discounts: 'total_discount',
total_net_amount: 'total_amount_include_transaction',
total_price: 'total_price',
transactions: 'transaction_records',
is_manual_payment: 'is_manual_payment',
}
order.email = order.billing_address.email
order.phone = order.billing_address.phone
order.shipping_method = order.shipping_method_name
order = map(order, mapper)
order.line_items = order.line_items.map(item => mapLineItem(item))
order.transactions = order.transactions.map(transaction => mapTransaction(transaction))
return order
}
const mapLineItem = line_item => {
const old_line_item = line_item
const mapper = {
final_price: 'price',
image: 'img_url',
message: 'message',
original_line_price: 'original_line_price',
original_price: 'original_price',
properties: 'properties',
quantity: 'quantity',
requires_shipping: 'shipping_required',
sku: 'sku',
taxable: 'taxable',
title: 'product_name',
product_name: 'product_name',
url: 'url',
product_id: 'product_id',
variant_id: 'variant_id',
id: ['id', 'i_id'],
}
line_item = map(line_item, mapper)
line_item.product_id = line_item.product_id || (old_line_item.product && old_line_item.product.id) || null
line_item.variant_id = line_item.variant_id || (old_line_item.variant && old_line_item.variant.id) || null
line_item.image = line_item.image || (old_line_item.image && old_line_item.image.url) || null
return line_item
}
const mapTransaction = transaction => {
const mapper = {
amount: 'amount',
created_at: 'created_at',
gateway: 'gateway_type',
id: 'id',
status: 'status',
}
transaction = map(transaction, mapper)
return transaction
}
</script>
</body>
</html>