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="" /> 15 16 17 <!-- Title and description ================================================== --> 18 <title> 19 Login – Bell Tree Store 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.belltree.com.my/account/login"> 30 31 <meta property="og:image" content="https://cdn.store-assets.com/s/619065/f/5595723.jpeg"> 32 <meta property="og:image:secure_url" content="https://cdn.store-assets.com/s/619065/f/5595723.jpeg"> 33 34 35 36<meta property="og:description" content="Bell Tree is one of the most revolutionary companies in the industry. We leverage on premium ingredients such as phytonutrients in providing the cutting-edge anti-aging solution that allows you to glow inside out, outside in."> 37<meta property="og:site_name" content="Bell Tree Store"> 38 39 40 41 <meta name="twitter:card" content="summary"> 42 43 44 45 46 47 48 49 <!-- Helpers ================================================== --> 50 <link rel="canonical" href="https://www.belltree.com.my/account/login"> 51 <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=3.0"> 52 <meta name="theme-color" content=""> 53 54 <!-- CSS ================================================== --> 55 <link href="https://store-themes.easystore.co/619065/themes/3809/assets/timber.css?t=1788706088" rel="stylesheet" type="text/css" media="screen" /> 56 <link href="https://store-themes.easystore.co/619065/themes/3809/assets/theme.css?t=1788706088" rel="stylesheet" type="text/css" media="screen" /> 57 58 59 60 61 62<link href="https://fonts.googleapis.com/css?family=Karla:400,700&display=swap" rel="stylesheet"> 63 64 65
65<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript" ></script>
65 66 <!-- Header hook for plugins ================================================== --> 67 68<!-- ScriptTags -->
69<script>window.__st={p: "customers",cid: null,cem: null,cph: null,cfn: null,cln: null,cge: null,cdb: null,ccc: null};</script>
69<script src='/assets/events.js'></script>
69<script>(function(){function asyncLoad(){var urls=['/assets/traffic.js?v=1','https://apps.easystore.co/facebook-login/script.js?shop=belltreestore.easy.co','https://apps.easystore.co/marketplace/lazada-malaysia/script.js?shop=belltreestore.easy.co','https://smartarget.online/loader.js?type=int&u=59b7d2ade0cdfacba74622126de8787dd16b5c2c&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>
69 70<!-- /ScriptTags --> 71 72 73 74<!--[if lt IE 9]>
75<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js" type="text/javascript" ></script>
vendor: 2 bytes, line 75
75
76<script src="https://store-themes.easystore.co/619065/themes/3809/assets/respond.min.js?t=1788706088" type="text/javascript" ></script>
76 77<link href="https://store-themes.easystore.co/619065/themes/3809/assets/respond-proxy.html" id="respond-proxy" rel="respond-proxy" /> 78<link href="//www.belltree.com.my/search?q=2383395473ed414190177e97ffce77b0" id="respond-redirect" rel="respond-redirect" />
79<script src="//www.belltree.com.my/search?q=2383395473ed414190177e97ffce77b0" type="text/javascript"></script>
79 80<![endif]--> 81 82 83 84
84<script src="https://store-themes.easystore.co/619065/themes/3809/assets/modernizr.min.js?t=1788706088" type="text/javascript" ></script>
84 85 86 87 88
88<script src="/assets/shop_common.js" type="text/javascript" ></script>
88 89
89<script src="/assets/customer_area.js" type="text/javascript" ></script>
89 90 91
91<script> 92 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 93 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 94 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 95 })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 96 97 ga('create', '', 'auto','myTracker'); 98 ga('myTracker.send', 'pageview'); 99 100 </script>
100 101 102<!-- Snippet:global/head: Product Star Rating ååè©å¹ --> 103 104
104<script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script>
104 105
105<script src="https://apps.easystore.co/assets/js/star-rating/main.js"></script>
105 106 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css"> 107 <link rel="stylesheet" href="https://apps.easystore.co/assets/css/star-rating/main.css?v1.4.3"> 108<!-- /Snippet --> 109 110<!-- Snippet:global/head: Lazada Malaysia --> 111<link type="text/css" rel="stylesheet" href="https://apps.easystore.co/assets/css/marketplace/main.css?v1.71"> 112<!-- /Snippet --> 113 114</head> 115 116<body id="login" class="template-customers " > 117 118 <ul id="MobileNav" class="mobile-nav"> 119 120 <li class="mobile-nav_icon-x"> 121 122 123 124 125 126 <span class="MobileNavTrigger icon icon-x"></span> 127 </li> 128 129 <li class="mobile-nav__link header-bar__search-wrapper"> 130 131 <div class="header-bar__module header-bar__search mobile-nav_search"> 132 133 <form action="/search" method="get" class="header-bar__search-form clearfix" role="search"> 134 135 <button type="submit" class="btn icon-fallback-text header-bar__search-submit"> 136 <span class="icon icon-search" aria-hidden="true"></span> 137 <span class="fallback-text">Search</span> 138 </button> 139 <input type="search" name="q" value="" aria-label="Search" class="header-bar__search-input" placeholder="Search" autocomplete="off"> 140 <div class="dropdown" id="searchDropdown"></div> 141 <input type="hidden" name="search_history" id="search_history"> 142 </form> 143 144 145 146
147<script> 148 var _search_history_listings = "" 149 if(_search_history_listings != "") localStorage.setItem('searchHistory', JSON.stringify(_search_history_listings)); 150 151 function clearAll() { 152 localStorage.removeItem('searchHistory'); 153 154 var customer = ""; 155 if(customer) { 156 // Your logic to clear all data or call an endpoint 157 fetch('/account/search_histories', { 158 method: 'DELETE', 159 headers: { 160 "Content-Type": "application/json", 161 "X-Requested-With": "XMLHttpRequest" 162 }, 163 body: JSON.stringify({ 164 _token: "v7iAjKi8BvIdKRYXLAOOnjLVHpbmgLD2GkvNoUS6" 165 }), 166 }) 167 .then(response => response.json()) 168 } 169 } 170 // End - store view history in local storage 171 172 // search history dropdown 173 var searchInputs = document.querySelectorAll('input[type=search]'); 174 175 if(searchInputs.length > 0) { 176 177 searchInputs.forEach((searchInput)=>{ 178 179 searchInput.addEventListener('focus', function() { 180 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 181 searchDropdown.innerHTML = ''; // Clear existing items 182 183 // retrieve data from local storage 184 var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || []; 185 186 // Convert JSON to string 187 var search_history_json = JSON.stringify(searchHistoryData); 188 189 // Set the value of the hidden input 190 searchInput.closest('form').querySelector("#search_history").value = search_history_json; 191 192 // create dropdown items 193 var clearAllItem = document.createElement('div'); 194 clearAllItem.className = 'dropdown-item clear-all'; 195 clearAllItem.textContent = 'Clear'; 196 clearAllItem.addEventListener('click', function() { 197 clearAll(); 198 searchDropdown.style.display = 'none'; 199 searchInput.classList.remove('is-focus'); 200 }); 201 searchDropdown.appendChild(clearAllItem); 202 203 // create dropdown items 204 searchHistoryData.forEach(function(item) { 205 var dropdownItem = document.createElement('div'); 206 dropdownItem.className = 'dropdown-item'; 207 dropdownItem.textContent = item.term; 208 dropdownItem.addEventListener('click', function() { 209 searchInput.value = item.term; 210 searchDropdown.style.display = 'none'; 211 }); 212 searchDropdown.appendChild(dropdownItem); 213 }); 214 215 if(searchHistoryData.length > 0){ 216 // display the dropdown 217 searchInput.classList.add('is-focus'); 218 document.body.classList.add('search-input-focus'); 219 searchDropdown.style.display = 'block'; 220 } 221 }); 222 223 searchInput.addEventListener("focusout", (event) => { 224 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 225 searchInput.classList.remove('is-focus'); 226 searchDropdown.classList.add('transparent'); 227 setTimeout(()=>{ 228 searchDropdown.style.display = 'none'; 229 searchDropdown.classList.remove('transparent'); 230 document.body.classList.remove('search-input-focus'); 231 }, 400); 232 }); 233 }) 234 } 235 // End - search history dropdown 236</script>
236 237 </div> 238 239 </li> 240 241 242 243 <li class="mobile-nav__link" aria-haspopup="true"> 244 245 <a href="/" > 246 Home 247 </a> 248 249 </li> 250 251 252 <li class="mobile-nav__link" aria-haspopup="true"> 253 254 255 <a href="/collections/all" class="mobile-nav__parent-link"> 256 Shop Now 257 </a> 258 <span class="mobile-nav__sublist-trigger"> 259 <span class="icon-fallback-text mobile-nav__sublist-expand"> 260 <span class="icon icon-plus" aria-hidden="true"></span> 261 <span class="fallback-text">+</span> 262</span> 263<span class="icon-fallback-text mobile-nav__sublist-contract"> 264 <span class="icon icon-minus" aria-hidden="true"></span> 265 <span class="fallback-text">-</span> 266</span> 267 268 </span> 269 <ul class="mobile-nav__sublist"> 270 271 272 <li class="mobile-nav__sublist-link" aria-haspopup="true"> 273 274 <a href="/collections/hot-selling" > 275 Hot selling 276 </a> 277 278 </li> 279 280 281 <li class="mobile-nav__sublist-link" aria-haspopup="true"> 282 283 <a href="/collections/lumi22" > 284 LUMI22 Supreme Essence Double Boost Plan 285 </a> 286 287 </li> 288 289 </ul> 290 291 </li> 292 293 294 <li class="mobile-nav__link" aria-haspopup="true"> 295 296 <a href="/blogs/news" > 297 News 298 </a> 299 300 </li> 301 302 303 <li class="mobile-nav__link" aria-haspopup="true"> 304 305 306 <a href="/pages/easy123-1" class="mobile-nav__parent-link"> 307 EASY123 308 </a> 309 <span class="mobile-nav__sublist-trigger"> 310 <span class="icon-fallback-text mobile-nav__sublist-expand"> 311 <span class="icon icon-plus" aria-hidden="true"></span> 312 <span class="fallback-text">+</span> 313</span> 314<span class="icon-fallback-text mobile-nav__sublist-contract"> 315 <span class="icon icon-minus" aria-hidden="true"></span> 316 <span class="fallback-text">-</span> 317</span> 318 319 </span> 320 <ul class="mobile-nav__sublist"> 321 322 323 <li class="mobile-nav__sublist-link" aria-haspopup="true"> 324 325 <a href="/pages/easy123" > 326 EASY123 䏿ç 327 </a> 328 329 </li> 330 331 </ul> 332 333 </li> 334 335 336 <li class="mobile-nav__link" aria-haspopup="true"> 337 338 339 <a href="/pages/lumi22" class="mobile-nav__parent-link"> 340 LUMI22 341 </a> 342 <span class="mobile-nav__sublist-trigger"> 343 <span class="icon-fallback-text mobile-nav__sublist-expand"> 344 <span class="icon icon-plus" aria-hidden="true"></span> 345 <span class="fallback-text">+</span> 346</span> 347<span class="icon-fallback-text mobile-nav__sublist-contract"> 348 <span class="icon icon-minus" aria-hidden="true"></span> 349 <span class="fallback-text">-</span> 350</span> 351 352 </span> 353 <ul class="mobile-nav__sublist"> 354 355 356 <li class="mobile-nav__sublist-link" aria-haspopup="true"> 357 358 <a href="/pages/lumi22-c" > 359 LUMI22 䏿ç 360 </a> 361 362 </li> 363 364 </ul> 365 366 </li> 367 368 369 <li class="mobile-nav__link" aria-haspopup="true"> 370 371 372 <a href="/pages/acurex" class="mobile-nav__parent-link"> 373 Acurex 374 </a> 375 <span class="mobile-nav__sublist-trigger"> 376 <span class="icon-fallback-text mobile-nav__sublist-expand"> 377 <span class="icon icon-plus" aria-hidden="true"></span> 378 <span class="fallback-text">+</span> 379</span> 380<span class="icon-fallback-text mobile-nav__sublist-contract"> 381 <span class="icon icon-minus" aria-hidden="true"></span> 382 <span class="fallback-text">-</span> 383</span> 384 385 </span> 386 <ul class="mobile-nav__sublist"> 387 388 389 <li class="mobile-nav__sublist-link" aria-haspopup="true"> 390 391 <a href="/pages/acurex-䏿ç" > 392 Acurex 䏿ç 393 </a> 394 395 </li> 396 397 </ul> 398 399 </li> 400 401 402 <li class="mobile-nav__link" aria-haspopup="true"> 403 404 405 <a href="/pages/revone" class="mobile-nav__parent-link"> 406 REVONE 407 </a> 408 <span class="mobile-nav__sublist-trigger"> 409 <span class="icon-fallback-text mobile-nav__sublist-expand"> 410 <span class="icon icon-plus" aria-hidden="true"></span> 411 <span class="fallback-text">+</span> 412</span> 413<span class="icon-fallback-text mobile-nav__sublist-contract"> 414 <span class="icon icon-minus" aria-hidden="true"></span> 415 <span class="fallback-text">-</span> 416</span> 417 418 </span> 419 <ul class="mobile-nav__sublist"> 420 421 422 <li class="mobile-nav__sublist-link" aria-haspopup="true"> 423 424 <a href="/pages/revone-1" > 425 REVONE 䏿ç 426 </a> 427 428 </li> 429 430 </ul> 431 432 </li> 433 434 435 <li class="mobile-nav__link" aria-haspopup="true"> 436 437 438 <a href="/pages/product-testimonial-reviews" class="mobile-nav__parent-link"> 439 Product Testimonial & Reviews 440 </a> 441 <span class="mobile-nav__sublist-trigger">
442 <span class="icon-fallback-text mobile-nav__sublist-expand"> 443 <span class="icon icon-plus" aria-hidden="true"></span> 444 <span class="fallback-text">+</span> 445</span> 446<span class="icon-fallback-text mobile-nav__sublist-contract"> 447 <span class="icon icon-minus" aria-hidden="true"></span> 448 <span class="fallback-text">-</span> 449</span> 450 451 </span> 452 <ul class="mobile-nav__sublist"> 453 454 455 <li class="mobile-nav__sublist-link" aria-haspopup="true"> 456 457 <a href="/pages/easy123-testimonial-reviews" > 458 EASY123 - Testimonial & Reviews 459 </a> 460 461 </li> 462 463 464 <li class="mobile-nav__sublist-link" aria-haspopup="true"> 465 466 <a href="/pages/lumi22-testimonial-reviews" > 467 LUMI22 - Testimonial & Reviews 468 </a> 469 470 </li> 471 472 </ul> 473 474 </li> 475 476 477 <li class="mobile-nav__link" aria-haspopup="true"> 478 479 <a href="/pages/shipping-policy" > 480 Shipping Policy 481 </a> 482 483 </li> 484 485 486 <li class="mobile-nav__link" aria-haspopup="true"> 487 488 <a href="/store-locator" > 489 Location 490 </a> 491 492 </li> 493 494 495 496 497 498 499 500 <li class="mobile-nav__link"> 501 <a href="/account/login">Log in</a> 502 </li> 503 504 <li class="mobile-nav__link"> 505 <a href="/account/register">Create account</a> 506 </li> 507 508 509 510 511</ul> 512<div id="MobileNavOutside" class="mobile-nav-outside"></div> 513 514 515<div id="PageContainer" class="page-container"> 516 517<!-- Snippet:global/body_start: Announcement Bar --> 518<link rel="stylesheet" href="https://apps.easystore.co/assets/css/annoucement-bar/marquee.css?v1.04"> 519 520<div id="announcement-bar" name="announcement-bar" style=" 521 border: unset; 522 padding: 6px 0px; 523 margin: 0px; 524 z-index:2999; 525 background:rgba(79, 9, 149, 0.9); 526 color:rgb(255, 254, 254); 527 position: -webkit-sticky; position: sticky; top: 0; 528"> 529 530 <input type="hidden" id="total_announcement_left" name="total_announcement_left" value="1"> 531 <input type="hidden" id="locale" name="locale" value="en_US"> 532 533 <div class="app_marquee-wrapper" style=" 534 padding: 4px 0px; 535 border-top: 1px dashed; 536 border-bottom: 1px dashed; 537 border-color: rgb(255, 254, 254); 538 "> 539 <div class="app_marquee-container"> 540 <div id="announcement_bar_0" class="announcement_bar_0 announcement_bar-content"> 541 <span class="marquee-msg">FREE SHIPPING 365 Days for Orders above RM100!*</span> 542 <a class="announcement-bar-button" href="https://www.belltree.com.my/collections/all" style="color: rgb(21, 171, 53); background: rgb(254, 254, 254);">Shop Now!</a> 543 <input type="hidden" id="expired_at_0" name="expired_at_0" value="2021-08-23 00:00"> 544 </div> 545 </div> 546 547 </div> 548</div> 549 550 551
552<script> 553 var is_top_enabled = 1; 554 if (is_top_enabled) { 555 // Prevent announcement bar block header 556 setTimeout(() => { 557 let header = document.querySelector('#easystore-section-header'); 558 let topbar = document.querySelector('.sticky-topbar'); 559 let announcementBar = document.querySelector('#announcement-bar'); 560 561 if (announcementBar) { 562 let height = announcementBar.offsetHeight + 'px'; 563 if (header) header.style.top = height; 564 if (topbar) topbar.style.top = height; 565 } 566 }, 2000); 567 } 568 569 setInterval(function () { 570 let total_announcement = parseInt("1", 10); 571 let total_announcement_left = parseInt(document.querySelector("#total_announcement_left").value, 10); 572 573 for (let i = 0; i <= total_announcement; i++) { 574 let startDate = new Date(); 575 let endDateStr = document.querySelector(`#expired_at_${i}`)?.value; 576 let endDate = endDateStr ? new Date(endDateStr.replace(/-/g, "/")) : new Date(); 577 let seconds = (endDate.getTime() - startDate.getTime()) / 1000; 578 579 let days = Math.floor(seconds / 86400); 580 let hours = Math.floor((seconds % 86400) / 3600); 581 let mins = Math.floor((seconds % 3600) / 60); 582 let secs = Math.floor(seconds % 60); 583 584 function translate(key, locale, values = 1) { 585 if (locale === "zh_TW") { 586 let translations = { 587 day: "天", 588 hour: "å°æ", 589 min: "åé", 590 sec: "ç§" 591 }; 592 return translations[key] || key; 593 } else { 594 let singularPlural = { day: "Day", hour: "Hour", min: "Min", sec: "Sec" }; 595 let plural = { day: "Days", hour: "Hours", min: "Mins", sec: "Secs" }; 596 if (key in singularPlural) { 597 return values > 1 ? plural[key] : singularPlural[key]; 598 } 599 return key; 600 } 601 } 602 603 604 let countdownElement = document.querySelector(`#announcementBar_countdown_${i}`); 605 if (countdownElement && seconds > 0) { 606 let locale = document.querySelector("#locale")?.value || "en"; 607 let countdownItems = document.querySelectorAll(`.announcementBar_countdown_${i}`); 608 countdownItems.forEach(item => { 609 item.style.display = ''; 610 item.innerHTML = ` 611 <div> 612 <span>${days}</span> <small>${translate('day', locale, days)}</small> 613 </div> 614 <div> 615 <span>${hours}</span> <small>${translate('hour', locale, hours)}</small> 616 </div> 617 <div> 618 <span>${mins}</span> <small>${translate('min', locale, mins)}</small> 619 </div> 620 <div> 621 <span>${secs}</span> <small>${translate('sec', locale, secs)}</small> 622 </div> 623 `; 624 }); 625 } else if (countdownElement && seconds <= 0) { 626 let bar = document.querySelector(`#announcement_bar_${i}`); 627 if (bar) bar.remove(); 628 total_announcement_left -= 1; 629 document.querySelector("#total_announcement_left").value = total_announcement_left; 630 } 631 } 632 633 showOrHide(total_announcement_left); 634 }, 1000); 635 636 function showOrHide(total_announcement_left) { 637 let prevButton = document.querySelector("#previous-announcement-bar-button"); 638 let nextButton = document.querySelector("#next-announcement-bar-button"); 639 let closeButton = document.querySelector("#announcement-close-button"); 640 let announcementBar = document.querySelector("#announcement-bar"); 641 let announcementBarTop = document.querySelector("#announcement-bar-top"); 642 let header = document.querySelector("#easystore-section-header"); 643 let topbar = document.querySelector(".sticky-topbar"); 644 645 if (total_announcement_left <= 1) { 646 if (prevButton) prevButton.style.display = 'none'; 647 if (nextButton) nextButton.style.display = 'none'; 648 } else { 649 if (prevButton) prevButton.style.display = 'block'; 650 if (nextButton) nextButton.style.display = 'block'; 651 } 652 653 if (total_announcement_left === 0) { 654 if (closeButton) closeButton.style.display = 'none'; 655 if (announcementBar) announcementBar.style.display = 'none'; 656 if (announcementBarTop) announcementBarTop.style.display = 'none'; 657 if (header) header.style.top = '0px'; 658 if (topbar) topbar.style.top = '0px'; 659 } 660 } 661 662 let closeButton = document.querySelector("#announcement-close-button"); 663 if (closeButton) { 664 closeButton.addEventListener('click', () => { 665 let announcementBar = document.querySelector("#announcement-bar"); 666 let announcementBarTop = document.querySelector("#announcement-bar-top"); 667 let header = document.querySelector("#easystore-section-header"); 668 let topbar = document.querySelector(".sticky-topbar"); 669 670 if (announcementBar) announcementBar.style.display = 'none'; 671 if (announcementBarTop) announcementBarTop.style.display = 'none'; 672 if (header) header.style.top = ''; 673 if (topbar) topbar.style.top = ''; 674 }); 675 } 676 677</script>
677 678 679
680<script> 681 (function initializeMarquee() { 682 const marqueeWrapper = document.querySelector(`#announcement-bar .app_marquee-wrapper`); 683 const marqueeContainer = document.querySelector(`#announcement-bar .app_marquee-container`); 684 685 if (!marqueeWrapper || !marqueeContainer) return; 686 687 const children = Array.from(marqueeContainer.children); 688 689 // Calculate the total width of children 690 let totalWidth = children.reduce((acc, child) => acc + child.offsetWidth, 0); 691 const screenWidth = window.innerWidth; 692 693 // Clone children until the total width exceeds the screen width 694 if(totalWidth > 5){ 695 while (totalWidth < screenWidth * 3) { 696 children.forEach(child => { 697 const clone = child.cloneNode(true); 698 marqueeContainer.appendChild(clone); 699 totalWidth += clone.offsetWidth; 700 }); 701 } 702 } 703 704 // Clone the marquee container 705 const clonedContainer = marqueeContainer.cloneNode(true); 706 marqueeWrapper.appendChild(clonedContainer); 707 })(); 708</script>
708 709 710<!-- /Snippet --> 711 712<!-- Snippet:global/body_start: Console Extension --> 713<div id='es_console' style='display: none;'>619065</div> 714<!-- /Snippet --> 715 716 717 <style> 718 .search-modal__form{ 719 position: relative; 720 } 721 722 .dropdown-wrapper { 723 position: relative; 724 } 725 726 .dropdown-wrapper:hover .dropdown { 727 display: block; 728 } 729 730 .header-icon-nav .dropdown { 731 left: -80px; 732 } 733 734 .dropdown { 735 display: none; 736 position: absolute; 737 top: 100%; 738 left: 0px; 739 width: 100%; 740 padding: 8px; 741 background-color: #fff; 742 z-index: 1000; 743 border-radius: 5px; 744 border: 1px solid rgba(var(--color-foreground), 1); 745 border-top: none; 746 overflow-x: hidden; 747 overflow-y: auto; 748 max-height: 350px; 749 min-width: 150px; 750 box-shadow: 0 0 5px rgba(0,0,0,0.1); 751 } 752 753 .dropdown a{ 754 text-decoration: none; 755 color: #000 !important; 756 } 757 758 .dropdown-item { 759 padding: 0.4rem 2rem; 760 cursor: pointer; 761 line-height: 1.4; 762 overflow: hidden; 763 text-overflow: ellipsis; 764 white-space: nowrap; 765 } 766 767 .dropdown-item:hover{ 768 background-color: #f3f3f3; 769 } 770 771 .search__input.is-focus{ 772 border-radius: 15px; 773 border-bottom-left-radius: 0; 774 border-bottom-right-radius: 0; 775 border: 1px solid rgba(var(--color-foreground), 1); 776 border-bottom: none; 777 box-shadow: none; 778 } 779 780 .clear-all { 781 text-align: right; 782 padding: 0 2rem 0.2rem; 783 line-height: 1; 784 font-size: 70%; 785 margin-bottom: -2px; 786 } 787 788 .clear-all:hover{ 789 background-color: #fff; 790 } 791 792 .referral-notification { 793 position: absolute; 794 top: 100%; 795 right: -12px; 796 background: white; 797 border: 1px solid #e0e0e0; 798 border-radius: 8px; 799 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 800 width: 280px; 801 z-index: 1000; 802 padding: 16px; 803 margin-top: 8px; 804 font-size: 14px; 805 line-height: 1.4; 806 } 807 808 .referral-notification::before { 809 content: ''; 810 position: absolute; 811 top: -8px; 812 right: 20px; 813 width: 0; 814 height: 0; 815 border-left: 8px solid transparent; 816 border-right: 8px solid transparent; 817 border-bottom: 8px solid white; 818 } 819 820 .referral-notification::after { 821 content: ''; 822 position: absolute; 823 top: -9px; 824 right: 20px; 825 width: 0; 826 height: 0; 827 border-left: 8px solid transparent; 828 border-right: 8px solid transparent; 829 border-bottom: 8px solid #e0e0e0; 830 } 831 832 .referral-notification h4 { 833 margin: 0 0 8px 0; 834 color: #2196F3; 835 font-size: 16px; 836 font-weight: 600; 837 } 838 839 .referral-notification p { 840 margin: 0 0 12px 0; 841 color: #666; 842 } 843 844 .referral-notification .referral-code { 845 background: #f5f5f5; 846 padding: 8px; 847 border-radius: 4px; 848 font-family: monospace; 849 font-size: 13px; 850 text-align: center; 851 margin: 8px 0; 852 border: 1px solid #ddd; 853 } 854 855 .referral-notification .close-btn { 856 position: absolute; 857 top: 8px; 858 right: 8px; 859 background: none; 860 border: none; 861 font-size: 18px; 862 color: #999; 863 cursor: pointer; 864 padding: 0; 865 width: 20px; 866 height: 20px; 867 line-height: 1; 868 } 869 870 .referral-notification .close-btn:hover { 871 color: #333; 872 } 873 874 .referral-notification .action-btn { 875 background: #2196F3; 876 color: white; 877 border: none; 878 padding: 8px 16px; 879 border-radius: 4px; 880 cursor: pointer; 881 font-size: 12px; 882 margin-right: 8px; 883 margin-top: 8px; 884 } 885 886 .referral-notification .action-btn:hover { 887 background: #1976D2; 888 } 889 890 .referral-notification .dismiss-btn { 891 background: transparent; 892 color: #666; 893 border: 1px solid #ddd; 894 padding: 8px 16px; 895 border-radius: 4px; 896 cursor: pointer; 897 font-size: 12px; 898 margin-top: 8px; 899 } 900 901 .referral-notification .dismiss-btn:hover { 902 background: #f5f5f5; 903 } 904 .referral-modal__dialog { 905 transform: translate(-50%, 0); 906 transition: transform var(--duration-default) ease, visibility 0s; 907 z-index: 10000; 908 position: fixed; 909 top: 20vh; 910 left: 50%; 911 width: 100%; 912 max-width: 350px; 913 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 914 border-radius: 12px; 915 background-color: #fff; 916 color: #000; 917 padding: 20px; 918 text-align: center; 919 } 920 .modal-overlay.referral-modal-overlay { 921 position: fixed; 922 top: 0; 923 left: 0; 924 width: 100%; 925 height: 100%; 926 background-color: rgba(0, 0, 0, 0.7); 927 z-index: 2001; 928 display: block; 929 opacity: 1; 930 transition: opacity var(--duration-default) ease, visibility 0s; 931 } 932</style> 933 934<header id="es_header_bar" class="header-bar logo_top-left sticky-topbar"> 935 <div class="header-bg-wrapper"> 936 <div class="header-wrapper wrapper"> 937 938 939 <div class="logo-header" role="banner"> 940 941 942 <div class="h1 site-header__logo" itemscope itemtype="http://schema.org/Organization"> 943 944 945 946 947 <a href="/" class="logo-wrapper" itemprop="url"> 948 <img src="https://cdn.store-assets.com/s/619065/f/5595723.jpeg" alt="Bell Tree Store" itemprop="logo"> 949 </a> 950 951 952 953 954 </div> 955 956 957 </div> 958 959 <div class="header-nav-bar medium-down--hide"> 960 961<ul class="site-nav" id="AccessibleNav"> 962 963 964 965 <li > 966 <a href="/" class="site-nav__link">Home</a> 967 </li> 968 969 970 971 972 973 <li class="site-nav--has-dropdown" aria-haspopup="true"> 974 <a href="/collections/all" class="site-nav__link"> 975 Shop Now
976 <span class="arrow-icon"> 977 <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>arrow down</title><path d="M50,78.18A7.35,7.35,0,0,1,44.82,76L3.15,34.36A7.35,7.35,0,1,1,13.55,24L50,60.44,86.45,24a7.35,7.35,0,1,1,10.4,10.4L55.21,76A7.32,7.32,0,0,1,50,78.18Z"/></svg> 978 </span> 979 </a> 980 <ul class="site-nav__dropdown"> 981 982 983 984 <li > 985 <a href="/collections/hot-selling" class="site-nav__link">Hot selling</a> 986 </li> 987 988 989 990 991 <li > 992 <a href="/collections/lumi22" class="site-nav__link">LUMI22 Supreme Essence Double Boost Plan</a> 993 </li> 994 995 996 </ul> 997 </li> 998 999 1000 1001 1002 <li > 1003 <a href="/blogs/news" class="site-nav__link">News</a> 1004 </li> 1005 1006 1007 1008 1009 1010 <li class="site-nav--has-dropdown" aria-haspopup="true"> 1011 <a href="/pages/easy123-1" class="site-nav__link"> 1012 EASY123 1013 <span class="arrow-icon"> 1014 <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>arrow down</title><path d="M50,78.18A7.35,7.35,0,0,1,44.82,76L3.15,34.36A7.35,7.35,0,1,1,13.55,24L50,60.44,86.45,24a7.35,7.35,0,1,1,10.4,10.4L55.21,76A7.32,7.32,0,0,1,50,78.18Z"/></svg> 1015 </span> 1016 </a> 1017 <ul class="site-nav__dropdown"> 1018 1019 1020 1021 <li > 1022 <a href="/pages/easy123" class="site-nav__link">EASY123 䏿ç</a> 1023 </li> 1024 1025 1026 </ul> 1027 </li> 1028 1029 1030 1031 1032 1033 <li class="site-nav--has-dropdown" aria-haspopup="true"> 1034 <a href="/pages/lumi22" class="site-nav__link"> 1035 LUMI22 1036 <span class="arrow-icon"> 1037 <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>arrow down</title><path d="M50,78.18A7.35,7.35,0,0,1,44.82,76L3.15,34.36A7.35,7.35,0,1,1,13.55,24L50,60.44,86.45,24a7.35,7.35,0,1,1,10.4,10.4L55.21,76A7.32,7.32,0,0,1,50,78.18Z"/></svg> 1038 </span> 1039 </a> 1040 <ul class="site-nav__dropdown"> 1041 1042 1043 1044 <li > 1045 <a href="/pages/lumi22-c" class="site-nav__link">LUMI22 䏿ç</a> 1046 </li> 1047 1048 1049 </ul> 1050 </li> 1051 1052 1053 1054 1055 1056 <li class="site-nav--has-dropdown" aria-haspopup="true"> 1057 <a href="/pages/acurex" class="site-nav__link"> 1058 Acurex 1059 <span class="arrow-icon"> 1060 <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>arrow down</title><path d="M50,78.18A7.35,7.35,0,0,1,44.82,76L3.15,34.36A7.35,7.35,0,1,1,13.55,24L50,60.44,86.45,24a7.35,7.35,0,1,1,10.4,10.4L55.21,76A7.32,7.32,0,0,1,50,78.18Z"/></svg> 1061 </span> 1062 </a> 1063 <ul class="site-nav__dropdown"> 1064 1065 1066 1067 <li > 1068 <a href="/pages/acurex-䏿ç" class="site-nav__link">Acurex 䏿ç</a> 1069 </li> 1070 1071 1072 </ul> 1073 </li> 1074 1075 1076 1077 1078 1079 <li class="site-nav--has-dropdown" aria-haspopup="true"> 1080 <a href="/pages/revone" class="site-nav__link"> 1081 REVONE 1082 <span class="arrow-icon"> 1083 <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>arrow down</title><path d="M50,78.18A7.35,7.35,0,0,1,44.82,76L3.15,34.36A7.35,7.35,0,1,1,13.55,24L50,60.44,86.45,24a7.35,7.35,0,1,1,10.4,10.4L55.21,76A7.32,7.32,0,0,1,50,78.18Z"/></svg> 1084 </span> 1085 </a> 1086 <ul class="site-nav__dropdown"> 1087 1088 1089 1090 <li > 1091 <a href="/pages/revone-1" class="site-nav__link">REVONE 䏿ç</a> 1092 </li> 1093 1094 1095 </ul> 1096 </li> 1097 1098 1099 1100 1101 1102 <li class="site-nav--has-dropdown" aria-haspopup="true"> 1103 <a href="/pages/product-testimonial-reviews" class="site-nav__link"> 1104 Product Testimonial & Reviews
1105 <span class="arrow-icon"> 1106 <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>arrow down</title><path d="M50,78.18A7.35,7.35,0,0,1,44.82,76L3.15,34.36A7.35,7.35,0,1,1,13.55,24L50,60.44,86.45,24a7.35,7.35,0,1,1,10.4,10.4L55.21,76A7.32,7.32,0,0,1,50,78.18Z"/></svg> 1107 </span> 1108 </a> 1109 <ul class="site-nav__dropdown"> 1110 1111 1112 1113 <li > 1114 <a href="/pages/easy123-testimonial-reviews" class="site-nav__link">EASY123 - Testimonial & Reviews</a> 1115 </li> 1116 1117 1118 1119 1120 <li > 1121 <a href="/pages/lumi22-testimonial-reviews" class="site-nav__link">LUMI22 - Testimonial & Reviews</a> 1122 </li> 1123 1124 1125 </ul> 1126 </li> 1127 1128 1129 1130 1131 <li > 1132 <a href="/pages/shipping-policy" class="site-nav__link">Shipping Policy</a> 1133 </li> 1134 1135 1136 1137 1138 <li > 1139 <a href="/store-locator" class="site-nav__link">Location</a> 1140 </li> 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155</ul> 1156 1157 </div> 1158 1159 <div class="desktop-header-nav medium-down--hide"> 1160 1161 1162 <div class="header-subnav"> 1163 1164 1165 1166 1167 1168 <div class="header-icon-nav"> 1169 1170 1171 1172 1173 1174 1175 1176 1177 <div class="header-bar__module"> 1178 1179 <a class="popup-with-form" href="#search-form"> 1180 1181 1182 1183 1184 <svg class="icon-search svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-search</title><path d="M68.5,65.87a35.27,35.27,0,1,0-5.4,4.5l23.11,23.1a3.5,3.5,0,1,0,5-4.94ZM14.82,41A28.47,28.47,0,1,1,43.28,69.43,28.5,28.5,0,0,1,14.82,41Z"/></svg> 1185 1186 1187 1188 </a> 1189 1190 1191 1192<!-- form itself --> 1193<div id="search-form" class="white-popup-block mfp-hide popup-search"> 1194 <div class="popup-search-content"> 1195 <form action="/search" method="get" class="input-group search-bar" role="search"> 1196 1197 <span class="input-group-btn"> 1198 <button type="submit" class="btn"> 1199 1200 1201 1202 1203 <svg class="icon-search svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-search</title><path d="M68.5,65.87a35.27,35.27,0,1,0-5.4,4.5l23.11,23.1a3.5,3.5,0,1,0,5-4.94ZM14.82,41A28.47,28.47,0,1,1,43.28,69.43,28.5,28.5,0,0,1,14.82,41Z"/></svg> 1204 1205 1206 1207 </button> 1208 </span> 1209 <input type="search" name="q" value="" placeholder="Search" class="input-group-field" aria-label="Search" placeholder="Search" autocomplete="off"> 1210 <div class="dropdown" id="searchDropdown"></div> 1211 <input type="hidden" name="search_history" id="search_history"> 1212 </form> 1213 </div> 1214</div> 1215
1216<script src="https://store-themes.easystore.co/619065/themes/3809/assets/magnific-popup.min.js?t=1788706088" type="text/javascript" ></script>
vendor: 1 bytes, line 1216
1216
1217<script> 1218$(document).ready(function() { 1219 $('.popup-with-form').magnificPopup({ 1220 type: 'inline', 1221 preloader: false, 1222 focus: '#name', 1223 mainClass: 'popup-search-bg-wrapper', 1224 1225 // When elemened is focused, some mobile browsers in some cases zoom in 1226 // It looks not nice, so we disable it: 1227 callbacks: { 1228 beforeOpen: function() { 1229 if($(window).width() < 700) { 1230 this.st.focus = false; 1231 } else { 1232 this.st.focus = '#name'; 1233 } 1234 } 1235 } 1236 }); 1237}); 1238</script>
1238 1239 1240
1241<script> 1242 var _search_history_listings = "" 1243 if(_search_history_listings != "") localStorage.setItem('searchHistory', JSON.stringify(_search_history_listings)); 1244 1245 function clearAll() { 1246 localStorage.removeItem('searchHistory'); 1247 1248 var customer = ""; 1249 if(customer) { 1250 // Your logic to clear all data or call an endpoint 1251 fetch('/account/search_histories', { 1252 method: 'DELETE', 1253 headers: { 1254 "Content-Type": "application/json", 1255 "X-Requested-With": "XMLHttpRequest" 1256 }, 1257 body: JSON.stringify({ 1258 _token: "v7iAjKi8BvIdKRYXLAOOnjLVHpbmgLD2GkvNoUS6" 1259 }), 1260 }) 1261 .then(response => response.json()) 1262 } 1263 } 1264 // End - store view history in local storage 1265 1266 // search history dropdown 1267 var searchInputs = document.querySelectorAll('input[type=search]'); 1268 1269 if(searchInputs.length > 0) { 1270 1271 searchInputs.forEach((searchInput)=>{ 1272 1273 searchInput.addEventListener('focus', function() { 1274 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 1275 searchDropdown.innerHTML = ''; // Clear existing items 1276 1277 // retrieve data from local storage 1278 var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || []; 1279 1280 // Convert JSON to string 1281 var search_history_json = JSON.stringify(searchHistoryData); 1282 1283 // Set the value of the hidden input 1284 searchInput.closest('form').querySelector("#search_history").value = search_history_json; 1285 1286 // create dropdown items 1287 var clearAllItem = document.createElement('div'); 1288 clearAllItem.className = 'dropdown-item clear-all'; 1289 clearAllItem.textContent = 'Clear'; 1290 clearAllItem.addEventListener('click', function() { 1291 clearAll(); 1292 searchDropdown.style.display = 'none'; 1293 searchInput.classList.remove('is-focus'); 1294 }); 1295 searchDropdown.appendChild(clearAllItem); 1296 1297 // create dropdown items 1298 searchHistoryData.forEach(function(item) { 1299 var dropdownItem = document.createElement('div'); 1300 dropdownItem.className = 'dropdown-item'; 1301 dropdownItem.textContent = item.term; 1302 dropdownItem.addEventListener('click', function() { 1303 searchInput.value = item.term; 1304 searchDropdown.style.display = 'none'; 1305 }); 1306 searchDropdown.appendChild(dropdownItem); 1307 }); 1308 1309 if(searchHistoryData.length > 0){ 1310 // display the dropdown 1311 searchInput.classList.add('is-focus'); 1312 document.body.classList.add('search-input-focus'); 1313 searchDropdown.style.display = 'block'; 1314 } 1315 }); 1316 1317 searchInput.addEventListener("focusout", (event) => { 1318 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 1319 searchInput.classList.remove('is-focus'); 1320 searchDropdown.classList.add('transparent'); 1321 setTimeout(()=>{ 1322 searchDropdown.style.display = 'none'; 1323 searchDropdown.classList.remove('transparent'); 1324 document.body.classList.remove('search-input-focus'); 1325 }, 400); 1326 }); 1327 }) 1328 } 1329 // End - search history dropdown 1330</script>
1330 1331 </div> 1332 1333 1334 1335 1336 1337 1338 1339 <div class="header-bar__module dropdown-wrapper" style="position: relative;"> 1340 1341 <a href="/account/login"> 1342 1343 1344 1345 <svg class="svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-profile</title><path d="M50,51.8A24.4,24.4,0,1,0,25.6,27.4,24.43,24.43,0,0,0,50,51.8ZM50,10A17.4,17.4,0,1,1,32.6,27.4,17.43,17.43,0,0,1,50,10Z"/><path d="M62.66,57.66H37.34a30.54,30.54,0,0,0-30.5,30.5V93.5a3.5,3.5,0,0,0,3.5,3.5H89.66a3.5,3.5,0,0,0,3.5-3.5V88.16A30.54,30.54,0,0,0,62.66,57.66ZM86.16,90H13.84V88.16a23.53,23.53,0,0,1,23.5-23.5H62.66a23.53,23.53,0,0,1,23.5,23.5Z"/></svg> 1346 1347 1348</a> 1349 1350 <!-- Referral Notification Popup for Desktop --> 1351 <div id="referralNotification" class="referral-notification" style="display: none;"> 1352 <button class="close-btn" onclick="dismissReferralNotification()">×</button> 1353 <div style="text-align: center; margin-bottom: 16px;"> 1354 <div style="width: 100px; height: 100px; margin: 0 auto;"> 1355 <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg"> 1356 </div> 1357 </div> 1358 <p id="referralSignupMessage" style="text-align: center; font-size: 14px; color: #666; margin: 0 0 20px 0;"> 1359 Your friend gifted you credit! Sign up now to redeem. 1360 </p> 1361 <div style="text-align: center;"> 1362 <button class="btn" onclick="goToSignupPage()" style="width: 100%; color: #fff;"> 1363 Sign Up 1364 </button> 1365 </div> 1366 </div> 1367 1368 </div> 1369 1370 1371 <div class="header-bar__module cart-page-link-wrapper"> 1372 <span class="header-bar__sep" aria-hidden="true"></span> 1373 <a class="CartDrawerTrigger cart-page-link"> 1374 1375 1376 1377 1378 <svg class="svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-bag</title><path d="M91.78,93.11,84.17,24.44a3.5,3.5,0,0,0-3.48-3.11H69.06C67.53,10.94,59.57,3,50,3S32.47,10.94,30.94,21.33H19.31a3.5,3.5,0,0,0-3.48,3.11L8.22,93.11A3.49,3.49,0,0,0,11.69,97H88.31a3.49,3.49,0,0,0,3.47-3.89ZM50,10c5.76,0,10.6,4.83,12,11.33H38.05C39.4,14.83,44.24,10,50,10ZM15.6,90l6.84-61.67h8.23v9.84a3.5,3.5,0,0,0,7,0V28.33H62.33v9.84a3.5,3.5,0,0,0,7,0V28.33h8.23L84.4,90Z"/></svg> 1379 1380 1381 1382 <span class="cart-count header-bar__cart-count hidden-count">0</span> 1383 </a> 1384 </div> 1385 1386 1387 1388 1389 1390 1391 1392 </div> 1393 </div> 1394 1395 1396 1397 </div> 1398 1399 <div class="mobile-header-icons large--hide"> 1400 1401 <div class="large--hide"> 1402 1403 1404 1405 1406 <a href="/account/login"> 1407 1408 1409 1410 <svg class="svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-profile</title><path d="M50,51.8A24.4,24.4,0,1,0,25.6,27.4,24.43,24.43,0,0,0,50,51.8ZM50,10A17.4,17.4,0,1,1,32.6,27.4,17.43,17.43,0,0,1,50,10Z"/><path d="M62.66,57.66H37.34a30.54,30.54,0,0,0-30.5,30.5V93.5a3.5,3.5,0,0,0,3.5,3.5H89.66a3.5,3.5,0,0,0,3.5-3.5V88.16A30.54,30.54,0,0,0,62.66,57.66ZM86.16,90H13.84V88.16a23.53,23.53,0,0,1,23.5-23.5H62.66a23.53,23.53,0,0,1,23.5,23.5Z"/></svg> 1411 1412 1413</a> 1414 1415 1416 1417 1418 1419 1420 </div> 1421 1422 1423 <!-- Mobile cart --> 1424 <div class="large--hide"> 1425 <a class="CartDrawerTrigger cart-page-link mobile-cart-page-link"> 1426 1427 1428 1429 1430 <svg class="svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-bag</title><path d="M91.78,93.11,84.17,24.44a3.5,3.5,0,0,0-3.48-3.11H69.06C67.53,10.94,59.57,3,50,3S32.47,10.94,30.94,21.33H19.31a3.5,3.5,0,0,0-3.48,3.11L8.22,93.11A3.49,3.49,0,0,0,11.69,97H88.31a3.49,3.49,0,0,0,3.47-3.89ZM50,10c5.76,0,10.6,4.83,12,11.33H38.05C39.4,14.83,44.24,10,50,10ZM15.6,90l6.84-61.67h8.23v9.84a3.5,3.5,0,0,0,7,0V28.33H62.33v9.84a3.5,3.5,0,0,0,7,0V28.33h8.23L84.4,90Z"/></svg> 1431 1432 1433
1434 <span class="cart-count hidden-count">0</span> 1435 </a> 1436 </div> 1437 1438 <!-- Mobile hamburger --> 1439 <div class="large--hide"> 1440 <a class="mobile-nav-trigger MobileNavTrigger"> 1441 1442 1443 1444 1445 <svg class="svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>icon-nav-menu</title><path d="M6.7,26.34H93a3.5,3.5,0,0,0,0-7H6.7a3.5,3.5,0,0,0,0,7Z"/><path d="M93.3,46.5H7a3.5,3.5,0,0,0,0,7H93.3a3.5,3.5,0,1,0,0-7Z"/><path d="M93.3,73.66H7a3.5,3.5,0,1,0,0,7H93.3a3.5,3.5,0,0,0,0-7Z"/></svg> 1446 1447 1448 1449 </a> 1450 </div> 1451 1452 1453 1454 <!-- Referral Notification Modal for Mobile --> 1455 <details-modal class="referral-modal" id="referralMobileModal"> 1456 <details> 1457 <summary class="referral-modal__toggle" aria-haspopup="dialog" aria-label="Open referral modal" style="display: none;"> 1458 </summary> 1459 <div class="modal-overlay referral-modal-overlay"></div> 1460 <div class="referral-modal__dialog" role="dialog" aria-modal="true" aria-label="Referral notification"> 1461 <div class="referral-modal__content"> 1462 <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;"> 1463 × 1464 </button> 1465 1466 <div style="margin-bottom: 24px;"> 1467 <div style="width: 120px; height: 120px; margin: 0 auto 20px;"> 1468 <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg" style="width: 100%; height: 100%;"> 1469 </div> 1470 </div> 1471 1472 <p id="referralSignupMessageMobile" style="font-size: 16px; color: #333; margin: 0 0 30px 0; line-height: 1.5;"> 1473 Your friend gifted you credit! Sign up now to redeem. 1474 </p> 1475 1476 <button type="button" class="btn" onclick="goToSignupPageFromMobile()" style="width: 100%; color: #fff;"> 1477 Sign Up 1478 </button> 1479 </div> 1480 </div> 1481 </details> 1482 </details-modal> 1483 1484 1485 1486 </div> 1487 1488 </div> 1489 </div> 1490</header> 1491 1492 1493 1494 1495 1496 1497 1498 <main class="wrapper main-content" role="main"> 1499 <div class="grid"> 1500 <div class="grid__item">
vendor: 100 bytes, lines 1500-1504
1500 1501 1502 1503 1504<script src="https://www.recaptcha.net/recaptcha/enterprise.js?render=
15046LdMNdIqAAAAALegJp7y4weVcCIlnwmIN8TWseEF
vendor: 12 bytes, line 1504
1504"></script>
1505<link rel="preload" href="https://store-themes.easystore.co/619065/themes/3809/assets/customer.css?t=1788706088" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1506<style> 1507 main.main-content .field > label{ 1508 display: none; 1509 } 1510 .h3{ 1511 font-size: 18px; 1512 } 1513 .button--full-width{ 1514 width: 100%; 1515 } 1516 .tab-wrapper{ 1517 display: inline-flex; 1518 justify-content: center; 1519 align-items: center; 1520 margin: 10px auto 20px; 1521 background-color: #eaeaea; 1522 border-radius: 200px; 1523 padding: 5px; 1524 gap: 10px; 1525 } 1526 .tab-wrapper .tab-label { 1527 display: inline-block; 1528 min-width: 130px; 1529 padding: 8px 15px; 1530 border-radius: 100px; 1531 cursor: pointer; 1532 font-size: 17px; 1533 line-height: 1.1; 1534 user-select: none; 1535 margin: 0; 1536 color: #000; 1537 } 1538 #register-tos a { 1539 display: inline; 1540 } 1541 @media screen and (max-width: 400px){ 1542 .tab-wrapper .tab-label { 1543 min-width: 110px; 1544 } 1545 } 1546 .tab-wrapper input[type='radio']:checked + .tab-label { 1547 background-color: #fff; 1548 box-shadow: 2px 2px 25px -10px #333; 1549 } 1550 1551 @media screen and (min-width: 500px){ 1552 .large--five-twelfths{ 1553 min-width: 420px; 1554 } 1555 } 1556</style> 1557 1558 1559 1560 1561<div class="customer login section-width-control small-width large--five-twelfths text-center wrapper"> 1562 <div class="card"> 1563 <h1 id="login" tabindex="-1" class="mb-0"> 1564 Welcome 1565 </h1> 1566 <p class="h3 mt-0"> 1567 1568 Sign up or log in to continue 1569 1570 </p> 1571 <div> 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 <div class="tab-wrapper"> 1590 <div> 1591 <input type="radio" name="type" id="tab-register" class="hide hidden" checked> 1592 <label for="tab-register" class="tab-label"> 1593 Sign up 1594 </label> 1595 </div> 1596 <div> 1597 <input type="radio" name="type" id="tab-login" class="hide hidden"> 1598 <label for="tab-login" class="tab-label"> 1599 Login 1600 </label> 1601 </div> 1602 </div> 1603 1604 1605 <form id="form-login" action="/account/auth" method="post" class="mt-2"> 1606 <input type="hidden" name="_token" value="v7iAjKi8BvIdKRYXLAOOnjLVHpbmgLD2GkvNoUS6"> 1607 <input type="hidden" name="location_id" value=""> 1608 <input type="hidden" name="staff_id" value=""> 1609 <input type="hidden" id="recaptchaResponse" name="g-recaptcha-response"> 1610 1611 1612 <div id="error-content"></div> 1613 1614 <div class="field"> 1615 <input 1616 type="text" 1617 name="customer[email_or_phone]" 1618 id="CustomerDetail" 1619 autocorrect="off" 1620 autocapitalize="off" 1621 placeholder="Email" 1622 required 1623 > 1624 <label for="CustomerDetail"> 1625 Email 1626 </label> 1627 </div> 1628 1629 <button 1630 type="submit" 1631 form="form-login" 1632 class="btn button--full-width g-recaptcha"> 1633 Continue 1634 </button> 1635 1636 <div class="button-snippet"> 1637 1638<!-- Snippet:login/button: Facebook Login --> 1639 <style> 1640 #fb-login-btn.btn{ 1641 background-color: #fff; 1642 color: #000; 1643 padding: 0; 1644 overflow: hidden; 1645 display: flex; 1646 justify-content: center; 1647 align-items: center; 1648 width: 100%; 1649 margin: 15px auto; 1650 font-size: 14px; 1651 border: 1px solid currentColor; 1652 box-shadow: none; 1653 } 1654 #fb-login-btn.btn:hover{ 1655 background-color: #fff; 1656 } 1657 #fb-login-btn.btn svg{ 1658 width: 45px; 1659 vertical-align: middle; 1660 padding: 5px; 1661 } 1662 #fb-login-btn.btn .fb-login-text{ 1663 padding: 13px 75px 13px 30px; 1664 display: inline-block; 1665 width: calc(100% - 52px); 1666 } 1667 @media screen and (max-width: 500px) { 1668 #fb-login-btn.btn .fb-login-text{ 1669 padding: 13px 25px 13px 8px; 1670 font-size: 13px; 1671 } 1672 } 1673 </style> 1674 <button id="fb-login-btn" type="button" class="btn" onclick="fb_login()" style="background-color: #fff; color: #000; font-weight: normal;"> 1675 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 700 700"><g><path d="M650,350C650,184.32,515.68,50,350,50S50,184.32,50,350c0,140.69,96.86,258.74,227.53,291.17V441.68H215.66V350h61.87V310.5c0-102.11,46.2-149.44,146.4-149.44,19,0,51.81,3.72,65.22,7.45V251.6c-7.08-.74-19.38-1.12-34.65-1.12-49.2,0-68.2,18.64-68.2,67.08V350h98.1l-16.8,91.68H386.35V647.8C534.88,629.86,650,503.38,650,350Z" fill="#0866ff"/><path d="M467.5,441.68,484.4,350h-98V317.6c0-48.44,19-67.08,68.19-67.08,15.28,0,27.6.37,34.66,1.12V168.51c-13.42-3.73-46.21-7.45-65.22-7.45-100.25,0-146.4,47.33-146.4,149.44V350H2
167515.66v91.68h61.87V641.17a301.61,301.61,0,0,0,108.82,6.63V441.68Z" fill="#fff"/></g></svg> 1676 <span class="fb-login-text">Continue with Facebook</span> 1677 </button> 1678 1679
1679<script> 1680 function fb_login(){ 1681 location.href = 'https://apps.easystore.co/facebook-login/run?domain='+window.location.protocol+'//'+window.location.hostname+'&shop=belltreestore.easy.co'; 1682 } 1683 </script>
1683 1684<!-- /Snippet --> 1685 1686 </div> 1687 1688 1689 1690 <div id="register-tos"> 1691 By signing up, I agree to the Bell Tree Store's <a target="_blank" href="/legal/terms-of-service">Terms of Service</a>, <a target="_blank" href="/legal/privacy-policy">Privacy Policy</a> and <a target="_blank" href="/legal/refund-policy">Refund Policy</a>. 1692 </div> 1693 1694 </form> 1695 </div> 1696 </div> 1697 1698</div> 1699 1700 1701
1702<script> 1703 const register_tab = document.querySelector('#tab-register'); 1704 const login_tab = document.querySelector('#tab-login'); 1705 const register_tos = document.querySelector('#register-tos'); 1706 const isRegistrationEnabled = "1"; 1707 1708 if (register_tab) { 1709 register_tab.addEventListener('click', function() { 1710 if (register_tos) { 1711 register_tos.style.display = 'block'; 1712 } 1713 }); 1714 } 1715 if (login_tab) { 1716 login_tab.addEventListener('click', function() { 1717 if (register_tos) { 1718 register_tos.style.display = 'none'; 1719 } 1720 }); 1721 } 1722 1723 const methodSwitchBtn = document.getElementById('phone-login-btn'); 1724 if (methodSwitchBtn) { 1725 methodSwitchBtn.onclick = function () { 1726 var type = (register_tab && register_tab.checked) ? 'register' : 'login'; 1727 window.location.href = '/account/login?method=phone&type=' + type; 1728 }; 1729 } 1730 1731 let lastPathSegment = window.location.pathname.split('/').filter(segment => segment.length > 0).pop(); 1732 1733 // Redirect to login if trying to access register when self registration is disabled 1734 if (!isRegistrationEnabled) { 1735 if (lastPathSegment === 'register') { 1736 window.location.href = '/account/login'; 1737 } else if (lastPathSegment === 'login' || lastPathSegment === 'auth') { 1738 if (register_tos) { 1739 register_tos.style.display = 'none'; 1740 } 1741 } 1742 } else { 1743 // Only proceed with tab logic if not redirecting 1744 if(lastPathSegment === 'login') { 1745 if (login_tab) { 1746 login_tab.checked = true; 1747 } 1748 if (register_tos) { 1749 register_tos.style.display = 'none'; 1750 } 1751 } else { 1752 if (register_tos) { 1753 register_tos.style.display = 'block'; 1754 } 1755 } 1756 } 1757 1758 const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; 1759 const phonePattern = /^(?:\+?\d{1,3}[\s-]?)?(?:\d{1,14}[\s-]?){1,5}$/; 1760 1761 let form = document.querySelector('#form-login'), 1762 input = document.querySelector('#CustomerDetail'), 1763 error_content = document.querySelector('#error-content'); 1764 1765 1766 // One attempt at a time: the reCAPTCHA wait below is async, so without 1767 // this a double-click starts two continuations and posts the form twice. 1768 var submitting = false; 1769 1770 form.addEventListener('submit', async function (event) { 1771 // preventDefault FIRST: a re-entrant submit must still be cancelled, or the 1772 // browser performs a native post with no captcha token. 1773 event.preventDefault(); 1774 if (submitting) return; 1775 1776 let input_value = input.value 1777 error_content.innerHTML = ''; 1778 if (!input_value.match(emailPattern) && !input_value.match(phonePattern)) { 1779 error_content.innerHTML = `<div class="errors note">Invalid Email or Phone</div>`; 1780 return false; 1781 } 1782 1783 submitting = true; 1784 document.querySelector('#form-login .btn').classList.add('btn--loading','loading'); 1785 1786 // reCAPTCHA is unreachable from some regions (google.com is blocked in 1787 // mainland China). Fail open the same way checkout and forgot-password do: 1788 // submit without a token rather than leave the button spinning forever. 1789 try { 1790 if (window.grecaptcha && typeof window.grecaptcha.enterprise === 'object') { 1791 // The loader defines a stub {ready} synchronously and fetches the real 1792 // implementation asynchronously, so execute() may not exist yet. 1793 // ready() queues until it does; the timeout stops a bundle that never 1794 // arrives from hanging the button. 1795 await new Promise(function (resolve) { 1796 setTimeout(resolve, 3000); 1797 try { grecaptcha.enterprise.ready(resolve); } catch (e) { resolve(); } 1798 }); 1799 1800 const token = await grecaptcha.enterprise.execute('6LdMNdIqAAAAALegJp7y4weVcCIlnwmIN8TWseEF', { action: 'LOGIN' }); 1801 document.getElementById('recaptchaResponse').value = token; 1802 } 1803 } catch (e) { /* fail open */ } 1804 1805 document.getElementById('form-login').submit(); 1806 }); 1807 1808 1809</script>
1809 1810 1811 1812 1813 </div> 1814 </div> 1815 1816 1817 1818 </main> 1819 1820 <footer id="es_footer_section" class="site-footer small--text-center" role="contentinfo"> 1821 1822 1823 <div id="es_logo_list_section" class="logo-list-section"> 1824 <h2 class="section-header__title"></h2> 1825 <ul class="logo-list-wrapper"> 1826 1827 1828 1829 1830 <li class="logo-list-item"> 1831 1832 <a href="https://www.belltree.com.my/products/lumi22-"></a> 1833 1834 <img class="lozad" data-src="https://cdn.store-assets.com/s/619065/f/5637407.jpeg"/> 1835 </li> 1836 1837 1838 1839 1840 1841 <li class="logo-list-item"> 1842 1843 <a href="https://www.belltree.com.my/products/lumi22-supreme-essence"></a> 1844 1845 <img class="lozad" data-src="https://cdn.store-assets.com/s/619065/i/33813178.jpg"/> 1846 </li> 1847 1848 1849 1850 1851 1852 <li class="logo-list-item"> 1853 1854 <a href="https://www.belltree.com.my/products/easy123-90-day-plan-4-boxes-80s-"></a> 1855 1856 <img class="lozad" data-src="https://cdn.store-assets.com/s/619065/f/6699697.gif"/> 1857 </li> 1858 1859 1860 1861 1862 1863 <li class="logo-list-item"> 1864 1865 <a href="https://www.belltree.com.my/pages/easy123-1"></a> 1866 1867 <img class="lozad" data-src="https://cdn.store-assets.com/s/619065/f/5637397.jpeg"/> 1868 </li> 1869 1870 1871 1872 1873 1874 <li class="logo-list-item"> 1875 1876 <a href="https://www.belltree.com.my/products/revone-30-s"></a> 1877 1878 <img class="lozad" data-src="https://cdn.store-assets.com/s/619065/f/17479401.jpg"/> 1879 </li> 1880 1881 1882 1883 1884 1885 <li class="logo-list-item"> 1886 1887 <a href="https://www.belltree.com.my/pages/revone"></a> 1888 1889 <img class="lozad" data-src="https://cdn.store-assets.com/s/619065/f/17478544.jpg"/> 1890 </li> 1891 1892 1893 1894 1895 1896 <li class="logo-list-item"> 1897 1898 <a href="https://www.belltree.com.my/products/acurex-botanical-beverage-mix-blackcurrant-with-tart-cherry-dandelion"></a> 1899 1900 <img class="lozad" data-src="https://cdn.store-assets.com/s/619065/f/17479215.jpg"/> 1901 </li> 1902 1903 1904 1905 1906 1907 <li class="logo-list-item"> 1908 1909 <a href="https://www.belltree.com.my/products/acurex-botanical-beverage-mix-blackcurrant-with-tart-cherry-dandelion"></a> 1910 1911 <img class="lozad" data-src="https://cdn.store-assets.com/s/619065/f/17478593.jpg"/> 1912 </li> 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 </ul> 1964</div> 1965 1966 1967 1968 <div class="wrapper"> 1969 1970 <div class="grid-uniform"> 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 <div class="grid__item large--one-half "> 1994 <a href="/" class="logo-wrapper" itemprop="url" > 1995 1996 <img class="footer-logo" src="https://cdn.store-assets.com/s/619065/f/5595723.jpeg" alt="Bell Tree Store" itemprop="logo"> 1997 1998 </a> 1999 <p class="site-footer__links">© {{2020}} Bell Tree Store Powered by <a href="http://www.easystore.co/?utm_source=storefront&utm_medium=sf_ref_footer&utm_campaign=sf_ref">EasyStore</a></p> 2000 </div> 2001 2002 2003 <div class="grid__item large--one-quarter medium--one-half"> 2004 2005 <!-- <h4>Quick Links</h4> --> 2006 2007 <ul class="site-footer__links"> 2008 2009 <li><a href="/store-locator" >Location</a></li> 2010 2011 <li><a href="/a/contact-form" >Contact us</a></li> 2012 2013 <li><a href="/pages/easyparcel-widgets" >EasyParcel Widgets</a></li> 2014 2015 2016 </ul> 2017 </div> 2018 2019 2020 2021 <div class="grid__item large--one-quarter medium--one-half"> 2022 <!-- <h4>Follow Us</h4> --> 2023 2024 <ul class="inline-list social-icons"> 2025 2026
2027 <li> 2028 <a class="icon-fallback-text" href="https://www.facebook.com/MyEasy123/" title="Bell Tree Store on Facebook" target="_blank"> 2029 2030 2031 2032 2033 <svg xmlns="http://www.w3.org/2000/svg" class="facebook-icon-svg social-icon-svg" viewBox="0 0 1024 1024"> 2034 <title>icon-facebook</title> 2035 <path d="M837.66,223.9a33.73,33.73,0,0,0-3.11-15c-6.78-13.85-17.87-21.09-33.37-21.09q-288.46,0-576.91,0c-.62,0-1.24,0-1.85,0a34.51,34.51,0,0,0-25.88,12.11c-6.31,7.13-8.85,15.57-8.85,25.07q.08,287.7,0,575.4c0,1,0,1.9,0,2.86A32.93,32.93,0,0,0,190,814.71c4.45,11.79,16.3,23.11,35,23.1q153.61-.1,307.24,0c2.36,0,2.36,0,2.36-2.37q0-123.3,0-246.6c0-2.55,0-2.55-2.53-2.55H452.27c-2.26,0-2.26,0-2.26-2.17v-96.3h84.63v-2.46c0-22.12-.11-44.24.06-66.36.07-8.29.57-16.59,1.28-24.85a129.58,129.58,0,0,1,7.43-33c10.86-30,30.59-51.74,60-64.51A133.44,133.44,0,0,1,653,285.82c12.45-.37,24.93,0,37.38.34,9.64.27,19.27.95,28.9,1.6,5.36.36,10.7,1.07,16.06,1.5,1.46.12,1.65.75,1.65,2q0,42.2,0,84.39c0,.59-.06,1.18-.09,1.85h-2.39c-16.28,0-32.56,0-48.84.05-7.63,0-15.23.54-22.65,2.61-11.61,3.23-19.86,10.09-23.65,21.78a55.66,55.66,0,0,0-2.74,16.86c-.14,22.23-.1,44.47-.13,66.7,0,2.25,0,2.25,2.31,2.25h94.66a15.13,15.13,0,0,1,0,1.54c-.38,2.94-.81,5.88-1.18,8.82-1.17,9.16-2.3,18.33-3.48,27.5-1.29,10-2.63,20-3.94,30-1.23,9.44-2.43,18.88-3.67,28.32-.31,2.32-.35,2.32-2.78,2.32h-79a4.62,4.62,0,0,0-1.67,0,2.5,2.5,0,0,0-1.2,1.16,3.68,3.68,0,0,0,0,1.49V835.21c0,2.56,0,2.56,2.53,2.56H797.83c2.13,0,4.27-.07,6.39-.21,11.56-.78,20.61-6.07,27.23-15.48,4.66-6.6,6.24-14.09,6.24-22.11q-.06-287.19,0-574.38Z" fill="#999"/> 2036 </svg> 2037 2038 2039 2040 <span class="fallback-text">Facebook</span> 2041 </a> 2042 </li> 2043 2044 2045 <li> 2046 <a class="icon-fallback-text" href="https://www.pinterest.com/" title="Bell Tree Store on Pinterest" target="_blank"> 2047 2048 2049 2050 2051 <svg xmlns="http://www.w3.org/2000/svg" class="pinterest-icon-svg social-icon-svg" viewBox="0 0 1024 1024"> 2052 <title>icon-pinterest</title> 2053 <path d="M787.12,295.62a346.51,346.51,0,0,0-113.57-94.17A342,342,0,0,0,564.26,166c-11.07-1.63-22.29-2.24-33.44-3.34-1.28-.13-2.54-.42-3.82-.63H497c-4.12.4-8.24.88-12.36,1.19a341.51,341.51,0,0,0-84.22,17.08A351,351,0,0,0,179.12,403.9a338.83,338.83,0,0,0-15.93,80.74c-.31,4.12-.79,8.24-1.19,12.36v30c.4,4.23.88,8.44,1.2,12.67a343.46,343.46,0,0,0,30.9,118.86A351.6,351.6,0,0,0,367.73,831c1.09.49,2.21.92,3.47,1.45,0-3.85.08-7.39,0-10.93-.81-29.78,3.57-58.84,10.64-87.73,13.78-56.39,26.84-113,40.16-169.46a7.16,7.16,0,0,0-.06-4.13,139.39,139.39,0,0,1-10.34-48.77c-.82-22.4,3.24-43.66,14.94-63,9.35-15.48,22-27.2,40.11-31.32S501,416,513.88,430.31c7.49,8.32,10.75,18.59,12,29.56,1.73,15.4-1.28,30.32-5.37,45-6.57,23.53-13.84,46.87-20.57,70.36-2.83,9.86-6.05,19.69-6.08,30.16-.07,26.81,18.3,48.76,44.77,53.23,24,4,44.94-3.17,63.34-18.43C618.64,626.31,630,608.5,638.86,589c10.39-22.91,16.49-47,19.79-71.92a298.29,298.29,0,0,0,2.8-47.58c-1-34.14-11.28-64.73-35.48-89.64-15.55-16-34.53-26.45-55.82-32.8-22.86-6.81-46.22-8.56-69.91-6.81-31.57,2.34-60.78,11.65-86.75,30-35.94,25.37-57.85,60-66.35,103a186.22,186.22,0,0,0-3.44,33.39c-.38,26.17,6.25,50.28,24,70.37,4.93,5.58,6.11,11.53,4,18.68-2.63,8.88-4.64,17.94-6.9,26.93-2.46,9.74-9.3,13.23-18.54,9.33-25.82-10.91-43.45-30.07-55.21-55.07-8.33-17.72-12.86-36.47-14.65-55.89-6.26-67.88,17.3-124.76,64.82-172.21,31.05-31,69-50.2,111.44-60.63a303.41,303.41,0,0,1,61.72-8.24c38.59-1.41,75.89,4.33,111.14,20.42,54.54,24.88,92.86,65,112.39,122.18,7.6,22.26,9.88,45.26,9.12,68.72-1,30.24-5.47,59.85-14.85,88.64-11,33.93-27.81,64.58-53.14,90C653,696.1,621.75,712.66,585,718.24c-20.28,3.08-40.44,3.26-60.21-3.2-18.27-6-34.52-15.13-46.79-30.36-1.83-2.27-3.38-4.77-5.32-7.54-2.33,9.24-4.55,18.1-6.82,26.94-5.75,22.5-11.32,45-17.34,67.47-7.05,26.23-19.43,50.08-33.58,73.07-.48.79-1,1.56-1.44,2.36a7.1,7.1,0,0,0-.27,1c7,1.77,13.93,3.67,20.95,5.29a336.64,336.64,0,0,0,57.13,8.15,17.33,17.33,0,0,1,2.63.55h36.75c3.61-.39,7.21-.85,10.82-1.17q120.79-10.68,209.65-93.21c52.05-48.53,85.94-107.86,102.13-177.21a330.52,330.52,0,0,0,8.17-57.73,17.08,17.08,0,0,1,.55-2.61V493.93c-.39-3.6-.84-7.21-1.15-10.82Q852,378.35,787.12,295.62Z" fill="#999"/><path d="M37.33,757.51l1.14.06a4.6,4.6,0,0,0-.65-.74Z" fill="#999"/> 2054 </svg> 2055 2056 2057
2058 <span class="fallback-text">Pinterest</span> 2059 </a> 2060 </li> 2061 2062 2063 <li> 2064 <a class="icon-fallback-text" href="https://www.instagram.com/lumi22supreme" title="Bell Tree Store on Instagram" target="_blank"> 2065 2066 2067 2068 2069 <svg xmlns="http://www.w3.org/2000/svg" class="instagram-icon-svg social-icon-svg" viewBox="0 0 1024 1024"> 2070 <title>icon-instagram</title> 2071 <path d="M834.35,341.22a231.23,231.23,0,0,0-9.59-46.45,166.71,166.71,0,0,0-52.17-78.33c-17-14.41-36.33-24.44-57.44-31.3-21.52-7-43.69-10.21-66.19-11.12-22.28-.9-44.58-1.73-66.87-1.85-47.68-.26-95.37-.16-143.06,0-27.47.11-54.95.69-82.32,3.39a220.7,220.7,0,0,0-37.43,6.95c-26.2,7.26-50,19-70.24,37.45-18.06,16.4-32.3,35.52-41.87,58.05-9.89,23.29-15.13,47.68-16.69,72.82-1.23,19.78-2.06,39.6-2.32,59.41-.38,28.91-.1,57.82-.1,86.73-.23,39.92-.67,79.85,1,119.76.72,17.66,1.57,35.3,4.6,52.76,3.22,18.52,8.32,36.51,16.71,53.34C232.83,768,268.81,797,317.12,811a246.28,246.28,0,0,0,59.24,9.11c25.3.95,50.63,1.78,75.95,1.94,43.83.28,87.66.1,131.5,0,26-.08,52.08-.72,78.06-2.74a234.52,234.52,0,0,0,45.76-8c24.54-6.92,46.82-18.12,66.22-34.79,24.65-21.17,41.5-47.44,51.3-78.36,6.7-21.14,9.83-42.88,10.73-64.94.9-21.84,1.73-43.69,1.82-65.55q.33-78.21-.15-156.44C837.42,387.82,836.72,364.47,834.35,341.22Zm-55.3,232.84c-.12,20.41-1,40.84-2,61.24-1,19.2-4.13,38.08-11.74,55.92q-18.43,43.24-62.47,60c-14.36,5.48-29.3,8.3-44.55,9.53-27.07,2.18-54.21,2.63-81.36,2.73-21.31.07-42.62,0-63.93,0v-.16c-28.47,0-56.94.22-85.4-.09-17.5-.18-35-1-52.49-1.89-19.94-1-39.51-4.31-57.95-12.38q-41.6-18.2-58-60.68a162.37,162.37,0,0,1-9.95-45.62c-2-24.66-2.62-49.38-2.66-74.1-.09-50.88-.16-101.77.12-152.65.11-19,1-38.09,2-57.11a180,180,0,0,1,8.78-48.23c8.32-24.84,23.63-44.14,45.66-58.12,11.78-7.48,24.85-11.91,38.36-15,15.57-3.61,31.43-4.65,47.34-5.32,54.32-2.28,108.68-1.46,163-1.5,18.67,0,37.34.12,56,.56,15.84.38,31.7,1,47.51,2,18.33,1.18,36.27,4.59,53.19,12q41.67,18.25,58.1,60.83c5.67,14.7,8.64,30,9.91,45.63,2,25,2.63,50,2.67,75.09C779.25,475.82,779.35,524.94,779.05,574.06Z" fill="#999"/><path d="M513,330.12c-92-.34-167,74.55-167.08,166.87s74.71,167,167,167A166.86,166.86,0,0,0,679.77,497.12C679.87,405,605.46,330.45,513,330.12Zm-.29,275.31A108.38,108.38,0,1,1,621.21,497.15,108.38,108.38,0,0,1,512.7,605.43Z" fill="#999"/><path d="M686.47,284.5a39,39,0,1,0,38.92,39.14A39,39,0,0,0,686.47,284.5Z" fill="#999"/> 2072 </svg> 2073 2074 2075 2076 <span class="fallback-text">Instagram</span> 2077 </a> 2078 </li> 2079 2080 2081 2082 <li> 2083 <a class="icon-fallback-text" href="https://www.youtube.com/channel/UCHpczMB0lrvT7iuS03qlx_g?view_as=subscriber" title="Bell Tree Store on YouTube" target="_blank"> 2084 2085 2086 2087 2088 <svg xmlns="http://www.w3.org/2000/svg" class="youtube-icon-svg social-icon-svg" viewBox="0 0 1024 1024"> 2089 <title>icon-youtube</title> 2090 <path d="M870.81,327.93c-7.44-35.32-28.1-59.52-60.39-71.9-16.32-6.27-33.58-8-50.71-9.35-31.74-2.54-63.52-4.94-95.32-6.05q-68.85-2.41-137.75-2.8c-75.45-.43-150.91.42-226.25,5.31a672.25,672.25,0,0,0-68,7.84c-35.52,6-75.56,36.22-83.33,86.62a946.72,946.72,0,0,0-10.15,116.2c-1.48,49.67-1.33,99.34,1.42,149,1.57,28.34,4.16,56.51,9,84.49,6.1,35.11,25.46,59,54.45,75.29,17.17,9.66,36,12.91,54.91,14.37,38.69,3,77.44,5.58,116.21,7,42.47,1.56,85,1.63,127.49,2.35v-.91c27.2,0,54.4.26,81.6-.06,59.05-.68,118.09-1.91,176.89-8.23,14.61-1.57,29.51-3.48,43.44-8.06,29.6-9.75,52.29-29.47,63.23-60.8,5.32-15.27,7.62-31.93,9.82-48.18,5.81-43.06,7.61-86.47,8.39-129.92a1196.45,1196.45,0,0,0-5.15-133.62C878.49,373.5,875.55,350.44,870.81,327.93ZM440.45,633.7V390L627.17,511.81Z" fill="#999"/> 2091 </svg> 2092 2093 2094 2095 <span class="fallback-text">YouTube</span> 2096 </a> 2097 </li> 2098 2099 2100 2101 2102 <li> 2103 <a class="icon-fallback-text" href="+6 0129641787" title="Bell Tree Store on Whatsapp" target="_blank"> 2104 2105 2106 2107 2108 <svg xmlns="http://www.w3.org/2000/svg" class="whatsapp-icon-svg social-icon-svg" viewBox="0 0 1024 1024"> 2109 <title>icon-whatsapp</title> 2110 <path d="M816.7,348.82A345.81,345.81,0,0,0,694.1,218.71c-44.79-28-93.6-44.39-146.07-49.88a345.45,345.45,0,0,0-92,2.72,339.05,339.05,0,0,0-94.38,29.87A343.85,343.85,0,0,0,238,302.05Q177.25,381,167.56,480.22a345,345,0,0,0,43.29,203.46,6.68,6.68,0,0,1,.57,4.56q-16.36,60.35-32.93,120.63c-5.08,18.56-10.2,37.12-15.43,56.13,1.15-.24,1.8-.34,2.43-.51Q254.72,841.08,344,817.7a7.88,7.88,0,0,1,4.84.57c11.92,5.41,23.56,11.5,35.68,16.39a344.42,344.42,0,0,0,274.43-8.3,343.9,343.9,0,0,0,122.89-97q64.35-80.48,74.57-183.1a344.59,344.59,0,0,0-2.88-89.12A336.49,336.49,0,0,0,816.7,348.82ZM799.12,528.11c-3.35,60.82-23.74,115.33-61.56,163C695.72,743.88,641.71,778,576.15,793.47A277.11,277.11,0,0,1,491.09,800a284.89,284.89,0,0,1-129.36-41.68,16.37,16.37,0,0,0-14.17-2c-33.08,8.93-66.26,17.47-99.4,26.13-.46.12-.93.19-2,.42,1.61-5.94,3.07-11.39,4.56-16.83q11.91-43.44,23.73-86.9a6.64,6.64,0,0,0-.91-4.73c-11.53-18-21.73-36.58-29.45-56.51a287.49,287.49,0,0,1-17.41-68.71c-5.7-46-.87-90.81,15-134.35a287.26,287.26,0,0,1,479.82-98.72c32.53,34.66,55.29,74.85,67.86,120.72A284,284,0,0,1,799.12,528.11Z" fill="#999"/><path d="M679.23,590c-12.9-6.08-25.57-12.63-38.44-18.75-10.69-5.09-21.41-10.15-32.36-14.63-8.48-3.47-12.2-1.6-17.82,5.65-8.75,11.27-17.79,22.32-26.93,33.28-4.38,5.25-8.82,6.33-15,3.54-11.48-5.18-23.13-10.16-34.09-16.32C477.68,562,449.73,532.17,428.22,496c-4.54-7.64-4-11.33,2-17.83,8.45-9.23,17.15-18.29,22.45-29.93a16.29,16.29,0,0,0,.44-13.68c-8.9-21.42-17.75-42.87-26.8-64.23a70.6,70.6,0,0,0-6.52-11.83c-2.39-3.56-6.15-5.12-10.51-5-3.28,0-6.56,0-9.84,0,0-.17,0-.34,0-.52-5.1.27-10.26.1-15.27.89-8.07,1.27-14,6.29-19.53,12.06-23.72,24.67-32.22,53.95-26.71,87.44a135.88,135.88,0,0,0,19.34,50.09c9.28,14.85,19.38,29.25,29.94,43.23a405.65,405.65,0,0,0,65.73,68.21c29.34,24.26,62.45,41.51,98.38,53.66,15,5.07,29.89,10.33,46,10.64,10.73.21,21.46.08,31.83-3a103.21,103.21,0,0,0,39.24-22c5.11-4.48,9.77-9.49,12.29-15.89a103.2,103.2,0,0,0,7.06-34.67C687.88,597,685.22,592.79,679.23,590Z" fill="#999"/> 2111 </svg> 2112 2113 2114
2115 <span class="fallback-text">Whatsapp</span> 2116 </a> 2117 </li> 2118 2119 2120 2121 2122</ul> 2123 2124 </div> 2125 2126 </div> 2127 2128 <hr class="hr--small hr--clear"> 2129 2130 2131 <div class="grid"> 2132 2133 <div class="grid__item text-center"> 2134 <ul class="inline-list payment-icons"> 2135 2136 <li> 2137 <span class="icon-fallback-text"> 2138 <span class="icon icon-visa" aria-hidden="true"></span> 2139 <span class="fallback-text">Visa</span> 2140 </span> 2141 </li> 2142 2143 2144 <li> 2145 <span class="icon-fallback-text"> 2146 <span class="icon icon-master" aria-hidden="true"></span> 2147 <span class="fallback-text">Master</span> 2148 </span> 2149 </li> 2150 2151 2152 <li> 2153 <span class="icon-fallback-text"> 2154 <span class="icon icon-american_express" aria-hidden="true"></span> 2155 <span class="fallback-text">American Express</span> 2156 </span> 2157 </li> 2158 2159 2160 2161 2162 </ul> 2163 </div> 2164 2165 2166 <div class="grid__item text-center"> 2167 <ul class="inline-list payment-icons"> 2168 2169 <li> 2170 <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_bank-transfer.svg" alt="payment_bank-transfer"> 2171 </li> 2172 2173 <li> 2174 <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_pbbcc.svg" alt="payment_pbbcc"> 2175 </li> 2176 2177 <li> 2178 <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_ipay88.svg" alt="payment_ipay88"> 2179 </li> 2180 2181 </ul> 2182 </div> 2183 2184 2185 <div class="grid__item text-center"> 2186 <ul class="inline-list payment-icons"> 2187 <li> 2188 <img src="https://s3-ap-southeast-1.amazonaws.com/eesb.public/images/payment/ssl_certified.png"> 2189 </li> 2190 </ul> 2191 </div> 2192 2193 </div> 2194 2195 2196 <div class="grid"> 2197 <div class="grid__item text-center"> 2198 2199 2200 <p class="site-footer__links"> 2201 2202 2203 2204 <a href="/legal/terms-of-service">Terms of Service</a> 2205 2206 2207 2208 2209 | <a href="/legal/privacy-policy">Privacy Policy</a> 2210 2211 2212 2213 2214 | <a href="/legal/refund-policy">Refund Policy</a> 2215 2216 2217 2218 </p> 2219 2220 </div> 2221 </div> 2222 2223 </div> 2224 </footer> 2225 2226 2227 2228 2229 2230 2231 2232 <div id="scrollTopButton" class="on-right" style="display: none"> 2233 <svg class="svg-icon" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22,18.25a1.21,1.21,0,0,1-.88-.37L12,8.77,2.88,17.88a1.24,1.24,0,0,1-1.76-1.76l10-10a1.24,1.24,0,0,1,1.76,0l10,10a1.24,1.24,0,0,1,0,1.76A1.21,1.21,0,0,1,22,18.25Z"/></svg> 2234 </div> 2235
2235<script> 2236 $( document ).ready(function() { 2237 var winScroll = $(this).scrollTop(), 2238 this_el = $("#scrollTopButton"); 2239 2240 // Header bar 2241 if(winScroll > 400){ 2242 this_el.fadeIn(); 2243 }else{ 2244 this_el.fadeOut(); 2245 } 2246 2247 $("#scrollTopButton").click(function() { 2248 $('html,body').animate({ scrollTop: 0 }); 2249 }); 2250 2251 $(window).scroll(function(){ 2252 var winScroll = $(this).scrollTop(); 2253 2254 // Header bar 2255 if(winScroll > 400){ 2256 this_el.fadeIn(); 2257 }else{ 2258 this_el.fadeOut(); 2259 } 2260 2261 }); 2262 }); 2263 </script>
2263 2264 2265 2266 2267 2268 2269
2269<script src="https://store-themes.easystore.co/619065/themes/3809/assets/fastclick.min.js?t=1788706088" type="text/javascript" ></script>
2269 2270
2270<script src="https://store-themes.easystore.co/619065/themes/3809/assets/timber.js?v1.2?t=1788706088" type="text/javascript" ></script>
2270 2271
2271<script src="https://store-themes.easystore.co/619065/themes/3809/assets/theme.js?t=1788706088" type="text/javascript" ></script>
2271 2272 2273 2274 2275 2276
2276<script> 2277 if (typeof Object.assign !== 'function') { 2278 // Must be writable: true, enumerable: false, configurable: true 2279 Object.defineProperty(Object, "assign", { 2280 value: function assign(target, varArgs) { // .length of function is 2 2281 'use strict'; 2282 if (target === null || target === undefined) { 2283 throw new TypeError('Cannot convert undefined or null to object'); 2284 } 2285 2286 var to = Object(target); 2287 2288 for (var index = 1; index < arguments.length; index++) { 2289 var nextSource = arguments[index]; 2290 2291 if (nextSource !== null && nextSource !== undefined) { 2292 for (var nextKey in nextSource) { 2293 // Avoid bugs when hasOwnProperty is shadowed 2294 if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { 2295 to[nextKey] = nextSource[nextKey]; 2296 } 2297 } 2298 } 2299 } 2300 return to; 2301 }, 2302 writable: true, 2303 configurable: true 2304 }); 2305 } 2306 </script>
2306 2307
2307<script src="https://store-themes.easystore.co/619065/themes/3809/assets/lozad.min.js?t=1788706088" type="text/javascript" ></script>
2307 2308
2308<script> 2309 const observer = lozad('.lozad', { 2310 loaded: function(el) { 2311 // Custom implementation on a loaded element 2312 el.onload = function() { 2313 el.classList.add('loaded'); 2314 }; 2315 } 2316 }); 2317 observer.observe(); 2318 </script>
2318 2319 2320 2321 2322 2323 2324 2325 2326
2327<script src="/assets/currencies.js" type="text/javascript" ></script>
vendor: 1 bytes, line 2327
2327
2328<script src="/assets/jquery.currencies.min.js" type="text/javascript" ></script>
vendor: 1 bytes, line 2328
2328
2329<script src="/assets/currencies_format.js" type="text/javascript" ></script>
2329 2330
2331<script> 2332Currency.format = "money_with_currency_format"; 2333var shopCurrency = 'MYR'; 2334var selectedCurrency = ''; 2335 2336 2337 Currency.convert = function(amount, from, to) { 2338 return amount; 2339 }; 2340 2341 2342if( $.cookie("currency") == null ){ 2343 2344 if( selectedCurrency != false ) { 2345 2346 Currency.convertAll(shopCurrency, selectedCurrency); 2347 jQuery('.selected-currency').text(Currency.currentCurrency); 2348 2349 } 2350 2351} 2352 2353/* Sometimes merchants change their shop currency, let's tell our JavaScript file */ 2354// Currency.moneyFormats[shopCurrency].money_with_currency_format = ""; 2355// Currency.moneyFormats[shopCurrency].money_format = "RM {{amount}} "; 2356 2357/* Default currency */ 2358var defaultCurrency = 'MYR'; 2359 2360/* Cookie currency */ 2361var cookieCurrency = Currency.cookie.read(); 2362 2363 cookieCurrency = shopCurrency; 2364 2365$("input[name=current_currency]").val(cookieCurrency); 2366if(cookieCurrency == null){ 2367 cookieCurrency = shopCurrency; 2368 Currency.cookie.write(shopCurrency); 2369} 2370/* Fix for customer account pages */ 2371jQuery('span.money span.money').each(function() { 2372 jQuery(this).parents('span.money').removeClass('money'); 2373}); 2374/* Saving the current price */ 2375jQuery('span.money').each(function() { 2376 jQuery(this).attr('data-currency-MYR', jQuery(this).html()); 2377}); 2378// If there's no cookie. 2379if (cookieCurrency == null) { 2380 if (shopCurrency !== defaultCurrency) { 2381 Currency.convertAll(shopCurrency, defaultCurrency); 2382 } 2383 else { 2384 Currency.currentCurrency = defaultCurrency; 2385 } 2386} 2387// If the cookie value does not correspond to any value in the currency dropdown. 2388else if (jQuery('[name=currencies]').size() && jQuery('[name=currencies] option[value=' + cookieCurrency + ']').size() === 0) { 2389 Currency.currentCurrency = shopCurrency; 2390 Currency.cookie.write(shopCurrency); 2391} 2392else if (cookieCurrency === shopCurrency) { 2393 Currency.currentCurrency = shopCurrency; 2394 Currency.convertAll(shopCurrency, cookieCurrency); 2395} 2396else { 2397 Currency.convertAll(shopCurrency, cookieCurrency); 2398} 2399jQuery('[name=currencies]').val(Currency.currentCurrency).change(function() { 2400 var newCurrency = jQuery(this).val(); 2401 2402 2403 Currency.cookie.write(newCurrency) 2404 if ('customers' == 'cart') { 2405 const params = new URLSearchParams(window.location.search); 2406 params.set('delete_cache', 1); 2407 window.location.search = params; 2408 } else { 2409 window.location.reload(); 2410 } 2411 2412}); 2413var original_selectCallback = window.selectCallback; 2414var selectCallback = function(variant, selector) { 2415 var currencies = null; 2416 original_selectCallback(variant, selector); 2417 if(typeof jQuery('[name=currencies]').val() == "undefined"){ 2418 currencies = shopCurrency; 2419 } 2420 else{ 2421 currencies = jQuery('[name=currencies]').val(); 2422 } 2423 Currency.convertAll(shopCurrency, currencies); 2424 jQuery('.selected-currency').text(Currency.currentCurrency); 2425}; 2426$('body').on('ajaxCart.afterCartLoad', function(cart) { 2427 Currency.convertAll(shopCurrency, jQuery('[name=currencies]').val()); 2428 jQuery('.selected-currency').text(Currency.currentCurrency); 2429}); 2430jQuery('.selected-currency').text(Currency.currentCurrency); 2431</script>
2431 2432 2433 2434 2435<!-- Snippet:global/body_end: Product Description Tabs --> 2436 2437 <style> 2438 .product-description-tabs{ 2439 color: rgba(13,12,12,0.87); 2440 } 2441 .prod-desc-tab-container { 2442 padding: 15px; 2443 margin-right: auto; 2444 margin-left: auto; 2445 background-color: rgba(249,252,252,0.8); 2446 } 2447 /* Style the list */ 2448 .prod-desc-tab { 2449 list-style-type: none; 2450 margin: 0; 2451 padding: 0; 2452 border-bottom: solid 1px #ddd; 2453 /*overflow: hidden; 2454 border: 1px solid #e6e6e6; 2455 background-color: #fefefe; 2456 border-bottom: 1px solid #ddd;*/ 2457 } 2458 2459 /* Float the list items side by side */ 2460 li.tablinks { 2461 display: inline-block; 2462 border-top: 3px solid transparent; 2463 border-left: 1px solid transparent; 2464 border-right: 1px solid transparent; 2465 margin-bottom: -1px; 2466 margin-right: 3px; 2467 border-radius: 4px 4px 0 0; 2468 background-color: rgba(212,212,212,0.3); 2469 } 2470 2471 /* Style the links inside the list items */ 2472 li.tablinks a { 2473 color: rgba(13,12,12,0.87); 2474 cursor: pointer; 2475 margin-right: 2px; 2476 line-height: 1.42857143; 2477 display: block; 2478 padding: 10px 15px; 2479 } 2480 2481 /* Change background color of links on hover */ 2482 li.tablinks:hover { 2483 background-color: rgba(249,252,252,0.8); 2484 border-bottom-color: transparent; 2485 border-top: 3px solid #ddd; 2486 border-left: 1px solid #ddd; 2487 border-right: 1px solid #ddd; 2488 } /*rgba(212,212,212,0.3)*/ 2489 2490 /* Create an active/current tablink class */ 2491 li.tablinks a:focus, li.tablinks.active{ 2492 border-top: 3px solid #ddd; 2493 border-left: 1px solid #ddd; 2494 border-right: 1px solid #ddd; 2495 background-color: rgba(249,252,252,0.8); 2496 } 2497 2498 /* Style the tab content */ 2499 .prod-desc-tab-content { 2500 display: none; 2501 padding: 15px 15px; 2502 /*border: 1px solid #ccc;*/ 2503 border-top: none; 2504 clear: both; 2505 -webkit-animation: fadeEffect 1s; 2506 animation: fadeEffect 1s; /* Fading effect takes 1 second */ 2507 } 2508 .prod-desc-tab-content ul{ 2509 list-style-type: disc; 2510 } 2511 2512 /* if user select is_show_title is true, the title will be displayed; if not, hide the title*/ 2513 .prod-desc-tab-content > h2{ 2514 display:block; 2515 } 2516 2517 @-webkit-keyframes fadeEffect { 2518 from {opacity: 0;} 2519 to {opacity: 1;} 2520 } 2521 2522 @keyframes fadeEffect { 2523 from {opacity: 0;} 2524 to {opacity: 1;} 2525 } 2526 2527 .tab_drawer_heading { display: none; } 2528 2529 @media screen and (max-width: 480px) { 2530 .prod-desc-tab { 2531 display: none; 2532 } 2533 2534 2535 .tab_drawer_heading { 2536 background-color: transparent; 2537 color: rgba(13,12,12,0.87); 2538 border-bottom: 1px solid #ddd; 2539 margin: 0; 2540 padding: 6px 12px; 2541 display: block; 2542 cursor: pointer; 2543 -webkit-touch-callout: none; 2544 -webkit-user-select: none; 2545 -khtml-user-select: none; 2546 -moz-user-select: none; 2547 -ms-user-select: none; 2548 user-select: none; 2549 position: relative; 2550 } 2551 .tab_drawer_heading:after { 2552 content: ''; 2553 top: 50%; 2554 right: 40px; 2555 position: absolute; 2556 border: solid black; 2557 border-width: 0 3px 3px 0; 2558 display: inline-block; 2559 width: 10px; 2560 height: 10px; 2561 margin-top: -5px; 2562 transform: rotate(45deg); 2563 -webkit-transform: rotate(45deg); 2564 -webkit-transition: all 200ms linear; 2565 -moz-transition: all 200ms linear; 2566 -ms-transition: all 200ms linear; 2567 -o-transition: all 200ms linear; 2568 transition: all 200ms linear; 2569 } 2570 .d_active { 2571 background-color: rgba(212,212,212,0.3); 2572 } 2573 .d_active.tab_drawer_heading:after{ 2574 margin-top: -3px; 2575 transform: rotate(-135deg); 2576 -webkit-transform: rotate(-135deg); 2577 } 2578 } 2579 </style> 2580 2581
2581<script type="text/javascript"> 2582 2583 // If the page has no jquery 2584 // if(typeof jQuery == 'undefined'){ 2585 // console.log(456); 2586 // var script = document.createElement('script'); 2587 // script.type = "text/javascript"; 2588 // script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"; 2589 // console.log(script); 2590 // document.getElementsByTagName('head')[0].appendChild(script); 2591 // } 2592 2593 2594 /* if in tab mode */ 2595 $("body").on("click", ".tablinks", function(){ 2596 var id = $(this).data("prod-desc-id"); 2597 2598 // Get all elements with class="prod-desc-tab-content" and hide them 2599 $(".prod-desc-tab-content").hide(); 2600 2601 // Get all elements with class="tablinks" and remove the class "active" 2602 $(".tablinks").removeClass("active"); 2603 2604 // Show the current tab, and add an "active" class to the link that opened the tab 2605 $("#"+id+"_desc_tab_content").show(); 2606 $(this).addClass("active"); 2607 2608 //make mobile view(drawer mode) also in same tab 2609 $(".tab_drawer_heading").removeClass("d_active"); 2610 $(".tab_drawer_heading[data-prod-desc-id='"+id+"']").addClass("d_active"); 2611 2612 }); 2613 /* if in drawer mode */ 2614 $("body").on("click", ".tab_drawer_heading", function() { 2615 var id = $(this).data("prod-desc-id"), 2616 active = $(this).hasClass("d_active") 2617 2618 $(".prod-desc-tab-content").hide(); 2619 $(".tab_drawer_heading").removeClass("d_active"); 2620 2621 if(!active){ 2622 $("#"+id+"_desc_tab_content").show(); 2623 $(this).addClass("d_active"); 2624 window.scroll({ 2625 top: $(this).offset().top - 120, 2626 left: 0, 2627 behavior: 'smooth' 2628 }); 2629 } 2630 2631 $(".tablinks").removeClass("active"); 2632 $(".tablinks[data-prod-desc-id='"+id+"']").addClass("active"); 2633 }); 2634 2635 $(function(){ 2636 var x = $(".product-description").find("h1, h2, h3, h4, h5, h6"); 2637 var title = null; 2638 var body = null; 2639 2640 if(x.length > 1){ 2641 $(".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>"); 2642 $(x).each(function(k, v){ 2643 title = $(v).text(); 2644 2645 if(k == 0){ 2646 body = $(x[0]).nextUntil(x[1]).clone(); 2647 $(".prod-desc-tab").append('<li class="tablinks active" data-prod-desc-id="'+k+'"><a>'+title+'</a></li>'); 2648 $(".prod-desc-tab-container").append('<h3 class="tab_drawer_heading d_active" data-prod-desc-id="'+k+'">'+title+'</h3><div id="'+k+'_desc_tab_content" class="prod-desc-tab-content" style="display:block"><h2>'+title+'</h2></div>'); 2649 $("#"+k+"_desc_tab_content h2").after(body); 2650 } 2651 else if(k == x.length){ 2652 body = $(x[k]).nextAll().clone(); 2653 $(".prod-desc-tab").append('<li class="tablinks" data-prod-desc-id="'+k+'"><a>'+title+'</a></li>'); 2654 $(".prod-desc-tab-container").append('<h3 class="tab_drawer_heading" data-prod-desc-id="'+k+'">'+title+'</h3><div id="'+k+'_desc_tab_content" class="prod-desc-tab-content" style="display:none"><h2>'+title+'</h2></div>'); 2655 $("#"+k+"_desc_tab_content h2").after(body); 2656 } 2657 else{ 2658 body = $(x[k]).nextUntil(x[k+1]).clone(); 2659 $(".prod-desc-tab").append('<li class="tablinks" data-prod-desc-id="'+k+'"><a>'+title+'</a></li>'); 2660 $(".prod-desc-tab-container").append('<h3 class="tab_drawer_heading" data-prod-desc-id="'+k+'">'+title+'</h3><div id="'+k+'_desc_tab_content" class="prod-desc-tab-content" style="display:none"><h2>'+title+'</h2></div>'); 2661 $("#"+k+"_desc_tab_content h2").after(body); 2662 } 2663 }); 2664 $(".product-description").hide(); 2665 } 2666 2667 }); 2668 </script>
2668 2669 2670<!-- /Snippet --> 2671 2672<!-- Snippet:global/body_end: Insert Code --> 2673 2674<!--Acurex LP-->
2675<script> 2676 // scroll reveal 2677 const revealEls = document.querySelectorAll('.reveal'); 2678 const io = new IntersectionObserver((entries)=>{ 2679 entries.forEach(e=>{ if(e.isIntersecting){ e.target.classList.add('in'); } }); 2680 }, {threshold:0.18}); 2681 revealEls.forEach(el=>io.observe(el)); 2682 2683 // recovery rail 2684 const sections = document.querySelectorAll('section[data-rail]'); 2685 const railDots = document.getElementById('railDots'); 2686 const railFill = document.getElementById('railFill'); 2687 sections.forEach((s,i)=>{ 2688 const dot = document.createElement('div'); 2689 dot.className='dot'; 2690 dot.dataset.target = s.id; 2691 railDots.appendChild(dot); 2692 }); 2693 const dotEls = railDots.querySelectorAll('.dot'); 2694 2695 function onScroll(){ 2696 const scrollTop = window.scrollY; 2697 const docHeight = document.body.scrollHeight - window.innerHeight; 2698 const pct = Math.min(100, Math.max(0, (scrollTop/docHeight)*100)); 2699 railFill.style.height = pct + '%'; 2700 2701 let activeIdx = 0; 2702 sections.forEach((s,i)=>{ 2703 const r = s.getBoundingClientRect(); 2704 if(r.top < window.innerHeight*0.5){ activeIdx = i; } 2705 }); 2706 dotEls.forEach((d,i)=> d.classList.toggle('active', i<=activeIdx)); 2707 } 2708 window.addEventListener('scroll', onScroll, {passive:true}); 2709 onScroll(); 2710 2711 // comparison reveal 2712 const revealBtn = document.getElementById('revealBtn'); 2713 const cmpWrap = document.getElementById('cmpWrap'); 2714 revealBtn.addEventListener('click', ()=>{ 2715 cmpWrap.classList.add('is-revealed'); 2716 cmpWrap.querySelectorAll('.blur-zone').forEach(el=>el.classList.add('revealed')); 2717 }); 2718</script>
2718 2719<!-- /Snippet -->
2720<script> 2721 2722 /* 2723 2724 ------ 2725 Events 2726 ------ 2727 2728 pages/viewed 2729 2730 customers/signup 2731 2732 customers/login 2733 2734 products/searched 2735 2736 collections/viewed 2737 2738 products/viewed 2739 2740 products/shared 2741 2742 wishlists/item_added 2743 2744 carts/items_added 2745 2746 carts/viewed 2747 2748 carts/item_removed 2749 2750 checkouts/initiated 2751 2752 checkouts/shipping_info_added 2753 2754 checkouts/payment_info_added 2755 2756 checkouts/completed 2757 2758 orders/placed 2759 2760 orders/purchased 2761 2762 payments/captured 2763 2764 payments/failed 2765 2766 */ 2767 2768 window.__latest_cart = window.__latest_cart || null; 2769 2770 const _selector = document.querySelector.bind(document), 2771 _selectorAll = document.querySelectorAll.bind(document) 2772 2773 document.addEventListener('DOMContentLoaded', (event) => { 2774 2775 const default_currency = getCookie("currency") 2776 const customer_id = window.__st.cid 2777 const template = window.__st.p 2778 2779 onPageView() 2780 2781 //-----------------------// 2782 // Configs // 2783 //-----------------------// 2784 2785 window.dataLayer = window.dataLayer || [] 2786 2787 Array.prototype.last = Array.prototype.last || function() { 2788 return this[this.length - 1] || null 2789 } 2790 2791 Array.prototype.first = Array.prototype.first || function() { 2792 return this[0] || null 2793 } 2794 2795 //----------------------// 2796 // Triggers // 2797 //----------------------// 2798 2799 const XHR = window.XMLHttpRequest 2800 2801 function xhr() { 2802 2803 const xhr = new XHR() 2804 2805 xhr.addEventListener("readystatechange", function() { 2806 2807 if(xhr.readyState != 4) return 2808 2809 try { 2810 2811 const response_url = xhr.responseURL 2812 2813 if (response_url.includes("cart/add")) { 2814 2815 window.__latest_cart = JSON.parse(xhr.response) 2816 2817 onCartItemsAdded() // ok 2818 2819 } 2820 2821 if (response_url.includes("cart/remove_item_quantity")) { 2822 2823 window.__latest_cart = JSON.parse(xhr.response) 2824 2825 onCartItemRemoved() // ok 2826 2827 } 2828 2829 if (response_url.includes("new_cart?retrieve=true")) { 2830 2831 result = JSON.parse(xhr.response) 2832 2833 if (result.cart) { 2834 window.__latest_cart = result.cart 2835 } 2836 2837 } 2838 2839 } catch(e) { 2840 2841 console.error(e) 2842 2843 } 2844 2845 }, false); 2846 2847 return xhr 2848 2849 } 2850 2851 window.XMLHttpRequest = xhr 2852 2853 switch(template) { 2854 2855 case 'cart': onCartView() // ok 2856 break 2857 case 'product': onProductView() // ok 2858 break 2859 case 'collection': onCollectionView() // ok 2860 break 2861 case 'blog': onBlogView() 2862 break 2863 case 'article': onArticleView() 2864 break 2865 case 'payment_completed': onOrderPlace() 2866 break 2867 case 'payment_fail': onPaymentFail() 2868 break 2869 2870 } 2871 2872 // _selector('form[action="/checkout/payments"]').addEventListener("submit", onPaymentInfoAdded(_selector('form[action="/checkout/payments"]'))) 2873 if (_selector('form[action="/checkout/detail"]')) _selector('form[action="/checkout/detail"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/detail"]'))}) // ok 2874 if (_selector('form[action="/checkout/shipping"]')) _selector('form[action="/checkout/shipping"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/shipping"]'))}) // ok 2875 if (_selector('form[action="/account/register"]')) _selector('form[action="/account/register"]').addEventListener("submit", onSignUp) // ok 2876 if (_selector('form[action="/account/login"]')) _selector('form[action="/account/login"]').addEventListener("submit", onLogin) // ok 2877 if (_selector('form[action="/search"]')) _selector('form[action="/search"]').addEventListener("submit", onProductSearch()) // ok 2878 if (_selector('#line-login-btn')) _selector('#line-login-btn').addEventListener('click', onLineLogin) // ok 2879 if (_selector('#PlaceOrder')) _selector('#PlaceOrder').addEventListener("click", ()=>{onCheckoutComplete(_selector('form[action="/checkout/payments"]'))}); // ok 2880 if (_selector('#add_wishlist')) _selector('#add_wishlist').addEventListener("click", onWishlistItemAdded) // ok 2881 if (_selectorAll('a[href="/account/logout"]')) _selectorAll('a[href="/account/logout"]').forEach(logoutButton => logoutButton.addEventListener("click", onLogout)) // ok 2882 if (_selector('.CartDrawerTrigger.cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link').addEventListener("click", onCartView) // ok 2883 if (_selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link').addEventListener("click", onCartView) // ok 2884 if (_selectorAll('a[class^="share-"]')) _selectorAll('a[class^="share-"]').forEach(shareButton => shareButton.addEventListener("click", ()=>{onProductShare(shareButton)}) ) // ok 2885 if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate)) 2886 2887 // For append elements 2888 const bodyMutationObserver = new MutationObserver(() => { 2889 if (_selector('#form__spc #PlaceOrder')) _selector('#form__spc #PlaceOrder').addEventListener("click", onSinglePageCheckout) // ok 2890 if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate)) 2891 }); 2892 bodyMutationObserver.observe(_selector("body"), {subtree: true, childList: true}); 2893 2894 //------------------------------// 2895 // Event handlers // 2896 //------------------------------// 2897 2898 function onPageView() { 2899 2900 EasyStore.Event.dispatch('pages/viewed', { 2901 page: { 2902 type: template, 2903 title: document.title, 2904 description: _selector('meta[name=description]') ? _selector('meta[name=description]').getAttribute('content') : null, 2905 url: location.href, 2906 } 2907 }) 2908 2909 } 2910 2911 function onSignUp() { 2912 2913 const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/) 2914 const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/) 2915 2916 const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "") 2917 2918 let data = {} 2919 2920 if (email_regex.test(email_or_phone)) { 2921 data.method = 'email' 2922 data.email = email_or_phone 2923 } 2924 2925 if (phone_regex.test(email_or_phone)) { 2926 data.method = "phone" 2927 data.phone = email_or_phone 2928 } 2929 2930 if (!data.method) return 2931 2932 EasyStore.Event.dispatch('customers/signup', data) 2933 2934 } 2935 2936 function onLogin() { 2937 2938 const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/) 2939 const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/) 2940 2941 const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "") 2942 2943 let data = {} 2944 2945 if (email_regex.test(email_or_phone)) { 2946 data.method = 'email' 2947 data.email = email_or_phone 2948 } 2949 2950 if (phone_regex.test(email_or_phone)) { 2951 data.method = "phone" 2952 data.phone = email_or_phone 2953 } 2954 2955 if (!data.method) return 2956 2957 EasyStore.Event.dispatch('customers/login', data) 2958 2959 } 2960 2961 function onLineLogin() { 2962 2963 EasyStore.Event.dispatch('customers/login', { method: 'line' }) 2964 2965 } 2966 2967 function onLogout() { 2968 2969 EasyStore.Event.dispatch('customers/logout', { customer_id }) 2970 2971 } 2972 2973 function onBlogView() { 2974 2975 const blog = "" 2976 2977 EasyStore.Event.dispatch('blogs/viewed', { blog }) 2978 2979 } 2980 2981 function onArticleView() { 2982 2983 const article = "" 2984 2985 EasyStore.Event.dispatch('articles/viewed', { article }) 2986 2987 } 2988 2989 function onProductSearch() { 2990 2991 const query = _selector('input[name=q]').value 2992 2993 if (!query) return 2994 2995 EasyStore.Event.dispatch('products/searched', { query }) 2996 2997 } 2998 2999 function onCollectionView() { 3000 3001 const collection = "" 3002 3003 EasyStore.Event.dispatch('collections/viewed', { collection }) 3004 3005 } 3006 3007 function onProductView() { 3008 3009 const product = "" 3010 3011 EasyStore.Event.dispatch("products/viewed", { product }) 3012 3013 } 3014 3015 function onProductShare(el) { 3016 3017 const product = "" 3018 3019 const channel = el.getAttribute("class").split("-").last() 3020 3021 EasyStore.Event.dispatch('products/shared', { product, channel }) 3022 3023 } 3024 3025 function onWishlistItemAdded() { 3026 3027 let product = "" 3028 const quantity = _selector("#Quantity").value 3029 3030 EasyStore.Event.dispatch('wishlists/item_added', { product }) 3031 3032 } 3033 3034 async function onCartItemsAdded() { 3035 3036 const cart = await getCart() 3037 3038 if(cart && cart.items != undefined && cart.items.length > 0) { 3039 3040 EasyStore.Event.dispatch('carts/item_added', { cart }) 3041 3042 } 3043 3044 } 3045 3046 async function onCartView() { 3047 3048 const cart = await getCart() 3049 3050 EasyStore.Event.dispatch('carts/viewed', { cart }) 3051 3052 } 3053 3054 async function onCartItemRemoved() { 3055 3056 const cart = await getCart() 3057 3058 cart.items = [] 3059 3060 if(cart) { 3061 3062 EasyStore.Event.dispatch('carts/item_removed', { cart }) 3063 3064 } 3065 3066 } 3067 3068 async function onCheckoutInitiate() { 3069 3070 const cart = await getCart() 3071 3072 EasyStore.Event.dispatch('checkouts/initiated', { cart }) 3073 3074 } 3075 3076 async function onShippingInfoAdded(form) { 3077 let checkout = getCheckout() 3078 3079 let form_data = {} 3080 new FormData(form).forEach((value, key) => form_data[key] = value) 3081 3082 let shipping_tier = null 3083 3084 if (form_data.type && form_data.type.startsWith("r_pickup")) { 3085 shipping_tier = `Pickup - ${form_data.pick_location}` 3086 } 3087 3088 if (form_data.s_id) {
3089 shipping_tier = _selector(`input[id='`+form_data.s_id+`']`).getAttribute("data-shipping-name") 3090 } 3091 3092 if (!shipping_tier) return 3093 3094 EasyStore.Event.dispatch('checkouts/shipping_info_added', { checkout, shipping_tier }) 3095 3096 } 3097 3098 async function onPaymentInfoAdded(form) { 3099 3100 let checkout = getCheckout() 3101 3102 let payment_type = new FormData(form).get('payment_method') 3103 3104 EasyStore.Event.dispatch("checkouts/payment_info_added", { checkout, payment_type }) 3105 3106 } 3107 3108 async function onOrderPlace() { 3109 3110 let cart_token = getCookie("cart_js") 3111 let previous_cart_token = getCookie("previous_cart_ga4_js") 3112 3113 if (previous_cart_token && previous_cart_token == cart_token) { 3114 // Prevent duplicate purchase tracking 3115 return 3116 } 3117 3118 let order = getOrder() 3119 3120 EasyStore.Event.dispatch('orders/placed', { order }) 3121 3122 if(order.is_manual_payment) { 3123 3124 EasyStore.Event.dispatch('orders/purchased', { order }) 3125 3126 } 3127 3128 const last_transaction = order.transactions.last() 3129 3130 if (last_transaction.status) { 3131 3132 EasyStore.Event.dispatch('orders/purchased', { order }) 3133 EasyStore.Event.dispatch('payments/captured', { order }) 3134 3135 } 3136 3137 } 3138 3139 async function onPaymentFail() { 3140 3141 const order = getOrder() 3142 3143 EasyStore.Event.dispatch('payments/failed', { order }) 3144 3145 } 3146 3147 async function onCheckoutComplete(form) { 3148 3149 onPaymentInfoAdded(form) 3150 3151 const checkout = getCheckout() 3152 3153 EasyStore.Event.dispatch('checkouts/completed', { checkout }) 3154 3155 } 3156 3157 async function onSinglePageCheckout() { 3158 3159 // let checkout = $("[data-app-checkout]").data("app-checkout") 3160 3161 let checkout = getCheckout() 3162 3163 // const payment_type = _selector("#app_spc_payment_method").find(`[class*="label-content"]`).first().find("b").first().text() 3164 const payment_type = _selector("#app_spc_payment_method").getElementsByClassName('label-content')[0].getElementsByTagName('b')[0].innerHTML 3165 3166 const shipping_method = _selector("#delivery_method").value 3167 3168 let shipping_tier = null 3169 let app_spc_customer_info_label = _selector("#app_spc_customer_info").getElementsByClassName('label-content') 3170 if (shipping_method == "shipping") { 3171 shipping_tier = app_spc_customer_info_label[app_spc_customer_info_label.length - 1].getElementsByTagName('b')[0].innerHTML 3172 } 3173 3174 if (shipping_method == "pickup") { 3175 shipping_tier = app_spc_customer_info_label[0].innerHTML 3176 } 3177 3178 if (shipping_tier) { 3179 3180 EasyStore.Event.dispatch('checkouts/shipping_info_added', { 3181 checkout, 3182 shipping_tier, 3183 }) 3184 3185 } 3186 3187 if (payment_type) { 3188 3189 EasyStore.Event.dispatch('checkouts/payment_info_added', { 3190 checkout, 3191 payment_type, 3192 }) 3193 3194 } 3195 3196 EasyStore.Event.dispatch('checkouts/completed', { checkout }) 3197 3198 } 3199 3200 }) 3201 3202 3203 //-----------------------// 3204 // Functions // 3205 //-----------------------// 3206 3207 function getCookie(name) { 3208 3209 name += "=" 3210 3211 decodedCookie = decodeURIComponent(document.cookie) 3212 3213 ca = decodedCookie.split(";") 3214 3215 for(i = 0; i < ca.length; i++) { 3216 c = ca[i] 3217 while (c.charAt(0) == " ") { 3218 c = c.substring(1) 3219 } 3220 if (c.indexOf(name) == 0) { 3221 return c.substring(name.length, c.length) 3222 } 3223 } 3224 3225 return "" 3226 3227 } 3228 3229 const parsePrice = price => { 3230 if(typeof price === 'string') { 3231 return parseFloat(price.split(',').join('')) 3232 } 3233 3234 return price 3235 } 3236 3237 const requestCart = async (method, data) => { 3238 3239 let response = await fetch('/cart.json', {method: 'GET',headers: {'Content-Type': 'application/json'}}) 3240 result = await response.json() 3241 3242 return result.cart 3243 3244 } 3245 const getCart = async (latest = false) => { 3246 3247 let cart = window.__latest_cart 3248 3249 const cart_invalid = !cart || !cart.items || (cart.total_price > 0 && !cart.items.length) 3250 3251 if(latest || cart_invalid) { 3252 cart = await requestCart() 3253 } 3254 3255 cart.items = cart.items || [] 3256 3257 return mapCart(cart) 3258 3259 } 3260 3261 const getCheckout = async () => { 3262 mapCheckout(window.__latest_cart || await requestCart()) 3263 } 3264 3265 const getOrder = async () => { 3266 mapOrder(window.__latest_cart || await requestCart()) 3267 } 3268 3269 //-----------------------// 3270 // Mappers // 3271 //-----------------------// 3272 3273 const fallbackAttribute = (object, attribute) => { 3274 3275 if(!Array.isArray(attribute)) { 3276 attribute = [attribute] 3277 } 3278 3279 let final_value = null 3280 3281 do { 3282 3283 final_value = object[attribute.shift()] 3284 3285 } while(!final_value && attribute.length) 3286 3287 return final_value 3288 3289 } 3290 3291 const map = (object, mapper) => { 3292 3293 const newObject = {} 3294 3295 for(const key in mapper) { 3296 3297 // Handle different keys between new and old format
3298 newObject[key] = fallbackAttribute(object, mapper[key]) 3299 3300 // Cast price to float 3301 if(newObject[key] && ['price', 'amount', 'discount', 'discounts'].some(x => key.endsWith(x))) { 3302 newObject[key] = parsePrice(newObject[key]) 3303 } 3304 3305 if(newObject[key] === undefined) { 3306 delete newObject[key] 3307 } 3308 3309 } 3310 3311 return newObject 3312 3313 } 3314 3315 const mapCart = cart => { 3316 3317 const oldCart = cart 3318 3319 const mapper = { 3320 id: 'id', 3321 currency: 'currency', 3322 item_count: 'item_count', 3323 items: 'items', 3324 total_price: 'total_price', 3325 latest_items: 'latest_items' 3326 } 3327 3328 cart = map(cart, mapper) 3329 3330 const discounts = (oldCart.storewide_discounts || []).concat((oldCart.voucher_discounts || [])) 3331 3332 cart.discount_applications = discounts.map(discount => ({ 3333 title: discount.voucher_code || null, 3334 value: parsePrice(discount.amount), 3335 })) 3336 3337 cart.original_total_price = cart.items.length 3338 ? cart.items 3339 .map(item => item.original_price) 3340 .reduce((sum, price) => sum + price) 3341 : 0 3342 3343 cart.total_discount = cart.discount_applications.length 3344 ? cart.discount_applications 3345 .map(discount => parsePrice(discount.value)) 3346 .reduce((sum, value) => sum + value) 3347 : 0 3348 3349 cart.items = cart.items.map(item => mapLineItem(item)) 3350 3351 return cart 3352 3353 } 3354 3355 const mapCheckout = checkout => { 3356 3357 const mapper = { 3358 note: 'note', 3359 attributes: 'note_attributes', 3360 billing_address: 'billing_address', 3361 currency: 'currency', 3362 customer_id: 'customer_id', 3363 discounts_amount: 'total_discount', 3364 id: 'id', 3365 line_items: 'order_item', 3366 order_number: 'order_number', 3367 shipping_address: 'shipping_address', 3368 shipping_price: 'shipping_tax', 3369 shipping_method: 'shipping_method_name', 3370 tax_price: 'total_tax', 3371 } 3372 3373 checkout = map(checkout, mapper) 3374 3375 checkout.requires_shipping = checkout.line_items.some(item => item.shipping_required) 3376 3377 checkout.line_items = checkout.line_items.map(item => mapLineItem(item)) 3378 3379 return checkout 3380 3381 } 3382 3383 const mapOrder = order => { 3384 3385 const mapper = { 3386 attributes: 'note_attributes', 3387 billing_address: 'billing_address', 3388 cancelled: 'is_cancelled', 3389 cancelled_at: 'cancelled_at', 3390 created_at: 'created_at', 3391 customer_id: 'customer_id', 3392 // discount_applications: 'discount_applications', 3393 email: 'email', 3394 financial_status: 'financial_status', 3395 fulfillment_status: 'fulfillment_status', 3396 line_items: 'order_item', 3397 note: 'note', 3398 order_number: 'order_number', 3399 phone: 'phone', 3400 shipping_address: 'shipping_address', 3401 shipping_methods: 'shipping_methods', 3402 shipping_price: 'total_shipping', 3403 subtotal_price: 'subtotal_price', 3404 // tax_lines: 'tax_lines', 3405 tax_price: 'total_tax', 3406 total_discounts: 'total_discount', 3407 total_net_amount: 'total_amount_include_transaction', 3408 total_price: 'total_price', 3409 transactions: 'transaction_records', 3410 is_manual_payment: 'is_manual_payment', 3411 } 3412 3413 order.email = order.billing_address.email 3414 order.phone = order.billing_address.phone 3415 order.shipping_method = order.shipping_method_name 3416 3417 order = map(order, mapper) 3418 3419 order.line_items = order.line_items.map(item => mapLineItem(item)) 3420 order.transactions = order.transactions.map(transaction => mapTransaction(transaction)) 3421 3422 return order 3423 3424 } 3425 3426 const mapLineItem = line_item => { 3427 3428 const old_line_item = line_item 3429 3430 const mapper = { 3431 final_price: 'price', 3432 image: 'img_url', 3433 message: 'message', 3434 original_line_price: 'original_line_price', 3435 original_price: 'original_price', 3436 properties: 'properties', 3437 quantity: 'quantity', 3438 requires_shipping: 'shipping_required', 3439 sku: 'sku', 3440 taxable: 'taxable', 3441 title: 'product_name', 3442 product_name: 'product_name', 3443 url: 'url', 3444 product_id: 'product_id', 3445 variant_id: 'variant_id', 3446 id: ['id', 'i_id'], 3447 } 3448 3449 line_item = map(line_item, mapper) 3450 3451 line_item.product_id = line_item.product_id || (old_line_item.product && old_line_item.product.id) || null 3452 line_item.variant_id = line_item.variant_id || (old_line_item.variant && old_line_item.variant.id) || null 3453 line_item.image = line_item.image || (old_line_item.image && old_line_item.image.url) || null 3454 3455 return line_item 3456 3457 } 3458 3459 const mapTransaction = transaction => { 3460 3461 const mapper = { 3462 amount: 'amount', 3463 created_at: 'created_at', 3464 gateway: 'gateway_type', 3465 id: 'id', 3466 status: 'status', 3467 } 3468 3469 transaction = map(transaction, mapper) 3470 3471 return transaction 3472 3473 } 3474 3475 3476</script>
3476 3477 3478</div> 3479 3480 3481 <div id="CartDrawer" class="cart-drawer" data-fetch="0"> 3482 3483 3484 <div class="cart-drawer-wrapper"> 3485 <div id="cart-promotion-top"></div> 3486 3487 3488 <div id="CartTemplate"> 3489 3490 3491 3492 3493 <div id="noCartItem" class="cart-drawer-content"> 3494 <div class="cart-drawer-content-wrapper text-center"> 3495 <div class="section-header"> 3496 <span></span> 3497 <span class="CartDrawerTrigger icon icon-x"></span> 3498 </div> 3499 <div class="section-header__title h2">Your cart is currently empty.</div> 3500 <a class="btn btn--secondary" href="/collections/all">Continue shopping</a> 3501 </div> 3502 </div> 3503 3504 3505 3506 3507 </div> 3508 3509 <link href="/assets/css/promotion.css?v2.94" rel="stylesheet" type="text/css" media="screen" /> 3510<div id="cart-promotion-section"></div> 3511
3512<script>var shop_money_format = "<span class=money data-ori-price='{{amount}}'>RM {{amount}} </span>";</script>
vendor: 1 bytes, line 3512
3512
3513<script src="/assets/js/promotion/promotion.js?v1.11" type="text/javascript"></script>
3513 3514
3515<script> 3516 3517 window.EasyStore = window.EasyStore || {}; 3518 window.EasyStore.Promotion = window.EasyStore.Promotion || {}; 3519 3520 var get_cart_promo_initial = false, 3521 current_template = 'customers'; 3522 3523 window.EasyStore.Promotion.updateCartPromotion = function (){ 3524 get_cart_promo_initial = true 3525 $.ajax({ 3526 type: "GET", 3527 dataType: 'json', 3528 url: "/new_cart/promotion", 3529 success: function(response){ 3530 $("#cart-promotion-section").html(response["cart/content_bottom"].trim()); 3531 $("#cart-promotion-top").html(response["cart/content_top"].trim()); 3532 3533 promoVariantDetailInitial() 3534 }, 3535 error: function(xhr){ 3536 } 3537 }); 3538 } 3539 3540 3541 if(current_template == 'cart') { 3542 document.addEventListener("DOMContentLoaded", function() { 3543 window.EasyStore.Promotion.updateCartPromotion() 3544 }); 3545 } 3546 3547</script>
vendor: 1 bytes, line 3547
3547
3548<script> 3549 document.addEventListener('DOMContentLoaded', function () { 3550 window._getVoucherErrorTranslation = Object.assign(window._getVoucherErrorTranslation || {}, { 3551 "condition_not_matched": "Voucher condition not matched", 3552 "promotion_unavailable": "This promotion is currently unavailable", 3553 "available_on": "Available on channels", 3554 "available_on_only": "Available on channels only", 3555 "available_with_locations": "Available on channels (locations only)", 3556 "pos_at_locations": "Retail Store at locations only", 3557 "channel_website": "Website", 3558 "channel_mobile": "Mobile Apps", 3559 "channel_pos": "Retail Store" 3560 }); 3561 }); 3562</script>
3562 3563 3564 </div> 3565 3566 3567 3568</div> 3569 3570<div id="toast"><div id="toastContent"></div></div> 3571<style> 3572 .cart-drawer .cart-drawer-content .cart-sticky-button-wrapper a.btn.CartDrawerTrigger{margin-bottom: 10px !important;} 3573 #toastContent a{color: #fff;text-decoration: underline;margin-top: 10px;display: block;} 3574 #toastContent .svg-icon{margin-right: 8px;margin-top: -1px;} 3575</style> 3576
3577<script type="text/javascript"> 3578 $('body').on("submit", "#CartForm", function() { 3579 $(this).find('[type=submit]').addClass('btn--loading'); 3580 }); 3581 3582 $("input[name=current_currency]").val($( "select.currency-picker" ).val()); 3583 $( "select.currency-picker" ).change(function(){ 3584 $("select.currency-picker").val($(this).val()); 3585 url=window.location.href; 3586 newParam="currency=" + $( "select.currency-picker" ).val(); 3587 if(url.indexOf("currency=")===-1){ 3588 separator = (url.indexOf("?")===-1)?"?":"&"; 3589 newUrl= url + separator + newParam; 3590 }else{ 3591 oldParam= new URL(url); 3592 oldParam = oldParam.searchParams.get("currency"); 3593 newParam= $(this).val(); 3594 newUrl=url.replace(oldParam,newParam); 3595 } 3596 $("input[name=current_currency]").val($( "select.currency-picker" ).val()); 3597 // window.location.href =newUrl; 3598 $('#CartDrawer').attr('data-fetch', 0); 3599 }); 3600 3601 $("body").on("click", ".cart__remove", function() { 3602 $('#CartTemplate').addClass('is-loading'); 3603 $.ajax({ 3604 type: 'POST', 3605 url: '/cart/remove_item_quantity', 3606 data: { 3607 variant_id: $(this).data( "variant-id"), 3608 item_id: $(this).data( "item-id"), 3609 quantity: $(this).data( "quantity"), 3610 i_id: $(this).data("i_id"), 3611 }, 3612 dataType: 'json', 3613 success: function(response){ 3614 3615 theme.cartDrawer(response); 3616 $('#CartTemplate').removeClass('is-loading'); 3617 3618 if (window.checkProductProperties !== undefined){ 3619 window.checkProductProperties(); 3620 } 3621 }, 3622 error: function(xhr){ 3623 console.log('error',xhr); 3624 $('#CartTemplate').removeClass('is-loading'); 3625 } 3626 }); 3627 3628 }); 3629 3630 3631 $('body').on("click", "#applycode",function() { 3632 3633 if($("input[name='voucher_code']").val() != '') { 3634 3635 $('#CartTemplate').addClass('is-loading'); 3636 3637 $.ajax({ 3638 type: 'POST', 3639 url: '/new_cart/voucher', 3640 data: { 3641 voucher_code: $("input[name='voucher_code']").val(), 3642 category: 'create' 3643 }, 3644 dataType: 'json', 3645 success: function(response){ 3646 3647 // console.log(response); 3648 3649 if(response.error != undefined){ 3650 3651 if(response.error.message != undefined) popToast(response.error.message); 3652 3653 $("input[name='voucher_code']").val('') 3654 3655 } 3656 3657 if(response.cart_content != undefined) theme.cartDrawer(response); 3658 3659 $('#CartTemplate').removeClass('is-loading'); 3660 3661 }, 3662 error: function(xhr){ 3663 console.log('error',xhr); 3664 $('#CartTemplate').removeClass('is-loading'); 3665 } 3666 }); 3667 3668 } 3669 3670 }); 3671 3672 3673 $("body").on("click", ".remove_voucher_btn", function() { 3674 $('#CartTemplate').addClass('is-loading'); 3675 $.ajax({ 3676 type: 'DELETE', 3677 url: '/new_cart/voucher', 3678 data: { 3679 category: 'remove', 3680 order_discount_id: $(this).data( "discount-id") 3681 }, 3682 dataType: 'json', 3683 success: function(data){ 3684 // console.log(data); 3685 theme.cartDrawer(data); 3686 $('#CartTemplate').removeClass('is-loading'); 3687 }, 3688 error: function(xhr){ 3689 console.log('error',xhr); 3690 $('#CartTemplate').removeClass('is-loading'); 3691 } 3692 }); 3693 3694 }); 3695 3696 3697 theme.cartDrawer = function(data){ 3698 3699 $('#CartDrawer').attr('data-fetch', 1); 3700 $('#CartTemplate').addClass('is-loading'); 3701 3702 3703 if(typeof data.cart_content == 'string'){ 3704 $('#CartTemplate').html(data.cart_content); 3705 } 3706 3707 let cart_item_count = data.item_count || data.cart.item_count; 3708 3709 if(cart_item_count > 0){ 3710 $('.cart-count').removeClass('hidden-count'); 3711 }else{ 3712 $('.cart-count').addClass('hidden-count'); 3713 } 3714 3715 $('.cart-count').text(cart_item_count); 3716 $('#CartTemplate').removeClass('is-loading'); 3717 $(".cart-drawer-content").animate({ scrollTop: 0 }); 3718 3719 if(window.EasyStore != undefined && window.EasyStore.Promotion != undefined && window.EasyStore.Promotion.updateCartPromotion != undefined) window.EasyStore.Promotion.updateCartPromotion() 3720 3721 } 3722 3723 3724 theme.fetchCartDrawer = function(data){ 3725 $('#CartTemplate').addClass('is-loading'); 3726 $.ajax({ 3727 url: '/new_cart?retrieve=true', 3728 type: 'GET', 3729 success: function(data, status) { 3730 // console.log(data); 3731 theme.cartDrawer(data); 3732 3733 $('#CartTemplate').removeClass('is-loading'); 3734 3735 if (window.checkProductProperties !== undefined){ 3736 window.checkProductProperties(); 3737 } 3738 }, 3739 error: function(XMLHttpRequest, textStatus) { 3740 console.log('error',XMLHttpRequest,textStatus); 3741 $('#CartTemplate').removeClass('is-loading'); 3742 } 3743 }); 3744 } 3745 3746 theme.updateCartDrawer = function(data){ 3747 $('#CartTemplate').addClass('is-loading'); 3748 3749 $.ajax({ 3750 url: '/new_cart/update', 3751 type: 'PUT', 3752 dataType: 'json', 3753 data: $('#CartDrawer form').serialize(), 3754 success: function(data, status) { 3755 theme.cartDrawer(data); 3756 3757 if (window.checkProductProperties !== undefined){ 3758 window.checkProductProperties(); 3759 } 3760 }, 3761 error: function(XMLHttpRequest, textStatus) { 3762 console.log('error',XMLHttpRequest,textStatus); 3763 } 3764 }); 3765 } 3766 3767 function debounce(func, wait, immediate) { 3768 var timeout; 3769 return function() { 3770 var context = this, args = arguments; 3771 var later = function() { 3772 timeout = null;
3773 if (!immediate) func.apply(context, args); 3774 }; 3775 var callNow = immediate && !timeout; 3776 clearTimeout(timeout); 3777 timeout = setTimeout(later, wait); 3778 if (callNow) func.apply(context, args); 3779 }; 3780 }; 3781 3782 $('body').on("change", 'input.cart__quantity-selector', function (){ 3783 theme.updateCartDrawer(); 3784 }); 3785 3786 3787 $('#updateCartDrawer').click(function() { 3788 theme.updateCartDrawer(); 3789 }); 3790 3791 $('body').on("click", ".btn-qty-adjust", function() { 3792 3793 var $button = $(this); 3794 var oldValue = $button.parent().find("input.cart__quantity-selector").val(); 3795 3796 if ($button.attr('data-adjust') == 1) { 3797 var newVal = parseFloat(oldValue) + 1; 3798 } else { 3799 // Don't allow decrementing below zero 3800 if (oldValue > 0) { 3801 var newVal = parseFloat(oldValue) - 1; 3802 } else { 3803 newVal = 0; 3804 } 3805 } 3806 3807 $button.parent().find("input").val(newVal); 3808 }); 3809 3810 $('body').on("click", ".btn-qty-adjust", debounce(function() { 3811 theme.updateCartDrawer(); 3812 },350)); 3813 3814 $('button.checkout').click(function() { 3815 $(this).addClass('btn--loading'); 3816 }); 3817 3818 var add_cart_success_html = '<svg class="svg-icon" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> <g> <g> <path d="M383.841,171.838c-7.881-8.31-21.02-8.676-29.343-0.775L221.987,296.732l-63.204-64.893 c-8.005-8.213-21.13-8.393-29.35-0.387c-8.213,7.998-8.386,21.137-0.388,29.35l77.492,79.561 c4.061,4.172,9.458,6.275,14.869,6.275c5.134,0,10.268-1.896,14.288-5.694l147.373-139.762 C391.383,193.294,391.735,180.155,383.841,171.838z"/> </g> </g> <g> <g> <path d="M256,0C114.84,0,0,114.84,0,256s114.84,256,256,256s256-114.84,256-256S397.16,0,256,0z M256,470.487 c-118.265,0-214.487-96.214-214.487-214.487c0-118.265,96.221-214.487,214.487-214.487c118.272,0,214.487,96.221,214.487,214.487 C470.487,374.272,374.272,470.487,256,470.487z"/> </g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> <g> </g> </svg>'; 3819 add_cart_success_html += 'Added to cart <br><a class="CartDrawerTrigger">View cart</a>'; 3820 3821 function popToast(content) { 3822 var x = document.getElementById("toast"), 3823 y = document.getElementById("toastContent"); 3824 3825 y.innerHTML = content; 3826 x.className += " show"; 3827 3828 var hideToast = setTimeout(function(){ x.className = x.className.replace(" show", ""); }, 3000); 3829 } 3830 3831 3832</script>
3832 3833 3834<style> 3835 vouchers-modal .vouchers-modal.active , 3836 vouchers-modal #vouchers-modal-backdrop.active{ 3837 z-index: 2147483647; 3838 } 3839</style> 3840 3841<link href="/assets/css/vouchers.css?v1.2" rel="stylesheet" type="text/css" media="screen" /> 3842<link href="/assets/account/vouchers/vouchers.css" rel="stylesheet" type="text/css" media="screen" /> 3843<link href="/assets/account/vouchers/voucher-widget.css" rel="stylesheet" type="text/css" media="screen" />
3844<script src="/assets/js/promotion/vouchers.js?v1.3" type="text/javascript" ></script>
vendor: 1 bytes, line 3844
3844
3845<script src="/assets/account/vouchers/voucher-widget.js" type="text/javascript" ></script>
3845 3846 3847<vouchers-modal> 3848 <div id="vouchers-modal-backdrop" class="vouchers-modal__close"></div> 3849 <div class="vouchers-modal-wrapper page-width"> 3850 <div id="vouchers-modal" class="vouchers-modal focus-inset" aria-modal="true" role="dialog" tabindex="-1"> 3851 <div class="vouchers-modal__header"> 3852 <div class="vouchers-modal__heading">Vouchers</div> 3853 <button type="button" class="vouchers-modal__close modal__close-button link link--text focus-inset" aria-label="accessibility.close"> 3854 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-close " fill="none" viewBox="0 0 18 17"> 3855 <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"> 3856 </path> 3857 </svg> 3858 </button> 3859 </div> 3860 3861 <discount-input> 3862 <div class="field"> 3863 <input type="text" id="input-discount_code" class="search__input field__input" name="voucher_code" placeholder="Discount code"> 3864 <button type="button" name="apply" class="btn btn--secondary button button--secondary">Apply</button> 3865 </div> 3866 <div class="form__message hidden" tabindex="-1" autofocus> 3867 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-error " viewBox="0 0 13 13"> 3868 <circle cx="6.5" cy="6.50049" r="5.5" stroke="white" stroke-width="2"></circle> 3869 <circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width="0.7"></circle> 3870 <path d="M5.87413 3.52832L5.97439 7.57216H7.02713L7.12739 3.52832H5.87413ZM6.50076 9.66091C6.88091 9.66091 7.18169 9.37267 7.18169 9.00504C7.18169 8.63742 6.88091 8.34917 6.50076 8.34917C6.12061 8.34917 5.81982 8.63742 5.81982 9.00504C5.81982 9.37267 6.12061 9.66091 6.50076 9.66091Z" fill="white"></path> 3871 <path d="M5.87413 3.17832H5.51535L5.52424 3.537L5.6245 7.58083L5.63296 7.92216H5.97439H7.02713H7.36856L7.37702 7.58083L7.47728 3.537L7.48617 3.17832H7.12739H5.87413ZM6.50076 10.0109C7.06121 10.0109 7.5317 9.57872 7.5317 9.00504C7.5317 8.43137 7.06121 7.99918 6.50076 7.99918C5.94031 7.99918 5.46982 8.43137 5.46982 9.00504C5.46982 9.57872 5.94031 10.0109 6.50076 10.0109Z" fill="white" stroke="#EB001B" stroke-width="0.7"></path> 3872 </svg> 3873 <div class="js-error-content"></div> 3874 </div> 3875 </discount-input> 3876 <br> 3877 3878 3879 3880 <div class="empty-vouchers_placeholder">No available vouchers</div> 3881 3882 3883 <!-- For voucher widget --> 3884
3884<script type="text/javascript"> 3885 let settings = {"logo_use_image":"1","logo_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/5595723.jpeg","footer_logo_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/5595723.jpeg","nav_below_logo":"logo_top-left","logo_alignment":"center","left_aligned_logo":"0","favicon_enable":"1","favicon_img":"","header_message":"","header_search_enable":true,"topbar_sticky":"1","footer_quicklinks_enable":true,"footer_quicklinks_linklist":"footer","footer_social_enable":"1","footer_show_credit_card_logo":"1","footer_show_methods_of_payment":"1","footer_visa":"1","footer_master":"1","footer_american_express":"1","footer_jcb":"0","footer_diners_club":"0","footer_discover":"0","footer_ssl":"1","show_footer_lines":"1","home_section_1":"logo-list","home_section_2":"video-section","home_section_3":"parallax-section","home_section_4":"featured-product","home_section_5":"testimonial-section","home_section_6":"img-text-section","home_section_7":"highlight-section","featured_title":"Promotions & Solutions","featured_1_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/15092062.jpg","featured_1_text":"REVONE - Weight Management & Body Shaping ","featured_1_link_text":"","featured_1_link":"","featured_2_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/6852806.jpeg","featured_2_text":"Easy123 15th Anniversary Super Promo with Extra Gift","featured_2_link_text":"","featured_2_link":"\/collections\/all","featured_3_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/15091963.jpg","featured_3_text":"LUMI22 - Firmer, Younger & Glowing Skin","featured_3_link_text":"","featured_3_link":"\/collections\/action","featured_4_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/16262173.jpg","featured_4_text":"Acurex . End The Pain . Reclaim Your Life","featured_4_link_text":"","featured_4_link":"\/collections\/action","featured_5_img":"","featured_5_text":"","featured_5_link_text":"","featured_5_link":"\/collections\/all","featured_6_img":"","featured_6_text":"","featured_6_link_text":"","featured_6_link":"\/collections\/all","featured_7_img":"","featured_7_text":"","featured_7_link_text":"","featured_7_link":"","featured_8_img":"","featured_8_text":"","featured_8_link_text":"","featured_8_link":"","featured_9_img":"","featured_9_text":"","featured_9_link_text":"","featured_9_link":"","featured_10_img":"","featured_10_text":"","featured_10_link_text":"","featured_10_link":"","parallax_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/6713486.gif?width=1200","parallax_mobile_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/6713321.gif?width=1200","parallax_title":"","parallax_subtitle":"","parallax_button_text":"Shop Now","parallax_button_link":"\/account\/register","parallax_full_width":"1","slider_home_auto":"1","slider_home_show_dots":"0","slider_home_rate":"5000","slider_home_transition":"fade","slider_full_screen":"0","slide_1":"1","slide_1_jpg":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/17194970.jpg","slide_1_mobile_jpg":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/17195059.jpg","slide_1_link":"\/collections\/all","slide_1_alt":"","slide_1_title":"","slide_1_subtitle":"","slide_1_button_text":"SHOP NOW","slide_2":"1","slide_2_jpg":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/17197563.jpg","slide_2_mobile_jpg":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/17195394.jpg","slide_2_link":"\/collections\/all","slide_2_alt":"","slide_2_title":"","slide_2_subtitle":"","slide_2_button_text":"SHOP NOW","slide_3":"","slide_3_jpg":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/17204601.jpg","slide_3_mobile_jpg":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/17204445.jpg","slide_3_link":"\/collections\/all","slide_3_alt":"","slide_3_title":"","slide_3_subtitle":"","slide_3_button_text":"SHOW NOW","slide_4":"","slide_4_jpg":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/17213450.jpg","slide_4_mobile_jpg":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/17219727.png","slide_4_link":"\/collections\/acurex","slide_4_alt":"","slide_4_title":"","slide_4_subtitle":"","slide_4_button_text":"SHOP NOW","slide_5":"","slide_5_jpg":"","slide_5_mobile_jpg":"","slide_5_link":"","slide_5_alt":"","slide_5_title":"","slide_5_subtitle":"","slide_5_button_text":"","slide_6":"","slide_6_jpg":"","slide_6_mobile_jpg":"","slide_6_link":"","slide_6_alt":"","slide_6_title":"","slide_6_subtitle":"","slide_6_button_text":"","slide_7_jpg":"","slide_7_mobile_jpg":"","slide_7_link":"","slide_7_alt":"","slide_7_title":"","slide_7_subtitle":"","slide_7_button_text":"","testimonial_slide_img_crop":"0","testimonial_slide_
38851_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/5636549.jpeg","testimonial_slide_1_title":"Zack F. on 90days Plan","testimonial_slide_1_content":"-4kg in the first month with -2.3% Fat. Will know more in the second and third month and further judging the effectiveness of the 90days plan package","testimonial_slide_1_text_link":"","testimonial_slide_1_link":"","testimonial_slide_2_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/5636704.jpeg","testimonial_slide_2_title":"Patricia L. on 90days Plan","testimonial_slide_2_content":"This is my second purchase. The product helps me more on solving the constipation problem and maintain weight. The service is fast.","testimonial_slide_2_text_link":"","testimonial_slide_2_link":"","testimonial_slide_3_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/5636961.jpeg","testimonial_slide_3_title":"Ms. Scherly taking Easy123 since 2016","testimonial_slide_3_content":"A healthy lifestyle for total health of detox","testimonial_slide_3_text_link":"","testimonial_slide_3_link":"","testimonial_slide_4_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/5637144.jpeg","testimonial_slide_4_title":"Ms Sherine & Mum","testimonial_slide_4_content":"Fast delivery with perfect wrapping! The CS is friendly and helpful. This is my second time purchase. My mom and i both feel this product worked amazingly on us.","testimonial_slide_4_text_link":"","testimonial_slide_4_link":"","testimonial_slide_5_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/5637211.jpeg","testimonial_slide_5_title":"Mr. Melvin","testimonial_slide_5_content":"Repeat order, this products is awesome and seller is friendly with free shaker","testimonial_slide_5_text_link":"","testimonial_slide_5_link":"","testimonial_slide_6_img":"","testimonial_slide_6_title":"","testimonial_slide_6_content":"","testimonial_slide_6_text_link":"","testimonial_slide_6_link":"","testimonial_slide_7_img":"","testimonial_slide_7_title":"","testimonial_slide_7_content":"","testimonial_slide_7_text_link":"","testimonial_slide_7_link":"","testimonial_slide_8_img":"","testimonial_slide_8_title":"","testimonial_slide_8_content":"","testimonial_slide_8_text_link":"","testimonial_slide_8_link":"","logo_list_on_footer":"1","logo_list_title":"","logo_list_1_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/5637407.jpeg","logo_list_1_link":"https:\/\/www.belltree.com.my\/products\/lumi22-","logo_list_2_img":"https:\/\/cdn.store-assets.com\/s\/619065\/i\/33813178.jpg","logo_list_2_link":"https:\/\/www.belltree.com.my\/products\/lumi22-supreme-essence","logo_list_3_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/6699697.gif","logo_list_3_link":"https:\/\/www.belltree.com.my\/products\/easy123-90-day-plan-4-boxes-80s-","logo_list_4_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/5637397.jpeg","logo_list_4_link":"https:\/\/www.belltree.com.my\/pages\/easy123-1","logo_list_5_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/17479401.jpg","logo_list_5_link":"https:\/\/www.belltree.com.my\/products\/revone-30-s","logo_list_6_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/17478544.jpg","logo_list_6_link":"https:\/\/www.belltree.com.my\/pages\/revone","logo_list_7_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/17479215.jpg","logo_list_7_link":"https:\/\/www.belltree.com.my\/products\/acurex-botanical-beverage-mix-blackcurrant-with-tart-cherry-dandelion","logo_list_8_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/17478593.jpg","logo_list_8_link":"https:\/\/www.belltree.com.my\/products\/acurex-botanical-beverage-mix-blackcurrant-with-tart-cherry-dandelion","home_featured_products":"feature-on-homepage","home_featured_products_num":"20","home_featured_products_row_num":"7","home_featured_products_show_heading":"","home_page_content":"home","home_page_show_heading":"0","home_page_add_to_cart":"1","scroll_to_top_button":"on-right","product_quantity_enable":"1","product_image_zoom_type":"lightbox","product_thumbnails_position":"below","product_related_enable":true,"products_per_row":4,"products_list_per_row":"3","collection_products_list_per_row":"3","product_page_float_bt
3885n":"1","product_page_variants_tag":"1","featured_product_title":"Featured products","product_img_res":"grande","product_img_crop":"product_img-crop ratio_1-1","collections_show_sale_circle":"1","collections_show_sold_out_circle":"1","collections_sort_enable":true,"collections_tags_enable":"0","collections_products_per_row":"3","collections_rows":"6","footer_bar":"0","footer_bar_icon_product_page":"1","footer_bar_icon_1":"https:\/\/cdn.easystore.blue\/s\/201\/f\/5590.png","footer_bar_icon_1_text":"Home","footer_bar_icon_1_link":"\/","footer_bar_icon_2":"https:\/\/cdn.easystore.blue\/s\/201\/f\/5591.png","footer_bar_icon_2_text":"All products","footer_bar_icon_2_link":"\/collections\/all","footer_bar_icon_3":"https:\/\/cdn.easystore.blue\/s\/201\/f\/5592.png","footer_bar_icon_3_text":"Promotions","footer_bar_icon_3_link":"\/collections\/all","footer_bar_icon_4":"https:\/\/cdn.easystore.blue\/s\/201\/f\/5593.png","footer_bar_icon_4_text":"Account","footer_bar_icon_4_link":"\/account\/login","cart_enable_ajax":"1","social_sharing_products":"1","social_sharing_blog":"1","social_sharing_count":"1","share_facebook":"1","share_twitter":"1","share_line":"1","share_pinterest":"1","facebook_url":"https:\/\/www.facebook.com\/MyEasy123\/","twitter_url":"","pinterest_url":"https:\/\/www.pinterest.com\/","instagram_url":"https:\/\/www.instagram.com\/lumi22supreme","tumblr_url":"","youtube_url":"https:\/\/www.youtube.com\/channel\/UCHpczMB0lrvT7iuS03qlx_g?view_as=subscriber","vimeo_url":"","wechat_url":"","whatsapp_url":"+6 0129641787","line_url":"","featured_blog":"","featured_blog_title":"12.12 2020","articles_handle_1":"","articles_handle_2":"","articles_handle_3":"","video_section_id":"https:\/\/www.youtube.com\/watch?v=T3zGeQCwAIM&t=17s","video_section_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/6841348.jpeg","img_text_section_img":"https:\/\/cdn.store-assets.com\/s\/619065\/f\/15092062.jpg","img_text_section_heading":"REVONE - The New Era of Healthy Weight Management & Body Shaping ","img_text_section_text":"ALL IN ONE WELLNESS SOLUTIONS , you've come to the right place.","img_text_section_link_text":"SHOP NOW","img_text_section_url":"\/collections\/all","img_text_section_class":"image-left","lazy_loader":"1","featured_single_product_handle":4550503,"placeholder":{"featured-single-product":"https:\/\/s3-ap-southeast-1.amazonaws.com\/eesb.themes\/onboarding\/candy\/en_placeholder_featured-single-product.jpg","featured-blog":"https:\/\/s3-ap-southeast-1.amazonaws.com\/eesb.themes\/onboarding\/candy\/en_placeholder_featured-blog.jpg"},"use_original_image":"1","promotion_uis":{"primary_color":"#4089e4","header_bg_color":"#4089e4","header_text_color":"#fff","recommendation":{"is_show_product_page":true,"is_show_cart_page_top":true,"is_show_cart_page_bottom":true},"voucher_widget":{"primary_color":"#4089e4"}},"show_multiple_currencies":true,"supported_currencies":"MYR ","theme_id":3809,"theme_is_edited":1,"theme_updated_at":"2026-09-06T14:48:08.000Z","phone_account_enabled":false,"line_login_enabled":false,"apple_login_enabled":false,"timezone":"Asia\/Kuala_Lumpur","is_server_side_currency_conversion":true,"is_self_registration_enabled":true,"is_highlight_enabled":false,"is_auto_gen_highlight_enabled":false,"is_common_question_enabled":false,"is_auto_gen_common_question_enabled":false,"highlight_section_title":"Highlights","common_question_section_title":"Frequently asked questions","is_new_promotion_enabled":true} 3886 if (settings.promotion_uis.voucher_widget != null) { 3887 setVoucherTheme(settings.promotion_uis.voucher_widget) 3888 } 3889 var shop = { 3890 money_prefix: "", 3891 format_decimals: "" 3892 }; 3893 var _getEntitlementTranslation = { 3894 "free_shipping": "FREE SHIPPING", 3895 "free_of_charge": "FREE GIFT", 3896 } 3897 var _getTargetTypeTranslation = { 3898 "amount_credit": " CREDIT", 3899 "amount_off": " OFF", 3900 } 3901 var _getPrerequisiteTranslation = { 3902 "min_quantity": "Min formatValue item(s) purchase", 3903 "every_quantity": "Every formatValue item(s) purchase", 3904 "min_amount": "Min formatCurrency spend", 3905 "every_amount": "Every formatCurrency spend" 3906 } 3907 var _getPrerequisiteConditionTranslation = { 3908 "selected_items": "Selected Items", 3909 "selected_collections": "Selected Collections", 3910 "storewide": "Storewide", 3911 "order_subtotal": "Order Subtotal" 3912 } 3913 var _getVoucherButtonTextTranslation = { 3914 "apply": "Apply", 3915 } 3916 var _getVoucherErrorTranslation = { 3917 "condition_not_matched": "Voucher condition not matched" 3918 } 3919 </script>
3919 3920 3921 </div> 3922 </div> 3923</vouchers-modal> 3924 3925 3926</body> 3927</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.