houguyin-ch2-unmet.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. // 江中猴菇饮 · Ch2 未被满足的需求(4 子章)
  2. // 2.1 PPI层 · 依赖焦虑 × 反弹恐惧 × 副作用担忧
  3. // 2.2 中成药层 · 口感抗性 × 起效慢 × 代际断层
  4. // 2.3 功能食品层 · 身份尴尬 × 场景单一 × 无OTC信任
  5. // 2.4 跨层汇总 · 5大共性未满足需求
  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. // 2.1 · PPI层 · 依赖焦虑 × 反弹恐惧 × 副作用担忧
  11. // ================================================================
  12. function renderSub2_1(ctx) {
  13. const { chapter: c, subIdx, slideNum, slideTotal, data } = ctx;
  14. const items = data.items || [];
  15. const ppiVoc = HGY.getEvidence(items, { hypothesis: 'H3', product: '奥美拉唑', top: 4, seed: 5 });
  16. const h4Voc = HGY.getEvidence(items, { hypothesis: 'H4', top: 4, seed: 9 });
  17. const combinedVoc = [...ppiVoc, ...h4Voc].filter(Boolean).slice(0, 6);
  18. const finalVoc = combinedVoc.length >= 4 ? combinedVoc : HGY.getEvidence(items, { hypothesis: 'H3', top: 6, seed: 13 });
  19. const ppiPains = [
  20. { key: 'P1', label: '依赖焦虑', color: BRAND.CORAL,
  21. voc: '"奥美拉唑吃了三年多了 不吃胃酸就翻上来 这到底是治病还是上瘾"',
  22. impact: 'high', users: '~2000万长期PPI用户' },
  23. { key: 'P2', label: '反弹恐惧', color: BRAND.CORAL,
  24. voc: '"停了拉唑之后胃酸比吃之前还猛 医生说是反弹正常 但我真的怕"',
  25. impact: 'high', users: '停药后 40-60% 经历反弹' },
  26. { key: 'P3', label: '长期副作用担忧', color: BRAND.WARM_ORANGE,
  27. voc: '"看到新闻说长期吃奥美拉唑增加胃癌风险 吓得我天天焦虑"',
  28. impact: 'high', users: '骨质疏松/肾损伤/B12缺乏' },
  29. { key: 'P4', label: '寻找食疗替代', color: BRAND.HOUGU_TAN,
  30. voc: '"想找一个能替代拉唑的天然养胃方案 但市面上全是智商税"',
  31. impact: 'mid', users: '约 30% PPI 用户有替代意愿' },
  32. { key: 'P5', label: '减量无方案', color: BRAND.TECH_BLUE,
  33. voc: '"医生说可以慢慢减量 但怎么减没人告诉我 减到一半就反弹了"',
  34. impact: 'high', users: 'PPI 减量成功率 <30%' },
  35. { key: 'P6', label: '心理负担', color: BRAND.ROSE,
  36. voc: '"每天吃药的感觉很不好 好像自己是个病人 但不吃又不行"',
  37. impact: 'mid', users: '慢性病化带来心理压力' },
  38. ];
  39. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  40. <div class="section-inner">
  41. ${renderSectionHead({
  42. eyebrow: `${c.num}.${subIdx} · PPI 用户的痛声`,
  43. title: '<span style="color:' + BRAND.TECH_BLUE + ';">70 亿</span>拉唑市场 · 用户<span style="color:' + BRAND.CORAL + ';">有效但痛苦</span>的 6 大未满足需求',
  44. subtitle: 'PPI(质子泵抑制剂)是胃病用户的"第一选择"——但 VOC 揭示:<strong>有效≠满意</strong>,依赖焦虑和反弹恐惧正在驱动大量用户寻找替代方案。',
  45. color: BRAND.CORAL,
  46. })}
  47. <div class="grid" style="grid-template-columns:1.2fr 1fr; gap:24px; margin-top:24px;">
  48. <div>
  49. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC 证据 · PPI 用户真实痛声</div>
  50. <div style="display:flex; flex-direction:column; gap:12px;">
  51. ${finalVoc.slice(0, 4).map((it) => renderVocCard(it, { accent: BRAND.CORAL, compact: true })).join('')}
  52. </div>
  53. </div>
  54. <div>
  55. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">6 大未满足需求 · 按影响度排序</div>
  56. <div style="display:flex; flex-direction:column; gap:10px;">
  57. ${ppiPains.map((p) => `
  58. <div style="padding:12px 14px; background:var(--bg-1); border:1px solid var(--border); border-left:3px solid ${p.color}; border-radius:6px; display:flex; gap:12px; align-items:flex-start;">
  59. <div style="flex-shrink:0; padding:2px 8px; background:${p.color}15; color:${p.color}; border-radius:10px; font-size:0.7rem; font-weight:700; font-family:var(--font-mono); letter-spacing:0.1em;">${p.key}</div>
  60. <div style="flex:1;">
  61. <div style="color:var(--text-1); font-size:0.88rem; font-weight:700; margin-bottom:4px;">${esc(p.label)}</div>
  62. <div style="color:var(--text-2); font-size:0.76rem; line-height:1.55; font-style:italic;">${esc(p.voc)}</div>
  63. <div style="color:var(--text-3); font-size:0.68rem; margin-top:4px;">${esc(p.users)}</div>
  64. </div>
  65. <div style="flex-shrink:0; padding:3px 9px; background:${p.impact === 'high' ? BRAND.CORAL : BRAND.WARM_ORANGE}15; color:${p.impact === 'high' ? BRAND.CORAL : BRAND.WARM_ORANGE}; border-radius:10px; font-size:0.64rem; font-weight:700;">${p.impact === 'high' ? '高影响' : '中影响'}</div>
  66. </div>`).join('')}
  67. </div>
  68. </div>
  69. </div>
  70. ${renderInsightHero({
  71. eyebrow: 'CORE INSIGHT · PPI 层核心识别',
  72. color: BRAND.CORAL,
  73. title: `PPI 市场 70 亿的背后是<strong style="color:${BRAND.CORAL};">2000 万被"绑架"的用户</strong>——他们不是不想停,是<strong>停不了 + 没有过渡方案</strong>。`,
  74. subtitle: `"想停药但不敢停"是 PPI 层最大的未满足需求。如果有一个产品能<strong style="color:${BRAND.JIANG_GREEN};">在减量期提供温和的胃黏膜保护感</strong>,不宣称替代 PPI、只做"减量伴侣",就能切走这块<strong>巨大的焦虑驱动需求</strong>。`,
  75. })}
  76. ${renderDecisionList([
  77. '<strong>核心未满足</strong>:PPI 减量期无过渡方案——用户需要"停药但不裸奔"的温和选择',
  78. '<strong>需求规模</strong>:2000 万长期 PPI 用户 × 30% 有替代意愿 = 600 万高价值目标',
  79. '<strong>需求强度</strong>:焦虑驱动(健康恐惧)> 普通购买意愿——转化率天然高',
  80. '<strong>猴菇饮适配度</strong>:温和 + 非药 + OTC 信任 = 完美匹配"减量伴侣"定位',
  81. ], { title: 'PPI 层需求总结 · 4 条关键发现', accent: BRAND.CORAL, columns: 2 })}
  82. </div>
  83. </section>`;
  84. }
  85. // ================================================================
  86. // 2.2 · 中成药层 · 口感抗性 × 起效慢 × 代际断层
  87. // ================================================================
  88. function renderSub2_2(ctx) {
  89. const { chapter: c, subIdx, slideNum, slideTotal, data } = ctx;
  90. const items = data.items || [];
  91. const weitaiVoc = HGY.getEvidence(items, { hypothesis: 'H3', product: '三九胃泰', top: 4, seed: 41 });
  92. const kfxVoc = HGY.getEvidence(items, { hypothesis: 'H3', product: '康复新液', top: 3, seed: 43 });
  93. const finalVoc = [...weitaiVoc.slice(0, 3), ...kfxVoc.slice(0, 1)];
  94. const tcmPains = [
  95. { key: 'T1', label: '口感抗性', color: BRAND.CORAL,
  96. voc: '"三九胃泰颗粒冲出来苦涩 老人不爱喝 坚持两天就放弃"',
  97. impact: 'high' },
  98. { key: 'T2', label: '起效慢', color: BRAND.WARM_ORANGE,
  99. voc: '"三九胃泰对浅表性胃炎还行 但起效慢 急性期救不了命"',
  100. impact: 'mid' },
  101. { key: 'T3', label: '冲泡繁琐', color: BRAND.WARM_ORANGE,
  102. voc: '"颗粒冲泡要开水搅匀麻烦 和直接吃片剂比 步骤多"',
  103. impact: 'mid' },
  104. { key: 'T4', label: '疗程执行难', color: BRAND.CORAL,
  105. voc: '"疗程吃够才有用 但我经常忘记 三天打渔两天晒网"',
  106. impact: 'high' },
  107. { key: 'T5', label: '原料心理抗拒', color: BRAND.CORAL,
  108. voc: '"康复新液是蟑螂提取物 虽然医生说没事 心理上真的咽不下去"',
  109. impact: 'high' },
  110. { key: 'T6', label: '代际断层', color: BRAND.ROSE,
  111. voc: '"胃泰的核心人群是我爸那一代 我们这一代不会主动选中成药颗粒"',
  112. impact: 'high' },
  113. ];
  114. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  115. <div class="section-inner">
  116. ${renderSectionHead({
  117. eyebrow: `${c.num}.${subIdx} · 中成药用户的痛声`,
  118. title: '<span style="color:' + BRAND.PURPLE + ';">22 亿</span>中成药胃泰市场 · <span style="color:' + BRAND.CORAL + ';">年轻人为什么不买账?</span>',
  119. subtitle: '三九胃泰、康复新液等中成药有<strong>稳定基本盘但增长乏力</strong>——VOC 揭示 6 大痛点,全部指向"体验代际跟不上用户升级"。',
  120. color: BRAND.PURPLE,
  121. })}
  122. <div class="grid" style="grid-template-columns:1.1fr 1fr; gap:24px; margin-top:24px;">
  123. <div>
  124. <div class="text-mono text-xs" style="color:${BRAND.PURPLE}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC 证据 · 中成药用户真实反馈</div>
  125. <div style="display:flex; flex-direction:column; gap:12px;">
  126. ${finalVoc.slice(0, 4).map((it) => renderVocCard(it, { accent: BRAND.PURPLE, compact: true })).join('')}
  127. </div>
  128. </div>
  129. <div>
  130. <div class="text-mono text-xs" style="color:${BRAND.PURPLE}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">6 大未满足需求 · 按影响度排序</div>
  131. <div style="display:flex; flex-direction:column; gap:10px;">
  132. ${tcmPains.map((t) => `
  133. <div style="padding:12px 14px; background:var(--bg-1); border:1px solid var(--border); border-left:3px solid ${t.color}; border-radius:6px; display:flex; gap:12px; align-items:flex-start;">
  134. <div style="flex-shrink:0; padding:2px 8px; background:${t.color}15; color:${t.color}; border-radius:10px; font-size:0.7rem; font-weight:700; font-family:var(--font-mono); letter-spacing:0.1em;">${t.key}</div>
  135. <div style="flex:1;">
  136. <div style="color:var(--text-1); font-size:0.88rem; font-weight:700; margin-bottom:4px;">${esc(t.label)}</div>
  137. <div style="color:var(--text-2); font-size:0.76rem; line-height:1.55; font-style:italic;">${esc(t.voc)}</div>
  138. </div>
  139. <div style="flex-shrink:0; padding:3px 9px; background:${t.impact === 'high' ? BRAND.CORAL : BRAND.WARM_ORANGE}15; color:${t.impact === 'high' ? BRAND.CORAL : BRAND.WARM_ORANGE}; border-radius:10px; font-size:0.64rem; font-weight:700;">${t.impact === 'high' ? '高影响' : '中影响'}</div>
  140. </div>`).join('')}
  141. </div>
  142. </div>
  143. </div>
  144. ${renderInsightHero({
  145. eyebrow: 'CORE INSIGHT · 中成药层核心识别',
  146. color: BRAND.PURPLE,
  147. title: `中成药 22 亿市场的问题<strong style="color:${BRAND.PURPLE};">不是疗效</strong>——是<strong style="color:${BRAND.CORAL};">"体验代差"</strong>:苦涩口感、冲泡繁琐、疗程执行、原料心理抗拒——<strong>年轻代际在用户体验维度彻底拒绝</strong>。`,
  148. subtitle: `这为猴菇饮留下了<strong style="color:${BRAND.JIANG_GREEN};">"中药温和 + 现代体验"</strong>的空白带:<em>液体即饮(消除冲泡)× 温和口感(消除苦涩)× 日常饮用(消除疗程压力)× 食材原料(消除心理抗拒)</em>。`,
  149. })}
  150. ${renderDecisionList([
  151. '<strong>核心未满足</strong>:年轻用户需要"中药级温和 + 现代级体验"的产品——目前没有',
  152. '<strong>需求规模</strong>:22 亿中成药市场的流失用户 + 从未尝试中成药的年轻潜在用户',
  153. '<strong>体验四反</strong>:反口感(不苦不涩)+ 反冲泡(开盖即饮)+ 反疗程(日常一瓶)+ 反原料抗拒(食材级猴头菇)',
  154. '<strong>猴菇饮适配度</strong>:液体 + 温和口感 + 猴头菇食材 + OTC 信任 = 精准匹配代际升级需求',
  155. ], { title: '中成药层需求总结 · 4 条关键发现', accent: BRAND.PURPLE, columns: 2 })}
  156. </div>
  157. </section>`;
  158. }
  159. // ================================================================
  160. // 2.3 · 功能食品层 · 身份尴尬 × 场景单一 × 无OTC信任
  161. // ================================================================
  162. function renderSub2_3(ctx) {
  163. const { chapter: c, subIdx, slideNum, slideTotal, data } = ctx;
  164. const items = data.items || [];
  165. const mixiNeutral = HGY.filterBySentiment(HGY.filterByProduct(items, '猴姑米稀'), 'neutral');
  166. const competitorAll = HGY.filterByProduct(items, '其他猴菇饮');
  167. const combined = [...HGY.topByLikes(mixiNeutral, 3), ...HGY.topByLikes(competitorAll, 3)];
  168. const finalVoc = combined.length >= 4 ? combined : HGY.getEvidence(items, { hypothesis: 'H1', top: 6, seed: 51 });
  169. const foodPains = [
  170. { key: 'F1', color: BRAND.HOUGU_TAN, label: '身份尴尬',
  171. desc: '食品身份 → 不能宣传功效 → 用户怀疑"吃了个寂寞"',
  172. voc: '"米稀说养胃但又不是药 到底有没有效啊 感觉在交智商税"' },
  173. { key: 'F2', color: BRAND.CORAL, label: '场景单一',
  174. desc: '米稀只在早餐场景,全天其他时段无法介入',
  175. voc: '"米稀当早餐可以 但中午晚上应酬后想来一杯养胃的 没有"' },
  176. { key: 'F3', color: BRAND.WARM_ORANGE, label: '同质化严重',
  177. desc: '同名猴菇饮价格 10-30 元四处都是,没有差异化',
  178. voc: '"网上搜猴菇饮出来一堆 不知道哪个真哪个假 干脆不买了"' },
  179. { key: 'F4', color: BRAND.ROSE, label: 'OTC 信任空白',
  180. desc: '市面 99% 为食品身份,没有 OTC 背书的猴菇饮',
  181. voc: '"如果有一个有药字号认证的养胃饮 我愿意多花钱买信任"' },
  182. ];
  183. // 米稀局限性(来自旧Ch2内容整合)
  184. const mixiLimits = [
  185. { label: '冲泡要求热水', icon: '☕' },
  186. { label: '早餐时段专属', icon: '🌅' },
  187. { label: '差旅不便携带', icon: '🧳' },
  188. { label: '糖友不宜(蔗糖)', icon: '🩸' },
  189. ];
  190. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  191. <div class="section-inner">
  192. ${renderSectionHead({
  193. eyebrow: `${c.num}.${subIdx} · 功能食品用户的痛声`,
  194. title: '<span style="color:' + BRAND.HOUGU_TAN + ';">2 亿</span>功能食品 · <span style="color:' + BRAND.CORAL + ';">为什么天花板这么低?</span>',
  195. subtitle: '米稀 7.5 亿证明了赛道可行,但整个功能食品品类天花板仅 2 亿——VOC 揭示根本问题是<strong>"身份 + 场景 + 差异化 + 信任"</strong>四重缺失。',
  196. color: BRAND.HOUGU_TAN,
  197. })}
  198. <div class="grid" style="grid-template-columns:repeat(4, 1fr); gap:14px; margin-top:24px;">
  199. ${foodPains.map((p) => `
  200. <div style="padding:18px 20px; background:${p.color}06; border:1px solid ${p.color}30; border-left:4px solid ${p.color}; border-radius:var(--radius-md);">
  201. <div class="text-mono text-xs" style="color:${p.color}; letter-spacing:0.2em; margin-bottom:8px; font-weight:700;">${p.key}</div>
  202. <h3 style="color:var(--text-1); font-size:1.02rem; font-weight:700; margin:0 0 8px;">${esc(p.label)}</h3>
  203. <div style="color:var(--text-2); font-size:0.82rem; line-height:1.6; margin-bottom:10px;">${esc(p.desc)}</div>
  204. <div style="padding:8px 10px; background:var(--bg-1); border-radius:4px; color:var(--text-1); font-size:0.76rem; line-height:1.5; font-style:italic;">${esc(p.voc)}</div>
  205. </div>`).join('')}
  206. </div>
  207. <div class="grid" style="grid-template-columns:1.2fr 1fr; gap:24px; margin-top:24px;">
  208. <div>
  209. <div class="text-mono text-xs" style="color:${BRAND.HOUGU_TAN}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC 证据 · 功能食品用户反馈</div>
  210. <div style="display:flex; flex-direction:column; gap:12px;">
  211. ${finalVoc.slice(0, 4).map((it) => renderVocCard(it, { accent: BRAND.HOUGU_TAN, compact: true })).join('')}
  212. </div>
  213. </div>
  214. <div>
  215. <div style="padding:22px 24px; background:${BRAND.CORAL}08; border:1px solid ${BRAND.CORAL}30; border-radius:var(--radius-md);">
  216. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">米稀的 4 大局限 = 猴菇饮的设计输入</div>
  217. <div style="display:flex; flex-direction:column; gap:12px;">
  218. ${mixiLimits.map((l) => `
  219. <div style="display:flex; align-items:center; gap:10px; padding:10px 14px; background:var(--bg-1); border-radius:6px;">
  220. <span style="font-size:1.3rem;">${l.icon}</span>
  221. <div style="color:var(--text-1); font-size:0.9rem; font-weight:600;">${esc(l.label)}</div>
  222. <div style="margin-left:auto; color:${BRAND.JIANG_GREEN}; font-size:0.72rem; font-weight:700;">→ 饮可解决</div>
  223. </div>`).join('')}
  224. </div>
  225. </div>
  226. </div>
  227. </div>
  228. ${renderInsightHero({
  229. eyebrow: 'CORE INSIGHT · 功能食品层核心识别',
  230. color: BRAND.HOUGU_TAN,
  231. title: `功能食品的天花板不是需求不足,是<strong style="color:${BRAND.CORAL};">"食品身份 + 场景限制 + 同质化 + 无信任锚"</strong>四重天花板。`,
  232. subtitle: `米稀 7.5 亿已证明用户<strong>愿意为"养胃"付费</strong>。瓶颈不在需求端,在供给端——<strong style="color:${BRAND.JIANG_GREEN};">OTC 身份 + 全场景 + 差异化 + 品牌信任</strong>是突破天花板的 4 把钥匙。`,
  233. })}
  234. ${renderDecisionList([
  235. '<strong>核心未满足</strong>:用户想买"有信任背书的养胃饮"但市场上没有——全是食品身份',
  236. '<strong>米稀启示</strong>:7.5 亿证明赛道可行 + 差评揭示场景/剂型/糖友 3 大局限 = 猴菇饮的设计说明书',
  237. '<strong>OTC 是突破口</strong>:从 2 亿食品池跳进 100 亿 OTC 池——身份升级即市场扩容 50 倍',
  238. '<strong>不做米稀 2.0</strong>:饮的价值是"米稀覆盖不到的场景 + 米稀拿不到的信任"',
  239. ], { title: '功能食品层需求总结 · 4 条关键发现', accent: BRAND.HOUGU_TAN, columns: 2 })}
  240. </div>
  241. </section>`;
  242. }
  243. // ================================================================
  244. // 2.4 · 跨层汇总 · 5大共性未满足需求
  245. // ================================================================
  246. function renderSub2_4(ctx) {
  247. const { chapter: c, subIdx, slideNum, slideTotal, data } = ctx;
  248. const items = data.items || [];
  249. // 5大共性未满足需求
  250. const unmetNeeds = [
  251. { id: 'U1', title: '日常维持方案缺失', color: BRAND.JIANG_GREEN,
  252. desc: '不论哪一层,用户都缺少一个"不是药但可以天天用"的日常维持方案',
  253. ppi: 'PPI 用户:减量期无过渡', tcm: '中成药用户:疗程断续无连续', food: '功能食品:效果不确定不敢持续',
  254. fitScore: 95 },
  255. { id: 'U2', title: '体验友好度不足', color: BRAND.WARM_ORANGE,
  256. desc: '现有产品要么苦涩(中成药)、要么需冲泡(米稀)、要么需处方(PPI)',
  257. ppi: 'PPI:需吞药片+空腹', tcm: '中成药:苦涩+冲泡', food: '米稀:冲泡+热水+早餐限制',
  258. fitScore: 90 },
  259. { id: 'U3', title: '信任锚点模糊', color: BRAND.TECH_BLUE,
  260. desc: '药品有效但焦虑副作用,食品温和但怀疑效果——两头不靠',
  261. ppi: 'PPI:有效但不信任安全性', tcm: '中成药:信任传统但怀疑疗效', food: '食品:完全缺乏信任锚',
  262. fitScore: 85 },
  263. { id: 'U4', title: '场景覆盖碎片化', color: BRAND.PURPLE,
  264. desc: '没有一个产品能覆盖"全天候养胃"——早餐归米稀,其他时段空白',
  265. ppi: 'PPI:定时吃药场景固定', tcm: '中成药:家里冲泡场景限制', food: '米稀:仅早餐场景',
  266. fitScore: 88 },
  267. { id: 'U5', title: '心理负担重', color: BRAND.ROSE,
  268. desc: '"吃药=我是病人"的心理负担,让轻中度用户抗拒就医和用药',
  269. ppi: 'PPI:慢性病人标签', tcm: '中成药:传统老人药标签', food: '食品:无心理负担但也无信任',
  270. fitScore: 80 },
  271. ];
  272. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  273. <div class="section-inner">
  274. ${renderSectionHead({
  275. eyebrow: `${c.num}.${subIdx} · 跨层汇总`,
  276. title: '5 大<span style="color:' + BRAND.CORAL + ';">共性未满足需求</span> × 猴菇饮<span style="color:' + BRAND.JIANG_GREEN + ';">适配度评估</span>',
  277. subtitle: '把 PPI / 中成药 / 功能食品三层的痛声交叉提炼——哪些是<strong>所有层用户共同的未满足需求</strong>?哪些需求猴菇饮 OTC 的产品特性可以匹配?',
  278. color: BRAND.CORAL,
  279. })}
  280. <div style="margin-top:24px; display:flex; flex-direction:column; gap:16px;">
  281. ${unmetNeeds.map((u) => `
  282. <div style="padding:20px 24px; background:var(--bg-1); border:1px solid var(--border); border-left:5px solid ${u.color}; border-radius:var(--radius-md);">
  283. <div style="display:flex; align-items:center; justify-content:space-between; margin-bottom:12px;">
  284. <div style="display:flex; align-items:center; gap:12px;">
  285. <div class="text-mono text-xs" style="color:${u.color}; letter-spacing:0.18em; font-weight:700;">${u.id}</div>
  286. <div style="color:var(--text-1); font-size:1.08rem; font-weight:800;">${esc(u.title)}</div>
  287. </div>
  288. <div style="display:flex; align-items:center; gap:8px;">
  289. <span style="color:var(--text-3); font-size:0.72rem;">猴菇饮适配度</span>
  290. <div style="width:80px; height:8px; background:var(--border); border-radius:4px; overflow:hidden;">
  291. <div style="width:${u.fitScore}%; height:100%; background:${BRAND.JIANG_GREEN}; border-radius:4px;"></div>
  292. </div>
  293. <span style="color:${BRAND.JIANG_GREEN}; font-family:var(--font-mono); font-weight:700; font-size:0.82rem;">${u.fitScore}%</span>
  294. </div>
  295. </div>
  296. <div style="color:var(--text-2); font-size:0.9rem; line-height:1.6; margin-bottom:14px;">${esc(u.desc)}</div>
  297. <div style="display:grid; grid-template-columns:repeat(3, 1fr); gap:10px;">
  298. <div style="padding:8px 12px; background:${BRAND.TECH_BLUE}08; border-radius:4px;">
  299. <div class="text-mono" style="font-size:0.62rem; color:${BRAND.TECH_BLUE}; letter-spacing:0.1em; margin-bottom:3px;">PPI 层</div>
  300. <div style="color:var(--text-2); font-size:0.78rem; line-height:1.5;">${esc(u.ppi)}</div>
  301. </div>
  302. <div style="padding:8px 12px; background:${BRAND.PURPLE}08; border-radius:4px;">
  303. <div class="text-mono" style="font-size:0.62rem; color:${BRAND.PURPLE}; letter-spacing:0.1em; margin-bottom:3px;">中成药层</div>
  304. <div style="color:var(--text-2); font-size:0.78rem; line-height:1.5;">${esc(u.tcm)}</div>
  305. </div>
  306. <div style="padding:8px 12px; background:${BRAND.HOUGU_TAN}08; border-radius:4px;">
  307. <div class="text-mono" style="font-size:0.62rem; color:${BRAND.HOUGU_TAN}; letter-spacing:0.1em; margin-bottom:3px;">功能食品层</div>
  308. <div style="color:var(--text-2); font-size:0.78rem; line-height:1.5;">${esc(u.food)}</div>
  309. </div>
  310. </div>
  311. </div>`).join('')}
  312. </div>
  313. ${renderInsightHero({
  314. eyebrow: 'UNMET NEEDS MAP · 需求地图总结',
  315. color: BRAND.JIANG_GREEN,
  316. title: `5 大共性需求中,<strong style="color:${BRAND.JIANG_GREEN};">U1(日常维持方案)适配度 95%</strong> 是猴菇饮最应该首先回答的——"不是药但可以天天用"精准描述了 OTC 养胃饮的定位。`,
  317. subtitle: `5 条需求的猴菇饮适配度均 >80%,说明<strong>这个产品不是在找需求,是需求在等产品</strong>。下一章将逐一对位:哪些需求猴菇饮能直接接住,如何接,以什么优先级。`,
  318. })}
  319. ${renderDecisionList([
  320. '<strong>最高优先级</strong>:U1 日常维持方案 + U2 体验友好度——这两条决定产品的"基本盘"',
  321. '<strong>差异化优先级</strong>:U3 信任锚点——OTC 身份是猴菇饮 vs 所有竞品的核心壁垒',
  322. '<strong>场景优先级</strong>:U4 场景覆盖——液体即饮天然覆盖全场景,但需要明确"米稀以外"的定位',
  323. '<strong>长期价值</strong>:U5 心理负担——"不是药的养胃方案"降低用户心理门槛,有利于长期复购',
  324. '<strong>下一章预告</strong>:Ch3 将把这 5 条需求 × 猴菇饮产品特性一一对位,输出 3 大机会区域',
  325. ], { title: '需求优先级 · 5 条排序', accent: BRAND.JIANG_GREEN, columns: 2 })}
  326. </div>
  327. </section>`;
  328. }
  329. module.exports = {
  330. 'unmet-1': renderSub2_1,
  331. 'unmet-2': renderSub2_2,
  332. 'unmet-3': renderSub2_3,
  333. 'unmet-4': renderSub2_4,
  334. };