1<!doctype html> 2<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]--> 3<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]--> 4<!--[if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]--> 5<!--[if IE 9 ]><html class="ie9 no-js"> <![endif]--> 6<!--[if (gt IE 9)|!(IE)]><!--> <html class="no-js"> <!--<![endif]--> 7<head> 8 9 <!-- Basic page needs ================================================== --> 10 <meta charset="utf-8"> 11 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 12 13 14 <link rel="icon" href="https://cdn.store-assets.com/s/382053/f/11094175.png" /> 15 16 17 <!-- Title and description ================================================== --> 18 <title> 19 Login – æ¿è§ç³ä¹¦å Cornerstone Book Centre 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.jbcornerstone.com/account/login"> 30 31 <meta property="og:image" content="https://cdn.store-assets.com/s/382053/f/11094175.png"> 32 <meta property="og:image:secure_url" content="https://cdn.store-assets.com/s/382053/f/11094175.png"> 33 34 35 36<meta property="og:description" content="ä¸åæä¼é æï¼æä¾åéç讲ååå¹è®ï¼åºçåå®ååç±»å±çµä¹¦ç±ï¼å¦å©å§»/å®¶åºæè²ï¼å¿ç«¥å±çµä¹¦ç±ï¼å¿çµå±å¿ï¼ç ç»ç¥å¦ï¼ä¿¡ä»°çæ´»ï¼å®£æçã"> 37<meta property="og:site_name" content="æ¿è§ç³ä¹¦å Cornerstone Book Centre"> 38 39 40 41 <meta name="twitter:card" content="summary"> 42 43 44 45 <meta name="twitter:site" content="@"> 46 47 48 49 50 51 <!-- Helpers ================================================== --> 52 <link rel="canonical" href="https://www.jbcornerstone.com/account/login"> 53 <meta name="viewport" content="width=device-width,initial-scale=1"> 54 <meta name="theme-color" content="#FAF6E9"> 55 56
56<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript" ></script>
56 57 58 <!-- Header hook for plugins ================================================== --> 59 60<!-- ScriptTags -->
61<script>window.__st={p: "customers",cid: null,cem: null,cph: null,cfn: null,cln: null,cge: null,cdb: null,ccc: null};</script>
61<script src='/assets/events.js'></script>
61<script>(function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(d.getElementById(id))return;js=d.createElement(s);js.id=id;js.src='https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js#xfbml=1&version=v6.0&autoLogAppEvents=1';fjs.parentNode.insertBefore(js,fjs);}(document,'script','facebook-jssdk'));</script>
61<script>(function(){function asyncLoad(){var urls=['/assets/facebook-pixel.js?v=1.2.1600156082','/assets/traffic.js?v=1','https://apps.easystore.co/marketplace/shopee-malaysia/script.js?shop=ptckul.easy.co','https://apps.easystore.co/snow-fall/script.js?shop=ptckul.easy.co'];for(var i=0;i<urls.length;i++){var s=document.createElement('script');s.type='text/javascript';s.async=true;s.src=urls[i];var x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);}}window.attachEvent ? window.attachEvent('onload', asyncLoad) : window.addEventListener('load', asyncLoad, false);})();</script>
61 62<!-- /ScriptTags --> 63 64 65 66
66<script src="https://store-themes.easystore.co/382053/themes/308896/assets/global.js?t=1790699554" defer="defer"></script>
66 67 68 69 70
70<script src="/assets/shop_common.js" type="text/javascript" ></script>
70 71
71<script src="/assets/customer_area.js" type="text/javascript" ></script>
71 72 73
73<script> 74 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 75 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 76 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 77 })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 78 79 ga('create', '', 'auto','myTracker'); 80 ga('myTracker.send', 'pageview'); 81 82 </script>
82 83 84
84<script src="/assets/storefront.js?id=1d419de2011a5572c98b" type="text/javascript" ></script>
84 85 86 87 <!-- CSS ================================================== --> 88 <style> 89 @font-face { 90 font-family: 'Abhaya Libre'; 91 font-style: normal; 92 font-weight: regular; 93 src: local('Abhaya Libre regular'), local('Abhaya Libre-regular'), url(https://fonts.gstatic.com/s/abhayalibre/v6/e3tmeuGtX-Co5MNzeAOqinEge0PWovdU4w.ttf) format('truetype'); 94 } 95 96 @font-face { 97 font-family: 'Abhaya Libre'; 98 font-style: normal; 99 font-weight: regular; 100 src: local('Abhaya Libre regular'), local('Abhaya Libre-regular'), url(https://fonts.gstatic.com/s/abhayalibre/v6/e3tmeuGtX-Co5MNzeAOqinEge0PWovdU4w.ttf) format('truetype'); 101 } 102 103 :root { 104 --font-body-family: 'Abhaya Libre', serif; 105 --font-body-style: normal; 106 --font-body-weight: 400; 107 108 --font-heading-family: 'Abhaya Libre', serif; 109 --font-heading-style: normal; 110 --font-heading-weight: 300; 111 112 --color-heading-text: 0,0,0; 113 --color-base-text: 0,0,0; 114 --color-base-background-1: 255,255,255; 115 --color-base-background-2: 255,255,255; 116 117 --color-base-solid-button-labels: 8,0,0; 118 --color-base-outline-button-labels: 255,255,255; 119 120 --color-base-accent-1: 250,246,233; 121 --color-base-accent-2: 250,246,233; 122 --payment-terms-background-color: 255,255,255; 123 124 --gradient-base-background-1: 255,255,255; 125 --gradient-base-background-2: 255,255,255; 126 --gradient-base-accent-1: 250,246,233; 127 --gradient-base-accent-2: 250,246,233; 128 129 --page-width: 120rem; 130 } 131 132 *, 133 *::before, 134 *::after { 135 box-sizing: inherit; 136 } 137 138 html { 139 box-sizing: border-box; 140 font-size: 62.5%; 141 height: 100%; 142 } 143 144 body { 145 display: grid; 146 grid-template-rows: auto auto 1fr auto; 147 grid-template-columns: 100%; 148 min-height: 100%; 149 margin: 0; 150 font-size: 1.5rem; 151 letter-spacing: 0.06rem; 152 line-height: 1.8; 153 font-family: var(--font-body-family); 154 font-style: var(--font-body-style); 155 font-weight: var(--font-body-weight); 156 157 } 158 159 @media screen and (min-width: 750px) { 160 body { 161 font-size: 1.6rem; 162 } 163 } 164 </style> 165 166 <link href="https://store-themes.easystore.co/382053/themes/308896/assets/base.css?t=1790699554" rel="stylesheet" type="text/css" media="screen" /> 167 168 169 170<!-- Snippet:global/head: Shopee Malaysia --> 171<link type="text/css" rel="stylesheet" href="https://apps.easystore.co/assets/css/marketplace/main.css?v1.7"> 172<!-- /Snippet --> 173 174<!-- Snippet:global/head: Product Star Rating ååè©å¹ -->
175<script src="https://apps.easystore.co/assets/js/star-rating/main.js"></script>
175 176 <link rel="stylesheet" href="https://apps.easystore.co/assets/css/star-rating/main.css"> 177<!-- /Snippet --> 178 179 180
180<script>document.documentElement.className = document.documentElement.className.replace('no-js', 'js');</script>
180 181</head> 182 183<body id="login" class="template-customers" > 184 185 186<!-- Snippet:global/body_start: Console Extension --> 187<div id='es_console' style='display: none;'>382053</div> 188<!-- /Snippet --> 189 190 191 <style> 192 header { 193 --logo-width: 80px; 194 } 195 .header-wrapper, 196 .header-wrapper .list-menu--disclosure, 197 .header-wrapper .search-modal{ 198 background-color: #FFFFFF; 199 } 200 .header-wrapper .search-modal .field__input{ 201 background-color: rgb(var(--color-background)); 202 } 203 .header-wrapper summary .icon-caret, 204 .header-wrapper .header__menu-item a, 205 .header-wrapper .list-menu__item, 206 .header-wrapper .link--text{ 207 color: #000000; 208 } 209 210 .search-modal__form{ 211 position: relative; 212 } 213 214 .dropdown { 215 display: none; 216 position: absolute; 217 top: 100%; 218 left: 0; 219 width: 100%; 220 padding: 5px 0; 221 background-color: #fff; 222 color:#000; 223 z-index: 1000; 224 border-bottom-left-radius: 15px; 225 border-bottom-right-radius: 15px; 226 border: 1px solid rgba(var(--color-foreground), 1); 227 border-top: none; 228 overflow-x: hidden; 229 overflow-y: auto; 230 max-height: 350px; 231 } 232 233 .dropdown-item { 234 padding: 0.4rem 2rem; 235 cursor: pointer; 236 line-height: 1.4; 237 overflow: hidden; 238 text-overflow: ellipsis; 239 white-space: nowrap; 240 } 241 242 .dropdown-item:hover{ 243 background-color: #f3f3f3; 244 } 245 246 .search__input.is-focus{ 247 border-radius: 15px; 248 border-bottom-left-radius: 0; 249 border-bottom-right-radius: 0; 250 border: 1px solid rgba(var(--color-foreground), 1); 251 border-bottom: none; 252 box-shadow: none; 253 } 254 255 .clear-all { 256 text-align: right; 257 padding: 0 2rem 0.2rem; 258 line-height: 1; 259 font-size: 70%; 260 margin-bottom: -2px; 261 } 262 263 .clear-all:hover{ 264 background-color: #fff; 265 } 266 267 .search-input-focus .easystore-section-header-hidden{ 268 transform: none; 269 } 270 .referral-notification { 271 position: absolute; 272 top: 100%; 273 right: 0; 274 background: white; 275 border: 1px solid #e0e0e0; 276 border-radius: 8px; 277 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 278 width: 280px; 279 z-index: 1000; 280 padding: 16px; 281 margin-top: 8px; 282 font-size: 14px; 283 line-height: 1.4; 284 } 285 286 .referral-notification::before { 287 content: ''; 288 position: absolute; 289 top: -8px; 290 right: 20px; 291 width: 0; 292 height: 0; 293 border-left: 8px solid transparent; 294 border-right: 8px solid transparent; 295 border-bottom: 8px solid white; 296 } 297 298 .referral-notification::after { 299 content: ''; 300 position: absolute; 301 top: -9px; 302 right: 20px; 303 width: 0; 304 height: 0; 305 border-left: 8px solid transparent; 306 border-right: 8px solid transparent; 307 border-bottom: 8px solid #e0e0e0; 308 } 309 310 .referral-notification h4 { 311 margin: 0 0 8px 0; 312 color: #2196F3; 313 font-size: 16px; 314 font-weight: 600; 315 } 316 317 .referral-notification p { 318 margin: 0 0 12px 0; 319 color: #666; 320 } 321 322 .referral-notification .referral-code { 323 background: #f5f5f5; 324 padding: 8px; 325 border-radius: 4px; 326 font-family: monospace; 327 font-size: 13px; 328 text-align: center; 329 margin: 8px 0; 330 border: 1px solid #ddd; 331 } 332 333 .referral-notification .close-btn { 334 position: absolute; 335 top: 8px; 336 right: 8px; 337 background: none; 338 border: none; 339 font-size: 18px; 340 color: #999; 341 cursor: pointer; 342 padding: 0; 343 width: 20px; 344 height: 20px; 345 line-height: 1; 346 } 347 348 .referral-notification .close-btn:hover { 349 color: #333; 350 } 351 352 .referral-notification .action-btn { 353 background: #2196F3; 354 color: white; 355 border: none; 356 padding: 8px 16px; 357 border-radius: 4px; 358 cursor: pointer; 359 font-size: 12px; 360 margin-right: 8px; 361 margin-top: 8px; 362 } 363 364 .referral-notification .action-btn:hover { 365 background: #1976D2; 366 } 367 368 .referral-notification .dismiss-btn { 369 background: transparent; 370 color: #666; 371 border: 1px solid #ddd; 372 padding: 8px 16px; 373 border-radius: 4px; 374 cursor: pointer; 375 font-size: 12px; 376 margin-top: 8px; 377 } 378 379 .referral-notification .dismiss-btn:hover { 380 background: #f5f5f5; 381 } 382 .referral-modal__dialog { 383 transform: translate(-50%, 0); 384 transition: transform var(--duration-default) ease, visibility 0s; 385 z-index: 10000; 386 position: fixed; 387 top: 20vh; 388 left: 50%; 389 width: 100%; 390 max-width: 350px; 391 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 392 border-radius: 12px; 393 background-color: #fff; 394 color: #000; 395 padding: 20px; 396 text-align: center; 397 } 398 399 .modal-overlay.referral-modal-overlay { 400 position: fixed; 401 top: 0; 402 left: 0; 403 width: 100%; 404 height: 100%; 405 background-color: rgba(0, 0, 0, 0.7); 406 z-index: 2001; 407 display: block; 408 opacity: 1; 409 transition: opacity var(--duration-default) ease, visibility 0s; 410 } 411</style> 412 413<link rel="preload" href="https://store-themes.easystore.co/382053/themes/308896/assets/section-header.css?t=1790699554" as="style" onload="this.onload=null;this.rel='stylesheet'"> 414<link rel="preload" href="https://store-themes.easystore.co/382053/themes/308896/assets/component-list-menu.css?t=1790699554" as="style" onload="this.onload=null;this.rel='stylesheet'"> 415<link rel="preload" href="https://store-themes.easystore.co/382053/themes/308896/assets/component-menu-drawer.css?t=1790699554" as="style" onload="this.onload=null;this.rel='stylesheet'"> 416<link rel="preload" href="https://store-themes.easystore.co/382053/themes/308896/assets/component-cart-notification.css?v1.1?t=1790699554" as="style" onload="this.onload=null;this.rel='stylesheet'"> 417
418<script src="https://store-themes.easystore.co/382053/themes/308896/assets/cart-notification.js?t=1790699554" defer="defer"></script>
vendor: 1 bytes, line 418
418
419<script src="https://store-themes.easystore.co/382053/themes/308896/assets/details-modal.js?t=1790699554" defer="defer"></script>
419 420 421<svg xmlns="http://www.w3.org/2000/svg" class="hidden"> 422 <symbol id="icon-search" viewbox="0 0 18 19" fill="none"> 423 <path fill-rule="evenodd" clip-rule="evenodd" d="M11.03 11.68A5.784 5.784 0 112.85 3.5a5.784 5.784 0 018.18 8.18zm.26 1.12a6.78 6.78 0 11.72-.7l5.4 5.4a.5.5 0 11-.71.7l-5.41-5.4z" fill="currentColor"/> 424 </symbol> 425 426 <symbol id="icon-close" class="icon icon-close" fill="none" viewBox="0 0 18 17"> 427 <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"> 428 </symbol> 429</svg> 430 431 432<div id="easystore-section-header"> 433 <sticky-header class="header-wrapper header-wrapper--border-bottom"> 434 <header class="header header--top-center page-width header--has-menu" itemscope itemtype="http://schema.org/Organization"> 435 <header-drawer data-breakpoint="tablet"> 436 <details class="menu-drawer-container menu-opening"> 437 <summary class="header__icon header__icon--menu header__icon--summary link link--text focus-inset" aria-label="Menu" role="button" aria-expanded="true" aria-controls="menu-drawer"> 438 <span> 439 440 441 442 <svg class="icon icon-hamburger " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M32.5,65h535a25,25,0,0,0,0-50H32.5a25,25,0,0,0,0,50Z" fill="currentColor"/><path d="M567.5,275H32.5a25,25,0,0,0,0,50h535a25,25,0,0,0,0-50Z" fill="currentColor"/><path d="M567.5,535H32.5a25,25,0,0,0,0,50h535a25,25,0,0,0,0-50Z" fill="currentColor"/></svg> 443 444 445 446 447 448 449 <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg> 450 451 452 453 </span> 454 </summary> 455 <div id="menu-drawer" class="menu-drawer motion-reduce" tabindex="-1"> 456 <div class="menu-drawer__inner-container"> 457 <div class="menu-drawer__navigation-container"> 458 <nav class="menu-drawer__navigation"> 459 <ul class="menu-drawer__menu list-menu" role="list"> 460 461 462 463 <li> 464 <a href="/" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 465 Main Page 主页 466 </a> 467 </li> 468 469 470 471 472 <li> 473 <a href="/pages/about-us-å ³äºæä»¬" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 474 About Us å ³äºæä»¬ 475 </a> 476 </li> 477 478 479 480 481 <li> 482 <a href="/collections/new-arrival" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 483 New Arrival æ°å 484 </a> 485 </li> 486 487 488 489 490 491 <li> 492 <details> 493 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 494 <a href="/collections/all" class="link--text list-menu__item menu-drawer__menu-item"> 495 Collections ä¹¦ç® 496 </a> 497 498 499 500 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 501 502 503 504 505 506 507 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 508 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 509 </svg> 510 511 512 513 </summary> 514 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 515 <div class="menu-drawer__inner-submenu"> 516 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 517 518 519 520 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 521 522 523 524 Collections ä¹¦ç® 525 </button> 526 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 527 528 529 530 <li> 531 <a href="/collections/åä¼ åºå" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 532 Partners Training Book åä¼ åºç 533 </a> 534 </li> 535 536 537 538 539 540 <li> 541 <details> 542 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 543 <a href="/collections/chinese-books-䏿书ç±" class="link--text list-menu__item menu-drawer__menu-item"> 544 Chinese Books ä¸æä¹¦ç± 545 </a> 546 547 548 549 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 550 551 552 553 554 555 556 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 557 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 558 </svg> 559 560 561 562 </summary> 563 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 564 <div class="menu-drawer__inner-submenu"> 565 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 566 567 568 569 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 570 571 572 573 Chinese Books ä¸æä¹¦ç± 574 </button> 575 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 576 577 578 579 <li> 580 <a href="/collections/çå½é å°±" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 581 Spiritual Life çå½é å°± 582 </a> 583 </li> 584 585 586 587 588 589 <li> 590 <details> 591 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 592 <a href="/collections/å´æç¤¼ä»ª" class="link--text list-menu__item menu-drawer__menu-item"> 593 Bible Study å£ç»ç ç©¶ 594 </a> 595 596 597 598 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 599 600 601 602 603 604 605 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 606 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 607 </svg> 608 609 610 611 </summary> 612 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 613 <div class="menu-drawer__inner-submenu"> 614 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 615 616 617 618 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 619 620 621 622 Bible Study å£ç»ç ç©¶ 623 </button> 624 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 625 626 <li> 627 <a href="/collections/妿¯ç ç©¶" class="link--text list-menu__item menu-drawer__menu-item focus-inset"> 628 麦ç§å£ç»æ³¨é 629 </a> 630 </li> 631 632 </ul> 633 </div> 634 </div> 635 </details> 636 </li> 637 638 639 640 641 <li> 642 <a href="/collections/çµå½æé¿" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 643 Devotions and Prayers çµä¿®ä¸ç¥·å 644 </a> 645 </li> 646 647 648 649 650 <li> 651 <a href="/collections/ç¥å¦ä¸æä¹" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 652 Theology and Doctrine ç¥å¦ä¸æä¹ 653 </a> 654 </li> 655 656 657 658 659 <li> 660 <a href="/collections/è§è¯ä¸ä¼ è®°" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 661 Testimony and Missionary è§è¯ä¸å®£æ 662 </a> 663 </li> 664 665 666 667 668 <li> 669 <a href="/collections/æç§å¦" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 670 Pastoral Studies æç§å¦ 671 </a> 672 </li> 673 674 675
675 676 677 <li> 678 <a href="/collections/管çä¸é¢å¯¼" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 679 Management and Leadership 管çä¸é¢å¯¼ 680 </a> 681 </li> 682 683 684 685 686 <li> 687 <a href="/collections/è¾ å¯¼ç³»å" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 688 Psychological Counseling å¿çè¾ å¯¼ 689 </a> 690 </li> 691 692 693 694 695 <li> 696 <a href="/collections/åºç£ææè²" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 697 Parenting 亲åæè² 698 </a> 699 </li> 700 701 702 703 704 <li> 705 <a href="/collections/æç±-å©å§»ä¸å®¶åº" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 706 Love, Marriage & Family æç±ãå©å§»ä¸å®¶åº 707 </a> 708 </li> 709 710 711 712 713 <li> 714 <a href="/collections/åå²ä¸æå" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 715 History and Culture åå²ä¸æå 716 </a> 717 </li> 718 719 720 721 </ul> 722 </div> 723 </div> 724 </details> 725 </li> 726 727 728 729 730 731 <li> 732 <details> 733 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 734 <a href="/collections/礼åç³»å" class="link--text list-menu__item menu-drawer__menu-item"> 735 Gifts & Souvenirs 饰å 736 </a> 737 738 739 740 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 741 742 743 744 745 746 747 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 748 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 749 </svg> 750 751 752 753 </summary> 754 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 755 <div class="menu-drawer__inner-submenu"> 756 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 757 758 759 760 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 761 762 763 764 Gifts & Souvenirs 饰å 765 </button> 766 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 767 768 769 770 <li> 771 <a href="/collections/fashion-accessories" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 772 Fashion & Accessories 773 </a> 774 </li> 775 776 777 778 779 <li> 780 <a href="/collections/ç¦é³åå¼ " class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 781 Gospel Leaflet ç¦é³åå¼ 782 </a> 783 </li> 784 785 786 787 788 <li> 789 <a href="/collections/çå¾-plaque" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 790 Plaque and Cross çå¾åååæ¶ 791 </a> 792 </li> 793 794 795 796 797 <li> 798 <a href="/collections/å饰-pendant" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 799 Pendant å饰 800 </a> 801 </li> 802 803 804 805 806 <li> 807 <a href="/collections/æ¡æ-table-ornament" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 808 Table Ornamentæ¡æ 809 </a> 810 </li> 811 812 813 814 815 <li> 816 <a href="/collections/纸å¶å-paper-product" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 817 Paper Product 纸å¶å 818 </a> 819 </li> 820 821 822 823 824 <li> 825 <a href="/collections/magnet-gifts-ç£é礼å" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 826 Magnet and Electronic ç£éåçµåå 827 </a> 828 </li> 829 830 831 832 833 <li> 834 <a href="/collections/wall-frame-æ¡" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 835 Wall Frame æ¡ 836 </a> 837 </li> 838 839 840 841 </ul> 842 </div> 843 </div> 844 </details> 845 </li> 846 847 848 849 850 851 <li> 852 <details> 853 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 854 <a href="/collections/å£ç»ç³»å" class="link--text list-menu__item menu-drawer__menu-item"> 855 Bible å£ç» 856 </a> 857 858 859 860 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 861 862 863 864 865 866 867 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 868 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 869 </svg> 870 871 872 873 </summary> 874 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 875 <div class="menu-drawer__inner-submenu"> 876 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 877 878 879 880 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 881 882 883 884 Bible å£ç» 885 </button> 886 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 887 888 889 890 891 <li> 892 <details> 893 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 894 <a href="/collections/chinese-bible-䏿å£ç»" class="link--text list-menu__item menu-drawer__menu-item"> 895 Chinese Bible 䏿å£ç» 896 </a> 897 898 899 900 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill=
900"currentColor"/></svg> 901 902 903 904 905 906 907 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 908 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 909 </svg> 910 911 912 913 </summary> 914 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 915 <div class="menu-drawer__inner-submenu"> 916 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 917 918 919 920 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 921 922 923 924 Chinese Bible 䏿å£ç» 925 </button> 926 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 927 928 <li> 929 <a href="/collections/å忬-cuv" class="link--text list-menu__item menu-drawer__menu-item focus-inset"> 930 å忬 931 </a> 932 </li> 933 934 <li> 935 <a href="/collections/æ°è¯æ¬" class="link--text list-menu__item menu-drawer__menu-item focus-inset"> 936 æ°è¯æ¬ 937 </a> 938 </li> 939 940 <li> 941 <a href="/collections/æ°æ®åè¯æ¬" class="link--text list-menu__item menu-drawer__menu-item focus-inset"> 942 æ°æ®åè¯æ¬ 943 </a> 944 </li> 945 946 <li> 947 <a href="/collections/å ¶ä»" class="link--text list-menu__item menu-drawer__menu-item focus-inset"> 948 å ¶ä» 949 </a> 950 </li> 951 952 </ul> 953 </div> 954 </div> 955 </details> 956 </li> 957 958 959 960 961 <li> 962 <a href="/collections/åè¯-bilingual" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 963 Biligual Bibles åè¯å£ç» 964 </a> 965 </li> 966 967 968 969 970 <li> 971 <a href="/collections/children-bible-å¿ç«¥å£ç»" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 972 Children Bible å¿ç«¥å£ç» 973 </a> 974 </li> 975 976 977 978 979 <li> 980 <a href="/collections/english-bible-è±è¯å£ç»" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 981 English Bible è±è¯å£ç» 982 </a> 983 </li> 984 985 986 987 </ul> 988 </div> 989 </div> 990 </details> 991 </li> 992 993 994 995 996 997 <li> 998 <details> 999 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 1000 <a href="/collections/å¿ç«¥è¯»ç©" class="link--text list-menu__item menu-drawer__menu-item"> 1001 Children & Teens Book | å¿ç«¥&å°å¹´ä¹¦ç± 1002 </a> 1003 1004 1005 1006 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1007 1008 1009 1010 1011 1012 1013 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 1014 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1015 </svg> 1016 1017 1018 1019 </summary> 1020 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 1021 <div class="menu-drawer__inner-submenu"> 1022 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1023 1024 1025 1026 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1027 1028 1029 1030 Children & Teens Book | å¿ç«¥&å°å¹´ä¹¦ç± 1031 </button> 1032 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 1033 1034 1035 1036 1037 <li> 1038 <details> 1039 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 1040 <a href="/collections/children-book" class="link--text list-menu__item menu-drawer__menu-item"> 1041 Children Book å¿ç«¥ä¹¦ç± 1042 </a> 1043 1044 1045 1046 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1047 1048 1049 1050 1051 1052 1053 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 1054 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1055 </svg> 1056 1057 1058 1059 </summary> 1060 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 1061 <div class="menu-drawer__inner-submenu"> 1062 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1063 1064 1065 1066 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1067 1068 1069 1070 Children Book å¿ç«¥ä¹¦ç± 1071 </button> 1072 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 1073 1074 <li> 1075 <a href="/collections/å£ç»-å£ç»æ äº-bible-bible-stories" class="link--text list-menu__item menu-drawer__menu-item focus-inset"> 1076 English Bible Stories è±è¯å£ç»æ äº 1077 </a> 1078 </li> 1079 1080 <li> 1081 <a href="/collections/ç»æ¬-picture-book" class="link--text list-menu__item menu-drawer__menu-item focus-inset"> 1082 Picture Book ç»æ¬ 1083 </a> 1084 </li> 1085 1086 <li> 1087 <a href="/collections/å£ç»bible-å£ç»æ äº-bible-stories" class="link--text list-menu__item menu-drawer__menu-item focus-inset"> 1088 Chinese Bible Stories 䏿å£ç»æ äº 1089 </a> 1090 </li> 1091 1092 </ul> 1093 </div> 1094 </div> 1095 </details> 1096 </li> 1097 1098 1099 1100 1101 <li> 1102 <a href="/collections/éå°å¹´ä¹¦ç±-teen-s-book" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1103 Teen's Book éå°å¹´ä¹¦ç± 1104 </a> 1105 </li> 1106 1107 1108 1109 </ul> 1110 </div> 1111 </div> 1112 </details> 1113 </li> 1114 1115 1116 1117 1118 1119 <li> 1120 <details> 1121 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" a
1121ria-expanded="false" aria-controls="link-Bags"> 1122 <a href="/collections/æ¹æ³è®º" class="link--text list-menu__item menu-drawer__menu-item"> 1123 Training è®ç»ææ 1124 </a> 1125 1126 1127 1128 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1129 1130 1131 1132 1133 1134 1135 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 1136 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1137 </svg> 1138 1139 1140 1141 </summary> 1142 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 1143 <div class="menu-drawer__inner-submenu"> 1144 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1145 1146 1147 1148 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1149 1150 1151 1152 Training è®ç»ææ 1153 </button> 1154 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 1155 1156 1157 1158 <li> 1159 <a href="/collections/主æ¥å¦sunday-school-é¨å¾è®ç»discipleship-training" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1160 Sunday School 主æ¥å¦ / é¨å¾è®ç» Discipleship Training 1161 </a> 1162 </li> 1163 1164 1165 1166 </ul> 1167 </div> 1168 </div> 1169 </details> 1170 </li> 1171 1172 1173 1174 1175 <li> 1176 <a href="/collections/æ¡æ¸¸ä¸æ¸¸æ" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1177 Board Games and Games æ¡æ¸¸ä¸æ¸¸æ 1178 </a> 1179 </li> 1180 1181 1182 1183 1184 <li> 1185 <a href="/collections/new-arrival" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1186 New Arrival æ°å 1187 </a> 1188 </li> 1189 1190 1191 1192 1193 <li> 1194 <a href="/collections/add-on" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1195 Add on 1196 </a> 1197 </li> 1198 1199 1200 1201 </ul> 1202 </div> 1203 </div> 1204 </details> 1205 </li> 1206 1207 1208 1209 1210 <li> 1211 <a href="/blogs/å¿ç«¥ä¸»æ¥å¦ææ¡" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 1212 Lesson Plan 主æ¥å¦ææ¡ 1213 </a> 1214 </li> 1215 1216 1217 1218 1219 <li> 1220 <a href="https://www.jbcornerstone.com/account/register" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 1221 Create an account 注åè´¦å· 1222 </a> 1223 </li> 1224 1225 1226 </ul> 1227 </nav> 1228 1229 <div class="menu-drawer__utility-links"> 1230 1231 1232 1233 1234 1235 1236 1237 1238 <a href="/account/login" class="menu-drawer__account link link--text focus-inset h5"> 1239 1240 1241 1242 <svg class="icon icon-account " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M300,296.19c-70.7,0-137.11,28.74-187,80.93-49.59,51.87-76.9,120.77-76.9,194v25H563.89v-25c0-73.22-27.31-142.12-76.9-194C437.11,324.93,370.7,296.19,300,296.19ZM87.42,546.11C99.29,433.81,190.1,346.19,300,346.19s200.71,87.62,212.58,199.92Z" fill="currentColor"/><path d="M300,285.34c77.6,0,140.73-63.13,140.73-140.73S377.6,3.89,300,3.89,159.27,67,159.27,144.61,222.4,285.34,300,285.34Zm0-231.45a90.73,90.73,0,1,1-90.73,90.72A90.82,90.82,0,0,1,300,53.89Z" fill="currentColor"/></svg> 1243 1244 1245 1246 1247 Login ç»å ¥ 1248 </a> 1249 1250 <a href="/account/register" class="menu-drawer__account link link--text focus-inset h5"> 1251 1252 1253 1254 1255 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus " fill="none" viewBox="0 0 10 10"> 1256 <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"></path> 1257 </svg> 1258 1259 1260 1261 Create account åå»ºè´¦å· 1262 </a> 1263 1264 1265 1266 </div> 1267 </div> 1268 </div> 1269 </div> 1270 </details> 1271 </header-drawer> 1272 1273 1274 <a href="/" class="header__heading-link link link--text focus-inset" itemprop="url"> 1275 <img src="https://cdn.store-assets.com/s/382053/f/11094175.png" class="header__heading-logo" alt="æ¿è§ç³ä¹¦å Cornerstone Book Centre" loading="lazy" itemprop="logo"> 1276 </a> 1277 1278 1279 1280 <div class="header__search-input" tabindex="-1"> 1281 <form action="/search" method="get" role="search" class="search search-modal__form"> 1282 <div class="field"> 1283 <input class="search__input field__input" 1284 id="Search-In-Modal" 1285 type="search" 1286 name="q" 1287 value="" 1288 placeholder="Search" 1289 autocomplete="off" 1290 > 1291 <label class="field__label" for="Search-In-Modal">Search</label> 1292 <div class="dropdown" id="searchDropdown"></div> 1293 <input type="hidden" name="search_history" class="hidden_search_history"> 1294 <input type="hidden" name="options[prefix]" value="last"> 1295 <input type='hidden' name='search_extras' value='product-description,brands,collections,tags,vendors'> 1296 <button class="search__button field__button" aria-label="Search"> 1297 <svg class="icon icon-search" aria-hidden="true" focusable="false" role="presentation"> 1298 <use href="#icon-search"> 1299 </svg> 1300 </button> 1301 </div> 1302 </form> 1303 </div> 1304 1305 1306 <nav class="header__inline-menu"> 1307 <ul class="list-menu list-menu--inline" role="list"> 1308 1309 1310 1311 <li> 1312 <a href="/" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 1313 Main Page 主页 1314 </a> 1315 </li> 1316 1317 1318 1319 1320 <li> 1321 <a href="/pages/about-us-å ³äºæä»¬" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 1322 About Us å ³äºæä»¬ 1323 </a> 1324 </li> 1325 1326 1327 1328 1329 <li> 1330 <a href="/collections/new-arrival" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 1331 New Arrival æ°å 1332 </a> 1333 </li> 1334 1335 1336 1337 1338 1339 <li> 1340 <details-disclosure> 1341 <details> 1342 <summary class="header__menu-item list-menu__item link focus-inset"> 1343 <a href="/collections/all" >Collections 书ç®</a> 1344 1345 1346 1347 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 1348 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1349 </svg> 1350 1351 1352 1353 </summary> 1354 <ul class="header__submenu list-menu list-menu--disclosure caption-large motion-reduce" role="list" tabindex="-1"> 1355 1356 1357 1358 1359 1360 <li> 1361 <a href="/collections/åä¼ åºå" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 1362 Partners Training Book åä¼ åºç 1363 </a> 1364 </li> 1365 1366 1367 1368 1369 1370 <li> 1371 <details-disclosure> 1372 <details> 1373 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 1374 <a href="/collections/chinese-books-䏿书ç±" >Chinese Books 䏿书ç±</a> 1375 1376 1377 1378 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 1379 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1380 </svg> 1381 1382 1383 1384 </summary> 1385 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 1386 1387 1388 1389 <li> 1390 <a href="/collections/çå½é å°±" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Spiritual Life çå½é å°±</a> 1391 </li> 1392 1393 1394 1395 1396 1397 <li> 1398 <details-disclosure> 1399 <details> 1400 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 1401 <a href="/collections/å´æç¤¼ä»ª" > 1402 Bible Study å£ç»ç ç©¶ 1403 </a> 1404 1405 1406 1407 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 1408 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1409 </svg> 1410 1411 1412 1413 </summary> 1414 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 1415 1416 <li> 1417 <a href="/collections/妿¯ç ç©¶" class="header__menu-item list-menu__item link link--text focus-inset caption-large">麦ç§å£ç»æ³¨é</a> 1418 </li> 1419 1420 </ul> 1421 </details> 1422 </details-disclosure> 1423 </li> 1424 1425 1426 1427 1428 <li> 1429 <a href="/collections/çµå½æé¿" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Devotions and Prayers çµä¿®ä¸ç¥·å</a> 1430 </li> 1431 1432 1433 1434 1435 <li> 1436 <a href="/collections/ç¥å¦ä¸æä¹" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Theology and Doctrine ç¥å¦ä¸æä¹</a> 1437 </li> 1438 1439 1440 1441 1442 <li> 1443 <a href="/collections/è§è¯ä¸ä¼ è®°" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Testimony and Missionary è§è¯ä¸å®£æ</a> 1444 </li> 1445 1446 1447
1447 1448 1449 <li> 1450 <a href="/collections/æç§å¦" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Pastoral Studies æç§å¦</a> 1451 </li> 1452 1453 1454 1455 1456 <li> 1457 <a href="/collections/管çä¸é¢å¯¼" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Management and Leadership 管çä¸é¢å¯¼</a> 1458 </li> 1459 1460 1461 1462 1463 <li> 1464 <a href="/collections/è¾ å¯¼ç³»å" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Psychological Counseling å¿çè¾ å¯¼</a> 1465 </li> 1466 1467 1468 1469 1470 <li> 1471 <a href="/collections/åºç£ææè²" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Parenting 亲åæè²</a> 1472 </li> 1473 1474 1475 1476 1477 <li> 1478 <a href="/collections/æç±-å©å§»ä¸å®¶åº" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Love, Marriage & Family æç±ãå©å§»ä¸å®¶åº</a> 1479 </li> 1480 1481 1482 1483 1484 <li> 1485 <a href="/collections/åå²ä¸æå" class="header__menu-item list-menu__item link link--text focus-inset caption-large">History and Culture åå²ä¸æå</a> 1486 </li> 1487 1488 1489 </ul> 1490 </details> 1491 </details-disclosure> 1492 </li> 1493 1494 1495 1496 1497 1498 1499 <li> 1500 <details-disclosure> 1501 <details> 1502 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 1503 <a href="/collections/礼åç³»å" >Gifts & Souvenirs 饰å</a> 1504 1505 1506 1507 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 1508 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1509 </svg> 1510 1511 1512 1513 </summary> 1514 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 1515 1516 1517 1518 <li> 1519 <a href="/collections/fashion-accessories" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Fashion & Accessories</a> 1520 </li> 1521 1522 1523 1524 1525 <li> 1526 <a href="/collections/ç¦é³åå¼ " class="header__menu-item list-menu__item link link--text focus-inset caption-large">Gospel Leaflet ç¦é³åå¼ </a> 1527 </li> 1528 1529 1530 1531 1532 <li> 1533 <a href="/collections/çå¾-plaque" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> Plaque and Cross çå¾åååæ¶</a> 1534 </li> 1535 1536 1537 1538 1539 <li> 1540 <a href="/collections/å饰-pendant" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Pendant å饰</a> 1541 </li> 1542 1543 1544 1545 1546 <li> 1547 <a href="/collections/æ¡æ-table-ornament" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Table Ornamentæ¡æ</a> 1548 </li> 1549 1550 1551 1552 1553 <li> 1554 <a href="/collections/纸å¶å-paper-product" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Paper Product 纸å¶å </a> 1555 </li> 1556 1557 1558 1559 1560 <li> 1561 <a href="/collections/magnet-gifts-ç£é礼å" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Magnet and Electronic ç£éåçµåå</a> 1562 </li> 1563 1564 1565 1566 1567 <li> 1568 <a href="/collections/wall-frame-æ¡" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Wall Frame æ¡</a> 1569 </li> 1570 1571 1572 </ul> 1573 </details> 1574 </details-disclosure> 1575 </li> 1576 1577 1578 1579 1580 1581 1582 <li> 1583 <details-disclosure> 1584 <details> 1585 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 1586 <a href="/collections/å£ç»ç³»å" >Bible å£ç»</a> 1587 1588 1589 1590 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 1591 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1592 </svg> 1593 1594 1595 1596 </summary> 1597 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 1598 1599 1600 1601 1602 <li> 1603 <details-disclosure> 1604 <details> 1605 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 1606 <a href="/collections/chinese-bible-䏿å£ç»" > 1607 Chinese Bible 䏿å£ç» 1608 </a> 1609 1610 1611 1612 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 1613 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1614 </svg> 1615 1616 1617 1618 </summary> 1619 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 1620 1621 <li> 1622 <a href="/collections/å忬-cuv" class="header__menu-item list-menu__item link link--text focus-inset caption-large">å忬</a> 1623 </li> 1624 1625 <li> 1626 <a href="/collections/æ°è¯æ¬" class="header__menu-item list-menu__item link link--text focus-inset caption-large">æ°è¯æ¬</a> 1627 </li> 1628 1629 <li> 1630 <a href="/collections/æ°æ®åè¯æ¬" class="header__menu-item list-menu__item link link--text focus-inset caption-large">æ°æ®åè¯æ¬</a> 1631 </li> 1632 1633 <li> 1634 <a href="/collections/å ¶ä»" class="header__menu-item list-menu__item link link--text focus-inset caption-large">å ¶ä»</a> 1635 </li> 1636 1637 </ul> 1638 </details> 1639 </details-disclosure> 1640 </li> 1641 1642 1643 1644 1645 <li> 1646 <a href="/collections/åè¯-bilingual" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Biligual Bibles åè¯å£ç»</a> 1647 </li> 1648 1649 1650 1651 1652 <li> 1653 <a href="/collections/children-bible-å¿ç«¥å£ç»" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Children Bible å¿ç«¥å£ç»</a> 1654 </li> 1655 1656 1657 1658 1659 <li> 1660 <a href="/collections/english-bible-è±è¯å£ç»" class="header__menu-item list-menu__item link link--text focus-inset caption-large">English Bible è±è¯å£ç»</a> 1661 </li> 1662 1663 1664 </ul> 1665 </details> 1666 </details-disclosure> 1667 </li> 1668 1669 1670 1671 1672 1673 1674 <li> 1675 <details-disclosure> 1676 <details> 1677 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 1678 <a href="/collections/å¿ç«¥è¯»ç©" >Children & Teens Book | å¿ç«¥&å°å¹´ä¹¦ç± </a> 1679 1680 1681 1682 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 1683 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1684 </svg> 1685 1686 1687 1688 </summary> 1689 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 1690 1691 1692 1693 1694 <li> 1695 <details-disclosure> 1696 <details> 1697 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 1698 <a href="/collections/children-book" > 1699 Children Book å¿ç«¥ä¹¦ç± 1700 </a> 1701 1702 1703 1704 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 1705 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1706 </svg> 1707 1708 1709 1710 </summary> 1711 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 1712 1713 <li> 1714 <a href="/collections/å£ç»-å£ç»æ äº-bible-bible-stories" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> English Bible Stories è±è¯å£ç»æ äº </a> 1715 </li> 1716 1717 <li> 1718 <a href="/collections/ç»æ¬-picture-book" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> Picture Book ç»æ¬</a> 1719 </li> 1720 1721 <li> 1722
1722 <a href="/collections/å£ç»bible-å£ç»æ äº-bible-stories" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Chinese Bible Stories 䏿å£ç»æ äº</a> 1723 </li> 1724 1725 </ul> 1726 </details> 1727 </details-disclosure> 1728 </li> 1729 1730 1731 1732 1733 <li> 1734 <a href="/collections/éå°å¹´ä¹¦ç±-teen-s-book" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> Teen's Book éå°å¹´ä¹¦ç±</a> 1735 </li> 1736 1737 1738 </ul> 1739 </details> 1740 </details-disclosure> 1741 </li> 1742 1743 1744 1745 1746 1747 1748 <li> 1749 <details-disclosure> 1750 <details> 1751 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 1752 <a href="/collections/æ¹æ³è®º" >Training è®ç»ææ</a> 1753 1754 1755 1756 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 1757 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1758 </svg> 1759 1760 1761 1762 </summary> 1763 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 1764 1765 1766 1767 <li> 1768 <a href="/collections/主æ¥å¦sunday-school-é¨å¾è®ç»discipleship-training" class="header__menu-item list-menu__item link link--text focus-inset caption-large">Sunday School 主æ¥å¦ / é¨å¾è®ç» Discipleship Training</a> 1769 </li> 1770 1771 1772 </ul> 1773 </details> 1774 </details-disclosure> 1775 </li> 1776 1777 1778 1779 1780 1781 1782 <li> 1783 <a href="/collections/æ¡æ¸¸ä¸æ¸¸æ" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 1784 Board Games and Games æ¡æ¸¸ä¸æ¸¸æ 1785 </a> 1786 </li> 1787 1788 1789 1790 1791 1792 <li> 1793 <a href="/collections/new-arrival" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 1794 New Arrival æ°å 1795 </a> 1796 </li> 1797 1798 1799 1800 1801 1802 <li> 1803 <a href="/collections/add-on" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 1804 Add on 1805 </a> 1806 </li> 1807 1808 1809 </ul> 1810 </details> 1811 </details-disclosure> 1812 </li> 1813 1814 1815 1816 1817 <li> 1818 <a href="/blogs/å¿ç«¥ä¸»æ¥å¦ææ¡" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 1819 Lesson Plan 主æ¥å¦ææ¡ 1820 </a> 1821 </li> 1822 1823 1824 1825 1826 <li> 1827 <a href="https://www.jbcornerstone.com/account/register" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 1828 Create an account 注åè´¦å· 1829 </a> 1830 </li> 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 </ul> 1844 </nav> 1845 <div class="header__icons"> 1846 1847 1848 1849 <div class="header__icon header__icon--account link link--text focus-inset small-hide medium-hide" style="position: relative;"> 1850 <a href="/account/login" class="header__icon link link--text focus-inset p-2"> 1851 1852 1853 1854 <svg class="icon icon-account " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M300,296.19c-70.7,0-137.11,28.74-187,80.93-49.59,51.87-76.9,120.77-76.9,194v25H563.89v-25c0-73.22-27.31-142.12-76.9-194C437.11,324.93,370.7,296.19,300,296.19ZM87.42,546.11C99.29,433.81,190.1,346.19,300,346.19s200.71,87.62,212.58,199.92Z" fill="currentColor"/><path d="M300,285.34c77.6,0,140.73-63.13,140.73-140.73S377.6,3.89,300,3.89,159.27,67,159.27,144.61,222.4,285.34,300,285.34Zm0-231.45a90.73,90.73,0,1,1-90.73,90.72A90.82,90.82,0,0,1,300,53.89Z" fill="currentColor"/></svg> 1855 1856 1857
1858 <span id="my-account" class="header__link-label">Login</span> 1859 </a> 1860 1861 <!-- Referral Notification Popup for Desktop --> 1862 <div id="referralNotification" class="referral-notification" style="display: none;"> 1863 <button class="close-btn" onclick="dismissReferralNotification()">×</button> 1864 <div style="text-align: center; margin-bottom: 16px;"> 1865 <div style="width: 100px; height: 100px; margin: 0 auto;"> 1866 <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg"> 1867 </div> 1868 </div> 1869 <p id="referralSignupMessage" style="text-align: center; font-size: 14px; color: #666; margin: 0 0 20px 0;"> 1870 Your friend gifted you credit! Sign up now to redeem. 1871 </p> 1872 <div style="text-align: center;"> 1873 <button class="btn" onclick="goToSignupPage()" style="width: 100%;"> 1874 Sign Up 1875 </button> 1876 </div> 1877 </div> 1878 </div> 1879 1880 1881 1882 <a href="/cart" class="header__icon link link--text focus-inset" id="cart-icon-bubble"> 1883 <span class="header__icon--cart"> 1884 1885 1886 1887 <svg class="icon icon-cart-empty " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496.56 600"><path d="M453.52,128.63a25,25,0,0,0-24.91-22.8H364.72a117.48,117.48,0,0,0-232.89,0H67.94A25,25,0,0,0,43,128.63L8.8,515.21a72.11,72.11,0,0,0,19.05,55.6,79,79,0,0,0,58.22,25.3H410.49a79,79,0,0,0,58.22-25.3,72.11,72.11,0,0,0,19.05-55.6ZM248.28,53.89a67.58,67.58,0,0,1,65.65,51.94H182.63A67.57,67.57,0,0,1,248.28,53.89ZM431.83,537.05a28.85,28.85,0,0,1-21.34,9.06H86.07a28.85,28.85,0,0,1-21.34-9.06,22.69,22.69,0,0,1-6.13-17.43L90.82,155.83h40v51.23a25,25,0,0,0,50,0V155.83h135v51.23a25,25,0,0,0,50,0V155.83h40L438,519.62A22.68,22.68,0,0,1,431.83,537.05Z" fill="currentColor"/></svg> 1888 1889 1890 1891 <div class="cart-count-bubble hidden"> 1892 <span aria-hidden="true" class="js-content-cart-count">0</span> 1893 </div> 1894 </span> 1895 <span class="header__link-label medium-hide small-hide"> 1896 Cart 1897 </span> 1898 </a> 1899 1900 1901 1902 <!-- Referral Notification Modal for Mobile --> 1903 <details-modal class="referral-modal" id="referralMobileModal"> 1904 <details> 1905 <summary class="referral-modal__toggle" aria-haspopup="dialog" aria-label="Open referral modal" style="display: none;"> 1906 </summary> 1907 <div class="modal-overlay referral-modal-overlay"></div> 1908 <div class="referral-modal__dialog" role="dialog" aria-modal="true" aria-label="Referral notification"> 1909 <div class="referral-modal__content"> 1910 <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;"> 1911 × 1912 </button> 1913 1914 <div style="margin-bottom: 24px;"> 1915 <div style="width: 120px; height: 120px; margin: 0 auto 20px;"> 1916 <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg" style="width: 100%; height: 100%;"> 1917 </div> 1918 </div> 1919 1920 <p id="referralSignupMessageMobile" style="font-size: 16px; color: #333; margin: 0 0 30px 0; line-height: 1.5;"> 1921 Your friend gifted you credit! Sign up now to redeem. 1922 </p> 1923 1924 <button type="button" class="btn" onclick="goToSignupPageFromMobile()" style="width: 100%;"> 1925 Sign Up 1926 </button> 1927 </div> 1928 </div> 1929 </details> 1930 </details-modal> 1931 1932 1933 1934 </div> 1935 </header> 1936 </sticky-header> 1937 1938<cart-notification> 1939 <div class="cart-notification-wrapper page-width color-background-1"> 1940 <div id="cart-notification" class="cart-notification focus-inset" aria-modal="true" aria-label="Added to cart" role="dialog" tabindex="-1"> 1941 <div class="cart-notification__header"> 1942 <h2 class="cart-notification__heading caption-large"> 1943 1944 1945 <svg class="icon icon-checkmark color-foreground-text " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 9" fill="none"> 1946 <path fill-rule="evenodd" clip-rule="evenodd" d="M11.35.643a.5.5 0 01.006.707l-6.77 6.886a.5.5 0 01-.719-.006L.638 4.845a.5.5 0 11.724-.69l2.872 3.011 6.41-6.517a.5.5 0 01.707-.006h-.001z" fill="currentColor"></path> 1947 </svg> 1948 1949 1950 Added to cart</h2> 1951 <button type="button" class="cart-notification__close modal__close-button link link--text focus-inset" aria-label="accessibility.close"> 1952 1953 1954 1955 <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg> 1956 1957 1958 1959 </button> 1960 </div> 1961 <div id="cart-notification-product" class="cart-notification-product"></div> 1962 <div class="cart-notification__links"> 1963 <a href="/cart" id="cart-notification-button" class="button button--secondary button--full-width">View cart (<span class="js-content-cart-count">0</span>)</a> 1964 <form action="/cart" method="post" id="cart-notification-form"> 1965 <input type="hidden" name="_token" value="u4CrXaMTWOVVvvkCQinU4nPPI0zj3CbCKgXiiZmM"> 1966 <input type="hidden" name="current_currency" value=""> 1967 <button class="button button--primary button--full-width" name="checkout" value="true">Checkout</button> 1968 </form> 1969 <a href="/collections/all" class="link button-label">Continue shopping</a> 1970 </div> 1971 </div> 1972 </div> 1973</cart-notification> 1974<style> 1975 .cart-notification { 1976 display: none; 1977 } 1978</style>
1979<script> 1980document.getElementById('cart-notification-form').addEventListener('submit',(event)=>{ 1981 if(event.submitter) event.submitter.classList.add('loading'); 1982}) 1983 1984</script>
1984 1985 1986</div> 1987 1988
1989<script> 1990 1991 class StickyHeader extends HTMLElement { 1992 constructor() { 1993 super(); 1994 } 1995 1996 connectedCallback() { 1997 this.header = document.getElementById('easystore-section-header'); 1998 this.headerBounds = {}; 1999 this.currentScrollTop = 0; 2000 this.preventReveal = false; 2001 2002 this.onScrollHandler = this.onScroll.bind(this); 2003 this.hideHeaderOnScrollUp = () => this.preventReveal = true; 2004 2005 this.addEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp); 2006 window.addEventListener('scroll', this.onScrollHandler, false); 2007 2008 this.createObserver(); 2009 } 2010 2011 disconnectedCallback() { 2012 this.removeEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp); 2013 window.removeEventListener('scroll', this.onScrollHandler); 2014 } 2015 2016 createObserver() { 2017 let observer = new IntersectionObserver((entries, observer) => { 2018 this.headerBounds = entries[0].intersectionRect; 2019 observer.disconnect(); 2020 }); 2021 2022 observer.observe(this.header); 2023 } 2024 2025 onScroll() { 2026 const scrollTop = window.pageYOffset || document.documentElement.scrollTop; 2027 2028 if (scrollTop > this.currentScrollTop && scrollTop > this.headerBounds.bottom) { 2029 requestAnimationFrame(this.hide.bind(this)); 2030 } else if (scrollTop < this.currentScrollTop && scrollTop > this.headerBounds.bottom) { 2031 if (!this.preventReveal) { 2032 requestAnimationFrame(this.reveal.bind(this)); 2033 } else { 2034 window.clearTimeout(this.isScrolling); 2035 2036 this.isScrolling = setTimeout(() => { 2037 this.preventReveal = false; 2038 }, 66); 2039 2040 requestAnimationFrame(this.hide.bind(this)); 2041 } 2042 } else if (scrollTop <= this.headerBounds.top) { 2043 requestAnimationFrame(this.reset.bind(this)); 2044 } 2045 2046 2047 this.currentScrollTop = scrollTop; 2048 } 2049 2050 hide() { 2051 this.header.classList.add('easystore-section-header-hidden', 'easystore-section-header-sticky'); 2052 this.closeMenuDisclosure(); 2053 // this.closeSearchModal(); 2054 } 2055 2056 reveal() { 2057 this.header.classList.add('easystore-section-header-sticky', 'animate'); 2058 this.header.classList.remove('easystore-section-header-hidden'); 2059 } 2060 2061 reset() { 2062 this.header.classList.remove('easystore-section-header-hidden', 'easystore-section-header-sticky', 'animate'); 2063 } 2064 2065 closeMenuDisclosure() { 2066 this.disclosures = this.disclosures || this.header.querySelectorAll('details-disclosure'); 2067 this.disclosures.forEach(disclosure => disclosure.close()); 2068 } 2069 2070 // closeSearchModal() { 2071 // this.searchModal = this.searchModal || this.header.querySelector('details-modal'); 2072 // this.searchModal.close(false); 2073 // } 2074 } 2075 2076 customElements.define('sticky-header', StickyHeader); 2077 2078 2079 class DetailsDisclosure extends HTMLElement{ 2080 constructor() { 2081 super(); 2082 this.mainDetailsToggle = this.querySelector('details'); 2083 // this.mainDetailsToggle.addEventListener('focusout', this.onFocusOut.bind(this)); 2084 this.mainDetailsToggle.addEventListener('mouseover', this.open.bind(this)); 2085 this.mainDetailsToggle.addEventListener('mouseleave', this.close.bind(this)); 2086 } 2087 2088 onFocusOut() { 2089 setTimeout(() => { 2090 if (!this.contains(document.activeElement)) this.close(); 2091 }) 2092 } 2093 2094 open() { 2095 this.mainDetailsToggle.setAttribute('open',1) 2096 } 2097 2098 close() { 2099 this.mainDetailsToggle.removeAttribute('open') 2100 } 2101 } 2102 2103 customElements.define('details-disclosure', DetailsDisclosure); 2104 2105 function clearAll() { 2106 localStorage.removeItem('searchHistory'); 2107 2108 var customer = ""; 2109 if(customer) { 2110 // Your logic to clear all data or call an endpoint 2111 fetch('/account/search_histories', { 2112 method: 'DELETE', 2113 headers: { 2114 "Content-Type": "application/json", 2115 "X-Requested-With": "XMLHttpRequest" 2116 }, 2117 body: JSON.stringify({ 2118 _token: "u4CrXaMTWOVVvvkCQinU4nPPI0zj3CbCKgXiiZmM" 2119 }), 2120 }) 2121 .then(response => response.json()) 2122 } 2123 } 2124 // End - delete search history from local storage 2125 2126 // search history dropdown 2127 var searchInputs = document.querySelectorAll('.search__input'); 2128 2129 if(searchInputs.length > 0) { 2130
2131 searchInputs.forEach((searchInput)=> { 2132 2133 searchInput.addEventListener('focus', function() { 2134 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 2135 searchDropdown.innerHTML = ''; // Clear existing items 2136 2137 // retrieve data from local storage 2138 var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || []; 2139 2140 // Convert JSON to string 2141 var search_history_json = JSON.stringify(searchHistoryData); 2142 2143 // Set the value of the hidden input 2144 searchInput.closest('form').querySelector(".hidden_search_history").value = search_history_json; 2145 2146 // create dropdown items 2147 var clearAllItem = document.createElement('div'); 2148 clearAllItem.className = 'dropdown-item clear-all'; 2149 clearAllItem.textContent = 'Clear'; 2150 clearAllItem.addEventListener('click', function() { 2151 clearAll(); 2152 searchDropdown.style.display = 'none'; 2153 searchInput.classList.remove('is-focus'); 2154 }); 2155 searchDropdown.appendChild(clearAllItem); 2156 2157 // create dropdown items 2158 searchHistoryData.forEach(function(item) { 2159 var dropdownItem = document.createElement('div'); 2160 dropdownItem.className = 'dropdown-item'; 2161 dropdownItem.textContent = item.term; 2162 dropdownItem.addEventListener('click', function() { 2163 searchInput.value = item.term; 2164 searchInput.closest('form').submit(); 2165 searchDropdown.style.display = 'none'; 2166 }); 2167 searchDropdown.appendChild(dropdownItem); 2168 }); 2169 2170 if(searchHistoryData.length > 0){ 2171 // display the dropdown 2172 searchInput.classList.add('is-focus'); 2173 document.body.classList.add('search-input-focus'); 2174 searchDropdown.style.display = 'block'; 2175 } 2176 }); 2177 2178 searchInput.addEventListener("focusout", (event) => { 2179 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 2180 searchInput.classList.remove('is-focus'); 2181 searchDropdown.classList.add('transparent'); 2182 setTimeout(()=>{ 2183 searchDropdown.style.display = 'none'; 2184 searchDropdown.classList.remove('transparent'); 2185 document.body.classList.remove('search-input-focus'); 2186 }, 400); 2187 }); 2188 }) 2189 } 2190 // End - search history dropdown 2191 2192 // referral notification popup 2193 const referralMessageTemplate = 'Your friend gifted you __CURRENCY_CODE__ __CREDIT_AMOUNT__ credit! Sign up now to redeem.'; 2194 const shopCurrency = 'RM'; 2195 2196 function getCookie(name) { 2197 const value = `; ${document.cookie}`; 2198 const parts = value.split(`; ${name}=`); 2199 if (parts.length === 2) return parts.pop().split(';').shift(); 2200 return null; 2201 } 2202 2203 function removeCookie(name) { 2204 document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`; 2205 } 2206 2207 function showReferralNotification() { 2208 const referralCode = getCookie('customer_referral_code'); 2209 2210 2211 const customerReferralCode = null; 2212 2213 2214 const activeReferralCode = referralCode || customerReferralCode; 2215 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 2216 2217 if (referralData.timestamp && referralData.expirationDays) { 2218 const expirationTime = referralData.timestamp + (referralData.expirationDays * 24 * 60 * 60 * 1000); 2219 if (Date.now() > expirationTime) { 2220 localStorage.removeItem('referral_notification_data'); 2221 return; 2222 } 2223 } 2224 2225 if (referralData.dismissed) return; 2226 2227 if (activeReferralCode) { 2228 if (referralData.creditAmount) { 2229 displayReferralNotification(referralData.creditAmount); 2230 } else { 2231 fetchReferralCampaignData(activeReferralCode); 2232 } 2233 } 2234 } 2235 2236 function fetchReferralCampaignData(referralCode) { 2237 fetch(`/customer/referral_program/campaigns/${referralCode}`) 2238 .then(response => { 2239 if (!response.ok) { 2240 throw new Error('Network response was not ok'); 2241 } 2242 return response.json(); 2243 }) 2244 .then(data => { 2245 let refereeCreditAmount = null; 2246 if (data.data.campaign && data.data.campaign.referral_rules) { 2247 const refereeRule = data.data.campaign.referral_rules.find(rule => 2248 rule.target_type === 'referee' && 2249 rule.event_name === 'customer/create' && 2250 rule.entitlement && 2251 rule.entitlement.type === 'credit' 2252 ); 2253 2254 if (refereeRule) { 2255 refereeCreditAmount = refereeRule.entitlement.amount; 2256 } 2257 } 2258 2259 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 2260 referralData.creditAmount = refereeCreditAmount; 2261 referralData.dismissed = referralData.dismissed || false; 2262 referralData.timestamp = Date.now(); 2263 referralData.expirationDays = 3; 2264 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 2265 2266 displayReferralNotification(refereeCreditAmount); 2267 }) 2268 .catch(error => { 2269 removeCookie('customer_referral_code'); 2270 }); 2271 } 2272 2273 function displayReferralNotification(creditAmount = null) { 2274 const isMobile = innerWidth <= 749; 2275 2276 if (isMobile) { 2277 const mobileModal = document.querySelector('#referralMobileModal details'); 2278 const mobileMessageElement = document.getElementById('referralSignupMessageMobile'); 2279 2280 if (mobileModal && mobileMessageElement) { 2281 if (creditAmount) {
2282 const finalMessage = referralMessageTemplate 2283 .replace('__CREDIT_AMOUNT__', creditAmount) 2284 .replace('__CURRENCY_CODE__', shopCurrency); 2285 2286 mobileMessageElement.textContent = finalMessage; 2287 } 2288 2289 mobileModal.setAttribute('open', ''); 2290 } 2291 } else { 2292 const notification = document.getElementById('referralNotification'); 2293 2294 if (notification) { 2295 if (creditAmount) { 2296 const messageElement = document.getElementById('referralSignupMessage'); 2297 if (messageElement) { 2298 const finalMessage = referralMessageTemplate 2299 .replace('__CREDIT_AMOUNT__', creditAmount) 2300 .replace('__CURRENCY_CODE__', shopCurrency); 2301 2302 messageElement.textContent = finalMessage; 2303 } 2304 } 2305 2306 notification.style.display = 'block'; 2307 } 2308 } 2309 } 2310 2311 showReferralNotification(); 2312 2313 addEventListener('beforeunload', function() { 2314 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 2315 2316 if (referralData.creditAmount !== undefined) { 2317 referralData.creditAmount = null; 2318 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 2319 } 2320 }); 2321 2322 function closeReferralNotification() { 2323 const notification = document.getElementById('referralNotification'); 2324 if (notification) { 2325 notification.style.display = 'none'; 2326 } 2327 } 2328 2329 function dismissReferralNotification() { 2330 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 2331 2332 referralData.dismissed = true; 2333 referralData.timestamp = referralData.timestamp || Date.now(); 2334 referralData.expirationDays = referralData.expirationDays || 3; 2335 2336 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 2337 2338 closeReferralNotification(); 2339 } 2340 2341 function goToSignupPage() { 2342 location.href = '/account/register'; 2343 dismissReferralNotification(); 2344 } 2345 2346 function closeMobileReferralModal() { 2347 const mobileModal = document.querySelector('#referralMobileModal details'); 2348 if (mobileModal) { 2349 mobileModal.removeAttribute('open'); 2350 } 2351 2352 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 2353 referralData.dismissed = true; 2354 referralData.timestamp = referralData.timestamp || Date.now(); 2355 referralData.expirationDays = referralData.expirationDays || 3; 2356 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 2357 } 2358 2359 function goToSignupPageFromMobile() { 2360 location.href = '/account/register'; 2361 closeMobileReferralModal(); 2362 } 2363 // End - referral notification popup 2364</script>
2364 2365 2366 2367 2368 <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1">
vendor: 83 bytes, lines 2368-2371
2368 2369 2370 2371<script src="https://www.recaptcha.net/recaptcha/enterprise.js?render=
23716LdMNdIqAAAAALegJp7y4weVcCIlnwmIN8TWseEF
vendor: 12 bytes, line 2371
2371"></script>
2372<link rel="preload" href="https://store-themes.easystore.co/382053/themes/308896/assets/customer.css?t=1790699554" as="style" onload="this.onload=null;this.rel='stylesheet'"> 2373<style> 2374 main.main-content .field > label{ 2375 display: none; 2376 } 2377 .h3{ 2378 font-size: 18px; 2379 } 2380 .button--full-width{ 2381 width: 100%; 2382 } 2383 .tab-wrapper{ 2384 display: inline-flex; 2385 justify-content: center; 2386 align-items: center; 2387 margin: 10px auto 20px; 2388 background-color: #eaeaea; 2389 border-radius: 200px; 2390 padding: 5px; 2391 gap: 10px; 2392 } 2393 .tab-wrapper .tab-label { 2394 display: inline-block; 2395 min-width: 130px; 2396 padding: 8px 15px; 2397 border-radius: 100px; 2398 cursor: pointer; 2399 font-size: 17px; 2400 line-height: 1.1; 2401 user-select: none; 2402 margin: 0; 2403 color: #000; 2404 } 2405 #register-tos a { 2406 display: inline; 2407 } 2408 @media screen and (max-width: 400px){ 2409 .tab-wrapper .tab-label { 2410 min-width: 110px; 2411 } 2412 } 2413 .tab-wrapper input[type='radio']:checked + .tab-label { 2414 background-color: #fff; 2415 box-shadow: 2px 2px 25px -10px #333; 2416 } 2417 2418 @media screen and (min-width: 500px){ 2419 .large--five-twelfths{ 2420 min-width: 420px; 2421 } 2422 } 2423</style> 2424 2425 2426 2427 2428<div class="customer login section-width-control small-width large--five-twelfths text-center wrapper"> 2429 <div class="card"> 2430 <h1 id="login" tabindex="-1" class="mb-0"> 2431 Welcome 2432 </h1> 2433 <p class="h3 mt-0"> 2434 2435 Sign up or log in to continue 2436 2437 </p> 2438 <div> 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 <div class="tab-wrapper"> 2457 <div> 2458 <input type="radio" name="type" id="tab-register" class="hide hidden" checked> 2459 <label for="tab-register" class="tab-label"> 2460 Sign up 2461 </label> 2462 </div> 2463 <div> 2464 <input type="radio" name="type" id="tab-login" class="hide hidden"> 2465 <label for="tab-login" class="tab-label"> 2466 Login 2467 </label> 2468 </div> 2469 </div> 2470 2471 2472 <form id="form-login" action="/account/auth" method="post" class="mt-2"> 2473 <input type="hidden" name="_token" value="u4CrXaMTWOVVvvkCQinU4nPPI0zj3CbCKgXiiZmM"> 2474 <input type="hidden" name="location_id" value=""> 2475 <input type="hidden" name="staff_id" value=""> 2476 <input type="hidden" id="recaptchaResponse" name="g-recaptcha-response"> 2477 2478 2479 <div id="error-content"></div> 2480 2481 <div class="field"> 2482 <input 2483 type="text" 2484 name="customer[email_or_phone]" 2485 id="CustomerDetail" 2486 autocorrect="off" 2487 autocapitalize="off" 2488 placeholder="Email" 2489 required 2490 > 2491 <label for="CustomerDetail"> 2492 Email 2493 </label> 2494 </div> 2495 2496 <button 2497 type="submit" 2498 form="form-login" 2499 class="btn button--full-width g-recaptcha"> 2500 Continue 2501 </button> 2502 2503 <div class="button-snippet"> 2504 2505 </div> 2506 2507 2508 2509 <div id="register-tos"> 2510 By signing up, I agree to the æ¿è§ç³ä¹¦å Cornerstone Book Centre'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">Shipping and Refund Policy</a>. 2511 </div> 2512 2513 </form> 2514 </div> 2515 </div> 2516 2517</div> 2518 2519 2520
2521<script> 2522 const register_tab = document.querySelector('#tab-register'); 2523 const login_tab = document.querySelector('#tab-login'); 2524 const register_tos = document.querySelector('#register-tos'); 2525 const isRegistrationEnabled = "1"; 2526 2527 if (register_tab) { 2528 register_tab.addEventListener('click', function() { 2529 if (register_tos) { 2530 register_tos.style.display = 'block'; 2531 } 2532 }); 2533 } 2534 if (login_tab) { 2535 login_tab.addEventListener('click', function() { 2536 if (register_tos) { 2537 register_tos.style.display = 'none'; 2538 } 2539 }); 2540 } 2541 2542 const methodSwitchBtn = document.getElementById('phone-login-btn'); 2543 if (methodSwitchBtn) { 2544 methodSwitchBtn.onclick = function () { 2545 var type = (register_tab && register_tab.checked) ? 'register' : 'login'; 2546 window.location.href = '/account/login?method=phone&type=' + type; 2547 }; 2548 } 2549 2550 let lastPathSegment = window.location.pathname.split('/').filter(segment => segment.length > 0).pop(); 2551 2552 // Redirect to login if trying to access register when self registration is disabled 2553 if (!isRegistrationEnabled) { 2554 if (lastPathSegment === 'register') { 2555 window.location.href = '/account/login'; 2556 } else if (lastPathSegment === 'login' || lastPathSegment === 'auth') { 2557 if (register_tos) { 2558 register_tos.style.display = 'none'; 2559 } 2560 } 2561 } else { 2562 // Only proceed with tab logic if not redirecting 2563 if(lastPathSegment === 'login') { 2564 if (login_tab) { 2565 login_tab.checked = true; 2566 } 2567 if (register_tos) { 2568 register_tos.style.display = 'none'; 2569 } 2570 } else { 2571 if (register_tos) { 2572 register_tos.style.display = 'block'; 2573 } 2574 } 2575 } 2576 2577 const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; 2578 const phonePattern = /^(?:\+?\d{1,3}[\s-]?)?(?:\d{1,14}[\s-]?){1,5}$/; 2579 2580 let form = document.querySelector('#form-login'), 2581 input = document.querySelector('#CustomerDetail'), 2582 error_content = document.querySelector('#error-content'); 2583 2584 2585 // One attempt at a time: the reCAPTCHA wait below is async, so without 2586 // this a double-click starts two continuations and posts the form twice. 2587 var submitting = false; 2588 2589 form.addEventListener('submit', async function (event) { 2590 // preventDefault FIRST: a re-entrant submit must still be cancelled, or the 2591 // browser performs a native post with no captcha token. 2592 event.preventDefault(); 2593 if (submitting) return; 2594 2595 let input_value = input.value 2596 error_content.innerHTML = ''; 2597 if (!input_value.match(emailPattern) && !input_value.match(phonePattern)) { 2598 error_content.innerHTML = `<div class="errors note">Invalid Email or Phone</div>`; 2599 return false; 2600 } 2601 2602 submitting = true; 2603 document.querySelector('#form-login .btn').classList.add('btn--loading','loading'); 2604 2605 // reCAPTCHA is unreachable from some regions (google.com is blocked in 2606 // mainland China). Fail open the same way checkout and forgot-password do: 2607 // submit without a token rather than leave the button spinning forever. 2608 try { 2609 if (window.grecaptcha && typeof window.grecaptcha.enterprise === 'object') { 2610 // The loader defines a stub {ready} synchronously and fetches the real 2611 // implementation asynchronously, so execute() may not exist yet. 2612 // ready() queues until it does; the timeout stops a bundle that never 2613 // arrives from hanging the button. 2614 await new Promise(function (resolve) { 2615 setTimeout(resolve, 3000); 2616 try { grecaptcha.enterprise.ready(resolve); } catch (e) { resolve(); } 2617 }); 2618 2619 const token = await grecaptcha.enterprise.execute('6LdMNdIqAAAAALegJp7y4weVcCIlnwmIN8TWseEF', { action: 'LOGIN' }); 2620 document.getElementById('recaptchaResponse').value = token; 2621 } 2622 } catch (e) { /* fail open */ } 2623 2624 document.getElementById('form-login').submit(); 2625 }); 2626 2627 2628</script>
2628 2629 2630 2631 </main> 2632 <style> 2633 .footer{ 2634 background-color: #FFFFFF; 2635 color: #000000; 2636 --color-foreground: 0,0,0; 2637 } 2638 .footer .link--text, 2639 .footer .list-menu__item--link, 2640 .footer .footer-block__details-content .list-menu__item--link{ 2641 color: #000000; 2642 } 2643 .footer-block__heading{ 2644 color: #050200; 2645 } 2646</style> 2647 2648<link rel="preload" href="https://store-themes.easystore.co/382053/themes/308896/assets/section-footer.css?t=1790699554" as="style" onload="this.onload=null;this.rel='stylesheet'"> 2649 2650<footer class="footer color-background-1"> 2651 <div class="footer__content-top page-width"> 2652 <div class="grid grid--1-col grid--4-col-tablet "> 2653 2654 2655 2656 <div class="grid__item"> 2657 2658 <h2 class="footer-block__heading">Follow us</h2> 2659 <ul class="footer__list-social list-unstyled list-social footer-block__details-content" role="list"> 2660 2661 2662 <li class="list-social__item"> 2663 <a href="https://www.facebook.com/cornerstonebookcenter" class="link link--text list-social__link"> 2664 2665 2666 2667 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook " 2668 viewBox="0 0 18 18"> 2669 <path fill="currentColor" 2670 d="M16.42.61c.27 0 .5.1.69.28.19.2.28.42.28.7v15.44c0 .27-.1.5-.28.69a.94.94 0 01-.7.28h-4.39v-6.7h2.25l.31-2.65h-2.56v-1.7c0-.4.1-.72.28-.93.18-.2.5-.32 1-.32h1.37V3.35c-.6-.06-1.27-.1-2.01-.1-1.01 0-1.83.3-2.45.9-.62.6-.93 1.44-.93 2.53v1.97H7.04v2.65h2.24V18H.98c-.28 0-.5-.1-.7-.28a.94.94 0 01-.28-.7V1.59c0-.27.1-.5.28-.69a.94.94 0 01.7-.28h15.44z"> 2671 </path> 2672 </svg> 2673 2674 2675 2676 </a> 2677 </li> 2678 2679 2680 <li class="list-social__item"> 2681 <a href="https://www.instagram.com/cornerstonebook.jb/" class="link link--text list-social__link"> 2682 2683 2684 2685 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram " 2686 viewBox="0 0 18 18"> 2687 <path fill="currentColor" 2688 d="M8.77 1.58c2.34 0 2.62.01 3.54.05.86.04 1.32.18 1.63.3.41.17.7.35 1.01.66.3.3.5.6.65 1 .12.32.27.78.3 1.64.05.92.06 1.2.06 3.54s-.01 2.62-.05 3.54a4.79 4.79 0 01-.3 1.63c-.17.41-.35.7-.66 1.01-.3.3-.6.5-1.01.66-.31.12-.77.26-1.63.3-.92.04-1.2.05-3.54.05s-2.62 0-3.55-.05a4.79 4.79 0 01-1.62-.3c-.42-.16-.7-.35-1.01-.66-.31-.3-.5-.6-.66-1a4.87 4.87 0 01-.3-1.64c-.04-.92-.05-1.2-.05-3.54s0-2.62.05-3.54c.04-.86.18-1.32.3-1.63.16-.41.35-.7.66-1.01.3-.3.6-.5 1-.65.32-.12.78-.27 1.63-.3.93-.05 1.2-.06 3.55-.06zm0-1.58C6.39 0 6.09.01 5.15.05c-.93.04-1.57.2-2.13.4-.57.23-1.06.54-1.55 1.02C1 1.96.7 2.45.46 3.02c-.22.56-.37 1.2-.4 2.13C0 6.1 0 6.4 0 8.77s.01 2.68.05 3.61c.04.94.2 1.57.4 2.13.23.58.54 1.07 1.02 1.56.49.48.98.78 1.55 1.01.56.22 1.2.37 2.13.4.94.05 1.24.06 3.62.06 2.39 0 2.68-.01 3.62-.05.93-.04 1.57-.2 2.13-.41a4.27 4.27 0 001.55-1.01c.49-.49.79-.98 1.01-1.56.22-.55.37-1.19.41-2.13.04-.93.05-1.23.05-3.61 0-2.39 0-2.68-.05-3.62a6.47 6.47 0 00-.4-2.13 4.27 4.27 0 00-1.02-1.55A4.35 4.35 0 0014.52.46a6.43 6.43 0 00-2.13-.41A69 69 0 008.77 0z"> 2689 </path> 2690 <path fill="currentColor" 2691 d="M8.8 4a4.5 4.5 0 100 9 4.5 4.5 0 000-9zm0 7.43a2.92 2.92 0 110-5.85 2.92 2.92 0 010 5.85zM13.43 5a1.05 1.05 0 100-2.1 1.05 1.05 0 000 2.1z"> 2692 </path> 2693 </svg> 2694 2695 2696 2697 </a> 2698 </li> 2699 2700 2701 2702 <li class="list-social__item"> 2703 <a href="https://wa.me/601151201129" class="link link--text list-social__link"> 2704 2705 2706 2707 <svg class="icon icon-whatsapp " fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 750"><path d="M703.5,195.64A371,371,0,0,0,572,56C523.89,26,471.51,8.4,415.21,2.51A370.48,370.48,0,0,0,316.5,5.42,364,364,0,0,0,215.23,37.47a369,369,0,0,0-132.68,108Q17.36,230.17,7,336.63A370.11,370.11,0,0,0,53.42,554.94a7.23,7.23,0,0,1,.61,4.9Q36.48,624.6,18.7,689.27C13.24,709.19,7.75,729.1,2.14,749.5c1.23-.26,1.93-.36,2.61-.55q95.75-25.11,191.54-50.2a8.43,8.43,0,0,1,5.19.61c12.79,5.8,25.28,12.34,38.29,17.59A370.28,370.28,0,0,0,666.09,604q69.06-86.36,80-196.47A370.36,370.36,0,0,0,743,311.86,361,361,0,0,0,703.5,195.
270764ZM684.64,388c-3.6,65.27-25.48,123.75-66.06,174.9-44.89,56.63-102.85,93.24-173.19,109.84a297.41,297.41,0,0,1-91.27,7A305.68,305.68,0,0,1,215.31,635a17.54,17.54,0,0,0-15.2-2.14c-35.5,9.58-71.1,18.74-106.66,28-.49.13-1,.21-2.14.45,1.72-6.37,3.29-12.22,4.89-18Q109,596.7,121.66,550.07a7.12,7.12,0,0,0-1-5.07c-12.37-19.32-23.31-39.25-31.6-60.64A309,309,0,0,1,70.4,410.63c-6.11-49.35-.93-97.44,16.1-144.15,57.86-160.1,234.55-243,394.65-185.11a308.31,308.31,0,0,1,120.2,79.18c34.9,37.19,59.32,80.31,72.81,129.53A304.75,304.75,0,0,1,684.64,388Z"/><path d="M556,454.42c-13.84-6.52-27.43-13.55-41.24-20.12-11.47-5.46-23-10.89-34.73-15.69-9.1-3.73-13.09-1.72-19.12,6.06-9.39,12.09-19.09,23.95-28.89,35.71-4.7,5.63-9.47,6.79-16.1,3.8-12.32-5.56-24.82-10.9-36.58-17.51-39.6-22.29-69.59-54.3-92.67-93.11-4.87-8.2-4.3-12.16,2.14-19.13,9.07-9.9,18.4-19.63,24.09-32.12a17.42,17.42,0,0,0,.47-14.67c-9.55-23-19-46-28.75-68.92a75.82,75.82,0,0,0-7-12.7c-2.56-3.82-6.6-5.49-11.28-5.36H255.78v-.56c-5.48.29-11,.11-16.39,1-8.66,1.37-15,6.75-20.95,12.94-25.46,26.48-34.58,57.89-28.66,93.83a145.64,145.64,0,0,0,20.75,53.75C220.48,377.5,231.32,393,242.65,408a435.09,435.09,0,0,0,70.53,73.19c31.48,26,67,44.54,105.56,57.58,16.1,5.44,32.08,11.08,49.36,11.42,11.52.22,23,.08,34.16-3.22a110.77,110.77,0,0,0,42.1-23.61c5.48-4.81,10.48-10.18,13.19-17a110.56,110.56,0,0,0,7.57-37.2C565.27,461.93,562.42,457.42,556,454.42Z"/></svg> 2708 2709 2710 2711 </a> 2712 </li> 2713 2714 2715 2716 2717 2718 </ul> 2719 2720 </div> 2721 2722 2723 2724 <div class="grid__item"> 2725 2726 <h2 class="footer-block__heading">We accept</h2> 2727 <div class="footer-block__details-content footer__payment"> 2728 <ul class="list list-payment" role="list"> 2729 2730 2731 2732 2733 2734 2735 2736 2737 <li class="list-payment__item"> 2738 <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_ipay88.svg" alt="payment_ipay88" loading="lazy" width="85px"> 2739 </li> 2740 2741 <li class="list-payment__item"> 2742 <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_bank-transfer.svg" alt="payment_bank-transfer" loading="lazy" width="85px"> 2743 </li> 2744 2745 <li class="list-payment__item"> 2746 <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_tngpay.svg" alt="payment_tngpay" loading="lazy" width="85px"> 2747 </li> 2748 2749 2750 </div> 2751 2752 </div> 2753 2754 2755 2756 <div class="grid__item"> 2757 2758 <h2 class="footer-block__heading"> 2759 Quick links 2760 </h2> 2761 <ul class="footer-block__details-content list-unstyled"> 2762 2763 <li> 2764 <a href="/pages/membership-æ¿è§ç³ç½åºä¼åç¦å©" class="link link--text list-menu__item list-menu__item--link"> 2765 Membership æ¿è§ç³ç½åºä¼åç¦å© 2766 </a> 2767 </li> 2768 2769 <li> 2770 <a href="https://www.jbcornerstone.com/pages/contact-us-%E8%81%94%E7%B3%BB%E6%88%91%E4%BB%AC" target="_blank" class="link link--text list-menu__item list-menu__item--link"> 2771 Contact Us 2772 </a> 2773 </li> 2774 2775 <li> 2776 <a href="/pages/shipping-and-return-policy" class="link link--text list-menu__item list-menu__item--link"> 2777 Shipping and Refund Policy 2778 </a> 2779 </li> 2780 2781 <li> 2782 <a href="https://www.jbcornerstone.com/pages/about-us-%E5%85%B3%E4%BA%8E%E6%88%91%E4%BB%AC" class="link link--text list-menu__item list-menu__item--link"> 2783 About Us 2784 </a> 2785 </li> 2786 2787 <li> 2788 <a href="/pages/å¥ç®æ¯æ" class="link link--text list-menu__item list-menu__item--link"> 2789 å¥ç®æ¯æ 2790 </a> 2791 </li> 2792 2793 <li> 2794 <a href="/blogs/å¿ç«¥ä¸»æ¥å¦ææ¡" class="link link--text list-menu__item list-menu__item--link"> 2795 å¿ç«¥ä¸»æ¥å¦ææ¡ 2796 </a> 2797 </li> 2798 2799 2800 </ul> 2801 2802 </div> 2803 2804 </div> 2805 </div>
2806 <div class="footer__content-bottom"> 2807 <div class="footer__content-bottom-wrapper page-width"> 2808 <div class="footer__column footer__column--info"> 2809 2810 2811 2812 2813 2814 <div class="footer__copyright caption"> 2815 <div class="copyright__content">Copyright © 2026 Partners Training & Communication Sdn.Bhd. (500714-x)</div> 2816 </div> 2817 2818 <div class="footer__copyright caption"> 2819 2820 <div> 2821 2822 2823 2824 <a href="/legal/terms-of-service">Terms of Service</a> 2825 2826 2827 2828 2829 | <a href="/legal/privacy-policy">Privacy Policy</a> 2830 2831 2832 2833 2834 | <a href="/legal/refund-policy">Shipping and Refund Policy</a> 2835 2836 2837 2838 </div> 2839 2840 </div> 2841 2842 </div> 2843 </div> 2844 </div> 2845</footer> 2846 2847 2848 2849 2850 2851 2852
2852<script> 2853 EasyStore.Currencies.init([{"name":"Malaysian Ringgit","code":"MYR","rate":"1.0","format_prefix":"RM","format_suffix":null,"format_decimals":2,"thousand_separator":",","is_primary":true}], 1) 2854</script>
2854 2855 2856 2857 2858
2858<script> 2859 let page_template = 'customers'; 2860 2861 if(document.querySelector('.currency-picker')) { 2862 EasyStore.Currencies.change(document.querySelector('.currency-picker').value) 2863 EasyStore.Currencies.convertAll() 2864 } 2865 2866 document.querySelectorAll('.currency-picker').forEach((el)=>{ 2867 el.addEventListener('change',(event)=>{ 2868 EasyStore.Currencies.change(event.target.value) 2869 2870 2871 if (page_template == 'cart') { 2872 const params = new URLSearchParams(window.location.search); 2873 params.set('delete_cache', 1); 2874 window.location.search = params; 2875 } else { 2876 window.location.reload(); 2877 } 2878 2879 return 2880 2881 2882 document.querySelectorAll('[name=currencies],[name=current_currency]').forEach((el)=>{ 2883 el.value = event.target.value 2884 }) 2885 2886 if(page_template == 'cart') location.reload(); 2887 }) 2888 }) 2889 </script>
2889 2890 2891 2892 2893 2894
2894<script> 2895 2896 window.variantStrings = { 2897 addToCart: `Add to Cart`, 2898 soldOut: `Sold Out`, 2899 unavailable: `Unavailable`, 2900 } 2901 2902 window.accessibilityStrings = { 2903 shareSuccess: `Link copied to clipboard`, 2904 } 2905 </script>
2905 2906 2907<!-- Snippet:global/body_end: Product Label --> 2908<link href='https://apps.easystore.co/assets/css/product-label/main.css?v2.3' rel='stylesheet' type='text/css' media='screen' />
2908<script src='https://apps.easystore.co/product-labels/productlabelv2.js?shop=ptckul.easy.co' type='text/javascript'></script>
2908 2909<!-- /Snippet --> 2910 2911<!-- Snippet:global/body_end: Product Description Tabs --> 2912<style> 2913 .product-description-tabs{ 2914 color: #000000; 2915 } 2916 .prod-desc-tab-container { 2917 padding: 15px; 2918 margin-right: auto; 2919 margin-left: auto; 2920 background-color: #ffffff; 2921 } 2922 /* Style the list */ 2923 .prod-desc-tab { 2924 list-style-type: none; 2925 margin: 0; 2926 padding: 0; 2927 border-bottom: solid 1px #ddd; 2928 /*overflow: hidden; 2929 border: 1px solid #e6e6e6; 2930 background-color: #fefefe; 2931 border-bottom: 1px solid #ddd;*/ 2932 } 2933 2934 /* Float the list items side by side */ 2935 li.tablinks { 2936 display: inline-block; 2937 border-top: 3px solid transparent; 2938 border-left: 1px solid transparent; 2939 border-right: 1px solid transparent; 2940 margin-bottom: -1px; 2941 margin-right: 3px; 2942 border-radius: 4px 4px 0 0; 2943 background-color: rgba(212,212,212,0.3); 2944 } 2945 2946 /* Style the links inside the list items */ 2947 li.tablinks a { 2948 color: #000000; 2949 cursor: pointer; 2950 margin-right: 2px; 2951 line-height: 1.42857143; 2952 display: block; 2953 padding: 10px 15px; 2954 } 2955 2956 /* Change background color of links on hover */ 2957 li.tablinks:hover { 2958 background-color: #ffffff; 2959 border-bottom-color: transparent; 2960 border-top: 3px solid #ddd; 2961 border-left: 1px solid #ddd; 2962 border-right: 1px solid #ddd; 2963 } /*rgba(212,212,212,0.3)*/ 2964 2965 /* Create an active/current tablink class */ 2966 li.tablinks a:focus, li.tablinks.active{ 2967 border-top: 3px solid #ddd; 2968 border-left: 1px solid #ddd; 2969 border-right: 1px solid #ddd; 2970 background-color: #ffffff; 2971 } 2972 2973 /* Style the tab content */ 2974 .prod-desc-tab-content { 2975 display: none; 2976 padding: 15px 15px; 2977 /*border: 1px solid #ccc;*/ 2978 border-top: none; 2979 clear: both; 2980 -webkit-animation: fadeEffect 1s; 2981 animation: fadeEffect 1s; /* Fading effect takes 1 second */ 2982 } 2983 .prod-desc-tab-content ul{ 2984 list-style-type: disc; 2985 } 2986 2987 /* if user select is_show_title is true, the title will be displayed; if not, hide the title*/ 2988 .prod-desc-tab-content > h2{ 2989 display:none; 2990 } 2991 2992 @-webkit-keyframes fadeEffect { 2993 from {opacity: 0;} 2994 to {opacity: 1;} 2995 } 2996 2997 @keyframes fadeEffect { 2998 from {opacity: 0;} 2999 to {opacity: 1;} 3000 } 3001 3002 .tab_drawer_heading { display: none; } 3003 3004 @media screen and (max-width: 480px) { 3005 .prod-desc-tab { 3006 display: none; 3007 } 3008 .tab_drawer_heading { 3009 background-color: transparent; 3010 color: #000000; 3011 border-bottom: 1px solid #ddd; 3012 margin: 0; 3013 padding: 6px 12px; 3014 display: block; 3015 cursor: pointer; 3016 -webkit-touch-callout: none; 3017 -webkit-user-select: none; 3018 -khtml-user-select: none; 3019 -moz-user-select: none; 3020 -ms-user-select: none; 3021 user-select: none; 3022 position: relative; 3023 } 3024 .tab_drawer_heading:after { 3025 content: ''; 3026 top: 50%; 3027 right: 40px; 3028 position: absolute; 3029 border: solid black; 3030 border-width: 0 3px 3px 0; 3031 display: inline-block; 3032 width: 10px; 3033 height: 10px; 3034 margin-top: -5px; 3035 transform: rotate(45deg); 3036 -webkit-transform: rotate(45deg); 3037 -webkit-transition: all 200ms linear; 3038 -moz-transition: all 200ms linear; 3039 -ms-transition: all 200ms linear; 3040 -o-transition: all 200ms linear; 3041 transition: all 200ms linear; 3042 } 3043 .d_active { 3044 background-color: rgba(212,212,212,0.3); 3045 } 3046 .d_active.tab_drawer_heading:after{ 3047 margin-top: -3px; 3048 transform: rotate(-135deg); 3049 -webkit-transform: rotate(-135deg); 3050 } 3051 } 3052</style> 3053
3054<script type="text/javascript"> 3055 // If the page has no jquery 3056 // if(typeof jQuery == 'undefined'){ 3057 // console.log(456); 3058 // var script = document.createElement('script'); 3059 // script.type = "text/javascript"; 3060 // script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"; 3061 // console.log(script); 3062 // document.getElementsByTagName('head')[0].appendChild(script); 3063 // } 3064 3065 /* if in tab mode */ 3066 $("body").on("click", ".tablinks", function(){ 3067 var id = $(this).data("prod-desc-id"); 3068 3069 // Get all elements with class="prod-desc-tab-content" and hide them 3070 $(".prod-desc-tab-content").hide(); 3071 3072 // Get all elements with class="tablinks" and remove the class "active" 3073 $(".tablinks").removeClass("active"); 3074 3075 // Show the current tab, and add an "active" class to the link that opened the tab 3076 $("#"+id+"_desc_tab_content").show(); 3077 $(this).addClass("active"); 3078 3079 // make mobile view(drawer mode) also in same tab 3080 $(".tab_drawer_heading").removeClass("d_active"); 3081 $(".tab_drawer_heading[data-prod-desc-id='"+id+"']").addClass("d_active"); 3082 3083 }); 3084 3085 /* if in drawer mode */ 3086 $("body").on("click", ".tab_drawer_heading", function() { 3087 var id = $(this).data("prod-desc-id") 3088 var active = $(this).hasClass("d_active") 3089 3090 $(".prod-desc-tab-content").hide(); 3091 $(".tab_drawer_heading").removeClass("d_active"); 3092 3093 if(!active){ 3094 $("#"+id+"_desc_tab_content").show(); 3095 $(this).addClass("d_active"); 3096 window.scroll({ 3097 top: $(this).offset().top - 120, 3098 left: 0, 3099 behavior: 'smooth' 3100 }); 3101 } 3102 3103 $(".tablinks").removeClass("active"); 3104 $(".tablinks[data-prod-desc-id='"+id+"']").addClass("active"); 3105 }); 3106 3107 $(function(){ 3108 var x = $(".product-description").find("h1, h2, h3, h4, h5, h6"); 3109 var title = null; 3110 var body = null; 3111 3112 if(x.length > 1){ 3113 $(".product-description").after("<link href='/assets/css/froala_style.min.css' rel='stylesheet' type='text/css'/><div class='product-description-tabs fr-view rte'><ul class='prod-desc-tab' style='margin: auto;'></ul><div class='prod-desc-tab-container'></div></div>"); 3114 $(x).each(function(k, v){ 3115 title = $(v).text(); 3116 3117 if(k == 0){ 3118 body = $(x[0]).nextUntil(x[1]).clone(); 3119 $(".prod-desc-tab").append('<li class="tablinks active" data-prod-desc-id="'+k+'"><a>'+title+'</a></li>'); 3120 $(".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>'); 3121 $("#"+k+"_desc_tab_content h2").after(body); 3122 } 3123 else if(k == x.length){ 3124 body = $(x[k]).nextAll().clone(); 3125 $(".prod-desc-tab").append('<li class="tablinks" data-prod-desc-id="'+k+'"><a>'+title+'</a></li>'); 3126 $(".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>'); 3127 $("#"+k+"_desc_tab_content h2").after(body); 3128 } 3129 else{ 3130 body = $(x[k]).nextUntil(x[k+1]).clone(); 3131 $(".prod-desc-tab").append('<li class="tablinks" data-prod-desc-id="'+k+'"><a>'+title+'</a></li>'); 3132 $(".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>'); 3133 $("#"+k+"_desc_tab_content h2").after(body); 3134 } 3135 }); 3136 $(".product-description").hide(); 3137 } 3138 3139 }); 3140</script>
3140 3141<!-- /Snippet -->
3142<script> 3143 3144 /* 3145 3146 ------ 3147 Events 3148 ------ 3149 3150 pages/viewed 3151 3152 customers/signup 3153 3154 customers/login 3155 3156 products/searched 3157 3158 collections/viewed 3159 3160 products/viewed 3161 3162 products/shared 3163 3164 wishlists/item_added 3165 3166 carts/items_added 3167 3168 carts/viewed 3169 3170 carts/item_removed 3171 3172 checkouts/initiated 3173 3174 checkouts/shipping_info_added 3175 3176 checkouts/payment_info_added 3177 3178 checkouts/completed 3179 3180 orders/placed 3181 3182 orders/purchased 3183 3184 payments/captured 3185 3186 payments/failed 3187 3188 */ 3189 3190 window.__latest_cart = window.__latest_cart || null; 3191 3192 const _selector = document.querySelector.bind(document), 3193 _selectorAll = document.querySelectorAll.bind(document) 3194 3195 document.addEventListener('DOMContentLoaded', (event) => { 3196 3197 const default_currency = getCookie("currency") 3198 const customer_id = window.__st.cid 3199 const template = window.__st.p 3200 3201 onPageView() 3202 3203 //-----------------------// 3204 // Configs // 3205 //-----------------------// 3206 3207 window.dataLayer = window.dataLayer || [] 3208 3209 Array.prototype.last = Array.prototype.last || function() { 3210 return this[this.length - 1] || null 3211 } 3212 3213 Array.prototype.first = Array.prototype.first || function() { 3214 return this[0] || null 3215 } 3216 3217 //----------------------// 3218 // Triggers // 3219 //----------------------// 3220 3221 const XHR = window.XMLHttpRequest 3222 3223 function xhr() { 3224 3225 const xhr = new XHR() 3226 3227 xhr.addEventListener("readystatechange", function() { 3228 3229 if(xhr.readyState != 4) return 3230 3231 try { 3232 3233 const response_url = xhr.responseURL 3234 3235 if (response_url.includes("cart/add")) { 3236 3237 window.__latest_cart = JSON.parse(xhr.response) 3238 3239 onCartItemsAdded() // ok 3240 3241 } 3242 3243 if (response_url.includes("cart/remove_item_quantity")) { 3244 3245 window.__latest_cart = JSON.parse(xhr.response) 3246 3247 onCartItemRemoved() // ok 3248 3249 } 3250 3251 if (response_url.includes("new_cart?retrieve=true")) { 3252 3253 result = JSON.parse(xhr.response) 3254 3255 if (result.cart) { 3256 window.__latest_cart = result.cart 3257 } 3258 3259 } 3260 3261 } catch(e) { 3262 3263 console.error(e) 3264 3265 } 3266 3267 }, false); 3268 3269 return xhr 3270 3271 } 3272 3273 window.XMLHttpRequest = xhr 3274 3275 switch(template) { 3276 3277 case 'cart': onCartView() // ok 3278 break 3279 case 'product': onProductView() // ok 3280 break 3281 case 'collection': onCollectionView() // ok 3282 break 3283 case 'blog': onBlogView() 3284 break 3285 case 'article': onArticleView() 3286 break 3287 case 'payment_completed': onOrderPlace() 3288 break 3289 case 'payment_fail': onPaymentFail() 3290 break 3291 3292 } 3293 3294 // _selector('form[action="/checkout/payments"]').addEventListener("submit", onPaymentInfoAdded(_selector('form[action="/checkout/payments"]'))) 3295 if (_selector('form[action="/checkout/detail"]')) _selector('form[action="/checkout/detail"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/detail"]'))}) // ok 3296 if (_selector('form[action="/checkout/shipping"]')) _selector('form[action="/checkout/shipping"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/shipping"]'))}) // ok 3297 if (_selector('form[action="/account/register"]')) _selector('form[action="/account/register"]').addEventListener("submit", onSignUp) // ok 3298 if (_selector('form[action="/account/login"]')) _selector('form[action="/account/login"]').addEventListener("submit", onLogin) // ok 3299 if (_selector('form[action="/search"]')) _selector('form[action="/search"]').addEventListener("submit", onProductSearch()) // ok 3300 if (_selector('#line-login-btn')) _selector('#line-login-btn').addEventListener('click', onLineLogin) // ok 3301 if (_selector('#PlaceOrder')) _selector('#PlaceOrder').addEventListener("click", ()=>{onCheckoutComplete(_selector('form[action="/checkout/payments"]'))}); // ok 3302 if (_selector('#add_wishlist')) _selector('#add_wishlist').addEventListener("click", onWishlistItemAdded) // ok 3303 if (_selectorAll('a[href="/account/logout"]')) _selectorAll('a[href="/account/logout"]').forEach(logoutButton => logoutButton.addEventListener("click", onLogout)) // ok 3304 if (_selector('.CartDrawerTrigger.cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link').addEventListener("click", onCartView) // ok 3305 if (_selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link').addEventListener("click", onCartView) // ok 3306 if (_selectorAll('a[class^="share-"]')) _selectorAll('a[class^="share-"]').forEach(shareButton => shareButton.addEventListener("click", ()=>{onProductShare(shareButton)}) ) // ok 3307 if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate)) 3308 3309 // For append elements 3310 const bodyMutationObserver = new MutationObserver(() => { 3311 if (_selector('#form__spc #PlaceOrder')) _selector('#form__spc #PlaceOrder').addEventListener("click", onSinglePageCheckout) // ok 3312 if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate)) 3313 }); 3314 bodyMutationObserver.observe(_selector("body"), {subtree: true, childList: true}); 3315 3316 //------------------------------// 3317 // Event handlers // 3318 //------------------------------// 3319 3320 function onPageView() { 3321 3322 EasyStore.Event.dispatch('pages/viewed', { 3323 page: { 3324 type: template, 3325 title: document.title, 3326 description: _selector('meta[name=description]') ? _selector('meta[name=description]').getAttribute('content') : null, 3327 url: location.href, 3328 } 3329 }) 3330 3331 } 3332 3333 function onSignUp() { 3334 3335 const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/) 3336 const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/) 3337 3338 const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "") 3339 3340 let data = {} 3341 3342 if (email_regex.test(email_or_phone)) { 3343 data.method = 'email' 3344 data.email = email_or_phone 3345 } 3346 3347 if (phone_regex.test(email_or_phone)) { 3348 data.method = "phone" 3349 data.phone = email_or_phone 3350 } 3351 3352 if (!data.method) return 3353 3354 EasyStore.Event.dispatch('customers/signup', data) 3355 3356 } 3357 3358 function onLogin() { 3359 3360 const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/) 3361 const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/) 3362 3363 const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "") 3364 3365 let data = {} 3366 3367 if (email_regex.test(email_or_phone)) { 3368 data.method = 'email' 3369 data.email = email_or_phone 3370 } 3371 3372 if (phone_regex.test(email_or_phone)) { 3373 data.method = "phone" 3374 data.phone = email_or_phone 3375 } 3376 3377 if (!data.method) return 3378 3379 EasyStore.Event.dispatch('customers/login', data) 3380 3381 } 3382 3383 function onLineLogin() { 3384 3385 EasyStore.Event.dispatch('customers/login', { method: 'line' }) 3386 3387 } 3388 3389 function onLogout() { 3390 3391 EasyStore.Event.dispatch('customers/logout', { customer_id }) 3392 3393 } 3394 3395 function onBlogView() { 3396 3397 const blog = "" 3398 3399 EasyStore.Event.dispatch('blogs/viewed', { blog }) 3400 3401 } 3402 3403 function onArticleView() { 3404 3405 const article = "" 3406 3407 EasyStore.Event.dispatch('articles/viewed', { article }) 3408 3409 } 3410 3411 function onProductSearch() { 3412 3413 const query = _selector('input[name=q]').value 3414 3415 if (!query) return 3416 3417 EasyStore.Event.dispatch('products/searched', { query }) 3418 3419 } 3420 3421 function onCollectionView() { 3422 3423 const collection = "" 3424 3425 EasyStore.Event.dispatch('collections/viewed', { collection }) 3426 3427 } 3428 3429 function onProductView() { 3430 3431 const product = "" 3432 3433 EasyStore.Event.dispatch("products/viewed", { product }) 3434 3435 } 3436 3437 function onProductShare(el) { 3438 3439 const product = "" 3440 3441 const channel = el.getAttribute("class").split("-").last() 3442 3443 EasyStore.Event.dispatch('products/shared', { product, channel }) 3444 3445 } 3446 3447 function onWishlistItemAdded() { 3448 3449 let product = "" 3450 const quantity = _selector("#Quantity").value 3451 3452 EasyStore.Event.dispatch('wishlists/item_added', { product }) 3453 3454 } 3455 3456 async function onCartItemsAdded() { 3457 3458 const cart = await getCart() 3459 3460 if(cart && cart.items != undefined && cart.items.length > 0) { 3461 3462 EasyStore.Event.dispatch('carts/item_added', { cart }) 3463 3464 } 3465 3466 } 3467 3468 async function onCartView() { 3469 3470 const cart = await getCart() 3471 3472 EasyStore.Event.dispatch('carts/viewed', { cart }) 3473 3474 } 3475 3476 async function onCartItemRemoved() { 3477 3478 const cart = await getCart() 3479 3480 cart.items = [] 3481 3482 if(cart) { 3483 3484 EasyStore.Event.dispatch('carts/item_removed', { cart }) 3485 3486 } 3487 3488 } 3489 3490 async function onCheckoutInitiate() { 3491 3492 const cart = await getCart() 3493 3494 EasyStore.Event.dispatch('checkouts/initiated', { cart }) 3495 3496 } 3497 3498 async function onShippingInfoAdded(form) { 3499 let checkout = getCheckout() 3500 3501 let form_data = {} 3502 new FormData(form).forEach((value, key) => form_data[key] = value) 3503 3504 let shipping_tier = null 3505 3506 if (form_data.type && form_data.type.startsWith("r_pickup")) { 3507 shipping_tier = `Pickup - ${form_data.pick_location}` 3508 } 3509 3510 if (form_data.s_id) {
3511 shipping_tier = _selector(`input[id='`+form_data.s_id+`']`).getAttribute("data-shipping-name") 3512 } 3513 3514 if (!shipping_tier) return 3515 3516 EasyStore.Event.dispatch('checkouts/shipping_info_added', { checkout, shipping_tier }) 3517 3518 } 3519 3520 async function onPaymentInfoAdded(form) { 3521 3522 let checkout = getCheckout() 3523 3524 let payment_type = new FormData(form).get('payment_method') 3525 3526 EasyStore.Event.dispatch("checkouts/payment_info_added", { checkout, payment_type }) 3527 3528 } 3529 3530 async function onOrderPlace() { 3531 3532 let cart_token = getCookie("cart_js") 3533 let previous_cart_token = getCookie("previous_cart_ga4_js") 3534 3535 if (previous_cart_token && previous_cart_token == cart_token) { 3536 // Prevent duplicate purchase tracking 3537 return 3538 } 3539 3540 let order = getOrder() 3541 3542 EasyStore.Event.dispatch('orders/placed', { order }) 3543 3544 if(order.is_manual_payment) { 3545 3546 EasyStore.Event.dispatch('orders/purchased', { order }) 3547 3548 } 3549 3550 const last_transaction = order.transactions.last() 3551 3552 if (last_transaction.status) { 3553 3554 EasyStore.Event.dispatch('orders/purchased', { order }) 3555 EasyStore.Event.dispatch('payments/captured', { order }) 3556 3557 } 3558 3559 } 3560 3561 async function onPaymentFail() { 3562 3563 const order = getOrder() 3564 3565 EasyStore.Event.dispatch('payments/failed', { order }) 3566 3567 } 3568 3569 async function onCheckoutComplete(form) { 3570 3571 onPaymentInfoAdded(form) 3572 3573 const checkout = getCheckout() 3574 3575 EasyStore.Event.dispatch('checkouts/completed', { checkout }) 3576 3577 } 3578 3579 async function onSinglePageCheckout() { 3580 3581 // let checkout = $("[data-app-checkout]").data("app-checkout") 3582 3583 let checkout = getCheckout() 3584 3585 // const payment_type = _selector("#app_spc_payment_method").find(`[class*="label-content"]`).first().find("b").first().text() 3586 const payment_type = _selector("#app_spc_payment_method").getElementsByClassName('label-content')[0].getElementsByTagName('b')[0].innerHTML 3587 3588 const shipping_method = _selector("#delivery_method").value 3589 3590 let shipping_tier = null 3591 let app_spc_customer_info_label = _selector("#app_spc_customer_info").getElementsByClassName('label-content') 3592 if (shipping_method == "shipping") { 3593 shipping_tier = app_spc_customer_info_label[app_spc_customer_info_label.length - 1].getElementsByTagName('b')[0].innerHTML 3594 } 3595 3596 if (shipping_method == "pickup") { 3597 shipping_tier = app_spc_customer_info_label[0].innerHTML 3598 } 3599 3600 if (shipping_tier) { 3601 3602 EasyStore.Event.dispatch('checkouts/shipping_info_added', { 3603 checkout, 3604 shipping_tier, 3605 }) 3606 3607 } 3608 3609 if (payment_type) { 3610 3611 EasyStore.Event.dispatch('checkouts/payment_info_added', { 3612 checkout, 3613 payment_type, 3614 }) 3615 3616 } 3617 3618 EasyStore.Event.dispatch('checkouts/completed', { checkout }) 3619 3620 } 3621 3622 }) 3623 3624 3625 //-----------------------// 3626 // Functions // 3627 //-----------------------// 3628 3629 function getCookie(name) { 3630 3631 name += "=" 3632 3633 decodedCookie = decodeURIComponent(document.cookie) 3634 3635 ca = decodedCookie.split(";") 3636 3637 for(i = 0; i < ca.length; i++) { 3638 c = ca[i] 3639 while (c.charAt(0) == " ") { 3640 c = c.substring(1) 3641 } 3642 if (c.indexOf(name) == 0) { 3643 return c.substring(name.length, c.length) 3644 } 3645 } 3646 3647 return "" 3648 3649 } 3650 3651 const parsePrice = price => { 3652 if(typeof price === 'string') { 3653 return parseFloat(price.split(',').join('')) 3654 } 3655 3656 return price 3657 } 3658 3659 const requestCart = async (method, data) => { 3660 3661 let response = await fetch('/cart.json', {method: 'GET',headers: {'Content-Type': 'application/json'}}) 3662 result = await response.json() 3663 3664 return result.cart 3665 3666 } 3667 const getCart = async (latest = false) => { 3668 3669 let cart = window.__latest_cart 3670 3671 const cart_invalid = !cart || !cart.items || (cart.total_price > 0 && !cart.items.length) 3672 3673 if(latest || cart_invalid) { 3674 cart = await requestCart() 3675 } 3676 3677 cart.items = cart.items || [] 3678 3679 return mapCart(cart) 3680 3681 } 3682 3683 const getCheckout = async () => { 3684 mapCheckout(window.__latest_cart || await requestCart()) 3685 } 3686 3687 const getOrder = async () => { 3688 mapOrder(window.__latest_cart || await requestCart()) 3689 } 3690 3691 //-----------------------// 3692 // Mappers // 3693 //-----------------------// 3694 3695 const fallbackAttribute = (object, attribute) => { 3696 3697 if(!Array.isArray(attribute)) { 3698 attribute = [attribute] 3699 } 3700 3701 let final_value = null 3702 3703 do { 3704 3705 final_value = object[attribute.shift()] 3706 3707 } while(!final_value && attribute.length) 3708 3709 return final_value 3710 3711 } 3712 3713 const map = (object, mapper) => { 3714 3715 const newObject = {} 3716 3717 for(const key in mapper) { 3718 3719 // Handle different keys between new and old format
3720 newObject[key] = fallbackAttribute(object, mapper[key]) 3721 3722 // Cast price to float 3723 if(newObject[key] && ['price', 'amount', 'discount', 'discounts'].some(x => key.endsWith(x))) { 3724 newObject[key] = parsePrice(newObject[key]) 3725 } 3726 3727 if(newObject[key] === undefined) { 3728 delete newObject[key] 3729 } 3730 3731 } 3732 3733 return newObject 3734 3735 } 3736 3737 const mapCart = cart => { 3738 3739 const oldCart = cart 3740 3741 const mapper = { 3742 id: 'id', 3743 currency: 'currency', 3744 item_count: 'item_count', 3745 items: 'items', 3746 total_price: 'total_price', 3747 latest_items: 'latest_items' 3748 } 3749 3750 cart = map(cart, mapper) 3751 3752 const discounts = (oldCart.storewide_discounts || []).concat((oldCart.voucher_discounts || [])) 3753 3754 cart.discount_applications = discounts.map(discount => ({ 3755 title: discount.voucher_code || null, 3756 value: parsePrice(discount.amount), 3757 })) 3758 3759 cart.original_total_price = cart.items.length 3760 ? cart.items 3761 .map(item => item.original_price) 3762 .reduce((sum, price) => sum + price) 3763 : 0 3764 3765 cart.total_discount = cart.discount_applications.length 3766 ? cart.discount_applications 3767 .map(discount => parsePrice(discount.value)) 3768 .reduce((sum, value) => sum + value) 3769 : 0 3770 3771 cart.items = cart.items.map(item => mapLineItem(item)) 3772 3773 return cart 3774 3775 } 3776 3777 const mapCheckout = checkout => { 3778 3779 const mapper = { 3780 note: 'note', 3781 attributes: 'note_attributes', 3782 billing_address: 'billing_address', 3783 currency: 'currency', 3784 customer_id: 'customer_id', 3785 discounts_amount: 'total_discount', 3786 id: 'id', 3787 line_items: 'order_item', 3788 order_number: 'order_number', 3789 shipping_address: 'shipping_address', 3790 shipping_price: 'shipping_tax', 3791 shipping_method: 'shipping_method_name', 3792 tax_price: 'total_tax', 3793 } 3794 3795 checkout = map(checkout, mapper) 3796 3797 checkout.requires_shipping = checkout.line_items.some(item => item.shipping_required) 3798 3799 checkout.line_items = checkout.line_items.map(item => mapLineItem(item)) 3800 3801 return checkout 3802 3803 } 3804 3805 const mapOrder = order => { 3806 3807 const mapper = { 3808 attributes: 'note_attributes', 3809 billing_address: 'billing_address', 3810 cancelled: 'is_cancelled', 3811 cancelled_at: 'cancelled_at', 3812 created_at: 'created_at', 3813 customer_id: 'customer_id', 3814 // discount_applications: 'discount_applications', 3815 email: 'email', 3816 financial_status: 'financial_status', 3817 fulfillment_status: 'fulfillment_status', 3818 line_items: 'order_item', 3819 note: 'note', 3820 order_number: 'order_number', 3821 phone: 'phone', 3822 shipping_address: 'shipping_address', 3823 shipping_methods: 'shipping_methods', 3824 shipping_price: 'total_shipping', 3825 subtotal_price: 'subtotal_price', 3826 // tax_lines: 'tax_lines', 3827 tax_price: 'total_tax', 3828 total_discounts: 'total_discount', 3829 total_net_amount: 'total_amount_include_transaction', 3830 total_price: 'total_price', 3831 transactions: 'transaction_records', 3832 is_manual_payment: 'is_manual_payment', 3833 } 3834 3835 order.email = order.billing_address.email 3836 order.phone = order.billing_address.phone 3837 order.shipping_method = order.shipping_method_name 3838 3839 order = map(order, mapper) 3840 3841 order.line_items = order.line_items.map(item => mapLineItem(item)) 3842 order.transactions = order.transactions.map(transaction => mapTransaction(transaction)) 3843 3844 return order 3845 3846 } 3847 3848 const mapLineItem = line_item => { 3849 3850 const old_line_item = line_item 3851 3852 const mapper = { 3853 final_price: 'price', 3854 image: 'img_url', 3855 message: 'message', 3856 original_line_price: 'original_line_price', 3857 original_price: 'original_price', 3858 properties: 'properties', 3859 quantity: 'quantity', 3860 requires_shipping: 'shipping_required', 3861 sku: 'sku', 3862 taxable: 'taxable', 3863 title: 'product_name', 3864 product_name: 'product_name', 3865 url: 'url', 3866 product_id: 'product_id', 3867 variant_id: 'variant_id', 3868 id: ['id', 'i_id'], 3869 } 3870 3871 line_item = map(line_item, mapper) 3872 3873 line_item.product_id = line_item.product_id || (old_line_item.product && old_line_item.product.id) || null 3874 line_item.variant_id = line_item.variant_id || (old_line_item.variant && old_line_item.variant.id) || null 3875 line_item.image = line_item.image || (old_line_item.image && old_line_item.image.url) || null 3876 3877 return line_item 3878 3879 } 3880 3881 const mapTransaction = transaction => { 3882 3883 const mapper = { 3884 amount: 'amount', 3885 created_at: 'created_at', 3886 gateway: 'gateway_type', 3887 id: 'id', 3888 status: 'status', 3889 } 3890 3891 transaction = map(transaction, mapper) 3892 3893 return transaction 3894 3895 } 3896 3897 3898</script>
3898 3899 3900</body> 3901</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.