lactic-ch4-kano.js 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. // ==============================================================================
  2. // 江中乳酸菌素片儿童版 · Ch4 KANO × JTBD 双视角(5 子章)
  3. // ==============================================================================
  4. // 4.1 KANO 五类·必备/期望/兴奋/无差异/反向
  5. // 4.2 JTBD·家长 Functional 功能价值
  6. // 4.3 JTBD·家长 Emotional 情绪价值
  7. // 4.4 JTBD·儿童 × 家长 Social 社会价值
  8. // 4.5 决策优先级·SKU / 话术 / 包装映射
  9. // ==============================================================================
  10. const LA = require('./lactic-analyze.js');
  11. const C = require('./lactic-components.js');
  12. const { BRAND, esc, fmtLikes } = C;
  13. // ==========================================================
  14. // 4.1 · KANO 五类
  15. // ==========================================================
  16. function renderSub4_1(ctx) {
  17. const { chapter: c, subIdx, sub, slideNum, slideTotal, data } = ctx;
  18. const items = data.items || [];
  19. const mustHave = LA.getEvidence(items, {
  20. contentMatch: /OTC|国药准字|蓝帽|药品|安全|放心/, minChars: 20, top: 1, seed: 5,
  21. });
  22. const perform = LA.getEvidence(items, {
  23. contentMatch: /有效|管用|好转|通了|不拉了|便秘好了|见效|改善/, minChars: 20, top: 1, seed: 7,
  24. });
  25. const excite = LA.getEvidence(items, {
  26. contentMatch: /爱吃|主动要|每天吃|像糖|当零食|甜甜的|奶片/, minChars: 20, top: 1, seed: 11,
  27. });
  28. const reverse = LA.getEvidence(items, {
  29. contentMatch: /苦|难吃|吐出|抗拒|药盒|硬广|广告/, minChars: 15, top: 1, seed: 13,
  30. });
  31. const kanoRows = [
  32. {
  33. type: '必备需求', en: 'MUST-HAVE', color: BRAND.CORAL,
  34. desc: '没有就不买 · 家长的底线',
  35. items: ['OTC 蓝帽子国药准字', '无防腐剂 / 无色素 / 无香精', '说明书明确适用年龄'],
  36. voc: mustHave[0],
  37. action: '<strong>蓝帽 OTC 双证 · 成分表公开 · 分龄说明书</strong>',
  38. },
  39. {
  40. type: '期望需求', en: 'PERFORMANCE', color: BRAND.LACTIC_MINT,
  41. desc: '越好越愿意付钱',
  42. items: ['便秘 / 积食 / 挑食 / 腹泻 真实改善', '连服 7-14 天可见体感', '停药不反弹 / 菌群稳定'],
  43. voc: perform[0],
  44. action: '<strong>临床数据背书 · 7 天效果打卡包 · 长期服用无反弹</strong>',
  45. },
  46. {
  47. type: '兴奋需求', en: 'ATTRACTIVE', color: BRAND.JIANG_GREEN,
  48. desc: '没想到的惊喜 · 溢价来源',
  49. items: ['孩子主动要吃(不用哄)', '分龄卡通礼盒(0-3 / 3-6 / 6-12)', '小程序家长社群 + 医生答疑'],
  50. voc: excite[0],
  51. action: '<strong>水果味咀嚼片 + IP 联名 + 家长 App 记录</strong>',
  52. },
  53. {
  54. type: '无差异需求', en: 'INDIFFERENT', color: BRAND.SAGE,
  55. desc: '做了也不加分 · 成本浪费',
  56. items: ['钙/锌/维生素复合(稀释主心智)', '过多菌株堆砌(多 = 好的幻觉)', '进口原料包装(国货反而更可信)'],
  57. voc: null,
  58. action: '<strong>做减法:单一乳酸菌素 &gt; 成分杂交</strong>',
  59. },
  60. {
  61. type: '反向需求', en: 'REVERSE', color: BRAND.WINE_RED,
  62. desc: '做了反而更差',
  63. items: ['药盒严肃感(降低儿童接受度)', '硬广洗脑(家长反感 KOL 说教)', '恐惧营销("不吃就生病"吓坏家长)'],
  64. voc: reverse[0],
  65. action: '<strong>禁止药盒设计 · 禁止恐惧营销 · 禁止硬广洗脑</strong>',
  66. },
  67. ];
  68. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  69. <div class="section-inner">
  70. ${C.renderSectionHead({
  71. eyebrow: `${c.num}.${subIdx} · KANO 五类需求`,
  72. title: '<span style="color:' + BRAND.PURPLE + ';">KANO 五类</span>:乳酸菌素片儿童版的需求优先级',
  73. subtitle: '把 KANO 模型<strong>折叠为可执行的 SKU / 包装 / 话术</strong>决策——每一类都对应真实 VOC 证据,不是理论装饰。',
  74. color: BRAND.PURPLE,
  75. })}
  76. <div class="grid" style="grid-template-columns:1fr; gap:16px; margin-top:20px;">
  77. ${kanoRows.map((r) => `
  78. <div style="padding:18px 22px; background:var(--bg-1); border:1px solid var(--border); border-left:4px solid ${r.color}; border-radius:var(--radius-md);">
  79. <div style="display:grid; grid-template-columns:160px 1.1fr ${r.voc ? '1.2fr' : ''} 1fr; gap:18px; align-items:start;">
  80. <div>
  81. <div class="text-mono text-xs" style="color:${r.color}; letter-spacing:0.15em; margin-bottom:6px; font-weight:700;">${r.en}</div>
  82. <div style="color:var(--text-1); font-weight:800; font-size:1.05rem; margin-bottom:6px;">${r.type}</div>
  83. <div style="color:var(--text-3); font-size:0.76rem; line-height:1.55;">${r.desc}</div>
  84. </div>
  85. <div>
  86. <div class="text-mono text-xs" style="color:${BRAND.PURPLE}; letter-spacing:0.15em; margin-bottom:8px; font-weight:700;">对应需求</div>
  87. <ul style="margin:0; padding-left:18px; list-style:disc; color:var(--text-1); font-size:0.84rem; line-height:1.7;">
  88. ${r.items.map((it) => `<li style="margin-bottom:4px;">${it}</li>`).join('')}
  89. </ul>
  90. </div>
  91. ${r.voc ? `<div>
  92. ${C.renderVocCard(r.voc, { accent: r.color, compact: true, maxChars: 150 })}
  93. </div>` : ''}
  94. <div>
  95. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.15em; margin-bottom:8px; font-weight:700;">决策映射</div>
  96. <div style="padding:10px 12px; background:${BRAND.JIANG_GREEN}08; border:1px solid ${BRAND.JIANG_GREEN}33; border-radius:4px; font-size:0.8rem; line-height:1.6;">
  97. ${r.action}
  98. </div>
  99. </div>
  100. </div>
  101. </div>`).join('')}
  102. </div>
  103. ${C.renderDecisionList([
  104. `<strong>必备 P0</strong>:蓝帽 OTC + 无三剂(防腐剂/色素/香精)+ 分龄说明 —— 上市前必做`,
  105. `<strong>期望 P1</strong>:7 天见效打卡 + 真实临床数据 + 停药不反弹宣传`,
  106. `<strong>兴奋 P2</strong>:水果咀嚼片 + 分龄礼盒 + 家长社群 —— 溢价来源`,
  107. `<strong>反向封锁</strong>:不做药盒感 / 不做恐惧营销 / 不做硬广 TVC`,
  108. ], { title: '落地决策 · KANO 优先级', accent: BRAND.PURPLE, columns: 2 })}
  109. </div>
  110. </section>`;
  111. }
  112. // ==========================================================
  113. // 4.2 · JTBD · 家长 Functional 功能价值
  114. // ==========================================================
  115. function renderSub4_2(ctx) {
  116. const { chapter: c, subIdx, sub, slideNum, slideTotal, data } = ctx;
  117. const items = data.items || [];
  118. const func = LA.getEvidence(items, {
  119. contentMatch: /便秘|积食|挑食|腹泻|抗生素|菌群|调理肠胃|肠道|消化不良/,
  120. minChars: 30, top: 6, seed: 5,
  121. });
  122. const funcJobs = [
  123. { icon: '🚫', title: '解决·便秘', color: BRAND.CORAL,
  124. voc: func.find((it) => /便秘|便干|几天|憋便|排便/.test(it.content || '')),
  125. job: '<strong>"孩子好几天才上一次wc,肚子也鼓鼓的"</strong>(合生元 ♥144)', metric: '连服 7-14 天排便通畅率 ≥ 70%' },
  126. { icon: '🍔', title: '解决·积食', color: BRAND.WARM_ORANGE,
  127. voc: func.find((it) => /积食|口气|舌苔|肚子胀|不爱吃饭|食欲/.test(it.content || '')),
  128. job: '<strong>"孩子重度积食了‼️"</strong>(XHS ♥2247)', metric: '舌苔 + 口气 + 食欲改善 7-14 天' },
  129. { icon: '💊', title: '解决·抗生素后', color: BRAND.TECH_BLUE,
  130. voc: func.find((it) => /抗生素|消炎药|头孢|阿莫西林|菌群|杀菌/.test(it.content || '')),
  131. job: '<strong>"抗生素后停后多久吃益生菌?顺序错了白花钱"</strong>(XHS ♥839)', metric: '抗生素后肠道菌群恢复 10-14 天' },
  132. { icon: '🍚', title: '改善·挑食厌食', color: BRAND.SUNNY_YELLOW,
  133. voc: func.find((it) => /挑食|饭渣|不爱吃饭|厌食|专注度/.test(it.content || '')),
  134. job: '<strong>"饭渣孩子 ♥8540 全攻略"</strong>——挑食是脾胃问题不是性格问题', metric: '3-4 周食欲 / 进食量 / 专注度提升' },
  135. ];
  136. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  137. <div class="section-inner">
  138. ${C.renderSectionHead({
  139. eyebrow: `${c.num}.${subIdx} · JTBD Functional`,
  140. title: '<span style="color:' + BRAND.TECH_BLUE + ';">家长 Functional</span>:4 个"雇佣乳酸菌素片"干的真实活',
  141. subtitle: '家长不在意"益生菌",在意<strong>"孩子的 4 个具体问题</strong>"。每个 Job 都对应真实高赞 VOC + 可量化的成功指标。',
  142. color: BRAND.TECH_BLUE,
  143. })}
  144. <div class="grid" style="grid-template-columns:1fr 1fr; gap:18px; margin-top:20px;">
  145. ${funcJobs.map((j) => `
  146. <div style="padding:20px 22px; background:var(--bg-1); border:1px solid var(--border); border-left:4px solid ${j.color}; border-radius:var(--radius-md);">
  147. <div style="display:flex; align-items:center; gap:10px; margin-bottom:12px;">
  148. <div style="font-size:1.8rem;">${j.icon}</div>
  149. <div>
  150. <div style="color:var(--text-1); font-weight:800; font-size:1.08rem;">${esc(j.title)}</div>
  151. <div class="text-mono text-xs" style="color:${j.color}; letter-spacing:0.1em; margin-top:2px;">JOB-TO-BE-DONE</div>
  152. </div>
  153. </div>
  154. <div style="padding:12px 14px; background:${j.color}08; border-left:3px solid ${j.color}; border-radius:4px; margin-bottom:12px;">
  155. <div style="color:var(--text-1); font-size:0.88rem; line-height:1.7;">${j.job}</div>
  156. </div>
  157. ${j.voc ? C.renderVocCard(j.voc, { accent: j.color, compact: true, maxChars: 160 }) : `<div style="padding:12px; background:var(--bg-2); border-radius:4px; color:var(--text-3); font-size:0.8rem; text-align:center;">—— VOC 数据暂缺 ——</div>`}
  158. <div style="margin-top:12px; padding:10px 12px; background:${BRAND.JIANG_GREEN}08; border:1px solid ${BRAND.JIANG_GREEN}33; border-radius:4px;">
  159. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.15em; margin-bottom:4px; font-weight:700;">成功指标</div>
  160. <div style="color:var(--text-1); font-size:0.82rem;">${esc(j.metric)}</div>
  161. </div>
  162. </div>`).join('')}
  163. </div>
  164. ${C.renderDecisionList([
  165. `<strong>Functional 话术四句</strong>:便秘通 / 积食消 / 挑食改善 / 抗生素后修复`,
  166. `<strong>Job-to-be-Done 卡位</strong>:不讲"益生菌好",讲"孩子便秘/积食 14 天改善"`,
  167. `<strong>度量 KPI</strong>:14 天改善率 / 3 个月续购率 / 家长 NPS`,
  168. `<strong>内容主题</strong>:XHS"7 天/14 天打卡" + 抖音"孩子前后对比"`,
  169. ], { title: '落地决策 · Functional 落位', accent: BRAND.TECH_BLUE, columns: 2 })}
  170. </div>
  171. </section>`;
  172. }
  173. // ==========================================================
  174. // 4.3 · JTBD · 家长 Emotional 情绪价值
  175. // ==========================================================
  176. function renderSub4_3(ctx) {
  177. const { chapter: c, subIdx, sub, slideNum, slideTotal, data } = ctx;
  178. const items = data.items || [];
  179. const anxiety = LA.getEvidence(items, {
  180. contentMatch: /焦虑|担心|怕|害怕|急坏|愁坏|破防|心疼|心酸|睡不着|着急/,
  181. minChars: 25, top: 3, seed: 7,
  182. });
  183. const relief = LA.getEvidence(items, {
  184. contentMatch: /安心|放心|踏实|省心|不用.*操心|解决了|总算|终于|不担心/,
  185. minChars: 25, top: 3, seed: 11,
  186. });
  187. const emoJobs = [
  188. { title: '化解"带娃生病焦虑"', color: BRAND.CORAL,
  189. before: '"孩子拉肚子一天 5 次" ♥4312 · "吃饭像打仗" ♥1144',
  190. after: '"家里有常备的一瓶,半夜不用跑医院"',
  191. voc: anxiety[0] },
  192. { title: '化解"混用多品牌焦虑"', color: BRAND.WARM_ORANGE,
  193. before: '"吃合生元,都说应该吃食品级益生菌,买了肯贝优...八十人说八十样" ♥1',
  194. after: '"一瓶管一年,不用再对比十几个品牌"',
  195. voc: anxiety[1] },
  196. { title: '化解"长期服用焦虑"', color: BRAND.ROSE,
  197. before: '"乳酸菌有个成分,吃多致癌" 谣言 / "长期吃益生菌的副作用" ♥939',
  198. after: '"OTC 药品级,江中老国货,长期吃也放心"',
  199. voc: anxiety[2] },
  200. { title: '化解"喂药抗拒焦虑"', color: BRAND.BERRY_PINK,
  201. before: '"喂药像打仗,吐出来半片满手都是" · "一次一板好麻烦"',
  202. after: '"孩子追着要吃,水果味一板就够两次"',
  203. voc: relief[0] },
  204. ];
  205. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  206. <div class="section-inner">
  207. ${C.renderSectionHead({
  208. eyebrow: `${c.num}.${subIdx} · JTBD Emotional`,
  209. title: '<span style="color:' + BRAND.CORAL + ';">家长 Emotional</span>:从 4 条焦虑到 4 条安心',
  210. subtitle: '家长买的不只是药,是<strong>一种情绪状态的转移</strong>——从"带娃焦虑睡不着"到"每天一片不操心"。',
  211. color: BRAND.CORAL,
  212. })}
  213. <div class="grid" style="grid-template-columns:1fr 1fr; gap:18px; margin-top:20px;">
  214. ${emoJobs.map((j) => `
  215. <div style="padding:20px 22px; background:var(--bg-1); border:1px solid var(--border); border-left:4px solid ${j.color}; border-radius:var(--radius-md);">
  216. <div style="color:var(--text-1); font-weight:800; font-size:1.08rem; margin-bottom:14px;">${esc(j.title)}</div>
  217. <div style="display:grid; grid-template-columns:1fr auto 1fr; gap:10px; align-items:center; margin-bottom:14px;">
  218. <div style="padding:12px 14px; background:${BRAND.CORAL}0A; border:1px solid ${BRAND.CORAL}33; border-radius:4px;">
  219. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; margin-bottom:4px; font-weight:700;">BEFORE · 焦虑</div>
  220. <div style="color:var(--text-1); font-size:0.82rem; line-height:1.6;">${j.before}</div>
  221. </div>
  222. <div style="color:${j.color}; font-size:1.6rem;">→</div>
  223. <div style="padding:12px 14px; background:${j.color}0A; border:1px solid ${j.color}33; border-radius:4px;">
  224. <div class="text-mono text-xs" style="color:${j.color}; margin-bottom:4px; font-weight:700;">AFTER · 安心</div>
  225. <div style="color:var(--text-1); font-size:0.84rem; line-height:1.6; font-weight:600;">${esc(j.after)}</div>
  226. </div>
  227. </div>
  228. ${j.voc ? C.renderVocCard(j.voc, { accent: j.color, compact: true, maxChars: 160 }) : ''}
  229. </div>`).join('')}
  230. </div>
  231. <div class="fade-up" style="margin-top:24px;">
  232. ${C.renderInsightHero({
  233. eyebrow: 'EMOTIONAL PROMISE · 情绪承诺',
  234. color: BRAND.CORAL,
  235. title: `<strong>"乳酸菌素片不是治病的药,是<span style='color:${BRAND.JIANG_GREEN};'>一粒让妈妈放心的每日仪式</span>"</strong>——这是情绪价值的共同母题。`,
  236. subtitle: `广告片不拍产品,拍<em>妈妈看着孩子主动开瓶子那一刻的嘴角</em>——那是真正的情绪价值成交。`,
  237. })}
  238. </div>
  239. ${C.renderDecisionList([
  240. `<strong>文案主轴</strong>:不讲"益生菌"讲"不操心"—— 带娃一身轻`,
  241. `<strong>视觉主轴</strong>:每支广告都有"焦虑 → 放下" 的母亲神情转变`,
  242. `<strong>仪式感设计</strong>:每日一片的开瓶声 = "今日任务完成" 的情绪钩`,
  243. `<strong>共情社群</strong>:XHS"新手妈妈互助小组" · 抖音"带娃不焦虑打卡"`,
  244. ], { title: '落地决策 · Emotional 落位', accent: BRAND.CORAL, columns: 2 })}
  245. </div>
  246. </section>`;
  247. }
  248. // ==========================================================
  249. // 4.4 · JTBD · 儿童 × 家长 Social 社会价值
  250. // ==========================================================
  251. function renderSub4_4(ctx) {
  252. const { chapter: c, subIdx, sub, slideNum, slideTotal } = ctx;
  253. const socialRoles = [
  254. {
  255. role: '妈妈圈专业感徽章',
  256. color: BRAND.BERRY_PINK,
  257. scenario: '家长群 / 幼儿园接送 / 同事午餐 → "我家娃吃乳酸菌素片,江中的,日常调理很温和"',
  258. hook: '新手妈妈通过"给孩子吃对的东西"建立妈妈圈专业人设——乳酸菌素片作为 OTC 国货,比合生元进口款更有"懂行的内行感"',
  259. value: '妈妈圈的<strong>"懂事又理性"</strong>专业标签',
  260. },
  261. {
  262. role: '孩子被羡慕的零食感',
  263. color: BRAND.SUNNY_YELLOW,
  264. scenario: '幼儿园午睡后 / 家庭聚会 / 朋友家玩耍 → 孩子从小书包掏出一板咀嚼片 → 其他小朋友围观',
  265. hook: '儿童的社交信号 = "我有你没有的东西"。水果味独立包装 + 卡通 IP = 孩子的社交货币。家长发现孩子主动要吃 = 复购+口碑双飞',
  266. value: '孩子群体中的<strong>"被看见 / 被羡慕"</strong>小确幸',
  267. },
  268. {
  269. role: '祖辈送孩子的 "爱意表达"',
  270. color: BRAND.GOLD,
  271. scenario: '春节 / 周末探亲 / 节日礼品 → 奶奶给孙子买 / 姥姥给外孙准备',
  272. hook: '祖辈带娃普遍焦虑"孩子肠胃脾胃"(中式育儿痛点),送礼盒装乳酸菌素片 = "我关心你的根"',
  273. value: '祖辈 → 孙辈的<strong>"中式关心仪式"</strong>具象化',
  274. },
  275. {
  276. role: '家庭守护者角色',
  277. color: BRAND.JIANG_GREEN,
  278. scenario: '夫妻间 / 家人间 → "老婆,我给娃囤了一年份" · "老公记得给娃带一板去幼儿园"',
  279. hook: '夫妻协作 / 家庭成员间的"对孩子的共同关心"——乳酸菌素片作为家庭常备成为"我们一起守护孩子"的实物锚点',
  280. value: '家庭关系中的<strong>"共同负责"</strong>具象化',
  281. },
  282. ];
  283. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  284. <div class="section-inner">
  285. ${C.renderSectionHead({
  286. eyebrow: `${c.num}.${subIdx} · JTBD Social`,
  287. title: '<span style="color:' + BRAND.GOLD + ';">Social 社会价值</span>:4 个社交符号 × 家长 + 儿童双视角',
  288. subtitle: '产品不是孤立存在的——它是家长朋友圈、孩子幼儿园、祖辈代际间的<strong>社交符号道具</strong>。每个符号对应关系 × 场景 × 身份表达。',
  289. color: BRAND.GOLD,
  290. })}
  291. <div class="grid" style="grid-template-columns:1fr 1fr; gap:18px; margin-top:20px;">
  292. ${socialRoles.map((r) => `
  293. <div style="padding:20px 22px; background:var(--bg-1); border:1px solid var(--border); border-left:4px solid ${r.color}; border-radius:var(--radius-md);">
  294. <div class="text-mono text-xs" style="color:${r.color}; letter-spacing:0.15em; margin-bottom:6px; font-weight:700;">SOCIAL ROLE</div>
  295. <div style="color:var(--text-1); font-weight:800; font-size:1.08rem; margin-bottom:12px;">${esc(r.role)}</div>
  296. <div style="padding:12px 14px; background:${r.color}08; border-left:3px solid ${r.color}; border-radius:4px; margin-bottom:12px;">
  297. <div class="text-mono text-xs" style="color:${r.color}; margin-bottom:4px; font-weight:700;">场景剧本</div>
  298. <div style="color:var(--text-1); font-size:0.84rem; line-height:1.6;">${r.scenario}</div>
  299. </div>
  300. <div style="padding:10px 12px; background:${BRAND.PURPLE}0A; border-radius:4px; margin-bottom:12px;">
  301. <div class="text-mono text-xs" style="color:${BRAND.PURPLE}; margin-bottom:4px; font-weight:700;">VOC HOOK</div>
  302. <div style="color:var(--text-1); font-size:0.8rem; line-height:1.55;">${r.hook}</div>
  303. </div>
  304. <div style="padding:10px 12px; background:${BRAND.JIANG_GREEN}08; border:1px solid ${BRAND.JIANG_GREEN}33; border-radius:4px;">
  305. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; margin-bottom:4px; font-weight:700;">身份标签</div>
  306. <div style="color:var(--text-1); font-size:0.84rem;">${r.value}</div>
  307. </div>
  308. </div>`).join('')}
  309. </div>
  310. ${C.renderDecisionList([
  311. `<strong>妈妈圈营销</strong>:XHS"新手妈妈 OTC 选择" × 抖音育儿 KOL 测评`,
  312. `<strong>孩子社交货币</strong>:分龄卡通 IP 联名(喜羊羊 / 宝宝巴士 / 小猪佩奇)`,
  313. `<strong>祖辈礼品带</strong>:节日礼盒 ¥198-298 · "送孙子的健康"`,
  314. `<strong>家庭共情</strong>:微信小程序"全家健康打卡"家长社群`,
  315. ], { title: '落地决策 · 4 个社交符号产品化', accent: BRAND.GOLD, columns: 2 })}
  316. </div>
  317. </section>`;
  318. }
  319. // ==========================================================
  320. // 4.5 · 决策优先级·SKU / 话术 / 包装映射
  321. // ==========================================================
  322. function renderSub4_5(ctx) {
  323. const { chapter: c, subIdx, sub, slideNum, slideTotal } = ctx;
  324. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  325. <div class="section-inner">
  326. ${C.renderSectionHead({
  327. eyebrow: `${c.num}.${subIdx} · 决策优先级`,
  328. title: '<span style="color:' + BRAND.SAGE + ';">KANO × JTBD</span> → <span style="color:' + BRAND.JIANG_GREEN + ';">SKU / 话术 / 包装 / 价格</span> 映射',
  329. subtitle: 'KANO 5 类 × JTBD 3 维 = <strong>15 项具体决策</strong>,每一项在下游 SKU / 话术 / 包装 / 价格上都有直接映射。',
  330. color: BRAND.SAGE,
  331. })}
  332. <div style="margin-top:20px;">
  333. ${C.renderCompareTable({
  334. title: 'DECISION MATRIX · 决策矩阵',
  335. headers: ['维度', 'Functional 功能', 'Emotional 情绪', 'Social 社会'],
  336. rows: [
  337. [{ html: '<strong>必备</strong>', color: BRAND.CORAL, bold: true },
  338. { html: 'OTC 合规 × 成分表公开', color: 'var(--text-1)' },
  339. { html: '每天吃得放心', color: 'var(--text-1)' },
  340. { html: '可以光明正大送人', color: 'var(--text-1)' }],
  341. [{ html: '<strong>期望</strong>', color: BRAND.LACTIC_MINT, bold: true },
  342. { html: '便秘/积食/挑食 14 天见效', color: 'var(--text-1)' },
  343. { html: '带娃不焦虑 × 长期养护', color: 'var(--text-1)' },
  344. { html: '妈妈圈"懂行"标签', color: 'var(--text-1)' }],
  345. [{ html: '<strong>兴奋</strong>', color: BRAND.JIANG_GREEN, bold: true },
  346. { html: '7 天打卡包 + 专家答疑', color: 'var(--text-1)' },
  347. { html: '分龄仪式感 + 家长社群', color: 'var(--text-1)' },
  348. { html: '卡通 IP 联名 + 送礼礼盒', color: 'var(--text-1)' }],
  349. [{ html: '<strong>无差异</strong>', color: BRAND.SAGE, bold: true },
  350. { html: '避免多成分堆砌', color: BRAND.SAGE },
  351. { html: '避免过度情绪包装', color: BRAND.SAGE },
  352. { html: '避免进口营销套路', color: BRAND.SAGE }],
  353. [{ html: '<strong>反向</strong>', color: BRAND.WINE_RED, bold: true },
  354. { html: '✗ 剂量夸张 / 虚假宣称', color: BRAND.WINE_RED },
  355. { html: '✗ 恐惧营销 / 吓坏家长', color: BRAND.WINE_RED },
  356. { html: '✗ 药盒感 / 硬广轰炸', color: BRAND.WINE_RED }],
  357. ],
  358. accent: BRAND.SAGE,
  359. })}
  360. </div>
  361. <div class="grid" style="grid-template-columns:1fr 1fr 1fr 1fr; gap:14px; margin-top:24px;">
  362. <div style="padding:18px; background:${BRAND.CORAL}08; border:1px solid ${BRAND.CORAL}33; border-radius:var(--radius-md);">
  363. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; margin-bottom:8px; font-weight:700;">SKU 映射</div>
  364. <div style="color:var(--text-1); font-size:0.84rem; line-height:1.7;">
  365. · 日常瓶 60 片 ¥58<br/>
  366. · 独立板装 2×14 ¥45<br/>
  367. · 分龄礼盒(3 规格)¥128<br/>
  368. · 国礼装 ¥298<br/>
  369. · 入园装 30 板 ¥75
  370. </div>
  371. </div>
  372. <div style="padding:18px; background:${BRAND.LACTIC_MINT}08; border:1px solid ${BRAND.LACTIC_MINT}33; border-radius:var(--radius-md);">
  373. <div class="text-mono text-xs" style="color:${BRAND.LACTIC_MINT}; margin-bottom:8px; font-weight:700;">话术映射</div>
  374. <div style="color:var(--text-1); font-size:0.84rem; line-height:1.7;">
  375. · 儿童肠道养护 OTC<br/>
  376. · 告别瓶瓶罐罐<br/>
  377. · 江中老国货我放心<br/>
  378. · 日常吃每天一片<br/>
  379. · 家长+孩子都爱
  380. </div>
  381. </div>
  382. <div style="padding:18px; background:${BRAND.SUNNY_YELLOW}08; border:1px solid ${BRAND.SUNNY_YELLOW}33; border-radius:var(--radius-md);">
  383. <div class="text-mono text-xs" style="color:${BRAND.SUNNY_YELLOW}; margin-bottom:8px; font-weight:700;">包装映射</div>
  384. <div style="color:var(--text-1); font-size:0.84rem; line-height:1.7;">
  385. · 去药盒化 轻养生风<br/>
  386. · 卡通 IP × 分龄配色<br/>
  387. · 草莓/酸奶/橙子三口味<br/>
  388. · 独立板装带日期<br/>
  389. · 蓝帽子 OTC 显眼
  390. </div>
  391. </div>
  392. <div style="padding:18px; background:${BRAND.JIANG_GREEN}08; border:1px solid ${BRAND.JIANG_GREEN}33; border-radius:var(--radius-md);">
  393. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; margin-bottom:8px; font-weight:700;">价格映射</div>
  394. <div style="color:var(--text-1); font-size:0.84rem; line-height:1.7;">
  395. · 入门带:¥45-75<br/>
  396. · 主销带:¥128-198<br/>
  397. · 礼品带:¥298-498<br/>
  398. · vs 合生元超金:-50%<br/>
  399. · vs 妈咪爱:+30% 溢价
  400. </div>
  401. </div>
  402. </div>
  403. ${C.renderDecisionList([
  404. `<strong>P0 必备</strong>:蓝帽 OTC + 成分无三剂 + 分龄标注`,
  405. `<strong>P1 期望</strong>:14 天见效话术 + 临床数据 + 长期可服`,
  406. `<strong>P2 兴奋</strong>:卡通 IP 联名 + 分龄礼盒 + 家长社群`,
  407. `<strong>反向封锁</strong>:禁止药盒感 + 禁止恐惧营销 + 禁止硬广轰炸`,
  408. ], { title: '落地决策 · 5 类需求执行优先级', accent: BRAND.SAGE, columns: 2 })}
  409. </div>
  410. </section>`;
  411. }
  412. module.exports = {
  413. 'kano-1': renderSub4_1,
  414. 'kano-2': renderSub4_2,
  415. 'kano-3': renderSub4_3,
  416. 'kano-4': renderSub4_4,
  417. 'kano-5': renderSub4_5,
  418. };