houguyin-ch3-fit.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. // 江中猴菇饮 · Ch3 猴菇饮的机会(4 子章)
  2. // 3.1 机会① · PPI减量的温和伴侣
  3. // 3.2 机会② · 中成药新代际替代
  4. // 3.3 机会③ · 功能食品OTC信任升级 × 米稀借力
  5. // 3.4 战略坐标 · 无人地带 × 机会规模总览
  6. const HGY = require('./houguyin-analyze.js');
  7. const C = require('./houguyin-components.js');
  8. const { BRAND, esc, renderVocCard, renderVocGrid, renderInsightHero, renderDecisionList, renderTheoryBox, renderTagCloud, renderStatStrip, renderBarChart, renderMatrix2x2, renderSectionHead } = C;
  9. // ================================================================
  10. // 3.1 · 机会① · PPI减量的温和伴侣
  11. // ================================================================
  12. function renderSub3_1(ctx) {
  13. const { chapter: c, subIdx, slideNum, slideTotal, data } = ctx;
  14. const items = data.items || [];
  15. const h4Voc = HGY.getEvidence(items, { hypothesis: 'H4', top: 6, seed: 61 });
  16. const finalVoc = h4Voc.length >= 4 ? h4Voc : HGY.getEvidence(items, { hypothesis: 'H3', top: 6, seed: 67 });
  17. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  18. <div class="section-inner">
  19. ${renderSectionHead({
  20. eyebrow: `${c.num}.${subIdx} · 机会①`,
  21. title: 'PPI 减量的<span style="color:' + BRAND.JIANG_GREEN + ';">温和伴侣</span> · 接住"想停药但不敢停"',
  22. subtitle: 'Ch2 揭示 PPI 层最大的未满足需求 = "减量期无过渡方案"。猴菇饮 OTC 如何精准接住这个需求?',
  23. color: BRAND.JIANG_GREEN,
  24. })}
  25. <div class="grid" style="grid-template-columns:1fr 1fr; gap:24px; margin-top:24px;">
  26. <div style="padding:26px 28px; background:${BRAND.CORAL}08; border:1px solid ${BRAND.CORAL}30; border-radius:var(--radius-md);">
  27. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.2em; margin-bottom:14px; font-weight:700;">用户痛点 · Ch2 识别</div>
  28. <div style="display:flex; flex-direction:column; gap:12px;">
  29. <div style="color:var(--text-1); font-size:0.92rem; line-height:1.7;">
  30. <strong style="color:${BRAND.CORAL};">2000 万</strong>长期 PPI 用户中,约 <strong>30%</strong> 有明确的减量/替代意愿。<br/>
  31. 他们的核心焦虑:<br/>
  32. <strong>① 停药反弹</strong>(40-60% 经历)<br/>
  33. <strong>② 长期副作用</strong>(骨质疏松/B12缺乏)<br/>
  34. <strong>③ 无过渡方案</strong>(医生说减量但没给替代)
  35. </div>
  36. </div>
  37. </div>
  38. <div style="padding:26px 28px; background:${BRAND.JIANG_GREEN}08; border:1px solid ${BRAND.JIANG_GREEN}30; border-radius:var(--radius-md);">
  39. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.2em; margin-bottom:14px; font-weight:700;">猴菇饮如何接住</div>
  40. <div style="display:flex; flex-direction:column; gap:12px;">
  41. <div style="color:var(--text-1); font-size:0.92rem; line-height:1.7;">
  42. <strong style="color:${BRAND.JIANG_GREEN};">定位</strong>:不是"替代拉唑",是<strong>"减量期间的温和伴侣"</strong><br/>
  43. <strong style="color:${BRAND.JIANG_GREEN};">话术</strong>:规避医疗宣称,只做"PPI 减量日记的伴随饮"<br/>
  44. <strong style="color:${BRAND.JIANG_GREEN};">机制</strong>:猴头菇多糖的黏膜保护 + OTC 身份的安全感<br/>
  45. <strong style="color:${BRAND.JIANG_GREEN};">场景</strong>:PPI 减半时同步服用,心理安慰 + 物理保护
  46. </div>
  47. </div>
  48. </div>
  49. </div>
  50. <div style="margin-top:24px;">
  51. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC 证据 · PPI 用户寻找替代方案的真实声音</div>
  52. ${renderVocGrid(finalVoc, { accent: BRAND.JIANG_GREEN, columns: 3 })}
  53. </div>
  54. <div style="margin-top:24px; padding:22px 26px; background:linear-gradient(135deg, ${BRAND.JIANG_GREEN}0A, ${BRAND.TECH_BLUE}06); border:1px solid ${BRAND.JIANG_GREEN}33; border-radius:var(--radius-md);">
  55. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">机会规模预估</div>
  56. <div class="grid" style="grid-template-columns:repeat(4, 1fr); gap:16px;">
  57. ${[
  58. { label: 'PPI 长期用户', num: '~2000万', color: BRAND.TECH_BLUE },
  59. { label: '有替代意愿', num: '~600万', color: BRAND.WARM_ORANGE },
  60. { label: '日均消费力', num: '12-15元', color: BRAND.HOUGU_TAN },
  61. { label: '年市场潜力', num: '26-33亿', color: BRAND.JIANG_GREEN },
  62. ].map((s) => `
  63. <div style="text-align:center;">
  64. <div style="color:${s.color}; font-family:var(--font-head); font-weight:900; font-size:1.5rem;">${esc(s.num)}</div>
  65. <div style="color:var(--text-2); font-size:0.78rem; margin-top:4px;">${esc(s.label)}</div>
  66. </div>`).join('')}
  67. </div>
  68. </div>
  69. ${renderInsightHero({
  70. eyebrow: 'OPPORTUNITY #1 · PPI 减量伴侣',
  71. color: BRAND.JIANG_GREEN,
  72. title: `600 万有明确替代意愿的 PPI 用户 × 日均 12-15 元 = <strong style="color:${BRAND.JIANG_GREEN};">年潜力 26-33 亿</strong>的巨大市场。`,
  73. subtitle: `关键是<strong>不宣称替代 PPI</strong>,只做"减量期的温和伴侣"——这既规避了医疗宣称风险,又精准接住了<strong>用户最焦虑的那个时刻</strong>。`,
  74. })}
  75. ${renderDecisionList([
  76. '<strong>定位话术</strong>:不是"替代拉唑",是"减量期间的温和伴侣"——规避医疗宣称风险',
  77. '<strong>目标人群</strong>:明确写进方案 = "PPI 焦虑人群"(600 万活跃盘)',
  78. '<strong>产品设计</strong>:日服 300ml 左右 · 12-15 元/日 · 与 PPI 同步服用不冲突',
  79. '<strong>渠道策略</strong>:优先覆盖胃消化科周边药店 / 慢病管理 APP / 私域社群',
  80. '<strong>教育内容</strong>:做"PPI 减量日记"类社群 · 真实用户证言 · 与医生合作科普',
  81. '<strong>KPI</strong>:上市 18 月内 PPI 焦虑人群的"自报复购"占比 >40%',
  82. ], { title: '落地决策 · 接 PPI 焦虑人群的 6 条动作', accent: BRAND.JIANG_GREEN, columns: 2 })}
  83. </div>
  84. </section>`;
  85. }
  86. // ================================================================
  87. // 3.2 · 机会② · 中成药新代际替代
  88. // ================================================================
  89. function renderSub3_2(ctx) {
  90. const { chapter: c, subIdx, slideNum, slideTotal, data } = ctx;
  91. const items = data.items || [];
  92. const weitaiVoc = HGY.getEvidence(items, { hypothesis: 'H3', product: '三九胃泰', top: 3, seed: 71 });
  93. const finalVoc = weitaiVoc.length >= 3 ? weitaiVoc : HGY.getEvidence(items, { hypothesis: 'H3', top: 4, seed: 73 });
  94. // 四反策略
  95. const fourAnti = [
  96. { pain: '苦涩口感', anti: '反口感', solution: '不苦不涩 · 入口顺滑', color: BRAND.CORAL, icon: '👅' },
  97. { pain: '冲泡繁琐', anti: '反冲泡', solution: '开盖即饮 · 无需开水', color: BRAND.WARM_ORANGE, icon: '⚡' },
  98. { pain: '疗程执行难', anti: '反疗程', solution: '日常一瓶 · 不用计时', color: BRAND.PURPLE, icon: '📅' },
  99. { pain: '原料心理抗拒', anti: '反原料抗拒', solution: '食材级猴头菇 · 非药非蟑螂', color: BRAND.ROSE, icon: '🍄' },
  100. ];
  101. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  102. <div class="section-inner">
  103. ${renderSectionHead({
  104. eyebrow: `${c.num}.${subIdx} · 机会②`,
  105. title: '中成药的<span style="color:' + BRAND.PURPLE + ';">新代际替代</span> · 保留温和 + 升级体验',
  106. subtitle: 'Ch2 揭示中成药 22 亿市场的痛点全部指向"体验代差"。猴菇饮的策略 = <strong>"四反"精准对位</strong>。',
  107. color: BRAND.PURPLE,
  108. })}
  109. <div class="grid" style="grid-template-columns:repeat(4, 1fr); gap:16px; margin-top:24px;">
  110. ${fourAnti.map((a) => `
  111. <div style="padding:22px 20px; background:var(--bg-1); border:1px solid var(--border); border-top:4px solid ${a.color}; border-radius:var(--radius-md); text-align:center;">
  112. <div style="font-size:2rem; margin-bottom:10px;">${a.icon}</div>
  113. <div style="padding:4px 10px; background:${BRAND.CORAL}12; color:${BRAND.CORAL}; border-radius:12px; font-size:0.72rem; font-weight:700; display:inline-block; margin-bottom:10px;">痛点 · ${esc(a.pain)}</div>
  114. <div style="color:var(--text-1); font-size:0.72rem; margin-bottom:6px;">↓</div>
  115. <div style="padding:4px 10px; background:${BRAND.JIANG_GREEN}12; color:${BRAND.JIANG_GREEN}; border-radius:12px; font-size:0.72rem; font-weight:700; display:inline-block; margin-bottom:10px;">${esc(a.anti)}</div>
  116. <h3 style="color:var(--text-1); font-size:0.96rem; font-weight:700; margin:8px 0 0;">${esc(a.solution)}</h3>
  117. </div>`).join('')}
  118. </div>
  119. <div class="grid" style="grid-template-columns:1fr 1fr; gap:24px; margin-top:24px;">
  120. <div>
  121. <div class="text-mono text-xs" style="color:${BRAND.PURPLE}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC 证据 · 中成药用户的痛声</div>
  122. <div style="display:flex; flex-direction:column; gap:12px;">
  123. ${finalVoc.slice(0, 4).map((it) => renderVocCard(it, { accent: BRAND.PURPLE, compact: true })).join('')}
  124. </div>
  125. </div>
  126. <div style="padding:22px 24px; background:${BRAND.JIANG_GREEN}0A; border:1px solid ${BRAND.JIANG_GREEN}33; border-radius:var(--radius-md);">
  127. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">猴菇饮 vs 中成药 · 体验对比</div>
  128. <table style="width:100%; border-collapse:collapse; font-size:0.84rem;">
  129. <thead>
  130. <tr style="border-bottom:2px solid var(--border);">
  131. <th style="text-align:left; padding:8px 10px; color:var(--text-3); font-size:0.72rem;">维度</th>
  132. <th style="text-align:center; padding:8px 10px; color:${BRAND.PURPLE}; font-size:0.72rem;">中成药</th>
  133. <th style="text-align:center; padding:8px 10px; color:${BRAND.JIANG_GREEN}; font-size:0.72rem;">猴菇饮 OTC</th>
  134. </tr>
  135. </thead>
  136. <tbody>
  137. ${[
  138. { dim: '口感', tcm: '苦涩', drink: '温和顺滑' },
  139. { dim: '使用方式', tcm: '冲泡/吞服', drink: '开盖即饮' },
  140. { dim: '服用节奏', tcm: '疗程制(2-4周)', drink: '日常随时' },
  141. { dim: '原料认知', tcm: '中药材/蟑螂提取', drink: '猴头菇食材' },
  142. { dim: '代际接受度', tcm: '40+ 为主', drink: '全年龄覆盖' },
  143. { dim: '心理负担', tcm: '"吃药"感', drink: '"喝饮品"感' },
  144. ].map((r, i) => `
  145. <tr style="border-bottom:1px solid var(--border);">
  146. <td style="padding:8px 10px; color:var(--text-1); font-weight:600;">${esc(r.dim)}</td>
  147. <td style="text-align:center; padding:8px 10px; color:${BRAND.CORAL};">${esc(r.tcm)}</td>
  148. <td style="text-align:center; padding:8px 10px; color:${BRAND.JIANG_GREEN}; font-weight:600;">${esc(r.drink)}</td>
  149. </tr>`).join('')}
  150. </tbody>
  151. </table>
  152. </div>
  153. </div>
  154. ${renderInsightHero({
  155. eyebrow: 'OPPORTUNITY #2 · 中成药代际替代',
  156. color: BRAND.PURPLE,
  157. title: `猴菇饮不需要证明比胃泰"更有效"——只需要证明<strong style="color:${BRAND.JIANG_GREEN};">"一样温和但体验好 10 倍"</strong>。`,
  158. subtitle: `"四反"策略的核心逻辑:<strong style="color:${BRAND.PURPLE};">不在疗效维度竞争</strong>(这是中成药的强项),<strong style="color:${BRAND.JIANG_GREEN};">在体验维度碾压</strong>(这是中成药的死穴)。错位竞争 = 避开对手最强点,打击对手最弱点。`,
  159. })}
  160. ${renderDecisionList([
  161. '<strong>卖点 1 · 反口感</strong>:主动打"不苦不涩 · 入口顺滑"——直指胃泰/康复新液痛点',
  162. '<strong>卖点 2 · 反冲泡</strong>:主动打"开盖即饮 · 无需开水"——直指颗粒冲泡难题',
  163. '<strong>卖点 3 · 反疗程</strong>:主动打"日常一瓶 · 不用计时"——消除疗程执行压力',
  164. '<strong>卖点 4 · 反原料抗拒</strong>:主动打"食材级猴头菇"——消除"这是药"的心理门槛',
  165. '<strong>定位话术</strong>:不对标中成药的"治疗",对标中成药的"日常维持"——错位竞争',
  166. '<strong>包装视觉</strong>:去中药感、去传统颗粒感、加食材与生活感——视觉层面区隔中成药',
  167. ], { title: '决策 · 与中成药的 6 条差异化动作', accent: BRAND.PURPLE, columns: 2 })}
  168. </div>
  169. </section>`;
  170. }
  171. // ================================================================
  172. // 3.3 · 机会③ · 功能食品OTC信任升级 × 米稀借力
  173. // ================================================================
  174. function renderSub3_3(ctx) {
  175. const { chapter: c, subIdx, slideNum, slideTotal, data } = ctx;
  176. const items = data.items || [];
  177. const mixiVoc = HGY.getEvidence(items, { hypothesis: 'H1', top: 4, seed: 81 });
  178. const finalVoc = mixiVoc.length >= 3 ? mixiVoc : HGY.getEvidence(items, { hypothesis: 'H1', top: 4, seed: 83 });
  179. // 从食品到OTC的升级价值
  180. const upgradeValue = [
  181. { from: '食品池 2 亿', to: 'OTC 池 100 亿', gain: '市场扩容 50×', color: BRAND.JIANG_GREEN },
  182. { from: '不能宣传功效', to: '可合规宣称"辅助改善"', gain: '话术解锁', color: BRAND.TECH_BLUE },
  183. { from: '用户半信半疑', to: 'OTC 背书=信任锚', gain: '信任升级', color: BRAND.PURPLE },
  184. { from: '药店食品货架', to: '药店 OTC 专区', gain: '陈列升级', color: BRAND.WARM_ORANGE },
  185. ];
  186. // 米稀可迁移资产
  187. const mixiAssets = [
  188. { asset: '养胃认知(猴头菇)', portable: 'full', color: BRAND.JIANG_GREEN, note: '20 年公共认知,饮天然受益' },
  189. { asset: '江中品牌资产', portable: 'full', color: BRAND.JIANG_GREEN, note: '品牌背书对饮同等有效' },
  190. { asset: '亲民日服成本', portable: 'full', color: BRAND.JIANG_GREEN, note: '日均 1-2 元锚点,饮 12-15 元/日符合' },
  191. { asset: '暖胃体感', portable: 'partial', color: BRAND.WARM_ORANGE, note: '冷饮无暖感,加热版可打' },
  192. { asset: '早餐场景', portable: 'none', color: BRAND.CORAL, note: '已被米稀占满,强行介入自蚕食' },
  193. { asset: '糊状剂型', portable: 'none', color: BRAND.CORAL, note: '饮的优势正是液体化' },
  194. ];
  195. const portLabels = { full: '完全可迁移', partial: '部分可迁移', none: '不可迁移' };
  196. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  197. <div class="section-inner">
  198. ${renderSectionHead({
  199. eyebrow: `${c.num}.${subIdx} · 机会③`,
  200. title: '功能食品 <span style="color:' + BRAND.JIANG_GREEN + ';">OTC 信任升级</span> × <span style="color:' + BRAND.HOUGU_TAN + ';">米稀 7.5 亿借力</span>',
  201. subtitle: '功能食品层的核心瓶颈是"食品身份"。<strong>OTC 身份 = 打破天花板的唯一钥匙</strong>。同时,米稀 7.5 亿的成功资产可以部分迁移给猴菇饮。',
  202. color: BRAND.JIANG_GREEN,
  203. })}
  204. <div style="margin-top:24px;">
  205. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">OTC 身份升级 · 4 重价值跃迁</div>
  206. <div class="grid" style="grid-template-columns:repeat(4, 1fr); gap:14px;">
  207. ${upgradeValue.map((u) => `
  208. <div style="padding:18px 16px; background:${u.color}06; border:1px solid ${u.color}30; border-top:4px solid ${u.color}; border-radius:var(--radius-md); text-align:center;">
  209. <div style="color:${BRAND.CORAL}; font-size:0.78rem; font-weight:600; margin-bottom:6px;">${esc(u.from)}</div>
  210. <div style="color:${BRAND.JIANG_GREEN}; font-size:1.2rem; margin:4px 0;">↓</div>
  211. <div style="color:${BRAND.JIANG_GREEN}; font-size:0.78rem; font-weight:700; margin-bottom:8px;">${esc(u.to)}</div>
  212. <div style="padding:4px 10px; background:${u.color}15; color:${u.color}; border-radius:12px; font-size:0.72rem; font-weight:700; display:inline-block;">${esc(u.gain)}</div>
  213. </div>`).join('')}
  214. </div>
  215. </div>
  216. <div class="grid" style="grid-template-columns:1fr 1fr; gap:24px; margin-top:24px;">
  217. <div>
  218. <div class="text-mono text-xs" style="color:${BRAND.HOUGU_TAN}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">米稀 7.5 亿 · 可迁移性评估</div>
  219. <div style="display:flex; flex-direction:column; gap:8px;">
  220. ${mixiAssets.map((a) => `
  221. <div style="display:flex; align-items:center; gap:10px; padding:10px 14px; background:var(--bg-1); border:1px solid var(--border); border-radius:6px;">
  222. <div style="flex:1; color:var(--text-1); font-size:0.86rem; font-weight:600;">${esc(a.asset)}</div>
  223. <div style="padding:3px 10px; background:${a.color}15; color:${a.color}; border-radius:12px; font-size:0.68rem; font-weight:700;">${portLabels[a.portable]}</div>
  224. </div>`).join('')}
  225. </div>
  226. </div>
  227. <div>
  228. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC 证据 · 米稀用户的期待与局限</div>
  229. <div style="display:flex; flex-direction:column; gap:12px;">
  230. ${finalVoc.slice(0, 4).map((it) => renderVocCard(it, { accent: BRAND.HOUGU_TAN, compact: true })).join('')}
  231. </div>
  232. </div>
  233. </div>
  234. ${renderInsightHero({
  235. eyebrow: 'OPPORTUNITY #3 · OTC 信任升级',
  236. color: BRAND.JIANG_GREEN,
  237. title: `猴菇饮的破局不是改配方,是<strong style="color:${BRAND.JIANG_GREEN};">改品类身份 + 改场景 + 改价值定义</strong>。拿下 OTC 批文 = 一夜之间从 2 亿池跳进 100 亿池。`,
  238. subtitle: `同时继承米稀 3 大资产(<strong style="color:${BRAND.HOUGU_TAN};">养胃认知 × 江中品牌 × 亲民成本</strong>),放弃 3 个不可迁移因子(早餐/糊状/暖胃体感),<strong>借力不复刻</strong>。`,
  239. })}
  240. ${renderDecisionList([
  241. '<strong>战略动作 1</strong>:优先拿 OTC 药字号——这是所有差异化的前提',
  242. '<strong>战略动作 2</strong>:明确与米稀的场景分工——饮 = 米稀以外的全时段',
  243. '<strong>战略动作 3</strong>:继承"养胃认知 + 江中品牌 + 亲民成本"三大资产',
  244. '<strong>战略动作 4</strong>:不做"液体米稀"——新品类名称、新场景、新人群',
  245. '<strong>价格带守位</strong>:12-15 元/日,高于食品、低于保健品,占住中间带',
  246. '<strong>失败条件</strong>:若 18 个月内还没拿下 OTC 批文 → 策略失败 → 回退功能食品路径',
  247. ], { title: 'OTC 信任升级 · 6 条战略动作', accent: BRAND.JIANG_GREEN, columns: 2 })}
  248. </div>
  249. </section>`;
  250. }
  251. // ================================================================
  252. // 3.4 · 战略坐标 · 无人地带 × 机会规模总览
  253. // ================================================================
  254. function renderSub3_4(ctx) {
  255. const { chapter: c, subIdx, slideNum, slideTotal } = ctx;
  256. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  257. <div class="section-inner">
  258. ${renderSectionHead({
  259. eyebrow: `${c.num}.${subIdx} · 战略坐标总览`,
  260. title: '3 大机会 × <span style="color:' + BRAND.JIANG_GREEN + ';">无人地带坐标</span> × 机会规模',
  261. subtitle: '把 Ch1 人群全景 + Ch2 未满足需求 + Ch3 三大机会收束成一张战略地图:猴菇饮 OTC 该站在哪里。',
  262. color: BRAND.JIANG_GREEN,
  263. })}
  264. <div style="margin-top:24px;">
  265. ${renderMatrix2x2({
  266. xLabel: '使用门槛(处方 / OTC / 食品)',
  267. yLabel: '疗效强度(治疗 → 维持 → 养护)',
  268. xLow: '高门槛 · 处方',
  269. xHigh: '低门槛 · 食品',
  270. yLow: '养护(慢)',
  271. yHigh: '治疗(急)',
  272. accent: BRAND.JIANG_GREEN,
  273. quadrants: {
  274. q1: {
  275. title: '象限 A · 治疗 × 低门槛',
  276. color: BRAND.TECH_BLUE,
  277. items: [
  278. 'PPI 奥美拉唑/雷贝拉唑(OTC 可购)',
  279. '达喜铝碳酸镁咀嚼片(OTC)',
  280. 'H2RA 西咪替丁(OTC)',
  281. ],
  282. note: '用户评价:有效但焦虑,想找替代',
  283. },
  284. q2: {
  285. title: '象限 B · 治疗 × 高门槛',
  286. color: BRAND.PURPLE,
  287. items: [
  288. '康复新液(医生开)',
  289. '艾普拉唑(处方)',
  290. '莫沙必利(促动力药)',
  291. ],
  292. note: '用户评价:疗效被认可,但难获得',
  293. },
  294. q3: {
  295. title: '象限 C · 养护 × 高门槛',
  296. color: BRAND.WARM_ORANGE,
  297. items: [
  298. '中医汤剂(挂号开方)',
  299. '医院自制胃宁胶囊',
  300. '私人中医食疗方',
  301. ],
  302. note: '用户评价:温和但太麻烦,坚持难',
  303. },
  304. q4: {
  305. title: '象限 D · 养护 × 低门槛 · 无人地带',
  306. color: BRAND.JIANG_GREEN,
  307. items: [
  308. '猴菇米稀(食品 · 只早餐)',
  309. '同名猴菇饮(食品 · 同质化)',
  310. '\u2605 猴菇饮 OTC:养护强度 + OTC 低门槛',
  311. ],
  312. note: '\u2605 这是猴菇饮的战略坐标 · 没有竞品直接对位',
  313. },
  314. },
  315. })}
  316. </div>
  317. <div style="margin-top:32px;">
  318. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.18em; margin-bottom:18px; font-weight:700;">3 大机会 × 规模预估 × 优先级</div>
  319. <div class="grid" style="grid-template-columns:repeat(3, 1fr); gap:18px;">
  320. ${[
  321. { id: '\u2460', title: 'PPI 减量伴侣', color: BRAND.TECH_BLUE, num: '600万人',
  322. market: '年潜力 26-33 亿', priority: 'P0 · 首发',
  323. desc: '接住"想停药但不敢停"的焦虑人群,做减量期温和伴侣' },
  324. { id: '\u2461', title: '中成药代际替代', color: BRAND.PURPLE, num: '年轻流失用户',
  325. market: '22 亿市场侧翼切入', priority: 'P1 · 二期',
  326. desc: '"四反"策略:反口感/反冲泡/反疗程/反原料抗拒' },
  327. { id: '\u2462', title: 'OTC 信任升级', color: BRAND.JIANG_GREEN, num: '2亿→100亿',
  328. market: '身份升级 = 市场扩容 50×', priority: 'P0 · 前提',
  329. desc: '拿下 OTC 批文是所有机会的战略前提' },
  330. ].map((o) => `
  331. <div style="padding:24px 22px; background:var(--bg-1); border:1px solid var(--border); border-left:5px solid ${o.color}; border-radius:var(--radius-md);">
  332. <div style="display:flex; align-items:center; justify-content:space-between; margin-bottom:10px;">
  333. <div class="text-mono text-xs" style="color:${o.color}; letter-spacing:0.2em; font-weight:700;">机会 ${o.id}</div>
  334. <div style="padding:3px 10px; background:${o.color}15; color:${o.color}; border-radius:12px; font-size:0.68rem; font-weight:700;">${esc(o.priority)}</div>
  335. </div>
  336. <h3 style="color:var(--text-1); font-size:1.14rem; font-weight:700; margin:0 0 4px;">${esc(o.title)}</h3>
  337. <div style="color:${o.color}; font-family:var(--font-head); font-weight:800; font-size:1.3rem; margin-bottom:4px;">${esc(o.num)}</div>
  338. <div style="color:var(--text-2); font-size:0.78rem; margin-bottom:10px;">${esc(o.market)}</div>
  339. <div style="color:var(--text-2); font-size:0.84rem; line-height:1.6;">${esc(o.desc)}</div>
  340. </div>`).join('')}
  341. </div>
  342. </div>
  343. ${renderInsightHero({
  344. eyebrow: 'STRATEGIC COORDINATE · 战略坐标',
  345. color: BRAND.JIANG_GREEN,
  346. title: `猴菇饮 OTC 的战略坐标 = <strong style="color:${BRAND.JIANG_GREEN};">"养护强度 \u00d7 OTC 低门槛"</strong>的第四象限无人地带。`,
  347. subtitle: `3 大机会的执行优先级:<strong style="color:${BRAND.JIANG_GREEN};">\u2462 OTC 身份</strong>(前提)→ <strong style="color:${BRAND.TECH_BLUE};">\u2460 PPI 减量伴侣</strong>(首发赛道)→ <strong style="color:${BRAND.PURPLE};">\u2461 中成药代际替代</strong>(二期扩展)。三者叠加,猴菇饮站在一个<strong style="color:${BRAND.HOUGU_TAN};">没有直接竞品对位</strong>的独占起点。`,
  348. })}
  349. ${renderDecisionList([
  350. '<strong>战略选择</strong>:专注象限 D(养护 \u00d7 OTC 低门槛),不与象限 A/B 争治疗',
  351. '<strong>执行优先级</strong>:P0 先拿 OTC + 锁定 PPI 减量人群,P1 侧翼切入中成药流失用户',
  352. '<strong>第一年目标</strong>:在象限 D 建立"唯一有 OTC 身份的猴菇饮"认知 · 确立位置',
  353. '<strong>第二年动作</strong>:用 PPI 减量 + 中成药替代两个赛道做细分 SKU',
  354. '<strong>第三年扩张</strong>:有了根据地再向象限 A 侧翼渗透(PPI 减量辅助饮)',
  355. '<strong>失败条件</strong>:若 18 个月内还没拿下 OTC 批文 \u2192 策略失败 \u2192 回退功能食品路径',
  356. ], { title: '路径规划 · 三年占据无人地带', accent: BRAND.JIANG_GREEN, columns: 2 })}
  357. </div>
  358. </section>`;
  359. }
  360. module.exports = {
  361. 'fit-1': renderSub3_1,
  362. 'fit-2': renderSub3_2,
  363. 'fit-3': renderSub3_3,
  364. 'fit-4': renderSub3_4,
  365. };