{"id":2761,"date":"2025-12-25T07:30:00","date_gmt":"2025-12-24T23:30:00","guid":{"rendered":"https:\/\/www.3546.com.tw\/win\/?p=2761"},"modified":"2025-12-25T07:35:26","modified_gmt":"2025-12-24T23:35:26","slug":"%e8%b3%bd%e9%b4%bf%e5%b9%bc%e9%b4%bf%e8%82%b2%e6%88%90%e8%88%87%e5%81%a5%e5%ba%b7%e9%98%b2%e8%ad%b7%e8%a8%88%e7%95%ab","status":"publish","type":"post","link":"https:\/\/www.3546.com.tw\/win\/%e8%b3%bd%e9%b4%bf%e5%81%a5%e5%ba%b7\/%e8%b3%bd%e9%b4%bf%e5%b9%bc%e9%b4%bf%e8%82%b2%e6%88%90%e8%88%87%e5%81%a5%e5%ba%b7%e9%98%b2%e8%ad%b7%e8%a8%88%e7%95%ab\/","title":{"rendered":"\u8cfd\u9d3f\u5e7c\u9d3f\u80b2\u6210\u8207\u5065\u5eb7\u9632\u8b77\u8a08\u756b"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"zh-TW\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>\u8cfd\u9d3f\u5e7c\u9d3f\u80b2\u6210\u8207\u5065\u5eb7\u9632\u8b77\u8a08\u756b | \u4e92\u52d5\u6307\u5357<\/title>\n    <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"><\/script>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Noto+Sans+TC:wght@300;400;500;700&#038;display=swap\" rel=\"stylesheet\">\n    <style>\n        body {\n            font-family: 'Noto Sans TC', sans-serif;\n            background-color: #fdfbf7; \/* Warm neutral background *\/\n            color: #4a4a4a;\n        }\n        .card-shadow {\n            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n        }\n        .chart-container {\n            position: relative;\n            width: 100%;\n            max-width: 800px;\n            height: 350px;\n            max-height: 400px;\n            margin: 0 auto;\n        }\n        .timeline-node {\n            transition: all 0.3s ease;\n        }\n        .timeline-node:hover, .timeline-node.active {\n            transform: scale(1.05);\n            background-color: #78716c; \/* Warm Stone-500 *\/\n            color: white;\n            border-color: #78716c;\n        }\n        .nav-btn.active {\n            border-bottom: 2px solid #a8a29e; \/* Stone-400 *\/\n            color: #292524; \/* Stone-800 *\/\n            font-weight: 700;\n        }\n        \/* Custom scrollbar for data tables *\/\n        .custom-scroll::-webkit-scrollbar {\n            width: 6px;\n            height: 6px;\n        }\n        .custom-scroll::-webkit-scrollbar-track {\n            background: #f1f1f1;\n        }\n        .custom-scroll::-webkit-scrollbar-thumb {\n            background: #d6d3d1;\n            border-radius: 3px;\n        }\n    <\/style>\n    <!-- Chosen Palette: Warm Neutrals (Stone\/Warm Gray) with Muted Teal\/Blue accents for medical context -->\n    <!-- Application Structure Plan:\n         1. Hero Section: Title and clear value proposition.\n         2. Interactive Dashboard (Top):\n            - \"Immunity Dynamics\" Chart: Visualizes the 'Immunity Gap' concept to justify vaccination timing.\n            - \"Disease Risk\" Chart: Shows prevalence by age.\n         3. Core Navigation: Tabs for 'Growth Timeline', 'Disease Encyclopedia', and 'Schedule Generator'.\n         4. Growth Timeline (Main Interaction): Horizontal scrollable week selector. Clicking a week updates the detail view below (Vaccines, Care, Nutrition).\n         5. Schedule Generator: Functional tool. User inputs hatch date -> App generates a tabular list of dates for vaccines.\n         6. Disease Encyclopedia: Grid of cards describing key threats (Paramyxo, Pox, etc.) with prevention tips.\n         WHY: This structure moves from 'Why' (Charts) to 'What\/When' (Timeline) to 'How' (Tools), catering to both learning and daily management needs.\n    -->\n<\/head>\n<body class=\"bg-[#fdfbf7] min-h-screen flex flex-col\">\n\n    <!-- Header -->\n    <header class=\"bg-white border-b border-stone-200 py-6 sticky top-0 z-50 card-shadow\">\n        <div class=\"container mx-auto px-4 flex justify-between items-center\">\n            <div class=\"flex items-center space-x-3\">\n                <span class=\"text-3xl\">\ud83d\udd4a\ufe0f<\/span>\n                <div>\n                    <h1 class=\"text-xl md:text-2xl font-bold text-stone-800\">\u8cfd\u9d3f\u5e7c\u9d3f\u80b2\u6210\u8207\u5065\u5eb7\u9632\u8b77\u8a08\u756b<\/h1>\n                    <p class=\"text-sm text-stone-500 hidden md:block\">\u79d1\u5b78\u5316\u98fc\u990a \u2022 \u7cbe\u6e96\u75ab\u82d7\u63a5\u7a2e \u2022 \u75be\u75c5\u9810\u9632\u7ba1\u7406<\/p>\n                <\/div>\n            <\/div>\n            <nav class=\"hidden md:flex space-x-6 text-sm font-medium text-stone-600\">\n                <button onclick=\"switchTab('dashboard')\" class=\"nav-btn active hover:text-stone-900 transition\" id=\"nav-dashboard\">\u6578\u64da\u5100\u8868\u677f<\/button>\n                <button onclick=\"switchTab('timeline')\" class=\"nav-btn hover:text-stone-900 transition\" id=\"nav-timeline\">\u80b2\u6210\u6642\u9593\u8ef8<\/button>\n                <button onclick=\"switchTab('generator')\" class=\"nav-btn hover:text-stone-900 transition\" id=\"nav-generator\">\u65e5\u671f\u8a66\u7b97\u8868<\/button>\n            <\/nav>\n            <!-- Mobile Menu Button -->\n            <button class=\"md:hidden text-stone-600 focus:outline-none\" onclick=\"toggleMobileMenu()\">\n                <span class=\"text-2xl\">\u2630<\/span>\n            <\/button>\n        <\/div>\n        <!-- Mobile Nav -->\n        <div id=\"mobile-menu\" class=\"hidden md:hidden bg-stone-50 px-4 py-2 border-t border-stone-200\">\n            <button onclick=\"switchTab('dashboard')\" class=\"block w-full text-left py-2 text-stone-700\">\u6578\u64da\u5100\u8868\u677f<\/button>\n            <button onclick=\"switchTab('timeline')\" class=\"block w-full text-left py-2 text-stone-700\">\u80b2\u6210\u6642\u9593\u8ef8<\/button>\n            <button onclick=\"switchTab('generator')\" class=\"block w-full text-left py-2 text-stone-700\">\u65e5\u671f\u8a66\u7b97\u8868<\/button>\n        <\/div>\n    <\/header>\n\n    <!-- Main Content -->\n    <main class=\"flex-grow container mx-auto px-4 py-8\">\n\n        <!-- VIEW: DASHBOARD (Default) -->\n        <section id=\"view-dashboard\" class=\"space-y-12 animate-fade-in\">\n            \n            <!-- Section Intro -->\n            <div class=\"bg-white p-6 rounded-xl card-shadow border border-stone-100\">\n                <h2 class=\"text-2xl font-bold text-stone-800 mb-2\">\u79d1\u5b78\u9632\u8b77\u57fa\u790e<\/h2>\n                <p class=\"text-stone-600 leading-relaxed\">\n                    \u5e7c\u9d3f\u7684\u5065\u5eb7\u7ba1\u7406\u662f\u7af6\u7fd4\u81f4\u52dd\u7684\u57fa\u77f3\u3002\u672c\u5100\u8868\u677f\u5c55\u793a\u4e86\u5e7c\u9d3f\u6210\u9577\u904e\u7a0b\u4e2d\u7684\u514d\u75ab\u529b\u8b8a\u5316\u8207\u75be\u75c5\u98a8\u96aa\u5206\u4f48\u3002\n                    \u7406\u89e3\u300c\u514d\u75ab\u7a7a\u7a97\u671f\u300d(Immunity Gap) \u662f\u5236\u5b9a\u75ab\u82d7\u8a08\u756b\u7684\u95dc\u9375\uff1a\u9019\u662f\u6bcd\u6e90\u6297\u9ad4\u4e0b\u964d\u8207\u81ea\u8eab\u4e3b\u52d5\u514d\u75ab\u5c1a\u672a\u5efa\u7acb\u7684\u5371\u96aa\u4ea4\u53c9\u9ede\u3002\n                <\/p>\n            <\/div>\n\n            <!-- Charts Grid -->\n            <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-8\">\n                \n                <!-- Chart 1: Immunity Curve -->\n                <div class=\"bg-white p-6 rounded-xl card-shadow border border-stone-100 flex flex-col\">\n                    <h3 class=\"text-lg font-bold text-stone-700 mb-1\">\ud83d\udee1\ufe0f \u514d\u75ab\u529b\u6d88\u9577\u6a21\u64ec\u5716<\/h3>\n                    <p class=\"text-xs text-stone-500 mb-4\">\u6bcd\u6e90\u6297\u9ad4 vs. \u4e3b\u52d5\u514d\u75ab (\u75ab\u82d7\u6548\u679c)<\/p>\n                    <div class=\"flex-grow flex items-center justify-center bg-stone-50 rounded-lg p-2\">\n                        <div class=\"chart-container\">\n                            <canvas id=\"immunityChart\"><\/canvas>\n                        <\/div>\n                    <\/div>\n                    <div class=\"mt-4 text-sm text-stone-600 bg-amber-50 p-3 rounded border border-amber-100\">\n                        <strong>\u95dc\u9375\u89e3\u8b80\uff1a<\/strong> \u7b2c3-5\u9031\u662f\u9ad8\u5371\u96aa\u671f\uff08\u514d\u75ab\u7a7a\u7a97\uff09\uff0c\u6b64\u6642\u6bcd\u6e90\u6297\u9ad4\u964d\u81f3\u4f4e\u9ede\uff0c\u9700\u900f\u904e\u6b63\u78ba\u7684\u75ab\u82d7\u8a08\u756b\u929c\u63a5\u4fdd\u8b77\u529b\u3002\n                    <\/div>\n                <\/div>\n\n                <!-- Chart 2: Disease Risk -->\n                <div class=\"bg-white p-6 rounded-xl card-shadow border border-stone-100 flex flex-col\">\n                    <h3 class=\"text-lg font-bold text-stone-700 mb-1\">\u26a0\ufe0f \u5e7c\u9d3f\u5e38\u898b\u75be\u75c5\u98a8\u96aa\u5206\u4f48<\/h3>\n                    <p class=\"text-xs text-stone-500 mb-4\">\u5404\u968e\u6bb5\u597d\u767c\u75be\u75c5\u6a5f\u7387 (\u53c3\u8003\u503c)<\/p>\n                    <div class=\"flex-grow flex items-center justify-center bg-stone-50 rounded-lg p-2\">\n                        <div class=\"chart-container\">\n                            <canvas id=\"riskChart\"><\/canvas>\n                        <\/div>\n                    <\/div>\n                    <div class=\"mt-4 text-sm text-stone-600 bg-blue-50 p-3 rounded border border-blue-100\">\n                        <strong>\u7ba1\u7406\u91cd\u9ede\uff1a<\/strong> \u96e2\u5de2\u671f\u61c9\u7279\u5225\u6ce8\u610f\u7403\u87f2\u8207\u6bdb\u6ef4\u87f2\u7684\u9810\u9632\uff1b\u63db\u7fbd\u671f\u5247\u9700\u56b4\u9632\u547c\u5438\u9053\u611f\u67d3\u8207\u817a\u75c5\u6bd2\u3002\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Quick Action Cards -->\n            <div class=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n                <div class=\"bg-stone-100 p-6 rounded-xl hover:bg-stone-200 transition cursor-pointer text-center\" onclick=\"switchTab('timeline')\">\n                    <div class=\"text-3xl mb-2\">\ud83d\udcc5<\/div>\n                    <h4 class=\"font-bold text-stone-700\">\u67e5\u770b\u6bcf\u9031\u8a08\u756b<\/h4>\n                    <p class=\"text-sm text-stone-500 mt-1\">\u7b2c 1 \u9031\u81f3\u7b2c 15 \u9031\u8a73\u7d30\u6307\u5f15<\/p>\n                <\/div>\n                <div class=\"bg-stone-100 p-6 rounded-xl hover:bg-stone-200 transition cursor-pointer text-center\" onclick=\"switchTab('generator')\">\n                    <div class=\"text-3xl mb-2\">\ud83d\udda9<\/div>\n                    <h4 class=\"font-bold text-stone-700\">\u5efa\u7acb\u65bd\u6253\u6392\u7a0b<\/h4>\n                    <p class=\"text-sm text-stone-500 mt-1\">\u8f38\u5165\u51fa\u6bbc\u65e5\uff0c\u81ea\u52d5\u7522\u751f\u65e5\u671f<\/p>\n                <\/div>\n                <div class=\"bg-stone-100 p-6 rounded-xl hover:bg-stone-200 transition cursor-pointer text-center\" onclick=\"scrollToId('disease-list')\">\n                    <div class=\"text-3xl mb-2\">\ud83d\udc8a<\/div>\n                    <h4 class=\"font-bold text-stone-700\">\u75be\u75c5\u8cc7\u6599\u5eab<\/h4>\n                    <p class=\"text-sm text-stone-500 mt-1\">\u75c7\u72c0\u8fa8\u8b58\u8207\u7528\u85e5\u5efa\u8b70<\/p>\n                <\/div>\n            <\/div>\n\n            <!-- Disease List Section (Part of Dashboard) -->\n            <div id=\"disease-list\" class=\"pt-8\">\n                <h3 class=\"text-xl font-bold text-stone-800 mb-6 border-l-4 border-stone-500 pl-3\">\u75be\u75c5\u9632\u8b77\u8cc7\u6599\u5eab<\/h3>\n                <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\" id=\"disease-grid\">\n                    <!-- Populated by JS -->\n                <\/div>\n            <\/div>\n        <\/section>\n\n        <!-- VIEW: TIMELINE (Interactive Guide) -->\n        <section id=\"view-timeline\" class=\"hidden animate-fade-in\">\n            \n            <div class=\"bg-white p-6 rounded-xl card-shadow border border-stone-100 mb-8\">\n                <h2 class=\"text-2xl font-bold text-stone-800 mb-2\">\u5e7c\u9d3f\u80b2\u6210\u6642\u9593\u8ef8<\/h2>\n                <p class=\"text-stone-600\">\n                    \u9ede\u64ca\u4e0b\u65b9\u7684\u9031\u6578\uff0c\u67e5\u770b\u8a72\u968e\u6bb5\u7684\u98fc\u990a\u91cd\u9ede\u3001\u75ab\u82d7\u65bd\u6253\u5efa\u8b70\u53ca\u71df\u990a\u88dc\u5145\u7b56\u7565\u3002\u672c\u8a08\u756b\u6db5\u84cb\u5f9e\u51fa\u6bbc\u81f3\u6bd4\u8cfd\u524d\u7684\u95dc\u937515\u9031\u3002\n                <\/p>\n            <\/div>\n\n            <!-- Timeline Navigator -->\n            <div class=\"mb-8 overflow-x-auto pb-4 custom-scroll\">\n                <div class=\"flex space-x-4 min-w-max px-2\" id=\"timeline-nav\">\n                    <!-- Populated by JS -->\n                <\/div>\n            <\/div>\n\n            <!-- Timeline Detail Content -->\n            <div id=\"timeline-content\" class=\"grid grid-cols-1 lg:grid-cols-3 gap-8\">\n                <!-- Main Info Card -->\n                <div class=\"lg:col-span-2 bg-white rounded-xl card-shadow overflow-hidden\">\n                    <div class=\"bg-stone-600 text-white p-4 flex justify-between items-center\">\n                        <h3 class=\"text-xl font-bold\" id=\"detail-title\">\u7b2c 1 \u9031: \u51fa\u6bbc\u8207\u89c0\u5bdf<\/h3>\n                        <span class=\"bg-stone-500 px-3 py-1 rounded-full text-sm\" id=\"detail-phase\">\u54fa\u4e73\u671f<\/span>\n                    <\/div>\n                    <div class=\"p-6 space-y-6\">\n                        <div>\n                            <h4 class=\"text-stone-800 font-bold flex items-center mb-3\">\n                                <span class=\"text-xl mr-2\">\ud83d\udc89<\/span> \u75ab\u82d7\u8207\u6295\u85e5\n                            <\/h4>\n                            <ul class=\"list-disc list-inside text-stone-600 space-y-2 ml-2\" id=\"detail-meds\">\n                                <!-- JS Content -->\n                            <\/ul>\n                        <\/div>\n                        <div class=\"border-t border-stone-100 pt-4\">\n                            <h4 class=\"text-stone-800 font-bold flex items-center mb-3\">\n                                <span class=\"text-xl mr-2\">\ud83d\udccb<\/span> \u91cd\u9ede\u5de5\u4f5c\n                            <\/h4>\n                            <p class=\"text-stone-600 leading-relaxed\" id=\"detail-desc\">\n                                <!-- JS Content -->\n                            <\/p>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <!-- Side Panel: Nutrition & Environment -->\n                <div class=\"space-y-6\">\n                    <div class=\"bg-emerald-50 p-6 rounded-xl border border-emerald-100\">\n                        <h4 class=\"text-emerald-800 font-bold flex items-center mb-3\">\n                            <span class=\"mr-2\">\ud83e\udd57<\/span> \u71df\u990a\u5efa\u8b70\n                        <\/h4>\n                        <p class=\"text-emerald-700 text-sm leading-relaxed\" id=\"detail-nutrition\">\n                            <!-- JS Content -->\n                        <\/p>\n                    <\/div>\n                    <div class=\"bg-amber-50 p-6 rounded-xl border border-amber-100\">\n                        <h4 class=\"text-amber-800 font-bold flex items-center mb-3\">\n                            <span class=\"mr-2\">\ud83c\udfe0<\/span> \u74b0\u5883\u7ba1\u7406\n                        <\/h4>\n                        <p class=\"text-amber-700 text-sm leading-relaxed\" id=\"detail-env\">\n                            <!-- JS Content -->\n                        <\/p>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/section>\n\n        <!-- VIEW: GENERATOR (Calculator) -->\n        <section id=\"view-generator\" class=\"hidden animate-fade-in\">\n            <div class=\"max-w-4xl mx-auto\">\n                <div class=\"bg-white p-6 rounded-xl card-shadow border border-stone-100 mb-8\">\n                    <h2 class=\"text-2xl font-bold text-stone-800 mb-4\">\u5c08\u5c6c\u75ab\u82d7\u6392\u7a0b\u8a66\u7b97<\/h2>\n                    <p class=\"text-stone-600 mb-6\">\n                        \u8f38\u5165\u5e7c\u9d3f\u7684\u300c\u51fa\u6bbc\u65e5\u671f\u300d\uff0c\u7cfb\u7d71\u5c07\u81ea\u52d5\u63a8\u7b97\u6240\u6709\u95dc\u9375\u75ab\u82d7\u65bd\u6253\u8207\u7528\u85e5\u7684\u6642\u9593\u9ede\u3002\n                    <\/p>\n                    \n                    <div class=\"flex flex-col sm:flex-row gap-4 items-end\">\n                        <div class=\"w-full sm:w-1\/2\">\n                            <label class=\"block text-stone-700 font-bold mb-2\">\u8f38\u5165\u51fa\u6bbc\u65e5\u671f<\/label>\n                            <input type=\"date\" id=\"hatch-date\" class=\"w-full p-3 border border-stone-300 rounded-lg focus:ring-2 focus:ring-stone-400 focus:outline-none bg-stone-50\">\n                        <\/div>\n                        <button onclick=\"generateSchedule()\" class=\"w-full sm:w-auto bg-stone-700 hover:bg-stone-800 text-white font-bold py-3 px-8 rounded-lg transition\">\n                            \u7522\u751f\u6392\u7a0b\u8868\n                        <\/button>\n                    <\/div>\n                <\/div>\n\n                <div id=\"schedule-result\" class=\"hidden\">\n                    <div class=\"flex justify-between items-center mb-4\">\n                        <h3 class=\"text-xl font-bold text-stone-700\">\u5efa\u8b70\u6392\u7a0b\u8868<\/h3>\n                        <button onclick=\"window.print()\" class=\"text-stone-500 hover:text-stone-800 text-sm underline\">\u5217\u5370\u6b64\u8868<\/button>\n                    <\/div>\n                    <div class=\"bg-white rounded-xl shadow overflow-hidden border border-stone-200\">\n                        <div class=\"overflow-x-auto\">\n                            <table class=\"w-full text-left border-collapse\">\n                                <thead>\n                                    <tr class=\"bg-stone-100 text-stone-600 text-sm uppercase tracking-wider\">\n                                        <th class=\"p-4 border-b\">\u65e5\u671f<\/th>\n                                        <th class=\"p-4 border-b\">\u9d3f\u9f61<\/th>\n                                        <th class=\"p-4 border-b\">\u9805\u76ee\u985e\u5225<\/th>\n                                        <th class=\"p-4 border-b\">\u57f7\u884c\u5167\u5bb9<\/th>\n                                    <\/tr>\n                                <\/thead>\n                                <tbody id=\"schedule-body\" class=\"text-stone-700 divide-y divide-stone-100\">\n                                    <!-- Populated by JS -->\n                                <\/tbody>\n                            <\/table>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/section>\n\n    <\/main>\n\n    <!-- Footer -->\n    <footer class=\"bg-stone-800 text-stone-400 py-8 mt-12\">\n        <div class=\"container mx-auto px-4 text-center\">\n            <p class=\"mb-2\">\u8cfd\u9d3f\u5e7c\u9d3f\u80b2\u6210\u8207\u5065\u5eb7\u9632\u8b77\u8a08\u756b SPA<\/p>\n            <p class=\"text-xs text-stone-500\">\n                \u514d\u8cac\u8072\u660e\uff1a\u672c\u5de5\u5177\u50c5\u4f9b\u53c3\u8003\uff0c\u5be6\u969b\u7528\u85e5\u8207\u75ab\u82d7\u8a08\u756b\u8acb\u8aee\u8a62\u5c08\u696d\u7378\u91ab\u5e2b\u3002<br>\n                \u5404\u5730\u5340\u6d41\u884c\u75c5\u682a\u4e0d\u540c\uff0c\u8acb\u4f9d\u64da\u7576\u5730\u7378\u91ab\u5efa\u8b70\u8abf\u6574\u3002\n            <\/p>\n        <\/div>\n    <\/footer>\n\n    <!-- Visualization & Content Choices:\n         1. Immunity Chart (Line): Shows 'Maternal Antibody' (decaying curve) vs. 'Vaccine Immunity' (rising steps).\n            Goal: Explain 'Why' we vaccinate at specific times.\n            Library: Chart.js (Canvas).\n         2. Risk Chart (Bar\/Mixed): Categories of diseases (Resp, Digestive, Viral) mapped against Age.\n            Goal: Highlight when to watch for specific symptoms.\n            Library: Chart.js (Canvas).\n         3. Timeline (DOM Manipulation): Chosen over a chart for the schedule to allow rich text\/HTML content (lists, formatting) which is hard in canvas.\n         4. Schedule Generator (JS Logic): Simple date math. Provides high utility value to the user.\n    -->\n    <!-- CONFIRMATION: NO SVG graphics used. NO Mermaid JS used. -->\n\n    <script>\n        \/\/ --- DATA STORE ---\n\n        \/\/ Palette colors for charts\n        const colors = {\n            maternal: '#9ca3af', \/\/ Gray 400\n            active: '#10b981',   \/\/ Emerald 500\n            danger: '#ef4444',   \/\/ Red 500\n            riskResp: '#60a5fa', \/\/ Blue 400\n            riskDigest: '#fbbf24', \/\/ Amber 400\n            riskViral: '#a8a29e'   \/\/ Stone 400\n        };\n\n        const diseases = [\n            {\n                name: \"\u5df4\u62c9\u7c73\u54e5 (Paramyxovirus)\",\n                type: \"\u75c5\u6bd2\u6027\",\n                symptoms: \"\u626d\u9838\u3001\u6c34\u4fbf\u3001\u795e\u7d93\u75c7\u72c0\u3001\u98f2\u6c34\u91cf\u5927\u589e\",\n                prevention: \"\u5fc5\u9808\u65bd\u6253\u75ab\u82d7 (\u6b7b\u6bd2\/\u6d3b\u6bd2)\",\n                treatment: \"\u7121\u7279\u6548\u85e5\uff0c\u652f\u6301\u7642\u6cd5\uff0c\u88dc\u5145\u96fb\u89e3\u8cea\",\n                icon: \"\ud83e\udda0\"\n            },\n            {\n                name: \"\u6c99\u9580\u6c0f\u83cc (Salmonella)\",\n                type: \"\u7d30\u83cc\u6027\",\n                symptoms: \"\u95dc\u7bc0\u816b\u5927\u3001\u5782\u7fc5\u3001\u7da0\u8272\u9ecf\u4fbf\u3001\u9ad4\u91cd\u4e0b\u964d\",\n                prevention: \"\u74b0\u5883\u4e7e\u71e5\u6e05\u6f54\u3001\u6e1b\u5c11\u7dca\u8feb\u3001\u9810\u9632\u6295\u85e5\",\n                treatment: \"\u6297\u751f\u7d20\u6cbb\u7642 (\u9700\u505a\u654f\u611f\u6027\u6e2c\u8a66)\",\n                icon: \"\ud83e\uddea\"\n            },\n            {\n                name: \"\u9d3f\u75d8 (Pigeon Pox)\",\n                type: \"\u75c5\u6bd2\u6027\",\n                symptoms: \"\u5599\u90e8\u3001\u773c\u77bc\u51fa\u73fe\u75d8\u75c2 (\u76ae\u819a\u578b)\uff1b\u53e3\u8154\u9ec3\u819c (\u767d\u5589\u578b)\",\n                prevention: \"\u5e7c\u9d3f\u671f\u63a5\u7a2e\u9d3f\u75d8\u75ab\u82d7\u3001\u9632\u868a\",\n                treatment: \"\u5857\u62b9\u7898\u9152\uff0c\u9810\u9632\u4e8c\u6b21\u611f\u67d3\",\n                icon: \"\ud83e\udd9f\"\n            },\n            {\n                name: \"\u6bdb\u6ef4\u87f2 (Trichomoniasis)\",\n                type: \"\u539f\u87f2\",\n                symptoms: \"\u53e3\u8154\u5167\u8d77\u53f8\u72c0\u9ec3\u584a\u3001\u98f2\u6c34\u56f0\u96e3\u3001\u9ed1\u9f3b\u982d\",\n                prevention: \"\u5b9a\u671f\u6574\u7406\u3001\u7a2e\u9d3f\u914d\u5c0d\u524d\u6e05\u7406\",\n                treatment: \"\u6bdb\u6ef4\u87f2\u5c08\u7528\u85e5\u7269\",\n                icon: \"\ud83d\udfe1\"\n            },\n            {\n                name: \"\u7403\u87f2 (Coccidiosis)\",\n                type: \"\u539f\u87f2\",\n                symptoms: \"\u8840\u4fbf\u3001\u6c34\u4fbf\u3001\u7fbd\u6bdb\u84ec\u9b06\u3001\u98df\u617e\u4e0d\u632f\",\n                prevention: \"\u4fdd\u6301\u9d3f\u820d\u4e7e\u71e5\u3001\u907f\u514d\u7cde\u4fbf\u6c61\u67d3\u98fc\u6599\",\n                treatment: \"\u7403\u87f2\u6cbb\u7642\u5291 (\u78fa\u80fa\u5291\u985e)\",\n                icon: \"\ud83d\udca7\"\n            },\n            {\n                name: \"\u817a\u75c5\u6bd2 (Adenovirus)\",\n                type: \"\u75c5\u6bd2\u6027\",\n                symptoms: \"\u5927\u91cf\u5614\u5410\u3001\u7da0\u8272\u6c34\u4fbf\u3001\u55c9\u56ca\u7a4d\u6c34 (\u6f32\u6b78)\",\n                prevention: \"\u907f\u514d\u8a13\u98db\u7dca\u8feb\u3001\u63d0\u5347\u514d\u75ab\u529b\",\n                treatment: \"\u7981\u98df\u7981\u6c3424-48\u5c0f\u6642\uff0c\u9010\u6b65\u6062\u5fa9\u4f9b\u6c34\",\n                icon: \"\ud83e\udd2e\"\n            }\n        ];\n\n        const timelineData = [\n            {\n                week: 1,\n                title: \"\u51fa\u6bbc\u7b2c 1-7 \u5929 (\u639b\u74b0)\",\n                phase: \"\u54fa\u4e73\u671f\",\n                meds: [\"\u6aa2\u8996\u81cd\u5e36\u662f\u5426\u4e7e\u71e5\", \"\u7121\u9700\u7279\u5225\u6295\u85e5\uff0c\u4f9d\u9760\u9d3f\u4e73\u514d\u75ab\"],\n                desc: \"\u96db\u9d3f\u525b\u51fa\u6bbc\uff0c\u4f9d\u8cf4\u89aa\u9d3f\u9d3f\u4e73\u3002\u91cd\u9ede\u5728\u65bc\u89c0\u5bdf\u81cd\u5e36\u7652\u5408\u72c0\u6cc1\u53ca\u89aa\u9d3f\u7684\u5065\u5eb7\u3002\u7d04\u7b2c 5-7 \u5929\u639b\u8173\u74b0\u3002\",\n                nutrition: \"\u89aa\u9d3f\u98fc\u6599\u9700\u71df\u990a\u5747\u8861\uff0c\u5bcc\u542b\u86cb\u767d\u8cea\u3002\",\n                env: \"\u4fdd\u6301\u5de2\u7bb1\u4e7e\u71e5\u6eab\u6696\uff0c\u907f\u514d\u8cca\u98a8\u3002\"\n            },\n            {\n                week: 2,\n                title: \"\u51fa\u6bbc\u7b2c 8-14 \u5929 (\u5feb\u901f\u6210\u9577)\",\n                phase: \"\u54fa\u4e73\u671f\",\n                meds: [\"\u88dc\u5145\u9223\u3001\u78f7\u3001\u7926\u7269\u8cea\", \"\u6ce8\u610f\u6bdb\u6ef4\u87f2\u9810\u9632 (\u8996\u89aa\u9d3f\u72c0\u6cc1)\"],\n                desc: \"\u7fbd\u6bdb\u7ba1\u958b\u59cb\u7206\u51fa\uff0c\u9aa8\u9abc\u767c\u80b2\u95dc\u9375\u671f\u3002\u82e5\u89aa\u9d3f\u672a\u505a\u6574\u7406\uff0c\u6b64\u6642\u5e7c\u9d3f\u6613\u53d7\u6bdb\u6ef4\u87f2\u5782\u76f4\u611f\u67d3\u3002\",\n                nutrition: \"\u589e\u52a0\u7926\u7269\u8cea\u88dc\u5145\u3002\",\n                env: \"\u6bcf\u65e5\u6e05\u7406\u5de2\u7bb1\u7cde\u4fbf\uff0c\u9632\u6b62\u6f6e\u6fd5\u6ecb\u751f\u7d30\u83cc\u3002\"\n            },\n            {\n                week: 3,\n                title: \"\u51fa\u6bbc\u7b2c 15-21 \u5929 (\u96e2\u5de2\u6e96\u5099)\",\n                phase: \"\u96e2\u5de2\u904e\u6e21\",\n                meds: [\"<b>\u75ab\u82d7\u63a5\u7a2e\uff1a<\/b> \u5df4\u62c9\u7c73\u54e5 (\u7b2c1\u5291\uff0c\u6b7b\u6bd2\u76ae\u4e0b\u6ce8\u5c04)\", \"<b>\u75ab\u82d7\u63a5\u7a2e\uff1a<\/b> \u9d3f\u75d8\u75ab\u82d7 (\u523a\u91dd\u6216\u5857\u62b9)\"],\n                desc: \"\u6b64\u968e\u6bb5\u6bcd\u6e90\u6297\u9ad4\u958b\u59cb\u4e0b\u964d\uff0c\u5fc5\u9808\u63a5\u7a2e\u7b2c\u4e00\u5291\u5df4\u62c9\u7c73\u54e5\u75ab\u82d7\u3002\u540c\u6642\u9032\u884c\u9d3f\u75d8\u63a5\u7a2e\u3002\u6e96\u5099\u79fb\u51fa\u9078\u624b\u9d3f\u820d\u3002\",\n                nutrition: \"\u6559\u5c0e\u7368\u7acb\u5544\u98df\uff0c\u4f9b\u7d66\u5c0f\u9846\u7c92\u98fc\u6599\u3002\",\n                env: \"\u79fb\u5165\u5e7c\u9d3f\u6ae5\uff0c\u6559\u5c0e\u98f2\u6c34\u3002\"\n            },\n            {\n                week: 4,\n                title: \"\u51fa\u6bbc\u7b2c 22-28 \u5929 (\u7368\u7acb\u751f\u6d3b)\",\n                phase: \"\u6559\u4e56\u671f\",\n                meds: [\"\u6bdb\u6ef4\u87f2\u9810\u9632\u6574\u7406 (3\u5929)\", \"\u7403\u87f2\u9810\u9632\u6574\u7406 (3\u5929)\"],\n                desc: \"\u5b8c\u5168\u65b7\u4e73\u3002\u56e0\u96e2\u5de2\u7dca\u8feb\uff0c\u514d\u75ab\u529b\u4e0b\u964d\uff0c\u9700\u9032\u884c\u7b2c\u4e00\u6b21\u5b8c\u6574\u7684\u6bdb\u6ef4\u87f2\u8207\u7403\u87f2\u6574\u7406\u3002\u958b\u59cb\u6559\u4e56\u8a8d\u6ae5\u3002\",\n                nutrition: \"\u98fc\u6599\u6dfb\u52a0\u6d88\u5316\u9175\u7d20\u3001\u5564\u9152\u9175\u6bcd\u3002\",\n                env: \"\u77ad\u671b\u53f0\u8a13\u7df4\uff0c\u719f\u6089\u5468\u906d\u74b0\u5883\u3002\"\n            },\n            {\n                week: 5,\n                title: \"\u51fa\u6bbc\u7b2c 29-35 \u5929 (\u75ab\u82d7\u88dc\u5f37)\",\n                phase: \"\u6559\u4e56\u671f\",\n                meds: [\"<b>\u75ab\u82d7\u63a5\u7a2e\uff1a<\/b> \u5df4\u62c9\u7c73\u54e5 (\u7b2c2\u5291\uff0c\u9ede\u773c\/\u9ede\u9f3b\u6d3b\u6bd2)\", \"\u8178\u9053\u6574\u5065 (\u76ca\u751f\u83cc)\"],\n                desc: \"\u65bd\u6253\u7b2c2\u5291\u5df4\u62c9\u7c73\u54e5(\u6216\u6c99\u9580\u6c0f\u83cc\u75ab\u82d7)\uff0c\u5efa\u7acb\u5805\u5f37\u514d\u75ab\u9632\u7dda\u3002\u75ab\u82d7\u5f8c\u9700\u88dc\u5145\u591a\u7dad\u4ed6\u547d\u3002\",\n                nutrition: \"\u6e05\u6de1\u98fc\u6599\uff0c\u6e1b\u8f15\u5167\u81df\u8ca0\u64d4\u3002\",\n                env: \"\u958b\u59cb\u77ed\u6642\u9593\u820d\u5916\u6d3b\u52d5\u3002\"\n            },\n            {\n                week: 6,\n                title: \"\u51fa\u6bbc\u7b2c 36-42 \u5929 (\u63db\u7fbd\u958b\u59cb)\",\n                phase: \"\u63db\u7fbd\u671f\",\n                meds: [\"\u547c\u5438\u9053\u6e05\u7406 (\u9810\u9632\u9ef4\u6f3f\u83cc)\", \"\u88dc\u5145\u63db\u7fbd\u7dad\u4ed6\u547d\"],\n                desc: \"\u5e7c\u9d3f\u958b\u59cb\u66f4\u63db\u9ad4\u6bdb\u3002\u6b64\u6642\u547c\u5438\u9053\u654f\u611f\uff0c\u9700\u6ce8\u610f\u547c\u5438\u9053\u611f\u67d3\u3002\u89c0\u5bdf\u662f\u5426\u6709\u55ae\u773c\u50b7\u98a8\u75c7\u72c0\u3002\",\n                nutrition: \"\u589e\u52a0\u6cb9\u6599\u4f5c\u7269\u6bd4\u4f8b (\u4e9e\u9ebb\u4ec1\u3001\u6cb9\u83dc\u7c7d) \u5e6b\u52a9\u63db\u7fbd\u3002\",\n                env: \"\u589e\u52a0\u6d17\u6fa1\u983b\u7387\uff0c\u4fc3\u9032\u63db\u7fbd\u3002\"\n            },\n            {\n                week: 8,\n                title: \"\u51fa\u6bbc\u7b2c 8-9 \u9031 (\u820d\u64cd\u8a13\u7df4)\",\n                phase: \"\u8a13\u7df4\u671f\",\n                meds: [\"\u9ad4\u5167\u87f2\u9a45\u9664 (\u86d4\u87f2\u3001\u7d5b\u87f2)\", \"\u5b9a\u671f\u547c\u5438\u9053\u4fdd\u990a\"],\n                desc: \"\u958b\u59cb\u5f37\u5236\u820d\u64cd\u98db\u884c\u3002\u9ad4\u80fd\u6d88\u8017\u5927\uff0c\u9700\u78ba\u8a8d\u9ad4\u5167\u7121\u5bc4\u751f\u87f2\u5e72\u64fe\u5438\u6536\u3002\",\n                nutrition: \"\u9ad8\u86cb\u767d\u98fc\u6599\u652f\u6301\u808c\u8089\u767c\u80b2\u3002\",\n                env: \"\u89c0\u5bdf\u98db\u884c\u610f\u9858\u8207\u6b78\u5de2\u901f\u5ea6\u3002\"\n            },\n            {\n                week: 12,\n                title: \"\u51fa\u6bbc\u7b2c 12 \u9031 (\u5916\u8a13\u6e96\u5099)\",\n                phase: \"\u5916\u8a13\u671f\",\n                meds: [\"<b>\u75ab\u82d7\u63a5\u7a2e\uff1a<\/b> \u5df4\u62c9\u7c73\u54e5 (\u7b2c3\u5291\u88dc\u5f37\uff0c\u8996\u8cfd\u5236)\", \"\u7e3d\u6574\u7406 (\u547c\u5438\u9053\/\u8178\u9053\/\u6bdb\u6ef4\u87f2)\"],\n                desc: \"\u6e96\u5099\u9032\u5165\u5916\u8a13\u63d2\u65d7\u3002\u9032\u884c\u6bd4\u8cfd\u524d\u7684\u7e3d\u9ad4\u6aa2\u8207\u7e3d\u6574\u7406\u3002\u78ba\u4fdd\u547c\u5438\u9053\u6975\u5ea6\u4e7e\u6de8\u3002\",\n                nutrition: \"\u4f9d\u98db\u884c\u8ddd\u96e2\u8abf\u6574\u78b3\u6c34\u5316\u5408\u7269\u6bd4\u4f8b\u3002\",\n                env: \"\u56b4\u683c\u57f7\u884c\u75be\u75c5\u9694\u96e2\u8207\u751f\u7269\u5b89\u5168\u3002\"\n            }\n        ];\n\n        \/\/ --- APP LOGIC ---\n\n        \/\/ State\n        let currentTab = 'dashboard';\n        let currentWeekIndex = 0;\n\n        \/\/ Init\n        document.addEventListener('DOMContentLoaded', () => {\n            renderCharts();\n            renderTimelineNav();\n            renderTimelineDetail(0);\n            renderDiseaseGrid();\n            \n            \/\/ Set default date to today\n            document.getElementById('hatch-date').valueAsDate = new Date();\n        });\n\n        \/\/ Navigation Logic\n        function switchTab(tabId) {\n            \/\/ Hide all views\n            ['dashboard', 'timeline', 'generator'].forEach(id => {\n                document.getElementById(`view-${id}`).classList.add('hidden');\n                document.getElementById(`nav-${id}`).classList.remove('active');\n            });\n            \n            \/\/ Show selected view\n            document.getElementById(`view-${tabId}`).classList.remove('hidden');\n            \n            \/\/ Mobile Nav Handling\n            if(window.innerWidth >= 768) {\n                document.getElementById(`nav-${tabId}`).classList.add('active');\n            } else {\n                 document.getElementById('mobile-menu').classList.add('hidden');\n            }\n\n            \/\/ Force chart resize check if entering dashboard\n            if(tabId === 'dashboard') {\n                window.dispatchEvent(new Event('resize'));\n            }\n        }\n\n        function toggleMobileMenu() {\n            const menu = document.getElementById('mobile-menu');\n            menu.classList.toggle('hidden');\n        }\n\n        \/\/ --- DASHBOARD: CHARTS ---\n\n        function renderCharts() {\n            \/\/ 1. Immunity Gap Chart\n            const ctxImmunity = document.getElementById('immunityChart').getContext('2d');\n            new Chart(ctxImmunity, {\n                type: 'line',\n                data: {\n                    labels: ['W1', 'W2', 'W3', 'W4', 'W5', 'W6', 'W7', 'W8', 'W9', 'W10'],\n                    datasets: [\n                        {\n                            label: '\u6bcd\u6e90\u6297\u9ad4 (\u88ab\u52d5)',\n                            data: [100, 90, 60, 30, 15, 5, 0, 0, 0, 0],\n                            borderColor: colors.maternal,\n                            backgroundColor: 'rgba(156, 163, 175, 0.1)',\n                            fill: true,\n                            tension: 0.4,\n                            pointRadius: 0\n                        },\n                        {\n                            label: '\u81ea\u8eab\u6297\u9ad4 (\u75ab\u82d7\u8a98\u5c0e)',\n                            data: [0, 0, 5, 20, 50, 75, 85, 90, 95, 92],\n                            borderColor: colors.active,\n                            backgroundColor: 'rgba(16, 185, 129, 0.1)',\n                            fill: true,\n                            tension: 0.4\n                        },\n                        {\n                            label: '\u5371\u96aa\u7a7a\u7a97\u671f',\n                            data: [null, null, 40, 45, 30, null, null, null, null, null],\n                            borderColor: 'transparent',\n                            backgroundColor: 'rgba(239, 68, 68, 0.2)', \/\/ Red highlight\n                            fill: true,\n                            pointRadius: 0\n                        }\n                    ]\n                },\n                options: {\n                    responsive: true,\n                    maintainAspectRatio: false,\n                    plugins: {\n                        legend: { position: 'bottom' },\n                        tooltip: {\n                            callbacks: {\n                                label: function(context) {\n                                    if(context.dataset.label === '\u5371\u96aa\u7a7a\u7a97\u671f') return '\u9ad8\u611f\u67d3\u98a8\u96aa\u5340';\n                                    return context.dataset.label + ': ' + context.raw + '%';\n                                }\n                            }\n                        }\n                    },\n                    scales: {\n                        y: { title: { display: true, text: '\u6297\u9ad4\u529b\u50f9 %' }, max: 100 },\n                        x: { title: { display: true, text: '\u9d3f\u9f61 (\u9031)' } }\n                    }\n                }\n            });\n\n            \/\/ 2. Risk Distribution Chart\n            const ctxRisk = document.getElementById('riskChart').getContext('2d');\n            new Chart(ctxRisk, {\n                type: 'bar',\n                data: {\n                    labels: ['\u54fa\u4e73\u671f', '\u96e2\u5de2\u671f', '\u6559\u4e56\u671f', '\u63db\u7fbd\u671f', '\u5916\u8a13\u671f'],\n                    datasets: [\n                        {\n                            label: '\u6d88\u5316\u9053\u75be\u75c5 (\u6c99\u9580\u6c0f\u83cc\/\u7403\u87f2)',\n                            data: [20, 80, 60, 30, 40],\n                            backgroundColor: colors.riskDigest\n                        },\n                        {\n                            label: '\u547c\u5438\u9053\u75be\u75c5 (\u9ef4\u6f3f\u83cc)',\n                            data: [10, 20, 40, 70, 80],\n                            backgroundColor: colors.riskResp\n                        },\n                        {\n                            label: '\u75c5\u6bd2\u6027\u75be\u75c5 (\u817a\u75c5\u6bd2\/\u9d3f\u75d8)',\n                            data: [5, 30, 90, 50, 20],\n                            backgroundColor: colors.riskViral\n                        }\n                    ]\n                },\n                options: {\n                    responsive: true,\n                    maintainAspectRatio: false,\n                    scales: {\n                        x: { stacked: true },\n                        y: { stacked: true, title: { display: true, text: '\u767c\u75c5\u76f8\u5c0d\u98a8\u96aa\u6307\u6578' } }\n                    },\n                    plugins: {\n                        legend: { position: 'bottom' }\n                    }\n                }\n            });\n        }\n\n        \/\/ --- DASHBOARD: DISEASE GRID ---\n        function renderDiseaseGrid() {\n            const grid = document.getElementById('disease-grid');\n            grid.innerHTML = diseases.map(d => `\n                <div class=\"bg-white p-5 rounded-lg border border-stone-200 hover:shadow-md transition\">\n                    <div class=\"flex justify-between items-start mb-3\">\n                        <h4 class=\"font-bold text-lg text-stone-800\">${d.icon} ${d.name}<\/h4>\n                        <span class=\"text-xs px-2 py-1 bg-stone-100 text-stone-600 rounded\">${d.type}<\/span>\n                    <\/div>\n                    <div class=\"space-y-2 text-sm text-stone-600\">\n                        <p><strong class=\"text-stone-800\">\u75c7\u72c0\uff1a<\/strong> ${d.symptoms}<\/p>\n                        <p><strong class=\"text-stone-800\">\u9810\u9632\uff1a<\/strong> ${d.prevention}<\/p>\n                        <p><strong class=\"text-stone-800\">\u5c0d\u7b56\uff1a<\/strong> ${d.treatment}<\/p>\n                    <\/div>\n                <\/div>\n            `).join('');\n        }\n\n        \/\/ --- TIMELINE LOGIC ---\n\n        function renderTimelineNav() {\n            const nav = document.getElementById('timeline-nav');\n            nav.innerHTML = timelineData.map((d, index) => `\n                <button \n                    onclick=\"renderTimelineDetail(${index})\" \n                    class=\"timeline-node min-w-[100px] p-3 rounded-lg border border-stone-200 bg-white text-center cursor-pointer ${index === 0 ? 'active border-stone-500 bg-stone-500 text-white' : 'text-stone-600 hover:bg-stone-50'}\"\n                    id=\"node-${index}\"\n                >\n                    <div class=\"text-xs opacity-70\">W${d.week}<\/div>\n                    <div class=\"font-bold text-sm truncate\">${d.title.split(' ')[0]}<\/div>\n                <\/button>\n            `).join('');\n        }\n\n        function renderTimelineDetail(index) {\n            currentWeekIndex = index;\n            const data = timelineData[index];\n\n            \/\/ Update Nav Styles\n            document.querySelectorAll('.timeline-node').forEach((btn, idx) => {\n                if(idx === index) {\n                    btn.classList.add('active', 'bg-stone-500', 'text-white', 'border-stone-500');\n                    btn.classList.remove('text-stone-600', 'hover:bg-stone-50', 'bg-white');\n                } else {\n                    btn.classList.remove('active', 'bg-stone-500', 'text-white', 'border-stone-500');\n                    btn.classList.add('text-stone-600', 'hover:bg-stone-50', 'bg-white');\n                }\n            });\n\n            \/\/ Update Content with animation reset\n            const container = document.getElementById('timeline-content');\n            \n            document.getElementById('detail-title').innerText = data.title;\n            document.getElementById('detail-phase').innerText = data.phase;\n            document.getElementById('detail-desc').innerText = data.desc;\n            document.getElementById('detail-nutrition').innerText = data.nutrition;\n            document.getElementById('detail-env').innerText = data.env;\n            \n            const medsList = document.getElementById('detail-meds');\n            medsList.innerHTML = data.meds.map(m => `<li>${m}<\/li>`).join('');\n        }\n\n        \/\/ --- GENERATOR LOGIC ---\n\n        function generateSchedule() {\n            const dateInput = document.getElementById('hatch-date').value;\n            if(!dateInput) {\n                alert(\"\u8acb\u9078\u64c7\u51fa\u6bbc\u65e5\u671f\");\n                return;\n            }\n\n            const hatchDate = new Date(dateInput);\n            const tbody = document.getElementById('schedule-body');\n            tbody.innerHTML = '';\n\n            \/\/ Flatten logic from timelineData to generate rows\n            timelineData.forEach(weekData => {\n                \/\/ Approximate days based on week number (W1=Day 7, W3=Day 21)\n                const daysOffset = (weekData.week * 7) - 6; \/\/ Start of that week\n                const targetDate = new Date(hatchDate);\n                targetDate.setDate(hatchDate.getDate() + daysOffset);\n                \n                const dateStr = targetDate.toLocaleDateString('zh-TW', {month: '2-digit', day: '2-digit'});\n\n                \/\/ Meds rows\n                weekData.meds.forEach(med => {\n                    const row = `\n                        <tr class=\"hover:bg-stone-50 transition\">\n                            <td class=\"p-4 border-b font-mono text-stone-500\">${dateStr}<\/td>\n                            <td class=\"p-4 border-b font-bold text-stone-700\">\u7b2c ${weekData.week} \u9031<\/td>\n                            <td class=\"p-4 border-b\"><span class=\"bg-blue-100 text-blue-800 text-xs px-2 py-1 rounded\">\u91ab\u7642<\/span><\/td>\n                            <td class=\"p-4 border-b\">${med}<\/td>\n                        <\/tr>\n                    `;\n                    tbody.innerHTML += row;\n                });\n\n                \/\/ Nutrition row (Summary)\n                const nutRow = `\n                     <tr class=\"hover:bg-stone-50 transition\">\n                        <td class=\"p-4 border-b font-mono text-stone-500\">${dateStr}<\/td>\n                        <td class=\"p-4 border-b font-bold text-stone-700\">\u7b2c ${weekData.week} \u9031<\/td>\n                        <td class=\"p-4 border-b\"><span class=\"bg-green-100 text-green-800 text-xs px-2 py-1 rounded\">\u7ba1\u7406<\/span><\/td>\n                        <td class=\"p-4 border-b text-stone-500 text-sm\">${weekData.nutrition}<\/td>\n                    <\/tr>\n                `;\n                tbody.innerHTML += nutRow;\n            });\n\n            document.getElementById('schedule-result').classList.remove('hidden');\n            \n            \/\/ Scroll to result\n            document.getElementById('schedule-result').scrollIntoView({ behavior: 'smooth' });\n        }\n\n        \/\/ Utility\n        function scrollToId(id) {\n            document.getElementById(id).scrollIntoView({ behavior: 'smooth' });\n        }\n\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>\u8a72\u8a08\u756b\u5c08\u6ce8\u65bc\u5e7c\u9d3f\u7684\u5065\u5eb7\u7ba1\u7406\uff0c\u5f37\u8abf\u79d1\u5b78\u5316\u98fc\u990a\u548c\u7cbe\u6e96\u75ab\u82d7\u63a5\u7a2e\u3002\u6578\u64da\u5100\u8868\u677f\u5c55\u793a\u5e7c\u9d3f\u6210\u9577\u4e2d\u7684\u514d\u75ab\u529b\u8b8a\u5316\u8207\u75be\u75c5\u98a8\u96aa\uff0c\u4e26\u63d0\u4f9b\u5f9e\u51fa\u6bbc\u5230\u6bd4\u8cfd\u524d\u7684\u8a73\u7d30\u80b2\u6210\u8a08\u756b\u548c\u75ab\u82d7\u5efa\u8b70\uff0c\u4ee5\u78ba\u4fdd\u5065\u5eb7\u8207\u7af6\u8cfd\u8868\u73fe\u3002<\/p>\n","protected":false},"author":2,"featured_media":2762,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[142],"tags":[145,146],"class_list":["post-2761","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-142","tag-145","tag-146"],"jetpack_featured_media_url":"https:\/\/www.3546.com.tw\/win\/wp-content\/uploads\/2025\/12\/134416.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.3546.com.tw\/win\/wp-json\/wp\/v2\/posts\/2761","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.3546.com.tw\/win\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.3546.com.tw\/win\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.3546.com.tw\/win\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.3546.com.tw\/win\/wp-json\/wp\/v2\/comments?post=2761"}],"version-history":[{"count":1,"href":"https:\/\/www.3546.com.tw\/win\/wp-json\/wp\/v2\/posts\/2761\/revisions"}],"predecessor-version":[{"id":2763,"href":"https:\/\/www.3546.com.tw\/win\/wp-json\/wp\/v2\/posts\/2761\/revisions\/2763"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.3546.com.tw\/win\/wp-json\/wp\/v2\/media\/2762"}],"wp:attachment":[{"href":"https:\/\/www.3546.com.tw\/win\/wp-json\/wp\/v2\/media?parent=2761"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.3546.com.tw\/win\/wp-json\/wp\/v2\/categories?post=2761"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.3546.com.tw\/win\/wp-json\/wp\/v2\/tags?post=2761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}