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/1273171/f/10967666.jpg" /> 15 16 17 <!-- Title and description ================================================== --> 18 <title> 19 Cart – æ¨ç æ UA WOOD STUDIO 20 </title> 21 22 23 24 <!-- Social meta ================================================== --> 25 26 27 <meta property="og:type" content="website"> 28 <meta property="og:title" content="Cart"> 29 <meta property="og:url" content="https://www.uawoodstudio.com/cart"> 30 31 <meta property="og:image" content="https://cdn.store-assets.com/s/1273171/f/12446947.jpg"> 32 <meta property="og:image:secure_url" content="https://cdn.store-assets.com/s/1273171/f/12446947.jpg"> 33 34 35 36<meta property="og:description" content="æ¨é 餿çµåé ç´ å¤ç·æè¡ï¼ 37ç¨å ¨æ°çæ¹å¼åç¾æ¨ç¢åï¼ 38顿åçç¢åï¼é½è½å°å¥åº·å被åçºä¸»åç帶é²ä½ æçæ´»ã"> 39<meta property="og:site_name" content="æ¨ç æ UA WOOD STUDIO"> 40 41 42 43 <meta name="twitter:card" content="summary"> 44 45 46 47 <meta name="twitter:site" content="@"> 48 49 50 51 52 53 <!-- Helpers ================================================== --> 54 <link rel="canonical" href="https://www.uawoodstudio.com/cart"> 55 <meta name="viewport" content="width=device-width,initial-scale=1"> 56 <meta name="theme-color" content="#968E7C"> 57 58
58<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript" ></script>
58 59 60 <!-- Header hook for plugins ================================================== --> 61 62<!-- ScriptTags -->
63<script>window.__st={p: "cart",cid: null,cem: null,cph: null,cfn: null,cln: null,cge: null,cdb: null,ccc: null};</script>
63<script src='/assets/events.js'></script>
63<script>(function(){function asyncLoad(){var urls=['/assets/facebook-pixel.js?v=1.2.1686028475','/assets/traffic.js?v=1','https://apps.easystore.co/instagram-feed/script.js?shop=uawoodstudio.easy.co&t=1769741797'];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>
63 64<!-- /ScriptTags --> 65 66 67 68
68<script src="https://store-themes.easystore.co/1273171/themes/63057/assets/global.js?t=1787079682" defer="defer"></script>
68 69 70 71 72
72<script> 73 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 74 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 75 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 76 })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 77 78 ga('create', '', 'auto','myTracker'); 79 ga('myTracker.send', 'pageview'); 80 81 </script>
81 82 83
83<script src="/assets/storefront.js?id=1d419de2011a5572c98b" type="text/javascript" ></script>
83 84 85 86 <!-- CSS ================================================== --> 87 <style> 88 @font-face { 89 font-family: 'Rubik'; 90 font-style: normal; 91 font-weight: regular; 92 src: local('Rubik regular'), local('Rubik-regular'), url(https://fonts.gstatic.com/s/rubik/v14/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4i1UE80V4bVkA.ttf) format('truetype'); 93 } 94 95 @font-face { 96 font-family: 'Archivo Black'; 97 font-style: normal; 98 font-weight: regular; 99 src: local('Archivo Black regular'), local('Archivo Black-regular'), url(https://fonts.gstatic.com/s/archivoblack/v10/HTxqL289NzCGg4MzN6KJ7eW6OYuP_x7yx3A.ttf) format('truetype'); 100 } 101 102 :root { 103 --font-body-family: 'Rubik', sans-serif; 104 --font-body-style: normal; 105 --font-body-weight: 500; 106 107 --font-heading-family: 'Archivo Black', sans-serif; 108 --font-heading-style: normal; 109 --font-heading-weight: 700; 110 111 --color-heading-text: 150,142,124; 112 --color-base-text: 150,142,124; 113 --color-base-background-1: 255,255,255; 114 --color-base-background-2: 255,255,255; 115 116 --color-base-solid-button-labels: 255,255,255; 117 --color-base-outline-button-labels: 150,142,124; 118 119 --color-base-accent-1: 150,142,124; 120 --color-base-accent-2: 150,142,124; 121 --payment-terms-background-color: 255,255,255; 122 123 --gradient-base-background-1: 255,255,255; 124 --gradient-base-background-2: 255,255,255; 125 --gradient-base-accent-1: 150,142,124; 126 --gradient-base-accent-2: 150,142,124; 127 128 --page-width: 140rem; 129 } 130 131 *, 132 *::before, 133 *::after { 134 box-sizing: inherit; 135 } 136 137 html { 138 box-sizing: border-box; 139 font-size: 62.5%; 140 height: 100%; 141 } 142 143 body { 144 display: grid; 145 grid-template-rows: auto auto 1fr auto; 146 grid-template-columns: 100%; 147 min-height: 100%; 148 margin: 0; 149 font-size: 1.5rem; 150 letter-spacing: 0.06rem; 151 line-height: 1.8; 152 font-family: var(--font-body-family); 153 font-style: var(--font-body-style); 154 font-weight: var(--font-body-weight); 155 156 } 157 158 @media screen and (min-width: 750px) { 159 body { 160 font-size: 1.6rem; 161 } 162 } 163 </style> 164 165 <link href="https://store-themes.easystore.co/1273171/themes/63057/assets/base.css?t=1787079682" rel="stylesheet" type="text/css" media="screen" /> 166 167 168 169<!-- Snippet:global/head: Instagram Feed --> 170<link rel="stylesheet" href="https://apps.easystore.co/assets/css/instagram-feed/insta-feed-style.css?v3"> 171<!-- /Snippet --> 172 173 174
174<script>document.documentElement.className = document.documentElement.className.replace('no-js', 'js');</script>
174 175</head> 176 177<body id="cart" class="template-cart" > 178 179 180<!-- Snippet:global/body_start: Console Extension --> 181<div id='es_console' style='display: none;'>1273171</div> 182<!-- /Snippet --> 183 184 185 <style> 186 header { 187 --logo-width: 130px; 188 } 189 .header-wrapper, 190 .header-wrapper .list-menu--disclosure, 191 .header-wrapper .search-modal{ 192 background-color: #0E322A; 193 } 194 .header-wrapper .search-modal .field__input{ 195 background-color: rgb(var(--color-background)); 196 } 197 .header-wrapper summary .icon-caret, 198 .header-wrapper .header__menu-item a, 199 .header-wrapper .list-menu__item, 200 .header-wrapper .link--text{ 201 color: #E5E1E1; 202 } 203 204 .search-modal__form{ 205 position: relative; 206 } 207 208 .dropdown { 209 display: none; 210 position: absolute; 211 top: 100%; 212 left: 0; 213 width: 100%; 214 padding: 5px 0; 215 background-color: #fff; 216 color:#000; 217 z-index: 1000; 218 border-bottom-left-radius: 15px; 219 border-bottom-right-radius: 15px; 220 border: 1px solid rgba(var(--color-foreground), 1); 221 border-top: none; 222 overflow-x: hidden; 223 overflow-y: auto; 224 max-height: 350px; 225 } 226 227 .dropdown-item { 228 padding: 0.4rem 2rem; 229 cursor: pointer; 230 line-height: 1.4; 231 overflow: hidden; 232 text-overflow: ellipsis; 233 white-space: nowrap; 234 } 235 236 .dropdown-item:hover{ 237 background-color: #f3f3f3; 238 } 239 240 .search__input.is-focus{ 241 border-radius: 15px; 242 border-bottom-left-radius: 0; 243 border-bottom-right-radius: 0; 244 border: 1px solid rgba(var(--color-foreground), 1); 245 border-bottom: none; 246 box-shadow: none; 247 } 248 249 .clear-all { 250 text-align: right; 251 padding: 0 2rem 0.2rem; 252 line-height: 1; 253 font-size: 70%; 254 margin-bottom: -2px; 255 } 256 257 .clear-all:hover{ 258 background-color: #fff; 259 } 260 261 .search-input-focus .easystore-section-header-hidden{ 262 transform: none; 263 } 264 .referral-notification { 265 position: absolute; 266 top: 100%; 267 right: 0; 268 background: white; 269 border: 1px solid #e0e0e0; 270 border-radius: 8px; 271 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 272 width: 280px; 273 z-index: 1000; 274 padding: 16px; 275 margin-top: 8px; 276 font-size: 14px; 277 line-height: 1.4; 278 } 279 280 .referral-notification::before { 281 content: ''; 282 position: absolute; 283 top: -8px; 284 right: 20px; 285 width: 0; 286 height: 0; 287 border-left: 8px solid transparent; 288 border-right: 8px solid transparent; 289 border-bottom: 8px solid white; 290 } 291 292 .referral-notification::after { 293 content: ''; 294 position: absolute; 295 top: -9px; 296 right: 20px; 297 width: 0; 298 height: 0; 299 border-left: 8px solid transparent; 300 border-right: 8px solid transparent; 301 border-bottom: 8px solid #e0e0e0; 302 } 303 304 .referral-notification h4 { 305 margin: 0 0 8px 0; 306 color: #2196F3; 307 font-size: 16px; 308 font-weight: 600; 309 } 310 311 .referral-notification p { 312 margin: 0 0 12px 0; 313 color: #666; 314 } 315 316 .referral-notification .referral-code { 317 background: #f5f5f5; 318 padding: 8px; 319 border-radius: 4px; 320 font-family: monospace; 321 font-size: 13px; 322 text-align: center; 323 margin: 8px 0; 324 border: 1px solid #ddd; 325 } 326 327 .referral-notification .close-btn { 328 position: absolute; 329 top: 8px; 330 right: 8px; 331 background: none; 332 border: none; 333 font-size: 18px; 334 color: #999; 335 cursor: pointer; 336 padding: 0; 337 width: 20px; 338 height: 20px; 339 line-height: 1; 340 } 341 342 .referral-notification .close-btn:hover { 343 color: #333; 344 } 345 346 .referral-notification .action-btn { 347 background: #2196F3; 348 color: white; 349 border: none; 350 padding: 8px 16px; 351 border-radius: 4px; 352 cursor: pointer; 353 font-size: 12px; 354 margin-right: 8px; 355 margin-top: 8px; 356 } 357 358 .referral-notification .action-btn:hover { 359 background: #1976D2; 360 } 361 362 .referral-notification .dismiss-btn { 363 background: transparent; 364 color: #666; 365 border: 1px solid #ddd; 366 padding: 8px 16px; 367 border-radius: 4px; 368 cursor: pointer; 369 font-size: 12px; 370 margin-top: 8px; 371 } 372 373 .referral-notification .dismiss-btn:hover { 374 background: #f5f5f5; 375 } 376 .referral-modal__dialog { 377 transform: translate(-50%, 0); 378 transition: transform var(--duration-default) ease, visibility 0s; 379 z-index: 10000; 380 position: fixed; 381 top: 20vh; 382 left: 50%; 383 width: 100%; 384 max-width: 350px; 385 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 386 border-radius: 12px; 387 background-color: #fff; 388 color: #000; 389 padding: 20px; 390 text-align: center; 391 } 392 393 .modal-overlay.referral-modal-overlay { 394 position: fixed; 395 top: 0; 396 left: 0; 397 width: 100%; 398 height: 100%; 399 background-color: rgba(0, 0, 0, 0.7); 400 z-index: 2001; 401 display: block; 402 opacity: 1;
403 transition: opacity var(--duration-default) ease, visibility 0s; 404 } 405</style> 406 407<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/section-header.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 408<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-list-menu.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 409<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-menu-drawer.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 410<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-cart-notification.css?v1.1?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 411
412<script src="https://store-themes.easystore.co/1273171/themes/63057/assets/cart-notification.js?t=1787079682" defer="defer"></script>
vendor: 2 bytes, line 412
412
413<script src="https://store-themes.easystore.co/1273171/themes/63057/assets/details-modal.js?t=1787079682" defer="defer"></script>
413 414 415<svg xmlns="http://www.w3.org/2000/svg" class="hidden"> 416 <symbol id="icon-search" viewbox="0 0 18 19" fill="none"> 417 <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"/> 418 </symbol> 419 420 <symbol id="icon-close" class="icon icon-close" fill="none" viewBox="0 0 18 17"> 421 <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"> 422 </symbol> 423</svg> 424 425 426<div id="easystore-section-header"> 427 <div class="header-wrapper header-wrapper--border-bottom"> 428 <header class="header header--middle-left page-width header--has-menu" itemscope itemtype="http://schema.org/Organization"> 429 <header-drawer data-breakpoint="tablet"> 430 <details class="menu-drawer-container menu-opening"> 431 <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"> 432 <span> 433 434 435 436 <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> 437 438 439 440 441 442 443 <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> 444 445 446 447 </span> 448 </summary> 449 <div id="menu-drawer" class="menu-drawer motion-reduce" tabindex="-1"> 450 <div class="menu-drawer__inner-container"> 451 <div class="menu-drawer__navigation-container"> 452 <nav class="menu-drawer__navigation"> 453 <ul class="menu-drawer__menu list-menu" role="list"> 454 455 456 457 <li> 458 <a href="/" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 459 é¦é 460 </a> 461 </li> 462 463 464 465 466 467 <li> 468 <details> 469 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 470 <a href="/collections/all" class="link--text list-menu__item menu-drawer__menu-item"> 471 ææåå 472 </a> 473 474 475 476 <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> 477 478 479 480 481 482 483 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 484 <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> 485 </svg> 486 487 488 489 </summary> 490 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 491 <div class="menu-drawer__inner-submenu"> 492 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 493 494 495 496 <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> 497 498 499 500 ææåå 501 </button> 502 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 503 504 505 506 <li> 507 <a href="/collections/æ°åæ¨è¦" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 508 實æ¨èå 509 </a> 510 </li> 511 512 513 514 515 <li> 516 <a href="/collections/人氣æ¨è¦" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 517 æº«åº¦çæ´» 518 </a> 519 </li> 520 521 522 523 524 <li> 525 <a href="/collections/é 件飾å" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 526 è·äººæ¨é¶ 527 </a> 528 </li> 529 530 531 532 533 <li> 534 <a href="/collections/æ¶å¤é²ç" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 535 é¢¨æ ¼æ¶å¤ 536 </a> 537 </li> 538 539 540 541 542 <li> 543 <a href="/collections/客製å°å" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 544 客製å°å 545 </a> 546 </li> 547 548 549 550 </ul> 551 </div> 552 </div> 553 </details> 554 </li> 555 556 557 558 559 <li> 560 <a href="/pages/客製å°å-é禮-禮ç©-ç¯æ¥-çæ¥ç¦®ç©-ç·ç禮ç©-女ç
560禮ç©" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 561 客製å°å 562 </a> 563 </li> 564 565 566 567 568 <li> 569 <a href="/pages/åçæ äº" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 570 åçæ äº 571 </a> 572 </li> 573 574 575 576 577 <li> 578 <a href="/pages/è¯ç¹«æå" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 579 è¯ç¹«æå 580 </a> 581 </li> 582 583 584 </ul> 585 </nav> 586 587 <div class="menu-drawer__utility-links"> 588 589 590 591 592 593 594 595 596 597 <a href="/account/login" class="menu-drawer__account link link--text focus-inset h5"> 598 599 600 601 <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> 602 603 604 605 606 ç»å ¥ 607 </a> 608 609 <a href="/account/register" class="menu-drawer__account link link--text focus-inset h5"> 610 611 612 613 614 <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"> 615 <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> 616 </svg> 617 618 619 620 註å帳è 621 </a> 622 623 624 625 </div> 626 </div> 627 </div> 628 </div> 629 </details> 630 </header-drawer> 631 632 633 <a href="/" class="header__heading-link link link--text focus-inset" itemprop="url"> 634 <img src="https://cdn.store-assets.com/s/1273171/f/10967666.jpg" class="header__heading-logo" alt="æ¨ç æ UA WOOD STUDIO" loading="lazy" itemprop="logo"> 635 </a> 636 637 638 639 <div class="header__search-input" tabindex="-1"> 640 <form action="/search" method="get" role="search" class="search search-modal__form"> 641 <div class="field"> 642 <input class="search__input field__input" 643 id="Search-In-Modal" 644 type="search" 645 name="q" 646 value="" 647 placeholder="æå°" 648 autocomplete="off" 649 > 650 <label class="field__label" for="Search-In-Modal">æå°</label> 651 <div class="dropdown" id="searchDropdown"></div> 652 <input type="hidden" name="search_history" class="hidden_search_history"> 653 <input type="hidden" name="options[prefix]" value="last"> 654 <button class="search__button field__button" aria-label="æå°"> 655 <svg class="icon icon-search" aria-hidden="true" focusable="false" role="presentation"> 656 <use href="#icon-search"> 657 </svg> 658 </button> 659 </div> 660 </form> 661 </div> 662 663 664 <nav class="header__inline-menu"> 665 <ul class="list-menu list-menu--inline" role="list"> 666 667 668 669 <li> 670 <a href="/" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 671 é¦é 672 </a> 673 </li> 674 675 676 677 678 679 <li> 680 <details-disclosure> 681 <details> 682 <summary class="header__menu-item list-menu__item link focus-inset"> 683 <a href="/collections/all" >ææåå</a> 684 685 686 687 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 688 <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> 689 </svg> 690 691 692 693 </summary> 694 <ul class="header__submenu list-menu list-menu--disclosure caption-large motion-reduce" role="list" tabindex="-1"> 695 696 697 698 699 700 <li> 701 <a href="/collections/æ°åæ¨è¦" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 702 實æ¨èå 703 </a> 704 </li> 705 706 707 708 709 710 <li> 711 <a href="/collections/人氣æ¨è¦" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 712 æº«åº¦çæ´» 713 </a> 714 </li> 715 716 717 718 719 720 <li> 721 <a href="/collections/é 件飾å" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 722 è·äººæ¨é¶ 723 </a> 724 </li> 725 726 727 728 729 730 <li> 731 <a href="/collections/æ¶å¤é²ç" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 732 é¢¨æ ¼æ¶å¤ 733 </a> 734 </li> 735 736 737 738 739 740 <li> 741 <a href="/collections/客製å°å" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 742 客製å°å 743 </a> 744 </li> 745 746 747 </ul> 748 </details> 749 </details-disclosure> 750 </li> 751 752 753 754 755 <li> 756 <a href="/pages/客製å°å-é禮-禮ç©-ç¯æ¥-çæ¥ç¦®ç©-ç·ç禮ç©-女ç
756禮ç©" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 757 客製å°å 758 </a> 759 </li> 760 761 762 763 764 <li> 765 <a href="/pages/åçæ äº" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 766 åçæ äº 767 </a> 768 </li> 769 770 771 772 773 <li> 774 <a href="/pages/è¯ç¹«æå" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 775 è¯ç¹«æå 776 </a> 777 </li> 778 779 780 781 782 783 784 785 786 787 788 789 790 </ul> 791 </nav> 792 <div class="header__icons"> 793 794 795 796 <div class="header__icon header__icon--account link link--text focus-inset small-hide medium-hide" style="position: relative;"> 797 <a href="/account/login" class="header__icon link link--text focus-inset p-2"> 798 799 800 801 <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> 802 803 804 805 <span id="my-account" class="header__link-label">ç»å ¥</span> 806 </a> 807 808 <!-- Referral Notification Popup for Desktop --> 809 <div id="referralNotification" class="referral-notification" style="display: none;"> 810 <button class="close-btn" onclick="dismissReferralNotification()">×</button> 811 <div style="text-align: center; margin-bottom: 16px;"> 812 <div style="width: 100px; height: 100px; margin: 0 auto;"> 813 <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg"> 814 </div> 815 </div> 816 <p id="referralSignupMessage" style="text-align: center; font-size: 14px; color: #666; margin: 0 0 20px 0;"> 817 æ¨ç好å鿍 åé¥éï¼ç«å³è¨»åé åã 818 </p> 819 <div style="text-align: center;"> 820 <button class="btn" onclick="goToSignupPage()" style="width: 100%;"> 821 註å 822 </button> 823 </div> 824 </div> 825 </div> 826 827 828 829 <a href="/cart" class="header__icon link link--text focus-inset" id="cart-icon-bubble"> 830 <span class="header__icon--cart"> 831 832 833 834 <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> 835 836 837 838 <div class="cart-count-bubble hidden"> 839 <span aria-hidden="true" class="js-content-cart-count"></span> 840 </div> 841 </span>
842 <span class="header__link-label medium-hide small-hide"> 843 è³¼ç©è» 844 </span> 845 </a> 846 847 848 849 <!-- Referral Notification Modal for Mobile --> 850 <details-modal class="referral-modal" id="referralMobileModal"> 851 <details> 852 <summary class="referral-modal__toggle" aria-haspopup="dialog" aria-label="Open referral modal" style="display: none;"> 853 </summary> 854 <div class="modal-overlay referral-modal-overlay"></div> 855 <div class="referral-modal__dialog" role="dialog" aria-modal="true" aria-label="Referral notification"> 856 <div class="referral-modal__content"> 857 <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;"> 858 × 859 </button> 860 861 <div style="margin-bottom: 24px;"> 862 <div style="width: 120px; height: 120px; margin: 0 auto 20px;"> 863 <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg" style="width: 100%; height: 100%;"> 864 </div> 865 </div> 866 867 <p id="referralSignupMessageMobile" style="font-size: 16px; color: #333; margin: 0 0 30px 0; line-height: 1.5;"> 868 æ¨ç好å鿍 åé¥éï¼ç«å³è¨»åé åã 869 </p> 870 871 <button type="button" class="btn" onclick="goToSignupPageFromMobile()" style="width: 100%;"> 872 註å 873 </button> 874 </div> 875 </div> 876 </details> 877 </details-modal> 878 879 880 881 </div> 882 </header> 883 </div> 884 885<cart-notification> 886 <div class="cart-notification-wrapper page-width color-background-1"> 887 <div id="cart-notification" class="cart-notification focus-inset" aria-modal="true" aria-label="å·²å å ¥è³¼ç©è»" role="dialog" tabindex="-1"> 888 <div class="cart-notification__header"> 889 <h2 class="cart-notification__heading caption-large"> 890 891 892 <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"> 893 <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> 894 </svg> 895 896 897 å·²å å ¥è³¼ç©è»</h2> 898 <button type="button" class="cart-notification__close modal__close-button link link--text focus-inset" aria-label="accessibility.close"> 899 900 901 902 <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> 903 904 905 906 </button> 907 </div> 908 <div id="cart-notification-product" class="cart-notification-product"></div> 909 <div class="cart-notification__links"> 910 <a href="/cart" id="cart-notification-button" class="button button--secondary button--full-width">æ¥çè³¼ç©è» (<span class="js-content-cart-count"></span>)</a> 911 <form action="/cart" method="post" id="cart-notification-form"> 912 <input type="hidden" name="_token" value="zupj0VALNZftglkc2fEBpAzNPyFjLjL7Vd1ecESZ"> 913 <input type="hidden" name="current_currency" value=""> 914 <button class="button button--primary button--full-width" name="checkout" value="true">çµå¸³</button> 915 </form> 916 <button type="button" class="link button-label">ç¹¼çºè³¼ç©</button> 917 </div> 918 </div> 919 </div> 920</cart-notification> 921<style> 922 .cart-notification { 923 display: none; 924 } 925</style>
926<script> 927document.getElementById('cart-notification-form').addEventListener('submit',(event)=>{ 928 if(event.submitter) event.submitter.classList.add('loading'); 929}) 930 931</script>
931 932 933</div> 934 935
936<script> 937 938 class StickyHeader extends HTMLElement { 939 constructor() { 940 super(); 941 } 942 943 connectedCallback() { 944 this.header = document.getElementById('easystore-section-header'); 945 this.headerBounds = {}; 946 this.currentScrollTop = 0; 947 this.preventReveal = false; 948 949 this.onScrollHandler = this.onScroll.bind(this); 950 this.hideHeaderOnScrollUp = () => this.preventReveal = true; 951 952 this.addEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp); 953 window.addEventListener('scroll', this.onScrollHandler, false); 954 955 this.createObserver(); 956 } 957 958 disconnectedCallback() { 959 this.removeEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp); 960 window.removeEventListener('scroll', this.onScrollHandler); 961 } 962 963 createObserver() { 964 let observer = new IntersectionObserver((entries, observer) => { 965 this.headerBounds = entries[0].intersectionRect; 966 observer.disconnect(); 967 }); 968 969 observer.observe(this.header); 970 } 971 972 onScroll() { 973 const scrollTop = window.pageYOffset || document.documentElement.scrollTop; 974 975 if (scrollTop > this.currentScrollTop && scrollTop > this.headerBounds.bottom) { 976 requestAnimationFrame(this.hide.bind(this)); 977 } else if (scrollTop < this.currentScrollTop && scrollTop > this.headerBounds.bottom) { 978 if (!this.preventReveal) { 979 requestAnimationFrame(this.reveal.bind(this)); 980 } else { 981 window.clearTimeout(this.isScrolling); 982 983 this.isScrolling = setTimeout(() => { 984 this.preventReveal = false; 985 }, 66); 986 987 requestAnimationFrame(this.hide.bind(this)); 988 } 989 } else if (scrollTop <= this.headerBounds.top) { 990 requestAnimationFrame(this.reset.bind(this)); 991 } 992 993 994 this.currentScrollTop = scrollTop; 995 } 996 997 hide() { 998 this.header.classList.add('easystore-section-header-hidden', 'easystore-section-header-sticky'); 999 this.closeMenuDisclosure(); 1000 // this.closeSearchModal(); 1001 } 1002 1003 reveal() { 1004 this.header.classList.add('easystore-section-header-sticky', 'animate'); 1005 this.header.classList.remove('easystore-section-header-hidden'); 1006 } 1007 1008 reset() { 1009 this.header.classList.remove('easystore-section-header-hidden', 'easystore-section-header-sticky', 'animate'); 1010 } 1011 1012 closeMenuDisclosure() { 1013 this.disclosures = this.disclosures || this.header.querySelectorAll('details-disclosure'); 1014 this.disclosures.forEach(disclosure => disclosure.close()); 1015 } 1016 1017 // closeSearchModal() { 1018 // this.searchModal = this.searchModal || this.header.querySelector('details-modal'); 1019 // this.searchModal.close(false); 1020 // } 1021 } 1022 1023 customElements.define('sticky-header', StickyHeader); 1024 1025 1026 class DetailsDisclosure extends HTMLElement{ 1027 constructor() { 1028 super(); 1029 this.mainDetailsToggle = this.querySelector('details'); 1030 // this.mainDetailsToggle.addEventListener('focusout', this.onFocusOut.bind(this)); 1031 this.mainDetailsToggle.addEventListener('mouseover', this.open.bind(this)); 1032 this.mainDetailsToggle.addEventListener('mouseleave', this.close.bind(this)); 1033 } 1034 1035 onFocusOut() { 1036 setTimeout(() => { 1037 if (!this.contains(document.activeElement)) this.close(); 1038 }) 1039 } 1040 1041 open() { 1042 this.mainDetailsToggle.setAttribute('open',1) 1043 } 1044 1045 close() { 1046 this.mainDetailsToggle.removeAttribute('open') 1047 } 1048 } 1049 1050 customElements.define('details-disclosure', DetailsDisclosure); 1051 1052 function clearAll() { 1053 localStorage.removeItem('searchHistory'); 1054 1055 var customer = ""; 1056 if(customer) { 1057 // Your logic to clear all data or call an endpoint 1058 fetch('/account/search_histories', { 1059 method: 'DELETE', 1060 headers: { 1061 "Content-Type": "application/json", 1062 "X-Requested-With": "XMLHttpRequest" 1063 }, 1064 body: JSON.stringify({ 1065 _token: "zupj0VALNZftglkc2fEBpAzNPyFjLjL7Vd1ecESZ" 1066 }), 1067 }) 1068 .then(response => response.json()) 1069 } 1070 } 1071 // End - delete search history from local storage 1072 1073 // search history dropdown 1074 var searchInputs = document.querySelectorAll('.search__input'); 1075 1076 if(searchInputs.length > 0) { 1077
1078 searchInputs.forEach((searchInput)=> { 1079 1080 searchInput.addEventListener('focus', function() { 1081 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 1082 searchDropdown.innerHTML = ''; // Clear existing items 1083 1084 // retrieve data from local storage 1085 var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || []; 1086 1087 // Convert JSON to string 1088 var search_history_json = JSON.stringify(searchHistoryData); 1089 1090 // Set the value of the hidden input 1091 searchInput.closest('form').querySelector(".hidden_search_history").value = search_history_json; 1092 1093 // create dropdown items 1094 var clearAllItem = document.createElement('div'); 1095 clearAllItem.className = 'dropdown-item clear-all'; 1096 clearAllItem.textContent = 'Clear'; 1097 clearAllItem.addEventListener('click', function() { 1098 clearAll(); 1099 searchDropdown.style.display = 'none'; 1100 searchInput.classList.remove('is-focus'); 1101 }); 1102 searchDropdown.appendChild(clearAllItem); 1103 1104 // create dropdown items 1105 searchHistoryData.forEach(function(item) { 1106 var dropdownItem = document.createElement('div'); 1107 dropdownItem.className = 'dropdown-item'; 1108 dropdownItem.textContent = item.term; 1109 dropdownItem.addEventListener('click', function() { 1110 searchInput.value = item.term; 1111 searchInput.closest('form').submit(); 1112 searchDropdown.style.display = 'none'; 1113 }); 1114 searchDropdown.appendChild(dropdownItem); 1115 }); 1116 1117 if(searchHistoryData.length > 0){ 1118 // display the dropdown 1119 searchInput.classList.add('is-focus'); 1120 document.body.classList.add('search-input-focus'); 1121 searchDropdown.style.display = 'block'; 1122 } 1123 }); 1124 1125 searchInput.addEventListener("focusout", (event) => { 1126 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 1127 searchInput.classList.remove('is-focus'); 1128 searchDropdown.classList.add('transparent'); 1129 setTimeout(()=>{ 1130 searchDropdown.style.display = 'none'; 1131 searchDropdown.classList.remove('transparent'); 1132 document.body.classList.remove('search-input-focus'); 1133 }, 400); 1134 }); 1135 }) 1136 } 1137 // End - search history dropdown 1138 1139 // referral notification popup 1140 const referralMessageTemplate = 'æ¨ç好å鿍 __CURRENCY_CODE__ __CREDIT_AMOUNT__ åé¥éï¼ç«å³è¨»åé åã'; 1141 const shopCurrency = 'NT$'; 1142 1143 function getCookie(name) { 1144 const value = `; ${document.cookie}`; 1145 const parts = value.split(`; ${name}=`); 1146 if (parts.length === 2) return parts.pop().split(';').shift(); 1147 return null; 1148 } 1149 1150 function removeCookie(name) { 1151 document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`; 1152 } 1153 1154 function showReferralNotification() { 1155 const referralCode = getCookie('customer_referral_code'); 1156 1157 1158 const customerReferralCode = null; 1159 1160 1161 const activeReferralCode = referralCode || customerReferralCode; 1162 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 1163 1164 if (referralData.timestamp && referralData.expirationDays) { 1165 const expirationTime = referralData.timestamp + (referralData.expirationDays * 24 * 60 * 60 * 1000); 1166 if (Date.now() > expirationTime) { 1167 localStorage.removeItem('referral_notification_data'); 1168 return; 1169 } 1170 } 1171 1172 if (referralData.dismissed) return; 1173 1174 if (activeReferralCode) { 1175 if (referralData.creditAmount) { 1176 displayReferralNotification(referralData.creditAmount); 1177 } else { 1178 fetchReferralCampaignData(activeReferralCode); 1179 } 1180 } 1181 } 1182 1183 function fetchReferralCampaignData(referralCode) { 1184 fetch(`/customer/referral_program/campaigns/${referralCode}`) 1185 .then(response => { 1186 if (!response.ok) { 1187 throw new Error('Network response was not ok'); 1188 } 1189 return response.json(); 1190 }) 1191 .then(data => { 1192 let refereeCreditAmount = null; 1193 if (data.data.campaign && data.data.campaign.referral_rules) { 1194 const refereeRule = data.data.campaign.referral_rules.find(rule => 1195 rule.target_type === 'referee' && 1196 rule.event_name === 'customer/create' && 1197 rule.entitlement && 1198 rule.entitlement.type === 'credit' 1199 ); 1200 1201 if (refereeRule) { 1202 refereeCreditAmount = refereeRule.entitlement.amount; 1203 } 1204 } 1205 1206 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 1207 referralData.creditAmount = refereeCreditAmount; 1208 referralData.dismissed = referralData.dismissed || false; 1209 referralData.timestamp = Date.now(); 1210 referralData.expirationDays = 3; 1211 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 1212 1213 displayReferralNotification(refereeCreditAmount); 1214 }) 1215 .catch(error => { 1216 removeCookie('customer_referral_code'); 1217 }); 1218 } 1219 1220 function displayReferralNotification(creditAmount = null) { 1221 const isMobile = innerWidth <= 749; 1222 1223 if (isMobile) { 1224 const mobileModal = document.querySelector('#referralMobileModal details'); 1225 const mobileMessageElement = document.getElementById('referralSignupMessageMobile'); 1226 1227 if (mobileModal && mobileMessageElement) { 1228 if (creditAmount) {
1229 const finalMessage = referralMessageTemplate 1230 .replace('__CREDIT_AMOUNT__', creditAmount) 1231 .replace('__CURRENCY_CODE__', shopCurrency); 1232 1233 mobileMessageElement.textContent = finalMessage; 1234 } 1235 1236 mobileModal.setAttribute('open', ''); 1237 } 1238 } else { 1239 const notification = document.getElementById('referralNotification'); 1240 1241 if (notification) { 1242 if (creditAmount) { 1243 const messageElement = document.getElementById('referralSignupMessage'); 1244 if (messageElement) { 1245 const finalMessage = referralMessageTemplate 1246 .replace('__CREDIT_AMOUNT__', creditAmount) 1247 .replace('__CURRENCY_CODE__', shopCurrency); 1248 1249 messageElement.textContent = finalMessage; 1250 } 1251 } 1252 1253 notification.style.display = 'block'; 1254 } 1255 } 1256 } 1257 1258 showReferralNotification(); 1259 1260 addEventListener('beforeunload', function() { 1261 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 1262 1263 if (referralData.creditAmount !== undefined) { 1264 referralData.creditAmount = null; 1265 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 1266 } 1267 }); 1268 1269 function closeReferralNotification() { 1270 const notification = document.getElementById('referralNotification'); 1271 if (notification) { 1272 notification.style.display = 'none'; 1273 } 1274 } 1275 1276 function dismissReferralNotification() { 1277 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 1278 1279 referralData.dismissed = true; 1280 referralData.timestamp = referralData.timestamp || Date.now(); 1281 referralData.expirationDays = referralData.expirationDays || 3; 1282 1283 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 1284 1285 closeReferralNotification(); 1286 } 1287 1288 function goToSignupPage() { 1289 location.href = '/account/register'; 1290 dismissReferralNotification(); 1291 } 1292 1293 function closeMobileReferralModal() { 1294 const mobileModal = document.querySelector('#referralMobileModal details'); 1295 if (mobileModal) { 1296 mobileModal.removeAttribute('open'); 1297 } 1298 1299 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 1300 referralData.dismissed = true; 1301 referralData.timestamp = referralData.timestamp || Date.now(); 1302 referralData.expirationDays = referralData.expirationDays || 3; 1303 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 1304 } 1305 1306 function goToSignupPageFromMobile() { 1307 location.href = '/account/register'; 1308 closeMobileReferralModal(); 1309 } 1310 // End - referral notification popup 1311</script>
1311 1312 1313 1314 <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1"> 1315 1316 <link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-cart.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1317<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-cart-items.css?v1.01?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1318<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-totals.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1319<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-price.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1320<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-discounts.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1321<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-loading-overlay.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1322<link rel="preload" href="/assets/css/vouchers.css?v1.2" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1323<link rel="preload" href="/assets/account/vouchers/vouchers.css" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1324<link rel="preload" href="/assets/account/vouchers/voucher-widget.css" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1325
1326<script src="/assets/js/promotion/vouchers.js?v1.3" type="text/javascript" ></script>
vendor: 2 bytes, line 1326
1326
1327<script src="/assets/account/vouchers/voucher-widget.js" type="text/javascript" ></script>
vendor: 2 bytes, line 1327
1327
1328<script src="https://store-themes.easystore.co/1273171/themes/63057/assets/cart.js?t=1787079682" defer="defer"></script>
1328 1329 1330<section class="spaced-section"> 1331 <div id="cart-promotion-top"></div> 1332 1333 <div id="cart-template"> 1334 <form action="/cart" class="cart__contents critical-hidden" method="post" id="cart-form"> 1335 <input type="hidden" name="_token" value="zupj0VALNZftglkc2fEBpAzNPyFjLjL7Vd1ecESZ"> 1336 1337 <cart-items class="page-width is-empty"> 1338 <div class="title-wrapper-with-link"> 1339 <h1 class="title title--primary">æ¨çè³¼ç©è»</h1> 1340 <a href="/collections/all" class="underlined-link">ç¹¼çºè³¼ç©</a> 1341 </div> 1342 1343 <div class="cart__warnings"> 1344 <h1 class="cart__empty-text">æ¨çè³¼ç©è»ç®åéæ¯ç©ºçã</h1> 1345 <a href="/collections/all" class="button"> 1346 ç¹¼çºè³¼ç© 1347 </a> 1348 </div> 1349 1350 <!-- Cart error --> 1351 1352 1353 <div class="cart_form__error note errors hidden"> 1354 <div class="js-error-content"></div> 1355 </div> 1356 1357 <div class="cart__items" id="main-cart-items"> 1358 <div class="js-contents"> 1359 <table class="cart-items"> 1360 <thead> 1361 <tr> 1362 <th class="caption-with-letter-spacing" colspan="2" scope="col">åå</th> 1363 <th class="medium-hide large-up-hide right caption-with-letter-spacing" colspan="1" scope="col">å°è¨</th> 1364 <th class="cart-items__heading--wide small-hide caption-with-letter-spacing" colspan="1" scope="col">æ¸é</th> 1365 <th class="small-hide right caption-with-letter-spacing" colspan="1" scope="col">å°è¨</th> 1366 </tr> 1367 </thead> 1368 <tbody> 1369 1370 </tbody> 1371 </table> 1372 </div> 1373 </div> 1374 </cart-items> 1375 1376 <div class="page-width is-empty" id="main-cart-footer"> 1377 <div class="cart__footer"> 1378 <div class="cart__blocks"> 1379 1380 1381 1382 1383 <!-- Cart discount --> 1384 1385 1386 <div> 1387 <div class="totals"> 1388 <h3 class="totals__subtotal">åè¨</h3> 1389 <p class="totals__subtotal-value"></p> 1390 </div> 1391 1392 <div></div> 1393 <small class="tax-note caption-large rte">éè²»,ç¨ ååææ£å°å¨çµå¸³æè¨ç®ã</small> 1394 </div> 1395 <div class="cart__ctas"> 1396 <input type="hidden" name="current_currency" value=""> 1397 <input type="text" name="greeting_card_message" id="greetingCardMessage" class="hp hide hidden" tabindex="-1" autocomplete="off"> 1398 <input type="text" name="product_ids" id="productIds" class="hp hide hidden" tabindex="-1" autocomplete="off"> 1399 1400 <noscript> 1401 <button type="submit" name="update" class="cart__update-button button button--secondary"> 1402 æ´æ°è³¼ç©è» 1403 </button> 1404 </noscript> 1405 <button type="submit" id="checkout" class="cart__checkout-button button" name="checkout" value="true"> 1406 çµå¸³ 1407 </button> 1408 1409 </div> 1410 1411 </div> 1412 </div> 1413 </div> 1414 1415</form> 1416 1417 </div> 1418 <link href="/assets/css/promotion.css?v2.94" rel="stylesheet" type="text/css" media="screen" /> 1419<div id="cart-promotion-section"></div> 1420
1421<script>var shop_money_format = "<span class=money data-ori-price='{{amount}}'>NT$ {{amount}} </span>";</script>
vendor: 1 bytes, line 1421
1421
1422<script src="/assets/js/promotion/promotion.js?v1.11" type="text/javascript"></script>
1422 1423
1424<script> 1425 1426 window.EasyStore = window.EasyStore || {}; 1427 window.EasyStore.Promotion = window.EasyStore.Promotion || {}; 1428 1429 var get_cart_promo_initial = false, 1430 current_template = 'cart'; 1431 1432 window.EasyStore.Promotion.updateCartPromotion = function (){ 1433 get_cart_promo_initial = true 1434 $.ajax({ 1435 type: "GET", 1436 dataType: 'json', 1437 url: "/new_cart/promotion", 1438 success: function(response){ 1439 $("#cart-promotion-section").html(response["cart/content_bottom"].trim()); 1440 $("#cart-promotion-top").html(response["cart/content_top"].trim()); 1441 1442 promoVariantDetailInitial() 1443 }, 1444 error: function(xhr){ 1445 } 1446 }); 1447 } 1448 1449 1450 if(current_template == 'cart') { 1451 document.addEventListener("DOMContentLoaded", function() { 1452 window.EasyStore.Promotion.updateCartPromotion() 1453 }); 1454 } 1455 1456</script>
vendor: 1 bytes, line 1456
1456
1457<script> 1458 document.addEventListener('DOMContentLoaded', function () { 1459 window._getVoucherErrorTranslation = Object.assign(window._getVoucherErrorTranslation || {}, { 1460 "condition_not_matched": "åªæ 代碼æ¢ä»¶ä¸å¹é ", 1461 "promotion_unavailable": "æ¤åªæ ç®åä¸å¯ç¨", 1462 "available_on": "å¯å¨ channels 使ç¨", 1463 "available_on_only": "å éå¨ channels 使ç¨", 1464 "available_with_locations": "å¯å¨ channels 使ç¨ï¼å é locationsï¼", 1465 "pos_at_locations": "å é locations éå¸ä½¿ç¨", 1466 "channel_website": "ç¶²ç«", 1467 "channel_mobile": "æç¨ç¨å¼", 1468 "channel_pos": "éå¸" 1469 }); 1470 }); 1471</script>
1471 1472 1473</section> 1474 1475<style> 1476 discount-input .field__input{ 1477 margin-right: 10px; 1478 } 1479</style> 1480 1481<vouchers-modal> 1482 <div class="vouchers-modal-wrapper page-width"> 1483 <div id="vouchers-modal" class="vouchers-modal focus-inset" aria-modal="true" role="dialog" tabindex="-1"> 1484 <div class="vouchers-modal__header"> 1485 <div class="vouchers-modal__heading">åªæ å¸</div> 1486 <button type="button" class="vouchers-modal__close modal__close-button link link--text focus-inset" aria-label="accessibility.close"> 1487 1488 1489 1490 <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> 1491 1492 1493 1494 </button> 1495 </div> 1496 1497 <discount-input> 1498 <div class="field"> 1499 <input type="text" id="input-discount_code" class="search__input field__input" name="voucher_code" placeholder="ææ£ç¢¼"> 1500 <label class="field__label" for="input-discount_code">ææ£ç¢¼</label> 1501 <button type="button" name="apply" class="button button--secondary">å¥ç¨</button> 1502 </div> 1503 <div class="form__message hidden" tabindex="-1" autofocus> 1504 1505 1506 1507 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-error " viewBox="0 0 13 13"> 1508 <circle cx="6.5" cy="6.50049" r="5.5" stroke="white" stroke-width="2"/> 1509 <circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width="0.7"/> 1510 <path d="M5.87413 3.52832L5.97439 7.57216H7.02713L7.12739 3.52832H5.87413ZM6.50076 9.66091C6.88091 9.66091 7.18169 9.37267 7.18169 9.00504C7.18169 8.63742 6.88091 8.34917 6.50076 8.34917C6.12061 8.34917 5.81982 8.63742 5.81982 9.00504C5.81982 9.37267 6.12061 9.66091 6.50076 9.66091Z" fill="white"/> 1511 <path d="M5.87413 3.17832H5.51535L5.52424 3.537L5.6245 7.58083L5.63296 7.92216H5.97439H7.02713H7.36856L7.37702 7.58083L7.47728 3.537L7.48617 3.17832H7.12739H5.87413ZM6.50076 10.0109C7.06121 10.0109 7.5317 9.57872 7.5317 9.00504C7.5317 8.43137 7.06121 7.99918 6.50076 7.99918C5.94031 7.99918 5.46982 8.43137 5.46982 9.00504C5.46982 9.57872 5.94031 10.0109 6.50076 10.0109Z" fill="white" stroke="#EB001B" stroke-width="0.7"/> 1512 </svg> 1513 1514 1515 1516 <div class="js-error-content"></div> 1517 </div> 1518 </discount-input> 1519 <br> 1520 1521 1522 1523 <div class="empty-vouchers_placeholder">ç®åç¡å¯ç¨çåªæ å¸</div> 1524 1525 1526 </div> 1527 </div> 1528 <div id="vouchers-modal-backdrop" class="vouchers-modal__close"></div> 1529</vouchers-modal> 1530
1531<script> 1532 // For voucher widget 1533 let settings = {"colors_solid_button_labels":"#FFFFFF","colors_accent_1":"#968E7C","colors_text":"#968E7C","colors_outline_button_labels":"#968E7C","colors_background_1":"#FFFFFF","gradient_background_1":"#FFFFFF","page_width":1400,"body_bg_image":"","bg_img_position":"top left","bg_img_repeat":0,"type_header_font":{"font_id":63,"name":"Archivo Black","title":"Archivo Black","font_family":"Archivo Black","category":"sans-serif","variant":"regular","variant_file":"https:\/\/fonts.gstatic.com\/s\/archivoblack\/v10\/HTxqL289NzCGg4MzN6KJ7eW6OYuP_x7yx3A.ttf"},"type_body_font":{"font_id":1117,"name":"Rubik","title":"Rubik","font_family":"Rubik","category":"sans-serif","variant":"regular","variant_file":"https:\/\/fonts.gstatic.com\/s\/rubik\/v14\/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4i1UE80V4bVkA.ttf"},"body_font_style":"normal","body_font_weight":500,"header_font_style":"normal","header_font_weight":"700","product_description_position":"bottom","logo_img":"https:\/\/cdn.store-assets.com\/s\/1273171\/f\/10967666.jpg","logo_width":100,"favicon_img":"https:\/\/cdn.store-assets.com\/s\/1273171\/f\/10967666.jpg","meta_img":"https:\/\/cdn.store-assets.com\/s\/1273171\/f\/12446947.jpg","use_original_image":"1","product_img_res":"grande","show_add_to_cart_button":1,"sections":{"header":{"type":"header","settings":{"logo":"https:\/\/cdn.store-assets.com\/s\/1273171\/f\/10967666.jpg","align_logo":"middle-left","logo_max_width":130,"main_linklist":"main-menu","message":0,"home_page_only":true,"message_text":"Announce something here","message_link":"","color_bg":"#0E322A","color_text":"#E5E1E1","enable_sticky_header":0}},"main-cart-featured-collection":{"type":"main-cart-featured-collection","settings":{"title":"","collection__id":"feature-on-homepage","products_per_row":4,"products_to_show":4,"show_view_all":true,"swipe_on_mobile":true,"show_secondary_image":true,"product_bg_color":"rgba(245, 245, 245, 1)"}},"main-collection":{"type":"main-collection","settings":{"products_per_row":4,"show_secondary_image":true,"show_add_to_cart_button":0,"image_ratio":"square","product_bg_color":"rgba(245, 245, 245, 1)"}},"main-product":{"type":"main-product","settings":{"variant_options_display":"radio","product_description_position":"bottom","wrapper_bg_color":"rgba(245, 245, 245, 1)"},"blocks":[],"blocks_order":[]},"footer":{"type":"footer","blocks":{"footer-2":{"type":"follow_us","settings":{"title":"\u8ffd\u8e64\u6211\u5011","twitter":"","facebook":"https:\/\/www.facebook.com\/UAWOOD\/","instagram":"https:\/\/instagram.com\/ua_wood_studio","tiktok":"","whatsapp":"","line":"","wechat":"","youtube":""}},"footer-byp4k8glop5-ptlgonw":{"type":"about_us","settings":{"title":"\u516c\u53f8\u8cc7\u6599","text":"\u8a8c\u61cb\u80a1\u4efd\u6709\u9650\u516c\u53f8<br>\u7d71\u7de8 13004232<br>\u96fb\u8a71 0800-589-599<br>\u5730\u5740 \u96f2\u6797\u7e23\u6597\u516d\u5e02\u79d1\u52a0\u8def38\u865f"}},"footer-c0ur38qvskr-rw1khy":{"type":"about_us","settings":{"title":"\u652f\u7dda\u54c1\u724c","text":"Ua Floors <br> Ua Floors TW"}},"footer-9iptz3549ei-fhden4d9":{"type":"payment_accept","settings":{"title":"\u652f\u4ed8\u65b9\u5f0f","show_visa_icon":true,"show_master_icon":true,"show_amex_icon":0,"show_paypal_icon":0,"show_diners_icon":0,"show_discover_icon":0,"show_payment_method":true}}},"blocks_order":["footer-2","footer-9iptz3549ei-fhden4d9","footer-c0ur38qvskr-rw1khy","footer-byp4k8glop5-ptlgonw"],"settings":{"color_footer_background":"#0E322A","color_footer_heading_text":"#FFFFFF","color_footer_body_text":"#FEFEFE"}},"1649057694043":{"settings":{"title":"\u4eba\u6c23\u6392\u884c\u5546\u54c1","collection__id":3877268,"products_per_row":4,"products_to_show":8,"show_view_all":true,"image_ratio":"square","show_secondary_image":true,"swipe_on_mobile":true,"show_add_to_cart_button":true,"product_bg_color":"rgba(245, 245, 245, 1)"},"type":"featured-collection"},"1688615361250":{"settings":{"autoplay":"5000"},"type":"slider","blocks_order":["1688615361250-xtpfj8zr2lo-9d9vsxa","1688615361250-0"],"blocks":{"1688615361250-0":{"type":"slide","settings":{"img_url":"https:\/\/cdn.store-assets.com\/s\/1273171\/f\/12446946.jpg","img_mobile_url":"https:\/\/cdn.store-assets.com\/s\/1273171\/f\/12446947.jpg","title":"","desc":"","button_text":"","link_url":"https:\/\/www.uawoodstudio.com\/collections\/feature-on-homepage\/products\/-%E6%9C%A8%E7%A0%94%E6%89%80-%E6%9F%8F%E8%8D%B7%E7%B2%BE%E6%B2%B9%E9%98%B2%E8%9A%8A%E6%B6%B2-100ml","content_text_color":"","content_background_color":"","content_position":""}},"1688615361250-xtpfj8zr2lo-9d9vsxa":{"type":"slide","settings":{"img_url":"https:\/\/cdn.store-assets.com\/s\/1273171\/f\/11142980.jpg","img_mobile_url":"https:\/\/cdn.store-assets.com\/s\/1273171\/f\/11142983.jpg","title":"","desc":"","button_text":"","link_url":"https:\/\/www.uawoodstudio.com\/pages\/%E5%AE%A2%E8%A3%BD%E5%B0%88%E5%8D%80-%E9%80%81%E7%A6%AE-%E7%A6%AE%E7%89%A9-%E7%AF%80%E6%97%A5-%E7%94%9F%E6%97%A5%E7%A6%AE%E7%89%A9-%E7%94%B7%E7%94%9F%E7%A6%AE%E7%89%A9-%E5%A5%B3%E7%94%9F%E7%A6%AE%E7%89%A9","content_text_color":"#000000","content_background_color":"#ED9643","content_position":"right"}}}}},"content_for_index":["1688615361250","1649057694043"],"promotion_uis":{"primary_color":"#968E7C","header_bg_color":"#D9A637","header_text_color":"#fff","recommendation":{"is_show_product_page":true,"is_show_cart_page_top":true,"is_show_cart_page_bottom":true},"voucher_widget":{"primary_color":"#4089e4"}},"show_multiple_currencies":true,"supported_currencies":"TWD ","header_search_enable":true,"header_message":"","products_per_row":4,"footer_quicklinks_enable":true,"collections_sort_enable":true,"product_related_enable":true,"theme_id":63057,"theme_is_edited":1,"theme_updated_at":"2026-08-18T19:01:22.000Z","phone_account_enabled":false,"line_login_enabled":false,"apple_login_enabled":false,"timezone":"Asia\/Taipei","is_server_side_currency_conversion":true,"is_self_registration_enabled":true,"is_highlight_enabled":false,"is_auto_gen_highlight_enabled":false,"is_common_question_enabled":false,"is_auto_gen_common_question_enabled":false,"highlight_section_title":"Highlights","common_question_section_title":"Frequently asked questions","is_new_promotion_enabled":true} 1534 if (settings.promotion_uis.voucher_widget != null) { 1535 setVoucherTheme(settings.promotion_uis.voucher_widget) 1536 } 1537 var shop = { 1538 money_prefix: "", 1539 format_decimals: "" 1540 }; 1541 var _getEntitlementTranslation = { 1542 "free_shipping": "å éè²»", 1543 "free_of_charge": "å è²»è´å", 1544 } 1545 var _getTargetTypeTranslation = { 1546 "amount_credit": " åé¥é", 1547 "amount_off": " ææ£", 1548 } 1549 var _getPrerequisiteTranslation = { 1550 "min_quantity": "è³å°è³¼è²· formatValue ä»¶åå", 1551 "every_quantity": "æ¯è³¼è²· formatValue ä»¶åå", 1552 "min_amount": "æä½æ¶è²» formatCurrency", 1553 "every_amount": "æ¯æ¶è²» formatCurrency" 1554 } 1555 var _getPrerequisiteConditionTranslation = { 1556 "selected_items": "æå®åå", 1557 "selected_collections": "æå®åé¡", 1558 "storewide": "å ¨åº", 1559 "order_subtotal": "è¨å®éé¡" 1560 } 1561 var _getVoucherButtonTextTranslation = { 1562 "apply": "å¥ç¨", 1563 } 1564 var _getVoucherErrorTranslation = { 1565 "condition_not_matched": "åªæ 代碼æ¢ä»¶ä¸å¹é " 1566 } 1567</script>
1567 1568 1569<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-card.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1570<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-price.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1571<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-product-grid.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1572<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-loading-overlay.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1573 1574<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/component-slider.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1575<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/template-collection.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1576 1577<style> 1578 #section-main-cart-featured-collection .product-card-wrapper{ 1579 background-color: rgba(245, 245, 245, 1); 1580 } 1581</style> 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592<div id="section-main-cart-featured-collection" class="collection page-width page-margin page-width-desktop"> 1593 <div class="title-wrapper-with-link title-wrapper--self-padded-tablet-down"> 1594 <h2 class="title"> 1595 1596 ç±è³£åå 1597 1598 </h2> 1599 1600 1601 </div> 1602 1603 <slider-component class="slider-mobile-gutter"> 1604 <ul class="grid grid--2-col product-grid grid--3-col-tablet grid--4-col-desktop slider slider--tablet grid--peek" role="list"> 1605 1606 <li class="grid__item slider__slide"> 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623<div class="product-card-wrapper card-wrapper"> 1624 <a href="/collections/feature-on-homepage/products/é¦æç²¾æ²¹é²èæ¶²-100ml" class="full-unstyled-link"> 1625 1626 <div class="card card--product grid-link__image--product" tabindex="-1"> 1627 <div class="card__inner"> 1628 <div class="media media--transparent media--square media--hover-effect"> 1629 <img src="https://cdn.store-assets.com/s/1273171/i/58554204.jpeg" alt="11" loading="lazy"> 1630 1631 <img src="https://cdn.store-assets.com/s/1273171/i/58554221.jpeg" alt="33" loading="lazy"> 1632 1633 </div> 1634 1635 <div class="card__badge card__badge-on_sale card__badge-top-left"><span class="badge badge-ribbon badge--top-left color-accent-2" aria-hidden="true"><span style="font-size:14px;">åªæ </span></span></div> 1636 1637 1638 </div> 1639 </div> 1640 1641 <div class="card-information"> 1642 <div class="card-information__wrapper"> 1643 1644<!-- Snippet:collection/product_top: Product Label --> 1645<span class="prodlabelv2-badge hide prodlabelv2-position prodlabelv2-ribbon_2 prodlabelv2-top_left" style="background-color:rgb(245, 30, 0);color:rgb(255, 255, 255);font-size:15px;color:rgb(245, 30, 0);"><span class="prodlabelv2-badge-text" style="background-color:rgb(245, 30, 0);color:rgb(255, 255, 255);font-size:15px;">éæéå¹</span></span> 1646<!-- /Snippet --> 1647 1648 <span class="card-information__text"> 1649 ãæ¨ç æãé¦æç²¾æ²¹é²èæ¶²-100mL 1650 </span> 1651 1652 <span class="caption-large light"></span> 1653 1654 1655<div class="price 1656 1657 1658 price--on-sale " 1659 data-expires=""> 1660 1661 <dl> 1662 <div class="price__regular"> 1663 <dt> 1664 <span class="visually-hidden visually-hidden--inline">Regular price</span> 1665 </dt> 1666 <dd > 1667 <span class="price-item price-item--regular"> 1668 1669 1670 1671 <span class=money data-ori-price='330.00'>NT$ 330.00 </span> 1672 1673 1674 1675 </span> 1676 </dd> 1677 </div> 1678 <div class="price__sale"> 1679 <dt> 1680 <span class="visually-hidden visually-hidden--inline">Sale price</span> 1681 </dt> 1682 <dd > 1683 <span class="price-item price-item--sale"> 1684 1685 1686 1687 <span class=money data-ori-price='330.00'>NT$ 330.00 </span> 1688 1689 1690 1691 </span> 1692 </dd> 1693 1694 <dt class="price__compare">
1695 <span class="visually-hidden visually-hidden--inline">Regular price</span> 1696 </dt> 1697 <dd class="price__compare"> 1698 <s class="price-item price-item--regular"> 1699 1700 <span class=money data-ori-price='399.00'>NT$ 399.00 </span> 1701 1702 1703 </s> 1704 </dd> 1705 1706 </div> 1707 </dl> 1708 1709</div> 1710 1711 </div> 1712 1713 </div> 1714 </a> 1715</div> 1716 1717 1718 </li> 1719 1720 <li class="grid__item slider__slide"> 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737<div class="product-card-wrapper card-wrapper"> 1738 <a href="/collections/feature-on-homepage/products/天ç¶é¦æè°é¦æ£" class="full-unstyled-link"> 1739 1740 <div class="card card--product grid-link__image--product" tabindex="-1"> 1741 <div class="card__inner"> 1742 <div class="media media--transparent media--square media--hover-effect"> 1743 <img src="https://cdn.store-assets.com/s/1273171/i/64581925.jpeg" alt="S__27189254" loading="lazy"> 1744 1745 <img src="https://cdn.store-assets.com/s/1273171/i/64581357.jpeg" alt="䏿¶ (2)" loading="lazy"> 1746 1747 </div> 1748 1749 <div class="card__badge card__badge-on_sale card__badge-top-left"><span class="badge badge-ribbon badge--top-left color-accent-2" aria-hidden="true"><span style="font-size:14px;">åªæ </span></span></div> 1750 1751 1752 </div> 1753 </div> 1754 1755 <div class="card-information"> 1756 <div class="card-information__wrapper"> 1757 1758<!-- Snippet:collection/product_top: Product Label --> 1759<span class="prodlabelv2-badge hide prodlabelv2-position prodlabelv2-ribbon_2 prodlabelv2-top_left" style="background-color:rgb(245, 30, 0);color:rgb(255, 255, 255);font-size:15px;color:rgb(245, 30, 0);"><span class="prodlabelv2-badge-text" style="background-color:rgb(245, 30, 0);color:rgb(255, 255, 255);font-size:15px;">éæéå¹</span></span> 1760<!-- /Snippet --> 1761 1762 <span class="card-information__text"> 1763 ãæ¨ç æã天ç¶é¦æè°é¦æ£ 1764 </span> 1765 1766 <span class="caption-large light"></span> 1767 1768 1769<div class="price 1770 1771 1772 price--on-sale " 1773 data-expires=""> 1774 1775 <dl> 1776 <div class="price__regular"> 1777 <dt> 1778 <span class="visually-hidden visually-hidden--inline">Regular price</span> 1779 </dt> 1780 <dd > 1781 <span class="price-item price-item--regular"> 1782 1783 1784 1785 <span class=money data-ori-price='250.00'>NT$ 250.00 </span> 1786 1787 1788 1789 </span> 1790 </dd> 1791 </div> 1792 <div class="price__sale"> 1793 <dt> 1794 <span class="visually-hidden visually-hidden--inline">Sale price</span> 1795 </dt> 1796 <dd > 1797 <span class="price-item price-item--sale"> 1798 1799 1800 1801 <span class=money data-ori-price='250.00'>NT$ 250.00 </span> 1802 1803 1804 1805 </span> 1806 </dd> 1807 1808 <dt class="price__compare"> 1809 <span class="visually-hidden visually-hidden--inline">Regular price</span> 1810 </dt> 1811 <dd class="price__compare"> 1812 <s class="price-item price-item--regular"> 1813 1814 <span class=money data-ori-price='299.00'>NT$ 299.00 </span> 1815 1816 1817 </s> 1818 </dd> 1819 1820 </div> 1821 </dl> 1822 1823</div> 1824 1825 </div> 1826 1827 </div> 1828 </a> 1829</div> 1830 1831 1832 </li> 1833 1834 <li class="grid__item slider__slide"> 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849<div class="product-card-wrapper card-wrapper"> 1850 <a href="/collections/feature-on-homepage/products/å´é§ææ-精油çµ700ml-1" class="full-unstyled-link"> 1851 1852 <div class="card card--product grid-link__image--product" tabindex="-1"> 1853 <div class="card__inner"> 1854 <div class="media media--transparent media--square media--hover-effect"> 1855 <img src="https://cdn.store-assets.com/s/1273171/i/74852220.jpeg" alt="ImportedPhoto.742289510.306156 - è¤è£½" loading="lazy"> 1856 1857 <img src="https://cdn.store-assets.com/s/1273171/i/74852237.jpeg" alt="ä¸å-01" loading="lazy"> 1858 1859 </div> 1860 1861 1862 </div> 1863 </div> 1864 1865 <div class="card-information"> 1866 <div class="card-information__wrapper"> 1867 1868<!-- Snippet:collection/product_top: Product Label --> 1869 1870<!-- /Snippet --> 1871
1872 <span class="card-information__text"> 1873 ãæ¨ç æã精油å´é§ææä¿é¤çµ - Essential Oil With Spray Mop 1874 </span> 1875 1876 <span class="caption-large light"></span> 1877 1878 1879<div class="price 1880 1881 1882 " 1883 > 1884 1885 <dl> 1886 <div class="price__regular"> 1887 <dt> 1888 <span class="visually-hidden visually-hidden--inline">Regular price</span> 1889 </dt> 1890 <dd > 1891 <span class="price-item price-item--regular"> 1892 1893 1894 1895 <span class=money data-ori-price='1,400.00'>NT$ 1,400.00 </span> 1896 1897 1898 1899 </span> 1900 </dd> 1901 </div> 1902 <div class="price__sale"> 1903 <dt> 1904 <span class="visually-hidden visually-hidden--inline">Sale price</span> 1905 </dt> 1906 <dd > 1907 <span class="price-item price-item--sale"> 1908 1909 1910 1911 <span class=money data-ori-price='1,400.00'>NT$ 1,400.00 </span> 1912 1913 1914 1915 </span> 1916 </dd> 1917 1918 <dt class="price__compare"> 1919 <span class="visually-hidden visually-hidden--inline">Regular price</span> 1920 </dt> 1921 <dd class="price__compare"> 1922 <s class="price-item price-item--regular"> 1923 1924 <span class=money data-ori-price='1,400.00'>NT$ 1,400.00 </span> 1925 1926 1927 </s> 1928 </dd> 1929 1930 </div> 1931 </dl> 1932 1933</div> 1934 1935 </div> 1936 1937 </div> 1938 </a> 1939</div> 1940 1941 1942 </li> 1943 1944 <li class="grid__item slider__slide"> 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961<div class="product-card-wrapper card-wrapper"> 1962 <a href="/collections/feature-on-homepage/products/apple-watch實æ¨é¶å¸¶-é©ç¨44mm" class="full-unstyled-link"> 1963 1964 <div class="card card--product grid-link__image--product" tabindex="-1"> 1965 <div class="card__inner"> 1966 <div class="media media--transparent media--square media--hover-effect"> 1967 <img src="https://cdn.store-assets.com/s/1273171/i/57467095.jpeg" alt="UA WOOD-19" loading="lazy"> 1968 1969 <img src="https://cdn.store-assets.com/s/1273171/i/57467092.jpeg" alt="UA WOOD-21" loading="lazy"> 1970 1971 </div> 1972 1973 <div class="card__badge card__badge-on_sale card__badge-top-left"><span class="badge badge-ribbon badge--top-left color-accent-2" aria-hidden="true"><span style="font-size:14px;">åªæ </span></span></div> 1974 1975 1976 </div> 1977 </div> 1978 1979 <div class="card-information"> 1980 <div class="card-information__wrapper"> 1981 1982<!-- Snippet:collection/product_top: Product Label --> 1983<span class="prodlabelv2-badge hide prodlabelv2-position prodlabelv2-ribbon_2 prodlabelv2-top_left" style="background-color:rgb(245, 30, 0);color:rgb(255, 255, 255);font-size:15px;color:rgb(245, 30, 0);"><span class="prodlabelv2-badge-text" style="background-color:rgb(245, 30, 0);color:rgb(255, 255, 255);font-size:15px;">éæéå¹</span></span> 1984<!-- /Snippet --> 1985 1986 <span class="card-information__text"> 1987 ãæ¨ç æãå¥åº·å¯¦æ¨Apple Watché¶å¸¶-é©ç¨44mm 1988 </span> 1989 1990 <span class="caption-large light"></span> 1991 1992 1993<div class="price 1994 1995 1996 price--on-sale " 1997 data-expires=""> 1998 1999 <dl> 2000 <div class="price__regular"> 2001 <dt> 2002 <span class="visually-hidden visually-hidden--inline">Regular price</span> 2003 </dt> 2004 <dd > 2005 <span class="price-item price-item--regular"> 2006 2007 2008 2009 <span class=money data-ori-price='1,500.00'>NT$ 1,500.00 </span> 2010 2011 2012 2013 </span> 2014 </dd> 2015 </div> 2016 <div class="price__sale"> 2017 <dt> 2018 <span class="visually-hidden visually-hidden--inline">Sale price</span> 2019 </dt> 2020 <dd > 2021 <span class="price-item price-item--sale"> 2022 2023 2024 2025 <span class=money data-ori-price='1,500.00'>NT$ 1,500.00 </span> 2026 2027 2028 2029 </span> 2030 </dd> 2031 2032 <dt class="price__compare"> 2033 <span class="visually-hidden visually-hidden--inline">Regular price</span> 2034 </dt> 2035 <dd class="price__compare"> 2036 <s class="price-item price-item--regular"> 2037
2038 <span class=money data-ori-price='1,900.00'>NT$ 1,900.00 </span> 2039 2040 2041 </s> 2042 </dd> 2043 2044 </div> 2045 </dl> 2046 2047</div> 2048 2049 </div> 2050 2051 </div> 2052 </a> 2053</div> 2054 2055 2056 </li> 2057 2058 </ul> 2059 2060 <div class="slider-buttons no-js-hidden"> 2061 <button type="button" class="slider-button slider-button--prev" name="previous"> 2062 2063 2064 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 2065 <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> 2066 </svg> 2067 2068 2069</button> 2070 <div class="slider-counter caption"> 2071 <span class="slider-counter--current">1</span> 2072 <span aria-hidden="true"> / </span> 2073 <span class="slider-counter--total">4</span> 2074 </div> 2075 <button type="button" class="slider-button slider-button--next" name="next"> 2076 2077 2078 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 2079 <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> 2080 </svg> 2081 2082 2083</button> 2084 </div> 2085 2086 </slider-component> 2087 2088 2089</div> 2090 2091 2092 2093 2094 2095 </main> 2096 <style> 2097 .footer{ 2098 background-color: #0E322A; 2099 color: #FEFEFE; 2100 --color-foreground: 254,254,254; 2101 } 2102 .footer .link--text, 2103 .footer .list-menu__item--link, 2104 .footer .footer-block__details-content .list-menu__item--link{ 2105 color: #FEFEFE; 2106 } 2107 .footer-block__heading{ 2108 color: #FFFFFF; 2109 } 2110</style> 2111 2112<link rel="preload" href="https://store-themes.easystore.co/1273171/themes/63057/assets/section-footer.css?t=1787079682" as="style" onload="this.onload=null;this.rel='stylesheet'"> 2113 2114<footer class="footer color-background-1"> 2115 <div class="footer__content-top page-width"> 2116 <div class="grid grid--1-col grid--4-col-tablet "> 2117 2118 2119 2120 <div class="grid__item"> 2121 2122 <h2 class="footer-block__heading">追蹤æå</h2> 2123 <ul class="footer__list-social list-unstyled list-social footer-block__details-content" role="list"> 2124 2125 2126 <li class="list-social__item"> 2127 <a href="https://www.facebook.com/UAWOOD/" class="link link--text list-social__link"> 2128 2129 2130 2131 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook " 2132 viewBox="0 0 18 18"> 2133 <path fill="currentColor" 2134 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"> 2135 </path> 2136 </svg> 2137 2138 2139 2140 </a> 2141 </li> 2142 2143 2144 <li class="list-social__item"> 2145 <a href="https://instagram.com/ua_wood_studio" class="link link--text list-social__link"> 2146 2147 2148 2149 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram " 2150 viewBox="0 0 18 18"> 2151 <path fill="currentColor" 2152 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"> 2153 </path>
2154 <path fill="currentColor" 2155 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"> 2156 </path> 2157 </svg> 2158 2159 2160 2161 </a> 2162 </li> 2163 2164 2165 2166 2167 2168 2169 2170 </ul> 2171 2172 </div> 2173 2174 2175 2176 <div class="grid__item"> 2177 2178 <h2 class="footer-block__heading">æ¯ä»æ¹å¼</h2> 2179 <div class="footer-block__details-content footer__payment"> 2180 <ul class="list list-payment" role="list"> 2181 2182 <li class="list-payment__item"> 2183 2184 2185 2186 <svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img" 2187 width="38" height="24" aria-labelledby="pi-visa"> 2188 <path opacity=".07" 2189 d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path> 2190 <path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"> 2191 </path> 2192 <path 2193 d="M28.3 10.1H28c-.4 1-.7 1.5-1 3h1.9c-.3-1.5-.3-2.2-.6-3zm2.9 5.9h-1.7c-.1 0-.1 0-.2-.1l-.2-.9-.1-.2h-2.4c-.1 0-.2 0-.2.2l-.3.9c0 .1-.1.1-.1.1h-2.1l.2-.5L27 8.7c0-.5.3-.7.8-.7h1.5c.1 0 .2 0 .2.2l1.4 6.5c.1.4.2.7.2 1.1.1.1.1.1.1.2zm-13.4-.3l.4-1.8c.1 0 .2.1.2.1.7.3 1.4.5 2.1.4.2 0 .5-.1.7-.2.5-.2.5-.7.1-1.1-.2-.2-.5-.3-.8-.5-.4-.2-.8-.4-1.1-.7-1.2-1-.8-2.4-.1-3.1.6-.4.9-.8 1.7-.8 1.2 0 2.5 0 3.1.2h.1c-.1.6-.2 1.1-.4 1.7-.5-.2-1-.4-1.5-.4-.3 0-.6 0-.9.1-.2 0-.3.1-.4.2-.2.2-.2.5 0 .7l.5.4c.4.2.8.4 1.1.6.5.3 1 .8 1.1 1.4.2.9-.1 1.7-.9 2.3-.5.4-.7.6-1.4.6-1.4 0-2.5.1-3.4-.2-.1.2-.1.2-.2.1zm-3.5.3c.1-.7.1-.7.2-1 .5-2.2 1-4.5 1.4-6.7.1-.2.1-.3.3-.3H18c-.2 1.2-.4 2.1-.7 3.2-.3 1.5-.6 3-1 4.5 0 .2-.1.2-.3.2M5 8.2c0-.1.2-.2.3-.2h3.4c.5 0 .9.3 1 .8l.9 4.4c0 .1 0 .1.1.2 0-.1.1-.1.1-.1l2.1-5.1c-.1-.1 0-.2.1-.2h2.1c0 .1 0 .1-.1.2l-3.1 7.3c-.1.2-.1.3-.2.4-.1.1-.3 0-.5 0H9.7c-.1 0-.2 0-.2-.2L7.9 9.5c-.2-.2-.5-.5-.9-.6-.6-.3-1.7-.5-1.9-.5L5 8.2z" 2194 fill="#142688"></path> 2195 </svg> 2196 2197 2198 2199 </li> 2200 2201 2202 <li class="list-payment__item"> 2203 2204 2205 2206 <svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img" 2207 width="38" height="24" aria-labelledby="pi-master"> 2208 <path opacity=".07" 2209 d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path> 2210 <path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"> 2211 </path> 2212 <circle fill="#EB001B" cx="15" cy="12" r="7"></circle> 2213 <circle fill="#F79E1B" cx="23" cy="12" r="7"></circle> 2214 <path fill="#FF5F00" 2215 d="M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z"></path> 2216 </svg> 2217 2218 2219 2220 </li> 2221 2222 2223 2224 2225 2226 2227 2228 <li class="list-payment__item"> 2229 <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_newebpay.svg" alt="payment_newebpay" loading="lazy" width="85px"> 2230 </li> 2231 2232 <li class="list-payment__item"> 2233 <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_jkopay.svg" alt="payment_jkopay" loading="lazy" width="85px"> 2234 </li> 2235 2236 2237 </div> 2238 2239 </div> 2240 2241 2242 2243 <div class="grid__item"> 2244 2245 <h2 class="footer-block__heading">æ¯ç·åç</h2> 2246 <div class="footer-block__details-content"> 2247 <p>Ua Floors <br> Ua Floors TW</p> 2248 </div> 2249 2250 </div> 2251 2252 2253 2254 <div class="grid__item"> 2255 2256 <h2 class="footer-block__heading">å ¬å¸è³æ</h2> 2257 <div class="footer-block__details-content"> 2258 <p>èªæè¡ä»½æéå ¬å¸<br>統編 13004232<br>é»è©± 0800-589-599<br>å°å é²æç¸£æå å¸ç§å è·¯38è</p> 2259 </div> 2260 2261 </div> 2262 2263 </div> 2264 </div>
2265 <div class="footer__content-bottom"> 2266 <div class="footer__content-bottom-wrapper page-width"> 2267 <div class="footer__column footer__column--info"> 2268 2269 2270 2271 2272 2273 2274 <div class="footer__copyright caption"> 2275 <div class="copyright__content">© 2026 æ¨ç æ UA WOOD STUDIO.</div> 2276 </div> 2277 2278 <div class="footer__copyright caption"> 2279 2280 <div> 2281 2282 2283 2284 <a href="/legal/éæè²¨">éæè²¨æ¿ç</a> 2285 2286 2287 2288 2289 | <a href="/pages/é±ç§æ¿ç">é±ç§æ¿ç</a> 2290 2291 2292 2293 2294 | <a href="/legal/æåæ¢æ¬¾">æåæ¢æ¬¾</a> 2295 2296 2297 2298 2299 | <a href="/legal/å¯éæå">ååé é</a> 2300 2301 2302 2303 </div> 2304 2305 </div> 2306 2307 </div> 2308 </div> 2309 </div> 2310</footer> 2311 2312 2313 2314 2315 2316
2316<script> 2317 EasyStore.Currencies.init([{"name":"New Taiwan Dollar","code":"TWD","rate":"1.0","format_prefix":"NT$","format_suffix":null,"format_decimals":0,"thousand_separator":",","is_primary":true}], 1) 2318</script>
2318 2319 2320 2321 2322
2322<script> 2323 let page_template = 'cart'; 2324 2325 if(document.querySelector('.currency-picker')) { 2326 EasyStore.Currencies.change(document.querySelector('.currency-picker').value) 2327 EasyStore.Currencies.convertAll() 2328 } 2329 2330 document.querySelectorAll('.currency-picker').forEach((el)=>{ 2331 el.addEventListener('change',(event)=>{ 2332 EasyStore.Currencies.change(event.target.value) 2333 2334 2335 if (page_template == 'cart') { 2336 const params = new URLSearchParams(window.location.search); 2337 params.set('delete_cache', 1); 2338 window.location.search = params; 2339 } else { 2340 window.location.reload(); 2341 } 2342 2343 return 2344 2345 2346 document.querySelectorAll('[name=currencies],[name=current_currency]').forEach((el)=>{ 2347 el.value = event.target.value 2348 }) 2349 2350 if(page_template == 'cart') location.reload(); 2351 }) 2352 }) 2353 </script>
2353 2354 2355 2356 2357 2358
2358<script> 2359 2360 window.variantStrings = { 2361 addToCart: `å å ¥è³¼ç©è»`, 2362 soldOut: `<span style='font-size:14px;'>å®å®</span>`, 2363 unavailable: `æ«ç¡ä¾æ`, 2364 } 2365 2366 window.accessibilityStrings = { 2367 shareSuccess: `éæ¥å·²å¾©è£½å°åªè²¼æ¿`, 2368 } 2369 </script>
2369 2370 2371<!-- Snippet:global/body_end: Product Label --> 2372<link href='https://apps.easystore.co/assets/css/product-label/main.css?v2.3' rel='stylesheet' type='text/css' media='screen' />
2372<script src='https://apps.easystore.co/product-labels/productlabelv2.js?shop=uawoodstudio.easy.co' type='text/javascript'></script>
2372 2373<!-- /Snippet -->
2374<script> 2375 2376 /* 2377 2378 ------ 2379 Events 2380 ------ 2381 2382 pages/viewed 2383 2384 customers/signup 2385 2386 customers/login 2387 2388 products/searched 2389 2390 collections/viewed 2391 2392 products/viewed 2393 2394 products/shared 2395 2396 wishlists/item_added 2397 2398 carts/items_added 2399 2400 carts/viewed 2401 2402 carts/item_removed 2403 2404 checkouts/initiated 2405 2406 checkouts/shipping_info_added 2407 2408 checkouts/payment_info_added 2409 2410 checkouts/completed 2411 2412 orders/placed 2413 2414 orders/purchased 2415 2416 payments/captured 2417 2418 payments/failed 2419 2420 */ 2421 2422 window.__latest_cart = window.__latest_cart || null; 2423 2424 const _selector = document.querySelector.bind(document), 2425 _selectorAll = document.querySelectorAll.bind(document) 2426 2427 document.addEventListener('DOMContentLoaded', (event) => { 2428 2429 const default_currency = getCookie("currency") 2430 const customer_id = window.__st.cid 2431 const template = window.__st.p 2432 2433 onPageView() 2434 2435 //-----------------------// 2436 // Configs // 2437 //-----------------------// 2438 2439 window.dataLayer = window.dataLayer || [] 2440 2441 Array.prototype.last = Array.prototype.last || function() { 2442 return this[this.length - 1] || null 2443 } 2444 2445 Array.prototype.first = Array.prototype.first || function() { 2446 return this[0] || null 2447 } 2448 2449 //----------------------// 2450 // Triggers // 2451 //----------------------// 2452 2453 const XHR = window.XMLHttpRequest 2454 2455 function xhr() { 2456 2457 const xhr = new XHR() 2458 2459 xhr.addEventListener("readystatechange", function() { 2460 2461 if(xhr.readyState != 4) return 2462 2463 try { 2464 2465 const response_url = xhr.responseURL 2466 2467 if (response_url.includes("cart/add")) { 2468 2469 window.__latest_cart = JSON.parse(xhr.response) 2470 2471 onCartItemsAdded() // ok 2472 2473 } 2474 2475 if (response_url.includes("cart/remove_item_quantity")) { 2476 2477 window.__latest_cart = JSON.parse(xhr.response) 2478 2479 onCartItemRemoved() // ok 2480 2481 } 2482 2483 if (response_url.includes("new_cart?retrieve=true")) { 2484 2485 result = JSON.parse(xhr.response) 2486 2487 if (result.cart) { 2488 window.__latest_cart = result.cart 2489 } 2490 2491 } 2492 2493 } catch(e) { 2494 2495 console.error(e) 2496 2497 } 2498 2499 }, false); 2500 2501 return xhr 2502 2503 } 2504 2505 window.XMLHttpRequest = xhr 2506 2507 switch(template) { 2508 2509 case 'cart': onCartView() // ok 2510 break 2511 case 'product': onProductView() // ok 2512 break 2513 case 'collection': onCollectionView() // ok 2514 break 2515 case 'blog': onBlogView() 2516 break 2517 case 'article': onArticleView() 2518 break 2519 case 'payment_completed': onOrderPlace() 2520 break 2521 case 'payment_fail': onPaymentFail() 2522 break 2523 2524 } 2525 2526 // _selector('form[action="/checkout/payments"]').addEventListener("submit", onPaymentInfoAdded(_selector('form[action="/checkout/payments"]'))) 2527 if (_selector('form[action="/checkout/detail"]')) _selector('form[action="/checkout/detail"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/detail"]'))}) // ok 2528 if (_selector('form[action="/checkout/shipping"]')) _selector('form[action="/checkout/shipping"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/shipping"]'))}) // ok 2529 if (_selector('form[action="/account/register"]')) _selector('form[action="/account/register"]').addEventListener("submit", onSignUp) // ok 2530 if (_selector('form[action="/account/login"]')) _selector('form[action="/account/login"]').addEventListener("submit", onLogin) // ok 2531 if (_selector('form[action="/search"]')) _selector('form[action="/search"]').addEventListener("submit", onProductSearch()) // ok 2532 if (_selector('#line-login-btn')) _selector('#line-login-btn').addEventListener('click', onLineLogin) // ok 2533 if (_selector('#PlaceOrder')) _selector('#PlaceOrder').addEventListener("click", ()=>{onCheckoutComplete(_selector('form[action="/checkout/payments"]'))}); // ok 2534 if (_selector('#add_wishlist')) _selector('#add_wishlist').addEventListener("click", onWishlistItemAdded) // ok 2535 if (_selectorAll('a[href="/account/logout"]')) _selectorAll('a[href="/account/logout"]').forEach(logoutButton => logoutButton.addEventListener("click", onLogout)) // ok 2536 if (_selector('.CartDrawerTrigger.cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link').addEventListener("click", onCartView) // ok 2537 if (_selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link').addEventListener("click", onCartView) // ok 2538 if (_selectorAll('a[class^="share-"]')) _selectorAll('a[class^="share-"]').forEach(shareButton => shareButton.addEventListener("click", ()=>{onProductShare(shareButton)}) ) // ok 2539 if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate)) 2540 2541 // For append elements 2542 const bodyMutationObserver = new MutationObserver(() => { 2543 if (_selector('#form__spc #PlaceOrder')) _selector('#form__spc #PlaceOrder').addEventListener("click", onSinglePageCheckout) // ok 2544 if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate)) 2545 }); 2546 bodyMutationObserver.observe(_selector("body"), {subtree: true, childList: true}); 2547 2548 //------------------------------// 2549 // Event handlers // 2550 //------------------------------// 2551 2552 function onPageView() { 2553 2554 EasyStore.Event.dispatch('pages/viewed', { 2555 page: { 2556 type: template, 2557 title: document.title, 2558 description: _selector('meta[name=description]') ? _selector('meta[name=description]').getAttribute('content') : null, 2559 url: location.href, 2560 } 2561 }) 2562 2563 } 2564 2565 function onSignUp() { 2566 2567 const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/) 2568 const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/) 2569 2570 const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "") 2571 2572 let data = {} 2573 2574 if (email_regex.test(email_or_phone)) { 2575 data.method = 'email' 2576 data.email = email_or_phone 2577 } 2578 2579 if (phone_regex.test(email_or_phone)) { 2580 data.method = "phone" 2581 data.phone = email_or_phone 2582 } 2583 2584 if (!data.method) return 2585 2586 EasyStore.Event.dispatch('customers/signup', data) 2587 2588 } 2589 2590 function onLogin() { 2591 2592 const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/) 2593 const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/) 2594 2595 const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "") 2596 2597 let data = {} 2598 2599 if (email_regex.test(email_or_phone)) { 2600 data.method = 'email' 2601 data.email = email_or_phone 2602 } 2603 2604 if (phone_regex.test(email_or_phone)) { 2605 data.method = "phone" 2606 data.phone = email_or_phone 2607 } 2608 2609 if (!data.method) return 2610 2611 EasyStore.Event.dispatch('customers/login', data) 2612 2613 } 2614 2615 function onLineLogin() { 2616 2617 EasyStore.Event.dispatch('customers/login', { method: 'line' }) 2618 2619 } 2620 2621 function onLogout() { 2622 2623 EasyStore.Event.dispatch('customers/logout', { customer_id }) 2624 2625 } 2626 2627 function onBlogView() { 2628 2629 const blog = "" 2630 2631 EasyStore.Event.dispatch('blogs/viewed', { blog }) 2632 2633 } 2634 2635 function onArticleView() { 2636 2637 const article = "" 2638 2639 EasyStore.Event.dispatch('articles/viewed', { article }) 2640 2641 } 2642 2643 function onProductSearch() { 2644 2645 const query = _selector('input[name=q]').value 2646 2647 if (!query) return 2648 2649 EasyStore.Event.dispatch('products/searched', { query }) 2650 2651 } 2652 2653 function onCollectionView() { 2654 2655 const collection = "" 2656 2657 EasyStore.Event.dispatch('collections/viewed', { collection }) 2658 2659 } 2660 2661 function onProductView() { 2662 2663 const product = "" 2664 2665 EasyStore.Event.dispatch("products/viewed", { product }) 2666 2667 } 2668 2669 function onProductShare(el) { 2670 2671 const product = "" 2672 2673 const channel = el.getAttribute("class").split("-").last() 2674 2675 EasyStore.Event.dispatch('products/shared', { product, channel }) 2676 2677 } 2678 2679 function onWishlistItemAdded() { 2680 2681 let product = "" 2682 const quantity = _selector("#Quantity").value 2683 2684 EasyStore.Event.dispatch('wishlists/item_added', { product }) 2685 2686 } 2687 2688 async function onCartItemsAdded() { 2689 2690 const cart = await getCart() 2691 2692 if(cart && cart.items != undefined && cart.items.length > 0) { 2693 2694 EasyStore.Event.dispatch('carts/item_added', { cart }) 2695 2696 } 2697 2698 } 2699 2700 async function onCartView() { 2701 2702 const cart = await getCart() 2703 2704 EasyStore.Event.dispatch('carts/viewed', { cart }) 2705 2706 } 2707 2708 async function onCartItemRemoved() { 2709 2710 const cart = await getCart() 2711 2712 cart.items = [] 2713 2714 if(cart) { 2715 2716 EasyStore.Event.dispatch('carts/item_removed', { cart }) 2717 2718 } 2719 2720 } 2721 2722 async function onCheckoutInitiate() { 2723 2724 const cart = await getCart() 2725 2726 EasyStore.Event.dispatch('checkouts/initiated', { cart }) 2727 2728 } 2729 2730 async function onShippingInfoAdded(form) { 2731 let checkout = getCheckout() 2732 2733 let form_data = {} 2734 new FormData(form).forEach((value, key) => form_data[key] = value) 2735 2736 let shipping_tier = null 2737 2738 if (form_data.type && form_data.type.startsWith("r_pickup")) { 2739 shipping_tier = `Pickup - ${form_data.pick_location}` 2740 } 2741 2742 if (form_data.s_id) {
2743 shipping_tier = _selector(`input[id='`+form_data.s_id+`']`).getAttribute("data-shipping-name") 2744 } 2745 2746 if (!shipping_tier) return 2747 2748 EasyStore.Event.dispatch('checkouts/shipping_info_added', { checkout, shipping_tier }) 2749 2750 } 2751 2752 async function onPaymentInfoAdded(form) { 2753 2754 let checkout = getCheckout() 2755 2756 let payment_type = new FormData(form).get('payment_method') 2757 2758 EasyStore.Event.dispatch("checkouts/payment_info_added", { checkout, payment_type }) 2759 2760 } 2761 2762 async function onOrderPlace() { 2763 2764 let cart_token = getCookie("cart_js") 2765 let previous_cart_token = getCookie("previous_cart_ga4_js") 2766 2767 if (previous_cart_token && previous_cart_token == cart_token) { 2768 // Prevent duplicate purchase tracking 2769 return 2770 } 2771 2772 let order = getOrder() 2773 2774 EasyStore.Event.dispatch('orders/placed', { order }) 2775 2776 if(order.is_manual_payment) { 2777 2778 EasyStore.Event.dispatch('orders/purchased', { order }) 2779 2780 } 2781 2782 const last_transaction = order.transactions.last() 2783 2784 if (last_transaction.status) { 2785 2786 EasyStore.Event.dispatch('orders/purchased', { order }) 2787 EasyStore.Event.dispatch('payments/captured', { order }) 2788 2789 } 2790 2791 } 2792 2793 async function onPaymentFail() { 2794 2795 const order = getOrder() 2796 2797 EasyStore.Event.dispatch('payments/failed', { order }) 2798 2799 } 2800 2801 async function onCheckoutComplete(form) { 2802 2803 onPaymentInfoAdded(form) 2804 2805 const checkout = getCheckout() 2806 2807 EasyStore.Event.dispatch('checkouts/completed', { checkout }) 2808 2809 } 2810 2811 async function onSinglePageCheckout() { 2812 2813 // let checkout = $("[data-app-checkout]").data("app-checkout") 2814 2815 let checkout = getCheckout() 2816 2817 // const payment_type = _selector("#app_spc_payment_method").find(`[class*="label-content"]`).first().find("b").first().text() 2818 const payment_type = _selector("#app_spc_payment_method").getElementsByClassName('label-content')[0].getElementsByTagName('b')[0].innerHTML 2819 2820 const shipping_method = _selector("#delivery_method").value 2821 2822 let shipping_tier = null 2823 let app_spc_customer_info_label = _selector("#app_spc_customer_info").getElementsByClassName('label-content') 2824 if (shipping_method == "shipping") { 2825 shipping_tier = app_spc_customer_info_label[app_spc_customer_info_label.length - 1].getElementsByTagName('b')[0].innerHTML 2826 } 2827 2828 if (shipping_method == "pickup") { 2829 shipping_tier = app_spc_customer_info_label[0].innerHTML 2830 } 2831 2832 if (shipping_tier) { 2833 2834 EasyStore.Event.dispatch('checkouts/shipping_info_added', { 2835 checkout, 2836 shipping_tier, 2837 }) 2838 2839 } 2840 2841 if (payment_type) { 2842 2843 EasyStore.Event.dispatch('checkouts/payment_info_added', { 2844 checkout, 2845 payment_type, 2846 }) 2847 2848 } 2849 2850 EasyStore.Event.dispatch('checkouts/completed', { checkout }) 2851 2852 } 2853 2854 }) 2855 2856 2857 //-----------------------// 2858 // Functions // 2859 //-----------------------// 2860 2861 function getCookie(name) { 2862 2863 name += "=" 2864 2865 decodedCookie = decodeURIComponent(document.cookie) 2866 2867 ca = decodedCookie.split(";") 2868 2869 for(i = 0; i < ca.length; i++) { 2870 c = ca[i] 2871 while (c.charAt(0) == " ") { 2872 c = c.substring(1) 2873 } 2874 if (c.indexOf(name) == 0) { 2875 return c.substring(name.length, c.length) 2876 } 2877 } 2878 2879 return "" 2880 2881 } 2882 2883 const parsePrice = price => { 2884 if(typeof price === 'string') { 2885 return parseFloat(price.split(',').join('')) 2886 } 2887 2888 return price 2889 } 2890 2891 const requestCart = async (method, data) => { 2892 2893 let response = await fetch('/cart.json', {method: 'GET',headers: {'Content-Type': 'application/json'}}) 2894 result = await response.json() 2895 2896 return result.cart 2897 2898 } 2899 const getCart = async (latest = false) => { 2900 2901 let cart = window.__latest_cart 2902 2903 const cart_invalid = !cart || !cart.items || (cart.total_price > 0 && !cart.items.length) 2904 2905 if(latest || cart_invalid) { 2906 cart = await requestCart() 2907 } 2908 2909 cart.items = cart.items || [] 2910 2911 return mapCart(cart) 2912 2913 } 2914 2915 const getCheckout = async () => { 2916 mapCheckout(window.__latest_cart || await requestCart()) 2917 } 2918 2919 const getOrder = async () => { 2920 mapOrder(window.__latest_cart || await requestCart()) 2921 } 2922 2923 //-----------------------// 2924 // Mappers // 2925 //-----------------------// 2926 2927 const fallbackAttribute = (object, attribute) => { 2928 2929 if(!Array.isArray(attribute)) { 2930 attribute = [attribute] 2931 } 2932 2933 let final_value = null 2934 2935 do { 2936 2937 final_value = object[attribute.shift()] 2938 2939 } while(!final_value && attribute.length) 2940 2941 return final_value 2942 2943 } 2944 2945 const map = (object, mapper) => { 2946 2947 const newObject = {} 2948 2949 for(const key in mapper) { 2950 2951 // Handle different keys between new and old format
2952 newObject[key] = fallbackAttribute(object, mapper[key]) 2953 2954 // Cast price to float 2955 if(newObject[key] && ['price', 'amount', 'discount', 'discounts'].some(x => key.endsWith(x))) { 2956 newObject[key] = parsePrice(newObject[key]) 2957 } 2958 2959 if(newObject[key] === undefined) { 2960 delete newObject[key] 2961 } 2962 2963 } 2964 2965 return newObject 2966 2967 } 2968 2969 const mapCart = cart => { 2970 2971 const oldCart = cart 2972 2973 const mapper = { 2974 id: 'id', 2975 currency: 'currency', 2976 item_count: 'item_count', 2977 items: 'items', 2978 total_price: 'total_price', 2979 latest_items: 'latest_items' 2980 } 2981 2982 cart = map(cart, mapper) 2983 2984 const discounts = (oldCart.storewide_discounts || []).concat((oldCart.voucher_discounts || [])) 2985 2986 cart.discount_applications = discounts.map(discount => ({ 2987 title: discount.voucher_code || null, 2988 value: parsePrice(discount.amount), 2989 })) 2990 2991 cart.original_total_price = cart.items.length 2992 ? cart.items 2993 .map(item => item.original_price) 2994 .reduce((sum, price) => sum + price) 2995 : 0 2996 2997 cart.total_discount = cart.discount_applications.length 2998 ? cart.discount_applications 2999 .map(discount => parsePrice(discount.value)) 3000 .reduce((sum, value) => sum + value) 3001 : 0 3002 3003 cart.items = cart.items.map(item => mapLineItem(item)) 3004 3005 return cart 3006 3007 } 3008 3009 const mapCheckout = checkout => { 3010 3011 const mapper = { 3012 note: 'note', 3013 attributes: 'note_attributes', 3014 billing_address: 'billing_address', 3015 currency: 'currency', 3016 customer_id: 'customer_id', 3017 discounts_amount: 'total_discount', 3018 id: 'id', 3019 line_items: 'order_item', 3020 order_number: 'order_number', 3021 shipping_address: 'shipping_address', 3022 shipping_price: 'shipping_tax', 3023 shipping_method: 'shipping_method_name', 3024 tax_price: 'total_tax', 3025 } 3026 3027 checkout = map(checkout, mapper) 3028 3029 checkout.requires_shipping = checkout.line_items.some(item => item.shipping_required) 3030 3031 checkout.line_items = checkout.line_items.map(item => mapLineItem(item)) 3032 3033 return checkout 3034 3035 } 3036 3037 const mapOrder = order => { 3038 3039 const mapper = { 3040 attributes: 'note_attributes', 3041 billing_address: 'billing_address', 3042 cancelled: 'is_cancelled', 3043 cancelled_at: 'cancelled_at', 3044 created_at: 'created_at', 3045 customer_id: 'customer_id', 3046 // discount_applications: 'discount_applications', 3047 email: 'email', 3048 financial_status: 'financial_status', 3049 fulfillment_status: 'fulfillment_status', 3050 line_items: 'order_item', 3051 note: 'note', 3052 order_number: 'order_number', 3053 phone: 'phone', 3054 shipping_address: 'shipping_address', 3055 shipping_methods: 'shipping_methods', 3056 shipping_price: 'total_shipping', 3057 subtotal_price: 'subtotal_price', 3058 // tax_lines: 'tax_lines', 3059 tax_price: 'total_tax', 3060 total_discounts: 'total_discount', 3061 total_net_amount: 'total_amount_include_transaction', 3062 total_price: 'total_price', 3063 transactions: 'transaction_records', 3064 is_manual_payment: 'is_manual_payment', 3065 } 3066 3067 order.email = order.billing_address.email 3068 order.phone = order.billing_address.phone 3069 order.shipping_method = order.shipping_method_name 3070 3071 order = map(order, mapper) 3072 3073 order.line_items = order.line_items.map(item => mapLineItem(item)) 3074 order.transactions = order.transactions.map(transaction => mapTransaction(transaction)) 3075 3076 return order 3077 3078 } 3079 3080 const mapLineItem = line_item => { 3081 3082 const old_line_item = line_item 3083 3084 const mapper = { 3085 final_price: 'price', 3086 image: 'img_url', 3087 message: 'message', 3088 original_line_price: 'original_line_price', 3089 original_price: 'original_price', 3090 properties: 'properties', 3091 quantity: 'quantity', 3092 requires_shipping: 'shipping_required', 3093 sku: 'sku', 3094 taxable: 'taxable', 3095 title: 'product_name', 3096 product_name: 'product_name', 3097 url: 'url', 3098 product_id: 'product_id', 3099 variant_id: 'variant_id', 3100 id: ['id', 'i_id'], 3101 } 3102 3103 line_item = map(line_item, mapper) 3104 3105 line_item.product_id = line_item.product_id || (old_line_item.product && old_line_item.product.id) || null 3106 line_item.variant_id = line_item.variant_id || (old_line_item.variant && old_line_item.variant.id) || null 3107 line_item.image = line_item.image || (old_line_item.image && old_line_item.image.url) || null 3108 3109 return line_item 3110 3111 } 3112 3113 const mapTransaction = transaction => { 3114 3115 const mapper = { 3116 amount: 'amount', 3117 created_at: 'created_at', 3118 gateway: 'gateway_type', 3119 id: 'id', 3120 status: 'status', 3121 } 3122 3123 transaction = map(transaction, mapper) 3124 3125 return transaction 3126 3127 } 3128 3129 3130</script>
3130 3131 3132</body> 3133</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.