{"title":"All Products","description":null,"products":[{"product_id":"ttbici-a-line-lightweight-jacket-black","title":"a Line Lightweight Jacket \/ Black","description":"The ttbici a Line Lightweight Jacket combines ultralight materials with exceptional wind resistance. Featuring a DWR Coating, it effectively repels water and moisture, providing reliable protection against unpredictable weather conditions.\r\n\u003cbr\u003e\u003cbr\u003e\r\nWith a self-packable design for easy portability, this jacket ensures optimal comfort and protection against sudden rain or strong winds—allowing you to ride with confidence, no matter the conditions.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', chest: '80–88', waist: '68–76', hip: '82–90' },\r\n\t\t\t\t{ size: 'S', chest: '85–93', waist: '73–81', hip: '87–95' },\r\n\t\t\t\t{ size: 'M', chest: '89–97', waist: '77–85', hip: '91–99' },\r\n\t\t\t\t{ size: 'L', chest: '93–101', waist: '81–89', hip: '95–103' },\r\n\t\t\t\t{ size: 'XL', chest: '97–105', waist: '85–93', hip: '99–107' },\r\n\t\t\t\t{ size: '2XL', chest: '101–109', waist: '89–97', hip: '103–111' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', chest: '32–35', waist: '27–30', hip: '32–35' },\r\n\t\t\t\t{ size: 'S', chest: '34–37', waist: '29–32', hip: '34–37' },\r\n\t\t\t\t{ size: 'M', chest: '35–38', waist: '30–33', hip: '36–39' },\r\n\t\t\t\t{ size: 'L', chest: '37–40', waist: '32–35', hip: '37–40' },\r\n\t\t\t\t{ size: 'XL', chest: '38–41', waist: '34–37', hip: '39–42' },\r\n\t\t\t\t{ size: '2XL', chest: '40–43', waist: '35–38', hip: '41–44' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n\t`;\r\n\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n          \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n          \u003cdiv class=\"toggle-wrapper\"\u003e\r\n            \u003cspan\u003eCM\u003c\/span\u003e\r\n            \u003clabel class=\"toggle\"\u003e\r\n              \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n              \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n            \u003c\/label\u003e\r\n            \u003cspan\u003eINCHES\u003c\/span\u003e\r\n          \u003c\/div\u003e\r\n          \u003ctable\u003e\r\n            \u003cthead\u003e\r\n              \u003ctr\u003e\r\n                \u003cth\u003eSIZE\u003c\/th\u003e\r\n                \u003cth id=\"chestHeader\"\u003eCHEST\u003c\/th\u003e\r\n                \u003cth id=\"waistHeader\"\u003eWAIST\u003c\/th\u003e\r\n                \u003cth id=\"hipHeader\"\u003eHIP\u003c\/th\u003e\r\n              \u003c\/tr\u003e\r\n            \u003c\/thead\u003e\r\n            \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n          \u003c\/table\u003e\r\n        `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n      \u003ctr\u003e\r\n        \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.chest}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.waist}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.hip}\u003c\/td\u003e\r\n      \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48067794731232,"sku":"B6TC-A06-BK0XSN","price":3880.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48067794764000,"sku":"B6TC-A06-BK00SN","price":3880.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48067794796768,"sku":"B6TC-A06-BK00MN","price":3880.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48067794829536,"sku":"B6TC-A06-BK00LN","price":3880.0,"currency_code":"TWD","in_stock":true},{"title":"XL","offer_id":48067794862304,"sku":"B6TC-A06-BK0XLN","price":3880.0,"currency_code":"TWD","in_stock":false},{"title":"2XL","offer_id":48067794895072,"sku":"B6TC-A06-BK2XLN","price":3880.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05803_1.jpg?v=1761635446"},{"product_id":"ttbici-a-line-lightweight-jacket-grey","title":"a Line Lightweight Jacket \/ Grey","description":"The ttbici a Line Lightweight Jacket combines ultralight materials with exceptional wind resistance. Featuring a DWR Coating, it effectively repels water and moisture, providing reliable protection against unpredictable weather conditions.\r\n\u003cbr\u003e\u003cbr\u003e\r\nWith a self-packable design for easy portability, this jacket ensures optimal comfort and protection against sudden rain or strong winds—allowing you to ride with confidence, no matter the conditions.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', chest: '80–88', waist: '68–76', hip: '82–90' },\r\n\t\t\t\t{ size: 'S', chest: '85–93', waist: '73–81', hip: '87–95' },\r\n\t\t\t\t{ size: 'M', chest: '89–97', waist: '77–85', hip: '91–99' },\r\n\t\t\t\t{ size: 'L', chest: '93–101', waist: '81–89', hip: '95–103' },\r\n\t\t\t\t{ size: 'XL', chest: '97–105', waist: '85–93', hip: '99–107' },\r\n\t\t\t\t{ size: '2XL', chest: '101–109', waist: '89–97', hip: '103–111' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', chest: '32–35', waist: '27–30', hip: '32–35' },\r\n\t\t\t\t{ size: 'S', chest: '34–37', waist: '29–32', hip: '34–37' },\r\n\t\t\t\t{ size: 'M', chest: '35–38', waist: '30–33', hip: '36–39' },\r\n\t\t\t\t{ size: 'L', chest: '37–40', waist: '32–35', hip: '37–40' },\r\n\t\t\t\t{ size: 'XL', chest: '38–41', waist: '34–37', hip: '39–42' },\r\n\t\t\t\t{ size: '2XL', chest: '40–43', waist: '35–38', hip: '41–44' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n\t`;\r\n\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n          \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n          \u003cdiv class=\"toggle-wrapper\"\u003e\r\n            \u003cspan\u003eCM\u003c\/span\u003e\r\n            \u003clabel class=\"toggle\"\u003e\r\n              \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n              \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n            \u003c\/label\u003e\r\n            \u003cspan\u003eINCHES\u003c\/span\u003e\r\n          \u003c\/div\u003e\r\n          \u003ctable\u003e\r\n            \u003cthead\u003e\r\n              \u003ctr\u003e\r\n                \u003cth\u003eSIZE\u003c\/th\u003e\r\n                \u003cth id=\"chestHeader\"\u003eCHEST\u003c\/th\u003e\r\n                \u003cth id=\"waistHeader\"\u003eWAIST\u003c\/th\u003e\r\n                \u003cth id=\"hipHeader\"\u003eHIP\u003c\/th\u003e\r\n              \u003c\/tr\u003e\r\n            \u003c\/thead\u003e\r\n            \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n          \u003c\/table\u003e\r\n        `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n      \u003ctr\u003e\r\n        \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.chest}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.waist}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.hip}\u003c\/td\u003e\r\n      \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48067794993376,"sku":"B6TC-A06-GY0XSN","price":3880.0,"currency_code":"TWD","in_stock":false},{"title":"S","offer_id":48067795026144,"sku":"B6TC-A06-GY00SN","price":3880.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48067795058912,"sku":"B6TC-A06-GY00MN","price":3880.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48067795091680,"sku":"B6TC-A06-GY00LN","price":3880.0,"currency_code":"TWD","in_stock":true},{"title":"XL","offer_id":48067795124448,"sku":"B6TC-A06-GY0XLN","price":3880.0,"currency_code":"TWD","in_stock":false},{"title":"2XL","offer_id":48067795157216,"sku":"B6TC-A06-GY2XLN","price":3880.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05804_1.jpg?v=1761635455"},{"product_id":"ttbici-musette-black","title":"Musette \/ Black","description":"The ttbici Musette is perfect for carrying extra essentials while riding. Designed with an ideal size and secure snap-button closure, it keeps your items safely stored throughout your journey.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48067887792352,"sku":"B1TC-B01-BK000N","price":480.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05526_1.jpg?v=1761641407"},{"product_id":"ttbici-musette-navy","title":"Musette \/ Navy","description":"The ttbici Musette is perfect for carrying extra essentials while riding. Designed with an ideal size and secure snap-button closure, it keeps your items safely stored throughout your journey.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48067888218336,"sku":"B1TC-B01-NY000N","price":480.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05528.jpg?v=1761641412"},{"product_id":"ttbici-musette-grey","title":"Musette \/ Grey","description":"The ttbici Musette is perfect for carrying extra essentials while riding. Designed with an ideal size and secure snap-button closure, it keeps your items safely stored throughout your journey.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48067888251104,"sku":"B1TC-B01-GY000N","price":480.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05531.jpg?v=1761641417"},{"product_id":"ttbici-lightweight-mitts-black","title":"Lightweight Mitts \/ Black","description":"High-Density Palm Padding: Effectively reduces impact and enhances protection.\r\n\u003cbr\u003e\u003cbr\u003e\r\nReflective Print Details: Improved visibility and safety with 3M high-reflection technology.\r\n\u003cbr\u003e\u003cbr\u003e\r\nFull Palm Perforation Design: Enhances breathability, reducing stuffiness and increasing comfort.","brand":"ttbici","offers":[{"title":"XS","offer_id":48067894640864,"sku":"B1TC-G01-BK0XSN","price":1280.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48067894673632,"sku":"B1TC-G01-BK00SN","price":1280.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48067894706400,"sku":"B1TC-G01-BK00MN","price":1280.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48067894739168,"sku":"B1TC-G01-BK00LN","price":1280.0,"currency_code":"TWD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05514_1.jpg?v=1761642148"},{"product_id":"ttbici-lightweight-mitts-white","title":"Lightweight Mitts \/ White","description":"High-Density Palm Padding: Effectively reduces impact and enhances protection.\r\n\u003cbr\u003e\u003cbr\u003e\r\nReflective Print Details: Improved visibility and safety with 3M high-reflection technology.\r\n\u003cbr\u003e\u003cbr\u003e\r\nFull Palm Perforation Design: Enhances breathability, reducing stuffiness and increasing comfort.","brand":"ttbici","offers":[{"title":"XS","offer_id":48067894903008,"sku":"B1TC-G01-WH0XSN","price":1280.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48067894935776,"sku":"B1TC-G01-WH00SN","price":1280.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48067894968544,"sku":"B1TC-G01-WH00MN","price":1280.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48067895001312,"sku":"B1TC-G01-WH00LN","price":1280.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05508_1.jpg?v=1761642155"},{"product_id":"ttbici-water-bottle-600ml-black","title":"Water Bottle 600ml \/ Black","description":"ttbici Cycling Water Bottle incorporates POLYGIENE® technology, utilizing sustainable silver salt as an active ingredient to effectively inhibit bacterial growth and prevent odors. Even after multiple washes, it maintains its effectiveness, extending its lifespan and ensuring a safe and hygienic hydration experience every time.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48070175752416,"sku":"B1TC-W01-BK600N","price":480.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc04882.jpg?v=1761703744"},{"product_id":"ttbici-water-bottle-600ml-white","title":"Water Bottle 600ml \/ White","description":"ttbici Cycling Water Bottle incorporates POLYGIENE® technology, utilizing sustainable silver salt as an active ingredient to effectively inhibit bacterial growth and prevent odors. Even after multiple washes, it maintains its effectiveness, extending its lifespan and ensuring a safe and hygienic hydration experience every time.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48070175785184,"sku":"B1TC-W01-WH600N","price":480.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc04881.jpg?v=1761703749"},{"product_id":"ttbici-cycling-cap-black","title":"Cycling Cap \/ Black","description":"The ttbici Classic Cotton Cycling Cap fits comfortably under your helmet, ensuring you stay stylish and comfortable before, during, and after your ride.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48070199541984,"sku":"B1TC-C01-BK000N","price":580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc04837_1.jpg?v=1761703981"},{"product_id":"ttbici-cycling-cap-navy","title":"Cycling Cap \/ Navy","description":"The ttbici Classic Cotton Cycling Cap fits comfortably under your helmet, ensuring you stay stylish and comfortable before, during, and after your ride.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48070200099040,"sku":"B1TC-C01-NY000N","price":580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc04844.jpg?v=1761703987"},{"product_id":"ttbici-cycling-cap-grey","title":"Cycling Cap \/ Grey","description":"The ttbici Classic Cotton Cycling Cap fits comfortably under your helmet, ensuring you stay stylish and comfortable before, during, and after your ride.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48070200164576,"sku":"B1TC-C01-GY000N","price":580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc04845.jpg?v=1761703992"},{"product_id":"ttbici-team-cycling-cap-black","title":"Team Cycling Cap \/ Black","description":"The ttbici Team Cycling Cap is crafted from lightweight, quick-drying, and stretchable fabric, offering exceptional breathability and flexibility. Designed for high-intensity rides, it keeps you cool, dry, and stylish throughout your journey.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48070200197344,"sku":"B1TC-C02-BK000N","price":580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/team_cycling_cap_black_1_1.jpg?v=1761705238"},{"product_id":"ttbici-team-cycling-cap-grey","title":"Team Cycling Cap \/ Grey","description":"The ttbici Team Cycling Cap is crafted from lightweight, quick-drying, and stretchable fabric, offering exceptional breathability and flexibility. Designed for high-intensity rides, it keeps you cool, dry, and stylish throughout your journey.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48070200230112,"sku":"B1TC-C02-GY000N","price":580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/team_cycling_cap_grey_1.jpg?v=1761704000"},{"product_id":"ttbici-socks-black","title":"Socks \/ Black","description":"Breathable Structure - Ventilated design on the sole and instep for moisture-wicking and airflow.\r\n\u003cbr\u003e\u003cbr\u003e\r\nSignature Brand Elements - Custom-woven labels and grippers provide a cohesive design and elevate the overall sense of sophistication.","brand":"ttbici","offers":[{"title":"SM","offer_id":48070266257632,"sku":"B1TC-F01-BK0SMN","price":480.0,"currency_code":"TWD","in_stock":true},{"title":"L-XL","offer_id":48070266290400,"sku":"B1TC-F01-BKLXLN","price":480.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc04794_1.jpg?v=1761708190"},{"product_id":"ttbici-socks-white","title":"Socks \/ White","description":"Breathable Structure - Ventilated design on the sole and instep for moisture-wicking and airflow.\r\n\u003cbr\u003e\u003cbr\u003e\r\nSignature Brand Elements - Custom-woven labels and grippers provide a cohesive design and elevate the overall sense of sophistication.","brand":"ttbici","offers":[{"title":"SM","offer_id":48070266323168,"sku":"B1TC-F01-WH0SMN","price":480.0,"currency_code":"TWD","in_stock":true},{"title":"L-XL","offer_id":48070266355936,"sku":"B1TC-F01-WHLXLN","price":480.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc04780_1.jpg?v=1761708196"},{"product_id":"ttbici-team-socks-purple","title":"Team Socks \/ Purple","description":"ttbici a Line Socks feature an elastic cuff design for a secure yet easy fit. Engineered with COOLMAX® technology, the specialized fiber structure efficiently wicks moisture away from the skin, accelerating evaporation to keep your feet dry, lightweight, breathable, comfortable, and durable.","brand":"ttbici","offers":[{"title":"SM","offer_id":48070266388704,"sku":"B1TC-F02-PG0SMN","price":580.0,"currency_code":"TWD","in_stock":true},{"title":"L-XL","offer_id":48070266421472,"sku":"B1TC-F02-PGLXLN","price":580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/team_socks_-purple_1_1.jpg?v=1761708202"},{"product_id":"ttbici-team-socks-white","title":"Team Socks \/ White","description":"ttbici a Line Socks feature an elastic cuff design for a secure yet easy fit. Engineered with COOLMAX® technology, the specialized fiber structure efficiently wicks moisture away from the skin, accelerating evaporation to keep your feet dry, lightweight, breathable, comfortable, and durable.","brand":"ttbici","offers":[{"title":"SM","offer_id":48070266454240,"sku":"B1TC-F02-WH0SMN","price":580.0,"currency_code":"TWD","in_stock":true},{"title":"L-XL","offer_id":48070266487008,"sku":"B1TC-F02-WHLXLN","price":580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/team_socks_-white_1_1.jpg?v=1761708208"},{"product_id":"ttbici-team-socks-grey","title":"Team Socks \/ Grey","description":"ttbici a Line Socks feature an elastic cuff design for a secure yet easy fit. Engineered with COOLMAX® technology, the specialized fiber structure efficiently wicks moisture away from the skin, accelerating evaporation to keep your feet dry, lightweight, breathable, comfortable, and durable.","brand":"ttbici","offers":[{"title":"SM","offer_id":48070266519776,"sku":"B1TC-F02-GY0SMN","price":580.0,"currency_code":"TWD","in_stock":true},{"title":"L-XL","offer_id":48070266552544,"sku":"B1TC-F02-GYLXLN","price":580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/team_socks_grey_1_1.jpg?v=1761708214"},{"product_id":"ttbici-a-2-performance-sunglasses-transparent-black-grey-lens","title":"A-2 Performance Sunglasses \/ Transparent Black \/ Grey Lens (CAT3)","description":"ttbici A-2 Performance Sunglasses \u003cbr\u003e\r\nFeaturing a large curved lens design, the A-2 offers an expanded field of vision while enhancing aerodynamic efficiency.\u003cbr\u003e\r\nPaired with multiple lens options, it delivers optimal performance for high-speed riding across all weather conditions.\r\n","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344024800,"sku":"B1TC-EA2-BKGRYN","price":3280.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-ea2-bkgryn_1.jpg?v=1761810703"},{"product_id":"ttbici-a-2-performance-sunglasses-transparent-black-photochromic-lens","title":"A-2 Performance Sunglasses \/ Transparent Black \/ Photochromic Lens (CAT 0 - 3)","description":"ttbici A-2 Performance Sunglasses \u003cbr\u003e\r\nFeaturing a large curved lens design, the A-2 offers an expanded field of vision while enhancing aerodynamic efficiency.\u003cbr\u003e\r\nPaired with multiple lens options, it delivers optimal performance for high-speed riding across all weather conditions.\r\n","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344057568,"sku":"B1TC-EA2-BKPHON","price":4380.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-ea2-bkphon_1.jpg?v=1761810709"},{"product_id":"ttbici-a-2-performance-sunglasses-matte-clear-mirror-silver-lens","title":"A-2 Performance Sunglasses \/ Matte Clear \/ Mirror Silver Lens (CAT3)","description":"ttbici A-2 Performance Sunglasses \u003cbr\u003e\r\nFeaturing a large curved lens design, the A-2 offers an expanded field of vision while enhancing aerodynamic efficiency.\u003cbr\u003e\r\nPaired with multiple lens options, it delivers optimal performance for high-speed riding across all weather conditions.\r\n","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344090336,"sku":"B1TC-EA2-CLSILN","price":3480.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-ea2-clsiln_1.jpg?v=1761810716"},{"product_id":"ttbici-a-2-performance-sunglasses-matte-clear-photochromic-lens","title":"A-2 Performance Sunglasses \/ Matte Clear \/ Photochromic Lens (CAT 0 - 3)","description":"ttbici A-2 Performance Sunglasses \u003cbr\u003e\r\nFeaturing a large curved lens design, the A-2 offers an expanded field of vision while enhancing aerodynamic efficiency.\u003cbr\u003e\r\nPaired with multiple lens options, it delivers optimal performance for high-speed riding across all weather conditions.\r\n","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344155872,"sku":"B1TC-EA2-CLPHON","price":4380.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-ea2-clphon_1.jpg?v=1761810723"},{"product_id":"ttbici-a-2-performance-sunglasses-matte-purple-green-lens","title":"A-2 Performance Sunglasses \/ Matte Purple \/ Green Lens (CAT3)","description":"ttbici A-2 Performance Sunglasses \u003cbr\u003e\r\nFeaturing a large curved lens design, the A-2 offers an expanded field of vision while enhancing aerodynamic efficiency.\u003cbr\u003e\r\nPaired with multiple lens options, it delivers optimal performance for high-speed riding across all weather conditions.\r\n","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344221408,"sku":"B1TC-EA2-PGGREN","price":3280.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-ea2-pggren_1.jpg?v=1761810729"},{"product_id":"ttbici-a-2-performance-sunglasses-matte-purple-photochromic-lens","title":"A-2 Performance Sunglasses \/ Matte Purple \/ Photochromic Lens (CAT 0 - 3)","description":"ttbici A-2 Performance Sunglasses \u003cbr\u003e\r\nFeaturing a large curved lens design, the A-2 offers an expanded field of vision while enhancing aerodynamic efficiency.\u003cbr\u003e\r\nPaired with multiple lens options, it delivers optimal performance for high-speed riding across all weather conditions.\r\n","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344254176,"sku":"B1TC-EA2-PGPHON","price":4380.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-ea2-pgphon_1.jpg?v=1761810735"},{"product_id":"ttbici-e-1-cycling-sunglasses-solid-black-green-lens","title":"E-1 Cycling Sunglasses \/ Solid Black \/ Green Lens (CAT3)","description":"ttbici E-1 Cycling Sunglasses \u003cbr\u003e\r\nDesigned for versatility across a range of sports, the E-1 features a one-piece lens that seamlessly blends performance with contemporary style.\u003cbr\u003e\r\nMore than just sun protection, it’s the ultimate fashion statement for every ride","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344286944,"sku":"B1TC-EE1-BKGREN","price":2580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-ee1-bkgren_1.jpg?v=1761810742"},{"product_id":"ttbici-e-1-cycling-sunglasses-solid-black-mirror-silver-lens","title":"E-1 Cycling Sunglasses \/ Solid Black \/ Mirror Silver Lens (CAT3)","description":"ttbici E-1 Cycling Sunglasses \u003cbr\u003e\r\nDesigned for versatility across a range of sports, the E-1 features a one-piece lens that seamlessly blends performance with contemporary style.\u003cbr\u003e\r\nMore than just sun protection, it’s the ultimate fashion statement for every ride","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344516320,"sku":"B1TC-EE1-BKSILN","price":2880.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-ee1-bksiln_1.jpg?v=1761810748"},{"product_id":"ttbici-e-1-cycling-sunglasses-matte-grey-pink-lens","title":"E-1 Cycling Sunglasses \/ Matte Grey \/ Pink Lens (CAT1)","description":"ttbici E-1 Cycling Sunglasses \u003cbr\u003e\r\nDesigned for versatility across a range of sports, the E-1 features a one-piece lens that seamlessly blends performance with contemporary style.\u003cbr\u003e\r\nMore than just sun protection, it’s the ultimate fashion statement for every ride","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344549088,"sku":"B1TC-EE1-GYPINN","price":2580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-ee1-gypinn_1.jpg?v=1761810754"},{"product_id":"ttbici-e-1-cycling-sunglasses-matte-grey-mirror-blue-lens","title":"E-1 Cycling Sunglasses \/ Matte Grey \/ Mirror Blue Lens (CAT3)","description":"ttbici E-1 Cycling Sunglasses \u003cbr\u003e\r\nDesigned for versatility across a range of sports, the E-1 features a one-piece lens that seamlessly blends performance with contemporary style.\u003cbr\u003e\r\nMore than just sun protection, it’s the ultimate fashion statement for every ride","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344581856,"sku":"B1TC-EE1-GYBLUN","price":2880.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-ee1-gyblun_1.jpg?v=1761810761"},{"product_id":"ttbici-e-1-cycling-sunglasses-matte-brown-grey-lens","title":"E-1 Cycling Sunglasses \/ Matte Brown \/ Grey Lens (CAT3)","description":"ttbici E-1 Cycling Sunglasses \u003cbr\u003e\r\nDesigned for versatility across a range of sports, the E-1 features a one-piece lens that seamlessly blends performance with contemporary style.\u003cbr\u003e\r\nMore than just sun protection, it’s the ultimate fashion statement for every ride","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344614624,"sku":"B1TC-EE1-BRGRYN","price":2580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-ee1-brgryn_1.jpg?v=1761810767"},{"product_id":"ttbici-e-1-cycling-sunglasses-matte-brown-mirror-gold-lens","title":"E-1 Cycling Sunglasses \/ Matte Brown \/ Mirror Gold Lens (CAT3)","description":"ttbici E-1 Cycling Sunglasses \u003cbr\u003e\r\nDesigned for versatility across a range of sports, the E-1 features a one-piece lens that seamlessly blends performance with contemporary style.\u003cbr\u003e\r\nMore than just sun protection, it’s the ultimate fashion statement for every ride","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344778464,"sku":"B1TC-EE1-BRGOLN","price":2880.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-ee1-brgoln_1.jpg?v=1761810774"},{"product_id":"ttbici-u-1-active-sunglasses-matte-black-yellow-lens","title":"U-1 Active Sunglasses \/ Matte Black \/ Yellow Lens (CAT0)","description":"ttbici U-1 Active Sunglasses \u003cbr\u003e\r\nMore than just sports eyewear, the U-1 is the perfect choice for urban exploration and everyday fashion. \u003cbr\u003e\r\nWhether you're cycling through the city or styling your daily look, the U-1 seamlessly adapts to your lifestyle with effortless versatility.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073344811232,"sku":"B1TC-EU1-BKYELN","price":1880.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-eu1-bkyeln_1.jpg?v=1761810781"},{"product_id":"ttbici-u-1-active-sunglasses-matte-black-mirror-silver-lens","title":"U-1 Active Sunglasses \/ Matte Black \/ Mirror Silver Lens (CAT3)","description":"ttbici U-1 Active Sunglasses \u003cbr\u003e\r\nMore than just sports eyewear, the U-1 is the perfect choice for urban exploration and everyday fashion. \u003cbr\u003e\r\nWhether you're cycling through the city or styling your daily look, the U-1 seamlessly adapts to your lifestyle with effortless versatility.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073345794272,"sku":"B1TC-EU1-BKSILN","price":2080.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-eu1-bksiln_1.jpg?v=1761810786"},{"product_id":"ttbici-u-1-active-sunglasses-matte-grey-pink-lens","title":"U-1 Active Sunglasses \/ Matte Grey \/ Pink Lens (CAT1)","description":"ttbici U-1 Active Sunglasses \u003cbr\u003e\r\nMore than just sports eyewear, the U-1 is the perfect choice for urban exploration and everyday fashion. \u003cbr\u003e\r\nWhether you're cycling through the city or styling your daily look, the U-1 seamlessly adapts to your lifestyle with effortless versatility.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073345827040,"sku":"B1TC-EU1-GYPINN","price":1880.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-eu1-gypinn_1.jpg?v=1761810792"},{"product_id":"ttbici-u-1-active-sunglasses-matte-grey-mirror-blue-lens","title":"U-1 Active Sunglasses \/ Matte Grey \/ Mirror Blue Lens (CAT3)","description":"ttbici U-1 Active Sunglasses \u003cbr\u003e\r\nMore than just sports eyewear, the U-1 is the perfect choice for urban exploration and everyday fashion. \u003cbr\u003e\r\nWhether you're cycling through the city or styling your daily look, the U-1 seamlessly adapts to your lifestyle with effortless versatility.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073345859808,"sku":"B1TC-EU1-GYBLUN","price":2080.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-eu1-gyblun_1.jpg?v=1761810799"},{"product_id":"ttbici-u-1-active-sunglasses-matte-brown-grey-lens","title":"U-1 Active Sunglasses \/ Matte Brown \/ Grey Lens (CAT3)","description":"ttbici U-1 Active Sunglasses \u003cbr\u003e\r\nMore than just sports eyewear, the U-1 is the perfect choice for urban exploration and everyday fashion. \u003cbr\u003e\r\nWhether you're cycling through the city or styling your daily look, the U-1 seamlessly adapts to your lifestyle with effortless versatility.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073345892576,"sku":"B1TC-EU1-BRGRYN","price":1880.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-eu1-brgryn_1.jpg?v=1761810805"},{"product_id":"ttbici-u-1-active-sunglasses-matte-brown-mirror-gold-lens","title":"U-1 Active Sunglasses \/ Matte Brown \/ Mirror Gold Lens (CAT3)","description":"ttbici U-1 Active Sunglasses \u003cbr\u003e\r\nMore than just sports eyewear, the U-1 is the perfect choice for urban exploration and everyday fashion. \u003cbr\u003e\r\nWhether you're cycling through the city or styling your daily look, the U-1 seamlessly adapts to your lifestyle with effortless versatility.","brand":"ttbici","offers":[{"title":"Default Title","offer_id":48073345958112,"sku":"B1TC-EU1-BRGOLN","price":2080.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/b1tc-eu1-brgoln_1.jpg?v=1761810811"},{"product_id":"ttbici-u-line-tech-t-shirt-black","title":"U Line Tech T-shirt \/ Black","description":"The ttbici U Line TECH T-Shirt is designed specifically for cycling commuters, combining functionality with everyday comfort. Infused with Polygeine® technology, this performance tee actively inhibits bacterial growth, ensuring long-lasting freshness by preventing odors at the source. Even after a sweaty ride, you can confidently step into your next destination without worrying about unpleasant smells—eliminating the need for extra clothing changes. Whether you're commuting, running errands, or enjoying a casual ride, this breathable and lightweight tee is your perfect companion for an active lifestyle.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', width: '46', length: '63', sleeve: '37' },\r\n\t\t\t\t{ size: 'S', width: '49', length: '66', sleeve: '38' },\r\n\t\t\t\t{ size: 'M', width: '52', length: '69', sleeve: '39' },\r\n\t\t\t\t{ size: 'L', width: '55', length: '71', sleeve: '40' },\r\n\t\t\t\t{ size: 'XL', width: '58', length: '74', sleeve: '41' },\r\n\t\t\t\t{ size: '2XL', width: '60', length: '77', sleeve: '42' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', width: '18', length: '25', sleeve: '14.5' },\r\n\t\t\t\t{ size: 'S', width: '19', length: '26', sleeve: '14.5' },\r\n\t\t\t\t{ size: 'M', width: '21', length: '27', sleeve: '15' },\r\n\t\t\t\t{ size: 'L', width: '22', length: '28', sleeve: '15.5' },\r\n\t\t\t\t{ size: 'XL', width: '23', length: '29', sleeve: '16' },\r\n\t\t\t\t{ size: '2XL', width: '24', length: '30', sleeve: '16.5' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n      `;\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n        \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n        \u003cdiv class=\"toggle-wrapper\"\u003e\r\n          \u003cspan\u003eCM\u003c\/span\u003e\r\n          \u003clabel class=\"toggle\"\u003e\r\n            \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n            \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n          \u003c\/label\u003e\r\n          \u003cspan\u003eINCHES\u003c\/span\u003e\r\n        \u003c\/div\u003e\r\n        \u003ctable\u003e\r\n          \u003cthead\u003e\r\n            \u003ctr\u003e\r\n              \u003cth\u003eSIZE\u003c\/th\u003e\r\n              \u003cth id=\"widthHeader\"\u003eWIDTH\u003c\/th\u003e\r\n              \u003cth id=\"lengthHeader\"\u003eLENGTH\u003c\/th\u003e\r\n              \u003cth id=\"sleeveHeader\"\u003eSLEEVE\u003c\/th\u003e\r\n            \u003c\/tr\u003e\r\n          \u003c\/thead\u003e\r\n          \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n        \u003c\/table\u003e\r\n      `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n        \u003ctr\u003e\r\n          \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.width}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.length}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.sleeve}\u003c\/td\u003e\r\n        \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48073386295520,"sku":"B6TC-U01-BK0XSN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48073386328288,"sku":"B6TC-U01-BK00SN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48073386361056,"sku":"B6TC-U01-BK00MN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48073386393824,"sku":"B6TC-U01-BK00LN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"XL","offer_id":48073386426592,"sku":"B6TC-U01-BK0XLN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"2XL","offer_id":48073386459360,"sku":"B6TC-U01-BK2XLN","price":1980.0,"currency_code":"TWD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05559_1.jpg?v=1761813182"},{"product_id":"ttbici-u-line-tech-t-shirt-bleached-sand","title":"U Line Tech T-shirt \/ Bleached Sand","description":"The ttbici U Line TECH T-Shirt is designed specifically for cycling commuters, combining functionality with everyday comfort. Infused with Polygeine® technology, this performance tee actively inhibits bacterial growth, ensuring long-lasting freshness by preventing odors at the source. Even after a sweaty ride, you can confidently step into your next destination without worrying about unpleasant smells—eliminating the need for extra clothing changes. Whether you're commuting, running errands, or enjoying a casual ride, this breathable and lightweight tee is your perfect companion for an active lifestyle.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', width: '46', length: '63', sleeve: '37' },\r\n\t\t\t\t{ size: 'S', width: '49', length: '66', sleeve: '38' },\r\n\t\t\t\t{ size: 'M', width: '52', length: '69', sleeve: '39' },\r\n\t\t\t\t{ size: 'L', width: '55', length: '71', sleeve: '40' },\r\n\t\t\t\t{ size: 'XL', width: '58', length: '74', sleeve: '41' },\r\n\t\t\t\t{ size: '2XL', width: '60', length: '77', sleeve: '42' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', width: '18', length: '25', sleeve: '14.5' },\r\n\t\t\t\t{ size: 'S', width: '19', length: '26', sleeve: '14.5' },\r\n\t\t\t\t{ size: 'M', width: '21', length: '27', sleeve: '15' },\r\n\t\t\t\t{ size: 'L', width: '22', length: '28', sleeve: '15.5' },\r\n\t\t\t\t{ size: 'XL', width: '23', length: '29', sleeve: '16' },\r\n\t\t\t\t{ size: '2XL', width: '24', length: '30', sleeve: '16.5' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n      `;\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n        \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n        \u003cdiv class=\"toggle-wrapper\"\u003e\r\n          \u003cspan\u003eCM\u003c\/span\u003e\r\n          \u003clabel class=\"toggle\"\u003e\r\n            \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n            \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n          \u003c\/label\u003e\r\n          \u003cspan\u003eINCHES\u003c\/span\u003e\r\n        \u003c\/div\u003e\r\n        \u003ctable\u003e\r\n          \u003cthead\u003e\r\n            \u003ctr\u003e\r\n              \u003cth\u003eSIZE\u003c\/th\u003e\r\n              \u003cth id=\"widthHeader\"\u003eWIDTH\u003c\/th\u003e\r\n              \u003cth id=\"lengthHeader\"\u003eLENGTH\u003c\/th\u003e\r\n              \u003cth id=\"sleeveHeader\"\u003eSLEEVE\u003c\/th\u003e\r\n            \u003c\/tr\u003e\r\n          \u003c\/thead\u003e\r\n          \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n        \u003c\/table\u003e\r\n      `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n        \u003ctr\u003e\r\n          \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.width}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.length}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.sleeve}\u003c\/td\u003e\r\n        \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48073386590432,"sku":"B6TC-U01-SD0XSN","price":1980.0,"currency_code":"TWD","in_stock":false},{"title":"S","offer_id":48073386623200,"sku":"B6TC-U01-SD00SN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48073386655968,"sku":"B6TC-U01-SD00MN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48073386688736,"sku":"B6TC-U01-SD00LN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"XL","offer_id":48073386721504,"sku":"B6TC-U01-SD0XLN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"2XL","offer_id":48073386754272,"sku":"B6TC-U01-SD2XLN","price":1980.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05552_1.jpg?v=1761813190"},{"product_id":"ttbici-u-line-tech-t-shirt-rum-brown","title":"U Line Tech T-shirt \/ Rum Brown","description":"The ttbici U Line TECH T-Shirt is designed specifically for cycling commuters, combining functionality with everyday comfort. Infused with Polygeine® technology, this performance tee actively inhibits bacterial growth, ensuring long-lasting freshness by preventing odors at the source. Even after a sweaty ride, you can confidently step into your next destination without worrying about unpleasant smells—eliminating the need for extra clothing changes. Whether you're commuting, running errands, or enjoying a casual ride, this breathable and lightweight tee is your perfect companion for an active lifestyle.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', width: '46', length: '63', sleeve: '37' },\r\n\t\t\t\t{ size: 'S', width: '49', length: '66', sleeve: '38' },\r\n\t\t\t\t{ size: 'M', width: '52', length: '69', sleeve: '39' },\r\n\t\t\t\t{ size: 'L', width: '55', length: '71', sleeve: '40' },\r\n\t\t\t\t{ size: 'XL', width: '58', length: '74', sleeve: '41' },\r\n\t\t\t\t{ size: '2XL', width: '60', length: '77', sleeve: '42' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', width: '18', length: '25', sleeve: '14.5' },\r\n\t\t\t\t{ size: 'S', width: '19', length: '26', sleeve: '14.5' },\r\n\t\t\t\t{ size: 'M', width: '21', length: '27', sleeve: '15' },\r\n\t\t\t\t{ size: 'L', width: '22', length: '28', sleeve: '15.5' },\r\n\t\t\t\t{ size: 'XL', width: '23', length: '29', sleeve: '16' },\r\n\t\t\t\t{ size: '2XL', width: '24', length: '30', sleeve: '16.5' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n      `;\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n        \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n        \u003cdiv class=\"toggle-wrapper\"\u003e\r\n          \u003cspan\u003eCM\u003c\/span\u003e\r\n          \u003clabel class=\"toggle\"\u003e\r\n            \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n            \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n          \u003c\/label\u003e\r\n          \u003cspan\u003eINCHES\u003c\/span\u003e\r\n        \u003c\/div\u003e\r\n        \u003ctable\u003e\r\n          \u003cthead\u003e\r\n            \u003ctr\u003e\r\n              \u003cth\u003eSIZE\u003c\/th\u003e\r\n              \u003cth id=\"widthHeader\"\u003eWIDTH\u003c\/th\u003e\r\n              \u003cth id=\"lengthHeader\"\u003eLENGTH\u003c\/th\u003e\r\n              \u003cth id=\"sleeveHeader\"\u003eSLEEVE\u003c\/th\u003e\r\n            \u003c\/tr\u003e\r\n          \u003c\/thead\u003e\r\n          \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n        \u003c\/table\u003e\r\n      `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n        \u003ctr\u003e\r\n          \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.width}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.length}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.sleeve}\u003c\/td\u003e\r\n        \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48073386918112,"sku":"B6TC-U01-BR0XSM","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48073386950880,"sku":"B6TC-U01-BR00SM","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48073386983648,"sku":"B6TC-U01-BR00MM","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48073387016416,"sku":"B6TC-U01-BR00LM","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"XL","offer_id":48073387049184,"sku":"B6TC-U01-BR0XLM","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"2XL","offer_id":48073387081952,"sku":"B6TC-U01-BR2XLM","price":1980.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05554-dark_red_1.jpg?v=1761813199"},{"product_id":"ttbici-u-line-tech-t-shirt-forest-green","title":"U Line Tech T-shirt \/ Forest Green","description":"The ttbici U Line TECH T-Shirt is designed specifically for cycling commuters, combining functionality with everyday comfort. Infused with Polygeine® technology, this performance tee actively inhibits bacterial growth, ensuring long-lasting freshness by preventing odors at the source. Even after a sweaty ride, you can confidently step into your next destination without worrying about unpleasant smells—eliminating the need for extra clothing changes. Whether you're commuting, running errands, or enjoying a casual ride, this breathable and lightweight tee is your perfect companion for an active lifestyle.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', width: '46', length: '63', sleeve: '37' },\r\n\t\t\t\t{ size: 'S', width: '49', length: '66', sleeve: '38' },\r\n\t\t\t\t{ size: 'M', width: '52', length: '69', sleeve: '39' },\r\n\t\t\t\t{ size: 'L', width: '55', length: '71', sleeve: '40' },\r\n\t\t\t\t{ size: 'XL', width: '58', length: '74', sleeve: '41' },\r\n\t\t\t\t{ size: '2XL', width: '60', length: '77', sleeve: '42' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', width: '18', length: '25', sleeve: '14.5' },\r\n\t\t\t\t{ size: 'S', width: '19', length: '26', sleeve: '14.5' },\r\n\t\t\t\t{ size: 'M', width: '21', length: '27', sleeve: '15' },\r\n\t\t\t\t{ size: 'L', width: '22', length: '28', sleeve: '15.5' },\r\n\t\t\t\t{ size: 'XL', width: '23', length: '29', sleeve: '16' },\r\n\t\t\t\t{ size: '2XL', width: '24', length: '30', sleeve: '16.5' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n      `;\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n        \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n        \u003cdiv class=\"toggle-wrapper\"\u003e\r\n          \u003cspan\u003eCM\u003c\/span\u003e\r\n          \u003clabel class=\"toggle\"\u003e\r\n            \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n            \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n          \u003c\/label\u003e\r\n          \u003cspan\u003eINCHES\u003c\/span\u003e\r\n        \u003c\/div\u003e\r\n        \u003ctable\u003e\r\n          \u003cthead\u003e\r\n            \u003ctr\u003e\r\n              \u003cth\u003eSIZE\u003c\/th\u003e\r\n              \u003cth id=\"widthHeader\"\u003eWIDTH\u003c\/th\u003e\r\n              \u003cth id=\"lengthHeader\"\u003eLENGTH\u003c\/th\u003e\r\n              \u003cth id=\"sleeveHeader\"\u003eSLEEVE\u003c\/th\u003e\r\n            \u003c\/tr\u003e\r\n          \u003c\/thead\u003e\r\n          \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n        \u003c\/table\u003e\r\n      `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n        \u003ctr\u003e\r\n          \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.width}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.length}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.sleeve}\u003c\/td\u003e\r\n        \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48073387180256,"sku":"B6TC-U01-GR0XSM","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48073387213024,"sku":"B6TC-U01-GR00SM","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48073387245792,"sku":"B6TC-U01-GR00MM","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48073387278560,"sku":"B6TC-U01-GR00LM","price":1980.0,"currency_code":"TWD","in_stock":false},{"title":"XL","offer_id":48073387311328,"sku":"B6TC-U01-GR0XLM","price":1980.0,"currency_code":"TWD","in_stock":false},{"title":"2XL","offer_id":48073387344096,"sku":"B6TC-U01-GR2XLM","price":1980.0,"currency_code":"TWD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05554-dark_green_1.jpg?v=1761813207"},{"product_id":"ttbici-u-line-tech-t-shirt-granite-grey","title":"U Line Tech T-shirt \/ Granite Grey","description":"The ttbici U Line TECH T-Shirt is designed specifically for cycling commuters, combining functionality with everyday comfort. Infused with Polygeine® technology, this performance tee actively inhibits bacterial growth, ensuring long-lasting freshness by preventing odors at the source. Even after a sweaty ride, you can confidently step into your next destination without worrying about unpleasant smells—eliminating the need for extra clothing changes. Whether you're commuting, running errands, or enjoying a casual ride, this breathable and lightweight tee is your perfect companion for an active lifestyle.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', width: '46', length: '63', sleeve: '37' },\r\n\t\t\t\t{ size: 'S', width: '49', length: '66', sleeve: '38' },\r\n\t\t\t\t{ size: 'M', width: '52', length: '69', sleeve: '39' },\r\n\t\t\t\t{ size: 'L', width: '55', length: '71', sleeve: '40' },\r\n\t\t\t\t{ size: 'XL', width: '58', length: '74', sleeve: '41' },\r\n\t\t\t\t{ size: '2XL', width: '60', length: '77', sleeve: '42' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', width: '18', length: '25', sleeve: '14.5' },\r\n\t\t\t\t{ size: 'S', width: '19', length: '26', sleeve: '14.5' },\r\n\t\t\t\t{ size: 'M', width: '21', length: '27', sleeve: '15' },\r\n\t\t\t\t{ size: 'L', width: '22', length: '28', sleeve: '15.5' },\r\n\t\t\t\t{ size: 'XL', width: '23', length: '29', sleeve: '16' },\r\n\t\t\t\t{ size: '2XL', width: '24', length: '30', sleeve: '16.5' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n      `;\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n        \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n        \u003cdiv class=\"toggle-wrapper\"\u003e\r\n          \u003cspan\u003eCM\u003c\/span\u003e\r\n          \u003clabel class=\"toggle\"\u003e\r\n            \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n            \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n          \u003c\/label\u003e\r\n          \u003cspan\u003eINCHES\u003c\/span\u003e\r\n        \u003c\/div\u003e\r\n        \u003ctable\u003e\r\n          \u003cthead\u003e\r\n            \u003ctr\u003e\r\n              \u003cth\u003eSIZE\u003c\/th\u003e\r\n              \u003cth id=\"widthHeader\"\u003eWIDTH\u003c\/th\u003e\r\n              \u003cth id=\"lengthHeader\"\u003eLENGTH\u003c\/th\u003e\r\n              \u003cth id=\"sleeveHeader\"\u003eSLEEVE\u003c\/th\u003e\r\n            \u003c\/tr\u003e\r\n          \u003c\/thead\u003e\r\n          \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n        \u003c\/table\u003e\r\n      `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n        \u003ctr\u003e\r\n          \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.width}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.length}\u003c\/td\u003e\r\n          \u003ctd\u003e${row.sleeve}\u003c\/td\u003e\r\n        \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48073398026464,"sku":"B6TC-U01-GY0XSN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48073398059232,"sku":"B6TC-U01-GY00SN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48073398092000,"sku":"B6TC-U01-GY00MN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48073398124768,"sku":"B6TC-U01-GY00LN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"XL","offer_id":48073398157536,"sku":"B6TC-U01-GY0XLN","price":1980.0,"currency_code":"TWD","in_stock":true},{"title":"2XL","offer_id":48073398190304,"sku":"B6TC-U01-GY2XLN","price":1980.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05548_5.jpg?v=1761813775"},{"product_id":"ttbici-a-line-lightweight-gilet-black","title":"a Line Lightweight Gilet \/ Black","description":"The ttbici A Line Lightweight Gilet combines ultralight materials with exceptional wind resistance. Featuring a DWR Coating, it effectively repels water and moisture, providing reliable protection against unpredictable weather conditions.\r\n\u003cbr\u003e\u003cbr\u003e\r\nWith a self-packable design for easy portability, this jacket ensures optimal comfort and protection against sudden rain or strong winds—allowing you to ride with confidence, no matter the conditions.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', chest: '80–88', waist: '68–76', hip: '82–90' },\r\n\t\t\t\t{ size: 'S', chest: '85–93', waist: '73–81', hip: '87–95' },\r\n\t\t\t\t{ size: 'M', chest: '89–97', waist: '77–85', hip: '91–99' },\r\n\t\t\t\t{ size: 'L', chest: '93–101', waist: '81–89', hip: '95–103' },\r\n\t\t\t\t{ size: 'XL', chest: '97–105', waist: '85–93', hip: '99–107' },\r\n\t\t\t\t{ size: '2XL', chest: '101–109', waist: '89–97', hip: '103–111' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', chest: '32–35', waist: '27–30', hip: '32–35' },\r\n\t\t\t\t{ size: 'S', chest: '34–37', waist: '29–32', hip: '34–37' },\r\n\t\t\t\t{ size: 'M', chest: '35–38', waist: '30–33', hip: '36–39' },\r\n\t\t\t\t{ size: 'L', chest: '37–40', waist: '32–35', hip: '37–40' },\r\n\t\t\t\t{ size: 'XL', chest: '38–41', waist: '34–37', hip: '39–42' },\r\n\t\t\t\t{ size: '2XL', chest: '40–43', waist: '35–38', hip: '41–44' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n\t`;\r\n\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n          \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n          \u003cdiv class=\"toggle-wrapper\"\u003e\r\n            \u003cspan\u003eCM\u003c\/span\u003e\r\n            \u003clabel class=\"toggle\"\u003e\r\n              \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n              \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n            \u003c\/label\u003e\r\n            \u003cspan\u003eINCHES\u003c\/span\u003e\r\n          \u003c\/div\u003e\r\n          \u003ctable\u003e\r\n            \u003cthead\u003e\r\n              \u003ctr\u003e\r\n                \u003cth\u003eSIZE\u003c\/th\u003e\r\n                \u003cth id=\"chestHeader\"\u003eCHEST\u003c\/th\u003e\r\n                \u003cth id=\"waistHeader\"\u003eWAIST\u003c\/th\u003e\r\n                \u003cth id=\"hipHeader\"\u003eHIP\u003c\/th\u003e\r\n              \u003c\/tr\u003e\r\n            \u003c\/thead\u003e\r\n            \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n          \u003c\/table\u003e\r\n        `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n      \u003ctr\u003e\r\n        \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.chest}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.waist}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.hip}\u003c\/td\u003e\r\n      \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48073429221600,"sku":"B6TC-A07-BK0XSN","price":3280.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48073429254368,"sku":"B6TC-A07-BK00SN","price":3280.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48073429287136,"sku":"B6TC-A07-BK00MN","price":3280.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48073429319904,"sku":"B6TC-A07-BK00LN","price":3280.0,"currency_code":"TWD","in_stock":true},{"title":"XL","offer_id":48073429352672,"sku":"B6TC-A07-BK0XLN","price":3280.0,"currency_code":"TWD","in_stock":true},{"title":"2XL","offer_id":48073429385440,"sku":"B6TC-A07-BK2XLN","price":3280.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05799_1.jpg?v=1761814829"},{"product_id":"ttbici-a-line-lightweight-gilet-grey","title":"a Line Lightweight Gilet \/ Grey","description":"The ttbici A Line Lightweight Gilet combines ultralight materials with exceptional wind resistance. Featuring a DWR Coating, it effectively repels water and moisture, providing reliable protection against unpredictable weather conditions.\r\n\u003cbr\u003e\u003cbr\u003e\r\nWith a self-packable design for easy portability, this jacket ensures optimal comfort and protection against sudden rain or strong winds—allowing you to ride with confidence, no matter the conditions.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', chest: '80–88', waist: '68–76', hip: '82–90' },\r\n\t\t\t\t{ size: 'S', chest: '85–93', waist: '73–81', hip: '87–95' },\r\n\t\t\t\t{ size: 'M', chest: '89–97', waist: '77–85', hip: '91–99' },\r\n\t\t\t\t{ size: 'L', chest: '93–101', waist: '81–89', hip: '95–103' },\r\n\t\t\t\t{ size: 'XL', chest: '97–105', waist: '85–93', hip: '99–107' },\r\n\t\t\t\t{ size: '2XL', chest: '101–109', waist: '89–97', hip: '103–111' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', chest: '32–35', waist: '27–30', hip: '32–35' },\r\n\t\t\t\t{ size: 'S', chest: '34–37', waist: '29–32', hip: '34–37' },\r\n\t\t\t\t{ size: 'M', chest: '35–38', waist: '30–33', hip: '36–39' },\r\n\t\t\t\t{ size: 'L', chest: '37–40', waist: '32–35', hip: '37–40' },\r\n\t\t\t\t{ size: 'XL', chest: '38–41', waist: '34–37', hip: '39–42' },\r\n\t\t\t\t{ size: '2XL', chest: '40–43', waist: '35–38', hip: '41–44' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n\t`;\r\n\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n          \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n          \u003cdiv class=\"toggle-wrapper\"\u003e\r\n            \u003cspan\u003eCM\u003c\/span\u003e\r\n            \u003clabel class=\"toggle\"\u003e\r\n              \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n              \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n            \u003c\/label\u003e\r\n            \u003cspan\u003eINCHES\u003c\/span\u003e\r\n          \u003c\/div\u003e\r\n          \u003ctable\u003e\r\n            \u003cthead\u003e\r\n              \u003ctr\u003e\r\n                \u003cth\u003eSIZE\u003c\/th\u003e\r\n                \u003cth id=\"chestHeader\"\u003eCHEST\u003c\/th\u003e\r\n                \u003cth id=\"waistHeader\"\u003eWAIST\u003c\/th\u003e\r\n                \u003cth id=\"hipHeader\"\u003eHIP\u003c\/th\u003e\r\n              \u003c\/tr\u003e\r\n            \u003c\/thead\u003e\r\n            \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n          \u003c\/table\u003e\r\n        `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n      \u003ctr\u003e\r\n        \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.chest}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.waist}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.hip}\u003c\/td\u003e\r\n      \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48073429483744,"sku":"B6TC-A07-GY0XSN","price":3280.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48073429516512,"sku":"B6TC-A07-GY00SN","price":3280.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48073429549280,"sku":"B6TC-A07-GY00MN","price":3280.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48073429582048,"sku":"B6TC-A07-GY00LN","price":3280.0,"currency_code":"TWD","in_stock":true},{"title":"XL","offer_id":48073429614816,"sku":"B6TC-A07-GY0XLN","price":3280.0,"currency_code":"TWD","in_stock":false},{"title":"2XL","offer_id":48073429647584,"sku":"B6TC-A07-GY2XLN","price":3280.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05798_1.jpg?v=1761814838"},{"product_id":"ttbici-a-line-women-s-team-base-layer-white","title":"a Line Women' Team Base Layer \/ White","description":"The ttbici a Line Base Layer features a soft, quick-drying fabric with a highly breathable structure that efficiently wicks moisture and regulates body temperature. Designed for warm conditions, it ensures exceptional comfort and enhances the overall riding experience.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', chest: '70–78', waist: '55–63', hip: '74–82' },\r\n\t\t\t\t{ size: 'S', chest: '74–82', waist: '59–67', hip: '78–86' },\r\n\t\t\t\t{ size: 'M', chest: '78–86', waist: '63–71', hip: '82–90' },\r\n\t\t\t\t{ size: 'L', chest: '82–90', waist: '67–75', hip: '86–94' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', chest: '27–31', waist: '21–25', hip: '29–32' },\r\n\t\t\t\t{ size: 'S', chest: '29–32', waist: '23–26', hip: '31–34' },\r\n\t\t\t\t{ size: 'M', chest: '31–34', waist: '25–28', hip: '32–36' },\r\n\t\t\t\t{ size: 'L', chest: '32–36', waist: '27–30', hip: '34–37' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n\t`;\r\n\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n          \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n          \u003cdiv class=\"toggle-wrapper\"\u003e\r\n            \u003cspan\u003eCM\u003c\/span\u003e\r\n            \u003clabel class=\"toggle\"\u003e\r\n              \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n              \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n            \u003c\/label\u003e\r\n            \u003cspan\u003eINCHES\u003c\/span\u003e\r\n          \u003c\/div\u003e\r\n          \u003ctable\u003e\r\n            \u003cthead\u003e\r\n              \u003ctr\u003e\r\n                \u003cth\u003eSIZE\u003c\/th\u003e\r\n                \u003cth id=\"chestHeader\"\u003eCHEST\u003c\/th\u003e\r\n                \u003cth id=\"waistHeader\"\u003eWAIST\u003c\/th\u003e\r\n                \u003cth id=\"hipHeader\"\u003eHIP\u003c\/th\u003e\r\n              \u003c\/tr\u003e\r\n            \u003c\/thead\u003e\r\n            \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n          \u003c\/table\u003e\r\n        `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n      \u003ctr\u003e\r\n        \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.chest}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.waist}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.hip}\u003c\/td\u003e\r\n      \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48076929827040,"sku":"B6TC-A05-WH0XSW","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48076929859808,"sku":"B6TC-A05-WH00SW","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48076929892576,"sku":"B6TC-A05-WH00MW","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48076929925344,"sku":"B6TC-A05-WH00LW","price":1580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05760-_-__4.jpg?v=1761900679"},{"product_id":"ttbici-a-line-women-s-team-base-layer-lime","title":"a Line Women' Team Base Layer \/ Lime","description":"The ttbici a Line Base Layer features a soft, quick-drying fabric with a highly breathable structure that efficiently wicks moisture and regulates body temperature. Designed for warm conditions, it ensures exceptional comfort and enhances the overall riding experience.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', chest: '70–78', waist: '55–63', hip: '74–82' },\r\n\t\t\t\t{ size: 'S', chest: '74–82', waist: '59–67', hip: '78–86' },\r\n\t\t\t\t{ size: 'M', chest: '78–86', waist: '63–71', hip: '82–90' },\r\n\t\t\t\t{ size: 'L', chest: '82–90', waist: '67–75', hip: '86–94' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', chest: '27–31', waist: '21–25', hip: '29–32' },\r\n\t\t\t\t{ size: 'S', chest: '29–32', waist: '23–26', hip: '31–34' },\r\n\t\t\t\t{ size: 'M', chest: '31–34', waist: '25–28', hip: '32–36' },\r\n\t\t\t\t{ size: 'L', chest: '32–36', waist: '27–30', hip: '34–37' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n\t`;\r\n\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n          \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n          \u003cdiv class=\"toggle-wrapper\"\u003e\r\n            \u003cspan\u003eCM\u003c\/span\u003e\r\n            \u003clabel class=\"toggle\"\u003e\r\n              \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n              \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n            \u003c\/label\u003e\r\n            \u003cspan\u003eINCHES\u003c\/span\u003e\r\n          \u003c\/div\u003e\r\n          \u003ctable\u003e\r\n            \u003cthead\u003e\r\n              \u003ctr\u003e\r\n                \u003cth\u003eSIZE\u003c\/th\u003e\r\n                \u003cth id=\"chestHeader\"\u003eCHEST\u003c\/th\u003e\r\n                \u003cth id=\"waistHeader\"\u003eWAIST\u003c\/th\u003e\r\n                \u003cth id=\"hipHeader\"\u003eHIP\u003c\/th\u003e\r\n              \u003c\/tr\u003e\r\n            \u003c\/thead\u003e\r\n            \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n          \u003c\/table\u003e\r\n        `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n      \u003ctr\u003e\r\n        \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.chest}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.waist}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.hip}\u003c\/td\u003e\r\n      \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48076929990880,"sku":"B6TC-A05-LG0XSW","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48076930023648,"sku":"B6TC-A05-LG00SW","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48076930056416,"sku":"B6TC-A05-LG00MW","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48076930089184,"sku":"B6TC-A05-LG00LW","price":1580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05766_1.jpg?v=1761900686"},{"product_id":"ttbici-a-line-women-s-team-base-layer-grey","title":"a Line Women' Team Base Layer Grey","description":"The ttbici a Line Base Layer features a soft, quick-drying fabric with a highly breathable structure that efficiently wicks moisture and regulates body temperature. Designed for warm conditions, it ensures exceptional comfort and enhances the overall riding experience.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', chest: '70–78', waist: '55–63', hip: '74–82' },\r\n\t\t\t\t{ size: 'S', chest: '74–82', waist: '59–67', hip: '78–86' },\r\n\t\t\t\t{ size: 'M', chest: '78–86', waist: '63–71', hip: '82–90' },\r\n\t\t\t\t{ size: 'L', chest: '82–90', waist: '67–75', hip: '86–94' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', chest: '27–31', waist: '21–25', hip: '29–32' },\r\n\t\t\t\t{ size: 'S', chest: '29–32', waist: '23–26', hip: '31–34' },\r\n\t\t\t\t{ size: 'M', chest: '31–34', waist: '25–28', hip: '32–36' },\r\n\t\t\t\t{ size: 'L', chest: '32–36', waist: '27–30', hip: '34–37' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n\t`;\r\n\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n          \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n          \u003cdiv class=\"toggle-wrapper\"\u003e\r\n            \u003cspan\u003eCM\u003c\/span\u003e\r\n            \u003clabel class=\"toggle\"\u003e\r\n              \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n              \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n            \u003c\/label\u003e\r\n            \u003cspan\u003eINCHES\u003c\/span\u003e\r\n          \u003c\/div\u003e\r\n          \u003ctable\u003e\r\n            \u003cthead\u003e\r\n              \u003ctr\u003e\r\n                \u003cth\u003eSIZE\u003c\/th\u003e\r\n                \u003cth id=\"chestHeader\"\u003eCHEST\u003c\/th\u003e\r\n                \u003cth id=\"waistHeader\"\u003eWAIST\u003c\/th\u003e\r\n                \u003cth id=\"hipHeader\"\u003eHIP\u003c\/th\u003e\r\n              \u003c\/tr\u003e\r\n            \u003c\/thead\u003e\r\n            \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n          \u003c\/table\u003e\r\n        `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n      \u003ctr\u003e\r\n        \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.chest}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.waist}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.hip}\u003c\/td\u003e\r\n      \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48076930154720,"sku":"B6TC-A05-GY0XSW","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48076930187488,"sku":"B6TC-A05-GY00SW","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48076930220256,"sku":"B6TC-A05-GY00MW","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48076930253024,"sku":"B6TC-A05-GY00LW","price":1580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05760_1.jpg?v=1761900693"},{"product_id":"ttbici-a-line-men-s-team-base-layer-white","title":"a Line Men' Team Base Layer \/ White","description":"The ttbici a Line Base Layer features a soft, quick-drying fabric with a highly breathable structure that efficiently wicks moisture and regulates body temperature. Designed for warm conditions, it ensures exceptional comfort and enhances the overall riding experience.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', chest: '80–88', waist: '68–76', hip: '82–90' },\r\n\t\t\t\t{ size: 'S', chest: '85–93', waist: '73–81', hip: '87–95' },\r\n\t\t\t\t{ size: 'M', chest: '89–97', waist: '77–85', hip: '91–99' },\r\n\t\t\t\t{ size: 'L', chest: '93–101', waist: '81–89', hip: '95–103' },\r\n\t\t\t\t{ size: 'XL', chest: '97–105', waist: '85–93', hip: '99–107' },\r\n\t\t\t\t{ size: '2XL', chest: '101–109', waist: '89–97', hip: '103–111' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', chest: '32–35', waist: '27–30', hip: '32–35' },\r\n\t\t\t\t{ size: 'S', chest: '34–37', waist: '29–32', hip: '34–37' },\r\n\t\t\t\t{ size: 'M', chest: '35–38', waist: '30–33', hip: '36–39' },\r\n\t\t\t\t{ size: 'L', chest: '37–40', waist: '32–35', hip: '37–40' },\r\n\t\t\t\t{ size: 'XL', chest: '38–41', waist: '34–37', hip: '39–42' },\r\n\t\t\t\t{ size: '2XL', chest: '40–43', waist: '35–38', hip: '41–44' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n\t`;\r\n\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n          \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n          \u003cdiv class=\"toggle-wrapper\"\u003e\r\n            \u003cspan\u003eCM\u003c\/span\u003e\r\n            \u003clabel class=\"toggle\"\u003e\r\n              \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n              \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n            \u003c\/label\u003e\r\n            \u003cspan\u003eINCHES\u003c\/span\u003e\r\n          \u003c\/div\u003e\r\n          \u003ctable\u003e\r\n            \u003cthead\u003e\r\n              \u003ctr\u003e\r\n                \u003cth\u003eSIZE\u003c\/th\u003e\r\n                \u003cth id=\"chestHeader\"\u003eCHEST\u003c\/th\u003e\r\n                \u003cth id=\"waistHeader\"\u003eWAIST\u003c\/th\u003e\r\n                \u003cth id=\"hipHeader\"\u003eHIP\u003c\/th\u003e\r\n              \u003c\/tr\u003e\r\n            \u003c\/thead\u003e\r\n            \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n          \u003c\/table\u003e\r\n        `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n      \u003ctr\u003e\r\n        \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.chest}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.waist}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.hip}\u003c\/td\u003e\r\n      \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48076944703712,"sku":"B6TC-A05-WH0XSM","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48076944736480,"sku":"B6TC-A05-WH00SM","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48076944769248,"sku":"B6TC-A05-WH00MM","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48076944802016,"sku":"B6TC-A05-WH00LM","price":1580.0,"currency_code":"TWD","in_stock":false},{"title":"XL","offer_id":48076944834784,"sku":"B6TC-A05-WH0XLM","price":1580.0,"currency_code":"TWD","in_stock":false},{"title":"2XL","offer_id":48076944867552,"sku":"B6TC-A05-WH2XLM","price":1580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05760-_-__6.jpg?v=1761901580"},{"product_id":"ttbici-a-line-men-s-team-base-layer-lime","title":"a Line Men' Team Base Layer \/ Lime","description":"The ttbici a Line Base Layer features a soft, quick-drying fabric with a highly breathable structure that efficiently wicks moisture and regulates body temperature. Designed for warm conditions, it ensures exceptional comfort and enhances the overall riding experience.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', chest: '80–88', waist: '68–76', hip: '82–90' },\r\n\t\t\t\t{ size: 'S', chest: '85–93', waist: '73–81', hip: '87–95' },\r\n\t\t\t\t{ size: 'M', chest: '89–97', waist: '77–85', hip: '91–99' },\r\n\t\t\t\t{ size: 'L', chest: '93–101', waist: '81–89', hip: '95–103' },\r\n\t\t\t\t{ size: 'XL', chest: '97–105', waist: '85–93', hip: '99–107' },\r\n\t\t\t\t{ size: '2XL', chest: '101–109', waist: '89–97', hip: '103–111' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', chest: '32–35', waist: '27–30', hip: '32–35' },\r\n\t\t\t\t{ size: 'S', chest: '34–37', waist: '29–32', hip: '34–37' },\r\n\t\t\t\t{ size: 'M', chest: '35–38', waist: '30–33', hip: '36–39' },\r\n\t\t\t\t{ size: 'L', chest: '37–40', waist: '32–35', hip: '37–40' },\r\n\t\t\t\t{ size: 'XL', chest: '38–41', waist: '34–37', hip: '39–42' },\r\n\t\t\t\t{ size: '2XL', chest: '40–43', waist: '35–38', hip: '41–44' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n\t`;\r\n\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n          \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n          \u003cdiv class=\"toggle-wrapper\"\u003e\r\n            \u003cspan\u003eCM\u003c\/span\u003e\r\n            \u003clabel class=\"toggle\"\u003e\r\n              \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n              \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n            \u003c\/label\u003e\r\n            \u003cspan\u003eINCHES\u003c\/span\u003e\r\n          \u003c\/div\u003e\r\n          \u003ctable\u003e\r\n            \u003cthead\u003e\r\n              \u003ctr\u003e\r\n                \u003cth\u003eSIZE\u003c\/th\u003e\r\n                \u003cth id=\"chestHeader\"\u003eCHEST\u003c\/th\u003e\r\n                \u003cth id=\"waistHeader\"\u003eWAIST\u003c\/th\u003e\r\n                \u003cth id=\"hipHeader\"\u003eHIP\u003c\/th\u003e\r\n              \u003c\/tr\u003e\r\n            \u003c\/thead\u003e\r\n            \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n          \u003c\/table\u003e\r\n        `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n      \u003ctr\u003e\r\n        \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.chest}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.waist}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.hip}\u003c\/td\u003e\r\n      \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48076944965856,"sku":"B6TC-A05-LG0XSM","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48076944998624,"sku":"B6TC-A05-LG00SM","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48076945031392,"sku":"B6TC-A05-LG00MM","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48076945064160,"sku":"B6TC-A05-LG00LM","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"XL","offer_id":48076945096928,"sku":"B6TC-A05-LG0XLM","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"2XL","offer_id":48076945129696,"sku":"B6TC-A05-LG2XLM","price":1580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05766_4.jpg?v=1761901589"},{"product_id":"ttbici-a-line-men-s-team-base-layer-grey","title":"a Line Men' Team Base Layer \/ Grey","description":"The ttbici a Line Base Layer features a soft, quick-drying fabric with a highly breathable structure that efficiently wicks moisture and regulates body temperature. Designed for warm conditions, it ensures exceptional comfort and enhances the overall riding experience.\u003cbr\u003e\u003cbr\u003e\r\n\r\n\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"zh-Hant\"\u003e\r\n\r\n\u003chead\u003e\r\n\t\u003cmeta charset=\"UTF-8\" \/\u003e\r\n\t\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/\u003e\r\n\t\u003cstyle\u003e\r\n\t\tbody.product-modal-open {\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.product-modal-overlay {\r\n\t\t\tdisplay: none;\r\n\t\t\tposition: fixed;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\twidth: 100vw;\r\n\t\t\theight: 100vh;\r\n\t\t\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\t\t\tbackdrop-filter: blur(2px);\r\n\t\t\tz-index: 1000;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t}\r\n\r\n\t\t.product-modal {\r\n\t\t\tbackground: white;\r\n\t\t\tpadding: 20px;\r\n\t\t\t\/* border-radius: 10px; *\/\r\n\t\t\tmax-width: 600px;\r\n\t\t\twidth: 90%;\r\n\t\t\tmax-height: 90vh;\r\n\t\t\toverflow-y: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\r\n\t\t.product-modal .modal-close {\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 10px;\r\n\t\t\tright: 12px;\r\n\t\t\tfont-size: 20px;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 統一按鈕樣式 *\/\r\n\t\t.button-group {\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: 12px;\r\n\t\t\tpadding-top: 20px;\r\n\t\t}\r\n\r\n\t\t.button-group button {\r\n\t\t\tpadding: 0px;\r\n\t\t\tborder: none;\r\n\t\t\tbackground-color: transparent;\r\n\t\t\tcolor: #333;\r\n\t\t\tcursor: pointer;\r\n\t\t\t\/* border-radius: 5px; *\/\r\n\t\t\tfont-size: 15px;\r\n\t\t\tfont-family: 'Microsoft JhengHei';\r\n\t\t\ttext-decoration: underline;\r\n\t\t}\r\n\r\n\t\t.button-group button.active {\r\n\t\t\t\/* background-color: #444; *\/\r\n\t\t}\r\n\r\n\t\tbutton:active {\r\n\t\t\tbox-shadow: none !important;\r\n\t\t\tcolor: #333 !important;\r\n\t\t}\r\n\r\n\t\t.product-modal table {\r\n\t\t\twidth: 100%;\r\n\t\t\tborder-collapse: collapse;\r\n\t\t\tmargin-top: 10px;\r\n\t\t}\r\n\r\n\t\t.product-modal th,\r\n\t\t.product-modal td {\r\n\t\t\tborder-bottom: 1px solid #ddd;\r\n\t\t\ttext-align: center;\r\n\t\t\tpadding: 8px;\r\n\t\t}\r\n\r\n\t\t\/* ✅ 新增的欄寬限制 *\/\r\n\t\t.product-modal table th:first-child,\r\n\t\t.product-modal table td:first-child {\r\n\t\t\twidth: 15%;\r\n\t\t\tmax-width: 15%;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle-wrapper {\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tgap: 10px;\r\n\t\t\tmargin: 10px 0 20px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 50px;\r\n\t\t\theight: 24px;\r\n\t\t}\r\n\r\n\t\t.product-modal .toggle input {\r\n\t\t\topacity: 0;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider {\r\n\t\t\tposition: absolute;\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground-color: #ccc;\r\n\t\t\tborder-radius: 24px;\r\n\t\t\ttop: 0;\r\n\t\t\tleft: 0;\r\n\t\t\tright: 0;\r\n\t\t\tbottom: 0;\r\n\t\t\ttransition: 0.4s;\r\n\t\t}\r\n\r\n\t\t.product-modal .slider:before {\r\n\t\t\tcontent: \"\";\r\n\t\t\tposition: absolute;\r\n\t\t\theight: 18px;\r\n\t\t\twidth: 18px;\r\n\t\t\tleft: 3px;\r\n\t\t\tbottom: 3px;\r\n\t\t\tbackground-color: white;\r\n\t\t\ttransition: 0.4s;\r\n\t\t\tborder-radius: 50%;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider {\r\n\t\t\tbackground-color: #333;\r\n\t\t}\r\n\r\n\t\t.product-modal input:checked+.slider:before {\r\n\t\t\ttransform: translateX(26px);\r\n\t\t}\r\n\r\n\t\t.product-modal .modalInnerContent h3 {\r\n\t\t\tpadding: 20px 0;\r\n\r\n\t\t}\r\n\t\u003c\/style\u003e\r\n\u003c\/head\u003e\r\n\r\n\u003cbody\u003e\r\n\r\n\t\u003c!-- 外部觸發按鈕 --\u003e\r\n\t\u003cdiv class=\"button-group\"\u003e\r\n\t\t\u003c!-- \u003cbutton onclick=\"openModal('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\u003cbutton onclick=\"openModal('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\u003cbutton onclick=\"openModal('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003c!-- Modal --\u003e\r\n\t\u003cdiv class=\"product-modal-overlay\" id=\"modalOverlay\"\u003e\r\n\t\t\u003cdiv class=\"product-modal\" id=\"modalContent\"\u003e\r\n\t\t\t\u003cdiv class=\"modal-close\" onclick=\"closeModal()\"\u003e×\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內部選單 --\u003e\r\n\t\t\t\u003cdiv class=\"button-group\" id=\"infoTabs\"\u003e\r\n\t\t\t\t\u003c!-- \u003cbutton id=\"tab-shipping\" onclick=\"switchTab('shipping')\"\u003e運送詳情\u003c\/button\u003e --\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-size\" onclick=\"switchTab('size')\"\u003eSIZE GUIDE\u003c\/button\u003e\r\n\t\t\t\t\u003cbutton id=\"tab-care\" onclick=\"switchTab('care')\"\u003eCARE\u003c\/button\u003e\r\n\t\t\t\u003c\/div\u003e\r\n\r\n\t\t\t\u003c!-- 內容區 --\u003e\r\n\t\t\t\u003cdiv id=\"modalInnerContent\"\u003e\u003c\/div\u003e\r\n\t\t\u003c\/div\u003e\r\n\t\u003c\/div\u003e\r\n\r\n\t\u003cscript\u003e\r\n\t\tconst modalOverlay = document.getElementById(\"modalOverlay\");\r\n\t\tconst modalInner = document.getElementById(\"modalInnerContent\");\r\n\r\n\t\tconst sizeData = {\r\n\t\t\tcm: [\r\n\t\t\t\t{ size: 'XS', chest: '80–88', waist: '68–76', hip: '82–90' },\r\n\t\t\t\t{ size: 'S', chest: '85–93', waist: '73–81', hip: '87–95' },\r\n\t\t\t\t{ size: 'M', chest: '89–97', waist: '77–85', hip: '91–99' },\r\n\t\t\t\t{ size: 'L', chest: '93–101', waist: '81–89', hip: '95–103' },\r\n\t\t\t\t{ size: 'XL', chest: '97–105', waist: '85–93', hip: '99–107' },\r\n\t\t\t\t{ size: '2XL', chest: '101–109', waist: '89–97', hip: '103–111' }\r\n\t\t\t],\r\n\t\t\tinches: [\r\n\t\t\t\t{ size: 'XS', chest: '32–35', waist: '27–30', hip: '32–35' },\r\n\t\t\t\t{ size: 'S', chest: '34–37', waist: '29–32', hip: '34–37' },\r\n\t\t\t\t{ size: 'M', chest: '35–38', waist: '30–33', hip: '36–39' },\r\n\t\t\t\t{ size: 'L', chest: '37–40', waist: '32–35', hip: '37–40' },\r\n\t\t\t\t{ size: 'XL', chest: '38–41', waist: '34–37', hip: '39–42' },\r\n\t\t\t\t{ size: '2XL', chest: '40–43', waist: '35–38', hip: '41–44' }\r\n\t\t\t]\r\n\t\t};\r\n\r\n\t\tfunction openModal(defaultTab) {\r\n\t\t\tdocument.body.classList.add(\"product-modal-open\");\r\n\t\t\tmodalOverlay.style.display = \"flex\";\r\n\t\t\tswitchTab(defaultTab);\r\n\t\t}\r\n\r\n\t\tfunction closeModal() {\r\n\t\t\tmodalOverlay.style.display = \"none\";\r\n\t\t\tmodalInner.innerHTML = \"\";\r\n\t\t\tdocument.body.classList.remove(\"product-modal-open\");\r\n\t\t}\r\n\r\n\t\tfunction switchTab(tab) {\r\n\t\t\t['shipping', 'care', 'size'].forEach(id =\u003e {\r\n\t\t\t\tconst btn = document.getElementById(`tab-${id}`);\r\n\t\t\t\tif (btn) btn.classList.remove(\"active\");\r\n\t\t\t});\r\n\r\n\t\t\tconst activeBtn = document.getElementById(`tab-${tab}`);\r\n\t\t\tif (activeBtn) activeBtn.classList.add(\"active\");\r\n\r\n\t\t\tif (tab === 'shipping') {\r\n\t\t\t\tmodalInner.innerHTML = `\u003ch3\u003e運送詳情\u003c\/h3\u003e\u003cp\u003e這裡可以放運送方式、時間、費用等資訊。\u003c\/p\u003e`;\r\n\t\t\t} else if (tab === 'care') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n\t\t\u003ch3\u003eCARE\u003c\/h3\u003e\r\n\t\t\u003col\u003e\r\n\t\t\t\u003cli\u003eWhen wearing cycling jerseys, it is strongly recommended to wear and wash them based on the colors to reduce the risk of clothes bleeding colors onto each other.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter use, it is advisable to clean them promptly to prevent bacteria growth, odor formation, and the development of sweat stains, or even yellowing on the clothing.\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eWhen cleaning, remember to zip up all zippers to prevent fabric damage during the wash. Soak the clothing in \"cold water with neutral detergent\" for 5 - 10 minutes, then agitate it gently.\u003cbr\u003e\r\n\t\t\t\u003cstrong\u003e※ Do not use cold wash, fabric softener, or bleach, as these detergents can damage the fabric.\u003c\/strong\u003e\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eHand washing is preferred, but if you choose to use a washing machine, make sure to zip up all zippers, place the clothing inside a laundry bag, and wash it on the \" delicate wash mode\"\u003c\/li\u003e\r\n\t\t\t\u003cli\u003eAfter washing, avoid \"wringing out\" the clothing, and refrain from using a dryer, as this may damage the fabric. Instead, wrap the clothing in a towel to remove excess moisture and hang it to air dry in a well-ventilated, cool place.\u003c\/li\u003e\r\n\t\t\u003c\/ol\u003e\r\n\t\t\u003cp\u003e\u003cstrong\u003e※ Due to variations in manufacturing processes and dyeing methods, some fading may occur when wearing or washing cycling clothing, especially for brighter colors. We strongly recommend you to wear and wash them with similar colors.\u003c\/strong\u003e\u003c\/p\u003e\r\n\t`;\r\n\r\n\t\t\t} else if (tab === 'size') {\r\n\t\t\t\tmodalInner.innerHTML = `\r\n          \u003ch3\u003eSIZE GUIDE\u003c\/h3\u003e\r\n          \u003cdiv class=\"toggle-wrapper\"\u003e\r\n            \u003cspan\u003eCM\u003c\/span\u003e\r\n            \u003clabel class=\"toggle\"\u003e\r\n              \u003cinput type=\"checkbox\" id=\"unitToggle\"\u003e\r\n              \u003cspan class=\"slider\"\u003e\u003c\/span\u003e\r\n            \u003c\/label\u003e\r\n            \u003cspan\u003eINCHES\u003c\/span\u003e\r\n          \u003c\/div\u003e\r\n          \u003ctable\u003e\r\n            \u003cthead\u003e\r\n              \u003ctr\u003e\r\n                \u003cth\u003eSIZE\u003c\/th\u003e\r\n                \u003cth id=\"chestHeader\"\u003eCHEST\u003c\/th\u003e\r\n                \u003cth id=\"waistHeader\"\u003eWAIST\u003c\/th\u003e\r\n                \u003cth id=\"hipHeader\"\u003eHIP\u003c\/th\u003e\r\n              \u003c\/tr\u003e\r\n            \u003c\/thead\u003e\r\n            \u003ctbody id=\"tableBody\"\u003e\u003c\/tbody\u003e\r\n          \u003c\/table\u003e\r\n        `;\r\n\t\t\t\trenderSizeTable('cm');\r\n\t\t\t\tdocument.getElementById(\"unitToggle\").addEventListener(\"change\", (e) =\u003e {\r\n\t\t\t\t\trenderSizeTable(e.target.checked ? 'inches' : 'cm');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction renderSizeTable(unit) {\r\n\t\t\tconst body = document.getElementById(\"tableBody\");\r\n\t\t\tbody.innerHTML = \"\";\r\n\t\t\tsizeData[unit].forEach(row =\u003e {\r\n\t\t\t\tbody.innerHTML += `\r\n      \u003ctr\u003e\r\n        \u003ctd\u003e${row.size}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.chest}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.waist}\u003c\/td\u003e\r\n        \u003ctd\u003e${row.hip}\u003c\/td\u003e\r\n      \u003c\/tr\u003e`;\r\n\t\t\t});\r\n\t\t}\r\n\t\u003c\/script\u003e\r\n\u003c\/body\u003e\r\n\r\n\u003c\/html\u003e","brand":"ttbici","offers":[{"title":"XS","offer_id":48076945228000,"sku":"B6TC-A05-GY0XSM","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"S","offer_id":48076945260768,"sku":"B6TC-A05-GY00SM","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"M","offer_id":48076945293536,"sku":"B6TC-A05-GY00MM","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"L","offer_id":48076945326304,"sku":"B6TC-A05-GY00LM","price":1580.0,"currency_code":"TWD","in_stock":false},{"title":"XL","offer_id":48076945359072,"sku":"B6TC-A05-GY0XLM","price":1580.0,"currency_code":"TWD","in_stock":true},{"title":"2XL","offer_id":48076945391840,"sku":"B6TC-A05-GY2XLM","price":1580.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0775\/9714\/7360\/files\/dsc05760_5.jpg?v=1761901597"}],"url":"https:\/\/www.ttbici.com\/en-us\/collections\/all.oembed","provider":"TTBICI","version":"1.0","type":"link"}