PageSourceSearch

https://www.seedvillageglobal.com/products/mfb1004-20250502120342

html seedvillageglobal.com collected 2026-09-28 23:59:24 UTC 314,634 bytes, 6,197 lines download raw bytes

1<!DOCTYPE html>
2<html lang="zh-TW" style="height:100%;">
3  <head>
4      
4<script>
5        window.dataLayer = window.dataLayer || [];
6      </script>
6
7    
8      <!-- CYBERBIZ Google Tag Manager -->
9      
9<script>
vendor: 345 bytes, lines 9-13
9(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
10      new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
11      j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
12      'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
13      })(window,document,'script','cyb','
13GTM-TXD9LVJ
vendor: 3 bytes, line 13
13');
13</script>
13
14      <!-- End CYBERBIZ Google Tag Manager -->
15    
16    <meta charset="utf-8">
17<meta http-equiv="X-UA-Compatible" content="IE=edge">
18<meta name="viewport" content="width=device-width, initial-scale=1">
19<link rel="icon" href="https://cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNjcyMzcyOTY5XzAzLTA3LnBuZy5wbmciXV0.png?convert=false&sha=06b6aef67520a901">
20<link rel="apple-touch-icon" href="https://cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNjcyMzcyOTY5XzAzLTA3LnBuZy5wbmciXV0.png?convert=false&sha=06b6aef67520a901">
21
22<meta property="og:site_name" content="種子村Seed Village" />
23
24<!-- og tag -->
25
26
27<!-- og image -->
28
29  <meta property="og:image" content="https://cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfYTYwNGJkNTNhNTFhNDg3ZGI5MjYuanBlZyJdLFsicCIsInRodW1iIiwiNDgweDQ4MCJdXQ.jpeg?sha=378239f89dbe92e5" />
30
31
32<title>
33  
34    My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲 種子村Seed Village
35  
36</title>
37
38
39
40<script src='//cdn-general.cybassets.com/frontend/shop/useSettingsData-3a2e378145f8a165.js' type='text/javascript'></script>
40
41
42
43
44  
44<script>
45    window.setSettingsData({"draggable_sections":{"404":[],"index":["1712126555146_0","1712126901095_4","_index_4_blocks_4","1715594946337_1","1715754702876_1","1715754638630_1","1715594979032_1","1715754685365_1","1715852324160_4","1716183681841_2","1723782024539_2","1716184002575_2","1716184084965_2"],"product":["product_info","product_description","board_comments","related_products"],"collection":[],"category":[],"blog":[],"article":[],"cart":[],"contact":[],"express_delivery":[],"search":[],"combo_product":["combo_product_info","combo_product_desc","board_comments"],"custom_page":["1712126555146_0","1712126901095_4","_index_4_blocks_4","_index_product_banner_1","1710492578862_1","1710492608550_1","1715594946337_1","1715594979032_1","1715754638630_1","1715754685365_1","1715754702876_1","1715754706164_1","1715852324160_4","1716183681841_2","1716184002575_2","1716184084965_2","_index_4_blocks_3","1713942418977_4","1712135678752_4"]},"sections":{"navbar":{"type":"navbar","visible":true,"settings":{"navbar_image_logo_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzEyNzQwMzgxX1NlZWRfbG9nb193aGl0ZS5wbmcucG5nIl1d.png?sha=b64f8260c6bc2e48","navbar_image_logo_tablet_url":"","navbar_image_logo_mobile_url":"","main_nav":"main-menu","slider_primary_linklist":"main-menu","slider_primary_linklist_set_open":true,"nav_show_three_dimension":true,"search_enabled":true,"display_only_index":false,"dict_header_banner_image_url":"","dict_header_banner_image_tablet_url":"","dict_header_banner_image_mobile_url":"","dict_header_banner_link":"","display_count_down":false,"navbar_display_style":"displayDefault","menu_display_style":"three_dimension_menu","header_banner_start":"","header_banner_end":"","timer_text_color":"#c39d6f","timer_bg_color":"#2b2b6e","link_menu_enabled":false,"link_menu":"undefined","display_banner_type":"imageBanner","header_banner_simple_text_size":"12","header_banner_simple_text_color":"#ffffff","header_banner_simple_bg":"#000000","logo_height":"","mobile_logo_position":"left","navbar_pc_title_font_size_scale":"100","navbar_pc_body_font_size_scale":"100","navbar_mobile_title_font_size_scale":"100","navbar_mobile_body_font_size_scale":"100"},"custom_name":"導覽列"},"footer":{"type":"footer","visible":true,"settings":{"footer_link":"footer","display_facebook":false,"shop_facebook":"","display_instagram":false,"shop_instagram":"","display_line":false,"shop_line":"","display_youtube":false,"shop_youtube":"","footer_link_arrangement":"display_y","display_facebook_fan_block":true},"block_order":["default_link_list","default_contact_info"],"blocks":{"default_link_list":{"type":"link_list_setting","custom_name":"選單","thumbnail":"list","draggable":true,"visible":true,"settings":{"dict_link_list_block_title":"ABOUT","footer_link":"footer"}},"default_contact_info":{"type":"contact_info_setting","custom_name":"聯絡資訊","thumbnail":"contactInfo","draggable":true,"visible":true,"settings":{"dict_contact_info_block_title":"聯絡資訊","display_phone":true,"dict_phone_number":"02-2777-1816","display_fax_number":false,"dict_shop_fax_number":"0222345678","display_shop_email":true,"dict_shop_email":"[email protected]","display_shop_address":true,"dict_shop_address":"新北市中和區連城路222å··4弄2號3樓","display_office_time":true,"dict_shop_office_time":"10:00-18:00","display_tax_id":true,"dict_tax_id":"52701910"}}},"custom_name":"頁腳"},"_index_4_blocks_1":{"type":"_index_4_blocks","custom_name":"自訂排版設計","visible":true,"settings":{"margin_x":"0","margin_bottom":"0","margin_block":"10","mobile_margin_x":"0","mobile_margin_bottom":"0","mobile_columns":1,"mobile_margin_block":"0"},"block_order":["_index_4_blocks_1_block_1","_index_4_blocks_1_block_2"],"blocks":{"_index_4_blocks_1_block_1":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzEwNDkxMTc1X2ltYWdlLmpwZWcuanBlZyJdXQ.jpeg?sha=231e2742fae84d3b","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","block_propotion":"100"}},"_index_4_blocks_1_block_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":false,"settings":{"dict_carousel":"product","block_propotion":"0"}}}},"_index_4_blocks_2":{"type":"_index_4_blocks","custom_name":"自訂排版設計","visible":true,"settings":{"margin_x":"0","margin_bottom":"0","margin_block":"0","mobile_margin_x":"16","mobile_margin_bottom":"34","mobile_columns":1,"mobile_margin_block":"8"},"block_order":["_index_4_blocks_2_block_1","_index_4_blocks_2_block_2","_index_4_blocks_2_block_3","_index_4_blocks_2_block_4"],"blocks":{"_index_4_blocks_2_block_1":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"/theme_src/i18n_focus/default_img/_index_4_blocks_2_block_1_1.png","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":""}},"_index_4_blocks_2_block_2":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"/theme_src/i18n_focus/default_img/_index_4_blocks_2_block_2_1.png","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":""}},"_index_4_blocks_2_block_3":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"/theme_src/i18n_focus/default_img/_index_4_blocks_2_block_3_1.png","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":""}},"_index_4_blocks_2_block_4":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"/theme_src/i18n_focus/default_img/_index_4_blocks_2_block_4_1.png","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":""}}}},"_index_4_blocks_3":{"type":"_index_4_blocks","custom_name":"自訂排版設計","visible":false,"settings":{"margin_x":"0","margin_bottom":"0","margin_block":"0","mobile_margin_x":"10","mobile_margin_bottom":"0","mobile_columns":2,"mobile_margin_block":"10"},"block_order":["1714383426215_2","1715852965771_2","_index_4_blocks_3_block_1","_index_4_blocks_3_block_2","_index_4_blocks_3_block_3","1714383362271_0"],"blocks":{"_index_4_blocks_3_block_1":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzNDAxX-Wwj-aWueahhjExLmdpZi5naWYiXV0.gif?sha=88fda12d1e337a8e","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/products/mfbp03","block_propotion":"20","custom_block_image_alt":""}},"_index_4_blocks_3_block_2":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzMzg0X-Wwj-aWueahhjQ0LmdpZi5naWYiXV0.gif?sha=f0980a92dda1410f","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/products/mfb100","block_propotion":"20"}},"_index_4_blocks_3_block_3":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzNzU1X-Wwj-aWueahhjIyLmdpZi5naWYiXV0.gif?sha=56fea964186a72b7","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/products/mfb1001","block_propotion":"20"}},"_index_4_blocks_3_block_4":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"/theme_src/i18n_focus/default_img/_index_4_blocks_3_block_4_1.png","dict_tablet_image_url":"/theme_src/i18n_focus/default_img/_index_4_blocks_3_block_4_2.png","dict_mobile_image_url":"/theme_src/i18n_focus/default_img/_index_4_blocks_3_block_4_2.png","dict_link":"","block_propotion":"40"}},"1712127465032_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{}},"1712130704354_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{}},"1712133277701_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{"block_propotion":"0","dict_carousel":"undefined"}},"1714383426215_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{"dict_carousel":"undefined","block_propotion":"6"}},"1714383362271_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzNDAxX-Wwj-aWueahhjMzLmdpZi5naWYiXV0.gif?sha=91d2ee8c014503ac","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","block_propotion":"20"}},"1715587705941_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{"dict_carousel":"undefined"}},"1715852965771_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{"block_propotion":"5","dict_carousel":"undefined"}}}},"_index_8_blocks":{"type":"_index_8_blocks","visible":true,"settings":{"dict_title":"PRODUCTS","collection_handle":"my-first-book","limit":"12","product_arrangement":"2","margin_x":"80","margin_bottom":"50","mobile_margin_x":"15","mobile_margin_bottom":"24","product_display":"displayAll","product_alignment":"leftPosition"},"custom_name":"商品分類"},"_index_product_banner_1":{"type":"_index_product_banner","custom_name":"橫幅廣告","visible":false,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzMTY1X-mmlumggeWNgOWhijEuZ2lmLmdpZiJdXQ.gif?sha=10eb9ff6054a0c4c","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","cta_btn_display_style":"topPosition","cta_btn_bg_color":"#000000","cta_btn_text_color":"#ffffff","margin_x":"20","margin_bottom":"-3","mobile_margin_x":"0","mobile_margin_bottom":"-20"},"blocks":{},"block_order":[]},"_index_4_blocks_4":{"type":"_index_4_blocks","custom_name":"排程跑馬燈","visible":true,"settings":{"margin_x":"45","margin_bottom":"30","margin_block":"0","mobile_margin_x":"20","mobile_margin_bottom":"20","mobile_columns":2,"mobile_margin_block":"0"},"block_order":["1710492290958_0","1716184559333_0","1710492325753_0","1710493324262_0"],"blocks":{"_index_4_blocks_4_block_1":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{"block_propotion":"","dict_carousel":""}},"1710492290958_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzEzMzQ1NDY3X0JyYW5kc-WciDFf6Zu76IWm54mILnBuZy5wbmciXV0.png?sha=5da3fbf5de7181ae","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/pages/品牌頁-mfb","block_propotion":"25","dict_image_description":""}},"1710492325753_0":{"type":"image","custom_name":"圖片","visible":false,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzEzNzc2MzI0X0JyYW5kc-WciDJf6Zu76IWm54mILTIucG5nLnBuZyJdXQ.png?sha=b7c807de615dd0ec","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/pages/品牌頁-inui","block_propotion":"25","dict_image_description":""}},"1710493324262_0":{"type":"image","custom_name":"圖片","visible":false,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzIzNzk2NTQ3X-Wwj-Wck-WciF9NRi5qcGcucG5nIl1d.png?sha=17b4887a49c31bbf","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/pages/品牌頁-mf","block_propotion":"25","dict_image_description":""}},"1710493342353_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNjk1MjY1NTkzXzIzMDkxMV_lrpjntrJRQV9CTl_lt6XkvZzljYDln58gMSDopIfmnKwgMy5qcGcuanBlZyJdXQ.jpeg?sha=a7aa77f0a5380d18","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":""}},"1713776336252_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{"block_propotion":"11","dict_carousel":"undefined"}},"1715852792777_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{"block_propotion":"-2","dict_carousel":"undefined"}},"1716184613971_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{"block_propotion":"-2","dict_carousel":"undefined"}},"1716184559333_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzIzNzk2NTQ3X-Wwj-Wck-WciF9TSC5qcGcucG5nIl1d.png?sha=3875f46f5e8d0fa8","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/pages/品牌頁-small-hands","block_propotion":"25","dict_image_description":""}}}},"_main_slider_custom_1":{"type":"_main_slider_custom","custom_name":"輪播素材","visible":true,"settings":{"swiper_delay":"50","margin_x":"50","margin_bottom":"32","image_number":"5","image_space":"24","mobile_margin_x":"16","mobile_margin_bottom":"24","mobile_image_number":"2","mobile_image_space":"16"},"block_order":["_main_slider_custom_1_block_1","_main_slider_custom_1_block_2","_main_slider_custom_1_block_3","_main_slider_custom_1_block_4","_main_slider_custom_1_block_5"],"blocks":{"_main_slider_custom_1_block_1":{"type":"image","custom_name":"素材","visible":true,"settings":{"dict_image_url":"/theme_src/i18n_focus/default_img/_main_slider_custom_1_block_1_1.png","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":""}},"_main_slider_custom_1_block_2":{"type":"image","custom_name":"素材","visible":true,"settings":{"dict_image_url":"/theme_src/i18n_focus/default_img/_main_slider_custom_1_block_2_1.png","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":""}},"_main_slider_custom_1_block_3":{"type":"image","custom_name":"素材","visible":true,"settings":{"dict_image_url":"/theme_src/i18n_focus/default_img/_main_slider_custom_1_block_3_1.png","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":""}},"_main_slider_custom_1_block_4":{"type":"image","custom_name":"素材","visible":true,"settings":{"dict_image_url":"/theme_src/i18n_focus/default_img/_main_slider_custom_1_block_4_1.png","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":""}},"_main_slider_custom_1_block_5":{"type":"image","custom_name":"素材","visible":true,"settings":{"dict_image_url":"/theme_src/i18n_focus/default_img/_main_slider_custom_1_block_5_1.png","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":""}}}},"_graphic_introduction_1":{"type":"_graphic_introduction","custom_name":"圖文介紹","visible":true,"settings":{"text_display":"midPosition","graphic_text":"#292929","graphic_bg"
45:"#e1e5e9","margin_x":"0","margin_bottom":"0","mobile_margin_x":"0","mobile_margin_bottom":"0","dict_image_url":"","dict_tablet_image_url":"","dict_mobile_image_url":"","btn_display":"leftSide","block_propotion":"0"},"block_order":["_graphic_introduction_1_block_1","_graphic_introduction_1_block_2"],"blocks":{"_graphic_introduction_1_block_1":{"type":"title","custom_name":"標題","visible":true,"settings":{"dict_rich_text_title":"SUBSCRIBE","dict_size":"24"}},"_graphic_introduction_1_block_2":{"type":"text","custom_name":"內文","visible":true,"settings":{"dict_rich_text_content":"\u003cp\u003eSignup to receive emails from FOCUS about the latest product news, promotional events, discounts  \u0026amp; special deals.\u003c/p\u003e\n","dict_size":"14"}},"_graphic_introduction_1_block_3":{"type":"button","custom_name":"按鈕","visible":true,"settings":{"dict_btn_text":"SIGN UP NOW","graphic-button_bg":"#292929","graphic-button_text":"#FFFFFF"}}}},"express_delivery_index_4_blocks":{"type":"_index_4_blocks","visible":false,"blocks":{"express_delivery_display_index_4_block_1":{"type":"image","visible":true,"settings":{"title":"","dict_link":"","dict_image_url":"/theme_src/i18n_shoestore/default_img/new_index_4_blocks_1.jpg","dict_tablet_image_url":"","dict_mobile_image_url":""}}},"block_order":["express_delivery_display_index_4_block_1"]},"custom_text":{"type":"custom_text","visible":true,"settings":{}},"blog":{"type":"blog","visible":true,"settings":{"article_limit_in_blog_page":"6"}},"article":{"type":"article","visible":true,"settings":{"display_blog_menu":true,"dict_blog_tags_title":"文章分類","blog_latest_post_limit":"2"}},"category":{"type":"category","visible":true,"settings":{"category_sidebar_set_open":false,"category_product_block_limit":"4","category_product_swiper_item_limit":"6","category_product_item_limit":"18"}},"shop_setting":{"type":"shop_setting","visible":true,"settings":{"favicon_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNjcyMzcyOTY5XzAzLTA3LnBuZy5wbmciXV0.png?sha=06b6aef67520a901","og_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNjcyMzcyOTY5XzAzLTA3LnBuZy5wbmciXV0.png?sha=06b6aef67520a901","shop_title":"","shop_description":"以「精選而不盲選」為理念,致力於將海外優良的母嬰產品引進台灣。","shop_keywords":"布書,童書,親子,母嬰,蒙特梭利,My First Book, small hands"},"custom_name":"全站設定"},"color_settings":{"type":"color_settings","visible":true,"settings":{"button_color":"#000000","button_text_color":"#FFFFFF","accent_color":"#0087ed","heading_color":"#565656","text_color":"#9A9EA2","price_color":"#292929","discount_price_color":"#d91818","theme_bg_color":"#FFFFFF","product_border_color":"#E2E2E2","nav_logo_bg_color":"#60765f","nav_menu_bg_color":"#b9cc99","nav_menu_text_color":"#f8f8f8","nav_menu_icon_color":"#e5e5e5","footer_bg_color":"#60765f","footer_text_color":"#ffffff","checkout_button_color":"#db1a1a","checkout_accent_color":"#292929","tips_text_color":"#0C5460"},"custom_name":"顏色設定"},"popup":{"type":"popup","visible":true,"blocks":{"popup_block_1":{"type":"image","visible":false,"settings":{"dict_image_url":"/theme_src/i18n_shoestore/default_img/popup_default.jpg","icon_size":"small"},"custom_name":"圖片"}},"block_order":["popup_block_1"],"settings":{},"custom_name":"彈窗廣告"},"product_info":{"type":"product_info","visible":true,"settings":{"display_product_sku":true,"dict_vip_custom_price_text":"","dict_vip_custom_price_href":""}},"product_description":{"type":"product_description","visible":true},"board_comments":{"type":"board_comments","visible":true,"settings":{},"custom_name":"商品評論","thumbnail":"list","draggable":false},"related_products":{"type":"related_products","visible":true,"settings":{"display_related_cols":true,"use_custom_related_cols":true,"dict_group_related_cols_related_product":"相關商品","related_products_limit":"4"}},"combo_product_info":{"type":"combo_product_info","visible":true,"settings":{}},"combo_product_desc":{"type":"combo_product_desc","visible":true,"settings":{}},"contact":{"type":"contact","visible":true,"settings":{"show_google_map":true,"show_google_map_iframe":"\u003ciframe src=\"https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3613.6479170127777!2d121.56760821400371!3d25.07991984260527!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3442ac6fbd841bbd%3A0x64e16bcf25e3da31!2zMTE05Y-w5YyX5biC5YWn5rmW5Y2A55Ge5YWJ6LevNTEz5be3MzDomZ8!5e0!3m2!1szh-TW!2stw!4v1485156761267\" width=\"600\" height=\"450\" frameborder=\"0\" style=\"border:0\" allowfullscreen\u003e\u003c/iframe\u003e"}},"collection":{"type":"collection","visible":true,"settings":{"collection_sidebar":"main-menu","collection_sidebar_set_open":false,"collection_pagination_limit":"24"}},"404":{"type":"404","visible":true,"settings":{"image_url":"/theme_src/i18n_focus/default_img/404_img.png","dict_404_image_url":"/theme_src/i18n_focus/default_img/404_img.png","dict_title_text":"抱歉,此頁面不存在或者已經被移除","dict_btn_text":"返回首頁"}},"blogs_all":{"type":"blogs_all","visible":true,"settings":{}},"bundle_discounts":{"type":"bundle_discounts","visible":true,"settings":{}},"cart":{"type":"cart","visible":true,"settings":{}},"cart_empty":{"type":"cart_empty","visible":true,"settings":{}},"page":{"type":"page","visible":true,"settings":{}},"search":{"type":"search","visible":true,"settings":{"search_link_list":"main-menu"}},"customers/account":{"type":"customers/account","visible":true,"settings":{}},"customers/account_edit":{"type":"customers/account_edit","visible":true,"settings":{}},"customers/activate_account":{"type":"customers/activate_account","visible":true,"settings":{}},"customers/addresses":{"type":"customers/addresses","visible":true,"settings":{}},"customers/bonus_points":{"type":"customers/bonus_points","visible":true,"settings":{}},"customers/cancel":{"type":"customers/cancel","visible":true,"settings":{}},"customers/coupons":{"type":"customers/coupons","visible":true,"settings":{}},"customers/forgot_password":{"type":"customers/forgot_password","visible":true,"settings":{}},"customers/login":{"type":"customers/login","visible":true,"settings":{}},"customers/message":{"type":"customers/message","visible":true,"settings":{}},"customers/messages":{"type":"customers/messages","visible":true,"settings":{}},"customers/modify_password":{"type":"customers/modify_password","visible":true,"settings":{}},"customers/order":{"type":"customers/order","visible":true,"settings":{}},"customers/orders":{"type":"customers/orders","visible":true,"settings":{}},"customers/periodic_order":{"type":"customers/periodic_order","visible":true,"settings":{}},"customers/periodic_orders":{"type":"customers/periodic_orders","visible":true,"settings":{}},"customers/other_valid_orders":{"type":"customers/other_valid_orders","visible":true,"settings":{}},"customers/register":{"type":"customers/register","visible":true,"settings":{}},"customers/reset_password":{"type":"customers/reset_password","visible":true,"settings":{}},"customers/return":{"type":"customers/return","visible":true,"settings":{}},"customers/tracking_items":{"type":"customers/tracking_items","visible":true,"settings":{}},"express_delivery-navbar":{"type":"express_delivery-navbar","visible":true,"settings":{}},"express_delivery-content":{"type":"express_delivery-content","visible":true,"settings":{}},"1710492375341_7":{"type":"_text_editor_section","custom_name":"文字編輯","visible":true,"settings":{"margin_x":"0","margin_bottom":"0","mobile_margin_x":"0","mobile_margin_bottom":"0","dict_advanced_rich_text_content":"\u003cp style=\"text-align:center;\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003c/p\u003e\n\u003cp style=\"text-align:center;\"\u003e\u003cspan style=\"font-size: 32px;\"\u003eBRANDS\u003c/span\u003e\u003c/p\u003e\n\u003cp\u003e\u003c/p\u003e\n\u003cp\u003e\u003c/p\u003e\n"},"blocks":{},"block_order":[]},"1710492578862_1":{"type":"_index_product_banner","custom_name":"橫幅廣告","visible":false,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzMjI1X-mmlumggeWNgOWhijIuZ2lmLmdpZiJdXQ.gif?sha=4d90cf2359ebef7a","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","cta_btn_display_style":"topPosition","cta_btn_bg_color":"#000000","cta_btn_text_color":"#ffffff","margin_x":"20","margin_bottom":"0","mobile_margin_x":"0","mobile_margin_bottom":"0"},"blocks":{},"block_order":[]},"1710492590667_2":{"type":"_index_8_blocks","custom_name":"商品分類","visible":true,"settings":{"dict_title":"PRODUCTS","collection_handle":"inui-bebestorage","product_arrangement":"1","margin_x":"80","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"24","product_display":"displayDefault","limit":"12","product_alignment":"leftPosition"},"blocks":{},"block_order":[]},"1710492608550_1":{"type":"_index_product_banner","custom_name":"橫幅廣告","visible":false,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzMjI1X-mmlumggeWNgOWhijMuZ2lmLmdpZiJdXQ.gif?sha=43cc3c99092f77af","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","cta_btn_display_style":"topPosition","cta_btn_bg_color":"#000000","cta_btn_text_color":"#ffffff","margin_x":"20","margin_bottom":"-3","mobile_margin_x":"0","mobile_margin_bottom":"10"},"blocks":{},"block_order":[]},"1710492628445_2":{"type":"_index_8_blocks","custom_name":"商品分類","visible":true,"settings":{"dict_title":"PRODUCTS","collection_handle":"manufaktura-falbane","product_arrangement":"2","margin_x":"51","margin_bottom":"50","mobile_margin_x":"0","mobile_margin_bottom":"24","product_display":"displayDefault","limit":"12","product_alignment":"leftPosition"},"blocks":{},"block_order":[]},"1710494635953_7":{"type":"_text_editor_section","custom_name":"文字編輯","visible":true,"settings":{"margin_x":"0","margin_bottom":"20","mobile_margin_x":"0","mobile_margin_bottom":"0","dict_advanced_rich_text_content":"\u003cp style=\"text-align:center;\"\u003e\u003cspan style=\"font-size: 32px;\"\u003e-- BEST SELLERS --\u003c/span\u003e\u003c/p\u003e\n"},"blocks":{},"block_order":[]},"1712126555146_0":{"type":"_main_slider_custom","custom_name":"輪播素材","visible":true,"settings":{"swiper_delay":"3","margin_x":"0","margin_bottom":"40","image_number":"1","image_space":"12","mobile_margin_x":"0","mobile_margin_bottom":"30","mobile_image_number":"1","mobile_image_space":"8","transition_speed":"0.3"},"blocks":{"1712126555159_0":{"type":"image","custom_name":"素材","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzI3ODU2NjAwXzUyNDE3Mjc4NT
45U0NDBfLnBpYy5qcGcuanBlZyJdXQ.jpeg?sha=d5b23f3da8959a6e","dict_tablet_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzIzNjkzNzU5XzUxMTE3MjM2MzEzODdfLnBpYy5qcGcuanBlZyJdXQ.jpeg?sha=9fdacd64b1fcbf8c","dict_mobile_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzIzNjkzNzU5XzUxMTE3MjM2MzEzODdfLnBpYy5qcGcuanBlZyJdXQ.jpeg?sha=9fdacd64b1fcbf8c","dict_link":"/pages/品牌頁-small-hands","slide_contents_display":"left","slide_btn_link":"","slide_title_color":"#000000","slide_content_color":"#000000","slide_btn_bg_color":"#000000","slide_btn_text_color":"#ffffff","dict_slide_btn_link":""}},"1712126689600_0":{"type":"image","custom_name":"素材","visible":false,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE2MTg5MTg5X0lOVUktVy5naWYuZ2lmIl1d.gif?sha=c5b79677abcbaa11","dict_tablet_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE1NzYyNDQ2X0lOVUktTkVXVy5naWYuZ2lmIl1d.gif?sha=9d2c36a01b457f05","dict_mobile_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE1NzYyNDQ2X0lOVUktTkVXVy5naWYuZ2lmIl1d.gif?sha=9d2c36a01b457f05","dict_link":"/pages/品牌頁-inui","slide_contents_display":"left","slide_btn_link":"","slide_title_color":"#000000","slide_content_color":"#000000","slide_btn_bg_color":"#000000","slide_btn_text_color":"#ffffff","dict_slide_btn_link":""}},"1712126711602_0":{"type":"image","custom_name":"素材","visible":false,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE2MTkwMzk4X21mLXcuZ2lmLmdpZiJdXQ.gif?sha=fe2750b459c17ae8","dict_tablet_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE2MTc5MDY2X01GLU5FV1cuZ2lmLmdpZiJdXQ.gif?sha=ce8757b79767bf44","dict_mobile_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE2MTc5MDY2X01GLU5FV1cuZ2lmLmdpZiJdXQ.gif?sha=ce8757b79767bf44","dict_link":"/pages/品牌頁-mf","slide_contents_display":"left","slide_btn_link":"","slide_title_color":"#000000","slide_content_color":"#000000","slide_btn_bg_color":"#000000","slide_btn_text_color":"#ffffff","dict_slide_btn_link":""}},"1723781466854_0":{"type":"image","custom_name":"素材","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzQ2MTU4NTM4XzQzNzMxNzQzNDgxNzg1Xy5waWMuanBnLmpwZWciXV0.jpeg?sha=711d3299a703743f","dict_tablet_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzQ2MTU4NTUxXzQzNzIxNzQzNDgxNzg0Xy5waWMuanBnLmpwZWciXV0.jpeg?sha=1244abc5ae11b192","dict_mobile_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzQ2MTU4NTUxXzQzNzIxNzQzNDgxNzg0Xy5waWMuanBnLmpwZWciXV0.jpeg?sha=1244abc5ae11b192","dict_link":"/products/mfb1004-20250502120342","slide_contents_display":"left","slide_btn_link":"","slide_title_color":"#000000","slide_content_color":"#000000","slide_btn_bg_color":"#000000","slide_btn_text_color":"#ffffff","dict_slide_btn_link":""}},"1777966620132_0":{"type":"image","custom_name":"素材","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzc3OTY2NjU2X-avjeimquevgOWumOe2suWcli5qcGcuanBlZyJdXQ.jpeg?sha=926cddc580825b56","dict_tablet_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzc3OTY2NjU2X-avjeimquevgOWumOe2suWcli5qcGcuanBlZyJdXQ.jpeg?sha=926cddc580825b56","dict_mobile_image_url":"","dict_link":"","slide_contents_display":"left","dict_slide_btn_link":"","slide_title_color":"#000000","slide_content_color":"#000000","slide_btn_bg_color":"#000000","slide_btn_text_color":"#ffffff"}}},"block_order":["1777966620132_0","1723781466854_0","1712126555159_0","1712126689600_0","1712126711602_0"]},"1712126901095_4":{"type":"_index_4_blocks","custom_name":"自訂排版設計","visible":true,"settings":{"margin_x":"0","margin_bottom":"0","margin_block":"10","mobile_margin_x":"0","mobile_margin_bottom":"10","mobile_columns":1,"mobile_margin_block":"10"},"blocks":{"1712126901102_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzEyMTMwMjc5X0JSQU5EU1_pm7vohabniYhORVcucG5nLnBuZyJdXQ.png?sha=25fc22bc6e27403f","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","dict_image_description":""}}},"block_order":["1712126901102_0"]},"1712130433953_4":{"type":"_index_4_blocks","custom_name":"自訂排版設計","visible":true,"settings":{"margin_x":"","margin_bottom":"-3","margin_block":"","mobile_margin_x":"0","mobile_margin_bottom":"","mobile_columns":1,"mobile_margin_block":""},"blocks":{"1712130433967_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzNzkwX-Wwj-aWueahhjg4LmdpZi5naWYiXV0.gif?sha=0ef1afda0285df05","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/products/inuibebe-tom-tom-module-bookcase","block_propotion":"20"}},"1712130433971_1":{"type":"video","custom_name":"影片","visible":true,"settings":{"dict_video_link":""}},"1712135334200_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{"block_propotion":"10","dict_carousel":"undefined"}},"1712135327997_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzNzkxX-Wwj-aWueahhjY2LmdpZi5naWYiXV0.gif?sha=4c360f630e60108b","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/products/tmfm","block_propotion":"20"}},"1712135331602_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzNzkxX-Wwj-aWueahhjU1LmdpZi5naWYiXV0.gif?sha=b3ca25b1240c8bdd","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/products/inuibebe-tom-tom-module-sterilize-storage-set","block_propotion":"20"}},"1714383978769_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{"block_propotion":"10","dict_carousel":"undefined"}},"1714383946049_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzNzkxX-Wwj-aWueahhjc3LmdpZi5naWYiXV0.gif?sha=f199bc64da642077","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","block_propotion":"20"}}},"block_order":["1714383978769_2","1712130433967_0","1712135327997_0","1712135331602_0","1714383946049_0"]},"1712135678752_4":{"type":"_index_4_blocks","custom_name":"自訂排版設計","visible":false,"settings":{"margin_x":"","margin_bottom":"20","margin_block":"","mobile_margin_x":"10","mobile_margin_bottom":"50","mobile_columns":2,"mobile_margin_block":"10"},"blocks":{"1712135766298_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":true,"settings":{"block_propotion":"10","dict_carousel":"undefined"}},"1712135678758_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0Mzg1MDY0X3h4LmdpZi5naWYiXV0.gif?sha=5f4eab55afb05c29","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/products/mfb","block_propotion":"20"}},"1712135735463_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0Mzg1MDY0X2NjLmdpZi5naWYiXV0.gif?sha=a317a0bee6d9d268","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/products/mfgirlst","block_propotion":"20"}},"1712135750340_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0Mzg1MDY0X3JyLmdpZi5naWYiXV0.gif?sha=4a49ea7738e77926","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/products/mftutuskirt","block_propotion":"20"}},"1714384296237_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":false,"settings":{"block_propotion":"10","dict_carousel":"undefined"}},"1714384285289_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0Mzg1MDY0X3p6LmdpZi5naWYiXV0.gif?sha=135174801a7db733","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","block_propotion":"20"}}},"block_order":["1714384296237_2","1712135735463_0","1712135750340_0","1714384285289_0","1712135678758_0"]},"1713333690578_4":{"type":"_index_4_blocks","custom_name":"自訂排版設計","visible":false,"settings":{"margin_x":"0","margin_bottom":"0","margin_block":"","mobile_margin_x":"0","mobile_margin_bottom":"0","mobile_columns":1,"mobile_margin_block":""},"blocks":{"1713333690591_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":""}}},"block_order":["1713333690591_0"]},"1713942418977_4":{"type":"_index_4_blocks","custom_name":"自訂排版設計","visible":false,"settings":{"margin_x":"0","margin_bottom":"0","margin_block":"","mobile_margin_x":"10","mobile_margin_bottom":"","mobile_columns":2,"mobile_margin_block":"10"},"blocks":{"1713942418995_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzNzkwX-Wwj-aWueahhjg4LmdpZi5naWYiXV0.gif?sha=0ef1afda0285df05","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","block_propotion":"20"}}
45,"1714460872436_2":{"type":"carousel","custom_name":"排程跑馬燈","visible":false,"settings":{"block_propotion":"10","dict_carousel":"undefined"}},"1714460815110_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzNzkxX-Wwj-aWueahhjY2LmdpZi5naWYiXV0.gif?sha=4c360f630e60108b","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","block_propotion":"20"}},"1714460842769_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzNzkxX-Wwj-aWueahhjU1LmdpZi5naWYiXV0.gif?sha=b3ca25b1240c8bdd","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","block_propotion":"20"}},"1714460859269_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE0MzgzNzkxX-Wwj-aWueahhjc3LmdpZi5naWYiXV0.gif?sha=f199bc64da642077","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","block_propotion":"20"}}},"block_order":["1714460872436_2","1713942418995_0","1714460815110_0","1714460842769_0","1714460859269_0"]},"1715594946337_1":{"type":"_index_product_banner","custom_name":"橫幅廣告","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE2MTk2NDA3X0YuZ2lmLmdpZiJdXQ.gif?sha=4be4b5b6f40f5306","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/pages/品牌頁-mfb","cta_btn_display_style":"topPosition","cta_btn_bg_color":"#000000","cta_btn_text_color":"#ffffff","margin_x":"100","margin_bottom":"10","mobile_margin_x":"0","mobile_margin_bottom":"10","display_cta_btn":false},"blocks":{},"block_order":[]},"1715594979032_1":{"type":"_index_product_banner","custom_name":"橫幅廣告","visible":false,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE2MTk2NDA2X04uZ2lmLmdpZiJdXQ.gif?sha=2f2baf5ffa5a0949","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/pages/品牌頁-inui","cta_btn_display_style":"topPosition","cta_btn_bg_color":"#000000","cta_btn_text_color":"#ffffff","margin_x":"100","margin_bottom":"10","mobile_margin_x":"0","mobile_margin_bottom":"10"},"blocks":{},"block_order":[]},"1715754638630_1":{"type":"_index_product_banner","custom_name":"橫幅廣告","visible":false,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE2MTk2NDMwX1MuZ2lmLmdpZiJdXQ.gif?sha=c990eb2766ef2f7b","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/pages/品牌頁-inui","cta_btn_display_style":"topPosition","cta_btn_bg_color":"#000000","cta_btn_text_color":"#ffffff","margin_x":"100","margin_bottom":"10","mobile_margin_x":"0","mobile_margin_bottom":"10"},"blocks":{},"block_order":[]},"1715754685365_1":{"type":"_index_product_banner","custom_name":"橫幅廣告","visible":false,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzIzNzgxNzk1X-apq-aineWcll9NRi5qcGcucG5nIl1d.png?sha=b7c4587db3860455","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/pages/品牌頁-mf","cta_btn_display_style":"topPosition","cta_btn_bg_color":"#000000","cta_btn_text_color":"#ffffff","margin_x":"100","margin_bottom":"10","mobile_margin_x":"0","mobile_margin_bottom":"10"},"blocks":{},"block_order":[]},"1715754702876_1":{"type":"_index_product_banner","custom_name":"橫幅廣告","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzIzNzgxNzk0X-apq-aineWcll9TSC5qcGcucG5nIl1d.png?sha=406cb570af90d91a","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"/pages/品牌頁-small-hands","cta_btn_display_style":"bottomPosition","cta_btn_bg_color":"#000000","cta_btn_text_color":"#ffffff","margin_x":"100","margin_bottom":"10","mobile_margin_x":"0","mobile_margin_bottom":"10","display_cta_btn":false},"blocks":{},"block_order":[]},"1715754706164_1":{"type":"_index_product_banner","custom_name":"橫幅廣告","visible":false,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE1NzY1MjczX-a-jua-juijmU5FVy5naWYuZ2lmIl1d.gif?sha=9c159cd1d8cceb3a","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","cta_btn_display_style":"topPosition","cta_btn_bg_color":"#000000","cta_btn_text_color":"#ffffff","margin_x":"0","margin_bottom":"10","mobile_margin_x":"0","mobile_margin_bottom":"10"},"blocks":{},"block_order":[]},"1715852324160_4":{"type":"_index_4_blocks","custom_name":"自訂排版設計","visible":true,"settings":{"margin_x":"0","margin_bottom":"15","margin_block":"10","mobile_margin_x":"0","mobile_margin_bottom":"15","mobile_columns":1,"mobile_margin_block":"10"},"blocks":{"1715852324162_0":{"type":"image","custom_name":"圖片","visible":true,"settings":{"dict_image_url":"//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzE1ODUyMzQzX0JFU1QgU0VMTEVSUy0wMS5wbmcucG5nIl1d.png?sha=16610fd56c6fa482","dict_tablet_image_url":"","dict_mobile_image_url":"","dict_link":"","dict_image_description":""}}},"block_order":["1715852324162_0"]},"1716183681841_2":{"type":"_index_8_blocks","custom_name":"商品分類","visible":true,"settings":{"dict_title":"","collection_handle":"my-first-book","limit":"4","product_arrangement":"1","product_alignment":"midPosition","margin_x":"50","margin_bottom":"50","mobile_margin_x":"40","mobile_margin_bottom":"","product_display":"displayAll","product_text_align":"start","product_column_for_pc":"4","product_column_for_mobile":"2","product_card_hover_effect":"button","product_image_border_radius":"15"},"blocks":{},"block_order":[]},"1716184002575_2":{"type":"_index_8_blocks","custom_name":"商品分類","visible":false,"settings":{"dict_title":"","collection_handle":"inuibebe","limit":"4","product_arrangement":"1","product_alignment":"midPosition","margin_x":"50","margin_bottom":"50","mobile_margin_x":"40","mobile_margin_bottom":"","product_display":"displayAll","product_text_align":"start","product_column_for_pc":"4","product_column_for_mobile":"2","product_card_hover_effect":"button","product_image_border_radius":"15"},"blocks":{},"block_order":[]},"1716184084965_2":{"type":"_index_8_blocks","custom_name":"商品分類","visible":false,"settings":{"dict_title":"","collection_handle":"clothing","limit":"4","product_arrangement":"1","product_alignment":"midPosition","margin_x":"50","margin_bottom":"50","mobile_margin_x":"40","mobile_margin_bottom":"20","product_display":"displayAll","product_text_align":"start","product_column_for_pc":"4","product_column_for_mobile":"2","product_card_hover_effect":"button","product_image_border_radius":"15"},"blocks":{},"block_order":[]},"1723782024539_2":{"type":"_index_8_blocks","custom_name":"商品分類","visible":true,"settings":{"dict_title":"","collection_handle":"small-hands-兒童小手布書","limit":"4","product_arrangement":"1","product_alignment":"midPosition","margin_x":"50","margin_bottom":"50","mobile_margin_x":"40","mobile_margin_bottom":"0","product_display":"displayAll","product_text_align":"start","product_column_for_pc":"4","product_column_for_mobile":"2","product_card_hover_effect":"button","product_image_border_radius":"15"},"blocks":{},"block_order":[]},"announcement_bar":{"type":"announcement_bar","visible":true,"blocks":{"announcement_bar_block_1":{"type":"image","visible":true,"settings":{"display_only_index":false,"display_period":"always","dict_link":"","link_open_in_new_tab":false,"dict_image_url":"","dict_image_tablet_url":"","dict_image_mobile_url":"","image_alt":"","dict_content":"","text_size":"12","text_color":"#ffffff","bg_color":"#000000","timer_text_color":"#c39d6f","timer_bg_color":"#2b2b6e","migrated_from_navbar":true}}},"block_order":["announcement_bar_block_1"],"settings":{"display_mode":"vertical","carousel_interval":"3"}}},"navbar_image_logo":true,"show_default_all_products":true,"one_dimension_limit":"
456","two_dimension_limit":"10","header_banner_display":true,"header_banner_link":"/","display_main_slider":true,"display_phone":true,"phone_number":"0912345678","display_fax_number":true,"shop_fax_number":"0222345678","display_shop_email":true,"shop_email":"[email protected]","display_shop_address":true,"shop_address":"測試地址","display_office_time":true,"shop_office_time":"10:00-17:00","index_event_slider_display":true,"index_event_slider_item_1_display":true,"dict_index_event_slider_item_1_link":"#","index_event_slider_item_2_display":true,"dict_index_event_slider_item_2_title":"2019秋季鞋款新品上市","dict_index_event_slider_item_2_link":"#","index_event_slider_item_3_display":true,"dict_index_event_slider_item_3_title":"全館任選三件結帳再享折扣!!8折!!","dict_index_event_slider_item_3_link":"#","index_event_slider_item_4_display":true,"dict_index_event_slider_item_4_title":"FINAL SALE/夏天熱銷百搭鞋款補貨到店","dict_index_event_slider_item_4_link":"#","index_event_slider_item_5_display":true,"dict_index_event_slider_item_5_title":"熱賣倒數","dict_index_event_slider_item_5_link":"#","index_event_slider_item_6_display":true,"dict_index_event_slider_item_6_title":"現在註冊會員即可享折扣金$50(現折)","dict_index_event_slider_item_6_link":"#","index_event_slider_item_7_display":false,"dict_index_event_slider_item_7_title":"","dict_index_event_slider_item_7_link":"","index_event_slider_item_8_display":false,"dict_index_event_slider_item_8_title":"","dict_index_event_slider_item_8_link":"#","index_event_slider_item_9_display":false,"dict_index_event_slider_item_9_title":"","dict_index_event_slider_item_9_link":"#","index_event_slider_item_10_display":false,"dict_index_event_slider_item_10_title":"","dict_index_event_slider_item_10_link":"#","index_4_slider_display":true,"dict_index_4_slider_title":"Instagram","index_4_slider_item_1_display":true,"dict_index_4_slider_item_1_link":"#","index_4_slider_item_2_display":true,"dict_index_4_slider_item_2_link":"#","index_4_slider_item_3_display":true,"dict_index_4_slider_item_3_link":"#","index_4_slider_item_4_display":true,"dict_index_4_slider_item_4_link":"#","index_4_slider_item_5_display":true,"dict_index_4_slider_item_5_link":"#","index_4_slider_item_6_display":false,"dict_index_4_slider_item_6_link":"#","index_4_slider_item_7_display":false,"dict_index_4_slider_item_7_link":"#","index_4_slider_item_8_display":false,"dict_index_4_slider_item_8_link":"#","index_video_blocks_display":true,"dict_index_video_blocks_title":"Youtube","dict_index_video_blocks_video_link":"https://www.youtube.com/watch?v=3bI4IUIVjCk","collection_sidebar":"main-menu","collection_sidebar_set_open":false,"collection_pagination_limit":"24","product_slogan_display":false,"display_product_total_sold":false,"display_periodic_order_label":false,"cart_quantity_limit":"0","is_empty_clickable":true,"is_first_selected":false,"display_product_images_color":false,"discount_product_images_color_expand":false,"display_product_discounts_list":true,"display_discount_price_name":false,"discount_price_slogan_url":"","dict_discount_price_name":"","display_discount_price_suggestion_name":false,"dict_discount_price_suggestion_name":"","display_product_section_description":true,"dict_product_section_description":"商品介紹","description_section_spec_setting":true,"dict_product_description_section_spec":"規格說明","description_section_shipping_setting":true,"dict_product_description_section_shipping":"運送方式","vip_custom_price_visible":false,"display_global_event_1":false,"dict_show_global_event_1_link":"#","display_global_event_2":false,"dict_show_global_event_2_link":"#","display_global_event_3":false,"dict_show_global_event_3_link":"#","display_contact_address":true,"dict_contact_address":"測試地址","show_google_map":true,"show_google_map_iframe":"\u003ciframe src=\"https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3613.6479170127777!2d121.56760821400371!3d25.07991984260527!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3442ac6fbd841bbd%3A0x64e16bcf25e3da31!2zMTE05Y-w5YyX5biC5YWn5rmW5Y2A55Ge5YWJ6LevNTEz5be3MzDomZ8!5e0!3m2!1szh-TW!2stw!4v1485156761267\" width=\"600\" height=\"450\" frameborder=\"0\" style=\"border:0\" allowfullscreen\u003e\u003c/iframe\u003e","display_selected_blog":true,"selected_blog":"news","display_inventory_policy":true,"google_font":"{'ja':{'value':'Noto Sans JP'},'zh-TW':{'value':'Noto Sans TC'},'en':{'value':'Noto Sans TC'},'zh-CN':{'value':'Noto Sans TC'}}","styled_shop_menu":"buttonType","product_scale":"default_scale","display_product_vendor":true,"product_video_display_location":"before","product_text_align":"center","product_labels":{"items":[{"id":"sale_label","kind":"system","title":"特價標籤","display":false,"type":"text","dict_text":{},"image":"","image_size":"large"},{"id":"out_of_stock_label","kind":"system","title":"缺貨標籤","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"},{"id":"periodic_event_label","kind":"system","title":"定期定額標籤","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"},{"id":"91803fab-1949-406c-ae8f-b54dfb7037f9","kind":"custom","title":"自定義標籤 1","tag":"","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"},{"id":"de685307-c7e0-4dcd-bb05-df67a964a8bd","kind":"custom","title":"自定義標籤 2","tag":"","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"}
45,{"id":"14174e97-66e1-459a-923d-18d3c6572967","kind":"custom","title":"自定義標籤 3","tag":"","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"},{"id":"99df71b2-c9de-44e0-9335-8490784eb197","kind":"custom","title":"自定義標籤 4","tag":"","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"},{"id":"e86a5c2b-1263-41ce-a2b3-9d0ddfa19f71","kind":"custom","title":"自定義標籤 5","tag":"","display":false,"type":"text","dict_text":{},"image":"","image_size":"small"}]},"nav_icon_style":"icon_type_default","product_card_hover_effect":"button","product_image_border_radius":"0"});
46  </script>
46
47
48
49
50
51
52
53
54
55
56
57    <!-- for vendor -->
58    <!-- cyb_snippet _bootstrap start -->
59
60<!-- cyb_snippet _bootstrap end -->
61    <link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/vendor-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
62
63    <!-- common css rulesets -->
64    <link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/common-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
65
66    <!-- for navbar -->
67    <link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/navbar-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
68
69    <!-- for footer -->
70    <link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/footer-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
71
72    <!-- theme assets -->
73    <link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/main-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
74
75    <!-- for vendor -->
76    
76<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/vendor-3a2e378145f8a165.js' type='text/javascript'></script>
76
77
78            
78<script>
79          window.sci = "eyJzaG9wX2lkIjoyMzgzMiwic2hvcF9wbGFuIjoibWFzdGVyX3BsdXMiLCJk\naW1fYWZmaWxpYXRlIjpudWxsLCJjdXN0b21lcl9pZCI6bnVsbCwiY3VzdG9t\nZXJfbmFtZSI6bnVsbCwic2hvcF9uYW1lIjoi56iu5a2Q5p2RU2VlZCBWaWxs\nYWdlIiwic2hhcmVfYXR0cmlidXRpb25fZW5hYmxlZCI6ZmFsc2V9\n";
80        </script>
80
81
82
83<meta name="csrf-param" content="authenticity_token" />
84<meta name="csrf-token" content="zMzrPgl8_GW8JRy0Z8inR_0n8tL-DBCvZcIR8FgMf26VrePZ5Ysq8JfTTzczzbF9oCrdYjudal_BbGjSv5Go8g" />
85<script>(function () {
86  window.gaConfigurations = {"useProductIdInProductEvents":false};
87})();
88</script>
vendor: 1 bytes, line 88
88
89<script>(function () {
90  window.CYBERBIZ_PageContext = {"page_type":"product"};
91})();
92</script>
92
93<link href="//cdn-general.cybassets.com/frontend/shop/quark-3a2e378145f8a165.css" rel="stylesheet" type="text/css" media="all" />
94        
94<script>
95          window.shopScriptHelper = {
96            i18nLocale: "zh-TW",
97            i18nLocaleDefault: "zh-TW",
98            availableCurrencies: [],
99            defaultCurrency: "TWD",
100            currenciesInfo: [{"decimal_precision":0,"symbol":"NT$","name":"新台幣 (TWD)","html":"NT${{amount_no_decimals}}","email_unit":"NT${{amount_no_decimals}}","html_unit":"NT${{amount_no_decimals}}","unit":"","trailing_zeros":false,"format":"NT${{amount_no_decimals}}","code":"TWD","money_format":"%u%n","email":"NT${{amount_no_decimals}}"}],
101            vueOverrideTranslations: {"zh-TW":{"vue":{"theme_pages":{"order_return":{"address1":"詳細退貨地址:路/巷/弄/號/樓","keyin_address1":"請填寫詳細退貨地址:路/巷/弄/號/樓"}}}}},
102            hasI18nInContextEditing: false,
103            shopMultipleCurrenciesCheckout: false,
104            hasLocalizedShopPriceFormat: true,
105          }
106        </script>
106
107
108        
109        
109<script
110          src="//cdn-general.cybassets.com/frontend/shop/tolgeeIntegration-3a2e378145f8a165.js">
111        </script>
111
112        
112<script defer>
113          /*
114          * Enable in-context translation for Liquid part on the page.
115          * This must be executed last to prevent conflicts with other Vue apps.
116          * So put it to `onload`, which will be executed after DOM ready's app mount
117          */
118          window.onload = function() {
119            if (
120              window.shopScriptHelper &&
121              window.shopScriptHelper.hasI18nInContextEditing
122            ) {
123              window.initTolgeeForLiquid()
124            }
125          }
126        </script>
126
127
128<script> var google_con_event_labels = []</script>
vendor: 1 bytes, line 128
128
129<script src="//cdn-general.cybassets.com/frontend/shop/pageEventHandler-3a2e378145f8a165.js"></script>
vendor: 1 bytes, line 129
129
130<script src="//cdn-general.cybassets.com/frontend/shop/globalAnalysis-e4c650eb0b.js"></script>
130
131        
131<script>
132          window.c12t = {"customer_id":null,"product":{"id":55275958,"name":"My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲","price":2650.0,"brand":"種子村Seed Village"}};
133        </script>
133
134
135        <meta name="request-id" content="77676A6C41D8564C3091987445E5DA45"/>
136
137<link rel="canonical" href="https://www.seedvillageglobal.com/products/mfb1004-20250502120342">
138<script src="//cdn-general.cybassets.com/frontend/shop/carousel-3a2e378145f8a165.js"></script>
138
139          
139<script>
140            window.parent.postMessage({ type: 'previewShopInit', currentUrl: window.location.href }, '*');
141          </script>
141
142
143<script src="//cdn-general.cybassets.com/frontend/appStoreSDK/main.2798231628aa7fab87a9.js"></script>
vendor: 1 bytes, line 143
143
144<script>window.CYBERBIZ_AppScriptSettings = {"shop_add_ons":"W3sidmVuZG9yX3R5cGUiOiJHb29nbGUgQW5hbHl0aWNzIDQiLCJhcHBfaWQi\nOiJSYkpWMTVFcVZWOHJ1Umo3NVlmV3Z1RUlDRm90Q0FPZm0xSDZtZ3hyNkZB\nIiwic2V0dGluZ3MiOnsiZ3RhZ19pZCI6IkctVDBGVzIyMENOUCwgR1QtNU1S\nNDJNMywgRy1GTVpLQlpEVENDLCBHLVNHWFlTM0hOMlosIEdULUtUNEJHRkMs\nIEctTDNYRzNSNDlRMSJ9fSx7InZlbmRvcl90eXBlIjoiQ1lCRVJCSVogR29v\nZ2xlIEFuYWx5dGljcyA0IiwiYXBwX2lkIjoiUVVqNVpxb2VJT1I5WjNiWktr\nazBuODd5eWtBaTllNDVERGgydGJRZ2lCQSIsInNldHRpbmdzIjp7Imd0YWdf\naWQiOiJHLUgyRDg3N1NSNkssIEctNEI3Uks3RkhXSCJ9fSx7InZlbmRvcl90\neXBlIjoiQ2hhdCBCb3giLCJhcHBfaWQiOiJjOWQ4M2YwOTk2MTc0ZmJiYTg2\nZWJhMDQxYWU4OThhMiIsInNldHRpbmdzIjp7IndpZGdldF9rZXkiOiJZbjd2\nLV9YYUhQd3RUbkdsIn19XQ==\n"}
145</script>
vendor: 1 bytes, line 145
145
146<script src="https://cdn.cybassets.com/appmarket/api/common/attachments/entrypoint/a810ec58aab67d16f8de1c4adf06fc7cc9f4477ec503b9cb1a998741bc692652.js"></script>
vendor: 1 bytes, line 146
146
147<script src="https://cdn.cybassets.com/appmarket/api/common/attachments/entrypoint/9d6f4550aad572e9f70abb70ae5a6552482cf617ea5e4d5a32ed4ebbb5d60d54.js"></script>
vendor: 1 bytes, line 147
147
148<script src="https://cdn.cybassets.com/appmarket/api/common/attachments/entrypoint/8766542902afa60f4adda3c555c06025d2c27771ea85a6fc657a91cddbe5c59f.js"></script>
vendor: 1 bytes, line 148
148
149<script>window.CYBERBIZ.initializeSDK.initialize();</script>
vendor: 1 bytes, line 149
149
150<script src="//cdn-general.cybassets.com/frontend/shop/setAffliateCookie-3a2e378145f8a165.js"></script>
150
151
152        <!-- LINE Tag Setting -->
153        
153<script>
154          var ltas = [{"customerType":"account","tagId":"4d7caf1c-df94-49d8-84d1-eebd81f29a42"},{"customerType":"account","tagId":"9a6567f0-7950-4c96-9c04-e92f424268a7"},{"customerType":"account","tagId":"c244ad7b-bad4-45aa-a3fd-4aa0cad8d094"},{"customerType":"lap","tagId":"32bb87af-526c-497c-8c5e-b51ed2114c4b"},{"customerType":"account","tagId":"4559ebf3-a73e-44b2-a59d-a32fb21caf95"},{"customerType":"account","tagId":"0f7dddb7-57b0-44cb-9714-a5ccdccf4a41"}];
155          var lts = ["4d7caf1c-df94-49d8-84d1-eebd81f29a42","9a6567f0-7950-4c96-9c04-e92f424268a7","c244ad7b-bad4-45aa-a3fd-4aa0cad8d094","32bb87af-526c-497c-8c5e-b51ed2114c4b","4559ebf3-a73e-44b2-a59d-a32fb21caf95","0f7dddb7-57b0-44cb-9714-a5ccdccf4a41"];
156        </script>
156
157        <!-- End LINE Tag Setting -->
158
159          <!-- LINE Tag Base Code -->
160          <!-- Do Not Modify -->
161          
161<script>
162          (function(g,d,o){
163            g._ltq=g._ltq||[];g._lt=g._lt||function(){g._ltq.push(arguments)};
164            var h=location.protocol==='https:'?'https://d.line-scdn.net':'http://d.line-cdn.net';
165            var s=d.createElement('script');s.async=1;
166            s.src=o||h+'/n/line_tag/public/release/v1/lt.js';
167            var t=d.getElementsByTagName('script')[0];t.parentNode.insertBefore(s,t);
168              })(window, document);
169          ltas.forEach(function(lta){
170            _lt('init', { customerType: lta.customerType, tagId: lta.tagId });
171            _lt('send', 'pv', [lta.tagId]);
172          });
173          </script>
173
174          <noscript>
175            <img height="1" width="1" style="display:none" src="https://tr.line.me/tag.gif?c_t=lap&t_id=e317566c-9fe5-48de-bc28-d6a2d773853a&e=pv&noscript=1" />
176          </noscript>
177          <!-- End LINE Tag Base Code -->
178
179          
179<script>
180            window.addEventListener('load', function() {
181              _lt('send', 'cv', { type: 'PageView' }, lts);
182            });
183          </script>
183
184
185          
185<script>
186            window.addEventListener('load', function() {
187              $(document).on('sendAddToCartEvent', function() {
188                _lt('send', 'cv', { type: 'AddToCart' }, lts);
189              });
190              $(window).on('addToCart', function() {
191                _lt('send', 'cv', { type: 'AddToCart' }, lts);
192              });
193            });
194          </script>
194
195
196          
196<script>
197            window.addEventListener('load', function() {
198              _lt('send', 'cv', { type: 'ViewContent' }, lts);
199            });
200          </script>
200
201
202
203
204
205
206
207<meta name="title" content="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲 | 種子村Seed Village">
208<meta property="og:title" content="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲 | 種子村Seed Village">
209<meta name="description" content="全球熱銷破千萬冊,被譽為圖畫書界的聖經——美國繪本大師 Eric Carle 經典之作《好餓的毛毛蟲》當世界級繪本遇上 My First Book我們將《好餓的毛毛蟲》化作一冊結合蒙特梭利理念的布書啟蒙教材從毛毛蟲變蝴蝶的奇妙旅程中帶寶寶學會同理心、啟發創造力、並透過豐富小機關刺激五官發展🌿若有任何疑問歡迎加入官方LINE聯繫ID: @seedvillage">
210<meta property="og:description" content="全球熱銷破千萬冊,被譽為圖畫書界的聖經——美國繪本大師 Eric Carle 經典之作《好餓的毛毛蟲》當世界級繪本遇上 My First Book我們將《好餓的毛毛蟲》化作一冊結合蒙特梭利理念的布書啟蒙教材從毛毛蟲變蝴蝶的奇妙旅程中帶寶寶學會同理心、啟發創造力、並透過豐富小機關刺激五官發展🌿若有任何疑問歡迎加入官方LINE聯繫ID: @seedvillage">
211<meta name="keywords" content="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲">
212<meta property="og:url" content="https://www.seedvillageglobal.com/products/mfb1004-20250502120342">
213<meta property="og:type" content="og:product">
214<script type="application/ld+json">{"@context":"https://schema.org/","@type":"Product","name":"My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲","image":"https://cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfYTYwNGJkNTNhNTFhNDg3ZGI5MjYuanBlZyJdLFsicCIsInRodW1iIiwiNDgweDQ4MCJdXQ.jpeg?sha=378239f89dbe92e5","description":"全球熱銷破千萬冊,被譽為圖畫書界的聖經——\n美國繪本大師 Eric Carle 經典之作《好餓的毛毛蟲》\n\n當世界級繪本遇上 My First Book\n我們將《好餓的毛毛蟲》化作一冊結合蒙特梭利理念的布書啟蒙教材\n從毛毛蟲變蝴蝶的奇妙旅程中\n帶寶寶學會同理心、啟發創造力、並透過豐富小機關刺激五官發展🌿\n\n若有任何疑問歡迎加入官方LINE聯繫\nID: @seedvillage","brand":"種子村Seed Village","sku":"MFB1006","offers":{"@type":"Offer","url":"https://www.seedvillageglobal.com/products/mfb1004-20250502120342","priceCurrency":"TWD","price":"2650.0","priceValidUntil":"","availability":"InStock"},"productId":55275958}</script>
214
215
216      
216<script>
217        document.addEventListener("DOMContentLoaded", function() {
218          gtag('event', 'view_item', {"items":[{"id":66368633,"name":"My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲","price":2650.0}],"send_to":["cyberbiz","dynamic_remarketing"]});
219        })
220      </script>
220
221    
222
223      
223<script>
224        document.addEventListener("DOMContentLoaded", function() {
225          try {
226            var productData = [{"id":"MFB1006","product_id":55275958,"variant_id":66368633,"sku":"MFB1006","name":"My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲","price":2650.0,"compare_at_price":2650.0,"currency":"TWD","inventory_quantity_status":"safety","category":null,"categories":["My First Book 布書"],"properties":[],"list_name":""}];
227
228            if (document.referrer.indexOf('collection') !== -1 || document.referrer.indexOf('products') !== -1) {
229              for (var i = 0; i < productData.length; i++) {
230                productData[i].list_name = sessionStorage.getItem("viewedCollection");
231              }
232            }
233
234            window.CYBERBIZ.eventSDK.callEvent("viewItem", productData)
235
236            window.addEventListener("beforeunload", function(event) {
237              var collection = "相關商品";
238              sessionStorage.setItem("viewedCollection", collection);
239            });
240
241          } catch (error) {
242            console.error('Exception catched in appMarketViewItemEvent')
243          }
244        })
245      </script>
245
246    
247<meta name="robots" content="noindex">
248<script src="//cdn-general.cybassets.com/frontend/shop/gallery-3a2e378145f8a165.js"></script>
248
249
250    <style id="color_settings">
251  :root {
252    
253      --button: #000000;
254    
255
256    
257      --button_text: #FFFFFF;
258    
259
260    
261      --accent: #0087ed;
262    
263
264    
265      --heading: #565656;
266    
267
268    
269      --text: #9A9EA2;
270    
271
272    
273      --price: #292929;
274    
275
276    
277      --discount_price: #d91818;
278    
279
280    
281      --theme_bg: #FFFFFF;
282    
283
284    
285      --nav_logo_bg: #60765f;
286    
287
288    
289      --nav_menu_bg: #b9cc99;
290    
291
292    
293      --nav_menu_text: #f8f8f8;
294    
295
296    
297      --nav_menu_icon: #e5e5e5;
298    
299
300    
301      --footer_bg: #60765f;
302    
303
304    
305      --footer_text: #ffffff;
306    
307
308    
309      --checkout_button: #db1a1a;
310    
311
312    
313      --checkout_accent: #292929;
314    
315
316    
317      --product_border: #E2E2E2;
318    
319
320    
321      --tips_text: #0C5460;
322    
323
324    
325
326    
327  }
328</style>
329
330
331
332
333  
334        <!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 74 bytes, lines 334-335
334
335          <script async src="https://www.googletagmanager.com/gtag/js?id=
335G-H2D877SR6K
vendor: 22 bytes, lines 335-336
335"></script>
336          
336<script>
337            window.dataLayer = window.dataLayer || [];
338            function gtag(){dataLayer.push(arguments);}
339            gtag('js', new Date());
340            
341            
342      </script>
342
343      
343<script>
344        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
345        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
346        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
347        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
348
349        ga('create', '', 'auto', {'name': 'cyberbiz'});
350        ga('cyberbiz.require', 'displayfeatures');
351        ga('cyberbiz.set', 'dimension1', '23832');
352        ga('cyberbiz.require', 'ec');
353        ga('cyberbiz.send', 'pageview');
354      </script>
354
355    
356      
356<script>
vendor: 426 bytes, lines 356-363
356
357      !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
358      n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
359      n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
360      t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
361      document,'script','//connect.facebook.net/en_US/fbevents.js');
362
363      fbq('init', '
363648763002584458
vendor: 38 bytes, lines 363-364
363', {}, {'agent':'plcyberbiz'});
364      
364fbq('track', "PageView", '', { eventID: "PageView_77676A6C41D8564C3091987445E5DA45" });
365      var facebook_pixel_id = '648763002584458'</script>
365
366
367    </head>
368
369  <body style="display: flex; flex-direction: column;">
vendor: 74 bytes, lines 369-371
369
370      <noscript><iframe
371      src="//www.googletagmanager.com/ns.html?id=
371GTM-TXD9LVJ
vendor: 117 bytes, lines 371-377
371"
372      height="0"
373      width="0"
374      style="display:none;visibility:hidden">
375      </iframe></noscript>
376    
377    
377<!-- Navigation -->
378    <!-- cyb_snippet liquid_helper start -->
379<script>
380	function getDiscountPriceName() {
381		return "false" === "true" ? "" : "";
382	}
383
384	function getDiscountPriceSuggestionName() {
385		return "false" === "true" ? "" : "";
386	}
387
388  document.addEventListener('DOMContentLoaded', function() {
389    const languageHandle = Cookies.get("language");
390    const defaultLanguage = {"handle":"zh-TW","title":"繁體中文","currency_code":"TWD"};
391    const languages = [];
392    const currency = window.shopScriptHelper.defaultCurrency;
393    const currencies = window.shopScriptHelper.currenciesInfo;
394		window.liquidHelper = {
395			shopInternational: false,
396			defaultLanguage: defaultLanguage,
397			language: languages.find(function(l) {
398				return l.handle === languageHandle;
399			}) || defaultLanguage,
400      shopMultipleCurrenciesCheckout: false,
401			shopMultipleCurrencies: false,
402			defaultCurrencyFormat: "NT${{amount_no_decimals}}",
403			defaultCurrency: currency,
404			getCurrency: function() {
405        const currencyValue = Cookies.get("currencyValue") || currency;
406        return currencies.find(function(c) { return c.code === currencyValue; }
407      )},
408      getDefaultCurrency: function() { return currencies.find(function(c) {
409				return c.code === currency;
410			})},
411      getAvailableCurrencies: function() { return currencies.map(c => c.code) },
412      getCurrencyFormatInfo: function(currency) {
413        const currencyInfo = currencies.find(c => c.code === currency)
414        return _.pick(currencyInfo, [
415          'decimal_precision',
416          'symbol',
417          'money_format',
418          'unit',
419          'trailing_zeros',
420          'html_unit',
421          'code',
422        ]);
423      },
424			cartQuantityLimit: (function() {
425        const limit = Number("0" || undefined);
426        return limit <= 0 || isNaN(limit) ? Number.POSITIVE_INFINITY : limit;
427      })(),
428			isFirstVariantSelected:  false ,
429			isImageColorsUsed:  false ,
430			isEmptyClickable:  true ,
431			hasAddBuyProduct: '' !== "" ? true : false,
432			hasPriceWithDiscountPlugin: 'true' ? true : false,
433      conversionBonus: 1,
434      hasLocalizedShopPriceFormat: true,
435      hasCustomerCartPlugin: true,
436      isCartEnabled: true,
437      cdnHost: '//cdn-general.cybassets.com',
438      hasShopCustomPasswordRulePlugin: false,
439      hasDisableProductQuantityValidation: false,
440      hasBreadcrumbReferrerEnabled: false,
441		};
442	});
443</script>
443
444
445<!-- cyb_snippet liquid_helper end -->
446
447<script src='//cdn-general.cybassets.com/frontend/shop/navbarSection-3a2e378145f8a165.js' type='text/javascript'></script>
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464<style>
465  
466    #navbar {
467      --navbar-pc-title-scale: 1.0;
468      --navbar-pc-body-scale: 1.0;
469      --navbar-mobile-title-scale: 1.0;
470      --navbar-mobile-body-scale: 1.0;
471    }
472  
473
474  
475
476  
477</style>
478
479
480  <span id="navbar" class="drawer drawer--left font-size-setting-enabled">
481    <header id="header" class="qk-w--100vw qk-pos--fixed qk-t--0 qk-l--0">
482      
483
484      
485        <div id="announcement-bar"></div>
486      
487
488      
489      
490        <div class="computer_nav qk-hidden--mobile ">
491          <div class="header_logo qk-bg--nav_logo_bg">
492            <div class="qk-pos--rel">
493              <div class="qk-text--center">
494                <!-- logo start -->
495                
496                  <nav class="logo qk-display--il_bk">
497                    <a href="/" class="qk-w--100">
498                      <img
499                        src="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzEyNzQwMzgxX1NlZWRfbG9nb193aGl0ZS5wbmcucG5nIl1d.png?sha=b64f8260c6bc2e48"
500                        class="qk-tst qk-tst_dur--15 qk-tst_timing--ease_io qk-tst_prop--pc_logo qk-hidden--mobile"
501                        style="width: auto; height: 52px;"
502                        alt=""
503                        height="52"
504                        width="auto"
505                      >
506                    </a>
507                  </nav>
508                
509                <!-- logo end -->
510                <!-- tool-nav start -->
511                
512                  <!-- cyb_snippet tool_nav start -->
513
514
515
516
517
518
519<nav class="tool-nav qk-pos--rel qk-float--r qk-display--flex">
520  <ul class="link_shelf_top qk-display--flex qk-flex--row qk-justify--end qk-align--center qk-pos--abs qk-r--0">
521    
522    
523    <!-- member -->
524    
525      <li class="customer_account qk-pos--rel qk-pd--05">
526        <div class="dropdown qk-pos--static">
527          <div class="qk-cursor--pointer" data-toggle="dropdown">
528            <div data-icon-type="custom_icon_type_account"></div>
529            <span class="text"></span>
530          </div>
531          <div class="member qk-dropdown_menu dropdown-menu qk-pos--abs qk-r--0 qk-bd--default qk-bd--product_border qk-bg--theme_bg" role="menu">
532            <ul id="customer-logined-menu" style="display: none">
533              <li>
534                <div class="qk-fs--body qk-text--heading">
535                  <p class="customer-name qk-whitespace-break-spaces"></p>
536                  <p>您好!</p>
537                </div>
538              </li>
539            </ul>
540            <ul id="customer-not-login-menu">
541              <li class="button qk-text--center">
542                <a href="/account/login" class="btn-login qk-btn qk-btn--lg qk-btn--primary qk-w--100">會員登入</a>
543              </li>
544              <li class="button qk-text--center">
545                <a href="/account/signup" class="btn-orders qk-btn qk-btn--lg qk-btn--secondary qk-w--100 qk-bg--transparent">註冊新會員</a>
546              </li>
547            </ul>
548            <span class="menu-bd qk-bd_t--default qk-bd--product_border"></span>
549            <ul class="member-menu qk-bd_t--default qk-bd--product_border">
550              <li class="qk-bg--mask_hover qk-tst qk-tst_dur--15 qk-tst_timing--ease_io qk-tst_prop--bg">
551                <a href="/account/index" class="qk-fs--body qk-text--heading qk-w--100 qk-display--il_bk">我的帳戶</a>
552              </li>
553              <li class="qk-bg--mask_hover qk-tst qk-tst_dur--15 qk-tst_timing--ease_io qk-tst_prop--bg">
554                <a href="/account/orders" class="qk-fs--body qk-text--heading qk-w--100 qk-display--il_bk">訂單查詢</a>
555              </li>
556              <li class="qk-bg--mask_hover qk-tst qk-tst_dur--15 qk-tst_timing--ease_io qk-tst_prop--bg">
557                <a href="/account/coupons" class="qk-fs--body qk-text--heading qk-w--100 qk-display--il_bk">專屬優惠券</a>
558              </li>
559              <li class="qk-bg--mask_hover qk-tst qk-tst_dur--15 qk-tst_timing--ease_io qk-tst_prop--bg">
560                <a href="/account/tracking_items" class="qk-fs--body qk-text--heading qk-w--100 qk-display--il_bk">收藏清單</a>
561              </li>
562              <li class="qk-bg--mask_hover qk-tst qk-tst_dur--15 qk-tst_timing--ease_io qk-tst_prop--bg customer-logout-li" style="display: none">
563                <a href="/account/logout" class="qk-fs--body qk-text--heading qk-w--100 qk-display--il_bk">會員登出</a>
564              </li>
565            </ul>
566          </div>
567        </div>
568      </li>
569    
570    <!-- for money symbol -->
571    <div id="money-symbol" data-money-symbol="NT${{amount_no_decimals}}" hidden></div>
572    <!-- cart -->
573    
574      <li class="cart qk-pos--rel qk-pd--05">
575        <!--電腦版的購物車選單-->
576        <div class="dropdown qk-pos--static">
577          <div data-toggle="dropdown" class="shopcart qk-cursor--pointer" >
578            <div data-icon-type="custom_icon_type_cart"></div>
579            <span class="global-cart-count qk-circle qk-circle--sm qk-bg--accent qk-text--white qk-vert--mid qk-pos--abs qk-bd" style="display: none;">0</span>
580            <span class="global-cart-loading"></span>
581          </div>
582          <div class="qk-dropdown_menu dropdown-menu qk-pos--abs qk-r--0 qk-bd--default qk-bd--product_border qk-bg--theme_bg" role="menu">
583            <div class="cart_list global-cart-item-list custom-scrollbar qk-of_x--hidden qk-of_y--scroll qk-of_y--overlay qk-display--flex qk-flex--column qk-justify--between default_scale"></div>
584            <p class="cart_empty qk-fs--body qk-text--heading qk-text--center">目前的購物車是空的!</p>
585            <ul>
586              <li class="button qk-text--center">
587                <a class="btn-checkout qk-btn qk-btn--lg qk-btn--primary qk-w--100" href="/cart" style="display: none">立即購買</a>
588                <a class="btn-tracking qk-btn qk-btn--lg qk-btn--secondary qk-w--100 qk-bg--transparent" href="/account/tracking_items">前往收藏清單</a>
589              </li>
590            </ul>
591          </div>
592        </div>
593      </li>
594    
595    <!-- search -->
596    
597      <li class="search qk-pos--rel qk-pd--05" id="search-icon">
598        <div class="dropdown qk-pos--static">
599          <div class="qk-cursor--pointer" data-toggle="dropdown">
600            <div data-icon-type="custom_icon_type_search"></div>
601          </div>
602          <div class="qk-dropdown_menu dropdown-menu qk-pos--abs qk-r--0 qk-bd--default qk-bd--product_border qk-bg--theme_bg" role="menu">
603            <div class="search-area qk-display--flex qk-flex--row qk-justify--start qk-align--center qk-vert--mid">
604              <form action="/search" class="form-inline qk-search_form qk-display--flex qk-justfify--between qk-align--center qk-flex--1">
605                <input class="search-input form-control qk-inputbox qk-inputbox--lg qk-flex--1 qk-w--100 qk-bg--transparent qk-text--heading" type="search" placeholder="搜尋" aria-label="Search" name="q" value="" />
606                <button class="search-btn qk-btn qk-btn--lg qk-btn--primary qk-pd--0" type="submit">搜尋</button>
607              </form>
608            </div>
609          </div>
610        </div>
611      </li>
612    
613    <!-- express delivery -->
614    
615  </ul>
616</nav>
617
618<!-- cyb_snippet tool_nav end -->
619                
620                <!-- tool-nav end -->
621              </div>
622            </div>
623          </div>
624          
625            <div class="header_nav qk-bg--nav_menu_bg">
626              <div class="qk-pd_x--15">
627                <div class="qk-pos--relative center">
628                  <!-- main-nav start -->
629                  <nav class="main_nav qk-display--init"></nav>
630                  <!-- main-nav end -->
631                </div>
632              </div>
633            </div>
634          
635        </div>
636      
637      <div class="qk-hidden--pc  ">
638        <!-- mobile-nav start -->
639        <nav class="mobile-nav qk-bg--nav_logo_bg">
640          <ul class="qk-display--flex qk-flex--row qk-justify--between qk-align--center qk-pd_x--05 qk-pd_y--0">
641            <!-- menu -->
642            
643              <li class="sidebar-menu-icon drawer-toggle qk-text--center qk-pd_x--05 qk-pd_y--0 qk-display--flex qk-align--center">
644                <div data-icon-type="custom_icon_type_menu"></div>
645              </li>
646            
647            <!-- logo -->
648            
649              <li class="logo qk-mg_r--auto qk-pd_x--05 qk-pd_y--0">
650                
651                  <a href="/" class="qk-display--il_flex qk-align--center qk-h--100 qk-hidden--phone">
652                    <img
653                      src="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzEyNzQwMzgxX1NlZWRfbG9nb193aGl0ZS5wbmcucG5nIl1d.png?sha=b64f8260c6bc2e48"
654                      height="25"
655                      width="auto"
656                      alt=""
657                    >
658                  </a>
659                
660                
661                  <a href="/" class="qk-display--il_flex qk-align--center qk-h--100 qk-hidden--tablet">
662                    <img
663                      src="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzEyNzQwMzgxX1NlZWRfbG9nb193aGl0ZS5wbmcucG5nIl1d.png?sha=b64f8260c6bc2e48"
664                      height="25"
665                      width="auto"
666                      alt=""
667                    >
668                  </a>
669                
670              </li>
671            
672            
673              <!-- search -->
674              
675                <li class="search qk-text--center qk-pd_x--05 qk-pd_y--0 qk-display--flex qk-align--center ">
676                  <div class="dropdown qk-pos--static qk-text--center">
677                    <div class="qk-cursor--pointer" data-toggle="dropdown">
678                      <div data-icon-type="custom_icon_type_search"></div>
679                    </div>
680                    <div
681                      class="qk-dropdown_menu dropdown-menu qk-w--100vw qk-bg--theme_bg qk-bd--default qk-bd--product_border qk-mg--0"
682                      role="menu"
683                    >
684                      <div class="search-area qk-display--flex qk-flex--row qk-justify--start qk-align--center qk-sp_bt--5 qk-w--100">
685                        <form action="/search" class="form-inline qk-display--flex qk-justfify--center qk-flex--1">
686                          <div class="form-inline qk-search_form qk-display--flex qk-justfify--center qk-align--center qk-flex--1">
687                            <input
688                              class="form-control qk-flex--1 qk-inputbox qk-inputbox--lg qk-bg--trans
688parent qk-text--heading"
689                              type="search"
690                              placeholder="搜尋"
691                              aria-label="Search"
692                              name="q"
693                              value=""
694                            >
695                            <button class="search-btn qk-btn qk-btn--lg qk-btn--primary qk-pd--0" type="submit">
696                              搜尋
697                            </button>
698                          </div>
699                        </form>
700                      </div>
701                    </div>
702                  </div>
703                </li>
704              
705              <!-- express delivery -->
706              
707            
708          </ul>
709        </nav>
710        <!-- mobile-nav end -->
711      </div>
712      
713    </header>
714    
715      <!-- Sidebar -->
716      <nav class="drawer-nav drawer-nav_width qk-bg--nav_menu_bg " role="navigation">
717        <div class="drawer-menu">
718          <!-- cyb_snippet side_menu start -->
719
720
721<ul id="index_sidebar_shelf_top" class="sidebar qk-pd_b--1">
722  
723    <li class="logo qk-pos--rel qk-bg--nav_logo_bg qk-pd_x--1 qk-pd_y--05">
724      <a href="/" class="qk-pd--0">
725        <img src="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzEyNzQwMzgxX1NlZWRfbG9nb193aGl0ZS5wbmcucG5nIl1d.png?sha=b64f8260c6bc2e48" height="32" width="auto" alt="logo">
726      </a>
727      <button class="drawer-toggle qk-pos--abs qk-bg--transparent qk-pd--0"></button>
728    </li>
729  
730  
731    
732
733    
734      <!-- cyb_snippet components/side_menu/menu start -->
735
736  <li class="category_title qk-fs--breadcrumb qk-bd--nav_menu_text qk-text--nav_menu_text qk-bd_b--default qk-fw--500">主選單</li>
737
738
739  
740  
741  
742    <li class="qk-pos--rel qk-pd--0">
743      
744        <a class="qk-fw--bold qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/pages/品牌頁-mfb">My First Book</a>
745      
746    </li>
747  
748
749  
750  
751  
752    <li class="qk-pos--rel qk-pd--0">
753      
754        <a class="qk-fw--bold qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/pages/品牌頁-small-hands">small hands</a>
755      
756    </li>
757  
758
759  
760  
761  
762    <li class="qk-pos--rel qk-pd--0">
763      
764        <a class="qk-fw--bold qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/collections/兒童益智拼圖">兒童益智拼圖</a>
765      
766    </li>
767  
768
769  
770  
771  
772    <li class="qk-pos--rel qk-pd--0">
773      
774        <a class="qk-fw--bold qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/pages/益智遊戲-20250604175153">益智遊戲</a>
775      
776    </li>
777  
778
779  
780  
781  
782    <li class="qk-pos--rel qk-pd--0">
783      
784        <a class="qk-fw--bold qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/pages/福利品專區">福利品專區</a>
785      
786    </li>
787  
788
789  
790  
791  
792    <li class="qk-pos--rel qk-pd--0">
793      <button class="linklist bt-toggle qk-fw--bold  qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-text--nav_menu_text qk-bg--nav_menu_bg qk-pos--rel" data-toggle="collapse" data-target=".collapse_index_sidebar_6" aria-expanded=" true ">
794        
795          <span class="qk-cursor--pointer qk-text--nav_menu_text"> 銷售據點 </span>
796        
797      </button>
798      <ul id="index_sidebar_shelf_second_6" class="collapse_index_sidebar_6 collapse shelf_second  show  qk-pd--0">
799        
800          
801          
802          
803            <li class="qk-pos--rel qk-pd--0">
804              
805                <a class="qk-fw--500 qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/pages/銷售據點-mfb">
806                  My First Book 銷售據點
807                </a>
808              
809            </li>
810          
811        
812          
813          
814          
815            <li class="qk-pos--rel qk-pd--0">
816              
817                <a class="qk-fw--500 qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/pages/銷售據點-inui">
818                  INUI BEBE 銷售據點
819                </a>
820              
821            </li>
822          
823        
824          
825          
826          
827            <li class="qk-pos--rel qk-pd--0">
828              
829                <a class="qk-fw--500 qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/pages/銷售據點-mf">
830                  Manufaktura Falbanek 銷售據點
831                </a>
832              
833            </li>
834          
835        
836      </ul>
837    </li>
838  
839
840  
841  
842  
843    <li class="qk-pos--rel qk-pd--0">
844      
845        <a class="qk-fw--bold qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/pages/sv_qa">商品Q&A</a>
846      
847    </li>
848  
849
850  
851  
852  
853    <li class="qk-pos--rel qk-pd--0">
854      
855        <a class="qk-fw--bold qk-display--il_bk qk-w--100 qk-text--left qk-fs--body qk-bg--nav_menu_bg qk-text--nav_menu_text" href="/pages/關於我們">關於我們</a>
856      
857    </li>
858  
859
860
861<script>
862  $('button a').on('click', function(e) {e.stopPropagation()});
863</script>
863
864
865<!-- cyb_snippet components/side_menu/menu end -->
866    
867  
868  
869    
870      <li class="category_account-title qk-bd--nav_menu_text qk-fs--breadcrumb qk-text--nav_menu_text qk-bd_y--default qk-fw--500">帳戶</li>
871      <li class="qk-pos--rel qk-pd--0">
872        <div class="customer-logined-menu qk-display--il_bk qk-w--100 qk-text--left" style="display: none">
873          <a href="/account/index" class="qk-text--nav_menu_text qk-fw--bold qk-fs--body">我的帳戶</a>
874        </div>
875      </li>
876      <li class="qk-pos--rel qk-pd--0">
877        <div class="customer-logined-menu qk-display--il_bk qk-w--100 qk-text--left" style="display: none">
878          <a href="/account/orders" class="qk-text--nav_menu_text qk-fw--bold qk-fs--body">訂單查詢</a>
879        </div>
880      </li>
881      <li class="qk-pos--rel qk-pd--0">
882        <div class="customer-logined-menu qk-display--il_bk qk-w--100 qk-text--left" style="display: none">
883          <a href="/account/logout" class="qk-text--nav_menu_text qk-fw--bold qk-fs--body">會員登出</a>
884        </div>
885      </li>
886      <li class="qk-pos--rel qk-pd--0">
887        <a href="/account/login">
888          <div class="customer-not-login-menu qk-bd--nav_menu_text qk-bg--nav_menu_text customer-not-login-menu_login qk-display--il_flex qk-justify--center qk-align--center qk-w--100 qk-text--center ">
889            <span class="qk-text--nav_menu_bg qk-fw--500 qk-fs--body">
890              會員登入
891            </span>
892          </div>
893        </a>
894      </li>
895      <li class="qk-pos--rel qk-pd--0">
896        <a href="/account/signup">
897          <div class="customer-not-login-menu qk-bd--nav_menu_text customer-not-login-menu_signup qk-display--il_flex qk-justify--center qk-align--center qk-w--100 qk-text--center qk-bd--nav_menu_text qk-bd--default">
898            <span class="qk-text--nav_menu_text qk-fs--body qk-fw--500">
899              註冊新會員
900            </span>
901          </div>
902        </a>
903      </li>
904    
905    
906    
907    
908  
909</ul>
910
911<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/sidebar-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
912
913<script>
914  $(document).ready(function(){
915    // 側邊選單
916    if ($('.drawer').length){
917      $('.drawer').drawer();
918      $('.bt-toggle').click(function(){
919        setTimeout(function(){
920          $('.drawer')[0].iScroll.refresh()
921        },500)
922      })
923    }
924  });
925</script>
925
926
927
928<!-- cyb_snippet side_menu end -->
929
930        </div>
931      </nav>
932      <!-- Bottombar -->
933      
934    
935  </span>
936
937<div id="index-popular-tags"></div>
938
939<style id="timer_color">
940  :root {
941    
942      --timer_text: #c39d6f;
943    
944
945    
946      --timer_bg: #2b2b6e;
947    
948  }
949</style>
950
951<script>
952  window.language = {"account_name":"戶名","add_cart_error_try_again":"加入購物車有誤,請重新嘗試","add_to_cart":"加入購物車","addcart_rate_limit_desc":"秒後可再試一次,建議您停留在此頁面。","address1":"詳細退貨地址:路/å··/弄/號/樓","all_filters":"所有篩選條件","apply_fail":"申請失敗","apply_return":"退貨申請","apply_return_success":"您的退貨申請已成立","apply_success":"申請成功","arrive_soon":"即將到貨","articles_total":"共 {{ totalArticleCounts }} 篇文章","bank_account":"銀行帳號","bank_branch_name":"分行名稱","bonus_redemption":"紅利換購","cancel":"取消","cart_price_total":"結帳金額約","check_order":"訂單查詢","choose_branch_bank":"請選擇分行","choose_return_reason":"請選擇退貨原因","city":"城市","common_price":"定價: ","comply_group_number":"符合 {{comply_group_number}} 組優惠,","confirm":"確認","confirm_return":"申請退貨","confirm_submit":"確定送出","congratulations_for_verify_mobile_success":"恭喜,您已成功驗證您的手機!","contact_form":"聯絡我們","continue_reading":"繼續閱讀","country_placeholder":"請選擇國家","coupon_free_shipping":"免運券折抵","coupon_items":"優惠券折扣項目","date_error":"日期錯誤","default_sort":"預設排序","deliver_error":"寄送商品錯誤","discount_detail":"折扣明細","email":"電子郵件","email_placeholder":"請輸入您的電子郵件,例:[email protected]","enter_account_name":"請輸入戶名","enter_bank_account":"請輸入銀行帳號","enter_return_reason":"請填寫退貨原因...","error_message":"驗證簡訊發生錯誤,請稍後再試。","fail_operation":"操作失敗!","filter_button":"篩選","filter_no_result":"很抱歉,無商品符合篩選條件","free":"免費","gift_price":"加購價","gift_purchase":"滿額/件贈","go_check_email":"請至信箱收取信件","group_percent_discount":"組合內商品打{{discount}}折","has_stock":"尚有庫存 ","include_discount_and_shipping_fee":"含優惠折扣與運費","invalid_email":"這不是有效的電子郵件","invalid_name":"姓名為必填","invalid_phone_number":"聯絡電話為必填","invalid_question_content":"問題內容為必填","keep_shopping":"繼續購物","keyin_address1":"請填寫詳細退貨地址:路/å··/弄/號/樓","keyin_city":"請輸入城市","keyin_zip":"請輸入郵遞區號","less_then_one":"數量不得少於1","line_item_quantity":"數量:{{ lineItemQuantity }}","literal_points":"點","login_btn":"會員登入","mail_send_fail":"信件寄送失敗","message_confirmation_token_error":"簡訊驗證碼有誤","messenger_error_please_try_again":"簡訊寄送發生錯誤,請稍後再試。","mobile_number_error":"手機號碼有誤","name":"姓名","name_placeholder":"請輸入您的姓名","new_password_is_sent":"已送出新密碼","new_product_defect":"新品瑕疵","nn_collection_save_more_money_title":"可享,買 {{quantity}} ä»¶ {{price}} 元優惠","no_stock":"庫存不足","notification_enabled":"已登記補貨通知","notify_me_when_stock_arrives":"已售完,貨到通知我","onsale":"特價","order_date":"訂購日期","order_number":"訂單編號","order_retrun_confirm":"您確認要申請退貨?","ori_price":"原價","others":"其他","over_cart_limit":"數量超過購買上限","over_product_quantity":"數量超過庫存","over_stock_count":"商品庫存剩餘 {{ count }} ä»¶","over_stock_quantity":"超過庫存數量","phone_number":"聯絡電話","phone_number_placeholder":"請輸入聯絡電話","piece":"{{quantity}} ä»¶","please_choose_bank":"請選擇銀行","please_choose_product":"請選擇商品款式","please_choose_variant":"請選擇商品款式","please_enter_number":"請輸入數字","please_reselect":"請重新輸入篩選","please_send_and_confirm_verify_code":"請先發送並確認簡訊驗證碼","pre_order":"預購商品","price_asc":"價格由低到高","price_desc":"價格由高到低","price_filter":"價格","price_includes_tax":"(內含消費稅:{{ tax }})","product_content_defect":"商品內容不全","product_defect":"商品有缺陷","product_limit_buy":"此商品限購 {{ count }} ä»¶","product_rate_limit_btn":"重新進入商品頁","product_rate_limit_desc":"秒後可重新進入商品頁,建議您停留在此頁面。","product_rate_limit_title":"目前搶購人潮眾多,請耐心等候","product_rate_limit_warn":"若離開此頁面,可能會延長等待時間。","product_sold":"已銷售:{{ productSold }}","products_total":"共 {{ totalProductCounts }} 件商品","quantity":"數量:","quantity_over_product_stock":"數量超過商品庫存","question_content":"問題å
952…§å®¹","question_content_placeholder":"請輸入問題內容","question_submit_fail":"發生問題,請稍後再試","question_submit_success":"問題已成功送出,我們將盡快與您聯繫","question_type":"問題類型","reached_favorable":"已達優惠","recent_days_sold_desc":"本週熱賣","reenter_password_still_error":"重複輸入密碼有誤","refund":"退款金額","refund_account":"退款帳戶","refund_info":"退款資訊","refund_invoice_check":"本人同意發票作廢或「營業人銷貨退回進貨退出貨或折讓證明單」將全權由{{ envoiceCompanyName }}處理,以利加速退款作業。如有退貨/折讓,將直接開立折讓單上傳至財政部電子發票整合服務平台存證。","resend_verify_code":"重發驗證碼","reset_all_filters":"清除所有篩選","reset_filter_button":"清除篩選","return":"返回","return_address":"退貨地址","return_email_notification":"退貨申請信已寄至您的信箱","return_info":"退貨資訊","return_instruction":"退貨說明","return_msg_Australia":"1. 如收到商品後,發現有瑕疵或破損,需要申請換貨或退款,請盡速至【我的帳戶】,點擊【訂單查詢】,在選擇欲申請退貨的訂單中,點擊【申請退貨】。\u003cbr\u003e 2. 收到退貨申請後,我們會聯繫您,並啟動退貨流程。如果您有任何退貨問題,您可以在【訂單查詢】,在選擇欲申請退貨的訂單明細,留下問答紀錄。 請不要自行退貨。\u003cbr\u003e 3. 退換貨時,請保持原包裝完整(包括購買的商品、配件、贈品等)。\u003cbr\u003e 4. 符合退貨資格後,商店會再依照您的付款方式退款。\u003cbr\u003e 5. 詳細的退貨規定與流程說明,請參閱本店的退貨政策。\u003cbr\u003e","return_msg_Japan":"1. 如收到商品後,發現有瑕疵或破損,需要申請換貨或退款,請盡速至【我的帳戶】,點擊【訂單查詢】,在選擇欲申請退貨的訂單中,點擊【申請退貨】。\u003cbr\u003e 2. 收到退貨申請後,我們會聯繫您,並啟動退貨流程。如果您有任何退貨問題,您可以在【訂單查詢】,在選擇欲申請退貨的訂單明細,留下問答紀錄。 請不要自行退貨。\u003cbr\u003e 3. 退換貨時,請保持原包裝完整(包括購買的商品、配件、贈品等)。\u003cbr\u003e 4. 符合退貨資格後,商店會再依照您的付款方式退款。\u003cbr\u003e 5. 詳細的退貨規定與流程說明,請參閱本店的退貨政策。\u003cbr\u003e","return_msg_Japan_to_Taiwan":"1. 如收到商品後,發現有瑕疵或破損,需要申請換貨或退款,請盡速至【我的帳戶】,點擊【訂單查詢】,在選擇欲申請退貨的訂單中,點擊【申請退貨】。\u003cbr\u003e 2. 收到退貨申請後,我們會聯繫您,並啟動退貨流程。如果您有任何退貨問題,您可以在【訂單查詢】,在選擇欲申請退貨的訂單明細,留下問答紀錄。 請不要自行退貨。\u003cbr\u003e 3. 退換貨時,請保持原包裝完整(包括購買的商品、配件、贈品等)。\u003cbr\u003e 4. 符合退貨資格後,商店會再依照您的付款方式退款。\u003cbr\u003e 5. 詳細的退貨規定與流程說明,請參閱本店的退貨政策。\u003cbr\u003e","return_msg_SEA":"1. 如收到商品後,發現有瑕疵或破損,需要申請換貨或退款,請盡速至【我的帳戶】,點擊【訂單查詢】,在選擇欲申請退貨的訂單中,點擊【申請退貨】。\u003cbr\u003e 2. 收到退貨申請後,我們會聯繫您,並啟動退貨流程。如果您有任何退貨問題,您可以在【訂單查詢】,在選擇欲申請退貨的訂單明細,留下問答紀錄。 請不要自行退貨。\u003cbr\u003e 3. 退換貨時,請保持原包裝完整(包括購買的商品、配件、贈品等)。\u003cbr\u003e 4. 符合退貨資格後,商店會再依照您的付款方式退款。\u003cbr\u003e 5. 詳細的退貨規定與流程說明,請參閱本店的退貨政策。\u003cbr\u003e","return_msg_Taiwan":"1. 收到商品後如有發現瑕疵或破損狀況,需要辦理或換貨,請於收到貨後7天內登入『我的帳戶』頁面點選『申請退貨』。\u003cbr\u003e 2. 收到商品後可享有7天免費鑑è³
952žæœŸï¼ˆå«ä¾‹å‡æ—¥ï¼‰ã€‚退換貨時請保持原包裝商品的完整(包含購買商品,附件,贈品等)。\u003cbr\u003e 3. 收到申請後,我們將與您聯繫取回商品。若有任何退貨問題,您可以在『訂單明細』中,點選『我要詢問』,請勿自行寄回商品。\u003cbr\u003e 4. 當你申請退貨後,請列印本申請單隨商品一起寄回。\u003cbr\u003e 5. 收到您的退貨商品並審查通過後,將於7個工作天內退款至你的退款帳戶。\u003cbr\u003e","return_msg_USA":"1. 如收到商品後,發現有瑕疵或破損,需要申請換貨或退款,請盡速至【我的帳戶】,點擊【訂單查詢】,在選擇欲申請退貨的訂單中,點擊【申請退貨】。\u003cbr\u003e 2. 收到退貨申請後,我們會聯繫您,並啟動退貨流程。如果您有任何退貨問題,您可以在【訂單查詢】,在選擇欲申請退貨的訂單明細,留下問答紀錄。 請不要自行退貨。\u003cbr\u003e 3. 退換貨時,請保持原包裝完整(包括購買的商品、配件、贈品等)。\u003cbr\u003e 4. 符合退貨資格後,商店會再依照您的付款方式退款。\u003cbr\u003e 5. 詳細的退貨規定與流程說明,請參閱本店的退貨政策。\u003cbr\u003e","return_product":"退貨商品","return_reason":"退貨原因","save_more_money_discount":"可享 {{discount}} 折優惠","save_more_money_dollar":"可省 {{dollar}}","search_article_label":"文章搜尋結果 ({{ totalArticleCounts }})","search_no_result":"很抱歉,找不到 {{ queryString }} 請重新輸入搜尋。","search_product_label":"商品搜尋結果 ({{ totalProductCounts }})","search_total":"搜尋 {{ queryString }} 結果共 {{ totalSearchCount }} 筆","select_sort_by":"選擇排序方式","sell_from_asc":"上市日期舊到新","sell_from_desc":"上市日期新到舊","send_too_many_times_try_again_later":"發送次數過多,請稍後再試","sending_msg_few_minutes_get":"簡訊發送中,幾分鐘後您將收到驗證碼","shipping_fee":"運費","sold_out":"已售完","state_placeholder":"請選擇州/省","submit":"送出","subtotal":"小計","success_operation":"操作成功!","successfully_copy_tracking_number":"已成功複製你的物流單號","system_busy_try_again":"系統忙碌,請稍後再試","tax":"稅額","thanks_for_advise":"謝謝您的å¯
952¶è²´æ„è¦‹","thanks_you_have_signed_up":"謝謝您已註冊","total_bonus_redemption":"總紅利換購點數","tw_city_placeholder":"請選擇縣市","tw_district_placeholder":"請選擇鄉鎮市區","unreach_favorable":"未達優惠","verification_error_please_correct":"驗證有誤請修正","verify_success":"驗證碼確認成功","view_product":"查看商品","vip_shipping_free":"VIP免運費","zip":"郵遞區號","suggested_range":"建議區間:","periodic_order_label":"定期定額","check_account_length":"請檢查銀行帳號長度"}
953  $(document).ready(function(){
954    if(window.location.pathname != '' && window.location.pathname != '/' ){
955      document.getElementById('index-popular-tags').style.display = 'none'
956    }
957    // 倒數計時
958    
959
960    function adjustContentTop() {
961      
962      const isNavbarTransparent = false;
963      let headerHeight = $("#header").outerHeight();
964      if (isNavbarTransparent && $('#template').width() >= 992) {
965        headerHeight -= $('.computer_nav').height();
966      }
967      const floatFilterHeight = $('#float-filter').innerHeight() || 0;
968      $("body").css({
969        "padding-top": (headerHeight - floatFilterHeight) + "px",
970      });
971    }
972
973    window.adjustContentTop = adjustContentTop;
974
975    // navbar設定透明
976    
977
978    // Call it first once DOM is ready to prevent CLS
979    adjustContentTop();
980
981    // 延遲初始化,等待 app banner 初始化完成
982    $(window).on("resize", adjustContentTop);
983
984    // 使用 setTimeout 確保 banner 狀態已經確定
985    $(window).on("load", function() {
986      setTimeout(function() {
987        adjustContentTop();
988      }, 200); // 給 banner 足夠時間初始化
989    });
990
991    $('img.header_banner').on('load', adjustContentTop);
992
993    window.renderNavbarSection('.main_nav', {
994        navbarCollections: null,
995        navbarItems: [{"id":1275669,"title":"My First Book","url":"/pages/品牌頁-mfb","item_type":"page","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":1380013,"title":"small hands","url":"/pages/品牌頁-small-hands","item_type":"page","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":1749864,"title":"兒童益智拼圖","url":"/collections/兒童益智拼圖","item_type":"custom_collection","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":1678509,"title":"益智遊戲","url":"/pages/益智遊戲-20250604175153","item_type":"page","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":1854615,"title":"福利品專區","url":"/pages/福利品專區","item_type":"page","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":1275624,"title":"銷售據點","url":"","item_type":"linklist","subtitle":null,"icon_image_url":null,"menuItems":[{"id":1275625,"title":"My First Book 銷售據點","url":"/pages/銷售據點-mfb","item_type":"page","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":1275626,"title":"INUI BEBE 銷售據點","url":"/pages/銷售據點-inui","item_type":"page","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":1275627,"title":"Manufaktura Falbanek 銷售據點","url":"/pages/銷售據點-mf","item_type":"page","subtitle":null,"icon_image_url":null,"menuItems":null}]},{"id":1275738,"title":"商品Q\u0026A","url":"/pages/sv_qa","item_type":"page","subtitle":null,"icon_image_url":null,"menuItems":null},{"id":1284396,"title":"關於我們","url":"/pages/關於我們","item_type":"page","subtitle":null,"icon_image_url":null,"menuItems":null}],
996        settings: {
997          menuDisplayStyle: "three_dimension_menu",
998          pcLogoImgUrl: "//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzEyNzQwMzgxX1NlZWRfbG9nb193aGl0ZS5wbmcucG5nIl1d.png?sha=b64f8260c6bc2e48",
999          mobileLogoImgUrl: "//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL2F0dGFjaGVkX3Bob3Rvcy8xNzEyNzQwMzgxX1NlZWRfbG9nb193aGl0ZS5wbmcucG5nIl1d.png?sha=b64f8260c6bc2e48",
1000          navbarDisplayStyle: "displayDefault",
1001        }
1002      }
1003    );
1004
1005
1006    // for link menu
1007    const linkMenuElement = document.querySelector('.link-nav');
1008    const data = []
1009    data.forEach((item) => {
1010      const wrapper = document.createElement('a');
1011      const link = document.createElement('ul');
1012
1013      wrapper.href = item.url;
1014      link.textContent = item.title;
1015      link.classList.add('link-item');
1016
1017      wrapper.appendChild(link);
1018      linkMenuElement.appendChild(wrapper);
1019    });
1020
1021    // for safe-area space on iOS devices
1022    const userAgent = navigator.userAgent;
1023    const isIOS = /iPad|iPhone|iPod/.test(userAgent) && !window.MSStream;
1024    const isLiff = /Line\/[\d.]+/i.test(userAgent);
1025    const $mobileBottomBar = $('#mobile-bottom-bar');
1026
1027    if ($mobileBottomBar.length && isIOS && isLiff) {
1028      $mobileBottomBar.addClass('is-ios-liff');
1029    }
1030  });
1031  document.addEventListener('DOMContentLoaded', function() {
1032    window.getCartAmount = function() {
1033      return parseInt($('.global-cart-count').html());
1034    };
1035  });
1036</script>
1036
1037
1038<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/navbar-3a2e378145f8a165.js' type='text/javascript'></script>
vendor: 1 bytes, line 1038
1038
1039<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/currencies-3a2e378145f8a165.js' type='text/javascript'></script>
1039
1040<!-- cyb_snippet i18n_modal start -->
1041
1042
1043<!-- cyb_snippet i18n_modal end -->
1044<!-- cyb_snippet _load_fonts start -->
1045<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/load_fonts-3a2e378145f8a165.js' type='text/javascript'></script>
vendor: 1 bytes, line 1045
1045
1046<script>
1047  document.addEventListener('DOMContentLoaded', function() {
1048    window.loadFontSetting("{'ja':{'value':'Noto Sans JP'},'zh-TW':{'value':'Noto Sans TC'},'en':{'value':'Noto Sans TC'},'zh-CN':{'value':'Noto Sans TC'}}")
1049  })
1050</script>
1050
1051
1052<!-- cyb_snippet _load_fonts end -->
1053<!-- cyb_snippet _custom_icon start -->
1054<script src='//cdn-general.cybassets.com/frontend/shop/navIcon-3a2e378145f8a165.js' type='text/javascript'></script>
1054
1055
1056<script>
1057  (function() {
1058    const iconUrlMap = new Map([
1059      ['custom_icon_type_home', null],
1060      ['custom_icon_type_tracking_items', null],
1061      ['custom_icon_type_account', null],
1062      ['custom_icon_type_cart', null],
1063      ['custom_icon_type_search', null],
1064      ['custom_icon_type_menu', null]
1065    ]);
1066    const elements = document.querySelectorAll('[data-icon-type]');
1067    elements.forEach((element, index) => {
1068      const iconAttributes = element.getAttribute('data-icon-type');
1069
1070      const uniqueId = `icon_${iconAttributes}_${index}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
1071      element.id = uniqueId;
1072      window.renderNavCustomIcon(`#${uniqueId}`, {
1073        navIconStyle: "icon_type_default",
1074        customIconUrl: iconUrlMap.get(iconAttributes) || '',
1075        iconAttributes: iconAttributes,
1076        currentTemplate: "product",
1077      });
1078    });
1079  })();
1080</script>
1080
1081
1082<!-- cyb_snippet _custom_icon end -->
1083
1084
1085
1086    
1087  
1088    
1088<script src='//cdn-general.cybassets.com/frontend/shop/announcementBar-3a2e378145f8a165.js' type='text/javascript'></script>
1088
1089
1090    
1091
1092    
1093
1094    
1094<script>
1095      $(document).ready(function() {
1096        window.renderAnnouncementBar('#announcement-bar', {
1097          sectionId: "announcement_bar",
1098          isIndex: false,
1099        });
1100      });
1101    </script>
1101
1102  
1103
1104
1105
1106
1107
1108    <!-- template -->
1109    <div id="template" style="flex:1 0 auto; background-color: var(--theme_bg);">
1110      <!-- cyb_snippet breadcrumb start -->
1111
1112<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/breadcrumb-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
1113
1114
1115<div id="site_path" class="qk-bd_b--default qk-bd--product_border">
1116  <!-- mobile: toggle button (hidden on PC) -->
1117  <div class="qk-container qk-hidden--pc">
1118    <div class="breadcrumb qk-bg--theme_bg qk-pd_x--0 qk-mg--0 qk-fs--breadcrumb">
1119      <button
1120        class="bt-toggle qk-bg--theme_bg qk-pd_x--0 qk-w--100 qk-text--left qk-bd--none qk-pos--rel collapsed"
1121        data-toggle="collapse"
1122        data-target=".breadcrumb-content"
1123      >
1124        <a href="/" class="qk-text--text">
1125          <i class="fas fa-home"></i>
1126        </a>
1127      </button>
1128    </div>
1129  </div>
1130  <!-- breadcrumb nav: single DOM, PC always visible, mobile as collapse dropdown -->
1131  <div class="breadcrumb-content qk-bg--theme_bg collapse">
1132    <div class="qk-container">
1133      <!-- cyb_snippet breadcrumb_nav start -->
1134<!-- 主題版型麵包屑 -->
1135<nav aria-label="breadcrumb">
1136  <ol
1137    class="breadcrumb qk-bg--theme_bg qk-pd_x--0 qk-mg--0 qk-fs--breadcrumb"
1138    itemscope
1139    itemtype="http://schema.org/BreadcrumbList"
1140  >
1141    
1142      <li
1143        class="breadcrumb-item
1144        
1145        "
1146        itemprop="itemListElement"
1147        itemscope itemtype="http://schema.org/ListItem">
1148        <!-- home -->
1149        
1150          <a href="/" class="qk-text--text" itemprop="item">
1151            <i class="fas fa-home"></i>
1152            <span class="qk-display--none" itemprop="name">首頁</span>
1153          </a>
1154        <!-- account -->
1155        
1156        <meta itemprop="position" content="1"/>
1157      </li>
1158    
1159      <li
1160        class="breadcrumb-item
1161        
1162        "
1163        itemprop="itemListElement"
1164        itemscope itemtype="http://schema.org/ListItem">
1165        <!-- home -->
1166        
1167          
1168            <a href="#" itemprop="item" style="display: none;">
1169              <span itemprop="name">商品</span>
1170            </a>
1171          
1172          
1173            <span class="qk-text--text" data-breadcrumb-links>
1174              <a href='/collections/my-first-book' class='qk-text--text' itemprop='item'><span itemprop='name'>My First Book 布書</span></a>
1175            </span>
1176          
1177        <!-- product -->
1178        
1179        <meta itemprop="position" content="2"/>
1180      </li>
1181    
1182      <li
1183        class="breadcrumb-item
1184        
1185         active "
1186        itemprop="itemListElement"
1187        itemscope itemtype="http://schema.org/ListItem">
1188        <!-- home -->
1189        
1190          <a href="/products/mfb1004-20250502120342" class="qk-text--text" itemprop="item">
1191            <span itemprop="name">My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲</span>
1192          </a>
1193        <!-- search -->
1194        
1195        <meta itemprop="position" content="3"/>
1196      </li>
1197    
1198  </ol>
1199</nav>
1200<script>
1201  $(document).ready(function () {
1202    if (!window.liquidHelper || !window.liquidHelper.hasBreadcrumbReferrerEnabled) return;
1203
1204    var $collections = $('[data-breadcrumb-links]');
1205    if (!$collections.length) return;
1206
1207    var refMatch = document.referrer.match(/\/collections\/([^/?#]+)/);
1208    if (!refMatch || refMatch[1] === 'all') return;
1209
1210    var referrerHandle = decodeURIComponent(refMatch[1]);
1211
1212    function getCollectionHandle(url) {
1213      if (!url) return null;
1214      try {
1215        var pathname = new URL(url, location.origin).pathname;
1216        var parts = pathname.split('/');
1217        var idx = parts.indexOf('collections');
1218        if (idx === -1 || !parts[idx + 1]) return null;
1219        return decodeURIComponent(parts[idx + 1]);
1220      } catch (e) {
1221        return null;
1222      }
1223    }
1224
1225    var $link = $collections.find('a').filter(function () {
1226      return getCollectionHandle(this.href) === referrerHandle;
1227    });
1228
1229    if ($link.length) {
1230      $collections.siblings('a.qk-text--accent[href="#"]').remove();
1231      $collections.empty().append($link);
1232    }
1233  });
1234</script>
1234
1235
1236<!-- cyb_snippet breadcrumb_nav end -->
1237    </div>
1238  </div>
1239</div>
1240
1241
1242<!-- cyb_snippet breadcrumb end -->
1243
1244<div id="img"></div>
1245
1246
1247
1248
1249
1250<script>
1251  var gallery_img = undefined;
1252  document.addEventListener("DOMContentLoaded", function(){
1253    gallery_img = renderGallery(
1254      '#img',
1255      {
1256        urls: ["//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfYTYwNGJkNTNhNTFhNDg3ZGI5MjYuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=19eec813f9947f96","//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfODUyMjkxMTQ3YmJmNzYzYmVlMjUuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=a273eeaa077a849c","//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfMzZlMTFjMDRlNDdiN2RmMzFlYzEuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=3bad73f01715cbbf","//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfNDk4ZGVhNTdmYTkzYTIxYjEyZTIuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=40f32b918529f5ef","//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfOTZiZjk4NmQyN2FjZWRkYjIxMjEuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=880b16ddbcb7b3de","//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfMzljNGNkNDQ3OTcxZmZiMGM4YTEuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=cba7d7a6a33b3b4d","//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfMjQwOTlkZTE0MWZkNWQ5NmM0MWQuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=a1b7ea2e8d522c39","//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfMDI0OTk0YWE5Y2ZiYWM0NmY2OWQuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=a1dd59fe5e50e045"],
1257        onSwiperGalleryChange: function (payload) {
1258          var eventPayload = Object.assign({ galleryName: "img" }, payload);
1259          $(document).trigger('swiper-gallery-change', [eventPayload]);
1260        },
1261      },
1262    );
1263  });
1264</script>
1264
1265
1266<div id="product" class="product">
1267  <div class="qk-container">
1268    
1269
1270
1271
1272
1273
1274
1275 
1276
1277<div id="product_info" class="product_info qk-display--grid" data-purchase-eligibility='{"required":false,"eligible":true,"status":"eligible"}' data-hide-price="false" data-sales-mode-purchasable="true">
1278  <!-- product image start -->
1279  <div id="variant_photos" class="variant_photos">
1280    
1281    
1282    
1283    
1284    <variant-photos-block
1285      :product-photos-json="'[{\'id\':26537139,\'imageUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfYTYwNGJkNTNhNTFhNDg3ZGI5MjYuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=2fa9055a968f370a\',\'imageMaxUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfYTYwNGJkNTNhNTFhNDg3ZGI5MjYuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=19eec813f9947f96\'}, {\'id\':26537140,\'imageUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfODUyMjkxMTQ3YmJmNzYzYmVlMjUuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=0fcabe5155220f0e\',\'imageMaxUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfODUyMjkxMTQ3YmJmNzYzYmVlMjUuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=a273eeaa077a849c\'}, {\'id\':26537141,\'imageUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfMzZlMTFjMDRlNDdiN2RmMzFlYzEuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=3a389b726e564ea9\',\'imageMaxUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfMzZlMTFjMDRlNDdiN2RmMzFlYzEuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=3bad73f01715cbbf\'}, {\'id\':26537142,\'imageUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfNDk4ZGVhNTdmYTkzYTIxYjEyZTIuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=5738e385713d351a\',\'imageMaxUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfNDk4ZGVhNTdmYTkzYTIxYjEyZTIuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=40f32b918529f5ef\'}, {\'id\':26537143,\'imageUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfOTZiZjk4NmQyN2FjZWRkYjIxMjEuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=355019540a47c1c4\',\'imageMaxUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfOTZiZjk4NmQyN2FjZWRkYjIxMjEuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=880b16ddbcb7b3de\'}, {\'id\':26537144,\'imageUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfMzljNGNkNDQ3OTcxZmZiMGM4YTEuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=962ce99309e8acda\',\'imageMaxUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfMzljNGNkNDQ3OTcxZmZiMGM4YTEuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=cba7d7a6a33b3b4d\'}, {\'id\':26537145,\'imageUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfMjQwOTlkZTE0MWZkNWQ5NmM0MWQuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=36c9ff1e3d07ad60\',\'imageMaxUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfMjQwOTlkZTE0MWZkNWQ5NmM0MWQuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=a1b7ea2e8d522c39\'}, {\'id\':26537146,\'imageUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfMDI0OTk0YWE5Y2ZiYWM0NmY2OWQuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=e2f0aca64ddf10ed\',\'imageMaxUrl\':\'//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfMDI0OTk0YWE5Y2ZiYWM0NmY2OWQuanBlZyJdLFsicCIsInRodW1iIiwiMjA0OHgyMDQ4Il1d.jpeg?sha=a1dd59fe5e50e045\'}]'"
1286      :display-product-images-color=false
1287      :product-id="55275958"
1288      product-title="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲"
1289      
1290        :product-video={"id":null,"url":null}
1291        video-display-location="before"
1292      
1293    />
1294  </div>
1295  <!-- product image end -->
1296  <!-- product content start -->
1297  <div id="product_content" class="product_content qk-display--flex" data-tracking-variant-ids="null">
1298    
1299    <!-- 標題 -->
1300    <div class="product_title">
1301      <h1 class="qk-text--heading qk-fs--hd1 qk-fw--bold qk-mg--0">My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲</h1>
1302    </div>
1303    
1304    <!-- ç°¡è¿° -->
1305    
1306      <div class="product_brief qk-text--text qk-fs--body">
1307        全球熱銷破千萬冊,被譽為圖畫書界的聖經——<br>美國繪本大師 Eric Carle 經典之作《好餓的毛毛蟲》<br><br>當世界級繪本遇上 My First Book<br>我們將《好餓的毛毛蟲》化作一冊結合蒙特梭利理念的布書啟蒙教材<br>從毛毛蟲變蝴蝶的奇妙旅程中<br>帶寶寶學會同理心、啟發創造力、並透過豐富小機關刺激五官發展🌿<br><br>若有任何疑問歡迎加入官方LINE聯繫<br>ID: @seedvillage
1308      </div>
1309    
1310    <!-- 廠商,標語 -->
1311    <div class="product_vendor_slogan qk-display--il_bk qk-align--center">
1312      
1313      
1314        <span class="product_slogan qk-text--heading qk-fs--body">My First Book聯名冊_好餓的毛毛蟲 適用0歲以上</span>
1315      
1316    </div>
1317    <!-- 商品售價 -->
1318    
1319    
1320    
1321    <div
1322      class="product_price"
1323      id="price_title"
1324      data-discount-price-name=""
1325      data-discount-price-suggestion-name="">
1326      <!-- 價格title -->
1327      
1328        
1329      
1330
1331      <!-- 商品價格 -->
1332      <div class="qk-display--il_bk">
1333        <span class="qk-text--price price qk-fs--hd1 qk-fw--bold qk-display--il_bk qk-vert--mid"><span class="money_tag" data-currency-from="TWD" data-amount="2650.0">NT$2,650</span></span>
1334      </div>
1335      <del class="qk-text--text qk-fs--body qk-pd_l--05 qk-display--il_bk qk-vert--mid"></del>
1336
1337      <!--會員可見價-->
1338      
1339    </div>
1340    
1341    <!-- 商品sku -->
1342    
1343      <div class="product_sku qk-text--heading qk-fs--body">
1344        <span>商品編號:
1345        </span>
1346        <span class="val">MFB1006</span>
1347      </div>
1348    
1349    <!-- 供貨狀況 -->
1350    
1351      <div class="product_inventory_policy qk-text--heading qk-fs--body">
1352        <span>供貨狀況:
1353        </span>
1354        <span class="val">尚有庫存</span>
1355      </div>
1356    
1357
1358    <!-- 商品款式 -->
1359    <div id="variant_options" class="variant_options">
1360      <variant-options-block
1361        :product-api-url="'/products/mfb1004-20250502120342'"
1362        :sku="sku"
1363        :auto-select-variant-by-sku="false"
1364        :hide-other-variants-by-sku="false"
1365        :hide-single-variant-options="false"
1366        :sales-mode-purchasable="true"
1367        default-price="NT$2,650"
1368        default-compare-price=""
1369        :default-discounted="false"
1370        @set-choose="getSelectedDatas"
1371        @get-option-image="getCurrentImage"></variant-options-block>
1372    </div>
1373
1374    <div id="product-tags"></div>
1375
1376    <!-- product discounts_list start -->
1377    <div class="product_discounts_list force-show-scrollbar hide qk-bd--default qk-bd--product_border qk-pd--1 qk-of_y--auto qk-of_x--hidden  hide ">
1378      <div class="list_block custom-scrollbar qk-of_x--hidden">
1379        <p class="qk-text--heading qk-fs--body qk-mg_b--05">此商品參與的優惠活動</p>
1380        
1381          
1382        
1383      </div>
1384    </div>
1385    <!-- product discounts_list end -->
1386
1387    <!-- 規格,數量 -->
1388    
1389      <div class="product_variant_quantity">
1390        <span class="product_quantity">
1391          <div
1392            class="btn-group"
1393            role="group"
1394            aria-label="First group">
1395            <button class="btn add-down qk-bd--product_border" type="button"></button>
1396            <input
1397              class="btn item-quantity qk-text--heading qk-bd--product_border"
1398              type="text"
1399              name="quantity"
1400              value="1"
1401              data-old-value="1">
1402            <button class="btn add-up qk-bd--product_border" type="button"></button>
1403          </div>
1404        </span>
1405      </div>
1406
1407    <!-- 購買按鈕 -->
1408      <div class="product_button qk-display--flex qk-hidden--mobile">
1409        <!-- cyb_snippet _product_info_button start -->
1410<button class="btn addToCart btn_to_cart qk-btn qk-text--button qk-bd--button qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title" type="button"
1411  data-brand=""
1412  data-id="55275958"
1413  data-category=""
1414  data-list="單產品細覽"
1415  data-name="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲"
1416  data-quantity="1"
1417  data-position="全頁"
1418  
1419  data-ga-custom-dimension=""
1420  data-ga-custom-value=""
1421  data-sku="MFB1006">加入購物車</button>
1422<button class="btn addToCart btn-quick_buy qk-btn qk-btn--primary qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title" type="button" data-buy="quick_buy"
1423  data-brand=""
1424  data-id="55275958"
1425  data-category=""
1426  data-list="單產品細覽"
1427  data-name="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲"
1428  data-quantity="1"
1429  data-position="全頁"
1430  
1431  data-ga-custom-dimension=""
1432  data-ga-custom-value=""
1433  data-sku="MFB1006"><span>立即購買</span></button>
1434
1435<!-- cyb_snippet _product_info_button end -->
1436        <!-- cyb_snippet _product_info_status_button start -->
1437<button class="btn btn_not_sale hidden qk-btn qk-btn--soldout qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title" type="button">
1438  尚未開賣
1439</button>
1440<button class="btn btn_login_to_view hidden qk-btn qk-btn--soldout qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title" type="button">
1441  登入查看資格
1442</button>
1443<button class="btn btn_not_eligible hidden qk-btn qk-btn--soldout qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title" type="button">
1444  購買資格不符
1445</button>
1446<!-- cyb_snippet _product_info_status_button end -->
1447        
1448          <button class="btn btn_notice hidden qk-btn qk-btn--primary qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title" type="button">
1449            已售完,貨到通知我
1450          </button>
1451        
1452        <button class="btn btn_soldout hidden qk-btn qk-btn--soldout qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title" type="button">
1453          已售完
1454        </button>
1455        <button
1456          class="btn buy-together hidden qk-btn qk-text--button qk-bd--button qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title"
1457          type="button"
1458          data-brand=""
1459          data-id="55275958"
1460          data-category=""
1461          data-list="單產品細覽"
1462          data-name="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲"
1463          data-quantity="1"
1464          data-position="全頁"
1465          
1466          data-ga-custom-dimension=""
1467          data-ga-custom-value=""
1468          data-sku="MFB1006">同時加購物車</button>
1469        <button
1470          class="btn buy-together hidden qk-btn qk-btn--primary qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title"
1471          type="button"
1472          data-buy="quick_buy"
1473          data-brand=""
1474          data-id="55275958"
1475          data-category=""
1476          data-list="單產品細覽"
1477          data-name="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲"
1478          data-quantity="1"
1479          data-position="全頁"
1480          
1481          data-ga-custom-dimension=""
1482          data-ga-custom-value=""
1483          data-sku="MFB1006">同時購買</button>
1484      </div>
1485    
1486      <div class="product_button_mobile qk-display--flex qk-align--center qk-hidden--pc">
1487        <span class="product_love_mobile qk-display--il_bk">
1488          <input
1489            type="hidden"
1490            class="product-variant-id"
1491            value="66368633"
1492            data-sku="MFB1006"
1493            data-price="2650.0"
1494            data-compare_at_price="2650.0"
1495            data-variant=""
1496            data-inventory_quantity="1">
1497          <a
1498            class="btn_love scupio-add-wishlist qk-text--text qk-fs--body qk-cursor--pointer"
1499            data-itemid="MFB1006"
1500            
1501          >
1502          <div data-icon-type="custom_icon_type_tracking_items" ></div>
1503
1504          </a>
1505        </span>
1506        
1507          <div class="cart qk-text--center qk-pd_x--05 qk-pd_y--0">
1508            <a href="/cart" class="qk-display--il_flex qk-flex--row qk-justify--center qk-align--center qk-vert--mid qk-pos--rel">
1509              <div data-icon-type="custom_icon_type_cart" ></div>
1510
1511              <span class="number global-cart-count qk-circle qk-circle--sm qk-bg--accent qk-text--white qk-text--center qk-vert--mid qk-pos--abs" style="display: none;">0</span>
1512            </a>
1513          </div>
1514          <!-- cyb_snippet _product_info_button_mobile start -->
1515<button
1516  class="btn addToCart_mobile btn_to_cart_mobile open_product_modal qk-btn qk-flex--1 qk-fs--title qk-text-truncate qk-bd--button qk-text--button"
1517  data-handle="mfb1004-20250502120342">
1518  加入購物車</button>
1519<button
1520  class="btn addToCart_mobile btn_quick_buy_mobile open_quick_buy_modal qk-btn qk-btn--primary qk-flex--1 qk-fs--title qk-text-truncate"
1521  data-handle="mfb1004-20250502120342">
1522  立即購買</button>
1523
1524<!-- cyb_snippet _product_info_button_mobile end -->
1525          <!-- cyb_snippet _product_info_status_button start -->
1526<button class="btn btn_not_sale hidden qk-btn qk-btn--soldout qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title" type="button">
1527  尚未開賣
1528</button>
1529<button class="btn btn_login_to_view hidden qk-btn qk-btn--soldout qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title" type="button">
1530  登入查看資格
1531</button>
1532<button class="btn btn_not_eligible hidden qk-btn qk-btn--soldout qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title" type="button">
1533  購買資格不符
1534</button>
1535<!-- cyb_snippet _product_info_status_button end -->
1536          
1537            <button class="btn btn_notice btn_notice_mobile hidden qk-btn qk-btn--primary qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title" type="button">
1538              已售完,貨到通知我
1539            </button>
1540          
1541          <button class="btn btn_soldout hidden qk-btn qk-btn--soldout qk-btn--lg qk-pd--0 qk-flex--1 qk-fs--title" type="button">
1542            已售完
1543          </button>
1544          <button
1545            class="btn buy-together hidden qk-btn qk-flex--1 qk-fs--title qk-bd--button qk-text--button"
1546            type="button"
1547            data-brand=""
1548            data-id="55275958"
1549            data-category=""
1550            data-list="單產品細覽"
1551            data-name="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲"
1552            data-quantity="1"
1553            data-position="全頁"
1554            
1555            data-sku="MFB1006">同時加購物車</button>
1556          <button
1557            class="btn buy-together hidden qk-btn qk-btn--primary qk-flex--1 qk-fs--title"
1558            type="button"
1559            data-buy="quick_buy"
1560            data-brand=""
1561            data-id="55275958"
1562            data-category=""
1563            data-list="單產品細覽"
1564            data-name="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲"
1565            data-quantity="1"
1566            data-position="全頁"
1567            
1568            data-sku="MFB1006">同時購買</button>
1569        
1570      </div>
1571      
1572      
1573      
1574      
1575      
1576    <!-- 加入最愛,銷售數量,紅利折抵 -->
1577    <div class="product_others qk-display--flex qk-flex--wrap qk-align--center">
1578      <span class="product_love qk-display--il_bk qk-hidden--phone">
1579        <input
1580          type="hidden"
1581          class="product-variant-id"
1582          value="66368633"
1583          data-sku="MFB1006"
1584          data-price="2650.0"
1585          data-compare_at_price="2650.0"
1586          data-variant=""
1587          data-inventory_quantity="1">
1588        <a
1589          class="btn_love scupio-add-wishlist qk-text--text qk-fs--body qk-bd--default qk-bd--product_border qk-cursor--pointer qk-display--flex qk-align--center"
1590          data-itemid="MFB1006"
1591          
1592        >
1593          <svg
1594            width="15"
1595            height="15"
1596            viewBox="0 0 24 24"
1597            fill="none"
1598            xmlns="http://www.w3.org/2000/svg">
1599            <path
1600              d="M21.3899 4.54287C20.8146 4.01265 20.1366 3.60344 19.3969 3.34002C18.6572 3.0766 17.8711 2.96444 17.0863 3.01034C16.5593 3.01219 16.0362 3.09923 15.5375 3.26802C15.0194 3.44412 14.5265 3.68572 14.071 3.98682C13.6676 4.25092 13.2787 4.53613 12.906 4.84124C12.5762 5.09996 12.2648 5.38092 11.974 5.6821C11.6833 5.38092 11.3719 5.09996 11.042 4.84124C10.6516 4.53452 10.2443 4.24928 9.82221 3.98682C9.3967 3.69278 8.93642 3.45138 8.45163 3.26802C7.93995 3.0948 7.40254 3.0077 6.86175 3.01034C6.07688 2.96365 5.2906 3.07544 4.55076 3.3389C3.81091 3.60236 3.13296 4.01199 2.55813 4.54287C2.02401 5.11052 1.61146 5.77922 1.3453 6.50873C1.07914 7.23825 0.964875 8.01351 1.00937 8.78786C1.01359 9.36893 1.11073 9.94569 1.29719 10.4967C1.45989 11.0166 1.68054 11.517 1.95507 11.9886C2.20373 12.4073 2.47838 12.8104 2.77742 13.1956C3.09266 13.5889 3.32566 13.8601 3.46271 14.0093C3.56921 14.1255 3.6837 14.2343 3.80536 14.3348L11.4395 21.7669C11.5066 21.8412 11.5891 21.9002 11.6813 21.94C11.7736 21.9798 11.8734 21.9994 11.974 21.9975C12.0836 22.0067 12.1938 21.9906 12.296 21.9506C12.3983 21.9106 12.4898 21.8477 12.5634 21.7669L20.1838 14.3484C21.8272 12.9359 22.8376 10.9363 22.9935 8.78786C23.0307 8.0097 22.9078 7.23217 22.6321 6.50246C22.3565 5.77274 21.9339 5.10606 21.3899 4.54287V4.54287Z"
1601              stroke="currentColor"
1602              stroke-width="2"
1603              stroke-linecap="round"
1604              stroke-linejoin="round" />
1605          </svg>
1606          加入最愛
1607        </a>
1608      </span>
1609      
1610      <span
1611        class="product_bonus qk-text--text qk-fs--body qk-display--il_bk"
1612        
1613        hidden
1614        >
1615        此商品 「 最高 」可以折抵紅利
1616        <span class="val">0</span>
1617        點
1618        
1619        (約等於 <span class="money_tag" data-currency-from="TWD" data-amount="0">NT$0</span> )
1620      </span>
1621    </div>
1622  </div>
1623  <!-- product content end -->
1624</div>
1625<div class="add-buy-products-container">
1626  <!-- cyb_snippet add_buy_products start -->
1627
1628
1629
1630
1631<!-- cyb_snippet add_buy_products end -->
1632
1633</div>
1634
1635<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/cart-3a2e378145f8a165.js' type='text/javascript'></script>
vendor: 1 bytes, line 1635
1635
1636<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/product_variant-3a2e378145f8a165.js' type='text/javascript'></script>
1636
1637<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/product-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
1638<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/product_info-3a2e378145f8a165.js' type='text/javascript'></script>
1638
1639
1640<!-- cyb_snippet new_addcart_modal start -->
1641<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/vue_product_modal-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
1642
1643<div id="new-addcart-modal" class="container">
1644  <transition name="modal">
1645    <product-modal
1646      v-if="showProductModal"
1647      :only-description="onlyDescription"
1648      :product-url="popProductUrl"
1649      :color="color"
1650      :is-collection="isCollection"
1651      :is-show-description="isShowDescription"
1652      :is-quick-buy="isQuickBuy"
1653      :selected-variant-id="selectedVariantId"
1654      :categories="categories"
1655      :call-back="checkoutAddToCartCallback"
1656      ref="productModal"
1657    >
1658    </product-modal>
1659  </transition>
1660</div>
1661
1662<!-- cyb_snippet components/product_modal/product_modal start -->
1663<script type="text/x-template" id="product-modal">
1664  <div class="modal-mask qk-h--100 qk-w--100 qk-l--0 qk-t--0 qk-pos--fixed" @click="closeModal">
1665    <div class="modal-content qk-bd--none qk-center qk-bg--theme_bg" :class="{'only-description': onlyDescription}" @click.stop>
1666      <button class="btn-close qk-circle qk-circle--md qk-pos--abs qk-op--100 qk-bg--theme_bg qk-text--heading qk-bd--product_border qk-bd--default" @click="closeModal"></button>
1667      <div class="modal-body custom-scrollbar qk-w--100">
1668        <div v-if="!isLoading">
1669          <div id="checkout-product" class="row">
1670            <div class="col-sm-6 col-xs-4">
1671              <photo-swiper
1672                :mediaItems="swiperItems"
1673                :current-image-index="currentImageIndex"
1674                :current-variant="currentVariant"
1675                :video-after-image="videoAfterImage"
1676              ></photo-swiper>
1677            </div>
1678            <div class="col-sm-6 col-xs-8">
1679              <h4 class="qk-fs--hd2 qk-fw--bold qk-text--heading qk-mg--0" v-html="product.title"></h4>
1680              <p class="product_brief qk-text--text qk-fs--body" v-html="product.brief"></p>
1681              <p class="product_slogan qk-text--heading qk-fs--body" v-html="product.slogan"></p>
1682              <div class="swiper_thumbnails" style="margin-bottom: 10px;">
1683                <swiper-thumbnails
1684                  :mediaItems="swiperItems"
1685                  :current-image-index="currentImageIndex"
1686                  :title="product.title"
1687                  @update-current-image-index="(thumbnailIndex) => { currentImageIndex = thumbnailIndex }"
1688                ></swiper-thumbnails>
1689              </div>
1690              
1691              <div v-if="!hidePrice" style="margin-bottom: 10px;">
1692                
1693                <span class="price-title qk-fs--body qk-fw--500 qk-text--heading">${ priceTitleTag }</span>
1694                
1695                <div>
1696                  <span v-html="variantPrice" class="variant-price qk-fs--hd1 qk-fw--bold" :class="[isDiscountPrice ? 'qk-text--discount_price' : 'qk-text--price']"></span>
1697                  <del v-html="marketPrice" class="variant-del-price qk-fs--body qk-fw--500 qk-text--text"></del>
1698                </div>
1699              </div>
1700              <div v-if="!onlyDescription" class="controls">
1701                <div class="variant-quantity qk-display--flex qk-flex--column">
1702                  <div v-if="hasVariant" class="product-variant-options">
1703                    <div v-for="(option, index) in optionInfo" class="product-variant-option" :class="{'product-variant-option--hidden': shouldHideSingleVariantOptions}">
1704                      <div class="advance variant-select-option" v-if="styledShopMenu==='dropDownType'">
1705                      
1706                        <label>${option.name}</label>
1707                        <svg height="20" width="20" viewBox="0 0 20 20" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"><path d="M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"> </path></svg>
1708                        <select class="qk-bg--theme_bg" :class="{'select_placeholder-color': currentOption[`option${index + 1}`] === null}" v-show="!isMobileSize" :value="String(currentOption[`option${index + 1}`])" @change="setOption(`option${index + 1}`, $event.target.value, option.types )" @click="onClickSelectModal(option,`option${index + 1}`)">
1709                          <option value="null" class="select_option-hidden">請選擇${option.name}</option>
1710                          <option :style="{ visibility : isMobileSize ? 'hidden' : 'visible' }" v-for="(types) in option.types" :disabled="!types.isValid" :value="types.name">${types.name}</option>
1711                        </select>
1712                        <span class="select_placeholder-color" v-if="currentOption[`option${index + 1}`] === null" v-show="isMobileSize" @click="onClickSelectModal(option,`option${index + 1}`)">請選擇${option.name}</span>
1713                        <span v-else :value="currentOption[`option${index + 1}`]" v-show="isMobileSize" @click="onClickSelectModal(option,`option${index + 1}`)" v-html="currentOption[`option${index + 1}`]"></span>
1714                      </div>
1715                      <advance-option v-else :option-key="'option' + (index + 1)" :option="option" :current-option="currentOption" :toggle-current-option="toggleCurrentOption"/>
1716                    </div>
1717                  </div>
1718                  <div class="product_discounts_list qk-bg--theme_bg qk-bd--default qk-bd--product_border qk-pd--1 qk-mg_b--1" v-show="displayProductDiscountsList && ((displayPeriodicSalesPages && product.showableSalesPages.length > 0) || !!discountsList)">
1719                    <div class="list_block custom-scrollbar qk-of_x--hidden">
1720                      <h4 class="qk-text--heading qk-fs--body">此商品參與的優惠活動
1721                      </h4>
1722                      <template v-if="displayPeriodicSalesPages">
1723                        <div v-for="salesPage in product.showableSalesPages" class="discount-list">
1724                          <span class="discount-label qk-fs--breadcrumb qk-bd--default qk-bd--accent qk-bg--white qk-display--il_bk qk-text--accent">定期定額
1725                          </span>
1726                          <a class="discount-title qk-text--accent qk-fs--body" :href="salesPage.path">${ salesPage.title }</a>
1727                        </div>
1728                      </template>
1729                      <template v-for="discounts in discountsList">
1730                        <div v-for="discount in discounts" class="discount-list">
1731                          <a v-if="discount.url" :href="discount.url" class="discount-title qk-text--accent qk-fs--body">
1732                            ${ discount.title }
1733                          </a>
1734                          <span v-else class="discount-title qk-text--accent qk-fs--body">${ discount.title }</span>
1735                        </div>
1736                      </template>
1737                    </div>
1738                  </div>
1739                  <div v-if="showPurchaseControls" class="product-quantity qk-bd--product_border" v-show="!isMobileSize">
1740                    <div class="btn-group qk-w--100" role="group" aria-label="First group">
1741                      <button class="btn add-down qk-bd--default qk-bd--border qk-text--text" type="button" @click="quantityDecrease">-</button>
1742                      <input class="btn item-quantity qk-bd--default qk-bd--border qk-w--100 qk-text--heading" type="text" name="quantity" :value="quantity" @change="quantityChange">
1743                      <button class="btn add-up qk-bd--default qk-bd--border qk-text--text" type="button" @click="quantityIncrease">+</button>
1744                    </div>
1745                  </div>
1746                </div>
1747                <div v-if="showPurchaseControls" class="add-button-wrapper">
1748                  <!-- cyb_snippet _product_modal_button start -->
1749<button
1750  class="btn btn-default add-button qk-cursor--pointer qk-w--100 qk-btn--primary"
1751  :class="{selected: isChoose, adding: adding || isHideAddCartBtn, secondary: isSecondaryBtn, 'qk-btn--disabled': isHideAddCartBtn && isNewNnCollection, 'qk-bd--none': isHideAddCartBtn && isNewNnCollection}"
1752  type="button"
1753  :disabled="isHideAddCartBtn"
1754  @click="addProduct"
1755>
1756  ${ addCartText }
1757</button>
1758
1759<!-- cyb_snippet _product_modal_button end -->
1760                </div>
1761                <div class="product-others qk-fs--body">
1762                  <span class="product-love">
1763                    <a class="btn-love qk-text--text qk-bg--theme_bg qk-bd--default qk-bd--product_border qk-display--il_bk qk-text--center qk-cursor--pointer qk-tst qk-tst_timing--ease_io qk-tst_dur--15" @click="addWishList">
1764                      <svg
1765                        width="15"
1766                        height="15"
1767                        viewBox="0 0 24 24"
1768                        fill="none"
1769                        xmlns="http://www.w3.org/2000/svg">
1770                        <path
1771                          d="M21.3899 4.54287C20.8146 4.01265 20.1366 3.60344 19.3969 3.34002C18.6572 3.0766 17.8711 2.96444 17.0863 3.01034C16.5593 3.01219 16.0362 3.09923 15.5375 3.26802C15.0194 3.44412 14.5265 3.68572 14.071 3.98682C13.6676 4.25092 13.2787 4.53613 12.906 4.84124C12.5762 5.09996 12.2648 5.38092 11.974 5.6821C11.6833 5.38092 11.3719 5.09996 11.042 4.84124C10.6516 4.53452 10.2443 4.24928 9.82221 3.98682C9.3967 3.69278 8.93642 3.45138 8.45163 3.26802C7.93995 3.0948 7.40254 3.0077 6.86175 3.01034C6.07688 2.96365 5.2906 3.07544 4.55076 3.3389C3.81091 3.60236 3.13296 4.01199 2.55813 4.54287C2.02401 5.11052 1.61146 5.77922 1.3453 6.50873C1.07914 7.23825 0.964875 8.01351 1.00937 8.78786C1.01359 9.36893 1.11073 9.94569 1.29719 10.4967C1.45989 11.0166 1.68054 11.517 1.95507 11.9886C2.20373 12.4073 2.47838 12.8104 2.77742 13.1956C3.09266 13.5889 3.32566 13.8601 3.46271 14.0093C3.56921 14.1255 3.6837 14.2343 3.80536 14.3348L11.4395 21.7669C11.5066 21.8412 11.5891 21.9002 11.6813 21.94C11.7736 21.9798 11.8734 21.9994 11.974 21.9975C12.0836 22.0067 12.1938 21.9906 12.296 21.9506C12.3983 21.9106 12.4898 21.8477 12.5634 21.7669L20.1838 14.3484C21.8272 12.9359 22.8376 10.9363 22.9935 8.78786C23.0307 8.0097 22.9078 7.23217 22.6321 6.50246C22.3565 5.77274 21.9339 5.10606 21.3899 4.54287V4.54287Z"
1772                          stroke="currentColor"
1773                          stroke-width="2"
1774                          stroke-linecap="round"
1775                          stroke-linejoin="round" />
1776                      </svg>
1777                      加入最愛
1778                    </a>
1779                  </span>
1780                  <span class="product_sold qk-text--text" v-if="false">
1781                    <span>已銷售:
1782                      ${ product.totalSold }
1783                      ä»¶
1784                    </span>
1785                  </span>
1786                  <span class="product_bonus qk-text--text" v-if="false">
1787                    此商品 「 最高 」可以折抵紅利
1788                    <span class="val qk-fw--600 qk-fs--hd2" v-if="currentVariant">${currentVariant.maxUsableBonus}</span>
1789                    <span class="val qk-fw--600 qk-fs--hd2" v-else>${maxUsableBonus}</span>
1790                    點
1791                    <span v-html="bonusToPrice"/>
1792                  </span>
1793                </div>
1794                <div class='product_limit_buy qk-fs--body' v-show="product.minBuy > 0 || product.limitBuy > 0">
1795                  ${limitBuyText}
1796                </div>
1797              </div>
1798            </div>
1799          </div>
1800          <div v-if="isShowDescription" class="row">
1801            <div class="col-sm-12">
1802              
1803                <div v-if="product.bodyHtml">
1804                  <h5 class="section-heading qk-bd--heading qk-fs--hd2 qk-text--heading">
1805                    商品介紹
1806                  </h5>
1807                  <div class="ckeditor">
1808                    <div v-html="product.bodyHtml"></div>
1809                  </div>
1810                </div>
1811              
1812              
1813                <div v-if="otherDescriptions['product_description_section_spec']">
1814                  <h5 class="section-heading qk-bd--heading qk-fs--hd2 qk-text--heading">
1815                    規格說明
1816                  </h5>
1817                  <div class="ckeditor">
1818                    <div v-html="otherDescriptions['product_description_section_spec']"></div>
1819                  </div>
1820                </div>
1821              
1822              
1823                <div v-if="otherDescriptions['product_description_section_shipping']">
1824                  <h5 class="section-heading qk-bd--heading qk-fs--hd2 qk-text--heading">
1825                    運送方式
1826                  </h5>
1827                  <div class="ckeditor">
1828                    <div v-html="otherDescriptions['product_description_section_shipping']"></div>
1829                  </div>
1830                </div>
1831              
1832            </div>
1833          </div>
1834        </div>
1835        <div v-show="isLoading" style="text-align: center; padding-bottom: 20px;">
1836          <i class="fas fa-spinner fa-spin fa-fw fa-2x"></i>
1837        </div>
1838      </div>
1839        <!-- cyb_snippet _product_modal_button_mobile start -->
1840 <div
1841  v-if="showPurchaseControls"
1842  v-show="isMobileSize"
1843  class="mobile_footer"
1844  :class="{'mobile_footer-z': variantSize > 1 }">
1845        <div class="product-quantity">
1846          <div class="btn-group qk-w--100" role="group" aria-label="First group">
1847            <button class="btn add-down qk-bd--default qk-bd--border qk-text--text" type="button" @click="quantityDecrease">-</button>
1848            <input class="btn item-quantity qk-bd--default qk-bd--border qk-w--100 qk-text--heading" type="text" name="quantity" :value="quantity" @change="quantityChange">
1849            <button class="btn add-up qk-bd--default qk-bd--border qk-text--text" type="button" @click="quantityIncrease">+</button>
1850          </div>
1851        </div>
1852        <button
1853          v-if="!isLoading && !onlyDescription"
1854          class="btn btn-mobile add-button qk-btn qk-btn--primary qk-btn--lg"
1855          :class="{selected: isChoose, adding: adding || isHideAddCartBtn, 'qk-btn--disabled': isHideAddCartBtn && isNewNnCollection, 'qk-bd--none': isHideAddCartBtn && isNewNnCollection}"
1856          type="button"
1857          :disabled="isHideAddCartBtn"
1858          @click="addProduct">
1859            ${ addCartText }
1860        </button>
1861</div>
1862<div
1863  class="mobile-modal"
1864  :class="{ 'modal-open': isModalSelectShow && isMobileSize }">
1865        <div class="mobile_modal-content">
1866          <div class="modal_close-button">
1867            <button class="btn-close qk-circle qk-circle--md qk-pos--abs qk-op--100  qk-text--heading qk-bd--product_border qk-bd--default" @click="onChangeModalSelect(false,true)"></button>
1868          </div>
1869          
1870          <p>請選擇${modalOption.name}</p>
1871          <div class="modal_select-templete qk-display--flex qk-of_y--auto qk-w--100">
1872            <div class="options-container">
1873              <label :class="{'seleced-option': currentOption && currentOption[selectOption] === data.name, 'avoid-clicks':!data.isValid}" v-for="data in modalOption.types" @click="setOption(selectOption, data.name, modalOption.types)">${data.name}</label>
1874            </div>
1875          </div>
1876          <div v-if="variantSize > 1" class="modal_select_footer qk-display--flex">
1877            <button type="button" class="modal_cancel qk-bd--default qk-btn--secondary qk-bd--button qk-text--button" @click="onChangeModalSelect(false,false)">取消</button>
1878            <button type="button" class="qk-btn qk-btn--primary qk-btn--lg qk-fs--body qk-bd--button qk-test--button_text" @click="onChangeModalSelect(false,true)">完成</button>
1879          </div>
1880        </div>
1881</div>
1882
1883<!-- cyb_snippet _product_modal_button_mobile end -->
1884    </div>
1885  </div>
1886</script>
1886
1887
1888<!-- cyb_snippet components/product_modal/color_image_option start -->
1889<script id="color-image-option" type="text/x-template">
1890  <div class="color-image qk-display--flex qk-flex--wrap qk-align--center">
1891    <div class="title">顏色</div>
1892    <div
1893      v-for="(imageColor, index) in imageColors"
1894      :class="{
1895        'focus': !currentOption[optionKey] === option.types[index].name && currentImageIndex === index,
1896        'selected': currentOption[optionKey] === option.types[index].name,
1897        'disabled': !option.types[index].isValid
1898      }"
1899      class="image-option img-flex qk-bd--default qk-bd--transparent qk-display--block qk-pos--rel"
1900      @mouseleave="setCurrentImageIndex(index)"
1901      @mouseover="getOptionImageIndex(index)"
1902      @click="setOption(optionKey, index)"
1903    >
1904      <img v-if="imageColor !== 'noColorImage'" :src="imageColor.large" alt="image">
1905      <img v-else src="/assets/no-image-large.png" alt="image">
1906    </div>
1907  </div>
1908</script>
1908
1909
1910<script type="text/javascript">
1911  $(document).ready(function() {
1912    window.themeHelper.productModalComponents['color-image-option'] = {
1913      template: '#color-image-option',
1914      delimiters: ['${', '}'],
1915      props: {
1916        optionKey: String,
1917        option: Object,
1918        product: Object,
1919        imageColors: Array,
1920        isChoose: Boolean,
1921        currentImageIndex: Number,
1922        setCurrentImageIndex: Function,
1923        getOptionImageIndex: Function,
1924        currentOption: Object,
1925        toggleCurrentOption: Function,
1926      },
1927      methods: {
1928        setOption: function(optionKey, index) {
1929          const type = this.option.types[index];
1930          if(type.isValid){
1931            this.toggleCurrentOption(optionKey, type.name);
1932          }
1933        }
1934      }
1935    };
1936  });
1937</script>
1937
1938
1939<!-- cyb_snippet components/product_modal/color_image_option end -->
1940<!-- cyb_snippet components/product_modal/advance_option start -->
1941<script id="advance-option" type="text/x-template">
1942  <div class="advance">
1943    <div class="title qk-text--heading qk-fs--body">${option.name}</div>
1944    <div
1945      v-for="type in option.types"
1946      :class="{
1947        'selected': currentOption[optionKey] === type.name,
1948        'disabled': !type.isValid
1949      }"
1950      @click="setOption(optionKey, type)"
1951      class="option qk-btn  qk-bd--button qk-text--button qk-pd_x--1"
1952    >
1953      ${type.name}
1954    </div>
1955  </div>
1956</script>
1956
1957
1958<script type="text/javascript">
1959  $(document).ready(function() {
1960    window.themeHelper.productModalComponents['advance-option'] = {
1961      template: '#advance-option',
1962      delimiters: ['${', '}'],
1963      props: {
1964        optionKey: String,
1965        option: Object,
1966        product: Object,
1967        currentOption: Object,
1968        toggleCurrentOption: Function,
1969      },
1970      methods: {
1971        setOption: function(optionKey, type) {
1972          if(type.isValid){
1973            this.toggleCurrentOption(optionKey, type.name);
1974          }
1975        }
1976      }
1977    };
1978  });
1979</script>
1979
1980
1981<!-- cyb_snippet components/product_modal/advance_option end -->
1982
1983<!-- cyb_snippet components/product_modal/photo_swiper start -->
1984
1985
1986<script id="photo-swiper" type="text/x-template">
1987  <div ref="photoSwiper" id="photo_swiper" class="photos swiper swiper-container">
1988    <div class="swiper-wrapper">
1989      <template v-if="hasImage">
1990        <div v-for="(item, index) in mediaItems" :key="index" class="photo swiper-slide qk-align--center qk-display--flex qk-justify--center qk-vert--text_top default_scale">
1991          <video-player v-if="item.url" :video="item"
1992            :video-poster=" !!mediaItems[firstImageIndex] ? mediaItems[firstImageIndex].large : '//cdn-general.cybassets.com/img_loading.svg' "
1993          >
1994          </video-player>
1995          <img v-else class="qk-center" :src="item.large" alt="image"/>
1996        </div>
1997      </template>
1998      <div v-else class="photo swiper-slide qk-align--center qk-display--flex qk-justify--center qk-vert--text_top default_scale">
1999        <img src="//cdn-general.cybassets.com/assets/no-image-large-2b95ea56c455be9ce081d81c14eded925df68bf8fa38809e46f6af8fcdd5f9bc.png" alt="image" />
2000      </div>
2001    </div>
2002    <div v-show="showBtn" class="photo-prev qk-swiper_btn--prev  qk-hidden--mobile qk-swiper_btn qk-swiper_btn--lg qk-swiper_btn--v2 qk-mg_l--05"></div>
2003    <div v-show="showBtn" class="photo-next qk-swiper_btn--next  qk-hidden--mobile qk-swiper_btn qk-swiper_btn--lg qk-swiper_btn--v2 qk-mg_l--05"></div>
2004
2005    <div class="photo-pagination qk-bd--default qk-bd--body qk-text--center qk-text--body qk-fs--breadcrumb qk-visible-sm">
2006        <span class="current-index qk-text--default_dark">${currentImageIndex +1 }</span><span class="pagination-slash">/</span>
2007        <span>${mediaItems.length}</span>
2008      </div>
2009  </div>
2010</script>
2010
2011
2012<script>
2013  $(document).ready(function () {
2014    window.themeHelper.productModalComponents['photo-swiper'] = {
2015      template: '#photo-swiper',
2016      delimiters: ['${', '}'],
2017      props: {
2018        mediaItems: Array,
2019        currentImageIndex: Number,
2020        currentVariant: Object,
2021        videoAfterImage: Boolean,
2022      },
2023      data: function () {
2024        return {
2025          swiper: {},
2026          swiperOption: {
2027            preventInteractionOnTransition: true,
2028            rewind: true,
2029            spaceBetween: 5,
2030            slidesPerView: 1,
2031            navigation: {
2032              nextEl: '.photo-next',
2033              prevEl: '.photo-prev'
2034            }
2035          },
2036          showBtn: true,
2037          isVariantReposition: false,
2038        }
2039      },
2040      mounted: function() {
2041        this.swiper = new Swiper('#photo_swiper', this.swiperOption);
2042        this.swiper.on('slideChange', this.slideOnChange);
2043      },
2044      watch: {
2045        currentImageIndex: function() {
2046          this.slideToIndex();
2047        },
2048        currentVariant: {
2049          immediate: true,
2050          handler: function() {
2051            this.showBtn = this.mediaItems.length > 1;
2052            this.isVariantReposition = true;
2053            this.$nextTick(() => {
2054              if (this.swiper) {
2055                this.swiper.update();
2056                this.swiper.slideToLoop(this.initialItemIndex)
2057                this.slideOnChange();
2058                this.isVariantReposition = false;
2059              }
2060            });
2061          },
2062        },
2063      },
2064      computed: {
2065        hasImage: function() {
2066          return this.mediaItems.length > 0;
2067        },
2068        hasVideo: function() {
2069          return this.mediaItems.findIndex(item => !!item.url) !== -1;
2070        },
2071        variantPhotos: function() {
2072          if (this.currentVariant?.photos?.length) {
2073            return this.currentVariant.photos;
2074          } else  {
2075            return null;
2076          }
2077        },
2078        initialItemIndex: function() {
2079          if (this.hasVideo && !this.videoAfterImage) {
2080            // Focus on photo if "variant with photos" selected, video otherwise
2081            return this.variantPhotos?.length ? 1 : 0;
2082          } else {
2083            // Focus on first photo
2084            return 0;
2085          }
2086        },
2087      },
2088      methods: {
2089        slideOnChange: function() {
2090          themeHelper.EventBus.$emit('photoOnChange', this.swiper.realIndex, this.isVariantReposition);
2091        },
2092        slideToIndex: function() {
2093          if(this.swiper.realIndex != this.currentImageIndex) {
2094            this.swiper.slideToLoop(this.currentImageIndex);
2095            this.swiper.update();
2096          }
2097        },
2098      }
2099    };
2100  });
2101</script>
2101
2102
2103
2104<!-- cyb_snippet components/product_modal/video_player start -->
2105<script id="video-player" type="text/x-template">
2106  <div class="videoPlayer__wrapper" @click="handleVideoClick">
2107    <video 
2108      id='modal-video'
2109      class="videoPlayer__video qk-cursor--pointer qk-center" 
2110      :poster="videoPoster"
2111      loop defaultMuted muted playsinline webkit-playsinline autoplay
2112    >
2113      <source :src="videoUrl" type="video/mp4">
2114      <p>你的瀏覽器不支援 HTML 5 video</p>
2115    </video>
2116    <button id="modal-video-button" class="videoPlayer__pauseButton"></button>
2117  </div>
2118</script>
2118
2119
2120<script>
2121  $(document).ready(function () {
2122    window.themeHelper.productModalComponents['video-player'] = {
2123      template: '#video-player',
2124      delimiters: ['${', '}'],
2125      props: {
2126        video: Object,
2127        videoPoster: String,
2128      },
2129      data: function() {
2130        return {
2131          videoElement: null,
2132          buttonElement: null,
2133        };
2134      },
2135      mounted: function() {
2136        this.videoElement = $('#modal-video')[0];
2137        this.buttonElement = $('#modal-video-button');
2138        this.setVideoVolumeZero();
2139        this.videoElement.addEventListener('canplay', (event) => {
2140          this.sendGtag('play');
2141        }, { once: true });
2142      },
2143      computed: {
2144        videoUrl: function() {
2145          return this.video.url;
2146        }
2147      },
2148      methods: {
2149        sendGtag: function(action) {
2150          window.productVideoView && productVideoView(action);
2151        },
2152        setVideoVolumeZero: function() {
2153          this.videoElement.volume = 0;
2154        },
2155        handleVideoClick: function() {
2156          if (this.videoElement.paused){
2157            this.videoElement.play();
2158            this.sendGtag('play');
2159          } else {
2160            this.videoElement.pause();
2161            this.sendGtag('paused');
2162          }
2163          this.handleVideoButtonDisplay(this.buttonElement, this.videoElement);
2164        },
2165        handleVideoButtonDisplay: function(button, video) {
2166          button.toggleClass('videoPlayer__playButton', video.paused);
2167          button.toggleClass('videoPlayer__pauseButton', !video.paused);
2168        },
2169      }
2170    };
2171  });
2172</script>
2172
2173
2174<!-- cyb_snippet components/product_modal/video_player end -->
2175
2176<!-- cyb_snippet components/product_modal/photo_swiper end -->
2177<!-- cyb_snippet components/product_modal/swiper_thumbnails start -->
2178<script id="swiper-thumbnails" type="text/x-template">
2179  <div
2180    v-for="(thumbnail, index) in allThumbnails"
2181    :key="index"
2182    class="product-thumbnail img-flex qk-of--hidden qk-display--il_bk qk-cursor--pointer qk-bd--default qk-bd--transparent default_scale"
2183    :class="{ focus: index === currentImageIndex }"
2184    @mouseover="updateCurrentImageIndex(index)"
2185  >
2186    <template v-if="thumbnail.isVideo">
2187      <video class="qk-w--100 qk-h--100" :src="thumbnail.url" defaultMuted playsinline></video>
2188      <button class="videoPlayer__playButton"></button>
2189    </template>
2190    <img v-else :src="thumbnail.url" :alt="title" class="qk-w--100 qk-h--100">
2191  </div>
2192</script>
2192
2193
2194<script type="text/javascript">
2195  $(document).ready(function () {
2196    window.themeHelper.productModalComponents['swiper-thumbnails'] = {
2197      template: '#swiper-thumbnails',
2198      delimiters: ['${', '}'],
2199      props: {
2200        title: String,
2201        mediaItems: Array,
2202        currentImageIndex: Number,
2203      },
2204      emits: ['updateCurrentImageIndex'],
2205      methods: {
2206        updateCurrentImageIndex: function(thumbnailIndex) {
2207          if (thumbnailIndex !== this.currentImageIndex ) {
2208            this.$emit('updateCurrentImageIndex', thumbnailIndex);
2209          }
2210        },
2211      },
2212      mounted() {
2213        // can be removed after replacing video thumbnail with img
2214        const thumbnailVideo = $('.product-thumbnail video')[0];
2215        if (!!thumbnailVideo) {
2216          thumbnailVideo.volume = 0;
2217          const promise = thumbnailVideo.play();
2218          promise.then(() => {
2219            thumbnailVideo.pause();
2220          })
2221        }
2222      },
2223      computed: {
2224        allThumbnails: function() {
2225          return this.mediaItems.map(item => ({
2226            isVideo: !!item.url,
2227            url: item.url || item.medium
2228          }));
2229        },
2230      },
2231      watch: {
2232        allThumbnails: {
2233          handler(){
2234            this.updateCurrentImageIndex(this.currentImageIndex);
2235          }
2236        }
2237      }
2238    };
2239  });
2240</script>
2240
2241
2242<!-- cyb_snippet components/product_modal/swiper_thumbnails end -->
2243
2244
2245<!-- cyb_snippet _product_modal_js start -->
2246<script type="text/javascript">
2247  $(document).ready(function() {
2248    var categoryLevels = [];
2249    var productCategoryLevels = ["My First Book 布書"];
2250    var pageMainProductId = 55275958;
2251    window.themeHelper.productModalComponents['product-modal'] = {
2252      template: '#product-modal',
2253      delimiters: [
2254        '${', '}'
2255      ],
2256      props: {
2257        onlyDescription: Boolean,
2258        cartItems: Array,
2259        groupId: Number,
2260        productUrl: String,
2261        color: String, // unused
2262        collectionId: Number,
2263        categories: Array,
2264        // 判斷是否有色票展開
2265        isCollection: {
2266          type: Boolean,
2267          required: false,
2268          default: false,
2269        },
2270        // 判斷加入購物車的方法
2271        isNnCollection: Boolean,
2272        isNewNnCollection: Boolean,
2273        isBundleDiscount: Boolean,
2274
2275        // 判斷是否顯示商品描述
2276        isShowDescription: {
2277          type: Boolean,
2278          default: true
2279        },
2280
2281        // 判斷是否為立即購買
2282        isQuickBuy: {
2283          type: Boolean,
2284          default: false
2285        },
2286        selectedVariantId: Number,
2287        callBack: Function
2288      },
2289      data: function() {
2290        return {
2291          styledShopMenu: "buttonType",
2292          selectOption: '',
2293          selectCurrentStr:'',
2294          isModalSelectShow: false,
2295          modalOption: {},
2296          adding: false,
2297          currentImageIndex: 0,
2298          _navState: { variantId: null, photoIndex: 0 },
2299          currentOption: {
2300            option1: null,
2301            option2: null,
2302            option3: null
2303          },
2304          currentVariant: null,
2305          variantNotifications: null,
2306          currentVariantIndex: null,
2307          product: {},
2308          isChoose: false,
2309          isLoading: true,
2310          isEmptyClickable: liquidHelper.isEmptyClickable,
2311          quantity: 1,
2312          maxUsableBonus: 0,
2313          isDiscountPrice: false,
2314          displayProductDiscountsList: true,
2315          displayPeriodicSalesPages:true,
2316          discountsList: null,
2317          hasVideoPlugin: true,
2318          videoDisplayLocation: "before",
2319          hasStockNotificationPlugin: true,
2320          isDisplayPriceRange: null,
2321          hasVariantPriceRangePlugin: true,
2322          hasHideSingleVariantOptionsPlugin: false,
2323        }
2324      },
2325      mounted: function() {
2326        this.getProductDetail();
2327        $('.custom-scrollbar').addCustomScrollbar();
2328        themeHelper.EventBus.$on('photoOnChange', this.photoOnChange);
2329      },
2330      beforeUnmount: function() {
2331        themeHelper.EventBus.$off('photoOnChange', this.photoOnChange);
2332      },
2333      computed: {
2334        photoUrls: function() {
2335          return this.product.photoUrls.length > 0
2336            ? this.product.photoUrls
2337            : [this.featuredImage];
2338        },
2339        photoUrlsMap: function() {
2340          var map = {};
2341          var urls = this.product.photoUrls;
2342          this.product.photos.forEach(function(photo, index) {
2343            map[photo.photo.id] = urls[index];
2344          });
2345
2346          return map;
2347        },
2348        featuredImage: function() {
2349          return this.product.featuredImage;
2350        },
2351        swiperPhotos: function() {
2352          if (!this.photoUrls.length) {
2353            return [this.featuredImage];
2354          }
2355
2356          if (this.currentVariant && this.currentVariant.photos.length) {
2357            var map = this.photoUrlsMap;
2358            return this.currentVariant.photos.map(function(p) {
2359              return map[p.id];
2360            });
2361          }
2362
2363          return this.photoUrls;
2364        },
2365        productVideo: function() {
2366          return this.product.video;
2367        },
2368        videoAfterImage: function() {
2369          return this.videoDisplayLocation === 'after';
2370        },
2371        swiperItems: function() {
2372          const media = [...this.swiperPhotos];
2373          if (
2374            this.hasVideoPlugin && this.productVideo.url
2375          ) {
2376            this.videoAfterImage
2377              ? media.push(this.productVideo)
2378              : media.unshift(this.productVideo);
2379          }
2380          return media;
2381        },
2382        firstImageIndex: function() {
2383          return this.hasVideoPlugin && this.productVideo.url && !this.videoAfterImage
2384            ? 1
2385            : 0
2386        },
2387        otherDescriptions: function() {
2388          var descriptions = {};
2389          this.product.otherDescriptions.forEach(function(od) {
2390            descriptions[od.settingName] = od.bodyHtml;
2391          })
2392          return descriptions
2393        },
2394        variantOptions: function() {
2395          return themeHelper.variantOptions(this.product);
2396        },
2397        firstValidVariant: function() {
2398          var self = this;
2399          var result = this.product.variants.find(function(variant) {
2400            // 增加 product modal 聯絡店家 property
2401            variant.imgUrl = "";
2402            variant.productTitle = "";
2403
2404            return variant.available;
2405          });
2406
2407          return result
2408            ? result
2409            : null;
2410        },
2411        selectedValidVariant: function() {
2412          var self = this;
2413          var result = this.variantOptions.find(function(variant) {
2414            return variant.id === self.selectedVariantId;
2415          });
2416
2417          return result
2418            ? result
2419            : null;
2420        },
2421        totalInventoryQuantity: function(product) {
2422          return themeHelper.totalInventoryQuantity(this.product)
2423        },
2424        addCartText: function() {
2425          var variants = parseInt("0");
2426          let isRegisteredNotification = this.currentVariant && this.variantNotifications && this.variantNotifications[this.currentVariant.id]
2427          if (this.isNnCollection || this.isBundleDiscount) {
2428            if (this.currentVariant && !themeHelper.variantIsAvailable(this.currentVariant)) {
2429              if (this.currentVariant.inventoryPolicy === 'continue') {
2430                if (this.isNnCollection) {
2431                  return this.isChoose && !this.isNewNnCollection
2432                    ? '已預購'
2433                    : '預購商品';
2434                }
2435              } else {
2436                return '已售完';
2437              }
2438            }
2439            if (this.totalInventoryQuantity === 0) {
2440              return '已售完';
2441            }
2442            return this.isChoose && !this.isNewNnCollection
2443              ? '已選購'
2444              : '選購';
2445          } else {
2446            if (this.isQuickBuy) {
2447              if (this.currentVariant && !themeHelper.variantIsAvailable(this.currentVariant)) {
2448                if (this.currentVariant.inventoryPolicy === 'continue'){
2449                  return '立即預購'
2450                }
2451                return this.hasStockNotificationPlugin
2452                  ? (isRegisteredNotification
2453                    ? '已登記補貨通知'
2454                    : '已售完,貨到通知我')
2455                  : '聯絡店家'
2456              }
2457              return '立即購買';
2458            } else {
2459              if (this.currentVariant) {
2460                if (!themeHelper.variantIsAvailable(this.currentVariant)) {
2461                  if (this.currentVariant.inventoryPolicy === 'continue'){
2462                    return '預購商品'
2463                  }
2464                  return this.hasStockNotificationPlugin
2465                    ? (isRegisteredNotification
2466                      ? '已登記補貨通知'
2467                      : '已售完,貨到通知我')
2468                    : '聯絡店家'
2469                }
2470              } else {
2471                if (this.totalInventoryQuantity === 0) {
2472                  return '已售完';
2473                }
2474              }
2475              return '加入購物車';
2476            }
2477          }
2478        },
2479        cartItem: function() {
2480          if (!this.currentVariant) {
2481            return null
2482          }
2483          return {
2484            id: this.currentVariant.id,
2485            groupId: this.groupId,
2486            productId: this.product.id,
2487            title: this.product.title,
2488            photo: this.currentVariant.imgUrl || this.featuredImage.large,
2489            quantity: this.quantity,
2490            price: this.currentVariant.price,
2491            variant: this.currentVariant,
2492            product: this.product
2493          }
2494        },
2495        options: function() {
2496          return this.product.options;
2497        },
2498        optionTypes: function() {
2499
2500          // 先根據設定的variants來排序
2501          var self = this;
2502
2503          var option1 = [];
2504          var option2 = [];
2505          var option3 = [];
2506          this.product.variants.forEach(function(item) {
2507            if (item.option1 !== null) {
2508              option1.push(item.option1);
2509            }
2510            if (item.option2 !== null) {
2511              option2.push(item.option2);
2512            }
2513            if (item.option3 !== null) {
2514              option3.push(item.option3);
2515            }
2516          })
2517          var filteredOptionTypes = [];
2518          this.product.optionTypes.forEach(function(item, index) {
2519            filteredOptionTypes.push(self.getUniqueVariant(eval('option' + (
2520              index + 1
2521            ))).join(','));
2522          });
2523          return filteredOptionTypes;
2524        },
2525        optionInfo: function() {
2526          var self = this;
2527
2528          return self.options.map(function(option, index) {
2529            return {
2530              name: option,
2531              types: self.getOptions('option' + (
2532                index + 1
2533              ), self.optionTypes[index].split(','))
2534            }
2535          });
2536        },
2537        hasVariant: function() {
2538          return this.product.options.length > 0;
2539        },
2540        shouldHideSingleVariantOptions: function() {
2541          return this.hasHideSingleVariantOptionsPlugin &&
2542                 this.product.variants &&
2543                 this.product.variants.length <= 1;
2544        },
2545        variantSize: function() {
2546          if(this.product.options){
2547          return this.product.options.length;
2548          }
2549        },
2550        firstVariant: function() {
2551          return this.product.variants[0];
2552        },
2553        firstCheapestVariant: function() {
2554          return this.product.variants.find((v)=> (v.price === this.priceStats.minPrice));
2555        },
2556        priceStats: function() {
2557          return this.product.variants.reduce(function(acc, variant) {
2558            return {
2559              minPrice: variant.price < acc.minPrice ? variant.price : acc.minPrice,
2560              maxPrice: variant.price > acc.maxPrice ? variant.price : acc.maxPrice,
2561            };
2562          }, {
2563            minPrice: this.firstVariant.price,
2564            maxPrice: this.firstVariant.price,
2565          });
2566        },
2567        hidePrice: function() {
2568          return this.product && this.product.hidePrice === true;
2569        },
2570        salesModePurchasable: function() {
2571          return !(this.product && this.product.salesModePurchasable === false);
2572        },
2573         // - 任選折扣/紅配綠:「選擇」只是加進試算清單,不會直接下單,故只擋藏價商品
2574        // - 其他情境(商品頁、群組頁、多層級分類、搜尋、首頁商品區塊):不可購買(含藏價)就整組收掉
2575        showPurchaseControls: function() {
2576          if (this.isNnCollection || this.isBundleDiscount) {
2577            return !this.hidePrice;
2578          }
2579          return this.salesModePurchasable;
2580        },
2581        variantPrice: function() {
2582          if (this.hidePrice) {
2583            return '';
2584          }
2585          var from = liquidHelper.defaultCurrency;
2586          if (this.currentVariant) {
2587            return moneySymbol(this.currentVariant.price, from);
2588          }
2589          if (this.product.variants.length === 1) {
2590            return moneySymbol(this.firstVariant.price, from);
2591          }
2592
2593          var minPrice = this.priceStats.minPrice;
2594          var maxPrice = this.priceStats.maxPrice;
2595
2596          if (minPrice !== maxPrice && (!this.hasVariantPriceRangePlugin || this.isDisplayPriceRange)) {
2597            this.isDiscountPrice = false;
2598            return moneySymbol(minPrice, from) + '~' + moneySymbol(maxPrice, from);
2599          } else {
2600            return moneySymbol(minPrice, from);
2601          }
2602        },
2603        marketPrice: function() {
2604          if (this.hidePrice) {
2605            this.isDiscountPrice = false;
2606            return;
2607          }
2608          var from = liquidHelper.defaultCurrency;
2609          if (this.currentVariant) {
2610            this.isDiscountPrice = false;
2611            if (this.currentVariant.compareAtPrice && this.currentVariant.compareAtPrice > this.currentVariant.price) {
2612              this.isDiscountPrice = true;
2613              return moneySymbol(this.currentVariant.compareAtPrice, from);
2614            }
2615          } else {
2616            if (!_.includes(this.variantPrice, '~')) {
2617              const price =  Number(this.variantPrice.replace(/[^0-9.
2617-]/g, ""))
2618              // 未選擇款式也不顯示區間時,顯示第一個最便宜的款式的定價
2619              if (this.firstCheapestVariant.compareAtPrice && this.firstCheapestVariant.compareAtPrice > price){
2620                this.isDiscountPrice = true;
2621                return moneySymbol(this.firstCheapestVariant.compareAtPrice, from);
2622              }
2623              // 未選擇款式時要改回一般價格顏色
2624              this.isDiscountPrice = false;
2625            }
2626          }
2627        },
2628        isShowDropdownList: function() {
2629          if (this.product.options.length > 0) {
2630            return true;
2631          }
2632          return this.product.variants.length > 1
2633        },
2634        priceTitleTag: function() {
2635          return this.marketPrice
2636            ? getDiscountPriceName()
2637            : getDiscountPriceSuggestionName();
2638        },
2639        isHideAddCartBtn: function() {
2640          if (this.addCartText === '已售完') {
2641            return true;
2642          }
2643          return false;
2644        },
2645        isSecondaryBtn: function() {
2646          if (this.addCartText === '聯絡店家') {
2647            return true;
2648          }
2649          return false;
2650        },
2651        variantsMaxUsableBonus: function() {
2652          var variants = this.product.variants;
2653          var maxUsableBonusArray = variants.map(function(item) {
2654            return item.maxUsableBonus
2655          });
2656          return Math.max.apply(null, maxUsableBonusArray);
2657        },
2658        bonusToPrice: function() {
2659          const bonus = this.currentVariant
2660            ? this.currentVariant.maxUsableBonus
2661            : this.maxUsableBonus;
2662          const price = Math.floor(bonus / window.liquidHelper.conversionBonus);
2663          const priceWithMoney = window.themeHelper.productDisplayCurrencyBlock(price);
2664          return "(約等於 value )".replace('value', priceWithMoney);
2665        },
2666        isMobileSize: function() {
2667          return window.innerWidth <= 580
2668        },
2669        limitBuyText: function () {
2670          const minCount = this.product.minBuy;
2671          const maxCount = this.product.limitBuy;
2672          if (minCount > 0 && maxCount > 0) {
2673            return '此商品每筆訂單最少需購買 minCount 件,最多可購買 maxCount 件'.replace('minCount', minCount).replace('maxCount', maxCount);
2674          }
2675          if (minCount > 0) {
2676            return '此商品每筆訂單最少需購買 minCount 件'.replace('minCount', minCount);
2677          }
2678          if (maxCount > 0) {
2679            return '此商品每筆訂單最多可購買 maxCount 件'.replace('maxCount', maxCount);
2680          }
2681          return '';
2682        }
2683      },
2684      methods: {
2685        onClickSelectModal: function(objData, selectOptionStr) {
2686          this.isModalSelectShow = true;
2687          this.modalOption = objData;
2688          this.selectOption = selectOptionStr
2689          this.selectCurrentStr = this.currentOption && (String(this.currentOption[selectOptionStr]) || null)
2690        },
2691        onChangeModalSelect: function(flag, isSelect) {
2692          if(!isSelect){
2693            this.setOption(this.selectOption,this.selectCurrentStr,this.modalOption.types)
2694          }
2695          this.isModalSelectShow = flag;
2696        },
2697        setOption: function(optionKey, type, dataArr) {
2698          let flag = true
2699          dataArr.forEach(item => {
2700            if (item.name === type) {
2701              flag = item.isValid
2702            }
2703          })
2704          if (flag) {
2705            this.toggleCurrentOption(optionKey, type)
2706          }
2707        },
2708        addToWishListEvent: function() {
2709          try {
2710            if (appMarketAddToWishListEvent) {
2711              var product = this.product;
2712              var currentVariant = this.currentVariant
2713              var element = $(`.btn[data-id=${product.id}]`);
2714              var index;
2715              var listName;
2716              if (element) {
2717                index = element.data('position')
2718                listName = element.data('list')
2719              }
2720              // sku_properties:選中款式的 option pairs(當前語系),類型名 zip 值
2721              var optionValues = [currentVariant.option1, currentVariant.option2, currentVariant.option3];
2722              var properties = [];
2723              (product.options || []).forEach(function(optionName, i) {
2724                if (optionName && optionValues[i]) {
2725                  properties.push({ name: optionName, value: optionValues[i] });
2726                }
2727              });
2728              var dataSet = {
2729                name: product.title,
2730                category: product.productType,
2731                categories: (this.categories && this.categories.length) ? this.categories : (categoryLevels.length ? categoryLevels : (product.id === pageMainProductId ? productCategoryLevels : undefined)),
2732                sku: currentVariant.sku,
2733                price: currentVariant.price,
2734                compare_at_price: currentVariant.compareAtPrice,
2735                properties: properties,
2736                quantity: currentVariant.inventoryQuantity,
2737                variant: currentVariant.title,
2738                listName: listName || null,
2739                productId: product.id,
2740                variantId: currentVariant.id,
2741                index: Number(index) || 0,
2742              }
2743              appMarketAddToWishListEvent(dataSet)
2744            }
2745          } catch (e) {
2746            console.error(e)
2747          }
2748        },
2749        addWishList: function() {
2750          if (this.currentVariant === null) {
2751            window.msg('請選擇商品款式', 'warning').show();
2752            return;
2753          }
2754          var productVariantId = this.currentVariant.id;
2755          var addToWishListEvent = this.addToWishListEvent
2756          $.ajax({
2757            method: 'POST',
2758            url: '/tracking_items',
2759            dataType: 'json',
2760            data: {
2761              product_variant_id: productVariantId
2762            },
2763            success: function(response) {
2764              if (response.message) {
2765                window.msg(response.message, 'success').show();
2766                addToWishListEvent()
2767              }
2768
2769              if (response.error) {
2770                window.msg(response.error, 'error').show();
2771
2772              }
2773              if (response.info) {
2774                window.msg(response.info, 'info').show();
2775              }
2776              if (response.success === false) {
2777                if (window.liquidHelper && window.liquidHelper.language && window.liquidHelper.language.handle) {
2778                  window.location = "/" + window.liquidHelper.language.handle + "/account/login";
2779                } else {
2780                  window.location = "/account/login";
2781                }
2782              }
2783            }
2784          });
2785        },
2786        setChoose: function(currentVariant) {
2787          this.maxUsableBonus = 0;
2788          var quantity = 1;
2789          var cartItem = null;
2790          if (!this.isNnCollection && this.cartItems) {
2791            cartItem = this.normalGetChoosenItem(currentVariant);
2792          }
2793          if (this.isNnCollection) {
2794            cartItem = this.nnCollectionGetChoosenItem(currentVariant);
2795          }
2796          this.isChoose = !! cartItem;
2797          if (this.isNewNnCollection) {
2798            return
2799          }
2800          this.quantity = cartItem
2801            ? cartItem.quantity
2802            : this.quantity;
2803
2804          // product modal 聯絡店家情境
2805          if (currentVariant) {
2806            var photoIndex = 0;
2807            if (! currentVariant.imgUrl) {
2808              currentVariant.imgUrl = this.swiperPhotos.length > 0
2809                ? (this.swiperPhotos[photoIndex] && this.swiperPhotos[photoIndex].large)
2810                : this.featuredImage.large;
2811            }
2812            currentVariant.productTitle = this.product.title + ' - ' + this.currentVariant.title;
2813          }
2814        },
2815        normalGetChoosenItem: function(currentVariant) {
2816          return this.cartItems.find(function(cartItem) {
2817            return currentVariant && cartItem.id === currentVariant.id;
2818          });
2819        },
2820        nnCollectionGetChoosenItem: function(currentVariant) {
2821          var isSelected = null;
2822          if (! currentVariant) {
2823            return isSelected;
2824          }
2825          if (this.isNewNnCollection) {
2826            var cart = store.get(`SpecialCollectionCart_${this.collectionId}`);
2827            isSelected = cart && cart.find((item) => item.variant_id == currentVariant.id) || null;
2828          } else {
2829            store.each(function(value, key) {
2830              var productId = _.includes(key, 'Pro' + currentVariant.productId);
2831              var variantID = _.includes(key, 'Var' + currentVariant.id);
2832              if (productId && variantID) {
2833                isSelected = store.get(key);
2834              }
2835            });
2836          }
2837
2838          return isSelected;
2839        },
2840        // get product detail
2841        getProductDetail: function() {
2842          var self = this;
2843
2844          $.ajax({
2845            url: self.productUrl + '.json',
2846            type: 'GET',
2847            timeout: 30000,
2848            beforeSend: function() {
2849              self.isLoading = true;
2850            },
2851            error: function(xhr) {
2852              self.closeModal();
2853              if (xhr.status === 429) {
2854                window.showAddCartRateLimitModal(5);
2855                return;
2856              }
2857              window.msg('網路連線異常,請重新整理', 'error').show();
2858            }
2859          }).done(function(data) {
2860            if (data.id) {
2861              var productData = [themeHelper.toCamelCase(data)];
2862              self.product = themeHelper.priceWithDiscount(productData, liquidHelper.hasPriceWithDiscountPlugin)[0];
2863              self.maxUsableBonus = self.variantsMaxUsableBonus;
2864              if (self.product.variants.length === 1 || liquidHelper.isFirstVariantSelected || self.selectedVariantId) {
2865                self.currentVariant = self.firstValidVariant;
2866                // 如果已經自選商品,則商品頁下滑加入購物車顯示自選商品
2867                if (self.selectedVariantId) {
2868                  self.currentVariant = self.selectedValidVariant;
2869                }
2870                if (self.currentVariant) {
2871                  self.setChoose(self.currentVariant);
2872                  self.setDefaultOption();
2873                }
2874              }
2875              if (self.displayProductDiscountsList) {
2876                self.setUpDiscountsTag(data);
2877              }
2878              self.isLoading = false;
2879              if (self.product && self.product.variants) {
2880                self.product.variants.forEach(function(discountedVariant) {
2881                  var rawVariant = data.variants.find(function(v) { return v.id === discountedVariant.id; });
2882                  if (rawVariant) { rawVariant.price = discountedVariant.price; }
2883                });
2884              }
2885              viewItem && viewItem(data, { collectionId: '', collectionName: null, categories: (self.categories && self.categories.length) ? self.categories : (categoryLevels.length ? categoryLevels : (data.id === pageMainProductId ? productCategoryLevels : undefined)) });
2886
2887              (function() {
2888                // Read login status from cacheable, skip GET /pv_notification if not login.
2889                if (window.store && window.store.get('customer')) {
2890                  var cacheableCustomer = window.store.get('customer');
2891                  if (cacheableCustomer.notLogin) {
2892                    return;
2893                  }
2894                }
2895                $.ajax({
2896                  url: '/pv_notification',
2897                  method: 'GET',
2898                  dataType: 'json',
2899                  data: {
2900                    product_id: parseInt(data.id)
2901                  },
2902                  success: function(response) {
2903                    self.variantNotifications = response.variants;
2904                  }
2905                })
2906              })();
2907            } else {
2908              window.msg('網路連線異常,請重新整理', 'error').show();
2909              self.closeModal()
2910            }
2911          })
2912        },
2913        // product image btn
2914        photoOnChange: function(photoIndex, isVariantReposition) {
2915          var visiblePhotos = (this.currentVariant && this.currentVariant.photos.length)
2916            ? this.currentVariant.photos
2917            : this.product.photos.map(function(p) { return p.photo; });
2918          var result = themeHelper.buildNavigateItemImagePayload(this._navState, {
2919            product: this.product,
2920            currentVariant: this.currentVariant,
2921            visiblePhotos: visiblePhotos,
2922            slideIndex: photoIndex,
2923            videoOffset: this.firstImageIndex,
2924          });
2925          this._navState = result.nextState;
2926          if (result.payload && !isVariantReposition) {
2927            window.navigateItemImage(result.payload);
2928          }
2929          this.currentImageIndex = photoIndex;
2930        },
2931        toggleCurrentOption: function(key, value) {
2932          this.currentOption[key] =
2933            (this.currentOption[key] === value || value === 'null') ? null : value;
2934          var variantIndex = this.getVariantIndex();
2935          if (variantIndex !== -1) {
2936            this.currentVariant = this.product.variants[variantIndex];
2937          } else {
2938            this.currentVariant = null;
2939          }
2940          this.setChoose(this.product.variants[variantIndex]);
2941          if (this.currentOption[key] !== null) {
2942            var optionIndex = parseInt(key.replace('option', '')) - 1;
2943            appStoreSelectItemEvent(this.product, this.product.options[optionIndex], this.currentOption[key], this.currentVariant);
2944          }
2945        },
2946        toggleNotification: function() {
2947          var self = this;
2948          var variantId = this.currentVariant.id;
2949
2950          $.ajax({
2951            url: '/toggle_pv_notification',
2952            method: 'POST',
2953            dataType: 'json',
2954            data: {
2955              product_variant_id: variantId
2956            },
2957            success: function(response) {
2958              self.variantNotifications[variantId] = response.notice;
2959              window.msg(response.message, "success").show();
2960            },
2961            error: function(xhr) {
2962              var response = xhr.responseJSON;
2963              var msg = response && response.error || "網路連線異常,請重新整理";
2964              window.msg(msg, "error").show();
2965            }
2966          })
2967        },
2968        getOptionImageIndex: function(index) {
2969          this.currentImageIndex = index;
2970        },
2971        quantityDecrease: function() {
2972          if (this.cartItem) {
2973            themeHelper.EventBus.$emit('quantityDecrease', this.cartItem, false);
2974            this.quantity = this.cartItem.quantity
2975          } else {
2976            window.msg("請選擇商品款式", 'warning').show();
2977          }
2978        },
2979        quantityIncrease: function() {
2980          if (this.cartItem) {
2981            themeHelper.EventBus.$emit('quantityIncrease', this.cartItem, false);
2982            this.quantity = this.cartItem.quantity
2983          } else {
2984            window.msg("請選擇商品款式", 'warning').show();
2985          }
2986        },
2987        quantityChange: function(el) {
2988          if (this.cartItem) {
2989            themeHelper.EventBus.$emit('quantityChange', parseInt(el.target.value), this.cartItem, false);
2990            this.quantity = this.cartItem.quantity;
2991            el.target.value = this.cartItem.quantity;
2992          } else {
2993            window.msg("請選擇商品款式", 'warning').show();
2994          }
2995        },
2996        addProduct: function() {
2997          if (this.addCartText === '聯絡店家') {
2998            $('#messagebuy-Modal').data('variant', this.currentVariant);
2999            $('#messagebuy-Modal').modal('show');
3000            $('#messagebuy-Modal').css("background-color", "rgba(0, 0, 0, .6)");
3001          } else if (
3002            this.addCartText === '已登記補貨通知' ||
3003            this.addCartText === '已售完,貨到通知我'
3004          ) {
3005              this.toggleNotification();
3006          } else {
3007            if (this.cartItem) {
3008              try {
3009                if (this.isChoose) {
3010                  themeHelper.EventBus.$emit('updateStore', 'update', this.cartItem, this.callBack)
3011                } else {
3012                  themeHelper.EventBus.$emit('updateStore', 'add', this.cartItem, this.callBack)
3013                }
3014
3015                this.adding = true;
3016                this.closeModal();
3017              } catch (e) {
3018                window.msg("商品款式異常", 'error').show();
3019              }
3020            } else {
3021              window.msg("請選擇商品款式", 'warning').show();
3022            }
3023          }
3024        },
3025        closeModal: function() {
3026          themeHelper.EventBus.$emit('closeProductModal');
3027        },
3028        setDefaultOption: function() {
3029          var self = this;
3030          Object.keys(self.currentOption).map(function(optionKey) {
3031            self.currentOption[optionKey] = self.currentVariant[optionKey];
3032          });
3033        },
3034        getVariantIndex: function() {
3035          var self = this;
3036          return self.product.variants.findIndex(function(variant, index) {
3037            var isVariant = true;
3038            Object.keys(self.currentOption).forEach(function(option) {
3039              if (variant[option] !== self.currentOption[option]) {
3040                isVariant = false;
3041              }
3042            });
3043            return isVariant;
3044          });
3045        },
3046
3047        // 篩選重複品項
3048        getUniqueVariant: function(variants) {
3049          return variants.filter(function(value, index, self) {
3050            return self.indexOf(value) === index;
3051          });
3052        },
3053        groupBy(xs, key) {
3054          return xs.reduce(function(rv, x) {
3055            (rv[x[key]] = rv[x[key]] || []).push(x);
3056            return rv;
3057          }, {});
3058        },
3059        setUpDiscountsTag(data) {
3060          var self = this;
3061          var languagePrefix = '/' + ((window.shopScriptHelper && window.shopScriptHelper.i18nLocale) || 'zh-TW');
3062          $.ajax({
3063            url: languagePrefix + self.productUrl + '/discounts_list',
3064            method: 'GET',
3065            success: function(result) {
3066              if (result.length > 0) {
3067                var discounts_list = self.groupBy(result, 'campaign_type');
3068                self.discountsList = discounts_list;
3069              } else {
3070                self.discountsList = null;
3071              }
3072            }
3073          });
3074        },
3075        getOptions: function(optionKey, optionTypes) {
3076          var self = this;
3077          return optionTypes.map(function(optionType, index) {
3078            var isValid = true;
3079
3080            // 選出包含目前type的variant
3081            var matchVariants = self.product.variants.filter(function(variant) {
3082              return variant[optionKey] === optionType;
3083            });
3084
3085            // 篩選已勾選type
3086            Object.keys(self.currentOption).forEach(function(currentOptionKey) {
3087              if (currentOptionKey !== optionKey) {
3088                matchVariants = matchVariants.filter(function(variant) {
3089                  if (self.currentOption[currentOptionKey]) {
3090                    return variant[currentOptionKey] === self.currentOption[currentOptionKey]
3091                  } else {
3092                    return true;
3093                  }
3094                });
3095              }
3096            });
3097            if (matchVariants.length === 0) {
3098              isValid = false;
3099            }
3100            if (! self.isEmptyClickable) {
3101              isValid = false;
3102              matchVariants.find(function(item) {
3103                if (item.inventoryQuantity === null || item.inventoryQuantity > 0 || item.inventoryPolicy === 'continue') {
3104                  isValid = true;
3105                }
3106              });
3107            }
3108            return {name: optionType, isValid: isValid}
3109          });
3110        }
3111      }
3112    };
3113  });
3114</script>
3114
3115
3116<!-- cyb_snippet _product_modal_js end -->
3117
3118<!-- cyb_snippet components/product_modal/product_modal end -->
3119
3120<!-- cyb_snippet messagebuy_modal start -->
3121
3122
3123<!-- cyb_snippet messagebuy_modal end -->
3124<!-- cyb_snippet components/rate_limit_modal start -->
3125<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/rate_limit_modal-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
3126
3127<div class="modal fade" id="rate-limit-modal" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="static" data-keyboard="false">
3128  <div class="modal-dialog modal-dialog-centered" role="document">
3129    <div class="modal-content">
3130      <div class="modal-body">
3131        <div class="qk-text--default_dark rate-limit-text">
3132          <p id="rate-limit-title">目前搶購人潮眾多,請耐心等候</p>
3133          <p class="qk-fs--body qk-fw--500 rate-limit-message">
3134            <span class="qk-text--error" id="rate-limit-countdown"></span>
3135            <span id="rate-limit-desc"></span>
3136          </p>
3137          <p class="qk-fs--body qk-fw--500 rate-limit-message" id="rate-limit-warn">若離開此頁面,可能會延長等待時間。</p>
3138        </div>
3139        <button id="rate-limit-btn" class="btn qk-btn qk-btn--primary" disabled>重新進入商品頁</button>
3140      </div>
3141    </div>
3142  </div>
3143</div>
3144
3145<script>
3146  window.showRateLimitModal = function(countdownSec) {
3147    var countdown = countdownSec || 5;
3148    var $modal = $('#rate-limit-modal');
3149    var $btn = $modal.find('#rate-limit-btn');
3150    var $countdownEl = $modal.find('#rate-limit-countdown');
3151
3152    $btn.show();
3153    $modal.find('#rate-limit-desc').text(language["product_rate_limit_desc"]);
3154    $countdownEl.text(countdown);
3155    $btn.prop('disabled', true);
3156    $modal.modal('show');
3157
3158    var timer = setInterval(function() {
3159      countdown--;
3160      $countdownEl.text(countdown);
3161      if (countdown <= 0) {
3162        clearInterval(timer);
3163        $btn.prop('disabled', false);
3164      }
3165    }, 1000);
3166
3167    $btn.off('click').on('click', function() {
3168      location.reload();
3169    });
3170  }
3171
3172  window.showAddCartRateLimitModal = function(countdownSec) {
3173    var countdown = countdownSec || 5;
3174    var $modal = $('#rate-limit-modal');
3175    var $countdownEl = $modal.find('#rate-limit-countdown');
3176
3177    $modal.find('#rate-limit-btn').hide();
3178    $modal.find('#rate-limit-desc').text(language["addcart_rate_limit_desc"]);
3179    $countdownEl.text(countdown);
3180    $modal.modal('show');
3181
3182    var timer = setInterval(function() {
3183      countdown--;
3184      $countdownEl.text(countdown);
3185      if (countdown <= 0) {
3186        clearInterval(timer);
3187        $modal.modal('hide');
3188      }
3189    }, 1000);
3190  }
3191</script>
3191
3192
3193<!-- cyb_snippet components/rate_limit_modal end -->
3194
3195<script>
3196  $(document).ready(function() {
3197    const shouldSkipQuantityCheck = false;
3198    const newAddCartModalApp = new window.themeHelper.LiquidVueHandler({
3199      componentNames: Object.keys(window.themeHelper.productModalComponents),
3200      mountSelector: '#new-addcart-modal',
3201      autoMount: false,
3202    });
3203
3204    newAddCartModalApp.createApp({
3205      el: '#new-addcart-modal',
3206      delimiters: ['${', '}'],
3207      data() {
3208        return {
3209          collectionId: 0,
3210          categories: [],
3211          color: '', // unused
3212          isCollection: true,
3213          productQuantity: 0,
3214          onlyDescription: false,
3215          showProductModal: false,
3216          popProductUrl: '',
3217          loading: false,
3218        };
3219      },
3220      mounted: function() {
3221        themeHelper.EventBus.$on('closeProductModal',this.closeProductModal);
3222        themeHelper.EventBus.$on('updateStore', this.addProduct);
3223        themeHelper.EventBus.$on('quantityDecrease', this.quantityDecrease);
3224        themeHelper.EventBus.$on('quantityIncrease', this.quantityIncrease);
3225        themeHelper.EventBus.$on('quantityChange', this.quantityChange);
3226      },
3227      methods: {
3228        addProduct: function(actionType, productData, checkoutAddToCartCallback){
3229          var self = this;
3230          var pageViewId = window.CYBERBIZ && window.CYBERBIZ.dis && window.CYBERBIZ.dis.pageViewId;
3231          $.ajax({
3232            method: 'POST',
3233            url: '/cart/add',
3234            headers: pageViewId ? { 'X-Cyb-Page-View-Id': pageViewId } : {},
3235            data: {
3236              id: productData.id,
3237              quantity: productData.quantity,
3238            },
3239            dataType: 'json',
3240            beforeSend: function() {
3241              self.loading = true;
3242              themeHelper.ajaxLoadingMsg('loading');
3243              $('.shopcart').dropdown('hide')
3244              $('.global-cart-count').hide();
3245              $('.global-cart-loading').show();
3246              $('.global-cart-loading').html('<i class="fa fa-spinner fa-pulse" style="vertical-align: middle;"></i>');
3247            },
3248            error: function(xhr) {
3249              $('.global-cart-loading').hide();
3250              $('.global-cart-count').show();
3251              self.loading = false;
3252              if (xhr.status === 429) {
3253                themeHelper.ajaxLoadingMsg('hide', 0);
3254                self.closeProductModal();
3255                window.showAddCartRateLimitModal(5);
3256                return;
3257              }
3258              themeHelper.ajaxLoadingMsg('fail', 2000);
3259            }
3260          }).done(function(data, status, request){
3261            // product modal 立即購買按鈕
3262            window.sendAddToCartEvent && sendAddToCartEvent({
3263              price: productData.price,
3264              quantity: productData.quantity,
3265              id: productData.product.id,
3266              name: productData.product.title,
3267              category: productData.product.productType,
3268              brand: productData.product.vendor,
3269              qc: productData.variant.qc,
3270              variant: {
3271                id: productData.variant.id,
3272                title: productData.variant.title,
3273                sku: productData.variant.sku,
3274                price: productData.variant.price,
3275                qc: productData.variant.qc,
3276              },
3277              position: "商品彈出視窗",
3278              request,
3279            })
3280            if (self.isQuickBuy) {
3281              if (window.liquidHelper && window.liquidHelper.language && window.liquidHelper.language.handle) {
3282                window.location = "/" + window.liquidHelper.language.handle + "/cart";
3283              } else {
3284                window.location = "/cart";
3285              }
3286            } else {
3287              themeHelper.ajaxLoadingMsg('success');
3288              pullNavCart();
3289              $('.shopcart').dropdown('show')
3290              $('.global-cart-loading').hide();
3291              self.loading = false;
3292            }
3293            if(typeof checkoutAddToCartCallback === 'function'){
3294              var callbackData = {
3295                id: productData.id,
3296                quantity: productData.quantity,
3297                title: productData.product ? productData.product.title : productData.title || ''
3298              };
3299              checkoutAddToCartCallback(callbackData)
3300            }
3301            peh.emit('product:add_to_cart', [{
3302              variantId: productData.id,
3303              quantity: productData.quantity
3304            }], self.collectionId);
3305          }).fail(function(e){
3306            if (e.status === 429) {
3307              return;
3308            }
3309            let err_msg = e.responseJSON.err_msg;
3310            err_msg && err_msg.length > 0 ?
3311              window.msg(e.responseJSON.err_msg, 'warning').show():
3312              window.msg("加入購物車有誤,請重新嘗試", 'warning').show();
3313          })
3314        },
3315        quantityDecrease: function(cartItem, isAdded){
3316          if (cartItem.quantity > 1) {
3317            cartItem.quantity -= 1;
3318          } else {
3319            window.msg("數量不得為低於 1", 'warning').show();
3320          }
3321        },
3322        quantityIncrease: function(cartItem, isAdded){
3323          const limitQuantity = cartItem.variant.inventoryQuantity;
3324          const limitBuy = cartItem.product.limitBuy
3325          if (limitBuy && cartItem.quantity >= limitBuy) {
3326            product_limit_buy = "此商品限購 limitBuy 件".replace('limitBuy', limitBuy)
3327            window.msg(product_limit_buy, 'warning').show();
3328            return;
3329          } else if (cartItem.quantity >= liquidHelper.cartQuantityLimit) {
3330            window.msg("數量超過購買上限", 'warning').show();
3331          } else if ( cartItem.quantity < limitQuantity || limitQuantity === null ||
3332            cartItem.variant.inventoryPolicy == "continue" || shouldSkipQuantityCheck) {
3333            cartItem.quantity += 1;
3334          } else {
3335            this.showInventoryMessage(limitQuantity);
3336          }
3337        },
3338        quantityChange: function(quantity, cartItem, isAdded){
3339          const limitBuy = cartItem.product.limitBuy
3340          var limitQuantity = cartItem.variant.inventoryQuantity;
3341          var inventoryPolicy = cartItem.variant.inventoryPolicy;
3342          if (Number.isInteger(quantity)) {
3343            if (quantity >= 1) {
3344              if (limitBuy && quantity >= limitBuy) {
3345                product_limit_buy = "此商品限購 limitBuy 件".replace('limitBuy', limitBuy)
3346                window.msg(product_limit_buy, 'warning').show();
3347              } else if (quantity > liquidHelper.cartQuantityLimit) {
3348                window.msg("數量超過購買上限", 'warning').show();
3349              } else if (quantity <= limitQuantity || limitQuantity === null || inventoryPolicy == "continue" || shouldSkipQuantityCheck) {
3350                cartItem.quantity = quantity;
3351              } else {
3352                cartItem.quantity = limitQuantity;
3353                this.showInventoryMessage(limitQuantity);
3354              }
3355            } else {
3356              window.msg("數量不得為低於 1", 'warning').show();
3357            }
3358          } else {
3359            window.msg("數量輸入錯誤", 'warning').show();
3360          }
3361        },
3362        popModal: function(productUrl, collectionId, color, isCollection, isShowDescription, isQuickBuy, variantId, checkoutAddToCartCallback, categories){
3363          this.showProductModal = true;
3364          this.collectionId = collectionId;
3365          this.categories = categories || [];
3366          this.popProductUrl = productUrl;
3367          this.color = color || ''; // unused
3368          this.isCollection = isCollection || false;
3369          this.isShowDescription = isShowDescription != false;
3370          this.isQuickBuy = isQuickBuy || false;
3371          this.selectedVariantId = parseInt(variantId) || undefined;
3372          this.checkoutAddToCartCallback = checkoutAddToCartCallback;
3373          document.body.style.overflow = "hidden";
3374        },
3375        closeProductModal: function() {
3376          this.showProductModal = false;
3377          document.body.style.overflow = "";
3378        },
3379        showInventoryMessage: function(inventoryQuantity) {
3380          const stockMessage = "商品庫存剩餘 count 件".replace('count', inventoryQuantity || 0);
3381          window.msg(stockMessage, 'warning').show();
3382        },
3383      }
3384    });
3385
3386    for (const componentName in window.themeHelper.productModalComponents) {
3387      newAddCartModalApp.component(
3388        componentName,
3389        window.themeHelper.productModalComponents[componentName],
3390      );
3391    }
3392
3393    window.new_addcart_modal = newAddCartModalApp.mount();
3394  });
3395</script>
3395
3396
3397<!-- cyb_snippet new_addcart_modal end -->
3398<!-- cyb_snippet components/variant_options/variant_photos_block start -->
3399<script type="text/x-template" id="variant-photos-block">
3400  <div class="product_photos qk-w--100">
3401    <!-- 有色票 -->
3402    <div class="product_photo img-flex qk-text--center" v-if="displayProductImagesColor">
3403      <img id="photo_with_images_color" class="img-lazy" :src="imgLoadingImage" data-src="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfYTYwNGJkNTNhNTFhNDg3ZGI5MjYuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=2fa9055a968f370a" alt="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲" width="450" height="450">
3404    </div>
3405    <!-- 沒色票 -->
3406    <div class="swiper swiper-container product_img_swiper" v-else>
3407      <ul class="swiper-wrapper qk-pd--0 qk-mg--0">
3408        <video-display
3409          v-if="shouldShowVideo && !videoAfterImage"
3410          :poster="!!showPhotos.length ? showPhotos[0].imageUrl : imgLoadingImage"
3411          :videoUrl="videoUrl"
3412        ></video-display>
3413        <li class="swiper-slide product_photo img-flex qk-text--center qk-of--hidden default_scale"
3414          v-for="photo in showPhotos"
3415          :key="photo.id"
3416        >
3417          <img
3418            :data-src="photo.imageUrl"
3419            width="450"
3420            height="450"
3421            class="swiper-lazy"
3422            alt="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲"
3423            @click="onEnlargePhotos()"
3424          />
3425          <div class="swiper-lazy-preloader"></div>
3426        </li>
3427        <li v-if="showDefault" class="swiper-slide product_photo img-flex qk-text--center qk-of--hidden default_scale">
3428          <img :src="imgLoadingImage" data-src="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfYTYwNGJkNTNhNTFhNDg3ZGI5MjYuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=2fa9055a968f370a" alt="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲" width="450" height="450" class="swiper-lazy">
3429        </li>
3430        <video-display
3431          v-if="shouldShowVideo && videoAfterImage"
3432          :poster="!!showPhotos.length ? showPhotos[0].imageUrl : imgLoadingImage"
3433          :videoUrl="videoUrl"
3434        ></video-display>
3435      </ul>
3436      <!-- Add Arrows -->
3437      <div class="photo-swiper-next qk-swiper_btn qk-swiper_btn--lg qk-swiper_btn--v1 qk-swiper_btn--next qk-hidden--mobile"></div>
3438      <div class="photo-swiper-prev qk-swiper_btn qk-swiper_btn--lg qk-swiper_btn--v1 qk-swiper_btn--prev qk-hidden--mobile"></div>
3439      <div class="photo-pagination qk-bd--default qk-bd--body qk-text--center qk-text--body qk-fs--breadcrumb qk-visible-sm">
3440        <span class="current-index qk-text--default_dark">${activePhotoIndex + 1}</span><span class="pagination-slash">/</span>
3441        <span>${shouldShowVideo ? (showPhotos.length ? showPhotos.length + 1 : 2) : showPhotos.length || 1}</span>
3442      </div>
3443    </div>
3444    <!-- 圖片頁碼 -->
3445    <div v-if="showThumbnails" class="thumb qk-of--auto qk-hidden--phone">
3446      <ul class="thumb-container qk-display--il_flex">
3447        <video-thumbnail
3448          v-if="shouldShowVideo && !videoAfterImage"
3449          :active="isVideoActive"
3450          :video-url="videoUrl"
3451          @click="onClickThumbnail(videoIndex)"
3452        ></video-thumbnail>
3453        <li class="img-flex qk-bd--default qk-bd--border qk-cursor--pointer qk-of--hidden qk-display--il_flex"
3454          :class="{active: (shouldShowVideo && !videoAfterImage ? index + 1 : index) === activePhotoIndex}"
3455          v-for="(photo, index) in showPhotos"
3456          :key="photo.id"
3457          @click="onClickThumbnail(shouldShowVideo && !videoAfterImage ? index + 1 : index)"
3458        >
3459          <img class="img-lazy" :src="imgLoadingImage" :data-src="photo.imageUrl" alt="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲" width="50" height="50">
3460        </li>
3461        <li v-if="showDefault"
3462          class="img-flex qk-bd--default qk-bd--border qk-of--hidden qk-display--il_flex"
3463          :class="{active: (shouldShowVideo && !videoAfterImage ? 1 : 0) === activePhotoIndex}"
3464        >
3465          <img class="img-lazy" :src="imgLoadingImage" data-src="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzU1Mjc1OTU4LzE3NDYxNTk0MDJfYTYwNGJkNTNhNTFhNDg3ZGI5MjYuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=2fa9055a968f370a" alt="My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲" width="50" height="50">
3466        </li>
3467        <video-thumbnail
3468          v-if="shouldShowVideo && videoAfterImage"
3469          :active="isVideoActive"
3470          :video-url="videoUrl"
3471          @click="onClickThumbnail(videoIndex)"
3472        ></video-thumbnail>
3473      </ul>
3474    </div>
3475  </div>
3476</script>
3476
3477
3478<script type="text/javascript">
3479  $(document).ready(function() {
3480    var autoSelectVariantBySku = false;
3481
3482    themeHelper.variantPhotosBlock.component('variant-photos-block', {
3483      template: '#variant-photos-block',
3484      delimiters: ['${', '}'],
3485      data: function() {
3486        return {
3487          variantPhotos: null,
3488          productPhotosMap: {},
3489          productPhotos: [],
3490          manualSelectedVariant: false,
3491          activePhotoIndex: 0,
3492          _navState: { variantId: null, photoIndex: 0 },
3493          suppressNavigateEvent: false,
3494          currentVariantForEvent: null,
3495          swiperPhotos: null,
3496          swiperGalleryChangeHandler: null,
3497          showDefault: true,
3498          videoUrl: '',
3499          videoAfterImage: false,
3500          imgLoadingImage:"//cdn-general.cybassets.com/img_loading.svg",
3501          thumbScrollHandler: null,
3502          thumbScrollTimeout: null,
3503          showThumbnails: false,
3504        }
3505      },
3506      props: {
3507        displayProductImagesColor: Boolean,
3508        productPhotosJson: String,
3509        productVideo: Object,
3510        videoDisplayLocation: String,
3511        productId: [String, Number],
3512        productTitle: String,
3513      },
3514      mounted: async function() {
3515        this.productPhotos = JSON.parse(this.productPhotosJson.replace(/'/g, '"'));
3516        this.productPhotosMap =
3517          this.productPhotos.reduce((acc, cur) => {
3518            acc[cur.id] = cur;
3519            return acc;
3520          }, {});
3521        this.videoUrl = !!this.productVideo && this.productVideo.url;
3522        this.showDefault = !this.showPhotos.length;
3523        this.videoAfterImage = this.videoDisplayLocation === 'after';
3524        themeHelper.EventBus.$on('updatePhotos', this.onUpdatePhotos);
3525        this.swiperGalleryChangeHandler = (_event, payload) => this.onSwiperGalleryChange(payload);
3526        $(document).on('swiper-gallery-change', this.swiperGalleryChangeHandler);
3527
3528        var sku = window.getURLParameter('sku');
3529
3530        if (sku && autoSelectVariantBySku) {
3531          themeHelper.EventBus.$on('skuReady', this.onSkuReady);
3532        } else {
3533          this.showThumbnails = true;
3534          await this.initPhotosUI();
3535        }
3536      },
3537      beforeUnmount: function() {
3538        this.removeThumbScrollListener();
3539        if (this.swiperGalleryChangeHandler) {
3540          $(document).off('swiper-gallery-change', this.swiperGalleryChangeHandler);
3541        }
3542      },
3543      methods: {
3544        navigateItemImagePayload: function(state, slideIndex, videoOffset) {
3545          return themeHelper.buildNavigateItemImagePayload(state, {
3546            product: { id: this.productId, title: this.productTitle },
3547            currentVariant: this.currentVariantForEvent,
3548            visiblePhotos: this.showPhotos,
3549            slideIndex: slideIndex,
3550            videoOffset: videoOffset,
3551          });
3552        },
3553        initPhotosUI: async function() {
3554          await this.$nextTick();
3555          this.initSwiper();
3556
3557          this._navState = this.navigateItemImagePayload(this._navState, this.initialItemIndex, this.videoOffset).nextState;
3558
3559          // 初始化縮圖滾動監聽
3560          this.initThumbScrollListener();
3561
3562          const videoElement = $('.product_video.swiper-slide-active video')[0];
3563          if (videoElement) {
3564            videoElement.addEventListener('canplay', (event) => {
3565              this.sendGtag('play');
3566            }, { once: true });
3567          }
3568        },
3569        onSkuReady: async function() {
3570          await this.initPhotosUI();
3571          this.showThumbnails = true;
3572          await this.$nextTick();
3573          imgLazyLoad.update();
3574          themeHelper.EventBus.$emit('skuPhotosReady');
3575        },
3576        initThumbScrollListener: function() {
3577          const thumbScrollContainer = this.$el.querySelector('.thumb');
3578
3579          if (thumbScrollContainer) {
3580            this.removeThumbScrollListener();
3581            this.thumbScrollHandler = () => {
3582              clearTimeout(this.thumbScrollTimeout);
3583              this.thumbScrollTimeout = setTimeout(() => {
3584                if (window.imgLazyLoad) {
3585                  imgLazyLoad.update();
3586                }
3587              }, 100);
3588            };
3589            thumbScrollContainer.addEventListener('scroll', this.thumbScrollHandler);
3590          }
3591        },
3592        removeThumbScrollListener: function() {
3593          const thumbScrollContainer = this.$el.querySelector('.thumb');
3594
3595          if (thumbScrollContainer && this.thumbScrollHandler) {
3596            thumbScrollContainer.removeEventListener('scroll', this.thumbScrollHandler);
3597            clearTimeout(this.thumbScrollTimeout);
3598            this.thumbScrollHandler = null;
3599          }
3600        },
3601        sendGtag: function(action){
3602          window.productVideoView && productVideoView(action);
3603        },
3604        handleVideoClick: function() {
3605          const video = $('.product_video.swiper-slide-active video')[0];
3606          const button = $('.product_video.swiper-slide-active button');
3607          if (video.paused){
3608            video.play();
3609            this.sendGtag('play');
3610          } else {
3611            video.pause();
3612            this.sendGtag('paused');
3613          }
3614          this.handleVideoButtonDisplay(button, video);
3615        },
3616        handleVideoButtonDisplay: function(button, video) {
3617          button.toggleClass('videoPlayer__playButton', video.paused);
3618          button.toggleClass('videoPlayer__pauseButton', !video.paused);
3619        },
3620        onUpdatePhotos: async function(currentVariant) {
3621          this.suppressNavigateEvent = true;
3622          this.currentVariantForEvent = currentVariant && currentVariant.variant
3623            ? { id: currentVariant.variant.id, sku: currentVariant.variant.sku }
3624            : null;
3625          if (this.swiperPhotos) {
3626            this.swiperPhotos.destroy(true, true);
3627          }
3628          $('.product_img_swiper .swiper-slide-duplicate').remove();
3629          $('.product_img_swiper .swiper-lazy-loading').removeClass('swiper-lazy-loading');
3630          this.manualSelectedVariant = currentVariant ? currentVariant.withSpecificVariant : false;
3631          if (currentVariant && currentVariant.photos.length) {
3632            this.variantPhotos = currentVariant.photos.map(p => this.productPhotosMap[p.id]);
3633          } else  {
3634            this.variantPhotos = null;
3635          }
3636
3637          this.activePhotoIndex = this.initialItemIndex;
3638
3639          this._navState = this.navigateItemImagePayload(this._navState, this.activePhotoIndex, this.videoOffset).nextState;
3640          await this.$nextTick();
3641          imgLazyLoad.update();
3642          this.initSwiper();
3643          this.suppressNavigateEvent = false;
3644        },
3645        onEnlargePhotos: function() {
3646          gallery_img.updateImgs(this.maxPhotos);
3647          gallery_img.toggleGallery(true, {
3648            index: this.swiperPhotos.realIndex - this.videoOffset
3649          });
3650        },
3651        onSwiperGalleryChange: function(payload) {
3652          if (!payload || payload.galleryName !== 'img') return;
3653
3654          var result = this.navigateItemImagePayload(
3655            {
3656              variantId: this.currentVariantForEvent ? this.currentVariantForEvent.id : null,
3657              photoIndex: payload.fromIndex,
3658            },
3659            payload.toIndex,
3660            0
3661          );
3662
3663          if (result.payload && !this.suppressNavigateEvent) {
3664            window.navigateItemImage(result.payload);
3665          }
3666        },
3667        onClickThumbnail: function(index) {
3668          this.activePhotoIndex = index;
3669          this.swiperPhotos.slideTo(index + 1, 500);
3670        },
3671        setVideosVolumeZero: function() {
3672          // video duplication because of swiper loop mode
3673          const videos = $('.product_video video');
3674          videos.each((_index, el)=> {
3675              el.volume = 0;
3676          });
3677        },
3678        initSwiper: function() {
3679          var self = this;
3680          this.swiperPhotos = new Swiper('.product_img_swiper', {
3681            preloadImages: false,
3682            lazy: {
3683              loadPrevNext: true,
3684            },
3685            loop: true,
3686            navigation: {
3687              nextEl: '.photo-swiper-next',
3688              prevEl: '.photo-swiper-prev',
3689            },
3690            initialSlide: this.initialItemIndex,
3691          });
3692          if (self.videoUrl) {
3693            self.setVideosVolumeZero();
3694          }
3695          this.swiperPhotos.on('touchEnd', function () {
3696            setTimeout(function() {
3697              self.activePhotoIndex = self.swiperPhotos.realIndex;
3698            }, 300);
3699          });
3700          this.swiperPhotos.on('activeIndexChange', function() {
3701            self.activePhotoIndex = self.swiperPhotos.realIndex;
3702          });
3703          this.swiperPhotos.on('click', function () {
3704            if (self.isVideoActive) {
3705              self.handleVideoClick()
3706            }
3707          });
3708          this.swiperPhotos.on('transitionEnd', function () {
3709            if (self.isVideoActive) {
3710              const video = $('.product_video.swiper-slide-active video')[0];
3711              const button = $('.product_video.swiper-slide-active button');
3712              self.handleVideoButtonDisplay(button, video);
3713            }
3714          });
3715        }
3716      },
3717      computed: {
3718        shouldShowVideo: function() {
3719          return !!this.videoUrl;
3720        },
3721        initialItemIndex: function() {
3722          if (this.shouldShowVideo && !this.videoAfterImage) {
3723            // Focus on photo if "variant with photos" selected, video otherwise
3724            return (this.manualSelectedVariant && !!this.variantPhotos?.length) ? 1 : 0;
3725          } else {
3726            // Focus on first photo
3727            return 0;
3728          }
3729        },
3730        isVideoActive: function() {
3731          return this.shouldShowVideo && this.activePhotoIndex === this.videoIndex;
3732        },
3733        showPhotos: function() {
3734          return this.variantPhotos || this.productPhotos;
3735        },
3736        maxPhotos: function() {
3737          return this.showPhotos.map(p => p.imageMaxUrl);
3738        },
3739        videoIndex: function(){
3740          return this.videoAfterImage
3741            ? this.manualSelectedVariant && !!this.variantPhotos?.length
3742              ? this.variantPhotos?.length
3743              : this.showPhotos.length || 1
3744            : 0
3745        },
3746        videoOffset: function() {
3747          return (this.shouldShowVideo && !this.videoAfterImage) ? 1 : 0;
3748        },
3749      },
3750      watch: {
3751        activePhotoIndex: function(newIndex) {
3752          var result = this.navigateItemImagePayload(this._navState, newIndex, this.videoOffset);
3753          this._navState = result.nextState;
3754          if (result.payload && !this.suppressNavigateEvent) {
3755            window.navigateItemImage(result.payload);
3756          }
3757        },
3758      }
3759    });
3760  })
3761</script>
3761
3762
3763<!-- cyb_snippet components/variant_options/video_display start -->
3764<script type="text/x-template" id="video-display">
3765  <li
3766    class="swiper-slide product_video img-flex qk-text--center qk-of--hidden default_scale">
3767    <div class="videoPlayer__wrapper qk-of--hidden">
3768      <video
3769        class="videoPlayer__video qk-cursor--pointer"
3770        :poster="poster"
3771        loop defaultMuted muted playsinline webkit-playsinline autoplay
3772      >
3773        <source :src="videoUrl" type="video/mp4">
3774        <p>你的瀏覽器不支援 HTML 5 video</p>
3775      </video>
3776      <button class="videoPlayer__pauseButton"></button>
3777    </div>
3778  </li>
3779</script>
3779
3780
3781<script type="text/javascript">
3782  $(document).ready(function() {
3783    themeHelper.variantPhotosBlock.component('video-display', {
3784      template: '#video-display',
3785      delimiters: ['${', '}'],
3786      data: function() {
3787        return {
3788          imgLoadingImage:"//cdn-general.cybassets.com/img_loading.svg",
3789        }
3790      },
3791      props: {
3792        poster: String,
3793        showPhotos: Object,
3794        videoUrl: String,
3795      },
3796    });
3797  })
3798</script>
3798
3799
3800<!-- cyb_snippet components/variant_options/video_display end -->
3801<!-- cyb_snippet components/variant_options/video_thumbnail start -->
3802<script type="text/x-template" id="video-thumbnail">
3803  <li
3804    :class="{active}"
3805    class="img-flex qk-bd--default qk-bd--border qk-cursor--pointer qk-of--hidden qk-display--il_flex"
3806    @click="click"
3807  >
3808    <video width="50" height="50">
3809      <source :src="videoUrl" type="video/mp4">
3810    </video>
3811    <button class="videoPlayer__playButton"></button>
3812  </li>
3813</script>
3813
3814
3815<script type="text/javascript">
3816  $(document).ready(function() {
3817    themeHelper.variantPhotosBlock.component('video-thumbnail', {
3818      template: '#video-thumbnail',
3819      delimiters: ['${', '}'],
3820      props: {
3821        active: Boolean,
3822        click: Function,
3823        videoUrl: String,
3824      },
3825    });
3826  })
3827</script>
3827
3828
3829<!-- cyb_snippet components/variant_options/video_thumbnail end -->
3830
3831<!-- cyb_snippet components/variant_options/variant_photos_block end -->
3832<!-- cyb_snippet components/variant_options/variant_options_block start -->
3833<script type="text/x-template" id="variant-options-block">
3834  <div>
3835    <div v-for="(option, index) in optionInfo" class="product-variant-option" :class="{'product-variant-option--hidden': shouldHideSingleVariantOptions}">
3836        <p></p>
3837        <color-option
3838          v-if="isImageColor && option.name === '顏色'"
3839          :option-key="'option' + (index + 1)"
3840          :option="option"
3841          :image-colors="imageColors"
3842          :current-image-index="currentImageIndex"
3843          :set-current-image-index="setCurrentImageIndex"
3844          :get-option-image-index="getOptionImageIndex"
3845          :current-option="currentOption"
3846        />
3847        <div class="advance variant-select-option" v-else-if="styledShopMenu==='dropDownType'">
3848          
3849          <label>${option.name}</label>
3850          <svg height="20" width="20" viewBox="0 0 20 20" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"><path d="M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"> </path></svg>
3851          <select v-show="!isMobileSize" class="qk-bg--theme_bg" :class="{'select_placeholder-color': currentOption[`option${index + 1}`] === null}" :value="String(currentOption[`option${index + 1}`])" @change="setOption(`option${index + 1}`, $event.target.value, option.types )" >
3852            <option value="null" class="select_option-hidden">請選擇${option.name}</option>
3853            <option  v-for="(types) in option.types" :disabled="!types.isValid" :value="types.name">${types.name}</option>
3854          </select>
3855          <span class="select_placeholder-color" v-if="currentOption[`option${index + 1}`] === null" v-show="isMobileSize" @click="onClickSelectModal(option,`option${index + 1}`)">請選擇${option.name}</span>
3856          <span v-else :value="currentOption[`option${index + 1}`]" v-show="isMobileSize" @click="onClickSelectModal(option,`option${index + 1}`)" v-html="currentOption[`option${index + 1}`]"></span>
3857        </div>
3858        <advance-variant-option
3859          v-else
3860          :option-key="'option' + (index + 1)"
3861          :option="option"
3862          :current-option="currentOption"
3863        />
3864      </div>
3865    <div class="mobile-modal" :class="{ 'modal-open': isModalSelectShow && isMobileSize }">
3866        <div class="mobile_modal-content">
3867          
3868          <div class="modal_close-button">
3869            <button class="btn-close qk-circle qk-circle--md qk-pos--abs qk-op--100  qk-text--heading qk-bd--product_border qk-bd--default" @click="onChangeModalSelect(false,true)"></button>
3870          </div>
3871          <p>請選擇${modalOption.name}</p>
3872          <div class="modal_select-templete qk-display--flex qk-of_y--auto qk-w--100">
3873            <div class="options-container">
3874              <label :class="{'seleced-option': currentOption && currentOption[selectOption] === data.name, 'avoid-clicks':!data.isValid}" v-for="data in modalOption.types" @click="setOption(selectOption, data.name, modalOption.types)">${data.name}</label>
3875            </div>
3876          </div>
3877          <div v-if="isCartEnabled && salesModePurchasable" class="modal_select_footer qk-display--flex qk-hidden--pc">
3878            <div v-show="variantSize === 1" class="qk-display--flex qk-w--100">
3879              <div class="product_variant_quantity">
3880                <span class="product_quantity">
3881                  <div v-if="isModalSelectShow && isMobileSize" class="btn-group" role="group" aria-label="First group">
3882                    <button class="btn add-down qk-bd--product_border" type="button" @click="quantityChange(false)" ></button>
3883                    <input class="btn item-quantity qk-text--heading qk-bd--product_border" type="text" name="quantity" value="1" data-old-value="1">
3884                    <button class="btn add-up qk-bd--product_border" type="button" @click="quantityChange(true)"></button>
3885                  </div>
3886                </span>
3887              </div>
3888              <button
3889                class="btn addToCart_mobile btn_to_cart_mobile open_product_modal qk-btn qk-btn--secondary qk-flex--1 qk-fs--breadcrumb qk-text-truncate"
3890                data-handle="mfb1004-20250502120342">
3891                加入購物車</button>
3892            </div>
3893            <div v-show="variantSize > 1" class="qk-display--flex qk-w--100">
3894              <button type="button" class="modal_cancel qk-w--50 qk-bd--default qk-btn--secondary qk-bd--button qk-text--button" @click="onChangeModalSelect(false,false)">取消</button>
3895              <button type="button" class="qk-btn qk-w--50 qk-btn--primary qk-btn--lg qk-fs--body qk-bd--button qk-test--button_text" @click="onChangeModalSelect(false,true)">完成</button>
3896            </div>
3897          </div>
3898        </div>
3899    </div>
3900  </div>
3901</script>
3901
3902
3903<!-- cyb_snippet components/variant_options/color_image_option start -->
3904<script id="color-option" type="text/x-template">
3905  <div class="option color_option">
3906    <span class="title qk-text--heading">商品顏色:</span>
3907    <label
3908      v-for="(imageColor, index) in imageColors"
3909      :class="{
3910        'image-option': true,
3911        'selected': selectedClass(index),
3912        'disabled': disabledClass(index),
3913      }"
3914      @mouseleave="setCurrentImageIndex(index)"
3915      @mouseover="getOptionImageIndex(index)"
3916      @click="setOption(optionKey, index)"
3917      class="qk-bd--default qk-bd--border"
3918    >
3919      <span class="img-flex qk-display--il_bk">
3920        <img v-if="imageColor !== 'noColorImage'" :src="imageColor.large" alt="image">
3921        <img v-else src="/assets/no-image-large.png" alt="image">
3922      </span>
3923    </label>
3924  </div>
3925</script>
3925
3926
3927<script type="text/javascript">
3928  $(document).ready(function () {
3929    themeHelper.variantOptionsBlock.component('color-option', {
3930      template: '#color-option',
3931      delimiters: ['${', '}'],
3932      props: {
3933        optionKey: String,
3934        option: Object,
3935        imageColors: Array,
3936        setCurrentImageIndex: Function,
3937        getOptionImageIndex: Function,
3938        currentOption: Object,
3939      },
3940      methods: {
3941        setOption: function(optionKey, index) {
3942          var type = this.option.types[index];
3943          if (type.isValid) {
3944            themeHelper.EventBus.$emit('toggleCurrentOption', optionKey, type.name);
3945          }
3946        },
3947        selectedClass: function(index) {
3948          return this.currentOption[this.optionKey] === this.option.types[index].name;
3949        },
3950        disabledClass: function(index) {
3951          return !this.option.types[index].isValid;
3952        },
3953      },
3954    });
3955  });
3956</script>
3956
3957
3958<!-- cyb_snippet components/variant_options/color_image_option end -->
3959<!-- cyb_snippet components/variant_options/advance_option start -->
3960<script id="advance-variant-option" type="text/x-template">
3961  <div class="advance">
3962    <div class="option_title qk-text--heading">${option.name}</div>
3963    <label
3964      v-for="type in option.types"
3965      :class="{
3966        'selected': selectedClass(type),
3967        'disabled': disabledClass(type),
3968      }"
3969      @click="setOption(optionKey, type)"
3970      class="option qk-btn qk-btn--md qk-bd--button qk-text--button qk-text--center qk-pd_x--1"
3971    >
3972      <span class="text">${type.name}</span>
3973    </label>
3974  </div>
3975</script>
3975
3976
3977<script type="text/javascript">
3978  $(document).ready(function() {
3979    themeHelper.variantOptionsBlock.component('advance-variant-option', {
3980      template: '#advance-variant-option',
3981      delimiters: ['${', '}'],
3982      props: {
3983        optionKey: String,
3984        option: Object,
3985        currentOption: Object,
3986      },
3987      methods: {
3988        setOption: function(optionKey, type) {
3989          if(type.isValid){
3990            themeHelper.EventBus.$emit('toggleCurrentOption', optionKey, type.name);
3991          }
3992        },
3993        selectedClass: function(type) {
3994          return this.currentOption[this.optionKey] === type.name;
3995        },
3996        disabledClass: function(type) {
3997          return !type.isValid;
3998        },
3999      }
4000    });
4001  });
4002</script>
4002
4003
4004<!-- cyb_snippet components/variant_options/advance_option end -->
4005
4006
4007<!-- cyb_snippet _variant_options_block_js start -->
4008<script type="text/javascript">
4009  $(document).ready(function() {
4010    themeHelper.variantOptionsBlock.component('variant-options-block', {
4011      template: '#variant-options-block',
4012      delimiters: ['${', '}'],
4013      props: {
4014        productApiUrl: String,
4015        sku: String,
4016        autoSelectVariantBySku: Boolean,
4017        hideOtherVariantsBySku: Boolean,
4018        hideSingleVariantOptions: Boolean,
4019        salesModePurchasable: Boolean,
4020        defaultPrice: String,
4021        defaultComparePrice: String,
4022        defaultDiscounted: Boolean,
4023      },
4024      data: function() {
4025        return {
4026          styledShopMenu: "buttonType",
4027          currentImageIndex: 0,
4028          isModalSelectShow: false,
4029          selectOption: '',
4030          selectCurrentStr:'',
4031          modalOption: {},
4032          currentOption: {
4033            option1: null,
4034            option2: null,
4035            option3: null,
4036          },
4037          currentVariant: null,
4038          product: {},
4039          isLoading: true,
4040          isImageColorsUsed: liquidHelper.isImageColorsUsed,
4041          isEmptyClickable: liquidHelper.isEmptyClickable,
4042          hasPriceWithDiscountPlugin: liquidHelper.hasPriceWithDiscountPlugin,
4043          isCartEnabled: liquidHelper.isCartEnabled,
4044        }
4045      },
4046      mounted: function() {
4047        this.getProductDetail();
4048        themeHelper.EventBus.$on('toggleCurrentOption',this.toggleCurrentOption);
4049      },
4050      computed: {
4051        imageColors: function() {
4052          //色票一定成對
4053          var self = this;
4054          var images = this.photoUrls.slice(0);
4055          var imageColorNum = this.colorOption.length;
4056          for(var i = imageColorNum; i < imageColorNum * 2; i++) {
4057            if(!images[i]) {
4058              images.push('noColorImage');
4059            }
4060          }
4061          return images.slice(imageColorNum, imageColorNum * 2);
4062        },
4063        photoUrls: function() {
4064          return this.product.photoUrls.length > 0 ? this.product.photoUrls : [this.featuredImage];
4065        },
4066        featuredImage: function() {
4067          return this.product.featuredImage;
4068        },
4069        swiperPhotos: function() {
4070          if(this.isImageColor) {
4071            return this.photoUrls.slice(0, this.colorOption.length);
4072          }
4073          return this.photoUrls.length > 0 ? this.photoUrls : [this.featuredImage];
4074        },
4075        firstValidVariant: function() {
4076          var self = this;
4077          var result = this.product.variants.find(function(variant) {
4078            return variant.available;
4079          });
4080
4081          return result ? result : null;
4082        },
4083        shouldHideOtherVariants: function() {
4084          return this.hideOtherVariantsBySku &&
4085                 this.sku &&
4086                 this.currentVariant &&
4087                 this.currentVariant.sku === this.sku;
4088        },
4089        shouldHideSingleVariantOptions: function() {
4090          return this.hideSingleVariantOptions &&
4091                 this.product.variants &&
4092                 this.product.variants.length <= 1;
4093        },
4094        options: function() {
4095          return this.product.options;
4096        },
4097        optionTypes: function() {
4098          // 先根據設定的variants來排序
4099          var self = this;
4100
4101          var option1 = [];
4102          var option2 = [];
4103          var option3 = [];
4104          this.product.variants.forEach(function(item) {
4105            if (item.option1 !== null) option1.push(item.option1);
4106            if (item.option2 !== null) option2.push(item.option2);
4107            if (item.option3 !== null) option3.push(item.option3);
4108          })
4109
4110          var filteredOptionTypes = [];
4111          this.product.optionTypes.forEach(function(item, index) {
4112            filteredOptionTypes.push(self.getUniqueVariant(eval('option' + (index + 1))).join(','));
4113          });
4114
4115          return filteredOptionTypes;
4116        },
4117        optionInfo: function() {
4118          var self = this;
4119
4120          if (self.options) {
4121            return self.options.map(function(option, index) {
4122              return {
4123                name: option,
4124                types: self.getOptions('option' + (index + 1), self.optionTypes[index].split(','))
4125              }
4126            });
4127          }
4128        },
4129        colorOptionIndex: function() {
4130          return this.options.findIndex(function(option) {
4131            return option === '顏色';
4132          });
4133        },
4134        colorOption: function() {
4135          var optionIndex = this.colorOptionIndex
4136          return optionIndex === -1 ? null : this.optionTypes[optionIndex].split(',');
4137        },
4138        isImageColor: function() {
4139          return this.isImageColorsUsed && _.includes(this.product.options, '顏色');
4140        },
4141        isMobileSize: function() {
4142          return window.innerWidth <= 580
4143        },
4144        variantSize: function() {
4145          if(this.product.options){
4146          return this.product.options.length;
4147          }
4148        },
4149        isAutoSelectVariantBySku: function() {
4150          return this.sku && this.autoSelectVariantBySku;
4151        },
4152      },
4153      methods: {
4154        onClickSelectModal: function(objData, selectOptionStr) {
4155          this.isModalSelectShow = true;
4156          this.modalOption = objData;
4157          this.selectOption = selectOptionStr
4158        },
4159        onChangeModalSelect: function(flag, isSelect) {
4160          if(!isSelect){
4161            this.setOption(this.selectOption,this.selectCurrentStr,this.modalOption.types)
4162          }
4163          this.isModalSelectShow = flag;
4164        },
4165        setOption: function(optionKey, type, dataArr) {
4166          let flag = true
4167          dataArr.forEach(item => {
4168            if (item.name === type) {
4169              flag = item.isValid
4170            }
4171          })
4172          if (flag) {
4173            this.toggleCurrentOption(optionKey, type)
4174          }
4175        },
4176        setChoose: function(currentVariant) {
4177          var currentVariantData = {};
4178          if (currentVariant) {
4179            currentVariantData = {
4180              id: this.currentVariant.id,
4181              bonus: this.currentVariant.maxUsableBonus,
4182              name: this.currentVariant.title,
4183              inventoryPolicy: this.currentVariant.inventoryPolicy,
4184              compareAtPrice: this.currentVariant.compareAtPrice,
4185              imgUrl: this.currentVariant.imgUrl,
4186              inventoryQuantity: this.currentVariant.inventoryQuantity,
4187              option1: this.currentVariant.option1,
4188              option2: this.currentVariant.option2,
4189              option3: this.currentVariant.option3,
4190              price: this.currentVariant.price,
4191              productId: this.currentVariant.productId,
4192              sku: this.currentVariant.sku,
4193              qc: this.currentVariant.qc,
4194              hidePrice: this.product.hidePrice === true,
4195            };
4196          } else {
4197            currentVariantData = {
4198              price: this.defaultPrice,
4199              compareAtPrice: this.defaultComparePrice,
4200              isDiscounted: this.defaultDiscounted,
4201              hidePrice: this.product.hidePrice === true,
4202            }
4203          }
4204          const isUpcomingProduct = this.isSellTimeAfterNow(this.product.sellFrom);
4205          this.$emit('set-choose', currentVariantData, isUpcomingProduct);
4206        },
4207        onError: function() {
4208          window.msg("", 'error').show();
4209        },
4210        showRateLimitPopup: function() {
4211          showRateLimitModal(5);
4212        },
4213
4214        // get product detail
4215        getProductDetail: function() {
4216          var self = this;
4217          $.ajax({
4218            url: self.productApiUrl + '.json',
4219            type: 'GET',
4220            timeout: 30000,
4221            beforeSend: function() {
4222              self.isLoading = true;
4223            },
4224            error: function(xhr){
4225              if (xhr.status === 429) {
4226                self.isLoading = false;
4227                self.showRateLimitPopup();
4228              } else {
4229                self.onError();
4230              }
4231            }
4232          }).done(function(data){
4233            if (!data.id) {
4234              self.onError();
4235              return;
4236            }
4237
4238            var productData = [themeHelper.toCamelCase(data)];
4239            self.product = themeHelper.priceWithDiscount(productData, self.hasPriceWithDiscountPlugin)[0];
4240
4241            var shouldSkipAutoSelected = false;
4242
4243            if (self.isAutoSelectVariantBySku) {
4244              var skuVariant = self.product.variants.find(function(variant) {
4245                return variant.sku === self.sku;
4246              });
4247
4248              if (skuVariant) {
4249                if (self.isEmptyClickable ||
4250                  skuVariant.inventoryPolicy === "continue" ||
4251                  skuVariant.inventoryQuantity > 0) {
4252                  self.applyVariant(skuVariant, true);
4253                  themeHelper.EventBus.$emit('skuReady');
4254                  self.isLoading = false;
4255                  return;
4256                } else {
4257                  // 若 sku 存在但不可購買,則跳過第一個款式選擇
4258                  shouldSkipAutoSelected = true;
4259                }
4260              } else {
4261                // 若 sku 不存在,則跳過第一個款式選擇
4262                shouldSkipAutoSelected = true;
4263              }
4264              themeHelper.EventBus.$emit('skuReady');
4265            }
4266
4267            if (
4268              !shouldSkipAutoSelected && (
4269              self.product.variants.length === 1 ||
4270              liquidHelper.isFirstVariantSelected
4271            )) {
4272              var variant = self.product.variants.length === 1 ? self.product.variants[0] : self.firstValidVariant;
4273              if (!variant) {
4274                self.isLoading = false;
4275                return;
4276              }
4277
4278              if (
4279                !self.isEmptyClickable &&
4280                variant.inventoryPolicy === "deny" &&
4281                variant.inventoryQuantity === 0
4282              ) {
4283                self.isLoading = false;
4284                return;
4285              }
4286
4287              self.applyVariant(variant, false);
4288              if (self.isImageColorsUsed) { // 若有顯示色票且有預選第一個款式的更換圖片
4289                var firstValidColorIndex = self.colorOption.findIndex(function(item) {
4290                  return item === variant.option1
4291                });
4292                self.$emit('get-option-image', self.photoUrls[firstValidColorIndex].grande);
4293              }
4294            }
4295
4296            self.isLoading = false;
4297          })
4298        },
4299        applyVariant: function(variant, waitPhotosReady) {
4300          var self = this;
4301          this.currentVariant = variant;
4302          this.setChoose(variant);
4303          this.setDefaultOption();
4304
4305          if (waitPhotosReady) {
4306            themeHelper.EventBus.$on('skuPhotosReady', function () {
4307              if (variant.photos && variant.photos.length > 0) {
4308                self.setVariantPhotos();
4309              }
4310            });
4311          } else {
4312            this.setVariantPhotos();
4313          }
4314        },
4315        toggleCurrentOption: function(key, value) {
4316          if (this.product.variants.length === 1) {
4317            return;
4318          }
4319
4320          if (this.shouldHideOtherVariants) {
4321            return;
4322          }
4323
4324          this.currentOption[key] =
4325            (this.currentOption[key] === value || value === 'null') ? null : value;
4326          var variantIndex = this.getVariantIndex();
4327          if(variantIndex !== -1) {
4328            this.currentVariant = this.product.variants[variantIndex];
4329          } else {
4330            this.currentVariant = null;
4331          }
4332          this.setChoose(this.product.variants[variantIndex]);
4333          if (this.currentOption[key] !== null) {
4334            var optionIndex = parseInt(key.replace('option', '')) - 1;
4335            appStoreSelectItemEvent(this.product, this.product.options[optionIndex], this.currentOption[key], this.currentVariant);
4336          }
4337          if (Object.values(this.currentOption).every(v => v === null) || this.currentVariant) {
4338            this.setVariantPhotos();
4339          }
4340        },
4341        setCurrentImageIndex: function(index) {
4342          this.currentImageIndex = this.getSelectedColorIndex();
4343          if (this.currentImageIndex > -1) {
4344            var currentImageIndex = this.currentImageIndex;
4345          } else {
4346            var currentImageIndex = 0;
4347          }
4348
4349          this.$emit('get-option-image', this.photoUrls[currentImageIndex].grande);
4350        },
4351        getOptionImageIndex: function(index) {
4352          this.currentImageIndex = index;
4353          this.$emit('get-option-image', this.photoUrls[index].grande);
4354        },
4355        setDefaultOption: function() {
4356          var self = this;
4357          Object.keys(self.currentOption).forEach(function(optionKey) {
4358            self.currentOption[optionKey] = self.currentVariant[optionKey];
4359          });
4360        },
4361        getVariantIndex: function() {
4362          var self = this;
4363          return self.product.variants.findIndex(function(variant, index) {
4364            var isVariant = true;
4365            Object.keys(self.currentOption).forEach(function(option) {
4366              if(variant[option] !== self.currentOption[option]){
4367                isVariant = false;
4368              }
4369            });
4370            return isVariant;
4371          });
4372        },
4373        // 篩選重複品項
4374        getUniqueVariant: function(variants) {
4375          return variants.filter(function(value, index, self) {
4376            return self.indexOf(value) === index;
4377          });
4378        },
4379        // 取得已選取的color index
4380        getSelectedColorIndex: function() {
4381          var self = this;
4382          var optionIndex = _.indexOf(self.options, '顏色') + 1;
4383          var color = self.currentOption['option' + optionIndex];
4384
4385          return _.indexOf(self.colorOption, color);
4386        },
4387        getOptions: function(optionKey, optionTypes) {
4388          var self = this;
4389
4390          // 透過 sku 預選且有對應的 variant,則只顯示該 variant 的 option
4391          if (this.shouldHideOtherVariants) {
4392            var currentOptionValue = this.currentVariant[optionKey];
4393            var isValid = true;
4394
4395            if (!this.isEmptyClickable) {
4396              isValid = this.currentVariant.inventoryQuantity === null ||
4397                        this.currentVariant.inventoryQuantity > 0 ||
4398                        this.currentVariant.inventoryPolicy === 'continue';
4399            }
4400
4401            return [{
4402              name: currentOptionValue,
4403              isValid: isValid
4404            }];
4405          }
4406
4407          return optionTypes.map(function(optionType, index) {
4408            var isValid = true;
4409
4410            // 選出包含目前type的variant
4411            var matchVariants = self.product.variants.filter(function(variant) {
4412              return variant[optionKey] === optionType;
4413            });
4414            // 篩選已勾選type
4415            Object.keys(self.currentOption).forEach(function(currentOptionKey) {
4416              if(currentOptionKey !== optionKey){
4417                matchVariants = matchVariants.filter(function(variant) {
4418                  if(self.currentOption[currentOptionKey]) {
4419                    return variant[currentOptionKey] === self.currentOption[currentOptionKey]
4420                  } else {
4421                    return true;
4422                  }
4423                });
4424              }
4425            });
4426            // 無variant代表此type不可選
4427            if(matchVariants.length === 0) {
4428              isValid = false;
4429            }
4430
4431            if (!self.isEmptyClickable) {
4432              isValid = false;
4433              matchVariants.find(function(item) {
4434                if (item.inventoryQuantity === null || item.inventoryQuantity > 0 || item.inventoryPolicy === 'continue') {
4435                  isValid = true;
4436                }
4437              });
4438            }
4439
4440            return {
4441              name: optionType,
4442              isValid: isValid
4443            }
4444          });
4445        },
4446        getVariantPhotos: function() {
4447          if (!this.currentVariant) {
4448            return null;
4449          }
4450
4451          if (!this.currentVariant.photos || this.currentVariant.photos.length === 0) {
4452            return {
4453              withSpecificVariant: !!this.currentVariant.option1,
4454              photos: [],
4455              variant: {
4456                id: this.currentVariant.id,
4457                sku: this.currentVariant.sku
4458              },
4459            };
4460          }
4461
4462          var sortedPhotos = this.currentVariant.photos.sort(function(prev, next) {
4463            return prev.position - next.position;
4464          });
4465
4466          return {
4467            withSpecificVariant: !!this.currentVariant.option1,
4468            photos: sortedPhotos,
4469            variant: {
4470              id: this.currentVariant.id,
4471              sku: this.currentVariant.sku
4472            },
4473          };
4474        },
4475        setVariantPhotos: function() {
4476          themeHelper.EventBus.$emit('updatePhotos', this.getVariantPhotos());
4477        },
4478        cartQuantityCheck({quantity, limitQuantity, cartLimit, inventoryPolicy}){
4479          if(quantity < 1){
4480            return 'less_then_1';
4481          }
4482          if(quantity > limitQuantity && limitQuantity !== null && inventoryPolicy !== "continue") {
4483            return 'over_product_quantity';
4484          }
4485          if(quantity > cartLimit){
4486            return 'over_cart_limit';
4487          }
4488          if(isNaN(quantity)){
4489            return 'not_a_number';
4490          }
4491          return '';
4492        },
4493        changeQuantity({elType, errType, quantity, addToCart, quantityInput, limitQuantity, cartLimit}){
4494          if(errType === ''){
4495            if(elType === 'btn'){
4496              quantityInput.val(quantity);
4497              quantityInput.trigger('change');
4498            }
4499            var old = quantityInput.data("old-value");
4500            if(quantity === old){
4501              quantityInput.data("old-value", quantity);
4502            }
4503            // for GA
4504            addToCart.data("quantity", quantity);
4505          } else {
4506            var old_value = quantityInput.data("old-value");
4507            if(elType === 'input'){
4508              switch(errType){
4509                case 'less_then_1':
4510                  quantityInput.val(1);
4511                  break;
4512                case 'over_product_quantity':
4513                  quantityInput.val(limitQuantity);
4514                  break;
4515                case 'over_cart_limit':
4516                  quantityInput.val(cartLimit);
4517                  break;
4518                default:
4519                  quantityInput.val(old_value);
4520                  break;
4521              }
4522            }
4523            this.cartQuantityMessage(errType)
4524          }
4525        },
4526        cartQuantityMessage(errType) {
4527          switch(errType){
4528            case 'less_then_1':
4529              window.msg(language["less_then_one"], 'warning').show();
4530              break;
4531            case 'over_product_quantity':
4532              window.msg(language["over_product_quantity"], 'warning').show();
4533              break;
4534            case 'over_cart_limit':
4535              window.msg(language["over_cart_limit"], 'warning').show();
4536              break;
4537            case 'not_a_number':
4538              window.msg(language["please_enter_number"], 'warning').show();
4539              break;
4540            default:
4541              break;
4542          }
4543        },
4544        quantityChange(isPluSquantity){
4545          if (!this.findVariant()) {
4546            return;
4547          }
4548          let errType           = '';
4549          let el                = $('#product');
4550          let cartLimit         = this.getCartQuantityLimit(el);
4551          let limitQuantity     = selectedVariant.inventoryQuantity;
4552          let inventoryPolicy   = selectedVariant.inventoryPolicy;
4553          let quantityInput     = el.find(".product_quantity input");
4554          let quantity          = parseInt($(quantityInput).val());
4555          let addToCart         = el.find('.addToCart');
4556          isPluSquantity ? quantity += 1: quantity -= 1
4557          errType = this.cartQuantityCheck({quantity, limitQuantity, cartLimit, inventoryPolicy});
4558          this.changeQuantity({ elType: 'btn', errType, quantity, addToCart, quantityInput, limitQuantity, cartLimit});
4559        },
4560        findVariant() {
4561          if (typeof selectedVariant === 'undefined' || !$.isNumeric(selectedVariant.id)) {
4562            window.msg(language["please_choose_product"], 'info').show();
4563            return false;
4564          } else {
4565            return true;
4566          }
4567        },
4568        getCartQuantityLimit(el) {
4569          return el.data('cart_quantity_limit');
4570        },
4571        isSellTimeAfterNow(sellTime) {
4572          if (!sellTime) return false;
4573          const saleTime = new Date(sellTime);
4574          const now = new Date();
4575          return saleTime > now;
4576        },
4577      }
4578    });
4579  });
4580</script>
4580
4581
4582<!-- cyb_snippet _variant_options_block_js end -->
4583
4584<!-- cyb_snippet components/variant_options/variant_options_block end -->
4585<!-- cyb_snippet _custom_icon start -->
4586<script src='//cdn-general.cybassets.com/frontend/shop/navIcon-3a2e378145f8a165.js' type='text/javascript'></script>
4586
4587
4588<script>
4589  (function() {
4590    const iconUrlMap = new Map([
4591      ['custom_icon_type_home', null],
4592      ['custom_icon_type_tracking_items', null],
4593      ['custom_icon_type_account', null],
4594      ['custom_icon_type_cart', null],
4595      ['custom_icon_type_search', null],
4596      ['custom_icon_type_menu', null]
4597    ]);
4598    const elements = document.querySelectorAll('[data-icon-type]');
4599    elements.forEach((element, index) => {
4600      const iconAttributes = element.getAttribute('data-icon-type');
4601
4602      const uniqueId = `icon_${iconAttributes}_${index}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
4603      element.id = uniqueId;
4604      window.renderNavCustomIcon(`#${uniqueId}`, {
4605        navIconStyle: "icon_type_default",
4606        customIconUrl: iconUrlMap.get(iconAttributes) || '',
4607        iconAttributes: iconAttributes,
4608        currentTemplate: "product",
4609      });
4610    });
4611  })();
4612</script>
4612
4613
4614<!-- cyb_snippet _custom_icon end -->
4615
4616<script>
4617  // 設定款式資訊/顯示款式資訊
4618  function getURLParameter(name) {
4619    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null;
4620  }
4621  // sku_properties:各款式的 option pairs(當前語系,後端 drop 已翻譯),事件用 variantId 查表
4622  var variantProperties = {
4623    "66368633": []
4624  };
4625  function addToWishListEvent(id, data) {
4626    try {
4627      if (appMarketAddToWishListEvent && data) {
4628        var dataSet = {
4629          name: "My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲",
4630          category: null,
4631          categories: ["My First Book 布書"],
4632          sku: data.sku,
4633          price: data.price,
4634          compare_at_price: data.compare_at_price,
4635          properties: variantProperties[id] || [],
4636          quantity: data.inventory_quantity,
4637          variant: data.variant,
4638          listName: "單產品細覽" || null,
4639          productId: 55275958,
4640          variantId: id,
4641        }
4642        appMarketAddToWishListEvent(dataSet)
4643      }
4644    } catch (e) {
4645      console.error(e);
4646    }
4647  }
4648  function removeFromWishListEvent(id, data) {
4649    try {
4650      if (appMarketRemoveFromWishListEvent && data) {
4651        var dataSet = {
4652          name: "My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲",
4653          category: null,
4654          categories: ["My First Book 布書"],
4655          sku: data.sku,
4656          price: data.price,
4657          compare_at_price: data.compare_at_price,
4658          properties: variantProperties[id] || [],
4659          quantity: data.inventory_quantity,
4660          variant: data.variant,
4661          listName: "單產品細覽" || null,
4662          productId: 55275958,
4663          variantId: id,
4664        }
4665        appMarketRemoveFromWishListEvent(dataSet)
4666      }
4667    } catch (e) {
4668      console.error(e);
4669    }
4670  }
4671  function isSellTimeAfterNow(sellTime) {
4672    if (!sellTime) return false;
4673    const saleTime = new Date(sellTime);
4674    const now = new Date();
4675    return saleTime > now;
4676  }
4677  $(document).ready(function() {
4678  var ProductInfoObject =  new ProductInfo()
4679    ProductInfoObject.init({
4680      additionalPrice: "加購價",
4681      sellFrom: "2025-05-01T00:00:00+08:00" ,
4682      productId:"55275958",
4683      productTitle: "My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲",
4684      productPreOrder: "預購商品",
4685      productExistingVariantsFirstId: '66368633',
4686      productNotificationEnabled: '已登記補貨通知',
4687      productNotifyMeWhenStockArrives: '已售完,貨到通知我',
4688      productOptionsSize: "0",
4689      productPleaseChooseProduct: "請選擇商品款式",
4690      generalInternetError: "網路連線異常,請重新整理",
4691      productVariantsInfo: "66368633,MFB1006,2650.0,1,2650.0,deny,0.0,,My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲 - ,cyberbiz,",
4692      productLimitBuy:  null,
4693      purchaseEligibility: {"required":false,"eligible":true,"status":"eligible"},
4694      salesModePurchasable: true,
4695    });
4696    // 商品款式
4697    var isUpcomingProduct = isSellTimeAfterNow("2025-05-01T00:00:00+08:00") && null;
4698    // 初始化,取得消費者所有品項的通知設定
4699    var variantNotifications = {};
4700    
4701      ProductInfoObject.initVariantNotifications();
4702    
4703    // 初始化,檢查所有商品的庫存,判斷購物車按鈕和庫存顯示狀態
4704    ProductInfoObject.checkButtonStatus(isUpcomingProduct);
4705    // 加入購物車 open product modal
4706    ProductInfoObject.initOpenProductModal();
4707    // 立即購買 mobile product modal
4708    ProductInfoObject.initMobileProductModal()
4709    // 聯絡商家
4710    ProductInfoObject.initContactTheMerchant()
4711    // 貨到通知
4712    ProductInfoObject.initGoodsArrivalNotification();
4713    ProductInfoObject.checkInWishList(window.$('.product-variant-id').val())
4714    
4715      ProductInfoObject.setUpDiscountsTag();
4716    
4717    
4718    })
4719
4720    const userAgent = navigator.userAgent;
4721    const isIOS = /iPad|iPhone|iPod/.test(userAgent) && !window.MSStream;
4722    const isLiff = /Line\/[\d.]+/i.test(userAgent);
4723    const $productButtonMobile = $('.product_button_mobile');
4724
4725    if ($productButtonMobile.length && isIOS && isLiff) {
4726      $productButtonMobile.addClass('is-ios-liff');
4727    }
4728</script>
4728
4729
4730
4731<div id="product_description" class="product_description">
4732  <div class="desc_sections">
4733    <ul class="qk-bg--theme_bg qk-display--flex qk-mg--0 qk-pd--0 qk-bd--default qk-bd--product_border qk-bd_r--none">
4734      <!-- 商品介紹 -->
4735      
4736        <li class="qk-flex--1">
4737          <a href="#desc_section_1" class="scroll active qk-text--text qk-fs--title qk-display--il_bk qk-text--center qk-w--100 qk-vert--bottom">
4738            商品介紹
4739          </a>
4740        </li>
4741      
4742      <!-- 規格說明 -->
4743      
4744        <li class="qk-flex--1 qk-bd--product_border">
4745          <a href="#desc_section_2" class="scroll qk-text--text qk-fs--title qk-display--il_bk qk-text--center qk-w--100 qk-vert--bottom">
4746            <div>規格說明</div>
4747          </a>
4748        </li>
4749      
4750      <!-- 運送方式 -->
4751      
4752        <li class="qk-flex--1 qk-bd--product_border">
4753          <a href="#desc_section_3" class="scroll qk-text--text qk-fs--title qk-display--il_bk qk-text--center qk-w--100 qk-vert--bottom">
4754            <div>運送方式</div>
4755          </a>
4756        </li>
4757      
4758      <!-- 票券注意事項 -->
4759      
4760      <!-- 加入購物車modal -->
4761      
4762        <li class="add-to-cart-container qk-flex--1 qk-bd--product_border">
4763          <a
4764            href="#"
4765            id="add_to_cart"
4766            class="open_product_modal qk-btn qk-btn--primary qk-btn--lg qk-pos--abs qk-r--0 qk-display--il_bk qk-text--center qk-w--100"
4767            data-id="55275958"
4768            data-handle="mfb1004-20250502120342">
4769            <div>加入購物車</div>
4770          </a>
4771          <button class="btn btn_not_sale hidden qk-btn qk-btn--soldout qk-btn--lg qk-pd--0 qk-fs--title qk-pos--abs qk-r--0" type="button">
4772            尚未開賣
4773          </button>
4774          <button class="btn btn_login_to_view hidden qk-btn qk-btn--soldout qk-btn--lg qk-pd--0 qk-fs--title qk-pos--abs qk-r--0" type="button">
4775            登入查看資格
4776          </button>
4777          <button class="btn btn_not_eligible hidden qk-btn qk-btn--soldout qk-btn--lg qk-pd--0 qk-fs--title qk-pos--abs qk-r--0" type="button">
4778            購買資格不符
4779          </button>
4780          
4781            <a
4782              href="#"
4783              id="notice_to_buy"
4784              class="btn_notice qk-btn qk-btn--primary qk-btn--lg qk-pos--abs qk-r--0 qk-display--il_bk qk-text--center qk-w--100">
4785              <div>已售完,貨到通知我</div>
4786            </a>
4787          
4788        </li>
4789      
4790    </ul>
4791  </div>
4792  <div class="desc_body">
4793    <div id="ckeditor">
4794      
4795        <div id="desc_section_1" class="desc_section qk-pd_t--2">
4796          <h5 class="section-heading qk-text--heading qk-fs--hd2 qk-bd_l--default qk-bd--heading qk-pd_l--05">商品介紹</h5>
4797          <div class="ckeditor qk-mg_t--1"><p style="text-align: center;"><span style="color:#c0392b;"><strong><span style="font-size:18px;">適用年齡:0歲以上</span></strong></span></p>
4798
4799<p style="text-align:center"><img alt="" src="//cdn-general.cybassets.com/s/files/23832/ckeditor/pictures/content_65930345-2015-4399-b6fc-2fe036068064.jpg" width="600"></p>
4800
4801<p>&nbsp;</p>
4802
4803<p style="text-align:center"><img alt="" src="//cdn-general.cybassets.com/s/files/23832/ckeditor/pictures/content_fda56312-e76f-4ea4-8189-13f6d6fd05db.
4803jpg" width="600"></p>
4804
4805<p style="text-align:center"><img alt="" src="//cdn-general.cybassets.com/s/files/23832/ckeditor/pictures/content_a2ea3c1e-1396-49e5-a4f9-f3f877ece958.jpg" width="600"></p>
4806
4807<p style="text-align:center"><img alt="" src="//cdn-general.cybassets.com/s/files/23832/ckeditor/pictures/content_777a5d00-f25d-4199-8852-b167ad45c565.jpg" width="600"></p>
4808
4809<p style="text-align:center"><img alt="" src="//cdn-general.cybassets.com/s/files/23832/ckeditor/pictures/content_e66093bd-dc18-4f18-8575-c483f565ae8b.jpg" width="600"></p>
4810
4811<p style="text-align:center"><img alt="" src="//cdn-general.cybassets.com/s/files/23832/ckeditor/pictures/content_c0c34e22-78b4-4b86-b66f-83e3eef441b1.jpg" width="600"></p>
4812
4813<p style="text-align:center"><img alt="" src="//cdn-general.cybassets.com/s/files/23832/ckeditor/pictures/content_f10aa191-adec-4c01-bdd9-2f012055812a.jpg" width="600"></p>
4814
4815<p style="text-align:center"><img alt="" src="//cdn-general.cybassets.com/s/files/23832/ckeditor/pictures/content_f214afd3-8284-4496-9048-d4020b48421c.jpg" width="600"></p>
4816
4817<p style="text-align:center"><img alt="" src="//cdn-general.cybassets.com/s/files/23832/ckeditor/pictures/content_ae70f092-3d1d-4948-a73e-4e76988795f3.jpg" width="600"></p>
4818
4819<p style="text-align:center"><img alt="" src="//cdn-general.cybassets.com/s/files/23832/ckeditor/pictures/content_b38174f5-a58f-48ba-898d-69cdcde5b4b6.jpg" width="600"></p>
4820
4821<p style="text-align:center"><img alt="" src="//cdn-general.cybassets.com/s/files/23832/ckeditor/pictures/content_bf28fd9e-40a3-42f0-be21-af099b53e494.jpg" width="600"></p>
4822
4823<p style="text-align:center"><img alt="" src="//cdn-general.cybassets.com/s/files/23832/ckeditor/pictures/content_6a94ed95-f25c-4fad-bcb5-bb7228178a1d.png" width="600"></p>
4824
4825<p>&nbsp;</p>
4826</div>
4827        </div>
4828      
4829      
4830        <div id="desc_section_2" class="desc_section qk-pd_t--2">
4831          <h5 class="section-heading qk-text--heading qk-fs--hd2 qk-bd_l--default qk-bd--heading qk-pd_l--05">規格說明</h5>
4832          <div class="ckeditor qk-mg_t--1"></div>
4833        </div>
4834      
4835      
4836        <div id="desc_section_3" class="desc_section qk-pd_t--2">
4837          <h5 class="section-heading qk-text--heading qk-fs--hd2 qk-bd_l--default qk-bd--heading qk-pd_l--05">運送方式</h5>
4838          <div class="ckeditor qk-mg_t--1"></div>
4839        </div>
4840      
4841      
4842    </div>
4843  </div>
4844  <div id="product-recommendation"></div>
4845</div>
4846
4847<script>
4848  $(document).ready(function() {
4849    // 商品說明介紹標籤
4850    $(".desc_sections li").on('click', function() {
4851      $(this).children().addClass('active');
4852      $(this).siblings().children().removeClass('active');
4853    });
4854
4855    // 滑動設置
4856    var prevScrollPos = window.pageYOffset;
4857    var prevScrollInformationPos = window.pageYOffset;
4858    $(window).on('scroll load resize', function(e) {
4859      var headerHeight = $("#header").height()
4860      var desc_sections = $(".desc_sections");
4861      var desc_section_list = $(".desc_section");
4862      var descSectionHeight = $(".desc_sections").height()
4863      var descSectionTop = $(".desc_sections").offset().top - headerHeight
4864      var product_window = $(this);
4865      var currentScrollPos = window.pageYOffset;
4866
4867      // 滑動固定產品說明
4868      if (product_window.scrollTop() > descSectionTop) {
4869        desc_sections.find("ul").css({"top": 0});
4870        if (currentScrollPos > prevScrollPos && product_window.scrollTop() > descSectionTop + headerHeight) {
4871          desc_sections
4872            .stop()
4873            .addClass("desc_sections_hold")
4874            .css({"min-height": descSectionHeight})
4875            .find("ul")
4876            .css({"top": 0});
4877        } else if (prevScrollPos > currentScrollPos) {
4878          desc_sections
4879            .stop()
4880            .addClass("desc_sections_hold")
4881            .css({"min-height": descSectionHeight})
4882            .find("ul")
4883            .css({"top": headerHeight});
4884        } else {
4885          prevScrollPos = 0;
4886        } prevScrollPos = currentScrollPos;
4887        if ($(window).width() < 768) {
4888          $("body").css("padding-bottom", "68px");
4889        }
4890      } else {
4891        prevScrollPos = 0;
4892        desc_sections.stop().removeClass("desc_sections_hold")
4893        if ($(window).width() < 768) {
4894          $("body").css("padding-bottom", "68px");
4895        }
4896      }
4897
4898      // 點選產品說明滑動
4899      $(".desc_sections a.scroll").bind("click", function(event) {
4900        var targetScrollTop = parseInt($($(this).attr("href")).offset().top - descSectionHeight + 1);
4901        if (targetScrollTop > window.scrollY + 1) {
4902          $("html, body").stop().animate({
4903            scrollTop: targetScrollTop
4904          }, 300);
4905        } else {
4906          $("html, body").stop().animate({
4907            scrollTop: targetScrollTop - headerHeight
4908          }, 300);
4909        }
4910      });
4911
4912      // 顯示當前產品說明
4913      if (currentScrollPos > prevScrollInformationPos) {
4914        $.each(desc_section_list, function(index, desc_section) {
4915          var desc_sectionTop = $(desc_section).offset().top - descSectionHeight - 1
4916          var desc_sectionHeight = $(desc_section).height()
4917          var current_desc_section = $("a.scroll[href$='" + $(desc_section).attr("id") + "']");
4918          if (product_window.scrollTop() > desc_sectionTop || index === 0) {
4919            current_desc_section
4920              .stop()
4921              .addClass('active')
4922              .parent()
4923              .siblings()
4924              .find("a")
4925              .removeClass('active');
4926          } else {
4927            current_desc_section.removeClass('active');
4928          } prevScrollInformationPos = currentScrollPos;
4929        });
4930      } else {
4931        $.each(desc_section_list, function(index, desc_section) {
4932          var desc_sectionTop = $(desc_section).offset().top - descSectionHeight - 1
4933          var desc_sectionHeight = $(desc_section).height()
4934          var current_desc_section = $("a.scroll[href$='" + $(desc_section).attr("id") + "']");
4935          if (product_window.scrollTop() + headerHeight > desc_sectionTop) {
4936            current_desc_section
4937              .stop()
4938              .addClass('active')
4939              .parent()
4940              .siblings()
4941              .find("a")
4942              .removeClass('active');
4943          } else {
4944            current_desc_section.removeClass('active');
4945          }
4946        });
4947        prevScrollInformationPos = currentScrollPos;
4948      }
4949    });
4950  })
4951</script>
4951
4952
4953
4954
4955
4956
4957<div id="related-products" class="qk-pos--rel">
4958  
4959  
4960  
4961    
4962  
4963  
4964    <h5 class="section-heading qk-text--heading qk-fs--hd2 qk-bd_l--default qk-bd--heading qk-pd_l--05">相關商品</h5>
4965    
4966    <!-- cyb_snippet swiper_product start -->
4967<div id="swiper_products" class="qk-pos--rel">
4968  <div class="swiper swiper-container swiper_products GTM-area">
4969    <div class="swiper-wrapper">
4970      
4971      
4972        
4973        
4974        
4975        
4976        <div class="swiper-slide product qk-text--center" data-sold-out="false" data-sales-mode-purchasable="true">
4977          
4978            <div class="integrated_product_labels qk-pos--abs qk-text--left">
4979              
4980            </div>
4981          
4982          <div class="product_image default_scale">
4983            <div class="product_mask"></div>
4984            <a class="productClick img-flex GTM-info qk-h--100 qk-display--flex qk-justify--center qk-align--center"
4985              href="/products/mfb100"
4986              data-brand=""
4987              data-category="布書"
4988              data-collection_id=""
4989              data-id="38880903"
4990              data-variant-id="44436716"
4991              data-list="相關商品"
4992              data-name="My First Book蒙特梭利啟蒙布書-第一冊 生活常規"
4993              data-position="1"
4994              data-price="2350.0">
4995              <img data-src="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzM4ODgwOTAzLzE3NjI0MTY1ODRfMmI0YzJjZWFhOTMzMmI4NzkyOTIuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=8435615745ab050c"
4996                alt="My First Book蒙特梭利啟蒙布書-第一冊 生活常規" class="swiper-lazy feature-image" />
4997              
4998                
4999              
5000              <div class="swiper-lazy-preloader-white"></div>
5001            </a>
5002          </div>
5003          
5004          <div class="product_title qk-of--hidden">
5005            <a class="qk-text--heading"
5006              href="/products/mfb100">
5007              My First Book蒙特梭利啟蒙布書-第一冊 生活常規
5008            </a>
5009          </div>
5010          
5011            
5012          
5013          
5014            <div class="product_price qk-text--price qk-fs--title"><span class="money_tag" data-currency-from="TWD" data-amount="2350.0">NT$2,350</span></div>
5015          
5016          
5017            <div class="product_btn qk-text--center">
5018              
5019                <button
5020                  type="button"
5021                  class="btn btn-cart qk-btn qk-btn--primary qk-btn--lg"
5022                  data-handle="mfb100"
5023                  data-collection=""
5024                  data-brand=""
5025                  data-category="布書"
5026                  data-collection_id=""
5027                  data-id="38880903"
5028                  data-list="相關商品"
5029                  data-name="My First Book蒙特梭利啟蒙布書-第一冊 生活常規"
5030                  data-photo="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzM4ODgwOTAzLzE3NjI0MTY1ODRfMmI0YzJjZWFhOTMzMmI4NzkyOTIuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=8435615745ab050c"
5031                  data-price="2350.0"
5032                  data-position="1"
5033                  data-spread-size="44436716,MFB101,2350.0,1,2350.0,deny,2250.0,新生紅,My First Book蒙特梭利啟蒙布書-第一冊 生活常規 - 新生紅,cyberbiz,|44436717,MFB102,2350.0,1,2350.0,deny,2250.0,海洋藍,My First Book蒙特梭利啟蒙布書-第一冊 生活常規 - 海洋藍,cyberbiz,"
5034                  
5035                  data-sku="MFB101"
5036                  
5037                  
5038                >
5039                  <span class="text">加入購物車</span>
5040                </button>
5041              
5042              <button type="button" class="btn btn_not_sale hidden qk-btn qk-btn--lg qk-btn--soldout qk-bg--background qk-mg_x--auto" disabled>
5043                <span class="text">尚未開賣</span>
5044              </button>
5045              <button type="button" class="btn btn_login_to_view hidden qk-btn qk-btn--lg qk-btn--soldout qk-bg--background qk-mg_x--auto" disabled>
5046                <span class="text">登入查看</span>
5047              </button>
5048              <button type="button" class="btn btn_not_eligible hidden qk-btn qk-btn--lg qk-btn--soldout qk-bg--background qk-mg_x--auto" disabled>
5049                <span class="text">資格不符</span>
5050              </button>
5051            </div>
5052          
5053        </div>
5054      
5055        
5056        
5057        
5058        
5059        <div class="swiper-slide product qk-text--center" data-sold-out="false" data-sales-mode-purchasable="true">
5060          
5061            <div class="integrated_product_labels qk-pos--abs qk-text--left">
5062              
5063            </div>
5064          
5065          <div class="product_image default_scale">
5066            <div class="product_mask"></div>
5067            <a class="productClick img-flex GTM-info qk-h--100 qk-display--flex qk-justify--center qk-align--center"
5068              href="/products/mfb200"
5069              data-brand=""
5070              data-category="布書"
5071              data-collection_id=""
5072              data-id="38895843"
5073              data-variant-id="44466872"
5074              data-list="相關商品"
5075              data-name="My First Book蒙特梭利啟蒙布書-第二冊 蒙式衣物"
5076              data-position="2"
5077              data-price="2115.0">
5078              <img data-src="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzM4ODk1ODQzLzE2NzA5OTY0MzdfYjUzOWE5MTI4NGQwYzNhZmI3NjQuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=7cf12afff20c951b"
5079                alt="My First Book蒙特梭利啟蒙布書-第二冊 蒙式衣物" class="swiper-lazy feature-image" />
5080              
5081                
5082              
5083              <div class="swiper-lazy-preloader-white"></div>
5084            </a>
5085          </div>
5086          
5087          <div class="product_title qk-of--hidden">
5088            <a class="qk-text--heading"
5089              href="/products/mfb200">
5090              My First Book蒙特梭利啟蒙布書-第二冊 蒙式衣物
5091            </a>
5092          </div>
5093          
5094            
5095          
5096          
5097            <div class="product_price qk-text--price qk-fs--title"><span class="money_tag" data-currency-from="TWD" data-amount="2115.0">NT$2,115</span></div>
5098          
5099          
5100            <div class="product_btn qk-text--center">
5101              
5102                <button
5103                  type="button"
5104                  class="btn btn-cart qk-btn qk-btn--primary qk-btn--lg"
5105                  data-handle="mfb200"
5106                  data-collection=""
5107                  data-brand=""
5108                  data-category="布書"
5109                  data-collection_id=""
5110                  data-id="38895843"
5111                  data-list="相關商品"
5112                  data-name="My First Book蒙特梭利啟蒙布書-第二冊 蒙式衣物"
5113                  data-photo="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzM4ODk1ODQzLzE2NzA5OTY0MzdfYjUzOWE5MTI4NGQwYzNhZmI3NjQuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=7cf12afff20c951b"
5114                  data-price="2115.0"
5115                  data-position="2"
5116                  data-spread-size="44466871,mfb201,2115.0,0,2350.0,deny,0.0,軍艦綠,My First Book蒙特梭利啟蒙布書-第二冊 蒙式衣物 - 軍艦綠,cyberbiz,|44466872,mfb202,2115.0,1,2350.0,deny,0.0,葡萄紫,My First Book蒙特梭利啟蒙布書-第二冊 蒙式衣物 - 葡萄紫,cyberbiz,"
5117                  
5118                  data-sku="mfb202"
5119                  
5120                  
5121                >
5122                  <span class="text">加入購物車</span>
5123                </button>
5124              
5125              <button type="button" class="btn btn_not_sale hidden qk-btn qk-btn--lg qk-btn--soldout qk-bg--background qk-mg_x--auto" disabled>
5126                <span class="text">尚未開賣</span>
5127              </button>
5128              <button type="button" class="btn btn_login_to_view hidden qk-btn qk-btn--lg qk-btn--soldout qk-bg--background qk-mg_x--auto" disabled>
5129                <span class="text">登入查看</span>
5130              </button>
5131              <button type="button" class="btn btn_not_eligible hidden qk-btn qk-btn--lg qk-btn--soldout qk-bg--background qk-mg_x--auto" disabled>
5132                <span class="text">資格不符</span>
5133              </button>
5134            </div>
5135          
5136        </div>
5137      
5138        
5139        
5140        
5141        
5142        <div class="swiper-slide product qk-text--center" data-sold-out="false" data-sales-mode-purchasable="true">
5143          
5144            <div class="integrated_product_labels qk-pos--abs qk-text--left">
5145              
5146            </div>
5147          
5148          <div class="product_image default_scale">
5149            <div class="product_mask"></div>
5150            <a class="productClick img-flex GTM-info qk-h--100 qk-display--flex qk-justify--center qk-align--center"
5151              href="/products/mfb313"
5152              data-brand=""
5153              data-category="布書"
5154              data-collection_id=""
5155              data-id="38895844"
5156              data-variant-id="44466873"
5157              data-list="相關商品"
5158              data-name="My First Book蒙特梭利啟蒙布書-第三冊 宇宙探索"
5159              data-position="3"
5160              data-price="3150.0">
5161              <img data-src="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzM4ODk1ODQ0LzE3MjE3MjA3MzFfOWVlMWNlNDRkZjRhMGJiMzAwZWYuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=2dc51573bacecf46"
5162                alt="My First Book蒙特梭利啟蒙布書-第三冊 宇宙探索" class="swiper-lazy feature-image" />
5163              
5164                
5165              
5166              <div class="swiper-lazy-preloader-white"></div>
5167            </a>
5168          </div>
5169          
5170          <div class="product_title qk-of--hidden">
5171            <a class="qk-text--heading"
5172              href="/products/mfb313">
5173              My First Book蒙特梭利啟蒙布書-第三冊 宇宙探索
5174            </a>
5175          </div>
5176          
5177            
5178          
5179          
5180            <div class="product_price qk-text--price qk-fs--title"><span class="money_tag" data-currency-from="TWD" data-amount="3150.0">NT$3,150</span></div>
5181          
5182          
5183            <div class="product_btn qk-text--center">
5184              
5185                <button
5186                  type="button"
5187                  class="btn btn-cart qk-btn qk-btn--primary qk-btn--lg"
5188                  data-handle="mfb313"
5189                  data-collection=""
5190                  data-brand=""
5191                  data-category="布書"
5192                  data-collection_id=""
5193                  data-id="38895844"
5194                  data-list="相關商品"
5195                  data-name="My First Book蒙特梭利啟蒙布書-第三冊 宇宙探索"
5196                  data-photo="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzM4ODk1ODQ0LzE3MjE3MjA3MzFfOWVlMWNlNDRkZjRhMGJiMzAwZWYuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=2dc51573bacecf46"
5197                  data-price="3150.0"
5198                  data-position="3"
5199                  data-spread-size="44466873,,3150.0,1,3150.0,deny,2990.0,,My First Book蒙特梭利啟蒙布書-第三冊 宇宙探索 - ,cyberbiz,"
5200                  
5201                  data-sku=""
5202                  
5203                  
5204                >
5205                  <span class="text">加入購物車</span>
5206                </button>
5207              
5208              <button type="button" class="btn btn_not_sale hidden qk-btn qk-btn--lg qk-btn--soldout qk-bg--background qk-mg_x--auto" disabled>
5209                <span class="text">尚未開賣</span>
5210              </button>
5211              <button type="button" class="btn btn_login_to_view hidden qk-btn qk-btn--lg qk-btn--soldout qk-bg--background qk-mg_x--auto" disabled>
5212                <span class="text">登入查看</span>
5213              </button>
5214              <button type="button" class="btn btn_not_eligible hidden qk-btn qk-btn--lg qk-btn--soldout qk-bg--background qk-mg_x--auto" disabled>
5215                <span class="text">資格不符</span>
5216              </button>
5217            </div>
5218          
5219        </div>
5220      
5221        
5222        
5223        
5224        
5225        <div class="swiper-slide product qk-text--center" data-sold-out="false" data-sales-mode-purchasable="true">
5226          
5227            <div class="integrated_product_labels qk-pos--abs qk-text--left">
5228              
5229            </div>
5230          
5231          <div class="product_image default_scale">
5232            <div class="product_mask"></div>
5233            <a class="productClick img-flex GTM-info qk-h--100 qk-display--flex qk-justify--center qk-align--center"
5234              href="/products/mfb400"
5235              data-brand=""
5236              data-category="布書"
5237              data-collection_id=""
5238              data-id="38895845"
5239              data-variant-id="44466874"
5240              data-list="相關商品"
5241              data-name="My First Book蒙特梭利啟蒙布書-第四冊 馬戲團"
5242              data-position="4"
5243              data-price="2350.0">
5244              <img data-src="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzM4ODk1ODQ1LzE3NzQ4NjEwOThfMTVlYTVkZDlhNGRjMjkzNzRmNDMuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=268e2c0ea24a9da1"
5245                alt="My First Book蒙特梭利啟蒙布書-第四冊 馬戲團" class="swiper-lazy feature-image" />
5246              
5247                
5248              
5249              <div class="swiper-lazy-preloader-white"></div>
5250            </a>
5251          </div>
5252          
5253          <div class="product_title qk-of--hidden">
5254            <a class="qk-text--heading"
5255              href="/products/mfb400">
5256              My First Book蒙特梭利啟蒙布書-第四冊 馬戲團
5257            </a>
5258          </div>
5259          
5260            
5261          
5262          
5263            <div class="product_price qk-text--price qk-fs--title"><span class="money_tag" data-currency-from="TWD" data-amount="2350.0">NT$2,350</span></div>
5264          
5265          
5266            <div class="product_btn qk-text--center">
5267              
5268                <button
5269                  type="button"
5270                  class="btn btn-cart qk-btn qk-btn--primary qk-btn--lg"
5271                  data-handle="mfb400"
5272                  data-collection=""
5273                  data-brand=""
5274                  data-category="布書"
5275                  data-collection_id=""
5276                  data-id="38895845"
5277                  data-list="相關商品"
5278                  data-name="My First Book蒙特梭利啟蒙布書-第四冊 馬戲團"
5279                  data-photo="//cdn-general.cybassets.com/media/W1siZiIsIjIzODMyL3Byb2R1Y3RzLzM4ODk1ODQ1LzE3NzQ4NjEwOThfMTVlYTVkZDlhNGRjMjkzNzRmNDMuanBlZyJdLFsicCIsInRodW1iIiwiNjAweDYwMCJdXQ.jpeg?sha=268e2c0ea24a9da1"
5280                  data-price="2350.0"
5281                  data-position="4"
5282                  data-spread-size="44466874,mfb401,2350.0,1,2350.0,deny,2250.0,火焰紅(新版書包),My First Book蒙特梭利啟蒙布書-第四冊 馬戲團 - ç
5282«ç„°ç´…(新版書包),cyberbiz,"
5283                  
5284                  data-sku="mfb401"
5285                  
5286                  
5287                >
5288                  <span class="text">加入購物車</span>
5289                </button>
5290              
5291              <button type="button" class="btn btn_not_sale hidden qk-btn qk-btn--lg qk-btn--soldout qk-bg--background qk-mg_x--auto" disabled>
5292                <span class="text">尚未開賣</span>
5293              </button>
5294              <button type="button" class="btn btn_login_to_view hidden qk-btn qk-btn--lg qk-btn--soldout qk-bg--background qk-mg_x--auto" disabled>
5295                <span class="text">登入查看</span>
5296              </button>
5297              <button type="button" class="btn btn_not_eligible hidden qk-btn qk-btn--lg qk-btn--soldout qk-bg--background qk-mg_x--auto" disabled>
5298                <span class="text">資格不符</span>
5299              </button>
5300            </div>
5301          
5302        </div>
5303      
5304    </div>
5305  </div>
5306  <div class="swiper-products-next qk-swiper_btn qk-swiper_btn--lg qk-swiper_btn--v1 qk-swiper_btn--next"></div>
5307  <div class="swiper-products-prev qk-swiper_btn qk-swiper_btn--lg qk-swiper_btn--v1 qk-swiper_btn--prev"></div>
5308</div>
5309
5310<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/swiper_product-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
5311
5312  <link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/integrated_product_labels-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
5313
5314
5315<!-- cyb_snippet _combo_product_related_items_modal start -->
5315<script src='//cdn-general.cybassets.com/frontend/shop/standaloneRelatedItemsSelectModal-3a2e378145f8a165.js' type='text/javascript'></script>
5315
5316  
5316<script>
5317    if (!$('#related-items-select-modal').length) {
5318      $('body').append('<div id="related-items-select-modal"></div>');
5319      document.addEventListener('DOMContentLoaded', function() {
5320        window.renderRelatedItemsSelectModal('#related-items-select-modal', {
5321          hasStockNotificationPlugin: true,
5322          displayProductDiscountsList: true,
5323        });
5324      });
5325    }
5326  </script>
5326<!-- cyb_snippet _combo_product_related_items_modal end -->
5327
5328<script>
5329  $(document).ready(function(){
5330    var slideCount = $(".swiper_products .swiper-slide").length
5331    if (slideCount >= 4){
5332      var autoLoop = true
5333    }else{
5334      var autoLoop = false
5335    }
5336    var SwiperProducts = new Swiper('.swiper_products', {
5337      // Disable preloading of all images
5338      preloadImages: false,
5339      // Enable lazy loading
5340      lazy: {
5341        loadPrevNext: true,
5342      },
5343      loop: autoLoop,
5344      slidesPerView: 1,
5345      spaceBetween: 30,
5346      navigation: {
5347        nextEl: '.swiper-products-next',
5348        prevEl: '.swiper-products-prev',
5349      },
5350      breakpoints: {
5351        '@0.75': {
5352          slidesPerView: 2,
5353          spaceBetween: 20,
5354        },
5355        '@1.00': {
5356          slidesPerView: 3,
5357          spaceBetween: 40,
5358        },
5359        '@1.50': {
5360          slidesPerView: 4,
5361          spaceBetween: 50,
5362        },
5363      }
5364    });
5365
5366    $('#swiper_products .productClick').click(function() {
5367      try {
5368        if (window.appStoreClickItemEvent) {
5369          var $el = $(this);
5370          window.appStoreClickItemEvent({
5371            product_id: String($el.data('id')),
5372            variant_id: String($el.data('variant-id')),
5373            name: $el.data('name'),
5374            price: Number($el.data('price')),
5375            currency: getCurrency(),
5376            category: $el.data('category'),
5377            list_name: 'product',
5378            list_position: Number($el.data('position')),
5379          });
5380        }
5381      } catch (e) {
5382        console.error(e);
5383      }
5384    });
5385
5386    
5387    // new pop modal
5388    $('#swiper_products .btn-cart').click(function() {
5389      var comboProductInfo = $(this).data('comboProductInfo');
5390      if (comboProductInfo) {
5391        window.themeHelper.EventBus.$emit('showRelatedItemsSelectModal', comboProductInfo);
5392      } else {
5393        var productHandle = '/products/' + $(this).data('handle');
5394        var collectionId = $(this).data('collection');
5395        new_addcart_modal.popModal(productHandle, collectionId);
5396      }
5397    });
5398    
5399
5400    const isUpcomingProductsEnabled = null;
5401    // 狀態切換只處理可購買的卡片
5402    $('#swiper_products .product').not('[data-sales-mode-purchasable="false"]').each(function(index) {
5403      const soldOut = $(this).data('sold-out');
5404      const $upcomingText = $(this).find('.upcoming-product-text');
5405      const sellTime = $upcomingText.data('sell-from');
5406      const purchaseRequired = $upcomingText.data('purchase-required');
5407      const purchaseEligible = $upcomingText.data('purchase-eligible');
5408      const purchaseStatus = $upcomingText.data('purchase-status');
5409
5410      const isUpcoming = isUpcomingProductsEnabled && sellTime && new Date(sellTime) > new Date();
5411
5412      const formattedDate = sellTime ? new Date(sellTime).toLocaleString('zh-TW', {
5413        year: 'numeric',
5414        month: '2-digit',
5415        day: '2-digit',
5416        hour: '2-digit',
5417        minute: '2-digit',
5418        hour12: false
5419      }).replace(/\//g, '-').replace(',', '') : '';
5420
5421      let labelText = '';
5422      let buttonClass = '';
5423
5424      if (purchaseRequired && !isUpcoming) {
5425        labelText = '部分會員限定';
5426
5427        if (!purchaseEligible) {
5428          if (!soldOut) {
5429            if (purchaseStatus === 'not_logged_in') {
5430              buttonClass = '.btn_login_to_view';
5431            } else if (purchaseStatus === 'non_eligible') {
5432              buttonClass = '.btn_not_eligible';
5433            }
5434          } else {
5435            buttonClass = '.btn-soldout';
5436          }
5437        }
5438      }
5439      else if (!purchaseRequired && isUpcoming) {
5440        labelText = ' 開賣'.replace('', formattedDate);
5441        buttonClass = '.btn_not_sale';
5442      }
5443      else if (purchaseRequired && isUpcoming) {
5444        const isMobile = window.innerWidth <= 580;
5445        const separator = isMobile ? '\n' : ' ';
5446        labelText = '[部分會員限定]' + separator + ' 開賣'.replace('', formattedDate);
5447        buttonClass = '.btn_not_sale';
5448      } else if (soldOut) {
5449        buttonClass = '.btn-soldout';
5450      }
5451
5452      if (labelText) {
5453        $upcomingText.text(labelText);
5454        $(this).find('.upcoming-product-text').show();
5455      } else {
5456        $upcomingText.hide();
5457      }
5458
5459      if (buttonClass) {
5460        $(this).find('.product_mask').addClass('lift');
5461        // Hide all buttons first
5462        $(this).find('.btn-cart').hide();
5463        $(this).find('.btn-soldout').hide();
5464        $(this).find('.btn_not_sale').hide();
5465        $(this).find('.btn_login_to_view').hide();
5466        $(this).find('.btn_not_eligible').hide();
5467
5468        // Show the appropriate button
5469        $(this).find(buttonClass).removeClass('hidden').show();
5470      }
5471    });
5472
5473    // for GTM
5474    $.each($('.GTM-area'),function(){
5475      var gtm_product = []
5476      $.each($(this).find('.GTM-info'),function(index,product){
5477        productInfo = {
5478          'brand':    $(product).data('brand'),
5479          'category': $(product).data('category'),
5480          'id':       $ (product).data('id'),
5481          'list':     'Collection: '+ $(product).data('list'),
5482          'name':     $(product).data('name'),
5483          'position': $(product).data('position'),
5484          'price':    $ (product).data('price'),
5485          'variant':  ''
5486        }
5487        if(typeof google_analytics_id != "undefined" && window.enable_ga_ee == true){
5488          ga('ec:addImpression', productInfo);
5489        }
5490        if(typeof google_tag_manager_id != 'undefined' || typeof cyb != 'undefined'){
5491          gtm_product.push(productInfo)
5492        }
5493      })
5494      if(typeof google_analytics_id != 'undefined' && window.enable_ga_ee == true){
5495          ga('send', 'event', {'nonInteraction': true});
5496      }
5497      if(typeof google_tag_manager_id != 'undefined' && gtm_product.length > 0){
5498        dataLayer.push({
5499          'event': 'productImpressions',
5500          'ecommerce':{
5501            'impressions': gtm_product
5502          }
5503        });
5504      }
5505      if(typeof cyb != "undefined" && gtm_product.length > 0){
5506        cyb.push({
5507          'event': 'productImpressions',
5508          'impressions': gtm_product
5509        });
5510      }
5511    })
5512  })
5513</script>
5513
5514
5515<!-- cyb_snippet swiper_product end -->
5516  
5517</div>
5518
5519
5520
5521  </div>
5522</div>
5523
5524    </div>
5525
5526    <!-- Footer -->
5527    
5528
5529
5530
5531
5532
5533
5534<style>
5535  
5536  
5537  @media(min-width: 991px) {
5538    .display_x .left-content > div {
5539      max-width: calc(100% / 2);
5540    }
5541  }
5542</style>
5543
5544<div id="index-recommendation"></div>
5545
5546<footer id="footer" class="qk-fs--body qk-bg--footer_bg">
5547  
5548    
5549    <div class="qk-container display_y">
5550      <div class="footer_content qk-mg--0 qk-display--flex qk-justify--between">
5551        <div class="left-content qk-flex--1">
5552          
5553            
5554              <div class="link-list-container">
5555                
5556                  <p class="footer_title qk-fs--title qk-text--footer_text">ABOUT</p>
5557                
5558                <div class="item horizontal qk-text--left">
5559                  <ul class="qk-display--flex qk-flex--wrap">
5560                    
5561                      
5562                        <li class="qk-display--il_bk">
5563                          
5564                            <a
5565                              class="qk-text--footer_text"
5566                              href="/pages/關於我們"
5567                              rel="noopener noreferrer"
5568                              target="_blank">關於我們</a>
5569                          
5570                        </li>
5571                      
5572                        <li class="qk-display--il_bk">
5573                          
5574                            <a
5575                              class="qk-text--footer_text"
5576                              href="/account/index"
5577                              rel="noopener noreferrer"
5578                              target="_blank">我的帳戶</a>
5579                          
5580                        </li>
5581                      
5582                        <li class="qk-display--il_bk">
5583                          
5584                            <a
5585                              class="qk-text--footer_text"
5586                              href="/pages/privacy"
5587                              rel="noopener noreferrer"
5588                              target="_blank">隱私政策</a>
5589                          
5590                        </li>
5591                      
5592                        <li class="qk-display--il_bk">
5593                          
5594                            <a
5595                              class="qk-text--footer_text"
5596                              href="https://lin.ee/MTuWDl7"
5597                              rel="noopener noreferrer"
5598                              target="_blank">聯絡我們</a>
5599                          
5600                        </li>
5601                      
5602                    
5603                  </ul>
5604                </div>
5605              </div>
5606              
5607          
5608            
5609              <div class="item contact qk-text--left">
5610                
5611                  <p class="footer_title qk-fs--title qk-text--footer_text">聯絡資訊</p>
5612                
5613                <ul>
5614                  
5615                    <li class="phone qk-bd_r--default qk-bd--footer_text qk-display--il_bk">
5616                      <span class="qk-text--footer_text">客服專線:02-2777-1816</span>
5617                    </li>
5618                  
5619                  
5620                  
5621                    <li class="time qk-bd_r--default qk-bd--footer_text qk-display--il_bk">
5622                      <span class="qk-text--footer_text">客服時間:10:00-18:00</span>
5623                    </li>
5624                  
5625                  
5626                    <br>
5627                    <li class="mail qk-bd_r--default qk-bd--footer_text qk-cursor--pointer qk-display--il_bk">
5628                      <a class="qk-text--footer_text" href="mailto:[email protected]">信箱:[email protected]</a>
5629                    </li>
5630                  
5631                  
5632                    <li class="address qk-bd_r--default qk-bd--footer_text qk-display--il_bk">
5633                      <span class="qk-text--footer_text">地址:新北市中和區連城路222巷4弄2號3樓</span>
5634                    </li>
5635                  
5636                  
5637                    <li class="tax_id qk-bd_r--default qk-bd--footer_text qk-display--il_bk">
5638                      <span class="qk-text--footer_text">統一編號:52701910</span>
5639                    </li>
5640                  
5641                </ul>
5642              </div>
5643              
5644          
5645        </div>
5646        <div class="right-content qk-display--flex qk-flex--column">
5647          
5648            <div class="fb_fanpage qk-hidden--mobile">
5649              <div class="fb_fans_page_area">
5650                <div
5651                  class="fb-page"
5652                  data-href="https://www.facebook.com/2222275224756323"
5653                  data-width="500"
5654                  data-adapt-container-width="true"
5655                  data-hide-cover="false"
5656                  data-show-facepile="true">
5657                  <blockquote cite="https://www.facebook.com/2222275224756323" class="fb-xfbml-parse-ignore">
5658                    <a target="_blank" rel="noopener noreferrer" href="https://www.facebook.com/2222275224756323"></a>
5659                  </blockquote>
5660                </div>
5661              </div>
5662            </div>
5663          
5664          <div class="media qk-display--il">
5665            <div class="item social_media qk-h--auto qk-float--l">
5666              <ul>
5667                
5668                
5669                
5670                
5671              </ul>
5672            </div>
5673          </div>
5674        </div>
5675      </div>
5676    </div>
5677    
5678  <div class="copyright qk-text--footer_text qk-bd--footer_text qk-text--left qk-bd_t--default">
5679    <div class="qk-container container qk-fw--500">
5680      <span>Copyright ©</span>
5681      <a class="qk-text--link" href="/">
5682        <span>種子村Seed Village</span>
5683      </a>
5684      <span>All Rights Reserved.</span>
5685      <span>Designed by
5686      </span>
5687      <a
5688        class="qk-text--link"
5689        href="https://www.cyberbiz.io?utm_source=poweredbycyberbiz"
5690        target="_blank"
5691        rel="noopener noreferrer"
5692        title="Designed by CYBERBIZ">CYBERBIZ</a>.
5693    </div>
5694  </div>
5695  
5696</footer>
5697<script>
5698  $(document).ready(function() {
5699    let isDynamicLoading = false;
5700
5701    let menusData = {
5702      
5703        
5704          "footer": {
5705            
5706              "type": "items",
5707              "data": [
5708                
5709                
5710                  
5711                    {
5712                      "title": "關於我們",
5713                      "url": "/pages/關於我們",
5714                      "item_type": "page"
5715                    },
5716                  
5717                    {
5718                      "title": "我的帳戶",
5719                      "url": "/account/index",
5720                      "item_type": "http"
5721                    },
5722                  
5723                    {
5724                      "title": "隱私政策",
5725                      "url": "/pages/privacy",
5726                      "item_type": "privacy"
5727                    },
5728                  
5729                    {
5730                      "title": "聯絡我們",
5731                      "url": "https://lin.ee/MTuWDl7",
5732                      "item_type": "http"
5733                    }
5734                  
5735                
5736              ]
5737            
5738          },
5739        
5740      
5741        
5742      
5743    };
5744
5745    if (isDynamicLoading) {
5746      window.DynamicLoading.setupComponent({
5747          sectionId: '#footer',
5748          callbackData:{
5749            section: {"type":"footer","visible":true,"settings":{"footer_link":"footer","display_facebook":false,"shop_facebook":"","display_instagram":false,"shop_instagram":"","display_line":false,"shop_line":"","display_youtube":false,"shop_youtube":"","footer_link_arrangement":"display_y","display_facebook_fan_block":true},"block_order":["default_link_list","default_contact_info"],"blocks":{"default_link_list":{"type":"link_list_setting","custom_name":"選單","thumbnail":"list","draggable":true,"visible":true,"settings":{"dict_link_list_block_title":"ABOUT","footer_link":"footer"}},"default_contact_info":{"type":"contact_info_setting","custom_name":"聯絡資訊","thumbnail":"contactInfo","draggable":true,"visible":true,"settings":{"dict_contact_info_block_title":"聯絡資訊","display_phone":"true","dict_phone_number":"02-2777-1816","display_fax_number":false,"dict_shop_fax_number":"0222345678","display_shop_email":"true","dict_shop_email":"[email protected]","display_shop_address":"true","dict_shop_address":"新北市中和區連城路222å··4弄2號3樓","display_office_time":"true","dict_shop_office_time":"10:00-18:00","display_tax_id":true,"dict_tax_id":"52701910"}}},"custom_name":"頁腳"},
5750            shop: {
5751              name: '種子村Seed Village',
5752              cyberbiz_link: 'https://www.cyberbiz.io?utm_source=poweredbycyberbiz',
5753              facebook_fan_page: 'https://www.facebook.com/2222275224756323',
5754            },
5755            menus: menusData,
5756            is_display_facebook_fan_block: true
5757            },
5758          entryName:'renderFooterSection',
5759          source:'//cdn-general.cybassets.com/frontend/shop/footerSection-3a2e378145f8a165.js',
5760        });
5761    }
5762  });
5763</script>
5763
5764
5765<!-- cyb_snippet _tracking_code start -->
5766      
5766<script>
5767        window.fbAsyncInit = function() {
5768          FB.init({
5769          appId : '',
5770          xfbml : true,
5771          version : 'v24.0',
5772          });
5773        };
5774        (function(d, s, id){
5775          var js, fjs = d.getElementsByTagName(s)[0];
5776          if (d.getElementById(id)) {return;}
5777          js = d.createElement(s);
5778          js.id = id;
5779          js.src = 'https://connect.facebook.net/zh_TW/sdk.js';
5780          fjs.parentNode.insertBefore(js, fjs);
5781        }(document, 'script', 'facebook-jssdk'));
5782      </script>
5782
5783
5784
5785<script>
5786  // for scupio
5787  if (document.querySelector("meta[name=\"scupio_mid\"]")) {
5788    mid = document.querySelector("meta[name=\"scupio_mid\"]").content;
5789  } else {
5790    mid = "";
5791  }
5792  if (!window.is_scupio_sent && mid) {
5793    window._bwtm = window._bwtm || []
5794    window._bwtm.push({
5795      "mid": mid,
5796      "uid": ""
5797    });
5798  }
5799</script>
5799
5800
5801<!-- cyb_snippet _tracking_code end -->
5802
5803<script>
5804  $(document).ready(function(){
5805    if(window.location.pathname != '' && window.location.pathname != '/' ){
5806      document.getElementById('index-recommendation').style.display = 'none'
5807    }
5808  });
5809</script>
5809
5810
5811
5812
5813    <!-- Fast-Events -->
5814    <!-- cyb_snippet fast_events start -->
5815
5816
5817<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/fast_events-3a2e378145f8a165.js' type='text/javascript'></script>
5817
5818<link href='//cdn-general.cybassets.com/frontend/shop/beta_theme/css/fast_events-3a2e378145f8a165.css' rel='stylesheet' type='text/css' media='all' />
5819
5820<!-- cyb_snippet fast_events end -->
5821
5822    <div class="bottom-right qk-pos--fixed">
5823      <!-- gototop -->
5824      <div id="gototop" class="qk-display--none qk-text--center">
5825        <a href="javascript:void(0)" class="qk-circle qk-circle--lg qk-pos--relative qk-text--center">
5826          <i class="fas fa-chevron-up"></i>
5827        </a>
5828      </div>
5829
5830      <!-- popup -->
5831      
5832
5833
5834
5835<div id="popup-wrapper" class="qk-display--none"></div>
5836
5837<template id="popup-template">
5838  <div
5839    :class="status"
5840    v-if="hasContent"
5841    id="popup-section"
5842  >
5843    <transition name="backdrop">
5844      <div
5845        v-if="shouldShowPopup"
5846        @click.capture="minifyPopup"
5847        id="popup-backdrop"
5848        class="qk-w--100vw qk-h--100vh qk-pos--fixed qk-t--0 qk-l--0 qk-tst"
5849      >
5850      </div>
5851    </transition>
5852    <transition name="onShow">
5853      <div
5854        @click.self="showPopup"
5855        @transitionstart="updateGameStatus('start', this)"
5856        @transitionend="updateGameStatus('end', this)"
5857        class="popup-content qk-display--flex qk-align--center qk-tst qk-tst_dur--30 qk-tst_timing--ease_o"
5858      >
5859        <div
5860          v-for="block in blocks"
5861          :key="block.id"
5862          :class="[block.type, minifiedBlockClasses, block.settings.icon_size]"
5863          class="block qk-tst qk-tst_dur--30 qk-tst_timing--ease_o qk-of--auto"
5864        >
5865          <div v-if="block.type === 'image'" class="qk-pos--rel">
5866            <img
5867              v-show="!shouldShowPopup"
5868              :src="block.settings.dict_icon_image_url"
5869              class="qk-tst qk-tst_dur--30 qk-tst_timing--ease_o"
5870              alt="popup button"
5871            >
5872            <a
5873              v-show="shouldShowPopup"
5874              :href="block.settings.dict_link"
5875              :target="block.settings.target"
5876              :rel="block.settings.rel"
5877              class="qk-display--flex qk-align--center"
5878              @click="linkClicked"
5879            >
5880              <picture>
5881                <source :srcset="block.settings.dict_mobile_image_url" media="(max-width: 576px)">
5882                <source :srcset="block.settings.dict_tablet_image_url" media="(max-width: 992px)">
5883                <img
5884                  :src="block.settings.dict_image_url"
5885                  class="qk-tst qk-tst_dur--30 qk-tst_timing--ease_o"
5886                  alt="popup picture"
5887                />
5888              </picture>
5889            </a>
5890          </div>
5891          <div v-if="block.type === 'video'">
5892            <iframe
5893              :src="block.settings.dict_video_link"
5894              frameborder="0"
5895              class="qk-center--y qk-w--100 qk-h--100"
5896            ></iframe>
5897          </div>
5898          <div v-if="block.type === 'game'">
5899            <div v-show="gameStatus === 'show'" :class="{ 'show-game': gameStatus === 'show' }">
5900              <iframe
5901                class="cb-game-iframe iframe-loading"
5902                :src="getGameIframeSrc(block)"
5903                style="border: none;"
5904              >
5905                Loading
5906              </iframe>
5907            </div>
5908            <div v-show="gameStatus === 'minified'">
5909              <img
5910                src="//cdn-general.cybassets.com/game_assets/game_minified_new.png"
5911                class="qk-h--100 qk-w--100"
5912                alt="game minified icon"
5913              />
5914            </div>
5915          </div>
5916          <div
5917            v-if="block.type === 'carousel'"
5918            :id="`popup-carousel-${block.id}`"
5919          >
5920          </div>
5921        </div>
5922      </div>
5923    </transition>
5924    <transition name="backdrop">
5925      <div
5926        v-if="shouldShowPopup"
5927        @click.capture="minifyPopup"
5928        class="minify-popup qk-circle qk-circle--md qk-text--black qk-bg--white qk-bd--default qk-bd--border qk-text--center qk-cursor--pointer qk-pos--fixed"
5929      >
5930      </div>
5931    </transition>
5932  </div>
5933</template>
5934
5935<script>
5936  $(document).ready(function() {
5937    const CDN_HOST = '//cdn-general.cybassets.com';
5938    const section = {"type":"popup","visible":true,"blocks":{"popup_block_1":{"type":"image","visible":false,"settings":{"dict_image_url":"/theme_src/i18n_shoestore/default_img/popup_default.jpg","icon_size":"small"},"custom_name":"圖片"}},"block_order":["popup_block_1"],"settings":{},"custom_name":"彈窗廣告"};
5939    var popupSection = Vue.createApp({
5940      template: '#popup-template',
5941      delimiters: ['${', '}'],
5942      data() {
5943        const isOmniauthPage = ['omniauth_terms_agreement', 'omniauth_mobile/']
5944          .some(path => location.pathname.includes(path));
5945        return {
5946          status: 'minified',
5947          gameStatus: 'show',
5948          blocks: isOmniauthPage
5949            ? []
5950            : section.block_order && section.block_order.reduce(
5951                function(acc, blockId) {
5952                  const block = section.blocks[blockId];
5953                  if (block && block.visible) {
5954                    acc.push({
5955                      ...block,
5956                      id: blockId,
5957                    });
5958                  }
5959                  return acc;
5960                },
5961                [],
5962              ),
5963          hasAddedGameScript: false,
5964        };
5965      },
5966      computed: {
5967        hasContent: function() {
5968          return !!(this.blocks && this.blocks.length > 0);
5969        },
5970        minifiedBlockClasses: function() {
5971          return this.status === 'minified' ? 'qk-pointer--none qk-unselectable' : '';
5972        },
5973        shouldShowPopup: function() {
5974          return this.status === 'show';
5975        }
5976      },
5977      methods: {
5978        unhidePopup: function(storedStatus) {
5979          this.status = storedStatus;
5980          $('#popup-wrapper').removeClass('qk-display--none');
5981        },
5982        showPopup: function() {
5983          if (this.status !== 'show') {
5984            this.status = 'show';
5985            this.saveStatus(this.status);
5986          }
5987        },
5988        minifyPopup: function() {
5989          this.status = 'minified';
5990          this.saveStatus('minified');
5991        },
5992        loadStatus: function() {
5993          return JSON.parse(localStorage.getItem('popupStatus'));
5994        },
5995        saveStatus: function(status) {
5996          if (status) {
5997            localStorage.setItem('popupStatus', JSON.stringify({
5998              status: status,
5999              setTime: new Date().getTime(),
6000            }));
6001          }
6002        },
6003        linkClicked: function() {
6004          this.saveStatus('minified');
6005        },
6006        parseVideoLink: function(settings) {
6007          settings.dict_video_link = themeHelper.parseYtUrl(settings.dict_video_link);
6008        },
6009        setupImageSrc: function (settings) {
6010          settings.dict_image_url = this.addCdnHost(settings.dict_image_url);
6011          if (settings.dict_tablet_image_url) {
6012            settings.dict_tablet_image_url = this.addCdnHost(settings.dict_tablet_image_url);
6013          }
6014          if (settings.dict_mobile_image_url) {
6015            settings.dict_mobile_image_url = this.addCdnHost(settings.dict_mobile_image_url);
6016          }
6017          settings.dict_icon_image_url = this.addCdnHost(settings.dict_icon_image_url) || settings.dict_image_url;
6018        },
6019        addCdnHost: function(url) {
6020          if (!url) {
6021            return url; // only add cdn host if url is not empty
6022          }
6023
6024          try {
6025            new URL(url);
6026            return url; // already a valid url, cdn host not needed
6027          } catch {
6028            return `${CDN_HOST}${url}`;
6029          }
6030        },
6031        initStatus: function() {
6032          let newStatus = 'show';
6033          const popupStatus = this.loadStatus();
6034          const currentTime = new Date().getTime();
6035          const oneDay = 1000 * 60 * 60 * 24;
6036          const hasStoredStatus = popupStatus && currentTime - popupStatus.setTime < oneDay;
6037          const redirectedByGameLogin = !this.hasRedirectUrl() && this.redirectedByGameLogin();
6038          const isLoggingIn = this.isLoggingIn();
6039          const isCartPage = window.location.pathname.split('/').includes('carts');
6040
6041          if (hasStoredStatus && !redirectedByGameLogin) {
6042            newStatus = popupStatus.status;
6043          }
6044
6045          if (isLoggingIn) {
6046            newStatus = 'minified';
6047          } else {
6048            localStorage.removeItem('redirectedByPopup');
6049          }
6050
6051          setTimeout(() => {
6052            this.status = newStatus;
6053            this.gameStatus = newStatus;
6054            this.saveStatus(newStatus);
6055            if(!isCartPage){
6056              this.unhidePopup(newStatus);
6057            }
6058          }, 1000);
6059        },
6060        initBlocks: function() {
6061          if (this.hasContent) {
6062            this.blocks.forEach(block => {
6063              switch(block.type) {
6064                case 'image':
6065                  this.setupImageSrc(block.settings);
6066
6067                  const isOpenInNewTab = block.settings.link_open_in_new_tab;
6068                  if (isOpenInNewTab) {
6069                    block.settings.target = '_blank';
6070                    block.settings.rel = 'noopener noreferrer';
6071                  }
6072
6073                  break;
6074                case 'video':
6075                  this.parseVideoLink(block.settings);
6076                  break;
6077              }
6078            })
6079          }
6080        },
6081        getGameIframeSrc: function (block) {
6082          return `/games/${block.settings.dict_game_handle}`
6083        },
6084        updateGameStatus: function(type, element) {
6085          if (
6086            (type === 'start' && this.status === 'minified')
6087            || (type === 'end' && this.status === 'show')
6088          ) {
6089            this.gameStatus = this.status;
6090          }
6091        },
6092        setupGameRedirects: function() {
6093          window.addEventListener('pagehide', () => {
6094            const isGameActive = document.body.getElementsByClassName('show-game').length;
6095            if (isGameActive) {
6096              localStorage.setItem('redirectedByPopup', 'true');
6097              this.saveStatus('minified');
6098            }
6099          });
6100        },
6101        hasRedirectUrl: function() {
6102          return (new URLSearchParams(location.search)).has('redirect_url');
6103        },
6104        redirectedByGameLogin: function() {
6105          return localStorage.getItem('redirectedByPopup');
6106        },
6107        isLoggingIn: function() {
6108          const loginRelatedPathnames = [
6109            'account/signup',
6110            'account/login',
6111            'account/customer/password/new',
6112            'pages/terms'
6113          ];
6114          return loginRelatedPathnames.some(path => location.pathname.includes(path));
6115        }
6116      },
6117      created: function() {
6118        this.initStatus();
6119        this.initBlocks();
6120        this.setupGameRedirects();
6121      },
6122      mounted: function() {
6123        this.blocks.forEach((block) => {
6124          if (block.type === 'carousel' && block.settings.dict_c
6124arousel) {
6125            renderCarousel(`#popup-carousel-${block.id}`, {
6126              title: block.settings.dict_carousel,
6127              CDN_HOST,
6128              onLinkClick: () => this.linkClicked(),
6129            });
6130          }
6131        });
6132      },
6133    });
6134    popupSection.mount('#popup-wrapper');
6135  });
6136</script>
6136
6137
6138
6139
6140    </div>
6141
6142    <!-- ajaxloading -->
6143    <div id="ajaxloading" class="qk-display--none qk-h--100vh qk-w--100vw qk-l--0 qk-t--0 qk-pos--fixed">
6144      <div class="ajaxbody qk-pos--abs qk-l--50 qk-t--50 qk-text--center">
6145        <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="73.4" height="73.4" viewBox="0 0 73.4 73.4">
6146          <circle class="circle" fill="none" stroke="#898989" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="36.7" cy="36.7" r="35.2"/>
6147          <polyline class="success_path" fill="none" stroke="#898989" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="23.7,36.8 32.4,45.4 49.7,28 "/>
6148          <path class="success_icon" fill="#898989" d="M32.5,46.9c-0.4,0-0.8-0.2-1.1-0.4l-8.6-8.6c-0.6-0.6-0.6-1.5,0-2.1s1.5-0.6,2.1,0l7.5,7.5L48.6,27c0.6-0.6,1.5-0.6,2.1,0s0.6,1.5,0,2.1L33.5,46.5C33.2,46.7,32.9,46.9,32.5,46.9L32.5,46.9z"/>
6149          <line class="fail_path" fill="none" stroke="#898989" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="26.6" y1="26.6" x2="46.8" y2="46.8"/>
6150          <line class="fail_path" fill="none" stroke="#898989" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="46.8" y1="26.6" x2="26.6" y2="46.8"/>
6151          <path class="fail_icon" fill="#898989" d="M38.7,36.7l9.1-9.1c0.6-0.6,0.6-1.5,0-2.1s-1.5-0.6-2.1,0l-9.1,9.1l-9.1-9.1c-0.6-0.6-1.5-0.6-2.1,0s-0.6,1.5,0,2.1l9.1,9.1l-9.1,9.1c-0.6,0.6-0.6,1.5,0,2.1c0.3,0.3,0.7,0.4,1.1,0.4s0.8-0.1,1.1-0.4l9.1-9.1l9.1,9.1c0.3,0.3,0.7,0.4,1.1,0.4s0.8-0.1,1.1-0.4c0.6-0.6,0.6-1.5,0-2.1L38.7,36.7z"/>
6152        </svg>
6153        <div class="success_msg title qk-display--none qk-pos--abs qk-l--0 qk-w--100 qk-text--center">已加入購物車</div>
6154        <div class="success_update_msg title qk-display--none qk-pos--abs qk-l--0 qk-w--100 qk-text--center">已更新購物車</div>
6155        <div class="fail_msg title qk-display--none qk-pos--abs qk-l--0 qk-w--100 qk-text--center">網路異常,請重新整理</div>
6156      </div>
6157    </div>
6158  
6158<script src="//cdn-general.cybassets.com/assets/referral-code-trace-5fcbbe026a61c36b5f09a1615a1c168688205205d9d3e7ee854181a66b64a6ed.js"></script>
6158
6159      
6159<script>
6160      cyb.push({
6161        'event': 'productDetails',
6162        'ecommerce': {
6163          'currencyCode': 'TWD',
6164          'detail': {
6165            'products': [{"id":55275958,"name":"My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲","price":2650.0,"brand":null,"category":null,"variant":""}]
6166           }
6167         }
6168      });
6169      </script>
6169
6170    
6171      
6171<script>
6172        if (window.fbq) {
6173          fbq("track", "ViewContent", {
6174            content_name: "My First Book蒙特梭利啟蒙布書 - 聯名冊 好餓的毛毛蟲",
6175            content_ids: "66368633",
6176            content_type: "product",
6177            value: 2650.0,
6178            currency: "TWD",
6179            contents: [{"id":66368633,"price":2650.0,"quantity":1}],
6180            content_category: null
6181          },{
6182            eventID: "ViewContent_77676A6C41D8564C3091987445E5DA45"
6183          });
6184        }
6185      </script>
6185
6186    </body>
6187
6188  
6188<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/sub_vendor-3a2e378145f8a165.js' type='text/javascript'></script>
6188
6189  
6189<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/theme_helper-3a2e378145f8a165.js' type='text/javascript'></script>
6189
6190
6191  <!-- theme assets -->
6192  
6192<script src='//cdn-general.cybassets.com/s/files/23832/theme/105151/assets/js/1710491880_81267486_main.js?1710491880' type='text/javascript'></script>
6192
6193  
6193<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/theme-3a2e378145f8a165.js' type='text/javascript'></script>
6193
6194
6195  <!-- for cache -->
6196  
6196<script src='//cdn-general.cybassets.com/frontend/shop/beta_theme/js/cacheable-3a2e378145f8a165.js' type='text/javascript'></script>
6196
6197</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.