PageSourceSearch

https://www.tworoad.tw/login

html tworoad.tw collected 2026-10-08 23:17:02 UTC 106,902 bytes, 2,432 lines download raw bytes

1<!DOCTYPE html><html class="no-js" lang="zh-TW" prefix="og: https://ogp.me/ns# fb: https://ogp.me/ns/fb# website: https://ogp.me/ns/website#"> <head> <base href="https://www.tworoad.tw/" /> <meta charset="utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" /> <meta http-equiv='x-dns-prefetch-control' content='on'> <meta name="robots" content="noindex,follow"> <meta name="author" content="二路蘿蔔糕 l 用心,把這件事做到極致"> <meta name="copyright" content="會員登入"> <meta name="google" content="notranslate" /> <meta name="mobile-web-app-capable" content="yes"> <meta name="theme-color" content="#f5f5f5"> <link rel="preconnect" href="//cdn.qdm.cloud" /> <link rel="preconnect" href="//image-cdn-flare.qdm.cloud" /> <link rel="preconnect" href="//image-cdn.qdm.cloud" /> <link rel="preconnect" href="//www.facebook.com" /> <link rel="preconnect" href="//connect.facebook.net" /> <link rel="preconnect" href="//ajax.googleapis.com" /> <link rel="dns-prefetch" href="//ajax.googleapis.com" /> <link rel="dns-prefetch" href="//image-cdn-flare.qdm.cloud" /> <link rel="dns-prefetch" href="//image-cdn.qdm.cloud" /> <link rel="dns-prefetch" href="//cdn.qdm.cloud" /> <link rel="dns-prefetch" href="//fonts.googleapis.com" /> <link rel="dns-prefetch" href="//www.google-analytics.com" /> <link rel="dns-prefetch" href="//www.googletagmanager.com" /> <link rel='dns-prefetch' href="//www.google.com" /> <link rel='dns-prefetch' href="//www.google.com.tw" /> <link rel='dns-prefetch' href="//maxcdn.bootstrapcdn.com" /> <link rel='dns-prefetch' href="//cdnjs.cloudflare.com" /> <link rel='dns-prefetch' href="//www.facebook.com" /> <link rel='dns-prefetch' href="//connect.facebook.net" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title itemprop='name'>會員登入 | 二路蘿蔔糕 l 用心,把這件事做到極致</title> <meta name="description" content="職人蘿蔔糕專賣店,秉持天然健康、職人精神和美食溫度,遵循七小時古法,守護三代傳承的美味,你絕不能錯過的美食。" /> <meta property="og:description" content="職人蘿蔔糕專賣店,秉持天然健康、職人精神和美食溫度,遵循七小時古法,守護三代傳承的美味,你絕不能錯過的美食。" /> <!-- FACESPACE --> <meta property="fb:admins" content="563373182,768266873" /> <meta property="fb:app_id" content="111452980985663" /> <meta property="og:title" content="會員登入 | 二路蘿蔔糕 l 用心,把這件事做到極致"/> <meta property="og:type" content="website"/> <meta property="og:url" content="https://www.tworoad.tw/login"/> <meta property="og:locale" content="zh_TW" /> <meta property="og:image" content="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/New_version/頭版_logo.jpg"/> <meta property="og:image:url" content="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/New_version/頭版_logo.jpg"/> <meta property="og:site_name" content="二路蘿蔔糕 l 用心,把這件事做到極致"> <meta property="og:updated_time" content="1791501422"> <!-- Twitter Card --> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" content="會員登入 | 二路蘿蔔糕 l 用心,把這件事做到極致"> <meta name="twitter:description" content="職人蘿蔔糕專賣店,秉持天然健康、職人精神和美食溫度,遵循七小時古法,守護三代傳承的美味,你絕不能錯過的美食。"> <meta name="twitter:image" content="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/New_version/頭版_logo.jpg"> <!-- llms.txt --> <link rel="llms-txt" href="/llms.txt" /> <!-- G++ --> <meta itemprop="name" content="會員登入"> <meta itemprop="description" content="職人蘿蔔糕專賣店,秉持天然健康、職人精神和美食溫度,遵循七小時古法,守護三代傳承的美味,你絕不能錯過的美食。"> <meta itemprop="image" content="//image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/New_version/頭版_logo.jpg"> <meta name="google-site-verification" content="nTLQNQEOAUL_80bZjcd3H09Z-Arl-u7X7GL3Rc-f7dI" /> <link title='會員登入 - 訂閱商品快訊RSS' href="https://www.tworoad.tw/googlebase.xml" type='application/rss+xml' rel='alternate' > <!-- Google's Sitelinks Search --> 
1<script type="application/ld+json">
2	{
3		"@context": "https://schema.org",
4		"@type": "WebSite",
5		"name" : "二路蘿蔔糕 l 用心,把這件事做到極致",
6		"url": "https://www.tworoad.tw/",
7		"potentialAction": {
8			"@type": "SearchAction",
9			"target": {
10				"@type": "EntryPoint",
11				"urlTemplate": "https://www.tworoad.tw/search?q={filter_name}"
12			},
13			"query-input": "required name=filter_name"
14		}
15	}
16	</script>
16 <!-- Organization / LocalBusiness Schema --> 
16<script type="application/ld+json">
17	{
18    "@context": "https:\/\/schema.org",
19    "@type": "Organization",
20    "name": "二路蘿蔔糕 l 用心,把這件事做到極致",
21    "url": "https:\/\/www.tworoad.tw\/",
22    "logo": "https:\/\/image-cdn-flare.qdm.cloud\/q67b3ef089f8e6\/image\/data\/New_version\/頭版_logo.jpg",
23    "email": "[email protected]",
24    "sameAs": [
25        "https:\/\/www.facebook.com\/tworoad2021",
26        "https:\/\/line.me\/R\/ti\/p\/@217yujvr"
27    ],
28    "image": "https:\/\/image-cdn-flare.qdm.cloud\/q67b3ef089f8e6\/image\/data\/New_version\/頭版_logo.jpg"
29}	</script>
29 
29<script type="text/javascript">
30(function(c,l,a,r,i,t,y){
31c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
32t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
33y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
34})(window, document, "clarity", "script", "99n8zhelys");
35</script>
35 <!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 68 bytes, lines 35-36
35 <script async
36				src="https://www.googletagmanager.com/gtag/js?id=
36G-8CRMWS8GBK
vendor: 12 bytes, line 36
36"></script> 
36<script>
37			
vendor: 141 bytes, lines 37-41
37window.dataLayer = window.dataLayer || [];
38			function gtag(){dataLayer.push(arguments);}
39			gtag('js', new Date());
40
41							gtag('config', "
41G-8CRMWS8GBK
vendor: 42 bytes, lines 41-43
41", { send_page_view: false });
42			
43							
43gtag('config', "323701551", { send_page_view: false });
44					</script>
44 
44<script>
45
46				var enhanced_conversion_data = {};
47				var ga_userId = null;
48		var ga_userId_global = null;
49		var qdm_user_uuid = "q67b3ef089f8e6-cg85va5449nrs14aukmqfuqqti";
50		var helperga4 = null;
51		var xmlhttp_uinfo = new XMLHttpRequest();
52		xmlhttp_uinfo.open('GET', "https://www.tworoad.tw/index.php?route=common/header/getLoggedInUserInfo&token=" + new Date().getTime() + "1" + (Math.floor(Math.random() * 999) + 100) , true);
53		xmlhttp_uinfo.onreadystatechange = function() {
54			if (xmlhttp_uinfo.readyState == 4) {
55				if(xmlhttp_uinfo.status == 200) {
56					try {
57						var obj = JSON.parse(xmlhttp_uinfo.responseText);
58						ga_userId = obj.user_id;
59						if( obj.email ) {
60							enhanced_conversion_data.email = obj.email;
61													}
62					} catch (e) { }
63				 }
64			}
65		};
66		xmlhttp_uinfo.send(null);
67
68		try {
69			if ('localStorage' in window && window['localStorage'] !== null){
70				if( localStorage.getItem('qdm_user_uuid') && qdm_user_uuid == null ) {
71					qdm_user_uuid = localStorage.getItem('qdm_user_uuid');
72				}
73			}
74		} catch (e) {}
75		window.addEventListener("beforeunload", () => localStorage.removeItem('qdm_user_uuid'));
76
77		function QUUID(){var x=(new Date).getTime(),t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){const n=(x+16*Math.random())%16|0;return x=Math.floor(x/16),("x"==t?n:3&n|8).toString(16)});return "q67b3ef089f8e6"+t;}
78		var dateTime = Date.now();
79		var timestamp = Math.floor(dateTime / 1000);
80		var global_quuid = QUUID();
81		//var global_quuid = "q67b3ef089f8e6" + Math.random().toString(13).substr(2, 9) + "" + timestamp + "" + new Date().getTime();
82		var global_product_id = 0;
83		var ecommCheckoutTotal = 0;
84		var gecommProduct = new Array("0");
85				var gecommProductName = '';
86		var gecommProductSKU = '';
87		var gecommProductDesc = '';
88		var gecommProductBrand = '';
89		var gecommProductBrand_cyntelli = '';
90		var gecommProductCategoryPath = '';
91		var gecommProductCategoryWithComma = '';
92		var gecommProductPrice = 0;
93		var gecommCompareAtPrice = 0;
94		var gecommProductImageUrl = "";
95		var gecommProductUrl = "";
96				var gecommViewCategoryName = '';
97		var gecommViewFullCategoryName = '';
98		var gecommProductToCart = {};
99		var ecommOrderToCheckout = {};
100				dataLayer.push({
101			'pageCategory': 'signup',
102			'visitorType': 'high-value'
103		});
104
105				var customer_id = '0';
106		if(customer_id>0){
107			if( ga_userId !== null ) {
108				ga_userId = customer_id;
109			}
110		}
111
112		var ga_utm_source = null;
113		var toggleVisible = function(id){
114			var el = document.getElementById(id);
115			if( el !== null ) { el.style.visibility = "visible"; }
116		};
117		
118	</script>
118 
118<script id="google-ga-event-track" type="text/javascript">
119
120		var track_google_ga_trigger = 0;
121
122		setTimeout(function(){
123
124			if( ga_userId !== null ) {
125				ga_userId_global = "q67b3ef089f8e6_" + ga_userId;
126
127				dataLayer.push({
128					'event': 'data',
129					'UID': ga_userId
130				});
131				window.adGeek_d = {
132					'memberId': ga_userId
133				};
134
135									gtag('config', '323701551', {'user_id': ga_userId_global}); /*ga4*/
136				
137									gtag('config', "G-8CRMWS8GBK", {'user_id': ga_userId_global});
138				
139				
140							} else {
141							}
142
143			if( track_google_ga_trigger == 1 ) { return false; };
144
145			if ( parseInt(global_product_id) > 0 ) {
146				if (typeof gaTrackProductView == 'function') {
147					gaTrackProductView();
148				}
149			}
150
151			
152			
153			
154			
155
156						try {
157				gtag('event', 'page_view', {
158				  page_title: '會員登入',
159				  page_location: location.href,
160				  page_path: location.pathname,
161				});
162
163				
164			} catch (e) { }
165			
166		}, 2000);
167
168	</script>
168 
168<script>
169		
170		var QDMPPID = "d93bec3d7e7e56f07848132c4c0fe2c3";
171		function setCookie(name, value, days) {
172			var expires = "";
173			if (days) {
174				// Mutate ONE Date object then format it. The previous one-liner set the
175				// expiry on a throwaway Date and formatted a fresh (now) Date, so every
176				// "persistent" cookie got expires=now and was dropped immediately.
177				var expireDate = new Date();
178				expireDate.setTime(expireDate.getTime() + (864e5 * days));
179				expires = "; expires=" + expireDate.toUTCString();
180			}
181			// SameSite=Lax lets cookies survive redirects back from external services (e.g. ECPay logistics).
182			document.cookie = name + "=" + value + expires + "; path=/; Secure; SameSite=Lax";
183		}
184		function getCookie(e){var n,i=document.cookie,o=i.indexOf(" "+e+"=");return-1==o&&(o=i.indexOf(e+"=")),i=-1==o?null:(o=i.indexOf("=",o)+1,-1==(n=i.indexOf(";",o))&&(n=i.length),unescape(i.substring(o,n)))}
185		if( !getCookie("QDMPPID") ) { setCookie("QDMPPID","18ea38f1f23376e6632b442cd0b96acc", 365); }
186		QDMPPID = getCookie("QDMPPID");
187		<!-- Facebook Pixel Code -->
188		!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
189		n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
190		n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
191		t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
192		document,'script','https://connect.facebook.net/en_US/fbevents.js');
193		<!-- End Facebook Pixel Code -->
194
195		function onloadCSS(e,n){function t(){!o&&n&&(o=!0,n.call(e))}var o;e.addEventListener&&e.addEventListener("load",t),e.attachEvent&&e.attachEvent("onload",t),"isApplicationInstalled"in navigator&&"onloadcssdefined"in e&&e.onloadcssdefined(t)}!function(e){"use strict";var n=function(n,t,o){function a(e){return l.body?e():void setTimeout(function(){a(e)})}function d(){r.addEventListener&&r.removeEventListener("load",d),r.media=o||"all"}var i,l=e.document,r=l.createElement("link");if(t)i=t;else{var s=(l.body||l.getElementsByTagName("head")[0]).childNodes;i=s[s.length-1]}var f=l.styleSheets;r.rel="stylesheet",r.href=n,r.media="only x",a(function(){i.parentNode.insertBefore(r,t?i:i.nextSibling)});var c=function(e){for(var n=r.href,t=f.length;t--;)if(f[t].href===n)return e();setTimeout(function(){c(e)})};return r.addEventListener&&r.addEventListener("load",d),r.onloadcssdefined=c,c(d),r};"undefined"!=typeof exports?exports.loadCSS=n:e.loadCSS=n}("undefined"!=typeof global?global:this);
196
197		function removeClass( classname, element ) {
198			var cn = element.className;
199			var rxp = new RegExp( "s?b"+classname+"b", "g" );
200			cn = cn.replace( rxp, '' );
201			element.className = cn;
202		}
203
204		var disabledScroll = 1;
205		var doJsAfterLoad = 0;
206
207		
208		var stylesheets = [
209			"https://cdn.qdm.cloud/static/fontawesome/v3.2.1/css/font-awesome.min.css",
210			"https://cdn.qdm.cloud/static/fontawesome/v4.7.0/css/font-awesome.min.css",
211			"https://cdn.qdm.cloud/static/fontawesome/v5.11.2/css/all.min.css",
212			"https://cdn.qdm.cloud/static/fontawesome/v5.11.2/css/v4-shims.min.css",
213			"https://cdn.qdm.cloud/static/fontawesome/v6.5.1/css/all.min.css",
214			"https://fonts.googleapis.com/css?family=Roboto:400,400i,500,700&display=swap",
215			"https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css",
216			"https://cdnjs.cloudflare.com/ajax/libs/izitoast/1.4.0/css/iziToast.min.css"
217		];
218				function refreshMiniCartScrollBar(){
219			var nice = $(".nicescroll-box").niceScroll(".wrap",{emulatetouch:true,bouncescroll:true});
220		}
221		function initCoreCSS(){
222			if( doJsAfterLoad ) return;
223						var loading_css_product = loadCSS("https://cdn.qdm.cloud/assets/css/core_product.24022002.css");
224			onloadCSS(loading_css_product, function(){ initCSS(); });
225						toggleVisible('header');
226			toggleVisible('mainnav');
227			doJsAfterLoad = 1;
228		}
229		function initCSS(){
230			for (var i=0; i < stylesheets.length; i++) { loadCSS(stylesheets[i]); }
231					}
232		function loadJS(){
233											}
234
235		const ImageErrorHandler = {
236			// 配置選項
237			config: {
238				maxRetries: 5,
239				baseDelay: 200,
240				maxDelay: 3000,
241				defaultImage: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
242				fallbackImage: "//cdn.qdm.cloud/assets/no_image.jpg" // 可選的替代圖片
243			},
244
245			// 正在處理的圖片 Map(防止重複處理)
246			processingImages: new WeakMap(), //WeakMap減少記憶體的洩漏
247			handle(image) {
248				try {
249					if (!image || !image.src || this.processingImages.has(image)) {
250						return;
251					}
252
253					// 標記為處理中
254					this.processingImages.set(image, true);
255
256					const retryCount = parseInt(image.getAttribute('data-reload') || '0') + 1;
257
258					if (retryCount > this.config.maxRetries) {
259						this.handleFinalError(image);
260						return;
261					}
262
263					image.setAttribute('data-reload', retryCount);
264
265					// 計算延遲時間(指數退避)
266					const delay = Math.min(
267						this.config.baseDelay * Math.pow(2, retryCount - 1),
268						this.config.maxDelay
269					);
270
271					setTimeout(() => {
272						this.retryLoad(image, retryCount);
273					}, delay);
274
275				} catch (err) {
276					console.error('ImageErrorHandler error:', err);
277					this.handleFinalError(image);
278				}
279			},
280
281			retryLoad(image, retryCount) {
282				const imageSrc = this.updateTimestamp(image.src);
283				// 使用新圖片物件測試
284				const testImage = new Image();
285				testImage.onload = () => {
286					// 成功載入
287					image.src = imageSrc;
288					this.processingImages.delete(image);
289
290					// 重新綁定錯誤處理
291					image.onerror = () => this.handle(image);
292				};
293
294				testImage.onerror = () => {
295					// 載入失敗
296					this.processingImages.delete(image);
297
298					// 如果是最後一次重試前,嘗試使用備用圖片
299					if (retryCount === this.config.maxRetries - 1 && this.config.fallbackImage) {
300						image.src = this.config.fallbackImage;
301						image.onerror = () => this.handle(image);
302					} else {
303						this.handle(image);
304					}
305				};
306
307				testImage.src = imageSrc;
308			},
309
310			updateTimestamp(src) {
311				const timestamp = `timestamp=${Date.now()}`;
312
313				if (src.includes('timestamp=')) {
314					return src.replace(/timestamp=\d+/, timestamp);
315				}
316
317				const separator = src.includes('?') ? '&' : '?';
318				return `${src}${separator}${timestamp}`;
319			},
320
321			handleFinalError(image) {
322				// 清理
323				image.onerror = null;
324				image.onload = null;
325				this.processingImages.delete(image);
326
327				// 保存原始 URL
328				if (!image.src.includes("base64") && !image.hasAttribute('data-image-raw')) {
329					image.setAttribute('data-image-raw', image.src);
330				}
331
332				// 設置預設圖片
333				image.src = this.config.defaultImage;
334
335				// 觸發事件
336				image.dispatchEvent(new CustomEvent('imageFinalError', {
337					detail: {
338						originalSrc: image.getAttribute('data-image-raw'),
339						retries: image.getAttribute('data-reload')
340					}
341				}));
342			}
343		};
344
345		// 圖片錯誤
346		function imgError(image) {
347			ImageErrorHandler.handle(image);
348		}
349
350
351	</script>
351 <!-- Facebook Pixel Code --> 
351<script id="facebook-pixcel-reportFbqTrack" type="text/javascript">
352	function reportFbqTrack() {
353	fbq('dataProcessingOptions', []);
354	var pixel_ids = ['748438983148999'];
355	var fb_advanced_matching = {};
356	for (var i = 0; i < pixel_ids.length; i++){
357		try {
358			var init_params = Object.assign({}, fb_advanced_matching);
359			if( ga_userId !== null ) {
360				ga_userId_global = "q67b3ef089f8e6_" + ga_userId;
361				init_params.uid = ga_userId_global;
362			}
363			init_params.external_id = QDMPPID;
364			fbq('init', pixel_ids[i], init_params, {'agent':'plQDM'});
365		} catch (e) {
366			// fallback: 至少包含 external_id
367			var fallback_params = {external_id: QDMPPID};
368			fbq('init', pixel_ids[i], fallback_params, {'agent':'plQDM'});
369		}
370	}
371		setTimeout(function() { fbq('track', "PageView", {}, {eventID: global_quuid + "v"}); }, 30);
372						
373	
374		
375			}
376	</script>
376 <!-- End Facebook Pixel Code --> 
376<script>
377		function vbtrax_track(){
378				}
379
380		function criteo_track(){
381		}
382
383		
384	</script>
384 <!-- Google Tag Manager --> 
384<script>
385	setTimeout(function(){
vendor: 333 bytes, lines 385-390
385
386	(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
387	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
388	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
389	'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
390	})(window,document,'script','dataLayer','
390GTM-KXZFJ3C
vendor: 5 bytes, lines 390-391
390');
391	
391}, 1500);
392	</script>
392 <!-- End Google Tag Manager --> 
392<script type="application/javascript"> <!-- LINE Tag Base Code -->
393(function(g,d,o){
394  g._ltq=g._ltq||[];g._lt=g._lt||function(){g._ltq.push(arguments)};
395  var h=location.protocol==='https:'?'https://d.line-scdn.net':'http://d.line-cdn.net';
396  var s=d.createElement('script');s.async=1;
397  s.src=o||h+'/n/line_tag/public/release/v1/lt.js';
398  var t=d.getElementsByTagName('script')[0];t.parentNode.insertBefore(s,t);
399    })(window, document);
400_lt('init', {
401  customerType: 'lap',
402  tagId: 'ca1644dc-2795-476b-9ffa-e1550d80f920&#039;'
403});
404_lt('send', 'pv', ['ca1644dc-2795-476b-9ffa-e1550d80f920&#039;']);
405<!-- End LINE Tag Base Code -->
406
407try { setCookie("qdmfbevent_id", global_quuid + "v", 5); } catch (error) { }
408
409(function() {
410	var url = "https://www.tworoad.tw/index.php?route=pixcel/facebook/capi_page_view&quuid=" + global_quuid + "v";
411
412	if (typeof fetch === "function") {
413		try {
414			fetch(url, { method: "GET", keepalive: true, credentials: "include" }).catch(function() {});
415		} catch (e) {}
416	} else {
417		try {
418			var xhr = new XMLHttpRequest();
419			xhr.open("GET", url, true);
420			xhr.send();
421		} catch (e) {}
422	}
423})();
424	</script>
424 </script>
424 
424<script>
425			var N=document.createElement("link");
426	N.setAttribute("href", "https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/2023/03/28/d582cbfbb5e6775893b8fbf654d4fc86.jpg");
427	N.setAttribute("rel", "shortcut icon");
428		N.setAttribute("type", "image/jpeg");
429			document.head.appendChild(N);
430		</script>
430 
430<script>document.createElement("picture");</script>
430 
430<script async src='https://cdnjs.cloudflare.com/ajax/libs/picturefill/3.0.3/picturefill.min.js'></script>
430 <link rel="icon" href="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/2023/03/28/d582cbfbb5e6775893b8fbf654d4fc86.jpg" type="image/png" sizes="48x48" > <link rel="shortcut icon" href="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/2023/03/28/d582cbfbb5e6775893b8fbf654d4fc86.jpg" type="image/png" sizes="48x48" > <link type="text/css" rel="stylesheet" href="https://cdn.qdm.cloud/min/css/core.260320v01.css"> <style>
431	*, body, p, pre, button, input, optgroup, select, textarea, a, a:visited { font-family: 'SF Pro TC', 'SF Pro Text', 'PingFang TC', 'Segoe UI', SegoeUI, 'Microsoft JhengHei', 微軟正黑體, 'Helvetica Neue', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
432	@media (min-width: 1200px) { body { padding-top: 40px; } .container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 1170px; } }
433	.hidden{display:none;visibility:hidden}
434	.pull-right { float: right !important; }
435	.container > #mainnav.skin4 { max-width:860px;width:100%; }
436	.container > #mainnav.skin4 .nav.menu-nav { display:inherit; }
437	#mainnav ul { list-style: none; display: flex; flex-wrap: wrap; }
438	#mainnav ul li { position: relative; }
439	#mainnav ul li ul.dropdown-menu { position: absolute; display: none; flex-direction: column; }
440	#mainnav ul li ul.dropdown-menu > li.column-menu { display: table-cell; border-right: 1px solid #eee; vertical-align: top; }
441	#mainnav ul li ul.dropdown-menu > li.column-menu > ul { display: block; }
442	#mainnav ul li:hover > ul { display: flex; }
443	#mainnav ul ul ul {top: 0; left: 100%; border-left:solid 1px #fff; width:auto;}
444	#mainnav ul.nav li.dropdown ul.dropdown-menu { webkit-box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); -moz-box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); }
445	#mainnav ul.nav li.dropdown ul.dropdown-menu li a { font-size: 17px; line-height: 26px; }
446	#mainnav ul.nav li.dropdown > ul.dropdown-menu > li[data-has-child] > a:after { content: ''; border: 4px solid transparent; border-left: 4px solid #000; margin-top: 2px; margin-bottom: 3px; display: inline-block; vertical-align: bottom; position: absolute; right: 6px; top: 10px; }
447	.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;}
448	.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px;}
449	#header ul{list-style:none;margin:0;padding:0} #header li{list-style:none}
450	.navbar .nav{position:relative;}
451	.navbar .nav.pull-right{float:right;margin-right:0;}
452	.navbar .nav>li{float:left;}
453	.navbar .nav>li>a{float:none;padding:10px 15px 10px;text-decoration:none;}
454	.navbar .nav .dropdown-toggle .caret{margin-top:8px;}
455	.navbar .button-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;}
456	.button-navbar .icon-bar+.icon-bar{margin-top:3px;}
457	.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;}
458	.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;}
459	.dropdown-menu { position: absolute; display: none; float: left; }
460	.dropup, .dropdown { position: relative; }
461			.pushy { z-index: 99999999; }
462	.pushy-menu-storename span{
463		width: 40%;
464		position: absolute;
465		top: 24px;
466		right: 5px;
467		text-align: right;
468		padding-right: 10px;
469	}
470	.pushy-menu-storename a{
471		width: 90%;
472	}
473	.pushy-menu-storename a:hover, a:visited, a:link, a:active {
474		text-decoration: none;
475	}
476	</style> <link type="text/css" rel="stylesheet" href="https://cdn.qdm.cloud/min/css/theme/skin-3.css?v=231130001"> <link type="text/css" rel="stylesheet" href="https://image-cdn.qdm.cloud/site/q67b3ef089f8e6/custom_theme.css?v=20230807100759"> <style>
477	html {-webkit-transition: background-color 0s;transition: background-color 0s;} html.loading { position: relative; overflow:hidden; width:100%; height:100%; min-height:768px;
477 background: #fff url('https://cdn.qdm.cloud/min/cache/loading_1107.gif') no-repeat 50% 40%;-webkit-transition: background-color 0; transition: background-color 0; height: 100%; width: 100%;} body {-webkit-transition: opacity 0.3s ease-in;transition: opacity 0.3s ease-in;} html.loading body { opacity: 0; -webkit-transition: opacity 0s; transition: opacity 0s; } html.loading:before { font-size: 15px; content: "【 請勿關閉視窗 】等候交易授權中"; color: #000; vertical-align: middle; text-align: center; width: 100%; display: block; position: absolute; top: 30%; } img { opacity: 1; transition: opacity 0s; } img[data-src] { opacity: 1; } .flexslider .flex-direction-nav { display:none; }
478			#myBody.product-product .heading h1, #myBody.product-product .mainborder .rightcol h1 { color: rgb(0, 0, 0);
479	}
480			.already_sold span{color:#e4007f;font-weight:bold;}
481	#myBody .fancybox-buttons { top: 60px; }
482	.ui-autocomplete.ui-front.ui-menu {
483		z-index: 999999999; border: none; border: 1px solid #EEE; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
484	}
485	.ui-autocomplete.ui-front.ui-menu > .ui-menu-item {
486		font-size: 17px; line-height: 26px; list-style-image: none; background-color: #FFF; cursor: pointer; border: none;
487	}
488	.ui-autocomplete.ui-front.ui-menu > .ui-menu-item a.ui-state-focus {
489		line-height: 26px;
490		border-color: #616161;
491		background: #616161 !important;
492		font-weight: bold !important;
493		color: #ffffff !important;
494	}
495	@media only screen and (max-width:768px){.fb_dialog_content>iframe:first-child, .fb-customerchat iframe {bottom: 50px !important;}.quickcheckout-checkout .fb_dialog_content>iframe:first-child, .quickcheckout-checkout .fb-customerchat iframe {bottom: 90px !important;}}
496	.onsale{ width:65px; height:24px; min-width:65px; min-height:24px; padding:2px; border-radius:5%; line-height:20px; }
497	#navbar-top-socialbar li.social-icon{ line-height:0px; padding-top:6px; }
498	#navbar-top-socialbar li.social-icon>a>i{ line-height:24px; }
499	.display_price { display:none; }
500
501	#payment-logo-list{
502		width: 100%;
503		max-width: 1200px;
504		margin: 0 auto;
505		/*padding-bottom: 20px;*/
506		padding-top: 10px;
507	}
508
509	#payment-logo-list .pl-row {
510		display: flex;
511		flex-wrap: wrap;
512		justify-content: center;
513		gap: 20px;
514	}
515
516	#payment-logo-list .pl-col {
517		flex: 1;
518		max-width: 120px;
519		padding: 2px;
520		text-align: center;
521	}
522	#payment-logo-list .pl-col img {
523		max-height: 40px;
524		line-height: 40px;
525		object-fit: contain
526	}
527	@media only screen and (max-width:768px){
528		#payment-logo-list .pl-col {
529			min-width: 10%;
530		}
531	}
532	</style> <style>
533	.preload-hidden { opacity: 0; transition: opacity .3s ease; }
534	.awoo-ui { display:block; margin-top:20px; margin-bottom:20px; }
535	</style> 
535<script>
536	window.addEventListener('load', function(){
537		try {
538			setTimeout(function(){
539				var preloadElements = document.querySelectorAll('.preload-hidden');
540				preloadElements.forEach(function(element) {
541					element.style.opacity = '1';
542				});
543			}, 300);
544		} catch(e) {}
545	});
546	</script>
546 </head> <body id="myBody" data-customer-group="1" data-instant-allow-query-string itemscope itemtype="https://schema.org/WebSite" class="responsive  skin-3 account-login"> <div id="fb-root"></div> 
546<script>
547	window.fbAsyncInit = function() {
548		FB.init({
549		  appId      		: '111452980985663',
550		  autoLogAppEvents 	: true,
551		  cookie     		: true,
552		  xfbml            	: true,
553		  status     		: true,
554		  version    		: 'v19.0'
555		});
556			};
557</script>
557 <!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, line 557
557 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
557GTM-KXZFJ3C
vendor: 83 bytes, lines 557-558
557"
558height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 
558<!-- End Google Tag Manager (noscript) --> <meta itemprop="url" content="https://www.tworoad.tw/" /> <!-- Mobile Header --> <!--googleoff: index--> <div id="mobile-navbar" class="navbar navbar-static-top FixedTop visible-xs visible-sm" style="display:none;"> <div class="navbar-inner"> <ul class="nav"> <li id="menu-btn" class="menu-btn"><span>&#9776;</span></li> <li class="site-title"> <a href="https://www.tworoad.tw/"><img src="//image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/2023/03/28/68f32fc16614c723f1a2092b597c5d89.jpg" title="二路蘿蔔糕 l 用心,把這件事做到極致" style="width:auto;max-height:56px;" /></a> </li> <li id="shopping-cart-list" class="shopping-cart" data-direction="left" style="overflow: visible; margin: 0px; padding-right: 10px;"><a href="https://www.tworoad.tw/cart"><i class="fa fa-shopping-cart" aria-hidden="true"></i><span class="badge hidden">0</span></a></li> </ul> </div> </div> <!--googleon: index--> <!-- Pushy Menu --> <nav id="mobile-menu-pushy" class="pushy pushy-left visible-xs visible-sm" style="display:none;"> <div class="pushy-content"> <ul> <li class="pushy-menu-storename"> <a href="https://www.tworoad.tw/">二路蘿蔔糕 l 用心,把這件事做到極致</a> <span><i class="fa fa-times" aria-hidden="true"></i></span> </li> <div class="pushy-menu-main"> <li class="header-logged-menu pushy-submenu hidden"> <button><i class="fa fa-user-circle-o"></i>&nbsp;<span id="header-mobile-user"></span></button> <ul> <li class="pushy-link"><a href="/account">會員中心</a></li> <li class="pushy-link"><a href="https://www.tworoad.tw/account/edit">我的資料</a></li> <li class="pushy-link"><a href="https://www.tworoad.tw/account/reward">我的紅利</a></li> <div class="pushy-menu-divide"></div> <li class="pushy-link"><a href="https://www.tworoad.tw/wishlist">願望清單</a></li> <div class="pushy-menu-divide"></div> <li class="pushy-link"><a href="https://www.tworoad.tw/newsletter">我的訂閱</a></li> </ul> </li> <li class="header-logged-menu pushy-submenu hidden"> <button><i class="fa fa-truck" aria-hidden="true"></i>&nbsp;我的訂單</button> <ul> <li class="pushy-link"><a href="https://www.tworoad.tw/order">我的訂單</a></li> <li class="pushy-link"><a href="https://www.tworoad.tw/account/return">退/換貨紀錄</a></li> </ul> </li> <li class="pushy-link header-none-logged-menu hidden"><a href="/login"><i class="fa fa-user-circle-o"></i>&nbsp;會員中心&nbsp;(登入)</a></li> <li class="pushy-link header-none-logged-menu hidden"><a href="/guestorder"><i class="fa fa-search-plus" aria-hidden="true"></i>&nbsp;我要查訂單</a></li> <li class="pushy-submenu"> <button><i class="fa fa-commenting-o" aria-hidden="true"></i>&nbsp;找店長</button> <ul> <li class="pushy-link"><a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer nofollow">電子郵件</a></li> <li class="pushy-link"><a target="_blank" rel="noopener noreferrer nofollow" href="https://line.naver.jp/ti/p/~@217yujvr">LINE@</a></li> <li class="pushy-link"><a href="https://www.messenger.com/t/tworoad2021" target="_blank" rel="noopener noreferrer nofollow">Facebook訊息</a></li> </ul> </li> <li class="pushy-link header-logged-menu hidden"><a href="https://www.tworoad.tw/account/logout"><i class="fa fa-sign-out" aria-hidden="true"></i>&nbsp;登出</a></li> </div> <!-- \.pushy-menu-main --> <div class="pushy-menu-divide"></div> <div class="search"> <form method="get" action="/search"> <span class="fa fa-search"></span> <input type="text" name="q" placeholder="商品關鍵字" autocomplete="off"> </form><br/> </div> <div class="pushy-menu-category"> <li class="pushy-link home-item-link"><a href="https://www.tworoad.tw/">商店首頁</a></li> <li class="pushy-link" > <a href="/用心把這件事做到極致" >品牌故事</a> </li> <li class="pushy-link" > <a href="/latest" >全部商品</a> </li> <li class="pushy-link" > <a href="/下單前請先閱讀唷" >購買資訊</a> </li> <li class="pushy-link" > <a href="/二路來解惑" >常見問題</a> </li> <li class="pushy-submenu" > <button><span class="pushy-submenu-parent" data-url="https://www.tworoad.tw/私廚教室" >私廚教室</span></button> <ul> <li class="pushy-link"> <a href="index.php?route=information/information&information_id=15" >XO醬炒蘿蔔糕</a> </li> <li class="pushy-link"> <a href="index.php?route=information/information&information_id=12" >泡菜炒蘿蔔糕</a> </li> <li class="pushy-link"> <a href="index.php?route=information/information&information_id=16" >涼拌蘿蔔糕</a> </li> <li class="pushy-link"> <a href="index.php?route=information/information&information_id=20" >花枝握壽司</a> </li> <li class="pushy-link"> <a href="index.php?route=information/information&information_id=17" >蒸蘿蔔糕</a> </li> <li class="pushy-link"> <a href="index.php?route=information/information&information_id=21" >蘆筍握壽司</a> </li> <li class="pushy-link"> <a href="index.php?route=information/information&information_id=19" >蘿蔔糕海苔捲</a> </li> <li class="pushy-link"> <a href="index.php?route=information/information&information_id=18" >蘿蔔糕玉子燒</a> </li> <li class="pushy-link"> <a href="index.php?route=information/information&information_id=13" >
558金沙炒蘿蔔糕</a> </li> <li class="pushy-link"> <a href="index.php?route=information/information&information_id=14" >鮪魚握壽司(番茄)</a> </li> </ul> </li> </div> </ul> </div> </nav> <!-- Site Overlay --> <div class="site-overlay"></div> <header id="header" class="visible-lg visible-md navbar" itemscope itemtype="https://schema.org/Organization"> <div class="container"> <a itemprop="url" class="logo" href="https://www.tworoad.tw/"><img onerror='imgError(this);' itemprop="logo" src="//image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/New_version/頭版_logo.jpg" title="二路蘿蔔糕 l 用心,把這件事做到極致" alt="二路蘿蔔糕 l 用心,把這件事做到極致" /></a> <div id="search" class="search searchbox input-append" itemprop="potentialAction" itemscope itemtype="https://schema.org/SearchAction"> <meta itemprop="target" content="https://www.tworoad.tw/search?q={filter_name}" /> <input itemprop="query-input" type="search" name="filter_name" value="" placeholder="搜尋" class="input-xxlarge" /> <i class="icon-search button-search"></i> </div> <ul id="contact-block"> <li style="background-color:transparent;background-image:none;"> <a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer nofollow" title="寫Email"> <i class="fa fa-envelope-o"></i> </a> </li> <li style="background-color:transparent;background-image:none;"> <a href="https://www.messenger.com/t/tworoad2021" target="_blank" rel="noopener noreferrer nofollow" title="Facebook訊息"> <i class="fa fa-facebook-square"></i> </a> </li> <li style="background-color:transparent;background-image:none;"> <a target="_blank" rel="noopener noreferrer nofollow" href="https://line.naver.jp/ti/p/~@217yujvr" title="LINE ID"><i class="fab fa-line"></i></a> </li> </ul> <ul id="main-nav" class="nav nav-pills pull-right"> <li></li> <li></li> <li><section class="float-mini-cart" id="cart"> <style>
559.mini-cart-info td, .mini-cart-total td { line-height:20px; }
560</style> <div class="heading"> <i class="fa fa-shopping-cart"></i>&nbsp;
561		( <a href="https://www.tworoad.tw/cart" id="cart-total">
562					 0 件商品 $0				</a>
563		 )
564			</div> <div class="content"> <div class="empty white">購物車沒有加入任何商品</div> <a id="closecart" class="close" title="Close" onclick="$('#cart').removeClass('active');">×</a> </div> </section></li> <li id="header-logged-menu" class="dropdown hidden"> <a href="https://www.tworoad.tw/account" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-user-o"></i>&nbsp;<span id="header-logged-user"></span>&nbsp;<b class="caret"></b></a> <ul class="dropdown-menu"> <li><a href="https://www.tworoad.tw/account">會員中心</a></li> <li><a href="https://www.tworoad.tw/order">我的訂單</a></li> <li><a href="https://www.tworoad.tw/wishlist">願望清單</a></li> <li class="divider"></li> <li><a href="https://www.tworoad.tw/account/logout">登出</a></li> </ul> </li> <li id="header-none-logged-menu"><p style="margin:7px 0px;"><a href="https://www.tworoad.tw/login" title="會員登入" id="bt
564nLogin"><i class="fa fa-user-o"></i> 會員登入</a></p></li> </ul> </div> </header> <div id="content-wrapper"> <div class="container"> <nav id="mainnav" class="navbar visible-lg visible-md" role="navigation" style="visibility:hidden"> <div class="navbar-inner"> <div class="container"> <button type="button" class="button button-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span>
565
566								選單</span> <i class="icon-navbtn"></i> </button> <div class="nav-collapse"> <ul class="nav"> <li data-categoryid="9"  href="/用心把這件事做到極致" > <a  href="/用心把這件事做到極致" ><img class="flipper" data-flipper="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/品牌故事_1.jpg" src="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/品牌故事_1.jpg" alt="品牌故事" title="品牌故事" /></a> </li> <li data-categoryid="8"  href="/latest" > <a  href="/latest" ><img class="flipper" data-flipper="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/全部商品.jpg" src="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/全部商品.jpg" alt="全部商品" title="全部商品" /></a> </li> <li data-categoryid="10"  href="/下單前請先閱讀唷" > <a  href="/下單前請先閱讀唷" ><img class="flipper" data-flipper="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/購買資訊.jpg" src="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/購買資訊.jpg" alt="購買資訊" title="購買資訊" /></a> </li> <li data-categoryid="11"  href="/二路來解惑" > <a  href="/二路來解惑" ><img class="flipper" data-flipper="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/常見問題.jpg" src="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/常見問題.jpg" alt="常見問題" title="常見問題" /></a> </li> <li data-categoryid="12"  href="https://www.tworoad.tw/私廚教室"  class="dropdown"> <a  href="https://www.tworoad.tw/私廚教室" ><img class="flipper" data-flipper="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/私廚教室_1.jpg" src="https://image-cdn-flare.qdm.cloud/q67b3ef089f8e6/image/data/私廚教室_1.jpg" alt="私廚教室" title="私廚教室" /></a> <ul class="dropdown-menu"> <li id="50" ><a href="index.php?route=information/information&information_id=15"  data-hover="">XO醬炒蘿蔔糕</a> </li> <li id="51" ><a href="index.php?route=information/information&information_id=12"  data-hover="">泡菜炒蘿蔔糕</a> </li> <li id="52" ><a href="index.php?route=information/information&information_id=16"  data-hover="">涼拌蘿蔔糕</a> </li> <li id="53" ><a href="index.php?route=information/information&information_id=20"  data-hover="">花枝握壽司</a> </li> <li id="54" ><a href="index.php?route=information/information&information_id=17"  data-hover="">蒸蘿蔔糕</a> </li> <li id="55" ><a href="index.php?route=information/information&information_id=21"  data-hover="">蘆筍握壽司</a> </li> <li id="56" ><a href="index.php?route=information/information&information_id=19"  data-hover="">蘿蔔糕海苔捲</a> </li> <li id="57" ><a href="index.php?route=information/information&information_id=18"  data-hover="">蘿蔔糕玉子燒</a> </li> <li id="58" ><a href="index.php?route=information/information&information_id=13"  data-hover="">金沙炒蘿蔔糕</a> </li> <li id="59" ><a href="index.php?route=information/information&information_id=14"  data-hover="">鮪魚握壽司(番茄)</a> </li> </ul> </li> </ul> </div> </div> </div> </nav><!-- #navbar --> </div><!-- .container --> <div class="fluid-container"> <div id="content-top"></div> </div><!-- .fluid-container --> <div id="body-outer-container" class="container"> <div class="container-inner"> <style>
567#login .control-group.success { margin: 0px; }
568#login input { min-width: 100%; width: 100%; font-size: 20px; line-height: 46px; height:46px; padding:6px; }
569#login .center-or-bar { margin-bottom: 26px; display: flex; width: 100%; justify-content: center; align-items: center; text-align: center; }
570#login .center-or-bar:before, #login .center-or-bar:after { content: ''; border-top: 1px solid #CFCFCF; margin: 0 20px 0 0; flex: 1 0 20px; }
571#login .center-or-bar:after { margin: 0 0 0 20px; }
572#login .password-forgotten-recovery, .password-forgotten-recovery:visited { color: #777; }
573.contentset span { padding: 0px; }
574.fb_iframe_widget { display: block; }
575#maincontent .button { font-weight: bold; height: 42px; line-height: 42px; padding: 0px; font-size: 15px; }
576#login a.button-facebook, .button-facebook, .button-facebook:hover{border-color:#29447e #29447e #1a356e;color:#fff;background:#4469b0;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.1), inset 0 1px 0 #8a9cc2;-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.1), inset 0 1px 0 #8a9cc2;box-shadow:0 1px 0 rgba(0, 0, 0, 0.1), inset 0 1px 0 #8a9cc2;text-shadow:0 1px 1px rgba(100,100,100,0.75);}
577#maincontent .button.button-line{border-color:#00B300;color:#FFFFFF;background:#00C300;text-decoration:none;text-shadow:0 1px 1px rgba(100,100,100,0.35);}
578#maincontent .button.button-google{border-color:#ccc;color:#fff;background:#1a73e8;text-decoration:none;text-shadow: 0 1px 1px rgba(100,100,100,0.75);}
579#maincontent .button.btn-social.button-line:hover { background: #00E000; }
580#maincontent .button.btn-social.button-line:active { background: #00B300; }
581#maincontent .button.btn-social.button-google:hover { color:#999; background: #fff; text-shadow: none;}
582#maincontent .button.btn-social.button-google:active { background: #fff; }
583#maincontent .button.btn-social { position: relative; overflow: hidden; }
584#maincontent .button.btn-social>:first-child { position: absolute; left: 0; top: 0; bottom: 0; width: 42px; line-height: 42px; font-size: 1.92em; text-align: center; border-right: 1px solid rgba(0,0,0,.2); }
585#maincontent .button.btn-social>:first-child.fa-spin { border-right:none; }
586i.fa.fa-line{ width:42px; display:block; height:42px; color:white; text-decoration:none; padding-left:36px; }
587i.fa.fa-line:before{ content: ''; background:url('https://cdn.qdm.cloud/static/line/line_88.png'); background-size:cover; position:absolute; width:36px; height:36px; margin-left:-36px; top:2px; }
588#login-loading {position: fixed; display: none; width: 100%; height: 100%; top: 0; left: 0; text-align: center; opacity: 0.8; background-color: #000;z-index: 99; }
589#login-loading-spin { position: absolute; left:50%; top: 50%; z-index: 100; color:#fff; opacity: 0.8;}
590@media only screen and (max-width: 768px), only screen and (max-device-width: 667px) and (min-device-width: 375px) and (orientation: portrait), only screen and (max-device-width: 736px) and (min-device-width: 414px) and (orientation: portrait) {
591.button.button-inverse.button-block { line-height: 40px; line-height: 40px; font-size: 17px; font-weight: 300; font-family: Helvetica, Arial, sans-serif; }
592.button-facebook { height: 48px; line-height: 48px; padding: 0px; font-size: 17px; }
593#login .contentset { margin-top: 2px; }
594.success, .warning, .attention, .information { width: 90%; }
595#login-loading-spin { position: absolute; left:45%; top: 45%; z-index: 100; color:#fff; opacity: 0.8;}
596}
597
598</style> <ol class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"> <a itemprop="item" href="https://www.tworoad.tw/"> <span itemprop="name">首頁</span> <meta itemprop="position" content="1" />
598 </a> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
599		 &gt; 		<a itemprop="item" href="https://www.tworoad.tw/account"> <span itemprop="name">會員</span> <meta itemprop="position" content="2" /> </a> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
600		 &gt; 		<a itemprop="item" href="https://www.tworoad.tw/login"> <span itemprop="name">登入</span> <meta itemprop="position" content="3" /> </a> </li> </ol> <header class="heading"> <h1 class="visible-lg visible-md">會員登入</h1><p>&nbsp;</p> </header> <section id="maincontent"> <div class="mainborder"> <div class="cart-inner" style="padding: 12px;"> <div class="row-fluid"> <div class="col-xs-12 col-md-6 col-md-offset-3 login"> <form action="https://www.tworoad.tw/login" method="post" enctype="multipart/form-data" id="login"> <p class="visible-lg-block">&nbsp;</p> <div class="control-group"> </div> <div class="control-group"> <a data-no-instant href="https://www.tworoad.tw/line/login" class="button button-block button-line btn-social"><i class="fa fa-line" aria-hidden="true"></i>&nbsp;與 LINE 連動登入</a><br/> </div> <center class="center-or-bar"><small>或</small></center> <div class="control-group"> <label for="email" class="control-label"><b>手機號碼 / 或 電子郵件</b></label> <div class="controls"> <input type="text" name="email" id="email" class="input-xlarge" autocomplete="off" /> </div> </div> <div class="control-group"> <label for="password" class="control-label"><b>密碼</b></label> <div class="controls"> <input type="password" name="password" class="input-xlarge" autocomplete="new-password"
601								  autocapitalize="off"
602								  spellcheck="false" /> </div> <p><a class="password-forgotten-recovery" href="https://www.tworoad.tw/account/forgotten">忘記密碼?</a></p> </div> <input type="hidden" name="utm_source" value=""> <input type="hidden" name="utm_medium" value=""> <input type="hidden" name="utm_campaign" value=""> <input type="submit" value="帳密登入" class="button button-inverse button-block" /> </p> <hr/> <p><a class="button button-inverse button-block" href="https://www.tworoad.tw/register">我要註冊新會員&nbsp;&nbsp;<i class="fa fa-chevron-right" aria-hidden="true"></i></a></p> </div> <input type="hidden" name="csrf_token" value="1562f8ddac04fde4b793e5528b620d4bcebfaa997822bd1fd3c83e8ff20efc04" /> </form> 
602<script>
603					// Block repeated logins while one is in flight (plain JS: jQuery loads later)
604					(function () {
605						var form = document.getElementById('login');
606						if (!form) { return; }
607						var submitting = false;
608						var timer = null;
609						var buttons = form.querySelectorAll('input[type=submit], button[type=submit]');
610						function setBusy(busy) {
611							submitting = busy;
612							if (timer) { clearTimeout(timer); timer = null; }
613							for (var i = 0; i < buttons.length; i++) { buttons[i].disabled = busy; }
614						}
615						form.addEventListener('submit', function (e) {
616							if (submitting) { e.preventDefault(); return; }
617							submitting = true;
618							setTimeout(function () {
619								// Another handler cancelled this submit: keep the form usable
620								if (e.defaultPrevented) { submitting = false; return; }
621								setBusy(true);
622								timer = setTimeout(function () { setBusy(false); }, 15000);
623							}, 0);
624						});
625						window.addEventListener('pageshow', function () { setBusy(false); });
626					})();
627					</script>
627 </div> </div> <p>&nbsp;</p> <p>&nbsp;</p> </div> </div> </section><!-- #maincontent --> 
627<script>
628
629	var prevent_dbl_click = 0;
630
631	var login_return_url = "/account";
632	
633	function confirmOptIn() {
634		FB.AppEvents.logEvent('MessengerCheckboxUserConfirmation', null, {
635			'app_id'	:	'162172840650014',
636			'page_id'	:	"306501696892771",
637			'user_ref'	:	'q67b3ef089f8e620261009071702412313'
638		});
639	}
640
641	
642	function init_inline(){
643
644		$('#login input').keydown(function(e) {
645			if (e.keyCode == 13) {
646				// Click the button instead of form.submit() so the in-flight guard sees it
647				e.preventDefault();
648				var button = $('#login :submit').get(0);
649				if (button) { button.click(); }
650			}
651		});
652
653		var u = navigator.userAgent;
654		//Line內瀏覽器
655		if( u.indexOf('Line') > -1 ) {
656			$("#fb-login-button").remove();
657			$("#fb-lineapp-login-button").show();
658		} else {
659			$("#fb-login-button").show();
660			$("#fb-lineapp-login-button").remove();
661		}
662
663	}
664	function facebooLogin(){
665		$(".fa-facebook-official").removeClass("fa-facebook-official").addClass("fa-circle-o-notch fa-spin fa-fw");
666	}
667	</script>
667 </div> <!-- .container-inner --> </div> <!-- .container --> </div> <!-- #content_wrapper --> <input type="hidden" id="ga_utm_source" name="ga_utm_source" value=""> <input type="hidden" id="ga_utm_medium" name="ga_utm_medium" value=""> <input type="hidden" id="ga_utm_campaign" name="ga_utm_campaign" value=""> <footer id="footer" class="clearfix  "> <div class="footer-inner container"> <div id="footer-inner-row" data-count="97" class="row-fluid  clearfix"> <div class="span12 contact pull-right"> <h3>&nbsp;</h3> <p>&nbsp;</p> <p>&nbsp;</p> </div> </div> <!-- .row --> </div> <!-- /.footer-inner --> <div class="footer-bottom container  "> <div id="footer-copyright" class="row-fluid"> <div id="payment-logo-list" class="pl-container"> <div class="pl-row"> </div> </div> <div id="copy"> <p>Copyright ©2026 二路蘿蔔糕</p> <p>
668													穎香國際有限公司																			| 
669																			統一編號&nbsp;90661570												</p> <!--googleoff: index--><span style="display:none;">q67b3ef089f8e6</span><!--googleon: index--> </div> <div id="qdm-copy"><a href='https://www.tworoad.tw/googlebase.xml' title="RSS" target='blank'><i class="fa fa-rss"></i></a><a href='https://www.tworoad.tw/sitemap'>網站地圖</a></div> </div> </div> </footer> <!-- #footer --> 
669<script src="https://cdn.qdm.cloud/assets/js/LAB.min.js"></script>
669 
669<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
669 
669<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-migrate/1.4.1/jquery-migrate.min.js"></script>
669 
669<script type="text/javascript">	
670			
671			$(document).ready(function() {
672				var j = 0;
673				var delay = 3000; 
674				function cycleStickyBarTop(){
675					var jmax = $(".sticky-bar-top .sticky-bar-content").length -1;
676					if(jmax > 0){
677						$(".sticky-bar-top .sticky-bar-content:eq(" + j + ")")
678						.animate({"opacity" : "1","z-index":"9998"} ,400)
679						.animate({"opacity" : "1","z-index":"9998"}, delay)
680						.animate({"opacity" : "0","z-index":"9"}, 400, function(){
681							(j == jmax) ? j=0 : j++;
682							cycleStickyBarTop();
683						});
684					}else{
685						$(".sticky-bar-top .sticky-bar-content:eq(" + j + ")")
686						.animate({"opacity" : "1","z-index":"9998"}, delay)
687					}
688				};
689				cycleStickyBarTop();
690				
691				var i = 0;
692				function cycleStickyBarBottom(){
693					var imax = $(".sticky-bar-bottom .sticky-bar-content").length -1;
694					if(imax > 0){
695						$(".sticky-bar-bottom .sticky-bar-content:eq(" + i + ")")
696						.animate({"opacity" : "1","z-index":"9998"} ,400)
697						.animate({"opacity" : "1","z-index":"9998"}, delay)
698						.animate({"opacity" : "0","z-index":"9"}, 400, function(){
699							(i == imax) ? i=0 : i++;
700							cycleStickyBarBottom();
701						});
702					}else{
703						$(".sticky-bar-bottom .sticky-bar-content:eq(" + i + ")")
704						.animate({"opacity" : "1","z-index":"9998"}, delay)
705					}
706					
707				};
708				cycleStickyBarBottom();
709				
710				var k = 0;
711				function cycleStickyBarTopMobile(){
712					var kmax = $(".mobile-sticky-bar-top .sticky-bar-content").length -1;
713					if(kmax > 0){
714						$(".mobile-sticky-bar-top .sticky-bar-content:eq(" + k + ")")
715						.animate({"opacity" : "1","z-index":"9998"} ,400)
716						.animate({"opacity" : "1","z-index":"9998"}, delay)
717						.animate({"opacity" : "0","z-index":"9"}, 400, function(){
718							(k == kmax) ? k=0 : k++;
719							cycleStickyBarTopMobile();
720						});
721					}else{
722						$(".mobile-sticky-bar-top .sticky-bar-content:eq(" + k + ")")
723						.animate({"opacity" : "1","z-index":"9998"}, delay)
724					}
725				};
726				cycleStickyBarTopMobile();
727				
728				//COUNTDOWN TIMER
729				$(".sticky-bar-countdown").each(function(){
730					
731					var sticky_bar_date = $(this).attr("data-countdown-date").replace(/-/g,'/');
732					var sticky_bar_countdown_id = $(this).attr("id");
733					var countDownDate = new Date(sticky_bar_date).getTime();
734
735					var x = setInterval(function() {
736					
737						var now = new Date().getTime();
738						
739						var distance = countDownDate - now;
740						
741						var days = Math.floor(distance / (1000 * 60 * 60 * 24));
742						var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
743						var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
744						var seconds = Math.floor((distance % (1000 * 60)) / 1000);
745						
746						if(hours<10){
747							var hours1 = "0"+hours;
748						}else{
749							var hours1 = hours;
750						}
751						if(minutes<10){
752							var minutes1 = "0"+minutes;
753						}else{
754							var minutes1 = minutes;
755						}
756						if(seconds<10){
757							var seconds1 = "0"+seconds;
758						}else{
759							var seconds1 = seconds;
760						}
761						
762						if( $("#" + sticky_bar_countdown_id).length ) {
763							document.getElementById(sticky_bar_countdown_id).innerHTML = " "+days+ " DAY " + hours1 + ": "
764						+ minutes1 + ": " + seconds1 + " ";
765						}
766						
767						if (distance < 0) {
768							clearInterval(x);
769							//document.getElementById(sticky_bar_countdown_id).innerHTML = "-";
770							$("#"+sticky_bar_countdown_id).remove();
771						}
772					}, 1000);
773					
774				 });
775				
776			});
777			 
778			jQuery.ajaxPrefilter( function( s ) {
779				if ( s.crossDomain ) {
780					s.contents.script = false;
781				}
782			});
783			
784			var loc = window.location.href, index = loc.indexOf('#');
785			if (index > 0) {
786				try {
787					var urlHash = loc.split("#")[1];
788					if( urlHash ) {
789						if( $('#' + urlHash).length ) {
790							$('html,body').animate({
791								scrollTop: $('#' + urlHash).offset().top
792							}, 1200);
793						} else {
794							window.location = loc.substring(0, index) + "&" + loc.substring(index+1);
795						}
796					}
797				} catch(err) { }
798			}
799			
800			var readyInitPage = 1;
801			var doAdjust = true;
802			var doAdjustCounter = 0;
803			var jsLoadTimeout = null;
804			var previousWidth = 0;
805			var maxHeight = 0;
806			var flipper_random_status = 0;
807			var float_banner_count = 0;
808			var lazy = 1;
809			var transInitial = -280;
810			var mDistance = 0;
811					
812			if (window!= top) top.location.href = location.href;
813			
814			//20210713 add menu url target
815			 $(".pushy-submenu button span").click(function(){
816				if($(this).attr("target")){
817					$(this).removeClass("pushy-submenu-parent");
818					if($(this).parents("li").hasClass("pushy-submenu-open")){
819						window.open($(this).data("url"),"_blank");
820					}
821				}
822			});
823
824			$(".pushy-menu-storename span").click(function(){
825				$("#myBody").removeClass("pushy-open-left");
826			});
827			
828			function getScript(url,success){
829			var script = document.createElement('script');
830			script.type = 'text/javascript';
831			script.src = url;
832			var head=document.getElementsByTagName('head')[0], done=false;
833			script.onload=script.onreadystatechange = function(){
834			  if ( !done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete') ) {
835				done=true;
836				success();
837				script.onload = script.onreadystatechange = null;
838				head.removeChild(script);
839			  }
840			};
841			head.appendChild(script);
842			}
843						
844			function getParams(a){var b=document.getElementsByTagName("script");for(var i=0;i<b.length;i++){if(b[i].src.indexOf("/"+a)>-1){var c=b[i].src.split("?").pop().split("&");var p={};for(var j=0;j<c.length;j++){var d=c[j].split("=");p[d[0]]=d[1]}return p}}return{}}
845			
846			function adjustBoxHeights() {
847				maxHeight1 = 270;
848				maxHeight2 = 270;
849				maxHeight3 = 270;
850				maxHeight4 = 270;
851				maxHeight5 = 270;
852				
853				$('.content-top .product-box > div').each(function(){
854					$(this).height('auto');
855					if (maxHeight2 < $(this).height()) { maxHeight2 = $(this).height(); }
856				});
857				$('.content-top .product-box > div').each(function(){
858					if( maxHeight2 ) {
859						$(this).height(maxHeight2);
860					}
861				});
862				
863				$('.content-bottom .product-box > div').each(function(){
864					$(this).height('auto');
865					if (maxHeight3 < $(this).height()) { maxHeight3 = $(this).height(); }
866				});
867				$('.content-bottom .product-box > div').each(function(){
868					if( maxHeight3 ) {
869						$(this).height(maxHeight3);
870					}
871				});
872				
873				$('.product-grid > div').each(function(){
874					var img_src = $(this).find(".image img[src]").attr("src");
875					try {
876						var img_src_ext = img_src.split('.').pop().toLowerCase();
877					} catch(err) {
878						img_src_ext = "";
879					}
880					$(this).height('auto');
881					if( $( "#myBody" ).hasClass("product-category") ){
882						img_src_ext = "";
883					}
884					if( img_src_ext != "gif" ) {
885						if (maxHeight1 < $(this).height()) { maxHeight1 = $(this).height(); }
886					} else {
887						$(this).addClass("gif-tag");
888					}
889				});
890				var img_gif_height = 0;
891				$('.product-grid > div').each(function(){
892					var img_src = $(this).find(".image img[src]").attr("src");
893					try {
894						var img_src_ext = img_src.split('.').pop().toLowerCase();
895					} catch(err) {
896						img_src_ext = "";
897					}
898					if( maxHeight1 ){
899						$(this).height(maxHeight1);
900						if( img_src_ext != "gif" ) {
901							img_gif_height = $(this).find(".image img").height();
902						}
903					}
904				});
905				$('.product-grid > div.gif-tag').attr("style","");
906				if( img_gif_height ) {
907					$('.product-grid > div.gif-tag').find(".image img").attr("style","height:" + img_gif_height + "px;width:auto;");
908				}
909				
910				$('.box-content').each(function(index,elmain){
911					$(elmain).find('.product-box').each(function(index,el){
912						maxHeight1 = 0;
913						$(el).find('.grid-box').each(function(index,el2){
914							$(el2).height('auto');
915						});
916						$(el).find('.grid-box .inner').each(function(index,el2){
917							if (maxHeight1 < $(el2).height()) { maxHeight1 = $(el2).height(); }
918						});
919						maxHeight1 = maxHeight1 + 18;
920						$(el).find('.grid-box').each(function(index,el2){
921							if( maxHeight1 ) {
922								$(el2).height(maxHeight1);
923							}
924						});
925					});
926				});
927				
928				$('#related-products').each(function(index,elmain){
929					$(elmain).imagesLoaded(function(){
930						$(this).find('.product-box').each(function(index,el){
931							maxHeight1 = 0;
932							$(el).find('.grid-box').each(function(index,el2){
933								$(el2).height('auto');
934							});
935							$(el).find('.grid-box .inner').each(function(index,el2){
936								if (maxHeight1 < $(el2).height()) { maxHeight1 = $(el2).height(); }
937							});
938							maxHeight1 = maxHeight1 + 36;
939							if( maxHeight1 < 220 ) maxHeight1 = 220;
940							if( !is.mobile() ) {
941								if( maxHeight1 < 340 ) maxHeight1 = 340;
942							}
943							$(el).find('.grid-box').each(function(index,el2){
944								if( maxHeight1 ) {
945									$(el2).height(maxHeight1);
946								}
947							});
948						});
949					});
950				});
951				
952				$('.content-bottom #related-products').each(function(index,elmain){
953					var contentset_height = parseInt($('.content-bottom #related-products .contentset').height());
954					if( contentset_height ) contentset_height = contentset_height + 70;
955					$(elmain).imagesLoaded(function(){
956						$(this).find('.product-box').each(function(index,el){
957							maxHeight1 = 0;
958							$(el).find('.grid-box').each(function(index,el2){
959								$(el2).height('auto');
960							});
961							$(el).find('.grid-box .inner').each(function(index,el2){
962								if (maxHeight1 < $(el2).height()) { maxHeight1 = $(el2).height(); }
963							});
964							maxHeight1 = maxHeight1 + 36 + contentset_height;
965							if( maxHeight1 < 220 ) maxHeight1 = 220;
966							if( !is.mobile() ) {
967								if( maxHeight1 < 340 ) maxHeight1 = 340;
968							}
969							$(el).find('.grid-box').each(function(index,el2){
970								if( maxHeight1 ) {
971									$(el2).height(maxHeight1);
972								}
973							});
974						});
975					});
976				});
977				
978				$('.any-products').each(function(index,el){
979					
980					if(is.mobile()){
981						$(el).find(".grid-box").attr("style","");
982					}
983					
984					maxHeight5 = 0;
985					$(el).find('.any-box > div').each(function(index,el2){
986						$(el2).height('auto');
987						if (maxHeight5 < $(el2).height()) { maxHeight5 = $(el2).height(); }
988					});
989					$(el).find('.any-box > div').each(function(index,el2){
990						if( maxHeight5 ) {
991							$(el2).height(maxHeight5);
992						}
993					});
994					$(el).find('.grid-box > .inner').each(function(index,el2){
995						$(el2).css("display", "block");
996					});
997				});
998			}
999			
1000			var supportsNatural = ( "naturalWidth" in (new Image()) );
1001			
1002			function initDeferImages() {
1003				[].forEach.call(document.querySelectorAll('img[data-src]'), function(img) {
1004					img.setAttribute('src', img.getAttribute('data-src'));
1005					img.onload = function() {
1006						this.removeAttribute('data-src');
1007						if (this.style.opacity !== undefined) {
1008							this.style.opacity = 1;
1009						}
1010						var naturalWidth = supportsNatural ? this.naturalWidth : $(this).width();
1011						if( naturalWidth == 0 ) {
1012							this.src += '?timestamp=' + new Date().getTime();
1013						}
1014					};
1015				});
1016				$(".grid-box img,.product-row img").each(function(){
1017					var _this = $(this);
1018					_this.imagesLoaded(function(){
1019						_this.animate({opacity: 1.0}, 100);
1020						_this.closest('.grid-box').find('.onsale').removeClass("hidden");
1021						_this.closest('.grid-box').find('.name').removeClass("hidden");
1022						_this.closest('.grid-box').find('.price').removeClass("hidden");
1023						_this.closest('.grid-box').find('.label-important').removeClass("hidden");
1024						_this.closest('.grid-box').find('.load-thumb-conver').remove();
1025						_this.closest('.product-row').find('.load-thumb-conver').remove();
1026						try { 
1027							if (typeof _this.data('flipper') !== 'undefined') {
1028								_this.flipper(); 
1029							}
1030						} catch(err) { }
1031						_this.height('auto');
1032						if( (lazy == $(".grid-box img").length) ) { adjustBoxHeights(); }
1033						lazy++;
1034					});
1035				});
1036			}
1037			
1038			function updateCartProductCount() {
1039				$.get("index.php?route=module/cart/GetProductTotal", function(data) {
1040					$("#shopping-cart-list .badge").html(data);
1041					if(data>0){
1042						$("#shopping-cart-list .badge").removeClass("hidden");
1043						$("#shopping-cart-list .badge").removeClass("animated");
1044						$("#shopping-cart-list .badge").addClass("animated bounce");
1045					} else {
1046						$("#shopping-cart-list .badge").addClass("hidden");
1047					}
1048				});
1049			}
1050			
1051			function updateQuantityByProductKey(key, quantity) {
1052				quantity = typeof(quantity) != 'undefined' ? quantity : 1;
1053				$.ajax({
1054					url: 'index.php?route=checkout/cart/updateProductQuantity',
1055					type: 'post',
1056					data: { 'quantity':quantity, 'key': key },
1057					dataType: 'json',
1058					success: function(json) {
1059						$.get( "index.php?route=module/cart/list", function( data ) {
1060							$(".slidePanel .slidePanel-content").html(data);
1061							updateCartProductCount();
1062						});
1063					}
1064				});
1065			}
1066			
1067			function removeProductFromSideCart(key, idx) {
1068				//var newkey = encodeURIComponent(key);
1069				var newkey = key;
1070				$.get("index.php?route=module/cart&remove=" + newkey, function(data) {
1071					$.get( "index.php?route=module/cart/list", function( data ) {
1072						$(".slidePanel .slidePanel-content").html(data);
1073						updateCartProductCount();
1074					});
1075				});
1076				$("#producr-list-" + idx).fadeOut(1200, function() { $(this).remove(); });
1077				return false;
1078			}
1079			
1080			function openSideCart(ta_product_id){
1081				var slidePanelVisible = $(".slidePanel").hasClass("slidePanel-show");
1082				if( slidePanelVisible ) {
1083					$("#content-wrapper").off("click");
1084					$.slidePanel.hide();
1085				} else {
1086					updateCartProductCount();
1087										$.slidePanel.show({
1088						url: 'index.php?route=module/cart/list'
1089					}, {
1090						direction: "left",
1091						duration: '500',
1092						mouseDrag: false,
1093						touchDrag: false,
1094						pointerDrag: false,
1095						loading: {
1096							template: function(options) {
1097								return '<div class="' + options.classes.loading + '"><div class="spinner"><i class="fa fa-circle-o-notch fa-spin fa-3x fa-fw"></i><span class="sr-only">Loading...</span></div></div>';
1098							}
1099						}
1100					});
1101					$("#content-wrapper").on('click', function(event) {
1102						$("#content-wrapper").off("click");
1103						$.slidePanel.hide();
1104						event.preventDefault();
1105						event.stopPropagation();
1106						
1107						var t_url = location.href; 
1108						var c_url = "https://www.tworoad.tw/cart";
1109						
1110						if(t_url == c_url){
1111							location.reload();
1112						}
1113						
1114					});
1115					$(".fancybox-product").on('click', function(event) {
1116						$.slidePanel.hide();
1117						event.preventDefault();
1118						event.stopPropagation();
1119						
1120						var t_url = location.href; 
1121						var c_url = "https://www.tworoad.tw/cart";
1122						
1123						if(t_url == c_url){
1124							location.reload();
1125						}
1126						
1127					});
1128									}
1129			}
1130			
1131			function gaTrackAddToCart(page, product_ids) {
1132				
1133				product_ids.forEach(function(item){
1134					
1135					try {
1136					
1137						// UA
1138						dataLayer.push({
1139						  'event': 'addToCart',
1140						  'ecommerce': {
1141							'currencyCode': '',
1142							'add': {
1143							  'products': [{
1144								'name': item.p_name,
1145								'id': item.p_id,
1146								'price': item.p_prices,
1147								'quantity': item.p_qty
1148							   }]
1149							}
1150						  }
1151						});
1152						
1153						// GA4
1154						dataLayer.push({
1155						  'event': 'add_to_cart',
1156						  'ecommerce': {
1157							'items': [{
1158							  'item_name': item.p_name,
1159							  'item_id': item.p_id,
1160							  'price': item.p_prices,
1161							  'quantity': item.p_qty
1162							}]
1163						  }
1164						});
1165						
1166												global_quuid = QUUID();
1167						var item_p_prices = parseFloat(item.p_prices);
1168						item_p_prices = Number(item_p_prices);
1169						if( isNaN(item_p_prices) ) {
1170							item_p_prices = 0;
1171						}
1172						fbq('track', 'AddToCart', {
1173						  content_name: item.p_name,
1174						  						  value: item_p_prices,
1175						  currency: 'TWD'
1176						}, {eventID: global_quuid + "ccc"});
1177
1178						// fb-capi-coverage Step 2: 用當前 item 覆寫 gecommProductToCart,
1179						// 確保 CAPI AddToCart 送的是「本次迭代商品」而非迴圈結束殘留的最後一品。
1180						gecommProductToCart.product_id = item.p_id;
1181						gecommProductToCart.quantity = item.p_qty;
1182						gecommProductToCart.product_name = item.p_name;
1183						gecommProductToCart.price = item.p_prices;
1184
1185						
1186try { setCookie("qdmfbevent_id", global_quuid + "ccc", 5); } catch (error) { }
1187
1188(function() {
1189	// CAPI AJAX must survive navigation (cart/add → instant_checkout redirect 1s window).
1190	// Prefer navigator.sendBeacon (designed for unload-time delivery); fallback to fetch keepalive.
1191	var url = "https://www.tworoad.tw/index.php?route=pixcel/facebook/capi_add_to_cart&quuid=" + global_quuid + "ccc";
1192	var payload = JSON.stringify(gecommProductToCart);
1193	var sent = false;
1194
1195	if (typeof navigator !== "undefined" && typeof navigator.sendBeacon === "function") {
1196		try {
1197			var blob = new Blob([payload], { type: "text/plain" });
1198			sent = navigator.sendBeacon(url, blob);
1199		} catch (e) { sent = false; }
1200	}
1201
1202	if (!sent && typeof fetch === "function") {
1203		try {
1204			fetch(url, {
1205				method: "POST",
1206				headers: { "Content-Type": "text/plain" },
1207				body: payload,
1208				keepalive: true,
1209				credentials: "include"
1210			}).catch(function() {});
1211		} catch (e) {}
1212	}
1213})();
1214												
1215										
1216					} catch (e) { }
1217					
1218				});
1219
1220			}
1221
1222			// Defers instant-add until the async-loaded $.fancybox exists, so early
1223			// clicks no longer hit an undefined open() and feel dead. One poller at a
1224			// time, latest click wins - repeated clicks don't stack duplicate opens.
1225			// Keep in sync with common/footer_cart.tpl (same guard for '/cart' URLs).
1226			var _fancyboxPendingCb = null;
1227			var _fancyboxPolling = false;
1228			function whenFancyboxReady(callback){
1229				if (typeof $.fancybox !== 'undefined') { callback(); return; }
1230				_fancyboxPendingCb = callback;   // latest click wins if several arrive while waiting
1231				if (_fancyboxPolling) { return; }
1232				_fancyboxPolling = true;
1233				(function poll(attempt){
1234					if (typeof $.fancybox !== 'undefined') {
1235						_fancyboxPolling = false;
1236						var cb = _fancyboxPendingCb;
1237						_fancyboxPendingCb = null;
1238						if (cb) { cb(); }
1239						return;
1240					}
1241					if (attempt < 50) { setTimeout(function(){ poll(attempt + 1); }, 100); return; }
1242					_fancyboxPolling = false;
1243					_fancyboxPendingCb = null;
1244					if (window.console && console.warn) { console.warn('fancybox not ready after 5s; instant add aborted'); }
1245				})(0);
1246			}
1247
1248			function InstantAddToCart(product_id, quantity, promotion_id, free_present_id){
1249				
1250				if( product_id && quantity ) {
1251					
1252					gecommProductToCart.product_id = product_id;
1253					gecommProductToCart.quantity = quantity;
1254					
1255					try {
1256						
1257						var p_name = $("[data-producttlid='"+product_id+"'] .name [itemprop='name']").html();
1258						var p_prices = $("[data-producttlid='"+product_id+"'] .price[data-price]").data("price");
1259						gecommProductToCart.product_name = p_name;
1260						
1261						gecommProductToCart.price = p_prices;
1262						
1263						// UA
1264						dataLayer.push({
1265						  'event': 'addToCart',
1266						  'ecommerce': {
1267							'currencyCode': '',
1268							'add': {
1269							  'products': [{
1270								'name': p_name,
1271								'id': product_id,
1272								'price': p_prices,
1273								'quantity': quantity
1274							   }]
1275							}
1276						  }
1277						});
1278						
1279						// GA4
1280						dataLayer.push({
1281						  'event': 'add_to_cart',
1282						  'ecommerce': {
1283							'items': [{
1284							  'item_name': p_name,
1285							  'item_id': product_id,
1286							  'price': p_prices,
1287							  'quantity': quantity
1288							}]
1289						  }
1290						});
1291						
1292												 var product_category = "";
1293						 $.getJSON( "index.php?route=common/footer/getProductCategory&product_id=" + product_id, function( data ) {
1294							 
1295							 if(data) product_category = data;
1296							 
1297							 if(product_category != ""){
1298								   gtag('event', 'add_to_cart', {
1299									  'value': p_prices, 
1300									  'items': [{
1301									  'id'    : product_id,
1302									  'item_id'   : product_id,
1303									  'item_name'  : p_name,
1304									  'price'   : p_prices,
1305									  'quantity'  : quantity,
1306									  'google_business_vertical': 'retail',
1307									  'item_category': product_category
1308									  }]
1309								   });
1310							   }else{
1311								   gtag('event', 'add_to_cart', {
1312									  'value': p_prices, 
1313									  'items': [{
1314									  'id'    : product_id,
1315									  'item_id'   : product_id,
1316									  'item_name'  : p_name,
1317									  'price'   : p_prices,
1318									  'quantity'  : quantity,
1319									  'google_business_vertical': 'retail'
1320									  }]
1321								   });
1322							   }
1323							 
1324						 });
1325						 
1326												
1327												global_quuid = QUUID();
1328						var item_p_prices = parseFloat(p_prices);
1329						item_p_prices = Number(item_p_prices);
1330						if( isNaN(item_p_prices) ) {
1331							item_p_prices = 0;
1332						}
1333						fbq('track', 'AddToCart', {
1334						  content_name: p_name,
1335						  						  value: item_p_prices,
1336						  currency: 'TWD'
1337						}, {eventID: global_quuid + "ccc"});
1338
1339						
1340try { setCookie("qdmfbevent_id", global_quuid + "ccc", 5); } catch (error) { }
1341
1342(function() {
1343	// CAPI AJAX must survive navigation (cart/add → instant_checkout redirect 1s window).
1344	// Prefer navigator.sendBeacon (designed for unload-time delivery); fallback to fetch keepalive.
1345	var url = "https://www.tworoad.tw/index.php?route=pixcel/facebook/capi_add_to_cart&quuid=" + global_quuid + "ccc";
1346	var payload = JSON.stringify(gecommProductToCart);
1347	var sent = false;
1348
1349	if (typeof navigator !== "undefined" && typeof navigator.sendBeacon === "function") {
1350		try {
1351			var blob = new Blob([payload], { type: "text/plain" });
1352			sent = navigator.sendBeacon(url, blob);
1353		} catch (e) { sent = false; }
1354	}
1355
1356	if (!sent && typeof fetch === "function") {
1357		try {
1358			fetch(url, {
1359				method: "POST",
1360				headers: { "Content-Type": "text/plain" },
1361				body: payload,
1362				keepalive: true,
1363				credentials: "include"
1364			}).catch(function() {});
1365		} catch (e) {}
1366	}
1367})();
1368												
1369												
1370												
1371												
1372						
1373_lt('send', 'cv', {
1374type: 'dpa_cart',
1375itemIds: [gecommProductToCart.product_id.toString()],
1376price: gecommProductToCart.price.toString(), 
1377currency: 'TWD', 
1378quantity: gecommProductToCart.quantity.toString()
1379},
1380{dpa:true},
1381['ca1644dc-2795-476b-9ffa-e1550d80f920&#039;']);
1382
1383_lt('send', 'cv', {
1384 type: 'AddToCart'
1385},['ca1644dc-2795-476b-9ffa-e1550d80f920&#039;']);
1386
1387						
1388						
1389						
1390					} catch (e) { }
1391					
1392				}
1393				
1394				$('[data-toggle="tooltip"], .tooltip').tooltip("hide");
1395				
1396				promotion_id = typeof(promotion_id) != 'undefined' ? promotion_id : -1;
1397				free_present_id = typeof(free_present_id) != 'undefined' ? free_present_id : -1;
1398				
1399				if(free_present_id != "-1"){
1400					quantity = $('input[name="quantity"]').val();
1401					quantity = typeof(quantity) != 'undefined' ? quantity : 1;
1402				}
1403				
1404				var price = $('#price-price-block .price-normal').attr('data-content');
1405		
1406				if(typeof(price) === 'undefined') price = $('#price-price-block .price-new').attr('data-content');
1407				
1408				price = typeof(price) != 'undefined' ? price : 0;
1409				
1410				var instantCartSrc = 'https://www.tworoad.tw/index.php?route=product/instant_add&product_id=' + product_id + '&promotion_id=' + promotion_id + '&quantity=' + quantity +'&price=' + price + '&free_present_id=' + free_present_id;
1411
1412				whenFancyboxReady(function(){
1413					try {
1414						$.fancybox.open({
1415							src  : instantCartSrc,
1416							type : 'iframe',
1417							opts : {
1418								openEffect 			: 'none',
1419								closeEffect 		: 'none',
1420								closeClickOutside 	: true,
1421								iframe : { css : { "max-width" : '332px', "width:": '100%' } },
1422								beforeLoad: function() {
1423									$(".fancybox-container").css("zIndex", 999999993);
1424								}
1425							}
1426						});
1427					} catch (e) { }
1428				});
1429			}
1430			
1431			function InstantAddToCart1(product_id, quantity, key_id, type, position){
1432				
1433				product_id = (typeof product_id !== 'undefined') ?  product_id : 0;
1434				quantity = (typeof quantity !== 'undefined') ?  quantity : 1;
1435				key_id = (typeof key_id !== 'undefined') ?  key_id : "-1";
1436				type = (typeof type !== 'undefined') ?  type : "";
1437				position = (typeof position !== 'undefined') ?  position : "";
1438				
1439				if( product_id && quantity ) {
1440					
1441					gecommProductToCart.product_id = product_id;
1442					gecommProductToCart.quantity = quantity;
1443					
1444					try {
1445						
1446						var p_name = $("[data-producttlid='"+product_id+"'] .name [itemprop='name']").html();
1447						var p_prices = $("[data-producttlid='"+product_id+"'] .price[data-price]").data("price");
1448						gecommProductToCart.product_name = p_name;
1449
1450						gecommProductToCart.price = p_prices;
1451						
1452						// UA
1453						dataLayer.push({
1454						  'event': 'addToCart',
1455						  'ecommerce': {
1456							'currencyCode': '',
1457							'add': {
1458							  'products': [{
1459								'name': p_name,
1460								'id': product_id,
1461								'price': p_prices,
1462								'quantity': quantity
1463							   }]
1464							}
1465						  }
1466						});
1467						
1468						// GA4
1469						dataLayer.push({
1470						  'event': 'add_to_cart',
1471						  'ecommerce': {
1472							'items': [{
1473							  'item_name': p_name,
1474							  'item_id': product_id,
1475							  'price': p_prices,
1476							  'quantity': quantity
1477							}]
1478						  }
1479						});
1480						
1481												global_quuid = QUUID();
1482						var item_p_prices = parseFloat(p_prices);
1483						item_p_prices = Number(item_p_prices);
1484						if( isNaN(item_p_prices) ) {
1485							item_p_prices = 0;
1486						}
1487						fbq('track', 'AddToCart', {
1488						  content_name: p_name,
1489						  						  value: item_p_prices,
1490						  currency: 'TWD'
1491						}, {eventID: global_quuid + "ccc"});
1492
1493						
1494try { setCookie("qdmfbevent_id", global_quuid + "ccc", 5); } catch (error) { }
1495
1496(function() {
1497	// CAPI AJAX must survive navigation (cart/add → instant_checkout redirect 1s window).
1498	// Prefer navigator.sendBeacon (designed for unload-time delivery); fallback to fetch keepalive.
1499	var url = "https://www.tworoad.tw/index.php?route=pixcel/facebook/capi_add_to_cart&quuid=" + global_quuid + "ccc";
1500	var payload = JSON.stringify(gecommProductToCart);
1501	var sent = false;
1502
1503	if (typeof navigator !== "undefined" && typeof navigator.sendBeacon === "function") {
1504		try {
1505			var blob = new Blob([payload], { type: "text/plain" });
1506			sent = navigator.sendBeacon(url, blob);
1507		} catch (e) { sent = false; }
1508	}
1509
1510	if (!sent && typeof fetch === "function") {
1511		try {
1512			fetch(url, {
1513				method: "POST",
1514				headers: { "Content-Type": "text/plain" },
1515				body: payload,
1516				keepalive: true,
1517				credentials: "include"
1518			}).catch(function() {});
1519		} catch (e) {}
1520	}
1521})();
1522												
1523												
1524												
1525						
1526_lt('send', 'cv', {
1527type: 'dpa_cart',
1528itemIds: [gecommProductToCart.product_id.toString()],
1529price: gecommProductToCart.price.toString(), 
1530currency: 'TWD', 
1531quantity: gecommProductToCart.quantity.toString()
1532},
1533{dpa:true},
1534['ca1644dc-2795-476b-9ffa-e1550d80f920&#039;']);
1535
1536_lt('send', 'cv', {
1537 type: 'AddToCart'
1538},['ca1644dc-2795-476b-9ffa-e1550d80f920&#039;']);
1539
1540						
1541												
1542												
1543					} catch (e) { }
1544					
1545				}
1546				
1547				$('[data-toggle="tooltip"], .tooltip').tooltip("hide");
1548				
1549				if(type == "promotion"){
1550					var promotion_id = typeof(key_id) != 'undefined' ? key_id : -1;
1551					var send_value = '&promotion_id=' + promotion_id ;
1552				}
1553				
1554				if(type == "present"){
1555					var free_present_id = typeof(key_id) != 'undefined' ? key_id : -1;
1556					
1557					//if(free_present_id > 0){
1558						quantity = $('input[name="quantity"]').val();
1559						quantity = typeof(quantity) != 'undefined' ? quantity : 1;
1560					//}
1561					
1562					var send_value = '&free_present_id=' + free_present_id +'&position=' + position;
1563				}
1564				
1565				if(type == "buytogether"){
1566					var buy_together_id = typeof(key_id) != 'undefined' ? key_id : -1;
1567					
1568					quantity = $('input[name="quantity"]').val();
1569					quantity = typeof(quantity) != 'undefined' ? quantity : 1;
1570					
1571					var send_value = '&buy_together_id=' + buy_together_id +'&position=' + position;
1572				}
1573				
1574				var price = $('#price-price-block .price-normal').attr('data-content');
1575		
1576				if(typeof(price) === 'undefined') price = $('#price-price-block .price-new').attr('data-content');
1577				
1578				price = typeof(price) != 'undefined' ? price : 0;
1579				
1580				
1581				var instantCart1Src = 'index.php?route=product/instant_add&product_id=' + product_id + '&quantity=' + quantity +'&price=' + price +send_value ;
1582
1583				whenFancyboxReady(function(){
1584					try {
1585						$.fancybox.open({
1586							src  : instantCart1Src,
1587							type : 'iframe',
1588							opts : {
1589								closeClickOutside : true,
1590								iframe : { css : { width : '320px' } },
1591								beforeLoad: function() {
1592									$(".fancybox-container").css("zIndex", 999999993);
1593								}
1594							}
1595						});
1596					} catch (e) { }
1597				});
1598			}
1599			
1600			// Debounced mini-cart reload: every module/cart hit rewrites server-side
1601			// cart state, so a burst of reloads can undo a just-added product.
1602			// Keep in sync with common/footer_cart.tpl -- only one footer renders per page
1603			// (common/footer.php picks a single template), so the two copies never collide.
1604			var miniCartReloadTimer = null;
1605			function reloadMiniCart(immediate){
1606				// One shared timer for every caller; immediate only shortens the wait.
1607				// Bypassing it made add-to-cart fire two overlapping module/cart requests
1608				// (closePopFancybox() and TriggerMyCartList() each trigger mouseover).
1609				// Rescheduling is not a lock, so this is "almost always one", not a guarantee.
1610				clearTimeout(miniCartReloadTimer);
1611				miniCartReloadTimer = setTimeout(loadMiniCart, immediate ? 0 : 300);
1612			}
1613
1614			function loadMiniCart(){
1615				$("#cart").load("index.php?route=module/cart #cart > *", function(){
1616					try { refreshMiniCartScrollBar(); } catch (e) { }
1617				});
1618			}
1619
1620			function closePopFancybox(){
1621				try {
1622					$.fancybox.close();
1623					$.fancybox.destroy();
1624				} catch (e) { }
1625				if( is.desktop() ) {
1626					setTimeout(function(){
1627						$("#cart > .heading a").trigger('mouseover');	
1628						setTimeout(function(){ refreshMiniCartScrollBar(); }, 300);
1629					}, 500);
1630				}
1631			}
1632			
1633			function LastPresentsOption(html,key,qty){
1634				$("#lg_option_"+key).prepend(html);
1635				$('.last_free_presents').trigger('change');
1636				$('.free_present_qty').trigger('change');
1637			}
1638			
1639			function TriggerMyCartList(){
1640				if( is.not.desktop() ){
1641					updateCartProductCount();
1642					setTimeout(function(){
1643						$("#shopping-cart-list .badge").removeClass("animated");
1644						$("#shopping-cart-list .badge").addClass("animated");
1645						$("#shopping-cart-list .badge").addClass("bounce");
1646					}, 800);
1647				} else {
1648					setTimeout(function(){
1649						$("#cart > .heading a").trigger('mouseover');	
1650						setTimeout(function(){ refreshMiniCartScrollBar(); }, 300);
1651					}, 500);
1652				}
1653			}
1654			
1655			function removeCartByProductID(product_id) {
1656				if( is.existy(product_id) ) {
1657				$.ajax({
1658					url: 'index.php?route=module/cart&remove=' + product_id + "%3Anull%3A-1%3A0",
1659					type: 'post',
1660					dataType: 'json',
1661					success: function(json) {
1662						TriggerMyCartList();
1663					}
1664				});
1665				}
1666			}
1667			
1668			function updateQuantityByProductID(product_id, quantity) {
1669				quantity = typeof(quantity) != 'undefined' ? quantity : 1;
1670				$.ajax({
1671					url: 'index.php?route=checkout/cart/updateProductQuantity',
1672					type: 'post',
1673					data: { 'quantity':quantity, 'key': product_id+'%3Anull%3A-1%3A0' },
1674					dataType: 'json',
1675					success: function(json) {
1676						TriggerMyCartList();
1677					}
1678				});
1679			}
1680			
1681			
1682			function bulk_add_to_cart() {
1683				$("select.bulk-add-quantity").change(function() {
1684					var value = $("option:selected", this).val();
1685					var select_idx 	= $(this).data("idx");
1686					var product_id 	= $(this).data("productid");
1687					var prevval 	= $(this).data("prevval");
1688					
1689					if( value == 0 ) { 
1690						$(this).next(".bulk-add-quantity").addClass("no-cart"); 
1691						if(prevval!=0){
1692							removeCartByProductID(product_id);
1693						}
1694					} else { 
1695						$(this).next(".bulk-add-quantity").removeClass("no-cart"); 
1696						
1697						if( value == 999 ) {
1698							InstantAddToCart(product_id, 999); 
1699							$(this).next(".bulk-add-quantity").find(".current").text("+ 9");
1700						} else {
1701							if(prevval==0){
1702								// 第一次加入
1703								InstantAddToCart(product_id, value); 
1704							} else {
1705								// 更新數量
1706								updateQuantityByProductID(product_id, value); 
1707							}
1708						}
1709					}
1710					$(this).data("prevval", value); 
1711					$(this).attr("data-prevval", value); 
1712				});
1713			}
1714			
1715			function downloadJSAtOnload() {
1716				
1717				$("#myBody").removeAttr('style');
1718				
1719				if( is.not.desktop() ) {
1720					$('.any-products').each(function(index,el){
1721						$(el).find('.grid-box').each(function(index,el2){
1722							$(el2).attr('style','');
1723						});
1724					});
1725				}
1726				
1727				try {
1728				getScript("https://cdnjs.cloudflare.com/ajax/libs/izitoast/1.4.0/js/iziToast.min.js",function(){ });
1729				} catch(e) { }
1730				
1731								
1732				var queue = $LAB.queueScript("https://cdn.qdm.cloud/assets/js/core.240901.compressed.js");
1733				queue.queueWait(function(){
1734
1735					// core.js reloads module/cart on EVERY mini-cart hover, unthrottled (10
1736					// requests in 5s observed). Rebind to the debounced reload, keeping
1737					// hover-to-expand behaviour. The mouseleave rebind is like-for-like: in
1738					// core.240901 (the bundle queued above) its body is only
1739					// removeClass("active"). Re-check if that bundle is rebuilt.
1740					// Keep in sync with common/footer_cart.tpl -- it queues a different
1741					// bundle, so verify that claim against ITS bundle.
1742					//
1743					// The ready() wrapper is load-bearing: core.js binds inside its own
1744					// ready() callback, registered while this queued script runs, and jQuery
1745					// fires ready callbacks in registration order -- so off() is guaranteed to
1746					// run after that bind. Calling off() directly here only works if DOM ready
1747					// happens to have fired already; otherwise it removes nothing and BOTH
1748					// handlers stay attached.
1749					$(document).ready(function(){
1750						try {
1751							$(document).off("mouseover", "#cart > .heading");
1752							$(document).on("mouseover", "#cart > .heading", function(e){
1753								$("#cart").addClass("active");
1754								// Programmatic refreshes get here via .trigger('mouseover') (add-to-cart /
1755								// fancybox close / login). Debouncing them delayed the reload past each
1756								// call site's paired setTimeout(refreshMiniCartScrollBar, 300). jQuery
1757								// marks synthetic events with isTrigger; losing that just falls back to
1758								// the debounced path.
1759								reloadMiniCart(e && e.isTrigger);
1760							});
1761							$(document).off("mouseleave", "#cart");
1762							$(document).on("mouseleave", "#cart", function(){
1763								$(this).removeClass("active");
1764							});
1765						} catch (e) {
1766							// Never break the rest of the queued callback, but do not fail
1767							// silently either -- a swallowed error degrades straight back to
1768							// the unthrottled reload.
1769							if (window.console && console.warn) { console.warn("mini-cart rebind failed", e); }
1770						}
1771
1772						// Self-check. off(type, selector) matches on the selector STRING, so a whitespace
1773						// variant alone breaks it: a rebuilt bundle emitting "#cart>.heading" survives our
1774						// off() and BOTH handlers stay attached. Both spellings hit the same element, so
1775						// compare with whitespace stripped -- that covers drift on either side.
1776						// Known limit: whitespace is the ONLY rewrite covered. "#cart .heading", a trailing
1777						// " a", a comma-separated selector or a direct element bind all stay silent.
1778						// A tripwire for the likely case, not proof that the rebind held.
1779						// _data is a jQuery internal, so it gets its own try/catch: if it ever goes away,
1780						// the rebind above is still correct and must not be reported failed.
1781						try {
1782							var miniCartEvents = $._data(document, "events");
1783							var miniCartBound = ((miniCartEvents && miniCartEvents.mouseover) || []).filter(function(h){
1784								return h.selector && h.selector.replace(/\s+/g, "") === "#cart>.heading";
1785							}).length;
1786							if (miniCartBound !== 1 && window.console && console.warn) {
1787								console.warn("mini-cart rebind: expected 1 mouseover handler, found", miniCartBound);
1788							}
1789						} catch (e2) {
1790							if (window.console && console.warn) { console.warn("mini-cart rebind self-check unavailable", e2); }
1791						}
1792					});
1793
1794				
1795										
1796					$(".ajax-popup-link").unbind();
1797					$(".ajax-popup-link").fancybox({
1798						closeBtn    : true,
1799						closeClick  : true,
1800						helpers     : { 
1801							overlay : {closeClick: true} 
1802						},
1803						buttons : [ 'close' ],
1804						clickOutside : 'close',
1805						closeClick  : true,
1806						toolbar : true
1807					});
1808					
1809										
1810					var milliseconds = new Date().getTime();
1811					$.getJSON( "index.php?route=common/header/getLoggedInUserInfo&token=" + milliseconds + "1" + (Math.floor(Math.random() * 999) + 100), function( data ) {
1812						if( is.existy(data) && data.isLogged ) {
1813														$("#header-logged-user").html(data.logged_user_name + data.logged_group_name);
1814							$("#header-mobile-user").html(data.logged_user_name + data.logged_group_name);
1815							$(".header-logged-menu").removeClass("hidden");
1816							$("#header-logged-menu").removeClass("hidden");
1817							$("#header-none-logged-menu").remove();
1818						} else {
1819							$(".header-logged-menu").remove();
1820							$("#header-logged-menu").remove();
1821							$(".header-none-logged-menu").removeClass("hidden");
1822							$("#header-none-logged-menu").removeClass("hidden");
1823						}
1824						
1825						if( is.not.desktop() ){
1826							updateCartProductCount();
1827							setTimeout(function(){
1828								$("#shopping-cart-list .badge").removeClass("animated");
1829								$("#shopping-cart-list .badge").addClass("animated");
1830								$("#shopping-cart-list .badge").addClass("bounce");
1831							}, 800);
1832						} else {
1833							$("#cart > .heading a").trigger('mouseover');
1834							$("section#cart").removeClass("active");	
1835							setTimeout(function(){ $("section#cart").removeClass("active"); }, 50);
1836						}
1837						
1838					});
1839					
1840					setTimeout(function(){
1841						$('.side_float_banner_wrapper').attr("style","");
1842						$('.banner').each(function( index ) {
1843							if( $(this).find("a").length == 1 ) {
1844								$(this).attr("style","");
1845							}
1846						});
1847					}, 2000);
1848					
1849					if (typeof init_inline === 'function') {
1850						if($("#image-additional").length){
1851							$.fancybox.defaults.hash = false;
1852						}
1853						setTimeout(function(){ init_inline(); }, 300);
1854					}
1855
1856					if (typeof init_fullslideshow === 'function') { init_fullslideshow(); }
1857					
1858					$("#contact-block").removeAttr('style');
1859					
1860										if( is.not.desktop() ) {
1861						$('#shopping-cart-list').on('click', function() {
1862							openSideCart();
1863							return false;
1864						});
1865					}
1866										
1867					if ( $("input[name='quantity']").length > 0 ) {
1868						var qtyMin = $("input[name='quantity']").data("min"); 
1869						if(qtyMin=="" || qtyMin==undefined) qtyMin = 1;
1870						$("input[name='quantity']").TouchSpin({
1871							min: qtyMin,
1872							max: 99999
1873						});
1874					}
1875				
1876					$(window).resize(function() {
1877						if( $(window).width() < 992 ){
1878							$("#footer-inner-row").removeClass("offset2");
1879						} else {
1880							var data_count = $("#footer-inner-row").data("count");
1881							if(data_count < 1) {
1882								$("#footer-inner-row").addClass("offset2");	
1883							}
1884						}
1885					});	
1886					
1887					$("#header .flipper").each(function(){
1888						var imgLoad = $(this).imagesLoaded(function(){
1889							try { 
1890								if (typeof $(this).data('flipper') !== 'undefined') {
1891									$(this).flipper(); 
1892								}
1893							} catch(err) { }
1894						});
1895					});
1896					
1897					$('a[href*="#"]').each(function() {
1898						var hash = $(this).attr('href');
1899						if(hash=="##") return;
1900						if(hash=="#") return;
1901						if(hash=="#mobile-menu") return;
1902						$(this).click( function(e) {
1903							var url = $(this).attr('href');
1904							var type = url.split('#');
1905							var hash = '';
1906							if(type.length > 1)
1907							hash = type[1];
1908							if($("[name='"+hash+"']").length){
1909								if(hash && hash != "undefined" && hash != null && hash != undefined){
1910									e.preventDefault(); 
1911									$('html,body').animate({ scrollTop: $("[name='"+hash+"']").offset().top}, 600);
1912									return false;
1913								}
1914							}									
1915						});
1916					});
1917					
1918										
1919										
1920									
1921										
1922					if ( $(".masonry").length > 0 ) {
1923						$(".masonry").each(function(index, value) { 
1924							var $grid = $('.masonry').masonry();
1925							setTimeout(function(){ $grid.masonry('layout'); }, 2000);
1926						});
1927					}
1928					
1929					if ( $(".owl-carousel").length > 0 ) {
1930						$(".owl-carousel").not('[data-exclude]').each(function(index, value) { 
1931						
1932							var autoplay = is.null( $(this).attr('data-autoPlay') ) ? true : $(this).attr('data-autoPlay');
1933							var pagination = is.null( $(this).attr('data-pagination') ) ? false : $(this).attr('data-pagination');
1934							var slideSpeed = is.null( $(this).attr('data-slideSpeed') ) ? 200 : $(this).attr('data-slideSpeed');
1935							var paginationSpeed = is.null( $(this).attr('data-paginationSpeed') ) ? 800 : $(this).attr('data-paginationSpeed');
1936							var singleItem = is.null( $(this).attr('data-singleItem') ) ? true : $(this).attr('data-singleItem');
1937							var transitionStyle = is.null( $(this).attr('data-transitionStyle') ) ? "fade" : $(this).attr('data-transitionStyle');
1938							
1939							$(this).owlCarousel({
1940								autoPlay : Boolean(autoplay),
1941								navigation : false,
1942								pagination : Boolean(pagination),
1943								slideSpeed : slideSpeed,
1944								paginationSpeed : paginationSpeed,
1945								singleItem: Boolean(singleItem),
1946								transitionStyle : transitionStyle,
1947								stopOnHover: true,
1948								autoHeight: true
1949							});
1950							
1951						});
1952					}
1953					
1954										
1955					var vidDefer = document.getElementsByTagName('iframe');
1956					for (var i=0; i<vidDefer.length; i++) {
1957						if(vidDefer[i].getAttribute('data-src')) {
1958							vidDefer[i].setAttribute('src',vidDefer[i].getAttribute('data-src'));
1959						} 
1960					}
1961					
1962					$(".fancybox").fancybox({
1963						closeBtn: false,
1964						padding : 1,
1965						helpers			: {
1966							overlay : {
1967								closeClick : true,
1968								speedOut   : 200,
1969								showEarly  : true,
1970								css        : {},
1971								locked     : true
1972							},
1973							title		: { type : 'inside' },
1974							buttons		: {}
1975						}
1976					});	
1977					
1978										
1979					if( is.not.desktop() ){
1980						$("#footer-inner-row").removeClass("offset2");
1981					} 
1982					
1983					if ( $('#bestseller-products .flexslider').length > 0 ) {
1984						$('#bestseller-products .flexslider').each(function(index, value) {
1985							$(this).flexslider({
1986								animation: "slide",
1987								animationLoop: true,
1988								itemWidth: 182,
1989								itemMargin: 3,
1990								minItems: 2,
1991								maxItems: 6,
1992								animationSpeed: 700,
1993								touch: true,
1994								slideshow: false,								slideshowSpeed: 5000							});
1995						});
1996					}
1997					if ( $('#featured-products .flexslider').length > 0 ) {
1998						$('#featured-products .flexslider').each(function(index, value) { 
1999							$(this).flexslider({
2000								animation: "slide",
2001								animationLoop: true,
2002								itemWidth: 182,
2003								itemMargin: 3,
2004								minItems: 2,
2005								maxItems: 6,
2006								animationSpeed: 700,
2007								touch: true,
2008								slideshow: false,								slideshowSpeed: 5000							});
2009						});
2010					}
2011					if ( $('#latest-products .flexslider').length > 0 ) {
2012						$('#latest-products .flexslider').each(function(index, value) { 
2013							$(this).flexslider({
2014								animation: "slide",
2015								animationLoop: true,
2016								itemWidth: 182,
2017								itemMargin: 3,
2018								minItems: 2,
2019								maxItems: 6,
2020								animationSpeed: 700,
2021								touch: true,
2022								slideshow: false,								slideshowSpeed: 5000							});
2023						});
2024					}
2025					if ( $('#related-products .flexslider').length > 0 ) {
2026						$('#related-products .flexslider').each(function(index, value) { 
2027							$(this).flexslider({
2028								animation: "slide",
2029								animationLoop: true,
2030								itemWidth: 182,
2031								itemMargin: 3,
2032								minItems: 2,
2033								maxItems: 6,
2034								animationSpeed: 700,
2035								touch: true,
2036								slideshow: false,								slideshowSpeed: 5000							});
2037						});
2038					}
2039					if ( $('#special-products .flexslider').length > 0 ) {
2040						$('#special-products .flexslider').each(function(index, value) { 
2041							$(this).flexslider({
2042								animation: "slide",
2043								animationLoop: true,
2044								itemWidth: 182,
2045								itemMargin: 3,
2046								minItems: 2,
2047								maxItems: 6,
2048								animationSpeed: 700,
2049								touch: true,
2050								slideshow: false,								slideshowSpeed: 5000							});
2051						});
2052					}
2053
2054					if ( $('#comingsoon-products .flexslider').length > 0 ) {
2055						$('#comingsoon-products .flexslider').each(function(index, value) {
2056							$(this).flexslider({
2057								animation: "slide",
2058								animationLoop: true,
2059								itemWidth: 182,
2060								itemMargin: 3,
2061								minItems: 2,
2062								maxItems: 6,
2063								animationSpeed: 700,
2064								touch: true,
2065								slideshow: false,								slideshowSpeed: 5000							});
2066						});
2067					}
2068					
2069					jQuery('.flexslider').each( function() {
2070						var $slider = jQuery(this);
2071						var $slides = jQuery(this).children().children('.slides');
2072						if ( -1 === jQuery.inArray( $slider.data('flexslider').vars.animation, [ 'slide', 'swing' ] ) )
2073							return;
2074						$slides.bind( 'mousewheel', function( e ) {
2075							e.preventDefault();
2076							if ( jQuery(this).hasClass('dragging') )
2077								return;
2078							if ( e.originalEvent.deltaY > 0 ) {
2079								$slider.flexslider('next');
2080							}
2081							if ( e.originalEvent.deltaY < 0 ) {
2082								$slider.flexslider('prev');
2083							}
2084							return false;
2085						} );
2086					} );
2087					
2088					if ( $('.any-products').length > 0 ) {
2089						$(window).resize(function() {
2090							
2091							$('.any-products').each(function(index, value) { 
2092								var margin_vertical = $(this).data("marginVertical");
2093								if( is.mobile() ){
2094									$(this).find(".products-box").removeClass(".products-box").addClass("product-box");
2095								} else {
2096									if(margin_vertical){
2097										$(this).find(".product-box").removeClass(".product-box").addClass("products-box");
2098									}
2099								}
2100							});
2101							
2102							if(is.mobile()){
2103								$(".any-products").find(".grid-box").attr("style","");
2104								adjustBoxHeights();
2105							}
2106							
2107						});
2108					}
2109					
2110					if ( $('.banner-carousel').length > 0 ) {
2111						$('.banner-carousel').each(function(index, value) { 
2112							var slideSpeed = is.null( $(this).attr('data-slideSpeed') ) ? 600 : $(this).attr('data-slideSpeed');
2113							if( slideSpeed == undefined ) { slideSpeed = 600; }
2114							var el = "#" + $(this).attr("id");
2115							var items = $(this).data("item");
2116							
2117							var lilen = $(el+" li").length;
2118							var sliderLoop = true;
2119							if(lilen==items){sliderLoop = false;}
2120							
2121							var autoplay = parseInt($(this).data("autoplay"));
2122							var boolAutoplay = false;
2123							if( autoplay ) boolAutoplay = true;
2124							$(el).removeClass("hidden");
2125							$(el).show();
2126							$(el).imagesLoaded( function() {
2127								var el = "#" + $(this).attr("id");
2128								$(el+" img[data-lazy-src]").each(function(index, value) { 
2129									var loadimg = $(this).attr('data-lazy-src');
2130									$(this).attr('src', loadimg);
2131								});
2132								var slider = $(el).lightSlider({
2133									auto: boolAutoplay,
2134									pauseOnHover: true,
2135									pager: false,
2136									item:items,
2137									loop: sliderLoop,
2138									easing: 'cubic-bezier(0.25, 0, 0.25, 1)',
2139									speed: slideSpeed,
2140									onSliderLoad: function() {
2141										$(el).removeClass("hidden");
2142										$(el).show();
2143										$(el).css("height", "auto");
2144									} 
2145								});
2146								slider.refresh();
2147							});
2148						});
2149					}
2150					
2151					
2152					if ( $('.slideshow-container-appear li').length > 0 ) {
2153						$('.slideshow-container-appear').each(function(index, value) { 
2154							var el = "#" + $(this).attr("id");
2155							var full = $(this).data("full");
2156							if(full){
2157								$(this).appendTo('#content-top');
2158							}
2159							
2160							if(is.mobile()){
2161								$(el).find("li.desktop").remove();
2162								$(el).find("li.mobile:first").show();	
2163							} else {
2164								$(el).find("li.mobile").remove();
2165								$(el).find("li.desktop:first").show();	
2166							}						
2167							
2168							$(el).imagesLoaded( function(e) {
2169								
2170								if(is.mobile()){
2171									$(e).closest("li.mobile").attr("style","width:100%");
2172								} else {
2173									$(e).closest("li.desktop").attr("style","width:100%");
2174								}
2175								
2176								var controlNav = $(e).closest(".slideshow-container-appear").data("controlnav");
2177								var directionNav = $(e).closest(".slideshow-container-appear").data("directionnav");
2178								var el = "#" + $(e).attr("id");
2179								var delay = $(e).closest(".slideshow-container-appear").data("delay");
2180								if(delay<300) delay = 300;
2181								
2182								adaptiveHeight = true;
2183								if( is.mobile() ){
2184									//controlNav = false;
2185									//directionNav = false;
2186									adaptiveHeight = false;
2187								}
2188								
2189								var slideshow_img_h = 0;
2190								$(e).closest(".slideshow-container-appear li.mobile img").each(function(index, value) { 
2191									var img_h = $(this).data("height");
2192									if( (img_h > 0) && (slideshow_img_h > 0) && (img_h != slideshow_img_h) ) {
2193										slideshow_img_h = 0;
2194									} else {
2195										slideshow_img_h = img_h;
2196									}
2197								});
2198								
2199								if( is.mobile() && slideshow_img_h == 0 ){
2200									$(e).closest(".slideshow-container-appear").flexslider({
2201										animation: "fade",
2202										slideDirection: "horizontal",
2203										animationLoop: true,
2204										pauseOnHover: true,
2205										pauseOnAction: false,
2206										smoothHeight: false, 
2207										slideshowSpeed: delay,
2208										initDelay: 0, 
2209										slideshow: true,
2210										mousewheel: false,
2211										controlNav: controlNav,
2212										directionNav: directionNav, 
2213										prevText: "",
2214										nextText: "",
2215										start: function(slider) {
2216											var el = "#" + $(this).attr("id");
2217											$(el).removeClass('loading');
2218										}
2219									});
2220								} else {
2221									var slider = $(e).closest(".slides").lightSlider({
2222										auto:true,
2223										loop:true,
2224										pauseOnHover:true,
2225										adaptiveHeight:true,
2226										item:1,
2227										slideMargin:0,
2228										easing: 'cubic-bezier(0.25, 0, 0.25, 1)',
2229										speed:600,
2230										pause:delay,
2231										controls:directionNav,
2232										pager:controlNav
2233									}); 
2234									slider.refresh();
2235									setTimeout(function(){
2236									slider.play(); 
2237									slider.goToNextSlide(); 
2238									slider.goToPrevSlide();
2239									slider.goToPrevSlide(); 
2240									slider.refresh();
2241									}, 700);
2242								}
2243								
2244							});
2245							
2246						});
2247					}
2248					
2249					if( $('.side_float_banner .flipper').length > 0 ) {
2250						try {
2251							$('.side_float_banner .flipper').flipper();
2252						} catch(err) { }
2253					}
2254					
2255					if( $(".flexslider").find("img").length > 0 ) {
2256						$(".flexslider").find("img").trigger('appear');
2257					}
2258					
2259										
2260										
2261					$('[data-toggle="tooltip"]').tooltip();
2262					
2263					setTimeout(function(){ 
2264						$(window).trigger('resize'); 
2265					}, 300);
2266					
2267					$(".flex-direction-nav").remove();
2268					
2269					adjustBoxHeights();
2270					
2271										
2272					$("#menu-btn").show();
2273					$("#menu-btn").addClass('animated flash');
2274					
2275					setTimeout(function(){
2276					$("#mobile-navbar").removeAttr('style');
2277					}, 1000);
2278					
2279															
2280										
2281										
2282				});
2283				
2284				queue.runQueue();
2285				
2286												(function(d, s, id) {
2287				  var js, fjs = d.getElementsByTagName(s)[0];
2288				  if (d.getElementById(id)) return;
2289				  js = d.createElement(s); js.id = id;
2290				  				  js.src = "https://connect.facebook.net/zh_TW/sdk.js";
2291				  				  fjs.parentNode.insertBefore(js, fjs);
2292				}(document, 'script', 'facebook-jssdk'));
2293				
2294				if (window.location.hash == '#_=_') {
2295					window.location.hash = ''; // for older browsers, leaves a # behind
2296					history.pushState('', document.title, window.location.pathname + window.location.search);
2297				}
2298				
2299			}
2300			// Store subdomains count as same site; separate tenants on the platform domain do not
2301			function qdmIsSameSiteHost(host){
2302				var site = location.hostname.toLowerCase();
2303				host = (host || '').toLowerCase();
2304				if (host === site) {
2305					return true;
2306				}
2307				// Keep in sync with Response::isSameSiteHref() in system/library/response.php
2308				if (/(^|\.)(qdm\.(tw|com\.tw|cloud)|myorganic\.org\.tw)$/.test(site)) {
2309					return false;
2310				}
2311				var apex = site.replace(/^www\./, '');
2312				return host === apex || host.slice(-(apex.length + 1)) === '.' + apex;
2313			}
2314			function sanitizeTargetBlank(){
2315				$('a[rel~=external]').prop('target', '_blank');
2316				$('a[target="_blank"]').each(function(){
2317					var a = $(this);
2318					if(!qdmIsSameSiteHost(this.hostname)){
2319						var originalRel = (this.rel === undefined) ? '' : this.rel;
2320						var newRel = originalRel.split(" ");
2321						if (originalRel.toLowerCase().indexOf('noopener') === -1){
2322							newRel.push('noopener');
2323						}
2324						if (originalRel.toLowerCase().indexOf('noreferrer') === -1){
2325							newRel.push('noreferrer');
2326						}
2327						if (originalRel.toLowerCase().indexOf('nofollow') === -1){
2328							newRel.push('nofollow');
2329						}
2330						a.attr('rel', newRel.join(" ").trim() );
2331					}
2332				});
2333			}
2334			function create_mark(name) {
2335				if (window.performance.mark === undefined) {
2336					console.log("performance.mark Not supported");
2337					return;
2338				}
2339				window.performance.mark(name);
2340			}
2341			function initCoreJS() {
2342				$LAB.setGlobalDefaults({AlwaysPreserveOrder:true});
2343				jQuery.ajaxPrefilter(function(s) {
2344					if ( s.crossDomain ) {
2345						s.contents.script = false;
2346					}
2347				});
2348				$(function() { $('body').removeClass('fade-out'); });
2349				sanitizeTargetBlank();
2350				var def_img_idx = 1;
2351				[].forEach.call(document.querySelectorAll('img[data-src]'), function(img) {
2352					if( def_img_idx <= 12 ) {
2353						if (img.getAttribute('data-src') === null) { } else if (img.getAttribute('data-src') === '') {} else {
2354							img.setAttribute('src', img.getAttribute('data-src'));
2355							img.onload = function() {
2356								img.removeAttribute('data-src');
2357								if (img.style.opacity !== undefined) {
2358									img.style.opacity = 1;
2359								}
2360							};
2361						}
2362					}
2363					def_img_idx++;
2364				});
2365				if ( $('.slideshow .flexslider').length > 0 ) { 
2366					$('.slideshow .flexslider').each(function(index, value) { 
2367						var el = "#" + $(this).attr("id");
2368						var full = $(this).data("full");
2369						if(full){
2370							$(this).find("img").css({'width' : '100%', 'height' : 'auto' });
2371							$(this).closest("div.slideshow").appendTo('#content-top');
2372						}
2373					});
2374				}
2375				$LAB.script("https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/5.0.0/imagesloaded.pkgd.min.js")
2376					  .script("https://cdnjs.cloudflare.com/ajax/libs/is_js/0.9.0/is.min.js").wait(function(){
2377						  initDeferImages();
2378						loadJS();
2379						downloadJSAtOnload();
2380						create_mark('mark_fully_loaded');
2381						if( $('.wow').eq(0).length ) {
2382							getScript("https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js",function(){
2383								new WOW().init();
2384							});
2385						}
2386						if( $('img[usemap]').eq(0).length ) {
2387							getScript("https://cdnjs.cloudflare.com/ajax/libs/jQuery-rwdImageMaps/1.6/jquery.rwdImageMaps.min.js",function(){
2388								try { $('img[usemap]').rwdImageMaps(); } catch (e) { }
2389							});
2390						}
2391												getScript("https://cdnjs.cloudflare.com/ajax/libs/data-layer-helper/0.1.0/data-layer-helper.min.js",function(){ });
2392												
2393					  });
2394						//230117 fix flipper hover
2395						if($(".grid-box, .product-row").find(".flipper").length){
2396							$(".grid-box, .product-row").find(".flipper").hover(function(){
2397								oldSrc = $(this).attr("src");
2398								$(this).attr("src",$(this).attr("data-flipper"));
2399							},function(){
2400								$(this).attr("src",oldSrc);
2401							});
2402						}
2403			}
2404			
2405			initCoreCSS();
2406			setTimeout(function(){ 
2407				initCoreJS();
2408				$.getJSON( "index.php?route=account/account/get_user_track&token=" + (Math.floor(Math.random() * 999) + 100), function( data ) { 
2409					if( data.user_id ) { ga_userId = data.user_id; } 
2410					if( data.uuid ) {
2411						try {
2412							if ('localStorage' in window && window['localStorage'] !== null){
2413								localStorage.removeItem("qdm_user_uuid");
2414								localStorage.setItem("qdm_user_uuid", data.uuid);
2415								qdm_user_uuid = data.uuid;
2416							}
2417						} catch (e) {}
2418					}
2419					if( data.utm_source == "affiliates" ) { ga_utm_source = data.utm_source; }
2420															reportFbqTrack();
2421											
2422				});
2423				var vidDefer = document.getElementsByTagName('iframe');
2424				for (var i=0; i<vidDefer.length; i++) {
2425					if(vidDefer[i].getAttribute('src')) {
2426						vidDefer[i].setAttribute('data-src',vidDefer[i].getAttribute('src'));
2427					} 
2428				}
2429				document.getElementsByTagName("body")[0].style.display = "block";
2430			}, 60);
2431		
2432		</script>
2432 </body> </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.