PageSourceSearch

https://www.uawoodstudio.com/cart

html uawoodstudio.com collected 2026-09-28 07:07:29 UTC 111,018 bytes, 3,133 lines download raw bytes

1<!doctype html>
2<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
3<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
4<!--[if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]-->
5<!--[if IE 9 ]><html class="ie9 no-js"> <![endif]-->
6<!--[if (gt IE 9)|!(IE)]><!--> <html class="no-js"> <!--<![endif]-->
7<head>
8
9  <!-- Basic page needs ================================================== -->
10  <meta charset="utf-8">
11  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
12
13  
14  <link rel="icon" href="https://cdn.store-assets.com/s/1273171/f/10967666.jpg" />
15  
16
17  <!-- Title and description ================================================== -->
18  <title>
19  Cart &ndash; 木研所 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()">&times;</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                    &times;
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.