const chePhoto = 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/teisensei.png'; function isMobile() { return window.innerWidth <= 768; } let currentModalId = null; let currentBsId = null; // Sakura animation function createSakuraPetals() { const hero = document.getElementById('hero'); for (let i = 0; i < 20; i++) { const petal = document.createElement('div'); petal.className = 'sakura-petal'; petal.style.left = Math.random() * 100 + '%'; petal.style.animationDuration = (Math.random() * 6 + 10) + 's'; petal.style.animationDelay = (Math.random() * 15) + 's'; hero.appendChild(petal); } } createSakuraPetals(); // Scroll effects window.addEventListener('scroll', function() { const header = document.getElementById('header'); const stickyBar = document.getElementById('stickyBar'); const backToTop = document.getElementById('backToTop'); if (window.scrollY > 100) { header.classList.add('scrolled'); stickyBar.classList.add('visible'); } else { header.classList.remove('scrolled'); stickyBar.classList.remove('visible'); } if (window.scrollY > 600) { backToTop.classList.add('visible'); } else { backToTop.classList.remove('visible'); } }); // Product Data const tabData = { cosme: { title: '彩妝・美容', products: [ { id: 21, slug: 'eclore-whitening', name: '3D蛋殼生物磷灰石潔牙粉・藥用牙膏', brand: 'eclore', price: 1595, priceNote: '潔牙粉25g ¥1,595 / 藥用牙膏90g ¥1,595', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/eclore-whitening-powder-tube-jars.jpg', label: 'type-hot', labelText: '話題', plan: 'platinum', isMultiProduct: true, subProducts: [ { name: '藥用3D蛋殼生物磷灰石牙膏', nameJp: '薬用3Dホワイトニングペースト', size: '90g', price: 1595 }, { name: '3D蛋殼生物磷灰石潔牙粉', nameJp: '3Dホワイトニングパウダー', size: '25g', price: 1595 } ], originalUrl: 'https://droral.jp/3dpowder/', tip: 'Dr.Oral 3D WHITE口腔亮白護理系列,採用奈米級3D蛋殼生物磷灰石,協助吸附牙齒表面污漬,維持清新亮白印象。牙粉蛋殼生物磷灰石含量高達40%,搭配多種潔淨與保濕成分,', tipFull: 'Dr.Oral 3D WHITE口腔亮白護理系列,採用奈米級3D蛋殼生物磷灰石,協助吸附牙齒表面污漬,維持清新亮白印象。牙粉蛋殼生物磷灰石含量高達40%,搭配多種潔淨與保濕成分,日常刷牙即可兼顧清潔與口腔保養。另有薬用牙膏款,輔助維持牙齦健康,是重視自然系亮白護理者的人氣選擇。', column: 'https://www.japankuru.com/tw/shopping/263339/', hasVideo: true, videoId: '73ffThRqZ9M', voices: [ { initial: 'S', name: 'sacuraisho', attr: '40多歲・家庭主婦', text: '裡面還添加了「3D蛋殼羥基磷灰石」這個成分,感覺蠻特別的,就想說一定要試試看。', date: '2026.03', color: '#E91E63', snsUrl: 'https://www.facebook.com/sacuralin/posts/pfbid0QxLhS5ZfpA6oHoehXyCF7su7pb3T3SYKaBwFJuoKfD8BHA1HTiTAZhVLqb7Wshwvl' }, { initial: 'C', name: 'Chiu-wei Liu', attr: '30多歲・上班族', text: '在日本各大藥妝店與生活雜貨店(像是 Loft)都是長期熱銷的人氣商品,非常值得入手試試!', date: '2026.03', color: '#9C27B0', snsUrl: 'https://www.facebook.com/chiuwei.liu/posts/pfbid0ewzUBFK6pEgAMYUVe5FRLVdt3St55bXp98PGjRHcBk8EXD9Z9TuQC4UJ2LQS6kGPl' }, { initial: '蔡', name: '蔡徐嘉', attr: '30多歲・上班族', text: '刷完之後會有一種清新乾淨的感覺,睡覺的時候連帶覺得自己呼吸到的空氣都更清新了', date: '2026.03', color: '#3F51B5', snsUrl: 'https://www.facebook.com/hsuchia.tsai/posts/pfbid02yRT7QQ7och2zu1Zj6ffmBgDVFQAwMnnXztZ7WPeye1c6QYYSSHCWFZWvzGBvbELkl' }, { initial: 'C', name: 'Chih Lin Kung', attr: '30多歲・留學生', text: '另外我也很喜歡潔牙粉的設計。粉末非常細緻,搭配牙刷使用時可以更深入清潔牙齒表面。', date: '2026.03', color: '#009688', snsUrl: 'https://www.instagram.com/p/DV98gOREhkk/?img_index=1' }, { initial: 'L', name: 'lori7906', attr: '30多歲・上班族', text: '使用完牙齒整體感覺非常光滑,早上起床時口臭也比以前變淡許多~', date: '2026.03', color: '#FF5722', snsUrl: 'https://www.instagram.com/p/DV8qTpIj8qt/?img_index=1' }, { initial: 'K', name: 'Kelly', attr: '30多歲・上班族', text: '我自己本身的牙齒白到牙醫問我是不是做過美白牙齒😂 但真的完全沒有,是因為用對了牙膏!', date: '2026.03', color: '#795548', snsUrl: 'https://www.instagram.com/p/DV8oDEjiULt/?img_index=1' }, { initial: 'W', name: 'Wei Wei', attr: '30多歲・上班族', text: '最近換了這組日本的 Dr.Oral 藥用美白牙膏跟潔牙粉,目前用下來覺得很對我的胃。', date: '2026.03', color: '#607D8B', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid0E6xomLfbTaGgPKNcAs1HHVKMNY9JDspMALoBt2EpF3Nsz1FvMixWyMejYecgfRazl&id=100001466739903&locale=ja_JP' }, { initial: 'K', name: 'Kelly Lau', attr: '20多歲・上班族', text: '如果你也是茶飲或咖啡重度愛好者,真的很推薦試試看這款牙粉,效果真的比想像中還好!', date: '2026.03', color: '#4CAF50', snsUrl: 'https://www.facebook.com/story.php?story_fbid=26286331127664089&id=100001416789118&mibextid=wwXIfr&rdid=e5mww2xKSLxbbedj#' }, { initial: 'Ko', name: 'Kobayashi Celine', attr: '40多歲・自由工作者', text: '粉末很細緻,用牙刷沾一點刷牙🪥 刷完牙齒真的會有那種很乾淨、很清爽、牙齒滑滑的感覺', date: '2026.03', color: '#FF9800', snsUrl: 'https://www.instagram.com/p/DV7cpPSDx_i/?igsh=MW1mMWV3M2RyZjhvYQ%3D%3D&img_index=1' }, { initial: '新', name: '新日一成', attr: '40多歲・個人創業者', text: '對於像我這種每天咖啡不離手的中年男士來說,能同時做到美白、預防蛀牙、減少口臭、保持清新口氣,真的很加分。', date: '2026.03', color: '#2196F3', snsUrl: 'https://www.facebook.com/hu.wei.7/posts/pfbid09YZjzgTDsqonnDkJ3iaqePpkRuohDPszUWWvjmiYkGuxha1K5sGSJvNXR65bs58ol' } ], voiceCount: 10 }, { id: 26, slug: 'cure-white-clear-gel', name: 'Cure White Clear Gel 四效去角質凝膠', brand: 'Cure', price: 2750, priceNote: '200g ¥2,500(含稅 ¥2,750)', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/cure-white-clear-gel-wooden-bucket.jpg', label: 'type-exclusive', labelText: '日本限定', plan: 'gold', originalUrl: 'https://www.4cs-cure.co.jp/shop/products/cure-014?srsltid=AfmBOoo6jS-5VU8neJerfFrM_Iqb-WzPzOuJzf7OW07YM2EbVTT0d-Wa', tip: 'Cure「White Clear Gel四效去角質凝膠」是每週保養必備的美肌橡皮擦,溫和去除老廢角質,同時提亮膚色、滋潤保濕並預防痘痘。', tipFull: 'Cure「White Clear Gel四效去角質凝膠」是每週保養必備的美肌橡皮擦,溫和去除老廢角質,同時提亮膚色、滋潤保濕並預防痘痘。含水溶性胎盤素與甘草酸二鉀等薬用成分,加上多種草本保濕精華,使用後肌膚光滑透亮,後續保養吸收加成,也適合初階與敏弱肌膚,每週2次即可維持最佳膚況。', column: 'https://www.japankuru.com/tw/shopping/257656/', hasVideo: true, videoId: 'lYlS9VmR0ZI', voices: [ { initial: 'J', name: 'ジャリンリン', attr: '30多歲・上班族', text: '最近保養桌上多了一瓶默默很有存在感的——Cure 藥用去角質凝膠。', date: '2026.03', color: '#E91E63', snsUrl: 'https://www.facebook.com/jialing.shies/posts/pfbid0MeEmLeRhTFejHHzq9GqPdk3pE74GF4KX728oCFtCiQnq3kob7uLbNWETgRc8WRmKl' }, { initial: '苦', name: '苦逼留學生的碎念', attr: '30多歲・上班族', text: '最近覺得背長很多小顆粒 剛好來用看看這個去角質凝膠', date: '2026.03', color: '#9C27B0', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid02wsZc68pNckakhU2Asx9RtDjFJCZJV3LLDSnq73DfpZsTF9igXoUWNQETjuGnqaMPl&id=100052568835647&rdid=KQIqDkaFmpOrt5e2#' }, { initial: '3', name: '31803', attr: '40多歲・家庭主婦', text: '最近用到一罐還蠻好用的去角質', date: '2026.03', color: '#3F51B5', snsUrl: 'https://www.facebook.com/osakapleb/posts/pfbid031dSJnTWkiVFXNPMjjsxHTTZxCeUWc7Ucu3CPtypNrzCGqemwuttv38DntxxyQmfql' }, { initial: 'C', name: 'Chiu-wei Liu', attr: '30多歲・上班族', text: '這次是介紹Cure這款 去角質Gel,洗澡的時候一起去角質 超方便!!!!', date: '2026.03', color: '#009688', snsUrl: 'https://www.facebook.com/chiuwei.liu/posts/pfbid0ff3vdZyZAUFPUP4ZBZjTcGpQXkxXTvmPoNwphHN5D6dgtPF2jLWuRXCaHGZrxPhRl' }, { initial: 'R', name: 'Rebecca528', attr: '30多歲・上班族', text: '我自己其實已經默默用到 第三罐了。', date: '2026.03', color: '#FF5722', snsUrl: 'https://www.instagram.com/p/DV063CPj2B-/' } ], voiceCount: 5 } ] }, medicine: { title: '醫藥品', products: [ { id: 7, slug: "kowa-theguard-seichoyaku", name: "顧多整腸錠α³+", brand: "興和株式會社", price: 1628, priceNote: "150錠 ¥1,628 / 350錠 ¥3,058 / 550錠 ¥4,158", image: "https://www.japankuru.com/gld-kanri/data/uploads/2026/06/4987067244706-t.png", label: "type-hot", labelText: "腸活", plan: "platinum", originalUrl: "https://hc.kowa.co.jp/otc/11806", tip: "不只是整腸,還能同時護胃消脹氣!添加納豆菌、乳酸菌以及比菲德氏菌等三種特性不同的好菌,能夠改善腸道環境的健康狀態。", tipFull: "第3類医薬品\n不只是整腸,還能同時護胃消脹氣!添加納豆菌、乳酸菌以及比菲德氏菌等三種特性不同的好菌,能夠改善腸道環境的健康狀態。同時添加能夠修復胃黏膜的氯化甲硫胺基酸(MMSC),以及多種健胃中藥成分、胃酸中和成分及消脹氣成分,是一款兼顧胃部健康的腸活*醫藥品! *指透過益生菌調整腸內環境。\n\n
📋 名稱 KOWA-顧多整腸錠α³+
🏷 醫藥分類 第3類医薬品
✅ 適應症 整腸(通便)、軟便、便祕、胃部・腹部膨滿感、消化不良、胃脹、胃機能低落、食欲不振、暴食、飲酒過量、想吐、嘔吐、胃酸逆流感、胸悶、胃部不舒服、胃重壓感、胃酸過多、打嗝、胃痛
\n※:使用前請詳閱說明書並依指示之適應症與用法用量使用。", column: 'https://www.japankuru.com/tw/shopping/285061', hasVideo: true, videoId: 'G0-5yVbGDhw', voiceCount: 11, voices: [ { initial: "在", name: "在日本的庶民生活", attr: "40代・主婦", text: "我沒有便秘的問題,但大便很臭,所以想說吃看看。不過胃脹氣還是腹部脹氣改善很多,也是意外的收穫。有脹氣困擾的人可以參考看看,肚子舒服很多。", date: "2026.06", color: "#C9A962", snsUrl: "https://www.facebook.com/reel/999929736090146" }, { initial: "m", name: "mao_travel_japan", attr: "30代・會社員", text: "實際服用一段時間後,我最有感的是飯後腹脹感減少許多,排便也變得比較規律。雖然不是立刻見效的類型,但整體感受相當溫和。", date: "2026.06", color: "#E91E63", snsUrl: "https://www.instagram.com/p/DZuAtN0kZd9/" }, { initial: "均", name: "均媽與熙正媽媽", attr: "30代・主婦", text: "我是一個很愛吃的女生,一天吃不停,除了喜歡吃放題之外,還喜歡吃零食、汽水、甜品等等。有時候吃得太飽肚子脹,還會出現便秘情況。", date: "2026.06", color: "#9C27B0", snsUrl: "https://www.instagram.com/p/DZMfktVFK5L/?img_index=1" }, { initial: "W", name: "Wei Wei", attr: "30代・會社員", text: "前陣子被朋友推坑了這款日本阿公阿嬤家幾乎常備的「The Guard 整腸錠 α3+」,吃了一陣子覺得真的滿有感的。", date: "2026.06", color: "#3F51B5", snsUrl: "https://www.facebook.com/permalink.php?story_fbid=pfbid029fHG1Uy4ad7ft1H5eG59kTT8nEhWoxMRaW3bztdNY2XQZBGQw1WzfGLh43f4ce8Gl&id=100001466739903" }, { initial: "新", name: "新日一成", attr: "40代・個人事業主", text: "最近出門都會隨身攜帶,希望能把腸胃狀態維持在最佳狀況,工作和生活都更有精神。", date: "2026.06", color: "#009688", snsUrl: "https://www.facebook.com/hu.wei.7/posts/pfbid02gj8yU4hXut43R5vBDR5n4Zdjr6eoU6yEUAvnnRyQPsHHuQvYfPj6PUtfNDJi4Ymml" }, { initial: "花", name: "🤘花森米米🤘", attr: "30代・自由工作者", text: "前陣子大吃燒肉後,肚子不太爽快,回家也是趕快吃這款。", date: "2026.06", color: "#FF5722", snsUrl: "https://www.instagram.com/p/DZ1y-eOE2bh/?img_index=1" }, { initial: "A", name: "A", attr: "30代・會社員", text: "還有,藥也蠻小的很容易吞,對於經常外食、生活作息不規律,或容易有便秘、軟便、胃脹等困擾的人來說,是一款值得嘗試的整腸產品。", date: "2026.06", color: "#795548", snsUrl: "https://www.instagram.com/p/DZuiRH9kw4r/?img_index=1" }, { initial: "優", name: "優妮 | 大阪京都神戶旅遊攻略", attr: "30代・會社員", text: "對容易便秘的人來說,能每天順順的真的會很感動🥹 這款我應該會繼續吃。", date: "2026.06", color: "#607D8B", snsUrl: "https://www.instagram.com/p/DZZ7Z_TE0C0/?img_index=1" }, { initial: "高", name: "高嘉宏", attr: "30代・會社員", text: "年初回台做了腸胃鏡檢查,原本以為身體沒什麼異樣,殊不知結果出來發現有輕微胃食道逆流以及罹患幽門桿菌,這讓我開始關注對胃部的保健與照護。", date: "2026.06", color: "#4CAF50", snsUrl: "https://www.facebook.com/100002005371688/posts/26914166374900177/?mibextid=wwXIf&rdid=EXZeFIOH8ExthFpi" }, { initial: "W", name: "Wu Shan", attr: "30代・會社員", text: "這瓶帶出門非常方便、毫無負擔,也比較能提醒自己定時服用,畢竟有穩定攝取才能知道效果。", date: "2026.06", color: "#FF9800", snsUrl: "https://www.facebook.com/100000366242237/posts/27591511050444399/?rdid=aglWhfY6UWtQZ4iO" }, { initial: "C", name: "Chiu-wei Liu", attr: "30代・會社員", text: "生理期前容易卡關、或是經常出差旅遊的人,行李箱裡絕對要帶上它,隨時神救援!", date: "2026.06", color: "#2196F3", snsUrl: "https://www.facebook.com/1481596173/posts/10235428376798390/?mibextid=wwXIfr&rdid=RxxJro2p95wPEmkf" } ] }, { id: 4, slug: 'pabron-gold-a', name: '百保能GOLD A (パブロンゴールドA) 綜合感冒藥', brand: '大正製藥', price: 2057, priceNote: '130錠・28包 ¥2,057 / 210錠・44包 ¥3,025', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/teisensei_pabron_golda.jpg', label: 'type-exclusive', labelText: '日本限定', plan: 'platinum', originalUrl: 'https://brand.taisho.co.jp/pabron/', tip: '大正製藥「PABRON百保能」為創立近百年的經典綜合感冒藥品牌,主以呼吸道黏膜防禦為設計理念。紅金「GOLD A」含乙醯胺酚,適合多症狀初期緩解;', tipFull: '大正製藥「PABRON百保能」為創立近百年的經典綜合感冒藥品牌,主以呼吸道黏膜防禦為設計理念。紅金「GOLD A」含乙醯胺酚,適合多症狀初期緩解;藍金版「Pro-X」,採用布洛芬作為退燒止痛成分(限15歲以上使用)。兩款皆針對咳嗽、喉痛、鼻塞等症狀設計,是臺日人氣家庭常備藥熱門選擇。\n※:使用前請詳閱說明書並依指示之適應症與用法用量使用。', column: 'https://www.japankuru.com/tw/shopping/264144/', hasVideo: false, voices: [ { initial: '花', name: '花森米米', attr: '30多歲・自由工作者', text: 'パブロンゴールドA,是在日本很常見的家庭常備藥之一。', date: '2026.03', color: '#E91E63', snsUrl: 'https://www.instagram.com/p/DV5MG-mEqyl/' }, { initial: '辛', name: '辛宜靜', attr: '30多歲・上班族', text: '只要有任何感冒前兆都可以喝一包,讓我的突發感冒可以先壓壓。', date: '2026.03', color: '#FF5722', snsUrl: 'https://www.facebook.com/kid0804/posts/pfbid02LoRRVmigQ33XsvCQBKUtQe8hNhpq5QJR5kQP8nyrQrtJcMYmNsq1moy5oHFgJGFQl' }, { initial: '日', name: '日本零食好吃驚', attr: '30多歲・上班族', text: '這是我們家中必備的「感冒藥」,可以用來緩解各式各樣的感冒症狀,真的太全能太好用了!', date: '2026.03', color: '#9C27B0', snsUrl: 'https://www.instagram.com/p/DVntk4BGpdZ/?img_index=1' } ], voiceCount: 3 }, { id: 5, slug: 'pabron-ace-prox', name: '百保能Pro-X (パブロンエースPro-X) 感冒藥', brand: '大正製藥', price: 1518, priceNote: '18錠・6包 ¥1,518 / 36錠・12包 ¥2,178', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/column-pabron-aceprox-back-label.jpg', label: 'type-exclusive', labelText: '日本限定', plan: 'platinum', originalUrl: 'https://brand.taisho.co.jp/pabron/', tip: '大正製藥「PABRON百保能」為創立近百年的經典綜合感冒藥品牌,主以呼吸道黏膜防禦為設計理念。藍金版「Pro-X」採用布洛芬作為退燒止痛成分(限15歲以上使用)。', tipFull: '大正製藥「PABRON百保能」為創立近百年的經典綜合感冒藥品牌,主以呼吸道黏膜防禦為設計理念。紅金「GOLD A」含乙醯胺酚,適合多症狀初期緩解;藍金版「Pro-X」,採用布洛芬作為退燒止痛成分(限15歲以上使用)。兩款皆針對咳嗽、喉痛、鼻塞等症狀設計,是臺日人氣家庭常備藥熱門選擇。\n※:使用前請詳閱說明書並依指示之適應症與用法用量使用。', column: 'https://www.japankuru.com/tw/shopping/264144/', hasVideo: false, voices: [ { initial: 'S', name: 'Sharon Hsieh', attr: '20多歲・上班族', text: '裡面含有能幫助改善 喉嚨痛、咳嗽與發炎 的成分,能在感冒初期就好好對應各種不舒服的症狀。', date: '2026.03', color: '#E91E63', snsUrl: 'https://www.facebook.com/sharonxhsieh/posts/pfbid02YsaPMn7pxzBi9SsateQtua66EGeUfetxHbuEUUNSf75VSSm5YRnLSU1W1coLfZ4Fl' }, { initial: '林', name: '林桑的日本遊記', attr: '40多歲・上班族', text: '這款是日本大正製藥的產品,在日本算是滿有名的老品牌,很多人逛藥妝店應該都看過!', date: '2026.03', color: '#9C27B0', snsUrl: 'https://www.instagram.com/p/DV3QDCtkqiZ/?img_index=1' }, { initial: '如', name: '如月ゆな', attr: '30多歲・上班族', text: '我最喜歡它的錠劑設計,完全沒有粉末感冒藥常見的那種苦味。', date: '2026.03', color: '#3F51B5', snsUrl: 'https://www.instagram.com/p/DVdNKKrklYv/?igsh=c251N3UxZW1zZWI4&img_index=1' }, { initial: '李', name: '李映宣', attr: '20多歲・上班族', text: '粉末型的綜合感冒藥,一包一包分好,其實還蠻方便的。', date: '2026.03', color: '#607D8B', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid031SjxEMnTAgBnoYGh9oHU9G4GPoLuYcfjHdtDdTwEUAuSeY6r7iso9htZ8PaadJf3l&id=100001498612711' }, { initial: 'I', name: 'Iru Chin', attr: '30多歲・自由工作者', text: '其實最早的パブロン是止咳藥,之後才演變為感冒藥💊,我都拿來當家裡常備藥。', date: '2026.03', color: '#4CAF50', snsUrl: 'https://www.facebook.com/natsuki.chin.7/posts/pfbid06VY12vPT9e52fifhschY4BJUbrKL6iBPkkgTePfGV7JAxiJmQTRgmeMgTVpNW9oQl' }, { initial: '新', name: '新日一成', attr: '40多歲・個人創業者', text: '如果是像我一樣,常常一感冒就先從喉嚨痛開始的人,這款真的可以放在家裡備著。', date: '2026.03', color: '#FF9800', snsUrl: 'https://www.facebook.com/hu.wei.7/posts/pfbid0kVwaP1MQ8PtaWQ8UypMGDDea1G1kBMniiFtbGV5pvBNwxDGuGbvgHh3urtq7vvsVl' }, { initial: 'S', name: 'Shizuku Chu', attr: '30多歲・上班族', text: '製藥老牌廠商的藥,值得信賴而且我個人是覺得蠻有效果又好吞還不會愛睡覺~', date: '2026.03', color: '#2196F3', snsUrl: 'https://www.facebook.com/story.php?story_fbid=35337702805828358&id=100000462608255&mibextid=wwXIfr&rdid=3EvRqFa0oMasAJ7w#' } ], voiceCount: 7 }, { id: 20, slug: 'kenei-magnesium-oxide', name: '健榮製藥 氧化鎂E便秘藥', brand: '健榮製藥', price: 680, priceNote: '40錠 ¥680 / 90錠 ¥1,200 / 180錠 ¥2,200 / 360錠 ¥4,000', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/kenei-product-detail-1-2048x1536.jpg', label: 'type-hot', labelText: '新話題', plan: 'platinum', originalUrl: 'https://www.kenei-pharm.com/ebenpi/', tip: '健榮製藥-氧化鎂E便秘藥,日本藥妝店常見的非刺激性便秘藥。採用國產氧化鎂透過滲透壓機制增加腸道水分,協助軟化糞便,較不易引發腹痛與依賴性。', tipFull: '健榮製藥-氧化鎂E便秘藥,日本藥妝店常見的非刺激性便秘藥。採用國產氧化鎂透過滲透壓機制增加腸道水分,協助軟化糞便,較不易引發腹痛與依賴性。速崩技術錠劑,搭配微甜檸檬風味,提升適口性,接受度較高。成人可依體質調整劑量,輕巧包裝方便攜帶,是慢性便秘管理的選擇之一。非刺激性瀉藥效果較溫和,是日本藥妝店便秘藥的新話題,也是慢性便秘管理的新選擇。', column: 'https://www.japankuru.com/tw/shopping/263178/', hasVideo: true, videoId: '9m6r4sCWBrw', voices: [ { initial: 'W', name: 'Wei Wei', attr: '30多歲・上班族', text: '最近日本開始回溫,出門小旅行的機會變多。我發現他們家出的旅行裝(隨身包)真的是大救星!', date: '2026.03', color: '#E91E63', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid02vNkKin39zi89gjSKPA7NNozyURvonfkLDmYBLkwa2gtLBPyd3Dq3uPLJ5cEU64LFl&id=100001466739903' }, { initial: '新', name: '新日一成', attr: '40多歲・個人創業者', text: '家裡有個小一的孩子,有時候因為飲食不均衡或水喝太少,也會有便便不順的情況。這種溫和型的產品,家裡備著就很安心。', date: '2026.03', color: '#9C27B0', snsUrl: 'https://www.facebook.com/hu.wei.7/posts/pfbid0E938bxNDG3zkg2dqYHL981CiDUmiF1EtrEToUrom28V9gagqfhE45KG2LY1gbuwKl' }, { initial: 'S', name: 'Sharon Hsieh', attr: '20多歲・上班族', text: '現在我的行李裡,有個專門裝藥的小袋子,裡面除了胃藥和感冒藥之外,也多放了這個腸胃的小備品。', date: '2026.03', color: '#3F51B5', snsUrl: 'https://www.facebook.com/sharonxhsieh/posts/pfbid028tT3vj9iSgPR5E8JZ9hmmk8bRwA6cDhBwSiSMkN9j1tYc8YNkkuSNCkYM5BMY4vDl' }, { initial: '李', name: '李映宣', attr: '20多歲・上班族', text: '偶爾不太順的時候用,可以讓狀態慢慢回到正常,也不會有太強烈的不適感', date: '2026.03', color: '#009688', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid02fT9dv8vmFpenvA1giybBKXNwW56UyLg92QEHBhrNfG8pw6554SnvrMF8JrYNNdZsl&id=100001498612711' }, { initial: '優', name: '優妮帶你遊大阪不踩雷', attr: '30多歲・上班族', text: '旅行裝放包包超方便,真的就是那種「欸我有帶,心就定一半」的安心感', date: '2026.03', color: '#FF5722', snsUrl: 'https://www.instagram.com/p/DVU-hr4krds/?img_index=1' }, { initial: '日', name: '日本零食好吃驚', attr: '30多歲・上班族', text: '這款產品的核心成分是氧化鎂,不是那種強行刺激腸道的瀉藥,而是透過「吸收水分」來軟化便便', date: '2026.03', color: '#795548', snsUrl: 'https://www.instagram.com/p/DV4zkhXD7Kb/?img_index=1' }, { initial: 'C', name: 'Chih Lin Kun', attr: '30多歲・留學生', text: '實際服用後覺得錠劑大小適中,吞服也很方便', date: '2026.03', color: '#607D8B', snsUrl: 'https://www.instagram.com/p/DV9-_pyki69/?img_index=1' }, { initial: 'P', name: 'pudding🍮', attr: '30多歲・上班族', text: '它與市面上強迫腸胃蠕動的瀉藥完全不同,這種不絞痛、溫和的排便體驗,真的非常實用。', date: '2026.03', color: '#4CAF50', snsUrl: 'https://www.instagram.com/p/DV8zHNnkhwb/' }, { initial: 'S', name: 'shark_dosa', attr: '20多歲・上班族', text: '像我這種飲食一亂掉、腸胃就容易出狀況的人,看到這種實用型常備藥真的會默默記下來。', date: '2026.03', color: '#FF9800', snsUrl: 'https://www.instagram.com/p/DV8pTwsD1kM/?img_index=1' }, { initial: '蔡', name: '蔡昀臻', attr: '20多歲・上班族', text: '身為外食族,有的時候工作壓力大,肚子總是卡卡的,這時就需要這個好幫手', date: '2026.03', color: '#2196F3', snsUrl: 'https://www.facebook.com/story.php?story_fbid=26081505711511890&id=100002374528664&mibextid=wwXIfr&rdid=KbFxdcK1fawc7zq3#' } ], voiceCount: 10 }, { id: 23, slug: 'oronine-h-ointment', name: 'Oronine H軟膏', brand: '大塚製藥', price: 385, priceNote: '11g軟管裝 ¥385 / 50g軟管裝 ¥770', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/oronine_portrait_under_1mb.jpg', label: 'type-exclusive', labelText: 'PR', plan: 'basic', isPR: true, originalUrl: 'https://www.otsuka.co.jp/ohn/', tip: '「PR」大塚製藥-Oronine H應急軟膏,在日長銷73年的家庭常備外傷用藥。含葡萄糖酸氯己定溶液,適用擦傷、乾裂、輕微燙傷及痤瘡等。11g與50g兩種尺寸,方便隨身攜帶。', tipFull: '第2類医薬品「PR」\n身邊有很多日本朋友跟我說,發跡於四國・徳島縣的「Oronine H軟膏」根本就是他們童年回憶的一部分。因為許多人的家中都會常備有這一瓶,只要調皮搗蛋擦傷,或是粗心大意不小心被燙到,甚至是冬天皮膚乾裂時,家人就會拿出這罐軟膏。不過也有11公克和50公克的條裝版本,方便攜帶可以放在包包作為隨身應急藥膏。\n\n「Oronine H軟膏」主要含有葡萄糖酸氯己定溶液(Chlorhexidine Gluconate),這是廣泛用於殺菌、消毒的有效成分。除了可以用於擦傷、刀傷、裂傷、乾裂、以及輕微燙傷等部位之外,亦可依適應症使用於痤瘡與粉刺等皮膚狀況。\n\n
📋 名稱 オロナインH軟膏
🏷 醫藥分類 第2類医薬品
✅ 適應症 擦傷・裂傷・乾裂・輕微燙傷・痤瘡・粉刺
\n※:使用前請詳閱說明書並依指示之適應症與用法用量使用。', column: null, hasVideo: false, voices: [], voiceCount: 0 }, { id: 25, slug: 'taisho-gaichoyaku-k', name: '大正胃腸藥K', brand: '大正製藥', price: 1670, priceNote: '16包/70錠 ¥1,670 / 24包/110錠 ¥2,299 / 38包/190錠 ¥3,388 / 50包/230錠 ¥4,054', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/taisho-gaichoyaku-k-man-holding-1.jpg', label: 'type-exclusive', labelText: '日本限定', plan: 'basic', originalUrl: 'https://www.catalog-taisho.com/category/05/001/01082/', tip: '大正製藥-大正胃腸藥K,兼顧敏弱胃調理,幫助消化與舒緩緊張胃。獨家結合「安中散」與「芍藥甘草湯」,應對消化不良到壓力大引起的胃部不適。日本上班族高人氣家庭常備藥。', tipFull: '日本藥妝店裡陳列的眾多胃腸藥當中,誕生於1978年的大正漢方胃腸藥也是眾多日本人推崇的經典家庭常備藥。獨家結合能夠促進胃腸消化機能的「安中散」,以及舒緩胃部緊張狀態的「芍藥甘草湯」,能夠應對消化不良到壓力大引起的胃部不適,不少忙碌的日本上班族的抽屜或包包當中,都可見到這款長銷多年的胃腸藥。\n說到「大正胃腸藥K」,則是日本藥妝通才知道的大正漢方胃腸藥「芍薬甘草湯增量版」!同樣是5歲以上就可服用,但「芍藥甘草湯」的添加劑量則是從140毫克增量至170毫克!\n\n名稱:大正胃腸薬K\n醫藥分類:第2類医薬品\n適應症:胃痛、胃脹、胃炎、胃部不適、食慾不振、打嗝、腹痛、胸口灼熱、噁心、胃酸過多、腹部膨脹感\n※:使用前請詳閱說明書並依指示之適應症與用法用量使用。', column: null, hasVideo: false, voices: [ { initial: 'R', name: 'RUBY Lee', attr: '20多歲・上班族', text: '我自己覺得用起來算是比較溫和,不會有太強烈的刺激感,但又可以慢慢讓腸胃舒服一點。', date: '2026.03', color: '#E91E63', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid032mWxeYHKL1JKqorutHXjhPozw197trNdT61mfuyEBSwYgsBv9vNSk189kSEYypvol&id=100001498612711' }, { initial: '劉', name: '劉采蓉', attr: '30多歲・留學生', text: '裡面結合了「安中散」(針對胃痛、胃酸過多)以及「芍藥甘草湯」(偏鎮痛作用),整體是比較溫和的調理型胃藥。', date: '2026.03', color: '#9C27B0', snsUrl: 'https://www.facebook.com/teresa.liu.1293/posts/pfbid09ukmjszJhKUuMKEdoPNAo5Qz9wpjXtjN9kidRJ5cpnpRQs2JUNyykRFkYSf9eWZGl' }, { initial: 'P', name: 'purple', attr: '30多歲・上班族', text: '最喜歡的是它的微粒設計,顆粒非常細,小小的很好入口,也很容易溶於水。', date: '2026.03', color: '#3F51B5', snsUrl: 'https://www.instagram.com/p/DVk6NJvmWOu/?img_index=1' }, { initial: 'S', name: 'Sharon Hsieh', attr: '20多歲・上班族', text: '最近開始養成一個習慣—— 出國或回台灣一定會帶胃藥。', date: '2026.03', color: '#009688', snsUrl: 'https://www.facebook.com/sharonxhsieh/posts/pfbid02CMHbUCU9sm7cG5pFfBS6suNG1CRewaphiA58r61JT3JJmqwMvQ7y8Z6GqwqCUCp7l' }, { initial: '花', name: '花森米米', attr: '30多歲・自由工作者', text: '獨立包裝,隨身攜帶方便,在外如果突然胃不舒服,就能馬上吃一包', date: '2026.03', color: '#FF5722', snsUrl: 'https://www.instagram.com/p/DV5MYIhEkKm/?img_index=1' } ], voiceCount: 5 } ] }, health: { title: '健康食品・食品', products: [ { id: 22, slug: 'naishidown-visceral-fat', name: 'NAISHI-DOWN減脂錠', brand: '井藤漢方製藥', price: 1980, priceNote: '60粒 ¥1,980', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/naishidown-ito-kampo-visceral-fat-supplement.jpg', label: 'type-hot', labelText: '話題', plan: 'gold', originalUrl: 'https://www.itohkampo.co.jp/products/101140039.html', tip: '井藤漢方「NAISHI-DOWN減脂錠」為一款採用黑薑由來多甲氧基黃酮(PMF)為關鍵成分的日本機能性表示食品。具備有助於BMI偏高者輔助減少腹部脂肪的機能性。', tipFull: '井藤漢方「NAISHI-DOWN減脂錠」為一款採用黑薑由來多甲氧基黃酮(PMF)為關鍵成分的日本機能性表示食品。黑薑由來的多甲氧基黃酮,在日本有研究報告指出,具備「有助於BMI偏高者輔助減少腹部脂肪(包含內臟脂肪與皮下脂肪)」的機能性。同時,也有報告指出在日常生活的基礎能量代謝下,幫助脂肪更有效率被消耗。每日建議攝取兩粒。草本氣味較弱,適合作為飲食控制期間的日常代謝輔助選擇。', column: 'https://www.japankuru.com/tw/shopping/263542/', hasVideo: true, videoId: 'i2f4VD2aeVs', voices: [ { initial: '新', name: '新日一成', attr: '40多歲・個人創業者', text: '對像我這種 BMI大概24以上、開始擔心肚子越來越大的中年族群,確實會比較有感覺', date: '2026.03', color: '#E91E63', snsUrl: 'https://www.facebook.com/hu.wei.7/posts/pfbid0XzgFB6A6q2rUkE7rXSBuYYYN7fYZvNWYqojqrp25jnsSkjhNXPV67cYKVYvtE8HYl' }, { initial: 'K', name: 'Kobayashi Celine', attr: '40多歲・自由工作者', text: '很適合BMI24以上未滿30,在意體態與健康數值的人。', date: '2026.03', color: '#9C27B0', snsUrl: 'https://www.instagram.com/p/DV7X9uzD5uq/?igsh=MWgwa2p4OHZwMWhtNA%3D%3D&img_index=1' }, { initial: '花', name: '花森米米', attr: '30多歲・自由工作者', text: '這款在日本藥妝店一直很有討論度的內脂輕,真的很適合像我們這種生活忙碌、沒時間(懶得)運動的人', date: '2026.03', color: '#3F51B5', snsUrl: 'https://www.instagram.com/p/DV5MsQwkjrK/?img_index=1' }, { initial: 'A', name: 'Aya Mikazuki', attr: '30多歲・上班族', text: '最近開始更在意體態跟健康數值,發現其實「日常生活」也可以成為管理的一部分', date: '2026.03', color: '#009688', snsUrl: 'https://www.facebook.com/vminqi/posts/pfbid021mkEcYvhezJeCkuCabH8mm2jCSbRxoLx3wBZU6tkNU5nfCoGXK77yDh8f3QbNoRql' }, { initial: '優', name: '優妮帶你遊大阪不踩雷', attr: '30多歲・上班族', text: '2月跟妹妹暢遊九州一路大吃,回到日常照鏡子,我真的開始在意腹部線條+健康數值…所以最近把井藤漢方製藥內脂輕加進我的日常保養清單。', date: '2026.03', color: '#FF5722', snsUrl: 'https://www.instagram.com/p/DVU_IsDkh7a/?img_index=1' } ], voiceCount: 5 }, { id: 24, slug: 'lipovitan-dx', name: '力保美達DX(リポビタンDX)', brand: '大正製藥', price: 1650, priceNote: '30錠 ¥1,650 / 90錠 ¥4,268 / 180錠 ¥6,468 / 270錠 ¥8,668', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/lipovitan-dx-man-holding-window.jpg', label: 'type-hot', labelText: '話題', plan: 'basic', originalUrl: 'https://www.taisho-direct.jp/simages/lp/adfm/LDXA.html', tip: '大正製藥-Lipovitan力保美達DX,日本元氣補充飲的錠劑版本。含牛磺酸500mg+維生素B群+助眠胺基酸「甘胺酸」,抗疲勞同時輔助改善淺眠等狀況。指定医薬部外品。', tipFull: '日本元氣補充飲系列的錠劑版本。改善疲勞同時兼顧睡眠情況。\n\n誕生於1960年代的力保美達,堪稱是日本元氣補充飲的先鋒,至今仍有許多日本上班族習慣「喝了再上」。力保美達的靈魂核心成分「牛磺酸」是胺基酸的一種,廣為人知的消除疲勞作用成分。\n\n錠劑版本的「力保美達DX」,是近幾年異軍突起的抗疲B群人氣新選擇。每日建議攝取的3粒當中,不僅含有500毫克的牛磺酸和維生素B群,還搭配助眠系胺基酸「甘胺酸」,超級適合忙碌的現代人用來抵抗疲勞,同時輔助隨年齡增加而出現的難以入睡、淺眠或不易醒來等狀況。\n\n名稱:LIPOVITAN DX\n醫藥分類:指定医薬部外品\n效能、效果:恢復及預防疲勞/改善難以入睡・淺睡・難以睡醒/維持及改善體力、身體抵抗力及集中力\n※:使用前請詳閱說明書並依指示之適應症與用法用量使用。', tipFull: '誕生於1960年代的力保美達,堪稱是日本元氣補充飲的先鋒,至今仍有許多日本上班族習慣「喝了再上」。力保美達的靈魂核心成分「牛磺酸」是胺基酸的一種,廣為人知的消除疲勞作用成分。\n錠劑版本的「力保美達DX」,是近幾年異軍突起的抗疲B群人氣新選擇。每日建議攝取的3粒當中,不僅含有500毫克的牛磺酸和維生素B群,還搭配助眠系胺基酸「甘胺酸」,超級適合忙碌的現代人用來抵抗疲勞,同時輔助隨年齡增加而出現的難以入睡、淺眠或不易醒來等狀況。\n\n名稱:LIPOVITAN DX\n醫藥分類:指定医薬部外品\n效能、效果:恢復及預防疲勞/改善難以入睡・淺睡・難以睡醒/維持及改善體力、身體抵抗力及集中力\n※:使用前請詳閱說明書並依指示之適應症與用法用量使用。', column: null, hasVideo: false, voices: [ { initial: '林', name: '林桑的日本遊記', attr: '40多歲・上班族', text: '這款是日本大正製藥的產品,在日本藥妝店其實滿常看到的!', date: '2026.03', color: '#E91E63', snsUrl: 'https://www.instagram.com/p/DV54EL0EuHH/?img_index=1' }, { initial: '優', name: '優妮帶你遊大阪不踩雷', attr: '30多歲・上班族', text: '它沒咖啡因,加上睡眠支持成分グリシン、以及生藥シゴカ,所以我最常是「晚餐後~睡前」那段時間吃', date: '2026.03', color: '#9C27B0', snsUrl: 'https://www.instagram.com/p/DVU6niYEi4V/?img_index=1' }, { initial: '劉', name: '劉采蓉', attr: '30多歲・留學生', text: '我自己是在覺得有點累、或是壓力比較大、比較忙的時候會吃', date: '2026.03', color: '#3F51B5', snsUrl: 'https://www.facebook.com/teresa.liu.1293/posts/pfbid0zpGbKmihEmwSD4TSVE6Cqi7Zmb8hGt3nf36QMmoF3UAwRM92Z6ZSFtaTNyAZvpBql' }, { initial: 'S', name: 'Shanyu Lin', attr: '40多歲・家庭主婦', text: '同時改善睡眠問題,感覺根本就是我現在狀況設計的救星。', date: '2026.03', color: '#009688', snsUrl: 'https://www.facebook.com/sacuralin/posts/pfbid02dJYFqBrcUBvnDoey24oD1prWWecrBedDWbEGYtZuSxPzQYfqNbwEBt5CggoRYiNLl' }, { initial: 'P', name: 'purple', attr: '30多歲・上班族', text: '我自己蠻喜歡的一點是它沒有咖啡因☕️❌ 所以就算是睡前也可以吃,不用擔心影響睡眠。', date: '2026.03', color: '#FF5722', snsUrl: 'https://www.instagram.com/p/DV8K6MombB5/?img_index=1' } ], voiceCount: 5 } ] }, daily: { title: '日用品', products: [ { id: 30, slug: 'pelack-t-throat', name: 'PELACK-T喉嚨消炎錠a', brand: '第一三共', price: 1430, priceNote: '18錠 ¥1,430 / 36錠 ¥2,640 / 54錠 ¥3,410', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/pelack-T3.png', label: 'type-exclusive', labelText: '日本限定', plan: 'gold', originalUrl: 'https://www.daiichisankyo-hc.co.jp/site_pelack/', tip: 'PELACK-T喉嚨消炎錠a為日本第三類醫藥品,主成分傳明酸(Tranexamic Acid)可透過抑制纖維蛋白溶解反應,降低發炎相關物質活性,協助改善喉嚨紅腫與疼痛不適。建議於症狀初期使用,有助於控制不適感。除喉嚨疼痛外,也可作為口內炎期間的輔助對症用藥。', tipFull: 'PELACK-T喉嚨消炎錠a為日本第三類醫藥品,主成分傳明酸(Tranexamic Acid)可透過抑制纖維蛋白溶解反應,降低發炎相關物質活性,協助改善喉嚨紅腫與疼痛不適。建議於症狀初期使用,有助於控制不適感。除喉嚨疼痛外,也可作為口內炎期間的輔助對症用藥。\n※:使用前請詳閱說明書並依指示之適應症與用法用量使用。', column: 'https://www.japankuru.com/tw/shopping/264456/', hasVideo: true, videoId: '41SH1U8NWH8', voices: [ { initial: '劉', name: '劉采蓉', attr: '30多歲・留學生', text: '對於需要長時間講話、或是喉嚨容易反覆不舒服的人來說,真的蠻實用的', date: '2026.03', color: '#009688', snsUrl: 'https://www.facebook.com/teresa.liu.1293/posts/pfbid0givUT7EP7QLWkFTW4e8aQ8696Ms1PNvEARQnds9WnbFMBFrai6upXhQhSZ9SVvRl' }, { initial: '青', name: '青醬的日本小確幸', attr: '40多歲・上班族', text: '這款在日本算是知名度很高的喉嚨藥,很多人只要覺得「喉嚨怪怪的」,就會先吃。', date: '2026.03', color: '#4CAF50', snsUrl: 'https://www.facebook.com/chinchaninjp/posts/pfbid0Gy5KviNi4fT48Ghew3NemnGabWbLFN3C1cKZd7HviUSMeL79VekTyx2FsAx79diQl' }, { initial: 'H', name: 'HimiKo', attr: '20多歲・自由工作者', text: '是許多需要頻繁用嗓音工作者的護身符♪', date: '2026.03', color: '#E91E63', snsUrl: 'https://www.instagram.com/p/DWE8pMTAXn2/?img_index=1' }, { initial: 'W', name: 'Wei Wei', attr: '30多歲・上班族', text: '這款在旅遊圈被封為「喉嚨痛神藥」真的不是開玩笑', date: '2026.03', color: '#9C27B0', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid034dxkuKTKXHqMpSkihYcV9hbU8YzV37nnmfs1nsUW64L46kX46p8ey49hL32Bk7ttl&id=100001466739903' }, { initial: 'フ', name: 'ファン ナwナ', attr: '40多歲・上班族', text: '不含容易讓人想睡的成分,白天要上班或外出時吃也比較安心', date: '2026.03', color: '#3F51B5', snsUrl: 'https://www.instagram.com/p/DVnbtNcEqMS/?igsh=MXRpdWRieTcwenl5cg%3D%3D' }, { initial: 'Y', name: 'Yu Shan', attr: '40多歲・上班族', text: '最近喉嚨乾乾又有點痛,吃了之後真的有明顯緩解', date: '2026.03', color: '#FF5722', snsUrl: 'https://www.instagram.com/p/DWOOZVokVXZ/?img_index=1' }, { initial: '呂', name: '呂明怡', attr: '20多歲・上班族', text: '有時候換季、講話太多,或是感覺喉嚨開始乾乾痛痛的時候,我就會想到它', date: '2026.03', color: '#795548', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid0MdUXQAhgKAhCgtc6D3bd9f7GFxa3dfeBbMr5GXZAgAKrMCgYpyt6hit7T6oM8AFNl&id=100002589505586' }, { initial: '花', name: '花森米米', attr: '30多歲・自由工作者', text: '如果有喉嚨不舒服或容易嘴破的困擾,有來日本逛藥妝時也可以參考看看', date: '2026.03', color: '#607D8B', snsUrl: 'https://www.instagram.com/p/DVsxPd6kgIF/' }, { initial: 'B', name: 'BBQ in Japan', attr: '40多歲・個人創業者', text: '不知道實際效果如果,下次喉嚨開始不妙時來試看看', date: '2026.03', color: '#FF9800', snsUrl: 'https://www.facebook.com/BBQinJP/posts/pfbid0UiDRZdu9kTD6LVtCSYMPKVCnWXPXCfWder2vnN25Dj1kWk5CMfeQgwFHFAhSkiUZl' }, { initial: '廖', name: '廖小白', attr: '40多歲・上班族', text: '有時候口腔破,除了貼布,直接口服是比較快的', date: '2026.03', color: '#2196F3', snsUrl: 'https://www.facebook.com/100000142974546/posts/27152243391030393/?mibextid=wwXIfr&rdid=xdupk6r98viWkSGw#' } ], voiceCount: 10 }, { id: 31, slug: 'traful-mouth-patch', name: 'TRAFUL口內炎貼片a', brand: '第一三共', price: 1485, priceNote: '12片 ¥1,485 / 24片 ¥2,200', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/81rSZNyHgL._AC_SY879_.jpg', label: 'type-hot', labelText: '話題', plan: 'gold', originalUrl: 'https://www.daiichisankyo-hc.co.jp/site_traful/', tip: '第一三共HealthCare「TRAFUL口內炎貼片a」為日本熱銷對症用藥,專為復發性口內炎設計。0.16mm極薄貼片可直接貼附患部形成保護層,減少摩擦刺激,並釋放主要成分曲安奈德。約30~60分鐘自然溶解,無須撕除。輕巧好攜帶,適合復發性口內炎(嘴破)時備用。', tipFull: '第一三共HealthCare「TRAFUL口內炎貼片a」為日本熱銷對症用藥,專為復發性口內炎設計。0.16mm極薄貼片可直接貼附患部形成保護層,減少摩擦刺激,並釋放主要成分曲安奈德。約30~60分鐘自然溶解,無須撕除。輕巧好攜帶,適合復發性口內炎(嘴破)時備用。\n※:使用前請詳閱說明書並依指示之適應症與用法用量使用。', column: 'https://www.japankuru.com/tw/shopping/264744/', hasVideo: true, videoId: 'b3h2Ybw2BW4', voices: [ { initial: '呂', name: '呂明怡', attr: '20多歲・上班族', text: 'Traful 的口內炎貼片,會慢慢自己溶解,不需要特別撕下來', date: '2026.03', color: '#795548', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid0MdUXQAhgKAhCgtc6D3bd9f7GFxa3dfeBbMr5GXZAgAKrMCgYpyt6hit7T6oM8AFNl&id=100002589505586' }, { initial: '花', name: '花森米米', attr: '30多歲・自由工作者', text: '以前都用塗藥的方式,改用這款之後只要貼一下就好~', date: '2026.03', color: '#607D8B', snsUrl: 'https://www.instagram.com/p/DVsxPd6kgIF/' }, { initial: 'H', name: 'HimiKo', attr: '20多歲・自由工作者', text: '貼上後大約30分~1小時就會自動溶解在口中,非常方便!', date: '2026.03', color: '#E91E63', snsUrl: 'https://www.instagram.com/p/DWE8pMTAXn2/?img_index=1' }, { initial: 'W', name: 'Wei Wei', attr: '30多歲・上班族', text: '最方便的是它貼上去後會慢慢融化,不用擔心還要撕下來', date: '2026.03', color: '#9C27B0', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid034dxkuKTKXHqMpSkihYcV9hbU8YzV37nnmfs1nsUW64L46kX46p8ey49hL32Bk7ttl&id=100001466739903' }, { initial: 'フ', name: 'ファン ナwナ', attr: '40多歲・上班族', text: '貼片薄薄一片貼在患處,幾乎沒有什麼存在感', date: '2026.03', color: '#3F51B5', snsUrl: 'https://www.instagram.com/p/DVnbtNcEqMS/?igsh=MXRpdWRieTcwenl5cg%3D%3D' }, { initial: '劉', name: '劉采蓉', attr: '30多歲・留學生', text: '口內炎吃東西會痛、講話會摩擦到,真的很困擾的時候,這種貼片型產品就很方便。', date: '2026.03', color: '#009688', snsUrl: 'https://www.facebook.com/teresa.liu.1293/posts/pfbid0givUT7EP7QLWkFTW4e8aQ8696Ms1PNvEARQnds9WnbFMBFrai6upXhQhSZ9SVvRl' }, { initial: 'Y', name: 'Yu Shan', attr: '40多歲・上班族', text: '貼片型真的超方便,貼上後會慢慢溶解,不需要一直撕來撕去', date: '2026.03', color: '#FF5722', snsUrl: 'https://www.instagram.com/p/DWOOZVokVXZ/?img_index=1' }, { initial: '青', name: '青醬的日本小確幸', attr: '40多歲・上班族', text: '一累就嘴破、或很容易咬到自己的人,這款真的可以先筆記。', date: '2026.03', color: '#4CAF50', snsUrl: 'https://www.facebook.com/chinchaninjp/posts/pfbid0Gy5KviNi4fT48Ghew3NemnGabWbLFN3C1cKZd7HviUSMeL79VekTyx2FsAx79diQl' }, { initial: 'B', name: 'BBQ in Japan', attr: '40多歲・個人創業者', text: '好處是會溶於你口,不用怕睡一覺起來後發現吞下去了!', date: '2026.03', color: '#FF9800', snsUrl: 'https://www.facebook.com/BBQinJP/posts/pfbid0UiDRZdu9kTD6LVtCSYMPKVCnWXPXCfWder2vnN25Dj1kWk5CMfeQgwFHFAhSkiUZl' }, { initial: '廖', name: '廖小白', attr: '40多歲・上班族', text: '有這個口內炎貼布,貼著吃東西,完全可以放心吃', date: '2026.03', color: '#2196F3', snsUrl: 'https://www.facebook.com/100000142974546/posts/27152243391030393/?mibextid=wwXIfr&rdid=xdupk6r98viWkSGw#' } ], voiceCount: 10 }, { id: 32, slug: 'loxonin-ex-tape', name: 'LOXONIN樂松EX貼布(ロキソニンEXテープ)', brand: '第一三共', price: 1408, priceNote: '7片 ¥1,408 / 14片 ¥2,178 / 21片 ¥2,948', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/loxonin_portrait_under_1mb.jpg', label: 'type-exclusive', labelText: '日本限定', plan: 'gold', originalUrl: 'https://www.daiichisankyo-hc.co.jp/site_loxonin-s/gaiyou/', tip: '樂松EX貼布,日本製藥大廠研發,含洛索洛芬鈉水合物8.1%,為系列最高濃度。適用於腰痛、肩頸痠痛、關節痛與肌肉拉傷等不適。貼布輕薄服貼、不易脫落,並添加維生素E與L-薄荷醇,使用方便。請依說明書指示正確使用。', tipFull: '樂松EX貼布,日本製藥大廠研發,含洛索洛芬鈉水合物8.1%,為系列最高濃度。適用於腰痛、肩頸痠痛、關節痛與肌肉拉傷等不適。貼布輕薄服貼、不易脫落,並添加維生素E與L-薄荷醇,使用方便。\n※:使用前請詳閱說明書並依指示之適應症與用法用量使用。', column: 'https://www.japankuru.com/tw/shopping/264791/', hasVideo: false, voices: [ { initial: 'Y', name: 'Yu Shan', attr: '40多歲・上班族', text: '這款是醫療級的痠痛貼布,止痛成分濃度高,貼上後真的很有感', date: '2026.03', color: '#FF5722', snsUrl: 'https://www.instagram.com/p/DWONsWREfDX/?img_index=1' }, { initial: '廖', name: '廖小白', attr: '40多歲・上班族', text: '日本同事挫傷去醫院,醫師就是開Loxonin EX貼布給他!', date: '2026.03', color: '#2196F3', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid0uAxutCadifhTYW45h7LF21gZMF5vZ62HXLQA3W8WgpKivAEgGRXpQgrr58q8Hpwbl&id=100000142974546' }, { initial: 'H', name: 'HimiKo', attr: '20多歲・自由工作者', text: '含有與處方藥同級的止痛成分洛索洛芬鈉,針對肩膀僵硬、腰痛、小腿痠痛效果極佳', date: '2026.03', color: '#E91E63', snsUrl: 'https://www.instagram.com/p/DWCQnXmga10/?img_index=1' }, { initial: 'W', name: 'Wei Wei', attr: '30多歲・上班族', text: '自己覺得蠻不錯的一點是,它的味道其實很淡,不像有些痠痛貼布會有很重的藥味', date: '2026.03', color: '#9C27B0', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid02W2fKVWxL1xEHaqVpP2WxbGK8gBtyao18quDnkhzqBjxpfpVLkSfbpPJfAMSaAUr5l&id=100001466739903' }, { initial: 'フ', name: 'ファン ナwナ', attr: '40多歲・上班族', text: '貼著活動時比較不會有很明顯的存在感,難怪在日本一直都很受歡迎', date: '2026.03', color: '#3F51B5', snsUrl: 'https://www.instagram.com/p/DVnWrIfEuNa/' }, { initial: '劉', name: '劉采蓉', attr: '30多歲・留學生', text: '由第一三共研發,原本就是醫院臨床使用的成分,因此效果一直很受到信賴', date: '2026.03', color: '#009688', snsUrl: 'https://www.facebook.com/teresa.liu.1293/posts/pfbid02og544RVfHZ3gCtWegjLraKU2a2DgqECWK7tFsTUsZTdjYG7rVX4qtxRioFtwNG6Ql' }, { initial: '呂', name: '呂明怡', attr: '20多歲・上班族', text: '貼布本身也蠻薄的,黏性剛剛好,睡覺貼著也不太會掉', date: '2026.03', color: '#795548', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid0dQsg4vtbufWayhw173kesuvpV24NLheJWj8YucaZJFZHJNZ69phetJYo7jfctadol&id=100002589505586' }, { initial: '花', name: '花森米米', attr: '30多歲・自由工作者', text: '像我平常如果有腰酸、肩頸不舒服,就會貼一下放鬆舒緩', date: '2026.03', color: '#607D8B', snsUrl: 'https://www.instagram.com/p/DVsqd7Xklwp/' }, { initial: '青', name: '青醬的日本小確幸', attr: '40多歲・上班族', text: '去年因為手腕關節炎去醫院治療,那時醫生開給我的貼布就是這家品牌', date: '2026.03', color: '#4CAF50', snsUrl: 'https://www.facebook.com/chinchaninjp/posts/1719113232402175?ref=embed_post' }, { initial: 'B', name: 'BBQ in Japan', attr: '40多歲・個人創業者', text: '這個成分的貼布能真正的抑制深層的酸痛,並且不會涼到睡不著', date: '2026.03', color: '#FF9800', snsUrl: 'https://www.facebook.com/BBQinJP/posts/pfbid08dhyHMXChtkoue5gsoxytadiTidvCcHCeK2kGTsA82uxWMsHvtF1kigX1XTNDUh6l' } ], voiceCount: 10 }, { id: 33, slug: 'transino-white-c-premium', name: '傳皙諾TRANSINO WHITE C PREMIUM(トランシーノホワイトCプレミアム)', brand: '第一三共', price: 2310, priceNote: '90錠 ¥2,310 / 180錠 ¥3,520 / 270錠 ¥4,840', image: 'https://www.japankuru.com/gld-kanri/data/uploads/2026/03/01-Transino-white-C-premium-0318-scaled.jpg', label: 'type-hot', labelText: '話題', plan: 'gold', originalUrl: 'https://www.daiichisankyo-hc.co.jp/site_transino/', tip: '傳皙諾TRANSINO WHITE C PREMIUM是日本人氣美白錠,主打 L-半胱胺酸與維生素C 雙核心成分,搭配五種美肌支持維生素,輔助抑制黑色素、協助促進肌膚代謝與抗氧化。適合想改善斑點、雀斑及日曬色素沉澱者,每日依指示服用,搭配日常保養,成為美肌輕鬆補給的好選擇。', tipFull: '傳皙諾TRANSINO WHITE C PREMIUM是日本人氣美白錠,主打 L-半胱胺酸與維生素C 雙核心成分,搭配五種美肌支持維生素,輔助抑制黑色素、協助促進肌膚代謝與抗氧化。適合想改善斑點、雀斑及日曬色素沉澱者,每日依指示服用,搭配日常保養,成為美肌輕鬆補給的好選擇。\n※:使用前請詳閱說明書並依指示之適應症與用法用量使用。', column: 'https://www.japankuru.com/tw/shopping/264796/', hasVideo: false, voices: [ { initial: 'フ', name: 'ファン ナwナ', attr: '40多歲・上班族', text: '這系列在日本真的很常看到,不只是觀光客會買,其實很多日本人也會長期補充', date: '2026.03', color: '#3F51B5', snsUrl: 'https://www.instagram.com/p/DVnWrIfEuNa/' }, { initial: '劉', name: '劉采蓉', attr: '30多歲・留學生', text: '如果平常有在關注日本藥妝的人,應該對這款不陌生。', date: '2026.03', color: '#009688', snsUrl: 'https://www.facebook.com/teresa.liu.1293/posts/pfbid02og544RVfHZ3gCtWegjLraKU2a2DgqECWK7tFsTUsZTdjYG7rVX4qtxRioFtwNG6Ql' }, { initial: 'H', name: 'HimiKo', attr: '20多歲・自由工作者', text: '如果想要擁有日本女生那種透明感肌膚,除了外擦,平時內服的補給保養也是關鍵!', date: '2026.03', color: '#E91E63', snsUrl: 'https://www.instagram.com/p/DWCQnXmga10/?img_index=1' }, { initial: 'W', name: 'Wei Wei', attr: '30多歲・上班族', text: '由內而外的調理也很重要。這款算是日本開架美白錠裡面比較高階的版本', date: '2026.03', color: '#9C27B0', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid02W2fKVWxL1xEHaqVpP2WxbGK8gBtyao18quDnkhzqBjxpfpVLkSfbpPJfAMSaAUr5l&id=100001466739903' }, { initial: 'Y', name: 'Yu Shan', attr: '40多歲・上班族', text: '它含有日本醫藥級、最高規格的L-半胱胺酸(240mg),再加上2000mg的維他命C', date: '2026.03', color: '#FF5722', snsUrl: 'https://www.instagram.com/p/DWONsWREfDX/?img_index=1' }, { initial: '呂', name: '呂明怡', attr: '20多歲・上班族', text: '這款在日本算是很有名的美白維他命,維生素C含量很高', date: '2026.03', color: '#795548', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid0dQsg4vtbufWayhw173kesuvpV24NLheJWj8YucaZJFZHJNZ69phetJYo7jfctadol&id=100002589505586' }, { initial: '花', name: '花森米米', attr: '30多歲・自由工作者', text: '這款美白錠在日本很有人氣!是日本知名製藥公司第一三共的品牌', date: '2026.03', color: '#607D8B', snsUrl: 'https://www.instagram.com/p/DVsqd7Xklwp/' }, { initial: '青', name: '青醬的日本小確幸', attr: '40多歲・上班族', text: '這款也是日本藥妝店很常看到的熱銷商品', date: '2026.03', color: '#4CAF50', snsUrl: 'https://www.facebook.com/chinchaninjp/posts/1719113232402175?ref=embed_post' }, { initial: 'B', name: 'BBQ in Japan', attr: '40多歲・個人創業者', text: '效果怎樣我不太清楚,不過有買過的老婆覺得效果還可以', date: '2026.03', color: '#FF9800', snsUrl: 'https://www.facebook.com/BBQinJP/posts/pfbid08dhyHMXChtkoue5gsoxytadiTidvCcHCeK2kGTsA82uxWMsHvtF1kigX1XTNDUh6l' }, { initial: '廖', name: '廖小白', attr: '40多歲・上班族', text: '第一三共是日本藥妝大公司,對於日常生活所需的產品非常重視', date: '2026.03', color: '#2196F3', snsUrl: 'https://www.facebook.com/permalink.php?story_fbid=pfbid0uAxutCadifhTYW45h7LF21gZMF5vZ62HXLQA3W8WgpKivAEgGRXpQgrr58q8Hpwbl&id=100000142974546' } ], voiceCount: 10 } ] } }; let myList = JSON.parse(localStorage.getItem('cheGuide2026') || '[]'); let currentTab = 'cosme'; function renderTabs() { const container = document.getElementById('tabContents'); if (!container) return; // 카테고리 레이아웃으로 교체됨 container.innerHTML = ''; Object.keys(tabData).forEach(function(key) { const data = tabData[key]; const isActive = key === currentTab; let productsHtml = data.products.map(function(p) { return renderProduct(p); }).join(''); container.innerHTML += '
' + productsHtml + '
'; }); } function renderProduct(p) { const isInList = myList.includes(p.id); const isBasicPlan = p.plan === 'basic'; let avatars = ''; if (p.voices) { avatars = p.voices.slice(0, 5).map(function(v) { return '' + v.initial + ''; }).join(''); } const hasVideoClass = p.hasVideo ? 'item-thumb-video' : ''; const videoOverlay = p.hasVideo ? '
觀看影片
' : ''; const basicPlanClass = ''; let html = '
'; html += '
'; html += '' + p.name + ''; if (p.label) html += '' + p.labelText + ''; html += videoOverlay; html += '
'; if (p.hasVideo) html += ' 影片'; if (p.column) html += ' 文章'; html += '
'; html += ''; html += '
'; html += '
'; html += '

' + p.name + '

'; html += '
¥' + p.price.toLocaleString() + ''; if (p.labelText) html += '' + p.labelText + ''; html += '
'; html += '
'; html += '
'; html += ''; html += '
鄭世彬日本藥粧研究家
'; html += '
'; html += '

' + (p.tipFull || p.tip) + '

'; html += '
'; // Column preview for plans with column (standard, gold, platinum) if (p.column) { html += ''; html += '世彬老師專欄'; html += '「' + p.name + '」徹底評測!'; html += ''; html += ''; // Voice preview for plans with column - show 2 reviews on card if (p.voices && p.voices.length > 0) { html += '
'; html += '
體驗者心得
'; p.voices.slice(0, 2).forEach(function(v) { html += '
'; html += '
'; html += '
' + v.initial + '
'; html += '' + v.name + ''; html += '' + v.attr + ''; html += '
'; html += '

' + v.text + '

'; html += '
'; }); html += '
'; } } if (p.voices && p.voices.length > 0) { html += '
' + avatars + '
'; html += '體驗評價 ' + p.voiceCount + '則'; html += '
'; } // Original URL link - REMOVED from card, moved to modal html += ''; html += '
'; html += ''; html += '
'; return html; } function getSnsIcon(url) { if (!url) return ''; if (url.includes('instagram.com')) return ''; if (url.includes('facebook.com')) return ''; if (url.includes('twitter.com') || url.includes('x.com')) return ''; if (url.includes('youtube.com')) return ''; if (url.includes('tiktok.com')) return ''; return ''; } function shareItem(title) { if (navigator.share) { navigator.share({ title: title, url: location.href }); } else { navigator.clipboard.writeText(location.href); showToast('已複製連結!'); } } function handleCardClick(id, event) { openDetailModal(id); } function toggleCardExpand(btn, event) { event.stopPropagation(); const card = btn.closest('.card'); card.classList.toggle('expanded'); } function switchTab(tab) { if (!document.querySelector('.tab-btn')) return; currentTab = tab; document.querySelectorAll('.tab-btn').forEach(function(btn) { btn.classList.remove('active'); }); var activeBtn = document.querySelector('[data-tab="' + tab + '"]'); if (activeBtn) activeBtn.classList.add('active'); document.querySelectorAll('.tab-content').forEach(function(content) { content.classList.remove('active'); }); var tabEl = document.getElementById('tab-' + tab); if (tabEl) tabEl.classList.add('active'); } var KAZOKU_LIST_ITEMS = [{"id": 203, "name": "TOFUMEL-A", "image": "https://www.japankuru.com/gld-kanri/data/uploads/2026/06/tofumel.png", "price": 0, "priceText": "¥1,650", "slug": "kazoku-tomeful", "kazoku": true}, {"id": 201, "name": "大草胃腸散 顆粒(分包)", "image": "https://www.japankuru.com/gld-kanri/data/uploads/2026/06/R5_09376-scaled.jpg", "price": 0, "priceText": "22包 ¥1,400 / 46包 ¥2,400 / 88包 ¥3,900", "slug": "kazoku-okusa", "kazoku": true}, {"id": 202, "name": "救心膠囊F", "image": "https://www.japankuru.com/gld-kanri/data/uploads/2026/06/capsule-scaled.jpg", "price": 0, "priceText": "¥1,500", "slug": "kazoku-kyushin", "kazoku": true}, {"id": 204, "name": "百毒下", "image": "https://www.japankuru.com/gld-kanri/data/uploads/2026/06/100-scaled.jpg", "price": 0, "priceText": "¥3,300", "slug": "kazoku-benpi", "kazoku": true}, {"id": 205, "name": "悠斯晶 I 止癢乳膏", "image": "https://www.japankuru.com/gld-kanri/data/uploads/2026/06/yusukin.jpg", "price": 0, "priceText": "¥1,540", "slug": "kazoku-yuskin", "kazoku": true}, {"id": 206, "name": "龍角散草本無糖潤喉片", "image": "https://www.japankuru.com/gld-kanri/data/uploads/2026/06/ryukakusan-scaled.jpg", "price": 0, "priceText": "¥216", "slug": "kazoku-ryukakusan", "kazoku": true}]; function getAllProducts() { let all = []; Object.values(tabData).forEach(function(t) { all = all.concat(t.products); }); all = all.concat(KAZOKU_LIST_ITEMS); return all; } /* GA4 LP Product Simple Tracking START */ (function () { var viewedProductIds = {}; var sectionViewed = false; var kazokuModalWrapped = false; var KAZOKU_BRAND_MAP = { 201: { brand: '大草薬品', key: 'okusa' }, 202: { brand: '救心製薬', key: 'kyushin' }, 203: { brand: '福地製薬', key: 'tomeful' }, 204: { brand: '翠松堂製薬', key: 'benpi' }, 205: { brand: 'ユースキン製薬', key: 'yuskin' }, 206: { brand: '龍角散', key: 'ryukakusan' } }; function getProductById(id) { if (typeof getAllProducts !== 'function') return null; var all = getAllProducts(); var product = all.find(function (p) { return String(p.id) === String(id); }); if (!product) return null; var kazokuExtra = KAZOKU_BRAND_MAP[Number(id)] || {}; return { product_id: String(product.id), product_name: product.name || '', brand_name: product.brand || kazokuExtra.brand || '', product_slug: product.slug || kazokuExtra.key || '', product_category: product.kazoku ? 'kazoku' : '', is_kazoku: product.kazoku ? 'yes' : 'no' }; } function getKazokuProductByKey(key) { var all = typeof getAllProducts === 'function' ? getAllProducts() : []; var product = all.find(function (p) { return p && p.kazoku && String(p.slug || '') === 'kazoku-' + key; }); if (!product) return null; return getProductById(product.id); } function sendLpProductEvent(eventName, params) { try { if (typeof window.gtag !== 'function') { console.warn('[GA4 LP Product] gtag is not ready:', eventName, params); return; } var eventParams = Object.assign({ page_type: 'japan_shopping_lp', page_language: 'zh-Hant' }, params || {}); window.gtag('event', eventName, eventParams); /* 테스트 확인용 */ console.log('[GA4 LP Product]', eventName, eventParams); } catch (e) { console.warn('[GA4 LP Product] tracking error:', e); } } function wrapKazokuModalOpen() { if (kazokuModalWrapped) return; if (typeof window.openKazokuModal !== 'function') return; var originalOpenKazokuModal = window.openKazokuModal; window.openKazokuModal = function (key) { var result = originalOpenKazokuModal.apply(this, arguments); var trackingProduct = getKazokuProductByKey(key); if (trackingProduct) { window.__lpTrackingCurrentProductId = trackingProduct.product_id; sendLpProductEvent('lp_product_modal_open', Object.assign({}, trackingProduct, { click_type: 'kazoku_modal_open' })); } return result; }; kazokuModalWrapped = true; } window.sendLpProductEvent = sendLpProductEvent; window.getTrackingProductById = getProductById; /* openKazokuModal 함수가 다른 script 블록에 뒤늦게 있어도 안전하게 감싸기 */ wrapKazokuModalOpen(); var kazokuWrapTimer = setInterval(function () { wrapKazokuModalOpen(); if (kazokuModalWrapped) clearInterval(kazokuWrapTimer); }, 50); setTimeout(function () { clearInterval(kazokuWrapTimer); }, 5000); document.addEventListener('DOMContentLoaded', function () { /* 1. 家庭薬コーナー表示 */ var kazokuSection = document.getElementById('kazoku-section'); if (kazokuSection && 'IntersectionObserver' in window) { var sectionObserver = new IntersectionObserver(function (entries) { entries.forEach(function (entry) { if (sectionViewed) return; if (entry.isIntersecting && entry.intersectionRatio >= 0.5) { sectionViewed = true; sendLpProductEvent('kazoku_section_view', { section_name: 'kazoku', view_type: 'section_view' }); sectionObserver.unobserve(entry.target); } }); }, { threshold: [0.5] }); sectionObserver.observe(kazokuSection); } /* 2. 全商品カード表示 */ if ('IntersectionObserver' in window) { var productObserver = new IntersectionObserver(function (entries) { entries.forEach(function (entry) { if (!entry.isIntersecting || entry.intersectionRatio < 0.5) return; var card = entry.target; var productId = card.getAttribute('data-id'); var product = getProductById(productId); if (!product || viewedProductIds[productId]) return; viewedProductIds[productId] = true; sendLpProductEvent('lp_product_view', Object.assign({}, product, { view_type: 'product_card_view' })); productObserver.unobserve(card); }); }, { threshold: [0.5] }); document.querySelectorAll('.card[data-id], .item-card[data-id], .kazoku-product-card[data-id]').forEach(function (card) { productObserver.observe(card); }); } /* 3. 全商品カードクリック */ document.querySelectorAll('.card[data-id], .item-card[data-id], .kazoku-product-card[data-id]').forEach(function (card) { card.addEventListener('click', function () { var productId = card.getAttribute('data-id'); var product = getProductById(productId); if (!product) return; window.__lpTrackingCurrentProductId = productId; sendLpProductEvent('lp_product_click', Object.assign({}, product, { click_type: 'product_card_click' })); }); }); /* 4. モーダル内リンククリック */ document.addEventListener('click', function (e) { var link = e.target.closest('a'); if (!link) return; var href = link.getAttribute('href') || ''; if (!href || href === '#') return; var productId = window.__lpTrackingCurrentProductId || ''; /* currentModalId / currentBsId / currentKazokuId can be declared with let in the original LP script, so an external script may not be able to read them from window. Use our own stored product id first, then fall back to the URL product parameter. */ if (!productId) { var params = new URLSearchParams(window.location.search); var productSlug = params.get('product'); if (productSlug && typeof getAllProducts === 'function') { var allProducts = getAllProducts(); var matchedProduct = allProducts.find(function (p) { return p.slug === productSlug; }); if (matchedProduct) { productId = matchedProduct.id; } } } if (!productId) return; var product = getProductById(productId); if (!product) return; var linkType = 'modal_link'; if ( link.id === 'modalOfficialBtn' || link.id === 'bsOfficialBtn' || link.id === 'kzBtnOfficial' || link.textContent.indexOf('官方') >= 0 ) { linkType = 'official_site'; } else if ( link.id === 'modalCta' || link.id === 'bsColumn' || link.id === 'kzBtnArticle' || link.textContent.indexOf('文章') >= 0 ) { linkType = 'related_article'; } else if ( href.indexOf('instagram.com') >= 0 || href.indexOf('facebook.com') >= 0 || href.indexOf('youtube.com') >= 0 ) { linkType = 'sns_post'; } sendLpProductEvent('lp_product_link_click', Object.assign({}, product, { link_url: href, click_type: linkType })); }, true); }); })(); /* GA4 LP Product Simple Tracking END */ function scrollToProduct(id) { // 상품 카드로 스크롤 → 하이라이트 var cardEl = document.querySelector('.card[data-id="' + id + '"]'); if (cardEl) { var offset = 100; var top = cardEl.getBoundingClientRect().top + window.pageYOffset - offset; window.scrollTo({ top: top, behavior: 'smooth' }); // 하이라이트 cardEl.classList.add('card-highlight'); setTimeout(function() { cardEl.classList.remove('card-highlight'); }, 2000); } else { // 카드 없으면 모달 (플레이스홀더 등) openDetailModal(id); } } function openDetailModal(id) { const all = getAllProducts(); const p = all.find(function(x) { return x.id === id; }); if (!p) return; if (typeof sendLpProductEvent === 'function') { var trackingProduct = typeof getTrackingProductById === 'function' ? getTrackingProductById(id) : null; if (trackingProduct) { window.__lpTrackingCurrentProductId = trackingProduct.product_id; sendLpProductEvent('lp_product_modal_open', Object.assign({}, trackingProduct, { click_type: 'modal_open' })); } } // GA4 product click event try { if (typeof gtag === 'function') { gtag('event', 'product_click', { product_id: p.id, product_name: p.name, product_brand: p.brand || '', product_slug: p.slug || '' }); } } catch(e) {} // Set URL parameter with slug const url = new URL(window.location.href); url.searchParams.set('product', p.slug); try { window.history.replaceState({}, '', url); } catch(e) {} isMobile() ? openBottomSheet(p) : openPcModal(p); } function openPcModal(p) { const modal = document.getElementById('detailModal'); const visual = document.getElementById('modalVisual'); if (p.hasVideo && p.videoId) { visual.classList.add('has-video'); visual.innerHTML = ''; } else { visual.classList.remove('has-video'); visual.innerHTML = '' + p.name + ''; } // 카드 앞면 .ci에도 has-video 클래스 토글 const cardEl = document.querySelector('.card[data-id="' + p.id + '"]'); if (cardEl) { const ciEl = cardEl.querySelector('.ci'); if (ciEl) { if (p.hasVideo) ciEl.classList.add('has-video'); else ciEl.classList.remove('has-video'); } } document.getElementById('modalName').textContent = p.name; document.getElementById('modalPrice').textContent = '¥' + p.price.toLocaleString(); const modalTipText = p.tipFull || p.tip || ''; const modalDisc = '※:使用前請詳閱說明書並依指示之適應症與用法用量使用。'; document.getElementById('modalTip').innerHTML = modalTipText.includes('※') ? modalTipText : modalTipText + '
' + modalDisc + ''; const voicesDiv = document.getElementById('modalVoices'); const voiceList = document.getElementById('modalVoiceList'); if (p.voices && p.voices.length > 0) { voicesDiv.style.display = 'block'; document.getElementById('modalVoiceCount').textContent = p.voiceCount + '則'; voiceList.innerHTML = p.voices.map(function(v) { return ''; }).join(''); } else { voicesDiv.style.display = 'none'; } const ctaBtn = document.getElementById('modalCta'); if (p.column) { ctaBtn.href = p.column; ctaBtn.style.display = 'block'; } else { ctaBtn.style.display = 'none'; } // Set official URL const officialBtn = document.getElementById('modalOfficialBtn'); if (p.originalUrl) { officialBtn.href = p.originalUrl; officialBtn.style.display = 'flex'; } else { officialBtn.style.display = 'none'; } currentModalId = p.id; updateModalHeartBtn(); modal.classList.add('active'); } function openBottomSheet(p) { const visual = document.getElementById('bsVisual'); // 영상 없는 사진 전용 상품은 이미지 영역 축소 const compactIds = [4, 5, 23, 24, 25, 32, 33]; if (compactIds.includes(p.id)) { visual.classList.add('compact-visual'); } else { visual.classList.remove('compact-visual'); } if (p.hasVideo && p.videoId) { visual.classList.add('has-video'); visual.innerHTML = ''; } else { visual.classList.remove('has-video'); visual.innerHTML = '' + p.name + ''; } document.getElementById('bsName').textContent = p.name; document.getElementById('bsPrice').textContent = '¥' + p.price.toLocaleString(); const tipText = p.tipFull || p.tip || ''; const bsDisc = '※:使用前請詳閱說明書並依指示之適應症與用法用量使用。'; document.getElementById('bsTip').innerHTML = tipText.includes('※') ? tipText : tipText + '
' + bsDisc + ''; const columnLink = document.getElementById('bsColumn'); if (p.column) { columnLink.href = p.column; columnLink.style.display = 'flex'; document.getElementById('bsColumnTitle').textContent = p.name + '的詳細解說'; } else { columnLink.style.display = 'none'; } const voicesDiv = document.getElementById('bsVoices'); const voiceList = document.getElementById('bsVoiceList'); if (p.voices && p.voices.length > 0) { voicesDiv.style.display = 'block'; document.getElementById('bsVoiceCount').textContent = p.voiceCount + '則'; voiceList.innerHTML = p.voices.map(function(v) { return '
' + v.initial + '

' + v.name + '

' + v.attr + '

' + v.text + '

'; }).join(''); } else { voicesDiv.style.display = 'none'; } // Set official URL const officialBtn = document.getElementById('bsOfficialBtn'); if (p.originalUrl) { officialBtn.href = p.originalUrl; officialBtn.style.display = 'flex'; } else { officialBtn.style.display = 'none'; } currentBsId = p.id; updateBsHeartBtn(); document.getElementById('bsOverlay').classList.add('is-open'); document.body.style.overflow = 'hidden'; } function closeBottomSheet() { const id = currentBsId; // Clear URL parameter const url = new URL(window.location.href); url.searchParams.delete('product'); try { window.history.replaceState({}, '', url); } catch(e) {} document.getElementById('bsOverlay').classList.remove('is-open'); document.body.style.overflow = ''; currentBsId = null; // 닫은 후 해당 카드의 카테고리 섹션으로 스크롤 복귀 if (id) { setTimeout(function() { var cardEl = document.querySelector('.card[data-id="' + id + '"]'); if (cardEl) { var catSection = null; // 카드의 상위 cat-hd 섹션 찾기 (이전 형제 순회) var el = cardEl; while (el && el.parentElement) { el = el.parentElement; var prevCat = el.previousElementSibling; while (prevCat) { if (prevCat.classList && prevCat.classList.contains('cat-hd')) { catSection = prevCat; break; } prevCat = prevCat.previousElementSibling; } if (catSection) break; } var target = catSection || cardEl; var offset = 80; var top = target.getBoundingClientRect().top + window.pageYOffset - offset; window.scrollTo({ top: top, behavior: 'smooth' }); } else { // 동적 카드(탭 렌더링)인 경우 products-section으로 var sec = document.getElementById('products-section'); if (sec) sec.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }, 150); } } function updateBsHeartBtn() { const btn = document.getElementById('bsHeartBtn'); const isInList = myList.includes(currentBsId); btn.classList.toggle('active', isInList); btn.innerHTML = isInList ? '' : ''; } function toggleListFromBottomSheet() { if (!currentBsId) return; toggleList(currentBsId); updateBsHeartBtn(); } function shareToLineFromBS() { if (!currentBsId) return; const all = getAllProducts(); const p = all.find(function(x) { return x.id === currentBsId; }); if (p) { const productUrl = window.location.origin + window.location.pathname + '?product=' + p.slug; const text = encodeURIComponent(p.name + '\n¥' + p.price.toLocaleString() + '\n\n' + productUrl); window.open('https://line.me/R/msg/text/?' + text, '_blank'); } } function shareProductFromBS() { if (!currentBsId) return; const all = getAllProducts(); const p = all.find(function(x) { return x.id === currentBsId; }); if (p) shareItem(p.name); } function closeDetailModal() { // Clear URL parameter const url = new URL(window.location.href); url.searchParams.delete('product'); try { window.history.replaceState({}, '', url); } catch(e) {} document.getElementById('detailModal').classList.remove('active'); currentModalId = null; } function updateModalHeartBtn() { const btn = document.getElementById('modalHeartBtn'); const isInList = myList.includes(currentModalId); btn.classList.toggle('active', isInList); btn.innerHTML = isInList ? '' : ''; } function shareToLineProduct() { if (!currentModalId) return; const all = getAllProducts(); const p = all.find(function(x) { return x.id === currentModalId; }); if (p) { const productUrl = window.location.origin + window.location.pathname + '?product=' + p.slug; const text = encodeURIComponent(p.name + '\n¥' + p.price.toLocaleString() + '\n\n' + productUrl); window.open('https://line.me/R/msg/text/?' + text, '_blank'); } } function toggleList(id, event) { if (event) { event.stopPropagation(); const btn = event.currentTarget; const icon = btn.querySelector('i'); if (myList.includes(id)) { myList = myList.filter(function(x) { return x !== id; }); btn.classList.remove('active'); icon.classList.remove('fas'); icon.classList.add('far'); showToast('已從收藏中移除'); } else { myList.push(id); btn.classList.add('active'); icon.classList.remove('far'); icon.classList.add('fas'); btn.style.transform = 'scale(1.3)'; setTimeout(function() { btn.style.transform = 'scale(1)'; }, 200); showToast('已加入清單!'); } localStorage.setItem('cheGuide2026', JSON.stringify(myList)); updateCount(); initCardHeartButtons(); // 카드 하트 상태 갱신 } else { if (myList.includes(id)) { myList = myList.filter(function(x) { return x !== id; }); } else { myList.push(id); showToast('已加入清單'); } localStorage.setItem('cheGuide2026', JSON.stringify(myList)); updateCount(); initCardHeartButtons(); // 카드 하트 상태 갱신 } } function toggleListFromModal() { if (!currentModalId) return; toggleList(currentModalId); updateModalHeartBtn(); } function updateCount() { document.getElementById('listCount').textContent = myList.length; } function openListModal() { const modal = document.getElementById('listModal'); const container = document.getElementById('listItems'); const footer = document.getElementById('listFooter'); const screenshotTip = document.getElementById('listScreenshotTip'); const all = getAllProducts(); if (myList.length === 0) { container.innerHTML = '

尚未加入任何商品

'; footer.style.display = 'none'; screenshotTip.style.display = 'none'; } else { container.innerHTML = myList.map(function(id) { const p = all.find(function(x) { return x.id === id; }); if (!p) return ''; return '

' + p.name + '

' + (p.priceText || ('¥' + p.price.toLocaleString())) + '

'; }).join(''); footer.style.display = 'flex'; screenshotTip.style.display = 'flex'; } modal.classList.add('active'); } function closeListModal() { document.getElementById('listModal').classList.remove('active'); } function removeFromList(id) { myList = myList.filter(function(x) { return x !== id; }); localStorage.setItem('cheGuide2026', JSON.stringify(myList)); updateCount(); renderTabs(); openListModal(); } function shareToLine() { const all = getAllProducts(); const items = myList.map(function(id) { const p = all.find(function(x) { return x.id === id; }); return p ? '・' + p.name + ' ' + (p.priceText || ('¥' + p.price.toLocaleString())) : ''; }).filter(Boolean).join('\n'); const text = encodeURIComponent('【世彬老師的推薦2026春】我的購物清單\n\n' + items + '\n\n詳情請看:' + location.href); window.open('https://line.me/R/msg/text/?' + text, '_blank'); } function copyUrlFromModal() { if (!currentModalId) return; const all = getAllProducts(); const p = all.find(function(x) { return x.id === currentModalId; }); if (!p) return; const productUrl = window.location.origin + window.location.pathname + '?product=' + p.slug; navigator.clipboard.writeText(productUrl).then(function() { showToast('已複製商品網址!'); }).catch(function() { showToast('複製失敗,請重試'); }); } function copyUrlFromBS() { if (!currentBsId) return; const all = getAllProducts(); const p = all.find(function(x) { return x.id === currentBsId; }); if (!p) return; const productUrl = window.location.origin + window.location.pathname + '?product=' + p.slug; navigator.clipboard.writeText(productUrl).then(function() { showToast('已複製商品網址!'); }).catch(function() { showToast('複製失敗,請重試'); }); } function copyUrl() { navigator.clipboard.writeText(location.href); showToast('已複製網址!'); } function copyCode(code) { navigator.clipboard.writeText(code); showToast('已複製優惠碼!'); } function showToast(msg) { const toast = document.getElementById('toast'); document.getElementById('toastText').textContent = msg; toast.classList.add('show'); setTimeout(function() { toast.classList.remove('show'); }, 2500); } // Tab button events document.querySelectorAll('.tab-btn').forEach(function(btn) { btn.addEventListener('click', function() { switchTab(btn.dataset.tab); }); }); // Store tab events document.querySelectorAll('.store-tab').forEach(function(btn) { btn.addEventListener('click', function() { document.querySelectorAll('.store-tab').forEach(function(b) { b.classList.remove('active'); }); btn.classList.add('active'); const store = btn.dataset.store; document.querySelectorAll('.store-panel').forEach(function(p) { p.classList.remove('active'); }); document.getElementById('store-' + store).classList.add('active'); }); }); // Modal outside click close document.getElementById('detailModal').addEventListener('click', function(e) { if (e.target === document.getElementById('detailModal')) closeDetailModal(); }); document.getElementById('listModal').addEventListener('click', function(e) { if (e.target === document.getElementById('listModal')) closeListModal(); }); // Initialize renderTabs(); updateCount(); // DOM이 완전히 준비된 후 배지 삽입 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function() { initCardHeartButtons(); initCardVideoOverlays(); updateCardVpSections(); }); } else { initCardHeartButtons(); initCardVideoOverlays(); } // 카드 앞면 하트(즐겨찾기) 버튼 동적 삽입 function initCardHeartButtons() { document.querySelectorAll('.card[data-id], .kazoku-product-card[data-id]').forEach(function(card) { const id = parseInt(card.getAttribute('data-id')); const ciEl = card.querySelector('.ci') || card.querySelector('.ci-h') || card.querySelector('.kazoku-card-photo'); if (!ciEl) return; // 기존 버튼 제거 후 재생성 (상태 갱신용) const existing = ciEl.querySelector('.btn-like-float'); if (existing) existing.remove(); const btn = document.createElement('button'); const isActive = myList.includes(id); btn.className = 'btn-like-float' + (isActive ? ' active' : ''); btn.innerHTML = ''; btn.addEventListener('click', function(e) { toggleList(id, e); }); ciEl.appendChild(btn); }); } // 카드 영상 배지 — A안(이미지 하단 좌측 pill) + C안(footer chip) // 카드 앞면 vp-section을 tabData 실제 데이터로 갱신 function updateCardVpSections() { var all = getAllProducts(); all.forEach(function(p) { var cardEl = document.querySelector('.card[data-id="' + p.id + '"]'); if (!cardEl) return; var vpEl = cardEl.querySelector('.vp-section'); if (!vpEl) return; if (!p.voices || p.voices.length === 0) { vpEl.style.display = 'none'; return; } // 앞 2건만 // ● 더미 데이터면 vp-section 숨김 var realVoices = p.voices.filter(function(v) { return v.text && !v.text.includes('●'); }); if (realVoices.length === 0) { vpEl.style.display = 'none'; return; } var cards = realVoices.slice(0, 2).map(function(v) { var icon = v.snsUrl ? ('' + getSnsIcon(v.snsUrl) + '') : ''; return '
' + '
' + '
' + v.initial + '
' + '' + v.name + '' + '' + v.attr + '' + icon + '
' + '

' + v.text + '

' + '
'; }).join(''); vpEl.innerHTML = '
體驗者心得
' + cards; }); } function initCardVideoOverlays() { const all = getAllProducts(); all.forEach(function(p) { if (!p.hasVideo || !p.videoId) return; const cardEl = document.querySelector('.card[data-id="' + p.id + '"]'); if (!cardEl) return; // A안: .ci 하단 좌측 pill const ciEl = cardEl.querySelector('.ci') || cardEl.querySelector('.ci-h'); if (ciEl && !ciEl.querySelector('.video-pill')) { ciEl.style.position = 'relative'; const pill = document.createElement('div'); pill.className = 'video-pill'; pill.innerHTML = ' 影片'; ciEl.appendChild(pill); } // cf 영역 vid-chip 제거 — 썸네일 pill만 사용 }); } // 필터바 active 스크롤 연동 (function() { var catIds = ['cat1','cat2','cat3','cat4']; var fbBtns = document.querySelectorAll('.cat-fb'); if (!fbBtns.length) return; var observer = new IntersectionObserver(function(entries) { entries.forEach(function(entry) { if (entry.isIntersecting) { var id = entry.target.id; fbBtns.forEach(function(btn) { btn.classList.remove('active'); }); var idx = catIds.indexOf(id); if (idx >= 0 && fbBtns[idx + 1]) fbBtns[idx + 1].classList.add('active'); } }); }, { rootMargin: '-20% 0px -60% 0px', threshold: 0 }); catIds.forEach(function(id) { var el = document.getElementById(id); if (el) observer.observe(el); }); })(); // Scroll-triggered fade-in animations const observerOptions = { threshold: 0.1, rootMargin: '0px 0px -40px 0px' }; const fadeObserver = new IntersectionObserver(function(entries) { entries.forEach(function(entry) { if (entry.isIntersecting) { entry.target.classList.add('is-visible'); fadeObserver.unobserve(entry.target); } }); }, observerOptions); document.querySelectorAll('.split-banner-section, .featured-section, .products-section, .sakura-section, .store-guide, .outro-section').forEach(function(el) { el.classList.add('fade-section'); fadeObserver.observe(el); }); // Check URL parameter for direct product link (function() { const params = new URLSearchParams(window.location.search); const productSlug = params.get('product'); if (productSlug) { setTimeout(function() { // 家庭薬 전용: kazoku- 슬러그면 가정약 모달 오픈 if (productSlug.indexOf('kazoku-') === 0) { var kkey = productSlug.replace('kazoku-', ''); if (typeof openKazokuModal === 'function') { openKazokuModal(kkey); return; } } const all = getAllProducts(); const p = all.find(function(x) { return x.slug === productSlug; }); if (p) openDetailModal(p.id); }, 300); } })(); // Hero photo + speech slideshow (function() { var current = 0; var total = 3; var interval = 4000; function goToSlide(n) { document.querySelectorAll('.tei-slide').forEach(function(el) { el.classList.remove('active'); }); document.querySelectorAll('.speech-slide').forEach(function(el) { el.classList.remove('active'); }); document.querySelectorAll('.tei-dot').forEach(function(el) { el.classList.remove('active'); }); document.querySelectorAll('[data-slide="' + n + '"]').forEach(function(el) { el.classList.add('active'); }); current = n; } // Auto rotate setInterval(function() { goToSlide((current + 1) % total); }, interval); // Click dots document.querySelectorAll('.tei-dot').forEach(function(dot) { dot.addEventListener('click', function() { goToSlide(parseInt(this.getAttribute('data-slide'))); }); }); })(); // Onboarding tooltip - show once for first-time visitors (function() { if (localStorage.getItem('cheOnboarded')) return; var tip = document.getElementById('onboardingTip'); var shown = false; var observer = new IntersectionObserver(function(entries) { if (entries[0].isIntersecting && !shown) { shown = true; setTimeout(function() { tip.classList.add('show'); }, 1500); // Auto-hide after 8 seconds setTimeout(function() { closeOnboarding(); }, 9500); } }, { threshold: 0.3 }); var productsSection = document.querySelector('.products-section'); if (productsSection) observer.observe(productsSection); })(); function closeOnboarding() { var tip = document.getElementById('onboardingTip'); if (tip) { tip.style.opacity = '0'; tip.style.transition = 'opacity 0.3s'; setTimeout(function() { tip.style.display = 'none'; }, 300); } localStorage.setItem('cheOnboarded', '1'); } /* === Sakura Date Matcher + Seasonal Switch === */ (function() { var skCities = [ { name:'名古屋', bloom:'3/17', full:'3/30', fall:'4/3', snow:'4/6', img:'', tip:'', sensei:'名古屋的櫻花已進入尾聲,吹雪景色也非常美!鶴舞公園的花瓣地毯一定要看 🌸' }, { name:'東京', bloom:'3/19', full:'3/28', fall:'4/1', snow:'4/4', img:'', tip:'', sensei:'東京今年3/19開花、3/28滿開!目前進入吹雪階段,上野公園的花瓣飛舞也很夢幻 💨' }, { name:'福岡', bloom:'3/24', full:'4/3', fall:'4/7', snow:'4/10', img:'', tip:'', sensei:'福岡4/3滿開!現在飄落中,舞鶴公園的花瓣地毯超美,搭配太宰府一日遊剛剛好 🚃' }, { name:'大阪', bloom:'3/26', full:'4/3', fall:'4/7', snow:'4/10', img:'', tip:'', sensei:'大阪4/3滿開!大阪城公園現在飄落中,花瓣飛舞的景色別有一番風情 🏯' }, { name:'京都', bloom:'3/23', full:'3/30', fall:'4/3', snow:'4/6', img:'', tip:'', sensei:'京都今年3/30滿開已結束。4月初哲學之道的吹雪景色超美,還有機會欣賞到最後的浪漫 🌸' }, { name:'仙台', bloom:'3/31', full:'4/4', fall:'4/8', snow:'4/11', img:'', tip:'', sensei:'仙台現在正值滿開!白石川沿岸8公里的一目千本櫻超壯觀,4/8前是最佳賞花時機 🚂' }, { name:'札幌', bloom:'4/20', full:'4/25', fall:'4/29', snow:'5/2', img:'', tip:'', sensei:'北海道今年比平年早,4/20頃開花預定!圓山公園可以邊烤肉邊賞櫻,完全沒有花粉困擾 🦌' }, { name:'沖繩', bloom:'1/15', full:'2/1', fall:'2/8', snow:'2/12', img:'', tip:'', sensei:'沖繩的寒緋櫻是深粉色,和本州染井吉野完全不同。1~2月在今帰仁城跡就能看到!今年已結束' } ]; function skParseDate(str, yr) { yr = yr || 2026; var p = str.split('/'); return new Date(yr, parseInt(p[0])-1, parseInt(p[1])); } /* --- Seasonal Auto-Switch --- */ var now = new Date(); var heroEl = document.getElementById('sakura-section'); var detailEl = document.querySelector('.sakura-section'); var senseiText = document.getElementById('skSenseiText'); var phase1End = new Date(2026, 3, 15); // 4/15 var phase2End = new Date(2026, 4, 10); // 5/10 if (now > phase2End) { // Phase 3: season over — hide hero, simplify detail section if (heroEl) heroEl.style.display = 'none'; if (detailEl) { var inner = detailEl.querySelector('.sakura-inner'); if (inner) { inner.innerHTML = '
' + '
🌿
' + '
2026年的櫻花季已結束
' + '

感謝大家今年的賞櫻!
接下來進入夏季,別忘了防曬和消暑對策商品~

' + '
' + '世彬老師' + '

櫻花季結束了,但夏天的日本也很精彩!防曬、止汗、防蚊⋯⋯我的推薦商品都在上面,記得看看唷 ☀️

' + '
' + '
'; } } } else if (now > phase1End && senseiText) { // Phase 2: tokyo/osaka ended, sapporo highlight senseiText.innerHTML = '東京・大阪的櫻花差不多結束了,但札幌現在正是滿開!
5月去北海道完全沒有花粉困擾,推薦給怕花粉的朋友 🌸'; var cityEls = document.querySelectorAll('.sakura-city'); cityEls.forEach(function(el) { el.classList.remove('active'); if (el.querySelector('.name') && el.querySelector('.name').textContent === '札幌') { el.classList.add('active'); } }); } // Phase 1 (default): as-is /* --- Date Matcher --- */ var _skDateBtn=document.getElementById('skDateBtn'); if(_skDateBtn) _skDateBtn.addEventListener('click', function() { var sv = document.getElementById('skTravelStart').value; var ev = document.getElementById('skTravelEnd').value; if (!sv || !ev) return; var start = new Date(sv), end = new Date(ev); var best = null, bestScore = -999, bestStage = ''; skCities.forEach(function(c) { var bloom = skParseDate(c.bloom), full = skParseDate(c.full); var fall = skParseDate(c.fall), snow = skParseDate(c.snow); var os = new Date(Math.max(start, bloom)); var oe = new Date(Math.min(end, snow)); var overlap = (oe - os) / 864e5; if (overlap > 0) { var mid = new Date((start.getTime() + end.getTime()) / 2); var dist = Math.abs(mid - full) / 864e5; var score = overlap * 10 - dist; if (score > bestScore) { bestScore = score; best = c; bestStage = mid < bloom ? 'before' : mid < full ? 'bloom' : mid < fall ? 'full' : mid < snow ? 'fall' : 'snow'; } } }); if (!best) { alert('該期間沒有適合賞櫻的城市,建議調整日期!'); return; } var info = { before: { icon:'🌱', badge:'即將開花', status:'還在含苞待放中!', idx:-1 }, bloom: { icon:'🌸', badge:'開花中', status:'開花中!已經可以賞櫻了', idx:0 }, full: { icon:'🌺', badge:'滿開', status:'滿開!最佳觀賞時期 🎉', idx:1 }, fall: { icon:'🍃', badge:'開始飄落', status:'花瓣飄落中,別有一番風味', idx:2 }, snow: { icon:'💨', badge:'櫻花吹雪', status:'櫻花吹雪!最後的浪漫', idx:3 } }[bestStage]; // Fill result document.getElementById('skResultIcon').textContent = info.icon; document.getElementById('skResultBadge').textContent = info.badge; document.getElementById('skResultCity').textContent = best.name; document.getElementById('skResultStatus').textContent = info.status; // Fill dates document.getElementById('skDate0').textContent = best.bloom; document.getElementById('skDate1').textContent = best.full; document.getElementById('skDate2').textContent = best.fall; document.getElementById('skDate3').textContent = best.snow; // Progress bar state var stages = ['skStage0','skStage1','skStage2','skStage3']; stages.forEach(function(id, i) { var el = document.getElementById(id); el.classList.remove('is-past','is-current','is-future'); if (i < info.idx) el.classList.add('is-past'); else if (i === info.idx) el.classList.add('is-current'); else el.classList.add('is-future'); }); // Progress fill width var fillPct = info.idx < 0 ? 0 : (info.idx / 3) * 100; document.getElementById('skProgressFill').style.width = fillPct + '%'; // Sensei comment // Sensei comment now in speech bubble above photo // Update speech bubble var speechText = best.sensei || '你的旅程期間可以賞櫻!'; document.getElementById('skSpeechText').textContent = speechText; var speech = document.getElementById('skSpeech'); speech.style.animation = 'none'; speech.offsetHeight; // trigger reflow speech.style.animation = 'skSpeechIn 0.4s ease-out'; // Show var result = document.getElementById('skResultInline'); result.classList.add('is-visible'); document.getElementById('sakura-section').scrollIntoView({ behavior: 'smooth', block: 'start' }); // Sync highlight to 4-stage photo cards below document.querySelectorAll('.sakura-stage').forEach(function(el) { el.classList.remove('is-highlight'); }); var targetIdx = info.idx; var targetCard = document.querySelector('.sakura-stage[data-stage-idx="' + targetIdx + '"]'); if (targetCard) { targetCard.classList.add('is-highlight'); setTimeout(function() { targetCard.scrollIntoView({ behavior: 'smooth', block: 'center' }); }, 600); } }); // Retry var _skRetry=document.getElementById('skResultRetry'); if(_skRetry) _skRetry.addEventListener('click', function() { document.getElementById('skResultInline').classList.remove('is-visible'); document.querySelectorAll('.sakura-stage').forEach(function(el) { el.classList.remove('is-highlight'); }); document.getElementById('skSpeechText').textContent = '日期輸入好了嗎?我來幫你找最適合的城市!🌿'; document.getElementById('skTravelStart').focus(); }); // Store Guide Tabs & Scroll Arrows // Store scroll arrows (function() { var scroller = document.getElementById('sgStoresScroll'); var leftBtn = document.getElementById('sgArrowL'); var rightBtn = document.getElementById('sgArrowR'); if (scroller && leftBtn && rightBtn) { var scrollAmt = 314; // card width + gap leftBtn.addEventListener('click', function() { scroller.scrollBy({ left: -scrollAmt, behavior: 'smooth' }); }); rightBtn.addEventListener('click', function() { scroller.scrollBy({ left: scrollAmt, behavior: 'smooth' }); }); } })(); document.querySelectorAll('.sg-tab').forEach(function(tab) { tab.addEventListener('click', function() { document.querySelectorAll('.sg-tab').forEach(function(t) { t.classList.remove('is-active'); }); document.querySelectorAll('.sg-panel').forEach(function(p) { p.classList.remove('is-active'); }); this.classList.add('is-active'); var target = document.getElementById('sg-' + this.dataset.sg); if (target) target.classList.add('is-active'); }); }); // Section Nav scroll spy (mobile + PC) (function() { var mobileItems = document.querySelectorAll('.section-nav-item'); var pcItems = document.querySelectorAll('.header-nav-item'); var allNavItems = document.querySelectorAll('.section-nav-item, .header-nav-item'); var sections = []; mobileItems.forEach(function(item) { var id = item.getAttribute('href').replace('#', ''); var el = document.getElementById(id); if (el) sections.push({ id: id, el: el }); }); function updateNav() { var scrollY = window.scrollY + 100; var currentId = null; sections.forEach(function(s) { if (s.el.offsetTop <= scrollY) currentId = s.id; }); allNavItems.forEach(function(n) { n.classList.remove('is-active'); }); if (currentId) { allNavItems.forEach(function(n) { if (n.getAttribute('href') === '#' + currentId) n.classList.add('is-active'); }); var nav = document.getElementById('sectionNav'); var activeM = nav ? nav.querySelector('.is-active') : null; if (activeM && nav) { var left = activeM.offsetLeft - nav.offsetWidth / 2 + activeM.offsetWidth / 2; nav.scrollTo({ left: left, behavior: 'smooth' }); } } } window.addEventListener('scroll', updateNav, { passive: true }); updateNav(); allNavItems.forEach(function(item) { item.addEventListener('click', function(e) { e.preventDefault(); var id = this.getAttribute('href').replace('#', ''); var el = document.getElementById(id); if (el) { var top = el.offsetTop - 90; window.scrollTo({ top: top, behavior: 'smooth' }); } }); }); })(); })();