houguyin-ch1-challenge.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. // 江中猴菇饮 · Ch1 诘问起点(3 子章)
  2. // 1.1 产品困境直面 · 无体感即现实
  3. // 1.2 市场现实 · 100亿OTC胃药地图
  4. // 1.3 VOC 驱动反向定位 · 方法论起点
  5. const HGY = require('./houguyin-analyze.js');
  6. const C = require('./houguyin-components.js');
  7. const { BRAND, esc, renderVocCard, renderVocGrid, renderInsightHero, renderDecisionList, renderTheoryBox, renderTagCloud, renderStatStrip, renderBarChart, renderSectionHead } = C;
  8. // ================================================================
  9. // 1.1 · 产品困境直面 · 无体感即现实
  10. // ================================================================
  11. function renderSub1_1(ctx) {
  12. const { chapter: c, subIdx, sub, slideNum, slideTotal, data } = ctx;
  13. const items = data.items || [];
  14. // 取能反映 "怀疑无体感产品" 的 VOC:PPI 用户想找食疗但质疑、米稀主观效果自我怀疑、同名猴菇饮像果汁的反馈
  15. const ev1 = HGY.getEvidence(items, { hypothesis: 'H1', tag: '自我怀疑', top: 2, seed: 3 });
  16. const ev2 = HGY.getEvidence(items, { hypothesis: 'H4', tag: '心理依赖', top: 2, seed: 7 });
  17. const ev3 = HGY.getEvidence(items, { hypothesis: 'H5', tag: '果汁感差评', top: 1, seed: 11 });
  18. const ev4 = HGY.getEvidence(items, { hypothesis: 'H5', tag: '噱头认知', top: 1, seed: 13 });
  19. const voc = [...ev1, ...ev2, ...ev3, ...ev4].filter(Boolean).slice(0, 6);
  20. const fallback = HGY.getEvidence(items, { hypothesis: 'H1', top: 6, seed: 19 });
  21. const finalVoc = voc.length >= 4 ? voc : fallback;
  22. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  23. <div class="section-inner">
  24. ${renderSectionHead({
  25. eyebrow: `${c.num}.${subIdx} · 产品困境直面`,
  26. title: '<span style="color:' + BRAND.CORAL + ';">无体感</span>即<span style="color:' + BRAND.HOUGU_TAN + ';">现实</span>:猴菇饮不是"新发现",只是猴头菇熬的水',
  27. subtitle: '回到产品本体:没有 DMY/水飞蓟那样的明星原料,也没有立竿见影的体感。承认 → 才有反向破局的起点。',
  28. color: BRAND.CORAL,
  29. })}
  30. ${renderInsightHero({
  31. eyebrow: 'THE BRUTAL TRUTH · 残酷真相',
  32. color: BRAND.CORAL,
  33. title: `"猴菇饮 = 加了猴头菇萃取的饮料"。这句话必须<strong style="color:${BRAND.CORAL};">写在方案第一页</strong>。<br/>肝纯片靠 DMY 讲"解酒保肝"的原料故事,猴菇饮没有这个抓手——<strong style="color:${BRAND.HOUGU_TAN};">不能复制这条路</strong>。`,
  34. subtitle: `用户已经用脚投票:同名猴菇饮<strong>"像果汁"</strong>、"养胃饮就是营销噱头"的质疑在小红书/知乎反复出现。继续打"新原料发现"的故事,只会把品牌拖进<strong style="color:${BRAND.CORAL};">智商税叙事</strong>。`,
  35. })}
  36. <div class="grid" style="grid-template-columns:1.2fr 1fr; gap:24px; margin-top:24px;">
  37. <div>
  38. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC · 用户对"无体感养胃饮"的真实声音</div>
  39. <div style="display:flex; flex-direction:column; gap:12px;">
  40. ${finalVoc.slice(0, 4).map((it) => renderVocCard(it, { accent: BRAND.CORAL, compact: true })).join('')}
  41. </div>
  42. </div>
  43. <div>
  44. <div class="text-mono text-xs" style="color:${BRAND.HOUGU_TAN}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">对比 · 肝纯片 vs 猴菇饮 · 天然禀赋差距</div>
  45. <div style="background:var(--bg-1); border:1px solid var(--border); border-radius:var(--radius-md); padding:18px 20px;">
  46. <table style="width:100%; border-collapse:collapse; font-size:0.86rem;">
  47. <thead>
  48. <tr style="border-bottom:2px solid var(--border);">
  49. <th style="text-align:left; padding:8px 0; color:var(--text-3); font-weight:600; font-size:0.76rem;">对比维度</th>
  50. <th style="text-align:center; padding:8px 0; color:${BRAND.TECH_BLUE}; font-weight:700; font-size:0.78rem;">肝纯片</th>
  51. <th style="text-align:center; padding:8px 0; color:${BRAND.HOUGU_TAN}; font-weight:700; font-size:0.78rem;">猴菇饮</th>
  52. </tr>
  53. </thead>
  54. <tbody>
  55. <tr style="border-bottom:1px solid var(--border);">
  56. <td style="padding:10px 0; color:var(--text-2);">明星成分故事</td>
  57. <td style="text-align:center; padding:10px 0;"><span style="color:${BRAND.JIANG_GREEN};">✓ DMY 藤茶新原料</span></td>
  58. <td style="text-align:center; padding:10px 0;"><span style="color:${BRAND.CORAL};">✗ 猴头菇早被教育完</span></td>
  59. </tr>
  60. <tr style="border-bottom:1px solid var(--border);">
  61. <td style="padding:10px 0; color:var(--text-2);">立竿见影体感</td>
  62. <td style="text-align:center; padding:10px 0;"><span style="color:${BRAND.JIANG_GREEN};">✓ 解酒"不上头"</span></td>
  63. <td style="text-align:center; padding:10px 0;"><span style="color:${BRAND.CORAL};">✗ 胃病是慢性体感</span></td>
  64. </tr>
  65. <tr style="border-bottom:1px solid var(--border);">
  66. <td style="padding:10px 0; color:var(--text-2);">天然话题性</td>
  67. <td style="text-align:center; padding:10px 0;"><span style="color:${BRAND.JIANG_GREEN};">✓ 应酬/解酒</span></td>
  68. <td style="text-align:center; padding:10px 0;"><span style="color:${BRAND.CORAL};">✗ 不便说"胃不好"</span></td>
  69. </tr>
  70. <tr style="border-bottom:1px solid var(--border);">
  71. <td style="padding:10px 0; color:var(--text-2);">可借势点</td>
  72. <td style="text-align:center; padding:10px 0;"><span style="color:${BRAND.JIANG_GREEN};">藤茶 × 酒 × 肝</span></td>
  73. <td style="text-align:center; padding:10px 0;"><span style="color:${BRAND.HOUGU_TAN};">米稀 7.5 亿 × 江中</span></td>
  74. </tr>
  75. <tr>
  76. <td style="padding:10px 0; color:var(--text-2); font-weight:700;">破局路径</td>
  77. <td style="text-align:center; padding:10px 0; color:${BRAND.TECH_BLUE}; font-weight:700;">原料故事</td>
  78. <td style="text-align:center; padding:10px 0; color:${BRAND.HOUGU_TAN}; font-weight:700;">反向定位</td>
  79. </tr>
  80. </tbody>
  81. </table>
  82. </div>
  83. <div style="margin-top:14px; padding:14px 16px; background:${BRAND.CORAL}0A; border-left:3px solid ${BRAND.CORAL}; border-radius:4px;">
  84. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.15em; margin-bottom:6px; font-weight:700;">WHAT THIS MEANS</div>
  85. <div style="color:var(--text-1); font-size:0.88rem; line-height:1.7;">猴菇饮的成功路径<strong>不在"原料"</strong>,而在<strong style="color:${BRAND.HOUGU_TAN};">"场景 + 人群 + 心智锚点"</strong>——本章后续每一节都围绕这个判断展开。</div>
  86. </div>
  87. </div>
  88. </div>
  89. ${renderDecisionList([
  90. `<strong>写在方案第一页</strong>:主动承认"无显著体感",不包装成新突破`,
  91. `<strong>放弃原料故事路径</strong>:猴头菇早被教育,不重复"发现新成分"剧本`,
  92. `<strong>借力米稀不替代米稀</strong>:米稀 7.5 亿是既有认知资产,饮是增量场景`,
  93. `<strong>所有 VOC 问题先听再答</strong>:差评/抗拒是方向盘,不是公关对象`,
  94. ], { title: '落地决策 · 方法论纪律', accent: BRAND.CORAL, columns: 2 })}
  95. </div>
  96. </section>`;
  97. }
  98. // ================================================================
  99. // 1.2 · 市场现实 · 100亿OTC胃药地图
  100. // ================================================================
  101. function renderSub1_2(ctx) {
  102. const { chapter: c, subIdx, sub, slideNum, slideTotal, data } = ctx;
  103. const items = data.items || [];
  104. const ppiPain = HGY.getEvidence(items, { hypothesis: 'H3', product: '拉唑', top: 3, seed: 23 });
  105. const weitaiPain = HGY.getEvidence(items, { hypothesis: 'H3', product: '三九胃泰', top: 2, seed: 29 });
  106. const foodPain = HGY.getEvidence(items, { hypothesis: 'H1', tag: '场景限制', top: 1, seed: 31 });
  107. const marketSegments = [
  108. { label: 'PPI 拉唑类(治疗)', value: 70, valueLabel: '70% · 70亿', color: BRAND.TECH_BLUE },
  109. { label: '中成药(胃泰/康复新液等)', value: 22, valueLabel: '22% · 22亿', color: BRAND.PURPLE },
  110. { label: '保护剂 H2RA 制酸剂', value: 6, valueLabel: '6% · 6亿', color: BRAND.SAGE },
  111. { label: '功能食品(米稀/猴菇饮等)', value: 2, valueLabel: '2% · 2亿', color: BRAND.HOUGU_TAN },
  112. ];
  113. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  114. <div class="section-inner">
  115. ${renderSectionHead({
  116. eyebrow: `${c.num}.${subIdx} · 市场现实`,
  117. title: '<span style="color:' + BRAND.TECH_BLUE + ';">100 亿</span> OTC 胃药市场地图 · 谁在吃药、谁在痛苦、谁被忽视',
  118. subtitle: '不看行业报告的"品类结构",直接看 VOC 里的<strong>用户情感分布</strong>——哪里痛得最响,哪里就有反向机会。',
  119. color: BRAND.TECH_BLUE,
  120. })}
  121. ${renderStatStrip([
  122. { num: '100亿', label: 'OTC 胃药年市场', color: BRAND.TECH_BLUE },
  123. { num: '70%', label: 'PPI 拉唑占比', color: BRAND.TECH_BLUE },
  124. { num: '2.5亿', label: '慢性胃病患者', color: BRAND.CORAL },
  125. { num: '45%', label: '胃病年轻化 <35 岁', color: BRAND.WARM_ORANGE },
  126. { num: '326', label: 'VOC 样本覆盖', color: BRAND.HOUGU_TAN },
  127. ], { accent: BRAND.TECH_BLUE })}
  128. <div class="grid" style="grid-template-columns:1.3fr 1fr; gap:24px; margin-top:24px;">
  129. <div>
  130. ${renderBarChart(marketSegments, { accent: BRAND.TECH_BLUE, title: '100 亿 OTC 胃药结构 · VOC 情感分布对应', height: 260 })}
  131. <div style="margin-top:18px; padding:18px 22px; background:var(--bg-1); border:1px solid var(--border); border-radius:var(--radius-md);">
  132. <div class="text-mono text-xs" style="color:${BRAND.TECH_BLUE}; letter-spacing:0.18em; margin-bottom:12px; font-weight:700;">VOC 情感浓度 · 各市场段的用户痛感</div>
  133. <div style="display:grid; grid-template-columns:repeat(4, 1fr); gap:10px; font-size:0.82rem;">
  134. <div style="padding:12px; background:${BRAND.TECH_BLUE}0C; border-left:3px solid ${BRAND.TECH_BLUE}; border-radius:4px;">
  135. <div style="color:${BRAND.TECH_BLUE}; font-weight:700; margin-bottom:4px;">PPI · 70%</div>
  136. <div style="color:var(--text-2);">有效但依赖<br/>反弹焦虑<br/>想停停不了</div>
  137. </div>
  138. <div style="padding:12px; background:${BRAND.PURPLE}0C; border-left:3px solid ${BRAND.PURPLE}; border-radius:4px;">
  139. <div style="color:${BRAND.PURPLE}; font-weight:700; margin-bottom:4px;">中成药 · 22%</div>
  140. <div style="color:var(--text-2);">口感抗性<br/>起效慢<br/>执行难</div>
  141. </div>
  142. <div style="padding:12px; background:${BRAND.SAGE}0C; border-left:3px solid ${BRAND.SAGE}; border-radius:4px;">
  143. <div style="color:${BRAND.SAGE}; font-weight:700; margin-bottom:4px;">保护剂 · 6%</div>
  144. <div style="color:var(--text-2);">处方驱动<br/>配合使用<br/>无独立心智</div>
  145. </div>
  146. <div style="padding:12px; background:${BRAND.HOUGU_TAN}0C; border-left:3px solid ${BRAND.HOUGU_TAN}; border-radius:4px;">
  147. <div style="color:${BRAND.HOUGU_TAN}; font-weight:700; margin-bottom:4px;">功能食品 · 2%</div>
  148. <div style="color:var(--text-2);">米稀 7.5 亿独大<br/>场景受限<br/>信任不够</div>
  149. </div>
  150. </div>
  151. </div>
  152. </div>
  153. <div>
  154. <div class="text-mono text-xs" style="color:${BRAND.TECH_BLUE}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC · 每一段的真实痛声</div>
  155. <div style="display:flex; flex-direction:column; gap:12px;">
  156. ${ppiPain.slice(0, 2).map((it) => renderVocCard(it, { accent: BRAND.TECH_BLUE, compact: true })).join('')}
  157. ${weitaiPain.slice(0, 1).map((it) => renderVocCard(it, { accent: BRAND.PURPLE, compact: true })).join('')}
  158. ${foodPain.slice(0, 1).map((it) => renderVocCard(it, { accent: BRAND.HOUGU_TAN, compact: true })).join('')}
  159. </div>
  160. </div>
  161. </div>
  162. ${renderInsightHero({
  163. eyebrow: 'INSIGHT · 市场解读',
  164. color: BRAND.CORAL,
  165. title: `100 亿胃药市场看似被 PPI 占满,但<strong style="color:${BRAND.CORAL};">70% 的份额藏着 70% 的焦虑</strong>。拉唑用户"有效但想停"是未满足需求的集中爆发区。`,
  166. subtitle: `中成药 22% 有稳定基本盘但被剂型/口感锁住增长;功能食品 2% 看似渺小,<strong style="color:${BRAND.HOUGU_TAN};">米稀独家 7.5 亿已证明只要找对场景就能放量</strong>。猴菇饮的战场不是抢 PPI 的 70%,而是把"不敢停 PPI"和"信不过中成药"的夹心层人群<strong>接走</strong>。`,
  167. })}
  168. ${renderDecisionList([
  169. `<strong>不与 PPI 争疗效</strong>:70 亿份额背后是医生处方、医保、药店体系,硬战必败`,
  170. `<strong>接 PPI 焦虑人群</strong>:主打"温和、日常、不抑制"定位,吃 PPI 不敢停的人需要第二条腿`,
  171. `<strong>不与中成药争传统</strong>:三九胃泰等品牌积累深厚,猴菇饮应做"新代际产品"`,
  172. `<strong>扩展"食疗饮"这个新品类</strong>:米稀证明 7.5 亿可行,猴菇饮是 SKU 化 + 场景化升级`,
  173. ], { title: '决策:在 100 亿里找 10-50 亿的无人地带', accent: BRAND.TECH_BLUE, columns: 2 })}
  174. </div>
  175. </section>`;
  176. }
  177. // ================================================================
  178. // 1.3 · VOC 驱动反向定位 · 方法论起点
  179. // ================================================================
  180. function renderSub1_3(ctx) {
  181. const { chapter: c, subIdx, sub, slideNum, slideTotal } = ctx;
  182. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  183. <div class="section-inner">
  184. ${renderSectionHead({
  185. eyebrow: `${c.num}.${subIdx} · 方法论起点`,
  186. title: '反向定位 · <span style="color:' + BRAND.HOUGU_TAN + ';">从 VOC 倒推产品</span>,不是从产品说服 VOC',
  187. subtitle: '传统正向链路在本产品会失效。必须把<strong>"用户真实声音"</strong>放在第一个齿轮,让它驱动后续所有决策。',
  188. color: BRAND.HOUGU_TAN,
  189. })}
  190. <div class="grid" style="grid-template-columns:1fr 1fr; gap:24px; margin-top:24px;">
  191. <div style="padding:24px 26px; background:${BRAND.CORAL}08; border:1px solid ${BRAND.CORAL}30; border-radius:var(--radius-md);">
  192. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.2em; margin-bottom:16px; font-weight:700;">❌ 正向链路 · 本产品必然失效</div>
  193. <div style="display:flex; flex-direction:column; gap:14px;">
  194. ${[
  195. { step: '① 产品', content: '有什么功能?→ 猴头菇养胃', sub: '(真相:猴头菇早被教育完,无新鲜感)' },
  196. { step: '② 功效', content: '宣传什么?→ 修复胃黏膜', sub: '(真相:OTC 边界受限,不能强调治疗)' },
  197. { step: '③ 渠道', content: '去哪卖?→ 药店 + 电商 + KA', sub: '(真相:没有差异化心智,店员没动力推)' },
  198. { step: '④ 推广', content: '怎么说?→ 找明星 + 投电视', sub: '(真相:大曝光被当成"又一款养胃饮"淹没)' },
  199. { step: '⑤ 价格', content: '定多少?→ 对标竞品', sub: '(真相:陷入同质化价格战)' },
  200. ].map((s, i) => `
  201. <div style="display:flex; gap:12px; align-items:flex-start; padding:10px 12px; background:var(--bg-1); border-radius:6px; border-left:2px solid ${BRAND.CORAL}44;">
  202. <div style="flex-shrink:0; color:${BRAND.CORAL}; font-weight:700; font-size:0.86rem; letter-spacing:0.1em;">${s.step}</div>
  203. <div style="flex:1;">
  204. <div style="color:var(--text-1); font-size:0.86rem; font-weight:600;">${s.content}</div>
  205. <div style="color:${BRAND.CORAL}; font-size:0.74rem; margin-top:2px; font-style:italic;">${s.sub}</div>
  206. </div>
  207. </div>`).join('')}
  208. </div>
  209. <div style="margin-top:16px; padding:12px 14px; background:${BRAND.CORAL}12; border-radius:6px; text-align:center;">
  210. <div style="color:${BRAND.CORAL}; font-weight:700; font-size:0.92rem;">📉 结局:5000 万预算 → 打水漂 · 市场份额 &lt; 1%</div>
  211. </div>
  212. </div>
  213. <div style="padding:24px 26px; background:${BRAND.JIANG_GREEN}08; border:1px solid ${BRAND.JIANG_GREEN}30; border-radius:var(--radius-md);">
  214. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.2em; margin-bottom:16px; font-weight:700;">✅ 反向链路 · VOC 先于产品决策</div>
  215. <div style="display:flex; flex-direction:column; gap:14px;">
  216. ${[
  217. { step: '① VOC', content: '用户真实在抱怨什么?', sub: 'PPI 焦虑 / 米稀场景限制 / 送礼空白 / 糖友无糖' },
  218. { step: '② 假设', content: '8 条候选 H1-H8', sub: '米稀归因 / 饼干失败 / PPI 依赖 / 场景 / 店员 / 糖友 / 礼品' },
  219. { step: '③ 证据', content: '多平台 VOC 颗粒度验证', sub: 'xhs/douyin/zhihu/tb/jd/dingxiang × 326 条样本' },
  220. { step: '④ 机会', content: '交叉验证出 3 条长尾赛道', sub: 'PPI 离断过渡饮 / 送胃礼品 / 糖友无糖版' },
  221. { step: '⑤ 产品·渠道·推广·价格', content: '4P 都从机会反推', sub: '规格/陈列/话术/定价都由 VOC 决定' },
  222. ].map((s, i) => `
  223. <div style="display:flex; gap:12px; align-items:flex-start; padding:10px 12px; background:var(--bg-1); border-radius:6px; border-left:2px solid ${BRAND.JIANG_GREEN}66;">
  224. <div style="flex-shrink:0; color:${BRAND.JIANG_GREEN}; font-weight:700; font-size:0.86rem; letter-spacing:0.1em;">${s.step}</div>
  225. <div style="flex:1;">
  226. <div style="color:var(--text-1); font-size:0.86rem; font-weight:600;">${s.content}</div>
  227. <div style="color:${BRAND.JIANG_GREEN}; font-size:0.74rem; margin-top:2px;">${s.sub}</div>
  228. </div>
  229. </div>`).join('')}
  230. </div>
  231. <div style="margin-top:16px; padding:12px 14px; background:${BRAND.JIANG_GREEN}12; border-radius:6px; text-align:center;">
  232. <div style="color:${BRAND.JIANG_GREEN}; font-weight:700; font-size:0.92rem;">📈 结局:5000 万 → 5 亿 · 独占一条差异化赛道</div>
  233. </div>
  234. </div>
  235. </div>
  236. ${renderTheoryBox({
  237. theory: '三位一体方法论 · KANO × JTBD × 场景三元素',
  238. accent: BRAND.PURPLE,
  239. mapping: `<strong style="color:${BRAND.PURPLE};">KANO 模型</strong>(五类需求)负责把 VOC 痛点归类为<em>必备/期望/兴奋/无差异/反向</em>,决定哪些该做、哪些不该做;
  240. <strong style="color:${BRAND.WARM_ORANGE};">JTBD</strong>(Jobs to be Done)拆解用户"雇佣"这瓶饮的三类理由:<em>Functional 胃舒服 / Emotional 不焦虑 / Social 面子孝心</em>;
  241. <strong style="color:${BRAND.JIANG_GREEN};">场景三元素</strong>(时间 × 空间 × 触发事件)定位具体使用场景,避免"全人群/全场景"的装饰性口号。
  242. 三个模型不是学术堆砌,是<strong>决策工具</strong>:每条 VOC → 每个机会 → 每个 4P 动作都会被映射回来验证。`,
  243. })}
  244. ${renderDecisionList([
  245. `<strong>方法论铁律 1</strong>:任何结论必须附至少 3 条 VOC 证据 + 理论映射,否则不写进方案`,
  246. `<strong>方法论铁律 2</strong>:4 渠道 × 5 模块 只是结果交付形式,不是驱动分析的起点`,
  247. `<strong>方法论铁律 3</strong>:VOC 差评与抗拒是最珍贵的原始素材,要主动挖掘而非回避`,
  248. `<strong>方法论铁律 4</strong>:理论模型(KANO/JTBD/场景)用于验证和分类,不用于装饰`,
  249. `<strong>方法论铁律 5</strong>:每个假设 H1-H8 都必须独立给出<em>证真/证伪/需追加验证</em>的结论`,
  250. `<strong>方法论铁律 6</strong>:本报告交付物 = 方向假设集 + VOC 证据链 + 4P 配称蓝图 + 5000 万 → 5 亿路径`,
  251. ], { title: '方法论铁律 · 每条都是自律', accent: BRAND.HOUGU_TAN, columns: 2 })}
  252. </div>
  253. </section>`;
  254. }
  255. module.exports = {
  256. 'challenge-1': renderSub1_1,
  257. 'challenge-2': renderSub1_2,
  258. 'challenge-3': renderSub1_3,
  259. };