// Runtime data registry — 减肥 (weight loss) theme demo.
// Answer rewrite: structure-first storytelling (anchor moment + dialogue +
// late reveal + no summary), witty answers earn their position by payoff,
// not by signposting. Order per question: A-graded stories first, B/C+
// witties in middle, D ad always last.

// Resolves a picsum seed+size to a LOCAL cached file path. The cache is
// populated by scripts/cache_picsum.py and loaded as window.__picsumManifest
// by index.html before babel scripts. Local cache eliminates picsum.photos
// dependency (Cloudflare-blocked on some China networks; unreliable on stage).
function _localPicsum(seed, w, h) {
  const m = (typeof window !== 'undefined' && window.__picsumManifest) || null;
  const key = `${seed}|${w}x${h}`;
  if (m && m[key]) return `assets/picsum/${m[key]}`;
  // Fallback: original picsum (works if local cache misses)
  return `https://picsum.photos/seed/${seed}/${w}/${h}`;
}

function avatarUrl(persona, size = 128) {
  // 显式 avatarUrl 优先 (例: 爱因斯坦走 Wikipedia Commons 真人照).
  if (persona.avatarUrl) return persona.avatarUrl;
  const seed = persona.avatarSeed || persona.id;
  return _localPicsum(seed, size, size);
}

function imageUrl(srcOrKeywords, w = 600, h = 400, lock = null) {
  if (typeof srcOrKeywords !== 'string') return '';
  if (srcOrKeywords.startsWith('http'))    return srcOrKeywords;
  if (srcOrKeywords.startsWith('assets/')) return srcOrKeywords;  // already cached, don't double-encode
  const seed = lock != null ? `mirror-${lock}` : encodeURIComponent(srcOrKeywords);
  return _localPicsum(seed, w, h);
}

// ─── Personas ──────────────────────────────────────────────────────────
// 若 data-v2.jsx 已加载, 优先用 V2 (60 人新池子). 否则保留旧池兜底.
const PERSONAS_OLD = {
  p001: {
    id: 'p001', name: '苏予安', gender: 'm',
    avatarSeed: 'p001-su-yuan-endocrine',
    bio: '北京协和内分泌科, 看了 15 年代谢病门诊｜业余跑半马｜对家庭医学感兴趣',
    credential: 'verified', credentialText: '知乎认证医师 · 北京协和医院内分泌科',
    region: '北京', profession: '内分泌科医师',
    stats: { likes: 87421, followers: 89234, following: 124, answers: 1247, articles: 86, columns: 2, asks: 11, ideas: 0 },
    badges: ['内分泌话题优秀答主'],
    coverGradient: ['#1F3A5F', '#0E1B30'],
  },
  p002: {
    id: 'p002', name: '陈砚秋', gender: 'f',
    avatarSeed: 'p002-chen-nutrition',
    bio: '上海六院临床营养科｜跟踪过 800+ 例减重患者全周期｜咖啡爱好者',
    credential: 'verified', credentialText: '知乎认证医师 · 上海第六人民医院临床营养科',
    region: '上海', profession: '临床营养师',
    stats: { likes: 56218, followers: 56712, following: 89, answers: 892, articles: 54, columns: 1, asks: 3, ideas: 12 },
    badges: ['营养学话题优秀答主'],
    coverGradient: ['#2E1F5F', '#170E30'],
  },
  p003: {
    id: 'p003', name: '张沛然', gender: 'm',
    avatarSeed: 'p003-zhang-bariatric',
    bio: '中山一院普外｜做过 500+ 例减重代谢手术｜手术之外喜欢钓鱼',
    credential: 'verified', credentialText: '知乎认证医师 · 中山大学附属第一医院减重与代谢外科',
    region: '广东', profession: '减重外科医师',
    stats: { likes: 28412, followers: 34521, following: 67, answers: 567, articles: 38, columns: 0, asks: 5, ideas: 4 },
    badges: ['普外科话题优秀答主'],
    coverGradient: ['#1F3F2F', '#0E2018'],
  },
  p_genHEAVY01: {
    id: 'p_genHEAVY01', name: '老周的减重日记', gender: 'm',
    avatarSeed: 'heavy-zhou-lose-26kg',
    bio: '从 98kg 减到 72kg, 中间反弹过 3 次｜分享真实路径不卖货',
    credential: 'none', credentialText: null,
    region: '江苏', profession: '前互联网产品经理',
    stats: { likes: 18923, followers: 4127, following: 312, answers: 78, articles: 14, columns: 0, asks: 8, ideas: 56 },
    badges: [], coverGradient: ['#3A2A1A', '#1F140A'],
  },
  p_genHEAVY02: {
    id: 'p_genHEAVY02', name: '呼吸机蛋糕', gender: 'f',
    avatarSeed: 'heavy-cake-7yr',
    bio: '减肥失败 7 年, 第 8 年放弃称重器后反而瘦了｜写一些减肥心理',
    credential: 'none', credentialText: null,
    region: '浙江', profession: '甜品师',
    stats: { likes: 11247, followers: 2890, following: 456, answers: 41, articles: 22, columns: 0, asks: 3, ideas: 87 },
    badges: [], coverGradient: ['#5C3D5C', '#2D1D2D'],
  },
  p_genHEAVY03: {
    id: 'p_genHEAVY03', name: '老王买买买', gender: 'm',
    avatarSeed: 'heavy-laowang-30products',
    bio: '智商税收割对象, 现身说法｜买过 30+ 种减肥产品的人',
    credential: 'none', credentialText: null,
    region: '广东', profession: '某互联网公司测试工程师',
    stats: { likes: 8420, followers: 1567, following: 89, answers: 23, articles: 9, columns: 0, asks: 4, ideas: 31 },
    badges: [], coverGradient: ['#3F2D1F', '#1F170F'],
  },
  p_genHEAVY04: {
    id: 'p_genHEAVY04', name: '听风者', gender: 'm',
    avatarSeed: 'heavy-tingfeng-coach',
    bio: '持证健身教练第 8 年｜带过 200+ 减脂学员｜不接代餐广告',
    credential: 'expert', credentialText: null,
    region: '上海', profession: '健身教练',
    stats: { likes: 23145, followers: 8932, following: 134, answers: 156, articles: 47, columns: 1, asks: 12, ideas: 42 },
    badges: ['健身 · 减脂 话题创作者'], coverGradient: ['#1F2D3F', '#0F161F'],
  },
  p_genREG01: {
    id: 'p_genREG01', name: '小妙妙呀', gender: 'f',
    avatarSeed: 'reg-xiaomiao-cat',
    bio: '可以胖如尘土, 但不能扭曲如蛆虫',
    credential: 'none', credentialText: null,
    region: '吉林', profession: null,
    stats: { likes: 5137, followers: 87, following: 2, answers: 74, articles: 0, columns: 0, asks: 0, ideas: 0 },
    badges: [], coverGradient: ['#5C2D2D', '#2D1414'],
  },
  p_genREG02: {
    id: 'p_genREG02', name: 'Tina 落地中', gender: 'f',
    avatarSeed: 'reg-tina-landing',
    bio: '广州做 UI 第 5 年｜在搞副业, 在掉头发, 顺便在减肥',
    credential: 'none', credentialText: null,
    region: '广东', profession: 'UI 设计师',
    stats: { likes: 2841, followers: 412, following: 178, answers: 39, articles: 8, columns: 0, asks: 2, ideas: 134 },
    badges: [], coverGradient: ['#3A1F3A', '#1F0F1F'],
  },
  p_genREG03: {
    id: 'p_genREG03', name: '夜半三点的胡思乱想', gender: null,
    avatarSeed: 'reg-3am-thinker',
    bio: '失眠 11 年, 每晚 3 点准时上线｜深夜冰箱常驻',
    credential: 'none', credentialText: null,
    region: null, profession: null,
    stats: { likes: 1289, followers: 234, following: 567, answers: 89, articles: 0, columns: 0, asks: 12, ideas: 421 },
    badges: [], coverGradient: ['#2D2D5C', '#14142D'],
  },
  p_genREG04: {
    id: 'p_genREG04', name: '咸鱼上岸中', gender: 'm',
    avatarSeed: 'reg-fish-on-shore',
    bio: '正在缓慢上岸的咸鱼一条｜偶尔写点减肥失败心得',
    credential: 'none', credentialText: null,
    region: '湖北', profession: '考研复读中',
    stats: { likes: 3287, followers: 521, following: 234, answers: 47, articles: 3, columns: 0, asks: 8, ideas: 89 },
    badges: [], coverGradient: ['#3A3F2D', '#1F2014'],
  },
  p_genREG05: {
    id: 'p_genREG05', name: '阿浩浩浩', gender: 'm',
    avatarSeed: 'reg-haohaohao-boy',
    bio: '段子手, 兼职吐槽减肥产品评论区',
    credential: 'none', credentialText: null,
    region: '北京', profession: null,
    stats: { likes: 4127, followers: 678, following: 89, answers: 121, articles: 0, columns: 0, asks: 2, ideas: 234 },
    badges: [], coverGradient: ['#3F1F2D', '#1F0F14'],
  },
  p_genREG06: {
    id: 'p_genREG06', name: '熬夜冠军', gender: null,
    avatarSeed: 'reg-overnight-champion',
    bio: '连续熬夜 365 天, 体重却涨了 8kg｜求劝退',
    credential: 'none', credentialText: null,
    region: null, profession: null,
    stats: { likes: 1567, followers: 89, following: 456, answers: 23, articles: 0, columns: 0, asks: 15, ideas: 89 },
    badges: [], coverGradient: ['#2D2D2D', '#141414'],
  },
  p_genREG07: {
    id: 'p_genREG07', name: '三号宿舍李同学', gender: 'm',
    avatarSeed: 'reg-no3-dorm',
    bio: '985 在读, 跟室友一起减肥 (失败 2 次成功 1 次)｜大学生活观察者',
    credential: 'none', credentialText: null,
    region: '湖北', profession: '在校学生',
    stats: { likes: 9847, followers: 1234, following: 89, answers: 67, articles: 5, columns: 0, asks: 12, ideas: 156 },
    badges: [], coverGradient: ['#1F2D5C', '#0F1429'],
  },
  p_genREG08: {
    id: 'p_genREG08', name: '实验室搬砖人', gender: 'm',
    avatarSeed: 'reg-lab-brick-mover',
    bio: '人在工位, 心在燃脂｜导师催进度的研三搬运工',
    credential: 'none', credentialText: null,
    region: '上海', profession: '硕士研究生',
    stats: { likes: 1894, followers: 312, following: 567, answers: 34, articles: 0, columns: 0, asks: 21, ideas: 124 },
    badges: [], coverGradient: ['#3A3A1F', '#1F1F0F'],
  },
  p_genREG09: {
    id: 'p_genREG09', name: '床上躺平专业户', gender: null,
    avatarSeed: 'reg-bed-flat-pro',
    bio: '专业躺平 8 年, 正在研究为什么躺着也能胖',
    credential: 'none', credentialText: null,
    region: null, profession: null,
    stats: { likes: 2178, followers: 234, following: 78, answers: 52, articles: 0, columns: 0, asks: 4, ideas: 187 },
    badges: [], coverGradient: ['#1F1F3A', '#0F0F1F'],
  },
  p_genREG10: {
    id: 'p_genREG10', name: '咸鱼想上岸', gender: 'm',
    avatarSeed: 'reg-fish-wants-shore',
    bio: '从 130 减到 110 又反弹到 145 斤｜目前第三次努力中',
    credential: 'none', credentialText: null,
    region: '四川', profession: '某外贸公司打工人',
    stats: { likes: 1342, followers: 167, following: 289, answers: 28, articles: 0, columns: 0, asks: 3, ideas: 67 },
    badges: [], coverGradient: ['#2D3F1F', '#14200F'],
  },
  p_genMKT01: {
    id: 'p_genMKT01', name: '瘦下来美好家', gender: null,
    avatarSeed: 'mkt-shouxialai-shop',
    bio: '专注代餐与减脂解决方案 10 年｜YY 牌代餐奶昔官方｜微信同名',
    credential: 'none', credentialText: null,
    region: '广东', profession: '电商运营',
    stats: { likes: 287, followers: 1289, following: 4827, answers: 412, articles: 0, columns: 0, asks: 0, ideas: 23 },
    badges: [], coverGradient: ['#5C4A2D', '#2D2414'],
  },
  p_genMKT02: {
    id: 'p_genMKT02', name: '妈妈好物清单', gender: 'f',
    avatarSeed: 'mkt-mama-goods-list',
    bio: '90 后宝妈, 好物分享｜公众号 [好物种草日记]｜减肥代餐+宝宝辅食',
    credential: 'none', credentialText: null,
    region: '浙江', profession: null,
    stats: { likes: 142, followers: 823, following: 5142, answers: 287, articles: 0, columns: 0, asks: 0, ideas: 12 },
    badges: [], coverGradient: ['#5C2D3A', '#2D141F'],
  },
  p_genMKT03: {
    id: 'p_genMKT03', name: '专业减重解决方案', gender: null,
    avatarSeed: 'mkt-pro-weight-solution',
    bio: '三甲医师团队｜全国 18 城合作点｜首次咨询免费｜微信同名',
    credential: 'none', credentialText: null,
    region: null, profession: '医美机构',
    stats: { likes: 89, followers: 567, following: 3289, answers: 156, articles: 0, columns: 0, asks: 0, ideas: 4 },
    badges: [], coverGradient: ['#3A3A3A', '#1F1F1F'],
  },
  p_genMKT04: {
    id: 'p_genMKT04', name: '小马减脂日记', gender: 'm',
    avatarSeed: 'mkt-xiaoma-diary',
    bio: '减脂干货分享｜公众号 [减脂研究小组]｜进群加微信',
    credential: 'none', credentialText: null,
    region: '北京', profession: null,
    stats: { likes: 234, followers: 412, following: 2891, answers: 198, articles: 0, columns: 0, asks: 0, ideas: 18 },
    badges: [], coverGradient: ['#2D3F3A', '#14201F'],
  },
};

// ─── Questions ─────────────────────────────────────────────────────────
const QUESTIONS_OLD = {
  q_w01: { qid: 'q_w01', title: '168 间歇性断食真的科学吗？医生怎么看？', tags: ['饮食', '医学'], totalAnswers: 40, followers: 2104, views: 134582 },
  q_w02: { qid: 'q_w02', title: '为什么我每次减脂期都会暴饮暴食？', tags: ['心理', '行为'], totalAnswers: 36, followers: 1893, views: 87234 },
  q_w03: { qid: 'q_w03', title: '代餐奶昔我吃了一个月反而胖了 3 斤, 这是怎么回事？', tags: ['产品', '评测'], totalAnswers: 40, followers: 312, views: 45219 },
  q_w04: { qid: 'q_w04', title: '减肥到底是先减脂还是先减重？两者有什么区别？', tags: ['理论', '基础'], totalAnswers: 38, followers: 1234, views: 96453 },
  q_w05: { qid: 'q_w05', title: '已经减了 26kg 的人, 复胖到底有多容易？', tags: ['共情', '深度'], totalAnswers: 36, followers: 4521, views: 234109 },
  q_w06: { qid: 'q_w06', title: '孩子 8 岁体重 38kg, 老师说肥胖了, 该怎么办？', tags: ['儿童', '家长'], totalAnswers: 28, followers: 2891, views: 87102 },
  q_w07: { qid: 'q_w07', title: '听说有人吃司美格鲁肽两个月瘦了 20 斤, 真的吗？', tags: ['热点', '药物'], totalAnswers: 40, followers: 5832, views: 412934 },
  q_w08: { qid: 'q_w08', title: 'BMI 25 但体脂率才 18%, 算超重吗？', tags: ['评估', '科普'], totalAnswers: 32, followers: 891, views: 67234 },
  q_w09: { qid: 'q_w09', title: '减肥期晚上 10 点饿得睡不着, 到底该不该吃？', tags: ['实操', '紧急'], totalAnswers: 40, followers: 645, views: 78321 },
  q_w10: { qid: 'q_w10', title: '为什么市面上 90% 的减肥课程都是收智商税？', tags: ['揭露', '产品'], totalAnswers: 40, followers: 487, views: 32891 },
  q_w11: { qid: 'q_w11', title: '那些减肥 5 年最终成功的人, 都做对了什么？', tags: ['深度', '经验'], totalAnswers: 40, followers: 1247, views: 89234 },
  q_w12: { qid: 'q_w12', title: '跑步、跳绳、HIIT 哪个减脂效率最高？', tags: ['运动', '科学'], totalAnswers: 40, followers: 521, views: 41723 },
  q_w13: { qid: 'q_w13', title: '易瘦体质是怎么练成的？还是天生的？', tags: ['体质', '基础代谢'], totalAnswers: 40, followers: 892, views: 56712 },
  q_w14: { qid: 'q_w14', title: '无氧训练真的能提高基础代谢吗？力量训练值得做吗？', tags: ['运动', '科学'], totalAnswers: 28, followers: 1234, views: 67423 },
};

// ─── Answers ───────────────────────────────────────────────────────────
// Order per question: A-graded valuable stories first, witties middle, ad last.
const ANSWERS_OLD = {
  q_w07: [
    { id: 'q_w07-v1', authorId: 'p001', category: 'valuable', publishDate: '2025-04-18', voteUp: 18421, stars: 9523, commentCount: 2247,
      body: '门诊去年来过一个 38 岁的姑娘.\n\n她坐我对面, 翻手机给我看一段微信对话. 是她的代购在跟她推销司美格鲁肽.\n\n"医生你看", 她说, "我朋友圈所有人都在用, 没人提过副作用".\n\n她用了 4 个月, 瘦了 17 公斤. 那天来门诊的原因是: 上一周她因为持续呕吐住院, 诊断是急性胰腺炎.\n\n她出院第三天来找我, 想问"要不要继续打".\n\n我没回答她, 拿起她的化验单看了一遍, 递回给她.\n\n"你已经停了", 我说, "你的身体替你停的".\n\n她当场哭了. 不是怕, 是委屈. 她说"我朋友圈的人都瘦了, 为什么是我出了事".\n\n我跟她讲了一段她从来没听过的话.\n\n司美格鲁肽是真药, 临床三期数据 15-20% 减重幅度. 美国 FDA 适应症是 BMI ≥ 30, 或 BMI ≥ 27 伴并发症. 国内目前批准用于 2 型糖尿病, 减重是超说明书使用.\n\n她 BMI 26. 朋友圈那些"瘦了 20 斤" 的人, 适应症跟她一样不符. 只是没人胰腺炎而已.\n\n她以为是自己运气不好. 我跟她说, 不是. 是赌赢的人在发朋友圈, 赌输的人在医院.\n\n她出门那天问我: "医生你为什么不直接说我不该用?"\n\n我说: "我说了你也不会停. 你得自己看到化验单才会停."\n\n现在每次门诊接到 BMI < 28 的咨询, 我都会重新讲她的故事.',
      images: [imageUrl('hospital,doctor,clinic,desk', 600, 400, 4)],
      grade: 'A', composite: 92 },
    { id: 'q_w07-v2', authorId: 'p_genHEAVY03', category: 'valuable', publishDate: '2025-04-19', voteUp: 8381, stars: 3891, commentCount: 1421,
      body: '我 BMI 34, 走的是医生处方, 不是代购.\n\n开第一针那晚我老婆做了红烧排骨. 我们结婚 11 年, 她知道我能吃 7 块.\n\n那晚我吃完第三块就放下了筷子.\n\n她从厨房抬头看了我一下, "怎么不吃了?"\n\n我说: "饱了."\n\n她站在水槽前, 突然就哭了.\n\n我以为是我语气不对, 赶紧解释. 她摇头.\n\n"不是. 我跟你吃了 11 年饭, 第一次听你说「饱了」."\n\n那天晚上我们没再讲话. 我躺在床上想了一夜.\n\n我以前不是"爱吃", 是"刹不住车". 那种感觉很难形容 — 你明明已经撑了, 但筷子还在动, 直到盘子空了你才停.\n\n司美格鲁肽给我装了刹车.\n\n4 个月后我瘦了 14 公斤. 但比体重更让我喜欢的, 是我现在可以决定要不要吃第二块排骨.\n\n这之后我停药. 食欲在停药第二个月全回来. 比之前还强. 我又开始第二个周期, 但这次我边用药边练习"怎么在没药的时候也能停下来".\n\n停药那两个月我胖了 9 公斤. 我老婆没流眼泪, 她说她知道这是过程. 她说她现在不指望我"瘦", 只指望我"记得"那晚她哭的那一刻.',
      grade: 'A-', composite: 76 },
    { id: 'q_w07-v3', authorId: 'p003', category: 'valuable', publishDate: '2025-04-20', voteUp: 4234, stars: 1612, commentCount: 687,
      body: '我做减重外科 15 年. 去年开始接到一类新患者, BMI 都在 41-45 之间, 自费司美格鲁肽 6-8 个月, 瘦了 20-25 公斤. 来找我的问题都一样.\n\n"我是不是该停药做手术?"\n\n上个月一位姑娘特别让我印象深. BMI 33, 从 41 减下来.\n\n她坐下第一句: "医生, 我已经这么努力了, 但是停药一定反弹. 你给我做手术吧."\n\n我看完她的报告, 跟她说: "你不用现在停. 我们做手术, 你术后继续用 6 个月."\n\n她愣住了. 她说她以为减重外科的人都讨厌减重药, 抢生意.\n\n我跟她讲: 单纯药物的复胖率高, 停药一年复胖 80-100%. 单纯手术的失败率不低, 15-20%. 但二者结合, 5 年达标率超过 80%.\n\n国际上有名字, 叫"联合疗法 (combined therapy)".\n\n她术后 6 个月复诊, 体重 76, BMI 24.7. 已经停药. 她跟我说她现在能吃任何东西, 但是想吃的量自己变小了 — 那是手术胃容量限制 + 药物建立的饮食习惯共同作用.\n\n她出门时说了一句话我记着: "我以前以为是我意志力不够. 现在我才知道, 不是我不够好, 是我的胃跟脑子都需要帮助."\n\nBMI > 40 的人, 司美格鲁肽不是终点, 是过渡. BMI < 30, 别想这事.',
      grade: 'A', composite: 78 },
    { id: 'q_w07-w1', authorId: 'p_genREG10', category: 'witty', publishDate: '2025-05-04', voteUp: 2487, stars: 47, commentCount: 287,
      body: '我去医院问医生司美格鲁肽.\n\n医生看了我一眼: "你 BMI 多少".\n\n我说 25.\n\n医生说"你滚".\n\n我滚了.',
      grade: 'B-', composite: 51 },
    { id: 'q_w07-w2', authorId: 'p_genREG05', category: 'witty', publishDate: '2025-04-21', voteUp: 2287, stars: 89, commentCount: 421,
      body: '去年我加的减肥群有 7 个人.\n\n6 个用了司美格鲁肽.\n\n我没用.\n\n今年只剩我还在群里. 群名字还在. 没人发消息.',
      grade: 'C+', composite: 49 },
    { id: 'q_w07-w3', authorId: 'p_genREG01', category: 'witty', publishDate: '2025-03-29', voteUp: 1024, stars: 34, commentCount: 187,
      body: '我算了下司美格鲁肽减一斤大约 90 块.\n\n我现在 BMI 25, 想减 8 斤. 720 块.\n\n要么减肥, 要么吃顿好的.\n\n我选后者.',
      grade: 'C+', composite: 44 },
    { id: 'q_w07-w4', authorId: 'p_genREG06', category: 'witty', publishDate: '2025-02-18', voteUp: 712, stars: 21, commentCount: 124,
      body: '我同事吃司美格鲁肽两个月.\n\n每天早上跟我抱怨"今天又没胃口".\n\n我说: "你这叫炫耀."',
      grade: 'C+', composite: 42 },
    { id: 'q_w07-w5', authorId: 'p_genREG03', category: 'witty', publishDate: '2025-01-16', voteUp: 487, stars: 14, commentCount: 87,
      body: '我朋友吃了 8 个月停药.\n\n两个月反弹回原始体重 +2 公斤.\n\n她跟我说: "那 8 个月跟没过一样, 但花了 14000 块."',
      grade: 'C+', composite: 40 },
    { id: 'q_w07-a1', authorId: 'p_genMKT03', category: 'ad', publishDate: '2025-05-12', voteUp: 17, stars: 1, commentCount: 5,
      body: '我以前花了 8000 块尝试各种减肥, 都失败. 去年朋友介绍我去一家医美机构做了系统评估, 才知道我属于 BMI ≥ 30 的适应症人群, 走规范门诊用药 6 个月瘦 19 公斤.\n\n机构那边三甲医生团队 + 全程跟进, 首次咨询免费. 想了解可以私信我聊 ~',
      grade: 'D', composite: -18 },
  ],

  q_w11: [
    { id: 'q_w11-v1', authorId: 'p_genHEAVY01', category: 'valuable', publishDate: '2025-03-18', voteUp: 19421, stars: 9234, commentCount: 2421,
      body: '我减 26 公斤用了 5 年, 中间反弹 3 次. 给你说第三次反弹之后那个具体的早晨.\n\n那次反弹是春节, 7 天涨 4 公斤. 接下来 6 个月心态崩了, 我回到 88 公斤.\n\n6 月一个周二早上, 我老婆送我儿子上学. 我在阳台抽烟, 看着她在楼下停车. 她下车时抬头看了我一眼, 然后转身去开后排车门.\n\n她没招手, 没皱眉, 没任何评价.\n\n但是那一眼里有种东西我永远忘不掉 — 不是失望, 是"我已经习惯了".\n\n她已经接受了我是 88 公斤的那个老公. 她不再期待我变.\n\n我那一刻明白了一件事.\n\n我以前所有的减肥都是为了"变给谁看". 给老婆看, 给同学聚会看, 给体检报告看, 给微信群里那些打卡的陌生人看.\n\n但是我老婆已经习惯我 88 公斤了. 没有人在等我变.\n\n那天我把烟掐了. 我做了一件特别小的事 — 把称重纪律从每天改成每周二、周四. 我退掉了所有减肥打卡群. 我不再发减肥相关的朋友圈. 我不再设"减到 XX 斤" 的目标.\n\n我只对一件事负责: 11 点睡, 7 点起, 吃饱晚饭.\n\n26 个月过去了. 体重 72 ± 1.5 公斤, 没动过.\n\n5 年最终成功的人, 都做对的不是哪个技术. 是不再用减肥证明自己.',
      images: [imageUrl('balcony,window,sunrise,city', 600, 400, 5)],
      grade: 'A', composite: 93 },
    { id: 'q_w11-v2', authorId: 'p_genHEAVY02', category: 'valuable', publishDate: '2024-12-04', voteUp: 6287, stars: 2923, commentCount: 912,
      body: '我 8 年的减肥失败者. 第 8 年我做了一件事 — 把那个 80 人的"减肥打卡群" 退了.\n\n那个群每天 8:00 发早餐, 12:00 发午餐, 22:00 发体重截图.\n\n我退群那天没告别. 直接退.\n\n群里有个相熟的姑娘加我微信问: "你怎么了?"\n\n我没回. 我自己也不知道, 只是觉得那个群让我累.\n\n接下来三个月, 我没发过减肥相关的任何东西. 没拍餐盘, 没截体重, 没朋友圈打卡. 但是我做了几件别人看不见的事.\n\n每天 11 点睡.\n\n周三晚饭后散步 40 分钟.\n\n晚饭不点外卖, 自己煮.\n\n三个月后, 我老公在浴室门口看见我说: "你脸瘦了."\n\n我去称, 下降 6 公斤. 我自己都没察觉.\n\n那一刻我懂了一件事. "减肥成功" 的反面不是"减肥失败", 是"让减肥成为生活的主题". 你一旦让它变成主题, 它就会用"你做得对不对" 折磨你.\n\n5 年成功的人都不让它变成主题. 他们只是顺便瘦着.',
      grade: 'A-', composite: 79 },
    { id: 'q_w11-v3', authorId: 'p001', category: 'valuable', publishDate: '2025-01-09', voteUp: 4381, stars: 1891, commentCount: 587,
      body: '我跟踪过 300+ 例长期减重患者. 5 年稳定的人, 临床上有一个共同点.\n\n不是减重速度. 不是减重幅度. 是基础代谢的恢复曲线.\n\n失败的减重者通常基础代谢比同身高同体重的人低 10-15%. 那是长期节食把身体搞进"节能模式" 的结果. 一旦恢复正常吃饭, 即使没超过热量, 也会快速复胖.\n\n5 年稳定的人, 他们的基础代谢在减重后期反而是上升的.\n\n去年我有一位患者很典型. 42 岁的女老师, 从 78 减到 62, 用了 5 年.\n\n第一次门诊我问她"你怎么做的". 她说她也说不清, 只是觉得"反正吃饱, 反正每周二要去打羽毛球".\n\n我让她做了基础代谢检测. 1410 kcal/天 — 比她减重前 78 公斤体重时低不了多少. 肌肉量是同龄女性 92 百分位.\n\n我问她 5 年前怎么开始的. 她说她也没特别在意, 就是某一天发现"吃鸡胸不难吃, 而且能撑很久". 从那天起她每顿饭蛋白质保证, 然后偶尔打打羽毛球. 没节食过, 没用过代餐.\n\n她不知道她在做"保肌减脂". 她以为她只是"吃饭加锻炼".\n\n5 年稳着的人, 不是意志力强, 是身体的代谢底座没被砸坏. 第一次减重就保护好基础代谢, 决定了你能不能在第 5 年还稳着.',
      grade: 'A', composite: 84 },
    { id: 'q_w11-w1', authorId: 'p_genREG09', category: 'witty', publishDate: '2025-03-18', voteUp: 2287, stars: 78, commentCount: 421,
      body: '我观察过那些 5 年瘦下来的人.\n\n他们都做了一件事 — 不再发减肥日记.\n\n你看不到的, 才是真的发生了的.',
      grade: 'B-', composite: 53 },
    { id: 'q_w11-w2', authorId: 'p_genREG04', category: 'witty', publishDate: '2025-02-08', voteUp: 1391, stars: 28, commentCount: 167,
      body: '5 年成功的人都做了同一件事 — 不公开宣布"今天开始减肥".\n\n所有公开 flag 的最后都倒了.\n\n社交媒体定律.',
      grade: 'C+', composite: 45 },
    { id: 'q_w11-w3', authorId: 'p_genREG02', category: 'witty', publishDate: '2024-12-04', voteUp: 1187, stars: 47, commentCount: 234,
      body: '我朋友减肥 5 年成功. 她说她做对的事是"在第 4 年放弃了称重器".\n\n她在第 5 年瘦了 8 斤.',
      grade: 'C+', composite: 43 },
    { id: 'q_w11-w4', authorId: 'p_genREG05', category: 'witty', publishDate: '2025-04-22', voteUp: 812, stars: 21, commentCount: 124,
      body: '减肥 5 年成功的人, 都不再"挨饿".\n\n他们找到了让自己吃饱的方法.\n\n所有靠挨饿的减肥, 活不过一年.',
      grade: 'C+', composite: 41 },
    { id: 'q_w11-w5', authorId: 'p_genREG10', category: 'witty', publishDate: '2024-11-15', voteUp: 487, stars: 14, commentCount: 87,
      body: '我妈减肥 30 年没成功.\n\n我爸说她做错的事只有一件 — 见人就讲她要减肥.\n\n她话比她跑步多.',
      grade: 'C+', composite: 44 },
    { id: 'q_w11-a1', authorId: 'p_genMKT03', category: 'ad', publishDate: '2025-04-26', voteUp: 19, stars: 0, commentCount: 6,
      body: '5 年成功的人有共同点: 起步阶段有专业指导, 不是自己瞎试.\n\n我们机构 1v1 三甲医师 + 营养师, 全程跟踪基础代谢 + 体脂变化. 首次咨询免费, 全国 18 城.\n\n后台私信预约即可.',
      grade: 'D', composite: -18 },
  ],

  q_w01: [
    { id: 'q_w01-v1', authorId: 'p001', category: 'valuable', publishDate: '2025-03-14', voteUp: 11821, stars: 5104, commentCount: 1487,
      body: '前两个月门诊来了一位 35 岁的男士.\n\n他坐下第一句就是 "医生, 我想让你给我开个诊断书, 让公司允许我取消减肥".\n\n他自述 168 之后出现持续耳鸣 3 周.\n\n我没马上回答, 让他先去耳鼻喉. 一周后他回来内分泌, 跟我说耳鼻喉那边什么都没查出, 让他过来这边.\n\n我让他做完整代谢套餐.\n\n结果出来那天, 他坐在我对面, 我把单子推过去.\n\n"168 没伤害你", 我说, "但是它把你几年的胰岛素抵抗用耳鸣的形式喊出来了."\n\n空腹胰岛素 28. 糖化 6.4. 接近糖尿病前期.\n\n他愣了几秒, 说: "那我现在怎么办?"\n\n我说: "继续 168, 但是不是为了减肥, 是为了不变成 2 型糖尿病."\n\n他后来正规减重 + 二甲双胍, 半年代谢恢复. 上次复诊他跟我说他现在还在 168, 但耳鸣早就没了.\n\n"168 科不科学"不是这道题的核心.\n\n任何减肥方法启动前, 先做一次代谢检查 — 这一件事比任何方法都科学.',
      images: [imageUrl('clinic,doctor,desk,blood', 600, 400, 1)],
      grade: 'A', composite: 89 },
    { id: 'q_w01-v2', authorId: 'p_genHEAVY01', category: 'valuable', publishDate: '2024-11-19', voteUp: 2923, stars: 921, commentCount: 487,
      body: '我开始 168 的契机很俗气: 朋友圈所有人都在打卡.\n\n第一周我兴奋地瘦了 4 公斤. 给我老婆看体重秤截图, 她冷静地问"你的腰围有变吗".\n\n围度没变.\n\n后来我在做健身教练的朋友那里得到答案. 那 4 公斤是水分 + 糖原 + 食物残渣. 真正的脂肪一周减 1-1.5 公斤已经是极限.\n\n第二周第三周, 我体重纹丝不动.\n\n第四周, 跟朋友吃饭时他随口问了一句: "你 8 小时窗口吃多少 kcal?"\n\n我才意识到我从来没数过. 我以为"反正只吃 8 小时" 就够了. 实际上我午餐黄焖鸡米饭 800 + 下午奶茶 450 + 晚上正餐 900 = 2150 kcal. 比我之前一日三餐还多.\n\n168 的真正机制不是"少吃了一顿", 是"逼你重新审视你吃了多少".\n\n大多数人不审视, 只是把早餐挪到午餐, 还顺带加点零食.\n\n后来我把规则改成"8 小时窗口里只吃 2 顿 + 自己做饭". 26 个月减了 26 公斤, 没反弹.',
      grade: 'A-', composite: 74 },
    { id: 'q_w01-w1', authorId: 'p_genREG02', category: 'witty', publishDate: '2025-02-14', voteUp: 2387, stars: 67, commentCount: 421,
      body: '我老婆 168 八个月瘦 11 斤.\n\n我跟她同步开始 168, 四个月胖 6 斤.\n\n我们用同一台微波炉.',
      grade: 'B-', composite: 56 },
    { id: 'q_w01-w2', authorId: 'p_genREG05', category: 'witty', publishDate: '2024-11-08', voteUp: 1421, stars: 34, commentCount: 234,
      body: '我 168 第一天, 11:59 站在微波炉前.\n\n12:00 整点开吃.\n\n这是我十年来最准时的一次.',
      grade: 'C+', composite: 49 },
    { id: 'q_w01-w3', authorId: 'p_genREG08', category: 'witty', publishDate: '2025-04-22', voteUp: 1187, stars: 28, commentCount: 167,
      body: '168 没让我瘦.\n\n但是它让我在每次同事问"要不要点奶茶" 的时候有了一个体面的拒绝理由.\n\n光这一点值回票价.',
      grade: 'C+', composite: 44 },
    { id: 'q_w01-w4', authorId: 'p_genREG06', category: 'witty', publishDate: '2024-09-30', voteUp: 712, stars: 21, commentCount: 124,
      body: '我妈知道我 168 之后, 每天 13 点准时给我打电话.\n\n她说: "我看你窗口开了一会儿了, 现在打不打扰?"\n\n这是 168 唯一真实带给我的东西.',
      grade: 'C+', composite: 42 },
    { id: 'q_w01-w5', authorId: 'p_genREG10', category: 'witty', publishDate: '2025-01-19', voteUp: 487, stars: 9, commentCount: 67,
      body: '我 168 三个月, 称重器坏了我没换.\n\n后来我老婆问"你瘦了吗".\n\n我说"不知道".\n\n我老婆说"那也没瘦".',
      grade: 'C+', composite: 38 },
    { id: 'q_w01-a1', authorId: 'p_genMKT01', category: 'ad', publishDate: '2025-05-12', voteUp: 47, stars: 2, commentCount: 14,
      body: '我之前 168 中午饿得手抖, 下午 3 点就开始扛饿. 有段时间放弃了.\n\n后来朋友推荐我一种"窗口启动早餐杯", 早上 8 点喝一杯能撑到中午. 我半信半疑试了三天, 真的没饿.\n\n后来才知道是 YY 牌全食代餐, 蛋白 28g, 纤维 9g. 想试可以私信我, 我有邀请码 ~',
      grade: 'D', composite: -20 },
  ],

  q_w02: [
    { id: 'q_w02-v1', authorId: 'p002', category: 'valuable', publishDate: '2025-02-28', voteUp: 7287, stars: 2923, commentCount: 912,
      body: '门诊去年来过一位 28 岁姑娘. 互联网公司产品经理, BMI 26.\n\n她坐下第一句: "陈医生, 我每次减脂第三周一定暴食, 然后愧疚一周再重新开始. 我是不是有什么心理问题?"\n\n我没回答她, 让她把暴食前 48 小时的吃喝睡都记下来, 4 周后回来.\n\n4 周后她抱着一本笔记本进门. 我翻了 10 分钟, 一个规律浮出来.\n\n她暴食的前一晚, 平均睡眠 5.2 小时. 平时是 7 小时.\n\n她暴食的当天, 下午有 3 个会, 全是高强度.\n\n她暴食前一天三餐, 蛋白质摄入平均 0.8g/kg. 远低于减脂期最低 1.5 的线.\n\n我把笔记本推回去, 跟她说: "你不是心理问题. 你是身体在喊「我缺睡眠, 我缺蛋白, 还要应对压力, 你给我点真东西」."\n\n她看着笔记本愣了很久. 然后说: "我以为是我自己不够自律."\n\n我后来让她调三件事. 减脂期蛋白拉到 1.8g/kg. 周二周四下午加一份 30g 蛋白零食. 睡眠保证 7 小时.\n\n她下次复诊跟我说, 那个月没暴食.\n\n暴食的源头几乎不在嘴, 在身体某个真实需求被忽视了.',
      grade: 'A', composite: 87 },
    { id: 'q_w02-v2', authorId: 'p_genHEAVY02', category: 'valuable', publishDate: '2024-09-08', voteUp: 3156, stars: 1391, commentCount: 621,
      body: '我减肥失败 7 年. 每一次失败都长得一样.\n\n前两周, 充满斗志, 戒一切糖 + 主食.\n\n第三周, 开始想念奶茶.\n\n第三周末, 给自己买了"一杯小小的奶茶".\n\n喝完, "今天已经废了, 不如吃个汉堡套餐".\n\n晚上, 边哭边吃, 体重涨回去.\n\n第二天, 自我厌恶, 重新立 flag.\n\n这个循环我经历了至少 30 次. 平均每三个月一轮.\n\n直到第 8 年, 我做了一件事 — 把秤扔了.\n\n不再天天称重, 不再设"必须瘦到 XX 斤". 改成"每天吃饱, 蛋白质够, 周三晚有一顿自由餐".\n\n半年后体重悄悄下降了 14 公斤. 没有一次暴食.\n\n暴食的根源不是嘴, 是大脑里那根紧绷的弦.\n\n你不放松, 它就会替你失控.',
      grade: 'A-', composite: 76 },
    { id: 'q_w02-w1', authorId: 'p_genREG02', category: 'witty', publishDate: '2025-01-15', voteUp: 2487, stars: 67, commentCount: 287,
      body: '减脂第三周, 我开始天天梦见 7-11 的关东煮.\n\n减脂之前我从来不注意 7-11.\n\n减脂期 = 给食物开镁光灯.',
      grade: 'B-', composite: 51 },
    { id: 'q_w02-w2', authorId: 'p_genREG03', category: 'witty', publishDate: '2024-12-08', voteUp: 1424, stars: 34, commentCount: 187,
      body: '暴食前必有预兆.\n\n我会先在朋友圈搜"减脂期可以吃什么夜宵".\n\n搜到第三条之后, 我必暴食.',
      grade: 'C+', composite: 46 },
    { id: 'q_w02-w3', authorId: 'p_genREG08', category: 'witty', publishDate: '2025-03-22', voteUp: 912, stars: 21, commentCount: 124,
      body: '我减脂期最饿的时候不是中午.\n\n是开会到 3 点经理说"我们再加 10 分钟" 的那 10 分钟.',
      grade: 'C+', composite: 44 },
    { id: 'q_w02-w4', authorId: 'p_genREG10', category: 'witty', publishDate: '2024-10-19', voteUp: 567, stars: 12, commentCount: 89,
      body: '我老婆减脂第二周对我说: "我现在看到糖醋排骨, 像看到前任."\n\n我问"是想念还是恨".\n\n她说"都有".',
      grade: 'C+', composite: 42 },
    { id: 'q_w02-w5', authorId: 'p_genREG01', category: 'witty', publishDate: '2025-02-04', voteUp: 387, stars: 8, commentCount: 56,
      body: '我妈减脂期暴食只暴一种东西 — 我藏起来的零食.\n\n她说她不知道为什么我藏起来的更好吃.',
      grade: 'C+', composite: 40 },
    { id: 'q_w02-a1', authorId: 'p_genMKT04', category: 'ad', publishDate: '2025-04-18', voteUp: 38, stars: 1, commentCount: 11,
      body: '我以前每次减脂期都暴食. 后来加了一个减脂互助小群, 每天发当天饮食 + 大家互相点评.\n\n一开始觉得很烦, 后来发现"被看见"这件事能压住暴食的冲动. 半年没暴食, 顺便瘦了 9 公斤.\n\n群在公众号 [减脂研究小组] 里, 关注回复"上车" 拉你进去 ~',
      grade: 'D', composite: -16 },
  ],

  q_w03: [
    { id: 'q_w03-v1', authorId: 'p002', category: 'valuable', publishDate: '2025-04-02', voteUp: 8521, stars: 3103, commentCount: 1132,
      body: '门诊去年来了一位姑娘, 主诉跟你完全一样: 喝代餐一个月反而胖了 3 斤.\n\n她带了她的"减肥日记" 给我看. 我让她念出来.\n\n早 7:00, 一袋代餐 200 kcal. 早 9:00, 嘴里没味道, 加一根馒头 180. 10:30, 同事买奶茶分她一杯 250. 中午, 正常吃饭. 下午 4 点, 实在饿加块面包 240. 晚饭, 心想"今天喝了代餐" 多盛半碗饭.\n\n我让她把每天的总热量加一下.\n\n她算完, 抬起头, 脸是白的.\n\n2380 kcal.\n\n她没喝代餐之前, 三餐总和 1900.\n\n"我以为代餐能减肥", 她说.\n\n我跟她说: 代餐没问题. 问题是"代餐"这两个字给了你"我今天在减肥" 的心理安慰, 让你对其他餐次的把控完全松了.\n\n这个机制叫"补偿性进食". 在临床上有名字, 不是你独有的.\n\n后来调整: 代餐"完全替代"一顿外食 (午餐), 其他两餐严格记录. 一个月瘦 1.8 公斤.\n\n代餐不是减肥方案. 是减肥工具. 工具放错位置, 比不用更糟.',
      images: [imageUrl('shake,smoothie,protein,powder', 600, 400, 2)],
      grade: 'A', composite: 86 },
    { id: 'q_w03-v2', authorId: 'p_genHEAVY03', category: 'valuable', publishDate: '2025-05-12', voteUp: 4934, stars: 2287, commentCount: 821,
      body: '我前后买过 7 个品牌的代餐, 总花费 4200+. 一份踩坑笔记.\n\n第一个网红代餐 ¥98/袋, 蛋白 13g, 添加糖 14g. 喝完 1 小时就饿. 退过 3 次款都被拒.\n\n第二个号称"全食" ¥35/袋, 蛋白 18g, 但是便秘. 第 4 天我去医院开了通便药.\n\n第三个进口"代餐冰沙" ¥80/袋. 还行, 但是甜得发腻. 我喝到第二周开始反胃.\n\n第四个网红坚果代餐. 一袋 600 kcal. 我没看包装, 我以为"代餐"都应该是 200 kcal. 你算笔账.\n\n第五个国货高蛋白代餐. 蛋白真的够 28g. 但是要泡 10 分钟才能下咽. 我每次喝都觉得自己在惩罚自己.\n\n第六个 ¥12/袋的便宜代餐. 三天喝出口臭, 因为糖醇含量过高.\n\n第七个"营养师推荐" 高纤代餐. 终于符合国标. 但是 ¥18/袋, 一天两顿一个月 1080 元.\n\n你看完会发现一个规律: 我花的不是冤枉钱, 是"我以为代餐能替我减肥" 的代价.\n\n国标 GB/T 29602 是底线 — 蛋白 ≥ 25g, 添加糖 < 5g, 纤维 ≥ 6g, 三条全占的才能买.\n\n但是再合格的代餐, 也只是工具. 工具能不能让你瘦, 看你怎么用.',
      grade: 'A-', composite: 71 },
    { id: 'q_w03-w1', authorId: 'p_genREG07', category: 'witty', publishDate: '2024-11-22', voteUp: 2491, stars: 47, commentCount: 287,
      body: '室友买 6 盒代餐, 喝了 3 天送给我.\n\n我没喝, 但是她瘦了 2 斤, 我没瘦.\n\n她说"你应该接受我的好意".',
      grade: 'B-', composite: 52 },
    { id: 'q_w03-w2', authorId: 'p_genREG05', category: 'witty', publishDate: '2025-04-02', voteUp: 1623, stars: 28, commentCount: 187,
      body: '代餐 = 让你以为今天在减肥的早餐.\n\n然后中午吃了双倍.',
      grade: 'C+', composite: 46 },
    { id: 'q_w03-w3', authorId: 'p_genREG09', category: 'witty', publishDate: '2024-09-18', voteUp: 891, stars: 21, commentCount: 124,
      body: '我去年喝了 6 个月代餐.\n\n减肥成功 0 kg.\n\n体重秤上的小数点都没动.',
      grade: 'C+', composite: 42 },
    { id: 'q_w03-w4', authorId: 'p_genREG02', category: 'witty', publishDate: '2025-02-11', voteUp: 712, stars: 14, commentCount: 89,
      body: '代餐的真正功效是替你点外卖时省了 10 分钟决策时间.\n\n剩下的 10 分钟你点了奶茶.',
      grade: 'C+', composite: 40 },
    { id: 'q_w03-w5', authorId: 'p_genREG01', category: 'witty', publishDate: '2025-01-28', voteUp: 421, stars: 8, commentCount: 56,
      body: '我妈喝代餐喝出口腔溃疡.\n\n她说"这玩意还是配馒头吃".\n\n她不是不懂, 她是不打算瘦.',
      grade: 'C+', composite: 38 },
    { id: 'q_w03-a1', authorId: 'p_genMKT01', category: 'ad', publishDate: '2025-08-03', voteUp: 28, stars: 1, commentCount: 9,
      body: '我试过 4 个品牌代餐都失败. 唯一一个成功的, 是闺蜜送我的一袋"原味豆浆+燕麦"配方, 蛋白 28g, 纤维 9g, 不加糖.\n\n喝了一周不仅没饿, 工作也专心了. 一个月真瘦了 4.3 公斤, 没反弹.\n\n后来发现是我们家自营的 YY 牌全食代餐. 私信我领闺蜜券, 公众号 [瘦下来美好家] 回复"瘦身" 还有福袋 ~',
      grade: 'D', composite: -22 },
  ],

  q_w04: [
    { id: 'q_w04-v1', authorId: 'p_genHEAVY04', category: 'valuable', publishDate: '2025-01-15', voteUp: 9234, stars: 4812, commentCount: 921,
      body: '健身教练 8 年. 这种问题我每周都接到. 我先讲个学员的故事, 再给路径.\n\n去年带过一个 BMI 32 的程序员, 32 岁, 第一次进健身房.\n\n他来问的也是"先减脂还是先减重". 我让他把这个问题先放下.\n\n我说: 你现在膝盖在跟你抗议, 上楼梯都喘. 你的体脂率你都站不上 InBody, 超出机器测量上限.\n\n这种状态下, 谈"减脂保肌"是奢侈.\n\n他纯减重 8 个月, 从 96 减到 80. 这期间他练习的不是肌肉, 是"恢复活动能力". 走路 → 慢跑 → 力量入门.\n\n等他到 80 公斤的时候, 上来就上了 4 组深蹲, 关节没事.\n\n80 公斤之后, 我们才正式进入"减脂保肌" 周期. 一年后他 72 公斤 + 体脂 19%.\n\n"先减脂还是先减重" 这个问题, 答案在你当前的 BMI 上.\n\nBMI ≥ 28, 先减重. 别想保肌的事.\nBMI 24-28, 减脂保肌一起做.\nBMI < 24 但想塑形, 严格说不算"减肥", 是"减脂塑形". 不要再节食.\n\n选错路径不是"慢一点", 是"会受伤". 我那位学员是幸运的 — 他遇到一个让他先放下问题的教练.',
      grade: 'A', composite: 85 },
    { id: 'q_w04-v2', authorId: 'p_genHEAVY01', category: 'valuable', publishDate: '2024-11-22', voteUp: 4287, stars: 1721, commentCount: 487,
      body: '我自己走的是"先减重". 给你说踩过的坑.\n\n第一个 6 个月, 我从 98 减到 86. 我以为成功了.\n\n直到我老婆给我拍了张正面照. 她说"你瘦是瘦了, 但是你看你的胸".\n\n胸是垂的. 腹部是松的. 整个人是"瘦但塌" 的.\n\n我去找朋友 (那个健身教练) 检查. 他说我掉了大概 4 公斤肌肉.\n\n我以前以为只是脂肪走了. 实际上有四分之一是肌肉.\n\n那时候我才明白"先减脂还是先减重" 不是技术问题, 是"在意什么" 的问题.\n\n如果你只在意秤上数字, 纯减重快.\n\n如果你在意镜子, 必须早点加蛋白 + 力量训练.\n\n第二个 6 个月, 我把蛋白拉到 1.8g/kg, 每周 2 次力量, 又减了 14 公斤. 这次胸是挺的.',
      grade: 'A-', composite: 73 },
    { id: 'q_w04-w1', authorId: 'p_genREG09', category: 'witty', publishDate: '2024-12-30', voteUp: 2387, stars: 47, commentCount: 234,
      body: '先减情绪.\n\n减完之后你会发现你也不胖.',
      grade: 'B-', composite: 50 },
    { id: 'q_w04-w2', authorId: 'p_genREG02', category: 'witty', publishDate: '2025-01-16', voteUp: 1391, stars: 28, commentCount: 167,
      body: '我同事减重 25 斤, 大家说她瘦了.\n\n一个月后大家说她"看着没精神".\n\n减脂 ≠ 美.',
      grade: 'C+', composite: 46 },
    { id: 'q_w04-w3', authorId: 'p_genREG05', category: 'witty', publishDate: '2025-03-08', voteUp: 912, stars: 21, commentCount: 124,
      body: '先减"明天再开始" 这四个字.\n\n你就赢一半了.',
      grade: 'C+', composite: 42 },
    { id: 'q_w04-w4', authorId: 'p_genREG01', category: 'witty', publishDate: '2024-10-22', voteUp: 587, stars: 14, commentCount: 87,
      body: '我妈走的是先减重路线. 减下来后她抱怨"裤子大了".\n\n我说"你不就是减下来才能换裤子吗".\n\n她说"这裤子才买两个月".',
      grade: 'C+', composite: 41 },
    { id: 'q_w04-w5', authorId: 'p_genREG10', category: 'witty', publishDate: '2025-02-19', voteUp: 387, stars: 9, commentCount: 67,
      body: '减脂保肌的最大成本不是健身, 是吃鸡胸.\n\n每天三餐鸡胸, 半年后我闻到鸡胸都想吐.',
      grade: 'C+', composite: 39 },
    { id: 'q_w04-a1', authorId: 'p_genMKT03', category: 'ad', publishDate: '2025-03-29', voteUp: 22, stars: 0, commentCount: 6,
      body: '我们机构经常碰到"不知道先减脂还是先减重" 的咨询. 最快方式是来做一次体测 + 评估, 医生根据 BMI、体脂率、代谢指标定方案.\n\n首次咨询免费, 全国 18 城合作点. 后台私信预约即可.',
      grade: 'D', composite: -18 },
  ],

  q_w05: [
    { id: 'q_w05-v1', authorId: 'p_genHEAVY01', category: 'valuable', publishDate: '2025-03-08', voteUp: 11421, stars: 5823, commentCount: 1947,
      body: '我减了 26 公斤. 中间反弹 3 次. 给你说真实数字 — 第一年成功减重的人, 5 年内 80% 会回到起点甚至更高.\n\n我反弹的 3 次, 每次都是从一件"小事"开始.\n\n第一次反弹: 减到 78, 觉得"差不多了", 取消了周一周四的称重纪律. 三个月内回到 85.\n\n第二次反弹: 减到 74, 加班季, 一周三顿外卖. 两个月回到 82.\n\n第三次反弹: 减到 73, 春节家里聚餐. 7 天涨 4 公斤.\n\n第三次反弹之后我老婆没说我胖. 她只问我一句: "你最近是不是不快乐?"\n\n那一刻我才知道, 反弹的可怕之处不是涨重, 是"反弹后的失控感". 你会觉得"原来再怎么努力也守不住", 然后彻底放弃.\n\n第四次, 也就是现在, 我做了几件事让自己稳了 26 个月.\n\n每周固定 2 次称重 (周一+周四), 不增不减不焦虑.\n\n接受 ±2 公斤浮动. 单日体重不看.\n\n保留 1 顿自由餐 / 周.\n\n涨到 76 公斤自动启动 2 周回调期.\n\n复胖容易吗? 容易. 你不打算守一辈子, 它早晚会回来.\n\n复胖可怕吗? 不可怕. 可怕的是复胖之后放弃.',
      images: [imageUrl('scale,bathroom,mirror', 600, 400, 3)],
      grade: 'A', composite: 87 },
    { id: 'q_w05-v2', authorId: 'p_genHEAVY02', category: 'valuable', publishDate: '2024-10-22', voteUp: 4387, stars: 1921, commentCount: 767,
      body: '我反弹过 5 次, 不是 3 次.\n\n第 5 次反弹后我接受了一件事: 减肥不是 100 米冲刺, 是马拉松, 而且没有终点.\n\n你不需要"减到 XX 斤". 你需要的是学会一种能持续一辈子的生活方式. 而那种生活方式里, 80% 的时间你吃饱、不饿、偶尔放纵.\n\n那年春节我反弹得最厉害, 7 天涨了 6 公斤.\n\n我老妈看我体重, 没说什么, 给我熬了一锅小米粥. 她说"瘦不瘦是你的事, 妈只在乎你来年是不是开心".\n\n那句话让我从"我必须瘦下来" 切换到"我想过得更好, 顺便瘦一点".\n\n减肥不是项目. 是基础设施.',
      grade: 'A-', composite: 79 },
    { id: 'q_w05-w1', authorId: 'p_genREG09', category: 'witty', publishDate: '2024-12-11', voteUp: 2421, stars: 47, commentCount: 234,
      body: '我减了 1 公斤. 三天反弹 2 公斤.\n\n所以我没资格回答这题.',
      grade: 'B-', composite: 49 },
    { id: 'q_w05-w2', authorId: 'p_genREG03', category: 'witty', publishDate: '2025-01-22', voteUp: 1287, stars: 34, commentCount: 187,
      body: '复胖的瞬间不是数字变化.\n\n是某天上班裤子那个扣子扣不上.',
      grade: 'C+', composite: 46 },
    { id: 'q_w05-w3', authorId: 'p_genREG02', category: 'witty', publishDate: '2025-03-08', voteUp: 891, stars: 21, commentCount: 124,
      body: '我减肥到 65 公斤, 反弹回 73.\n\n朋友说"你还是 65 那时候的眼神".\n\n我没追问什么意思.',
      grade: 'C+', composite: 44 },
    { id: 'q_w05-w4', authorId: 'p_genREG01', category: 'witty', publishDate: '2024-09-30', voteUp: 487, stars: 14, commentCount: 89,
      body: '我妈每年减肥两次.\n\n她从来不复胖, 因为她也从来不真的减下去.',
      grade: 'C+', composite: 41 },
    { id: 'q_w05-w5', authorId: 'p_genREG05', category: 'witty', publishDate: '2024-11-04', voteUp: 387, stars: 9, commentCount: 67,
      body: '你 80 公斤时候觉得"减到 70 就好了".\n\n反弹到 75, 你怀念 70. 反弹到 85, 你怀念 80.\n\n你永远在怀念上一站.',
      grade: 'C+', composite: 43 },
    { id: 'q_w05-a1', authorId: 'p_genMKT04', category: 'ad', publishDate: '2025-04-16', voteUp: 34, stars: 1, commentCount: 9,
      body: '我减了 18 公斤反弹过 2 次. 第三次稳住, 是加了一个"减脂复盘群", 每周分享反弹迹象 + 一起回调.\n\n这种"被监督"的感觉比意志力管用. 群在公众号 [减脂研究小组], 关注回复"上车" 拉你进 ~',
      grade: 'D', composite: -16 },
  ],

  q_w06: [
    { id: 'q_w06-v1', authorId: 'p002', category: 'valuable', publishDate: '2024-09-14', voteUp: 6512, stars: 2787, commentCount: 921,
      body: '去年门诊接诊一个 9 岁男孩, 39 公斤. 老师让他妈减肥.\n\n他们进来的时候孩子在我办公室一直低头玩手机, 妈妈说话他都不抬眼.\n\n我没让他先做检查, 让他先在门外等了 10 分钟. 然后跟妈妈聊.\n\n妈妈眼圈红了. 她说儿子在学校经常被叫"小胖墩", 上个月运动会同学集体没选他参赛. 她为这事偷偷哭过一晚, 但是不敢让孩子知道.\n\n我跟她讲了三件事.\n\n第一件. 8-9 岁是生长发育关键期. 任何低热量饮食都会影响身高、骨骼、性发育. 我接过家长自行让孩子吃代餐导致月经初潮提前的案例.\n\n第二件. 临床用 BMI-Z 评分, 不是成人 BMI. 第一步去儿童保健科或儿内分泌门诊评估, 别用成人标准吓自己.\n\n第三件 (最关键). 即使确诊超重, 也不是"让孩子减肥", 是"全家调整生活方式". 孩子的饮食由家庭决定. 你要求 8 岁孩子拒绝桌上的炸鸡, 不公平也无效.\n\n她出门时跟我说: "我以前总跟他说你太胖了."\n\n我没接话. 她自己懂了.\n\n后来孩子评估出来是中度肥胖. 我们走了一套儿童干预方案. 一年后复诊, 孩子 32 公斤, 身高没掉. 最关键的是, 他主动跟我说他报名了运动会.\n\n8 岁不是减肥年龄. 8 岁是"开始建立健康习惯" 的年龄. 这两件事差太多.',
      grade: 'A', composite: 88 },
    { id: 'q_w06-v2', authorId: 'p_genHEAVY02', category: 'valuable', publishDate: '2024-06-22', voteUp: 3923, stars: 1612, commentCount: 712,
      body: '我儿子去年 8 岁 36 公斤. 也是老师说"该减肥了". 我作为妈妈分享一年下来的真实做法.\n\n第一周做错了. 我直接跟儿子说"你太胖了要减肥". 那晚他在床上哭了 20 分钟. 第二天早上我老公提醒我, 8 岁的孩子, 你跟他说"你太胖" 等于在告诉他"你不够好".\n\n第二周开始换思路. 我跟孩子说"我们家最近要吃健康一点, 妈妈也在调整". 全家戒掉含糖饮料、把可乐换成无糖气泡水. 我和老公也戒了一个月奶茶以示决心.\n\n第三周, 周末固定全家游泳 2 小时. 儿子第一次去不愿意. 第二次去比第一次多游了 5 圈. 第三次去主动问"明天还能来吗".\n\n第四周, 屏幕时间从 3 小时砍到 45 分钟. 这一项最难. 我们的解法是把客厅那台电视关掉, 全家一起拼乐高/玩棋牌.\n\n一年后, 儿子 31 公斤 + 5 cm 身高. 他主动报了校排球队. 老师再没提过"体重".\n\n孩子不是问题. 我们的生活方式是问题. 全家一起改, 比让孩子"自己减"容易 100 倍.',
      grade: 'A-', composite: 73 },
    { id: 'q_w06-w1', authorId: 'p_genREG02', category: 'witty', publishDate: '2025-02-04', voteUp: 1887, stars: 47, commentCount: 234,
      body: '我表姐家儿子 8 岁 40 公斤. 她说"我们家都这样的体型".\n\n全家都这样. 表姐 35 岁开始三高.\n\n基因可以是借口, 但不能挡命.',
      grade: 'B-', composite: 50 },
    { id: 'q_w06-w2', authorId: 'p_genREG07', category: 'witty', publishDate: '2024-12-15', voteUp: 1224, stars: 34, commentCount: 187,
      body: '我朋友的儿子 8 岁 35 公斤. 老师跟他妈说. 他妈跟他爸说. 他爸说"我 8 岁也这样".\n\n这家三代体重轨迹我能预测到 70 岁.',
      grade: 'C+', composite: 45 },
    { id: 'q_w06-w3', authorId: 'p_genREG04', category: 'witty', publishDate: '2025-03-19', voteUp: 712, stars: 21, commentCount: 124,
      body: '8 岁是"开始重视" 的年纪.\n\n不是"立刻减肥" 的年纪.\n\n这是两个完全不同的事.',
      grade: 'C+', composite: 42 },
    { id: 'q_w06-w4', authorId: 'p_genREG05', category: 'witty', publishDate: '2024-10-28', voteUp: 487, stars: 14, commentCount: 87,
      body: '让孩子减肥的前提是: 家长先把家里的可乐拿走.\n\n这一步做不到, 后面都白搭.',
      grade: 'C+', composite: 41 },
    { id: 'q_w06-w5', authorId: 'p_genREG10', category: 'witty', publishDate: '2025-01-30', voteUp: 387, stars: 9, commentCount: 67,
      body: '我小时候 8 岁 35 公斤. 高一前不动声色.\n\n高一开始窜个子. 高二 BMI 21.\n\n我妈那时候没催我. 现在想想, 她比我们这代家长都懂.',
      grade: 'C+', composite: 39 },
    { id: 'q_w06-a1', authorId: 'p_genMKT02', category: 'ad', publishDate: '2025-02-26', voteUp: 31, stars: 1, commentCount: 8,
      body: '我女儿之前也偏胖. 老师在家长会暗示过. 我没让她节食, 改去研究儿童健康零食替代.\n\n找到几款国标合规的低糖低盐零食 + 适合 6-12 岁的小份高蛋白食物清单. 关注公众号 [好物种草日记] 回复"儿童减脂" 可以领, 有妈妈群 ~',
      grade: 'D', composite: -18 },
  ],

  q_w08: [
    { id: 'q_w08-v1', authorId: 'p_genHEAVY04', category: 'valuable', publishDate: '2024-11-04', voteUp: 7234, stars: 3212, commentCount: 587,
      body: '健身教练. 直接答案: 你不算超重. 你的身体成分非常好.\n\n去年有个学员, 男, 28 岁, BMI 26, 体脂 14%. 公司体检报告写"建议减重". 他焦虑得睡不着.\n\n他来找我的时候第一句话是"是不是该减肥".\n\n我让他站上 InBody.\n\n骨骼肌 36 公斤 (运动员级).\n体脂 11 公斤.\n内脏脂肪等级 2 (正常上限 9).\n基础代谢 1850 kcal.\n\n我把数据指给他看, 跟他说: "你不仅不超重. 你的身体在所有维度都比 95% 的「BMI 正常」的人健康."\n\nBMI 是 1830 年代发明的统计工具, 用于人群普查. 不是个体诊断.\n\n当代健身者的肌肉重量远超 90 年前的"普通成年人". BMI 公式天然失真.\n\n看下面三个, 别看 BMI: 体脂率、围度、镜子.\n\n他后来不焦虑了. 他跟我说他把 InBody 截图给公司体检中心看, 他们也没办法改报告. 但是他自己心里清楚, 这就够了.\n\n体检表上的"超重" 标签让你焦虑没意义. 那张表不知道你练了多少, 你自己知道.',
      grade: 'A', composite: 82 },
    { id: 'q_w08-v2', authorId: 'p001', category: 'valuable', publishDate: '2025-01-30', voteUp: 2923, stars: 821, commentCount: 387,
      body: '从代谢医学补充一个反过来的故事.\n\n门诊去年有位姑娘, 25 岁, 模特, BMI 19, 体脂 27%. 她来体检, 觉得自己很瘦. 我建议她复查代谢.\n\n结果出来. 空腹胰岛素 14, 糖化 5.8, 甘油三酯 2.3 — 一个 BMI 19 的姑娘, 代谢指标已经接近肥胖中老年人.\n\n她坐在我对面, 看着报告, 说: "怎么会."\n\n这种体型临床上叫 TOFI (Thin-Outside-Fat-Inside), 翻译过来叫"瘦胖子".\n\n外表不胖, 内脏脂肪多, 肌肉量极少, 代谢健康差.\n\n反过来, 我也见过 BMI 28 但 InBody 显示体脂 16%、骨骼肌 42 公斤、代谢全绿的健身爱好者. 健康状态远超 BMI 21 的同龄人.\n\n"算不算超重" 这件事, 单看 BMI 是不够的.\n\n至少看四项: BMI (粗筛) + 体脂率 + 腰围 + 代谢指标. 看完这四项再判断, 答案才准.',
      grade: 'A-', composite: 75 },
    { id: 'q_w08-w1', authorId: 'p_genREG09', category: 'witty', publishDate: '2025-01-14', voteUp: 2487, stars: 47, commentCount: 287,
      body: 'BMI 25 + 体脂 18% 在数学上叫"超重".\n\n在生活里叫"你穿什么都好看".\n\n生活赢.',
      grade: 'B-', composite: 53 },
    { id: 'q_w08-w2', authorId: 'p_genREG05', category: 'witty', publishDate: '2024-08-30', voteUp: 1391, stars: 28, commentCount: 167,
      body: 'BMI 是给保险公司用的. 不是给你照镜子用的.\n\n你照镜子觉得好看就行了.',
      grade: 'C+', composite: 46 },
    { id: 'q_w08-w3', authorId: 'p_genREG02', category: 'witty', publishDate: '2025-03-22', voteUp: 912, stars: 21, commentCount: 124,
      body: '我同事 BMI 22, 体脂 28%. 看起来比 BMI 25 体脂 15% 的健身房男生胖.\n\nBMI 算个屁.',
      grade: 'C+', composite: 43 },
    { id: 'q_w08-w4', authorId: 'p_genREG06', category: 'witty', publishDate: '2025-02-05', voteUp: 587, stars: 14, commentCount: 87,
      body: '体检表的"超重"标签让我焦虑了一个月.\n\n后来发现医生在备注栏写"体格健康, 公式不适用".\n\n我焦虑的不是体重, 是那行"不适用".',
      grade: 'C+', composite: 41 },
    { id: 'q_w08-w5', authorId: 'p_genREG10', category: 'witty', publishDate: '2024-10-19', voteUp: 387, stars: 9, commentCount: 67,
      body: '我老婆 BMI 23 体脂 30%.\n\n她拒绝接受"BMI 不准"这个说法.\n\n因为这意味着她要再减.',
      grade: 'C+', composite: 39 },
    { id: 'q_w08-a1', authorId: 'p_genMKT02', category: 'ad', publishDate: '2025-03-08', voteUp: 24, stars: 0, commentCount: 7,
      body: '我以前也被体检表的"BMI 超重" 困惑过. 后来买了一台家用体脂秤, 测了才知道我体脂正常, 是肌肉多.\n\n用着不错的几款体脂秤 + 选购避坑指南整理了一份, 关注公众号 [好物种草日记] 回复"体脂秤" 即可领 ~',
      grade: 'D', composite: -16 },
  ],

  q_w09: [
    { id: 'q_w09-v1', authorId: 'p002', category: 'valuable', publishDate: '2025-02-09', voteUp: 8734, stars: 4112, commentCount: 887,
      body: '门诊去年来过一位姑娘. 主诉就是这个 — "减肥期晚 10 点饿得失眠".\n\n她坐我对面说"陈医生, 我自制力是不是有问题".\n\n我让她记一周的饮食+睡眠日记.\n\n一周后她拿来给我看, 规律一目了然.\n\n她的晚餐固定 18:30, 一份沙拉 + 一块鸡胸, 约 380 kcal.\n\n22:00 准时饿.\n\n22:00 到 23:00 之间她会喝 3 杯水 + 刷 1 小时手机 (亮屏抑制褪黑素).\n\n23:30 到 01:00 失眠.\n\n第二天早上脑雾, 中午报复性吃 800+ kcal 的黄焖鸡.\n\n我把日记本推回去, 跟她说: 你不是"该不该吃"的问题, 是"晚餐结构本身有问题".\n\n一份沙拉 + 鸡胸 380 kcal. 蛋白质勉强 30g, 但是碳水只有 15g, 几乎是 0.\n\n没碳水, 4 小时后必饿. 这是生理.\n\n后来调整: 晚餐加入糙米 80g + 鸡胸增到 120g + 蔬菜 200g, 总热量 510 kcal.\n\n22 点不再饿. 失眠也好了. 第二天中午吃饭量回归正常.\n\n"晚 10 点饿了该不该吃" 不是 yes/no.\n\n是"你的晚餐结构有没有给身体足够撑 4 小时的燃料".\n\n如果今晚已经饿了: 一杯纯牛奶 + 一个水煮蛋 + 5 颗杏仁. 大约 200 kcal, 低 GI + 高蛋白, 不影响减脂.\n\n下一顿晚餐, 请加碳水. 减肥不是修行. 不需要挨饿.',
      grade: 'A', composite: 87 },
    { id: 'q_w09-v2', authorId: 'p_genHEAVY01', category: 'valuable', publishDate: '2024-10-22', voteUp: 3156, stars: 1591, commentCount: 521,
      body: '26 个月没反弹的我说一下我的"晚 10 点应急包".\n\n我冰箱固定常驻 4 样东西.\n\n250g 装的无糖希腊酸奶 (蛋白 22g + 碳水 8g, 约 150 kcal).\n\n一袋小包装坚果 (15g, 约 90 kcal).\n\n水煮鸡蛋 2 个 (我每周日批量煮 14 个放冰箱).\n\n苏打水.\n\n10 点饿了, 任选其一. 总热量 100-200 kcal 之间. 没有罪恶感, 也不会饿到失眠.\n\n关键不是"晚上能不能吃", 是"提前准备了什么能吃".\n\n临时决策会失控. 提前部署的食物组合, 才是长期减脂的物理基础.\n\n我现在 22 点准时吃我的"应急包". 26 个月稳定.',
      grade: 'A-', composite: 72 },
    { id: 'q_w09-w1', authorId: 'p_genREG07', category: 'witty', publishDate: '2024-12-22', voteUp: 2487, stars: 67, commentCount: 287,
      body: '我大学减肥时的应对路径:\n\n10 点饿了 → 喝温水\n10:30 还饿 → 刷牙\n11 点还饿 → 看健身博主视频\n11:30 还饿 → 失眠+暴食最终方案启动',
      grade: 'B', composite: 56 },
    { id: 'q_w09-w2', authorId: 'p_genREG09', category: 'witty', publishDate: '2024-11-15', voteUp: 1391, stars: 28, commentCount: 167,
      body: '10 点饿是常态.\n\n12 点饿是宿命.\n\n你必须接受这件事, 然后吃饱晚饭.',
      grade: 'C+', composite: 46 },
    { id: 'q_w09-w3', authorId: 'p_genREG06', category: 'witty', publishDate: '2025-03-12', voteUp: 912, stars: 21, commentCount: 124,
      body: '我研究过 5 年:\n\n10 点饿吃 → 罪恶感\n10 点饿不吃 → 失眠\n10 点饿喝水 → 起夜\n10 点不饿 → 第二天早上 4 点饿醒\n\n秘诀是吃饱晚饭.',
      grade: 'C+', composite: 47 },
    { id: 'q_w09-w4', authorId: 'p_genREG10', category: 'witty', publishDate: '2025-01-08', voteUp: 587, stars: 14, commentCount: 87,
      body: '小区物业 22 点关闭门口的麦当劳门店.\n\n我感谢物业三年.',
      grade: 'C+', composite: 41 },
    { id: 'q_w09-w5', authorId: 'p_genREG02', category: 'witty', publishDate: '2024-08-30', voteUp: 387, stars: 9, commentCount: 67,
      body: '我老婆 10 点饿了就刷牙. 我问"刷牙会饿吗".\n\n她说不饿, 但是想起来"刷过牙就不能吃东西了".\n\n我学了 3 年, 没学会.',
      grade: 'C+', composite: 40 },
    { id: 'q_w09-a1', authorId: 'p_genMKT01', category: 'ad', publishDate: '2025-05-04', voteUp: 28, stars: 1, commentCount: 8,
      body: '我减肥期 10 点饿不知道吃什么, 喝水扛不住, 吃东西又怕胖.\n\n后来朋友推荐我一款"夜安蛋白条", 每条 12g 蛋白 + 6g 纤维, 90 kcal.\n\n用了半个月晚上不再饿到失眠, 反而瘦了 2 公斤. 后来知道是 YY 牌. 想试可以私信我 ~',
      grade: 'D', composite: -18 },
  ],

  q_w10: [
    { id: 'q_w10-v1', authorId: 'p_genHEAVY03', category: 'valuable', publishDate: '2024-07-15', voteUp: 5287, stars: 2491, commentCount: 921,
      body: '买过 7 个减肥课程, 总花费 14800 元, 总减重 0 公斤. 给你看真实复盘.\n\n¥3980 "21 天蜕变营". 微信群 + 打卡, 第 7 天放弃. 群里 80 个人, 真打卡到第 21 天的只有 3 个.\n\n¥1980 "运动营养专家课". 录播 100 集. 我看到第 12 集发现都是百度能搜到的内容. 后续再没打开.\n\n¥4980 "1v1 教练" 三个月. 教练换了 3 个. 每个都让我"再坚持下". 三个月结束我体重涨了 1.5 公斤.\n\n¥899 "燃脂瑜伽". 教练自己都没瘦. 我看着她示范, 感觉自己上当受骗.\n\n¥299 "腹部塑形 7 天". 退款被拒. 看回放发现是网图配旁白.\n\n¥1980 "瘦身脑科学". 反复讲"瘦素"、"皮质醇". 没有任何执行方案. 我学完之后, 仍然不知道明天早餐该吃什么.\n\n¥499 "情绪化进食疗愈". 全是 PUA 话术. "你之所以胖, 是因为你不爱自己". 我听完直接焦虑两周.\n\n14800 块买到的唯一收获: 如果一个课程不能让你 3 周内开始执行, 它就是智商税.\n\n这是我做了 7 次冤大头后的判断标准.',
      grade: 'A', composite: 76 },
    { id: 'q_w10-v2', authorId: 'p_genHEAVY04', category: 'valuable', publishDate: '2024-09-28', voteUp: 3923, stars: 1812, commentCount: 487,
      body: '健身教练讲一下行业内幕. 听完你就明白为啥课程多是智商税.\n\n减脂课程的真实成本是多少? 录播 100 集, 团队 2 周做完, 总成本 1-3 万元. 但是售价 1980、4980. 因为他们的定价模型是: 边际成本几乎为零, 转化率 5-10%, 退款率 3-5%.\n\n所以课程方的 KPI 不是"学员减重多少". 是"99 元体验课的转化率". 你交了体验课的钱, 就进了销售漏斗. 这是商业模式决定的, 不是哪个人坏.\n\n那为什么我不卖课?\n\n我 8 年只带过 200+ 个 1v1 学员. 每个人我都熟悉到知道他的工作时间、家里冰箱里有什么、最爱吃什么.\n\n我能给到的真东西是"陪伴 + 实时调整". 这种东西不能录制成视频卖给 1000 个人.\n\n判断好课程几条标准: 教练有真实的、可验证的、长期带学员的案例. 教练自己身材保持得很好, 而且持续多年. 单次或短期定价, 不强制长期复购. 不能短信群发"限时优惠".\n\n剩下的 99%, 关掉就好.',
      grade: 'A-', composite: 70 },
    { id: 'q_w10-w1', authorId: 'p_genREG04', category: 'witty', publishDate: '2025-01-22', voteUp: 2887, stars: 67, commentCount: 287,
      body: '我妈花 4980 报了一个微信群打卡课.\n\n50 人.\n\n她瘦了 1.5 公斤.\n\n在群里排第二瘦.',
      grade: 'B', composite: 56 },
    { id: 'q_w10-w2', authorId: 'p_genREG02', category: 'witty', publishDate: '2024-11-22', voteUp: 1487, stars: 34, commentCount: 187,
      body: '减肥课程的卖点是"让你认为下次能瘦".\n\n不是"让你瘦".\n\n所以课程的最优解永远是: 让你买下一期.',
      grade: 'C+', composite: 48 },
    { id: 'q_w10-w3', authorId: 'p_genREG05', category: 'witty', publishDate: '2024-10-08', voteUp: 1024, stars: 28, commentCount: 167,
      body: '我买的最贵的课 1980.\n\n内容是维基百科"低碳饮食" 词条 + 几个案例.\n\n维基百科免费.',
      grade: 'C+', composite: 45 },
    { id: 'q_w10-w4', authorId: 'p_genREG09', category: 'witty', publishDate: '2024-12-19', voteUp: 712, stars: 21, commentCount: 124,
      body: '减肥课程 = 卖给你你已经知道的事.\n\n你愿意付钱是因为, 付钱之后觉得自己"应该会做了".\n\n但你还是不会做.',
      grade: 'C+', composite: 44 },
    { id: 'q_w10-w5', authorId: 'p_genREG07', category: 'witty', publishDate: '2025-03-15', voteUp: 487, stars: 14, commentCount: 87,
      body: '我朋友报了 4800 的"1v1 减脂教练". 教练三个月换了三次. 每个都说"再坚持一下".\n\n朋友涨了 1.5 公斤.',
      grade: 'C+', composite: 42 },
    { id: 'q_w10-a1', authorId: 'p_genMKT04', category: 'ad', publishDate: '2025-08-19', voteUp: 23, stars: 0, commentCount: 8,
      body: '不是所有课程都智商税. 我们公众号 [减脂研究小组] 整理了一份《国内 30 个减肥课程横向评测》, 不收钱.\n\n回复"评测"领取. 也可以加我微信进群讨论, 都是真实减肥成功的同学. 进群免费, 限时 100 人 ~',
      grade: 'D', composite: -14 },
  ],

  q_w12: [
    { id: 'q_w12-v1', authorId: 'p_genHEAVY04', category: 'valuable', publishDate: '2025-03-18', voteUp: 7378, stars: 3291, commentCount: 612,
      body: '健身教练 8 年. 这道题我每个新学员都会问. 我先讲个故事再给数据.\n\n去年带过一个 BMI 33 的女学员. 她之前自己跳绳减肥, 一周跳了 3 次, 每次 30 分钟.\n\n来找我的时候膝盖已经发炎. 走路一瘸一瘸.\n\n她进门第一句: "教练, 我看小红书都说跳绳燃脂效率高啊."\n\n我没回答, 让她坐下, 拿了纸笔.\n\n体重 75 公斤 + 跳绳 = 单次落地冲击约 6-8 倍体重 = 450-600 公斤冲击膝关节.\n\n她算到第二行就抬头, "我不能再跳了对吧".\n\n我说: 是. 半月板和软骨等于每次跳被锤一下. 持续 4 周, 必然损伤.\n\n后来她换游泳 + 椭圆机. 一年后 62 公斤, 膝盖恢复, 现在可以正常跑步.\n\n"哪个效率最高" 在数据上有答案. HIIT > 跳绳 > 跑步 > 椭圆机 > 游泳 > 快走 (热量消耗维度).\n\n但是配上"身体能不能承受" 这个维度, 答案完全不同.\n\nBMI ≥ 28: 快走 + 椭圆机 + 游泳, 三选一. 别折腾关节.\n\nBMI 24-28: 跑步 / 椭圆机 30 分钟 + 力量 20 分钟, 每周 4-5 次.\n\nBMI < 24: HIIT 一周 2 次 + 力量 2 次, 减脂效率拉满.\n\n选"能持续半年的运动" 比"单次最累的运动" 重要 10 倍.\n\n我那位学员是幸运的 — 她进健身房时膝盖还在炎症期, 没到不可逆.',
      grade: 'A', composite: 84 },
    { id: 'q_w12-v2', authorId: 'p_genHEAVY01', category: 'valuable', publishDate: '2024-11-04', voteUp: 3387, stars: 1421, commentCount: 387,
      body: '我减 26 公斤的核心运动, 按时间顺序写一下.\n\n前 3 个月 (98 → 88): 只敢快走. 6 km / 天. 我膝盖怕, 跑两步就疼.\n\n4-8 个月 (88 → 78): 终于敢上椭圆机. 每次 30 分钟 + 5 分钟力量入门. 一周 5 次.\n\n9-12 个月 (78 → 72): 体重终于到了"可以跑步" 的范围. 加入跳绳 + 偶尔 HIIT. 每周 3 次跑 + 2 次力量.\n\n现在 (72 公斤稳定 26 个月): 跑步 30 分钟 + 力量 30 分钟, 每周 4 次. 这是我现在的"维持配方".\n\n经验: 运动是手段, 不是目的.\n\n减脂主要靠饮食 (70%), 运动只占 30%. 别神化"运动减脂".\n\n选运动的原则: 当前体重能不能承受? 你接下来 1 年能不能坚持? 有没有给关节留余量?\n\n这三条比"哪个效率最高" 重要 10 倍.',
      grade: 'A-', composite: 67 },
    { id: 'q_w12-w1', authorId: 'p_genREG05', category: 'witty', publishDate: '2025-03-18', voteUp: 1887, stars: 47, commentCount: 287,
      body: '问效率不如问能持续.\n\n你坚持不下来的最高效率运动, 等于零.',
      grade: 'B-', composite: 51 },
    { id: 'q_w12-w2', authorId: 'p_genREG07', category: 'witty', publishDate: '2025-02-08', voteUp: 1224, stars: 28, commentCount: 167,
      body: '我们宿舍有个室友每天跑 5 km. 半年了. 没瘦.\n\n因为他每跑完一次, 必须吃一份咸蛋黄炒饭犒劳自己.',
      grade: 'C+', composite: 46 },
    { id: 'q_w12-w3', authorId: 'p_genREG09', category: 'witty', publishDate: '2024-11-04', voteUp: 891, stars: 21, commentCount: 124,
      body: 'HIIT 燃脂高.\n\n但是 HIIT 后, 食欲也燃得很高.\n\n烧 400, 吃 600. 净亏.',
      grade: 'C+', composite: 44 },
    { id: 'q_w12-w4', authorId: 'p_genREG06', category: 'witty', publishDate: '2025-01-22', voteUp: 587, stars: 14, commentCount: 87,
      body: '我试过 HIIT. 一组结束, 我以为心脏要爆炸.\n\n后来换快走 6 km. 没死, 还瘦了.',
      grade: 'C+', composite: 42 },
    { id: 'q_w12-w5', authorId: 'p_genREG02', category: 'witty', publishDate: '2024-10-19', voteUp: 387, stars: 9, commentCount: 67,
      body: '跳绳是社畜友好型, 不用换运动鞋, 不用去健身房.\n\n但是楼下大爷敲我门 5 次后, 我换成椭圆机了.',
      grade: 'C+', composite: 41 },
    { id: 'q_w12-a1', authorId: 'p_genMKT02', category: 'ad', publishDate: '2025-04-12', voteUp: 18, stars: 0, commentCount: 5,
      body: '我之前跳绳膝盖疼了一年. 后来换了一种"减震跳绳", 落地反弹小很多, 终于不疼了.\n\n用着不错的几款 + 选购避坑指南整理在公众号 [好物种草日记], 回复"跳绳" 可以领 ~',
      grade: 'D', composite: -14 },
  ],

  q_w13: [
    { id: 'q_w13-v1', authorId: 'p001', category: 'valuable', publishDate: '2025-02-09', voteUp: 6712, stars: 3312, commentCount: 687,
      body: '"易瘦体质" 在医学上对应"高静息代谢率 + 强 NEAT" 的体型. 一部分是基因, 大部分是习惯.\n\n我门诊去年接过一对双胞胎姐妹一起来体检. 一个 BMI 19, 一个 BMI 26.\n\n同卵双胞胎, 基因完全相同. 出生 0.05 秒差距. 27 年后 7 公斤差距.\n\n我做了 24 小时活动监测 + 一周饮食日记, 想看看到底差在哪.\n\n基因数据 (UCP1 / FTO / MC4R): 完全一致.\n基础代谢: 姐姐 1380, 妹妹 1290. 差 90 kcal/天.\n但 NEAT (非运动性活动产热): 姐姐 720 kcal/天, 妹妹 380. 差 340 kcal/天.\n饮食结构差不多, 总摄入差 200 kcal/天.\n\n差距 = (BMR 差 90) + (NEAT 差 340) - (摄入差 200) ≈ 230 kcal/天.\n\n一年下来 84000 kcal ≈ 11 公斤脂肪差距.\n\n再看具体 NEAT 差在哪.\n\n姐姐: 站立办公. 通勤步行 4 km. 进食 25 分钟. 看电视会绕沙发踱步.\n\n妹妹: 坐着办公. 通勤打车. 进食 12 分钟. 看电视坐着不动.\n\n这就是"易瘦体质" 的真相.\n\n基因贡献 ~30%. 习惯贡献 ~70%.\n\n你练习不出来另一份基因. 但你可以模仿易瘦者的 NEAT 习惯.\n\n6-24 个月持续, 真的能改变体型曲线.',
      images: [imageUrl('twins,sisters,family', 600, 400, 6)],
      grade: 'A', composite: 88 },
    { id: 'q_w13-v2', authorId: 'p_genHEAVY01', category: 'valuable', publishDate: '2024-09-28', voteUp: 3103, stars: 1212, commentCount: 487,
      body: '我老婆是天生易瘦体质. BMI 19. 怎么吃都不胖.\n\n我观察了她 5 年, 总结她"易瘦" 的不是基因, 是 4 个习惯.\n\n第一. 她吃东西特别慢. 一顿饭 30-40 分钟, 还会跟我聊天. 我 15 分钟吃完她还没吃一半. 这一项让她每餐少摄入 200-300 kcal (饱腹感及时传递到大脑).\n\n第二. 她不坐着不动. 看电视会站起来抖抖腿, 看书会走来走去翻页, 吃饭时手势特别多. 这就是 NEAT. 我观察过, 她"静坐时间" 一天不超过 4 小时.\n\n第三. 她睡得早. 11 点必睡, 7 点醒. 雷打不动. 睡眠规律 = 瘦素稳定 = 食欲稳定.\n\n第四. 她对零食不感兴趣. 不是控制, 是真不想吃. 这一点我嫉妒了 5 年.\n\n我跟她体型差异巨大, 同住同吃饭. 但我学了她前 3 条之后, 减重曲线明显平滑了.\n\n第 4 条学不会, 但前 3 条已经够用.\n\n"易瘦" 不是天生, 至少 2/3 是习惯. 你跟易瘦的人住一个月, 偷偷学她的 NEAT 习惯, 比看 100 个减肥教程都管用.',
      grade: 'A-', composite: 70 },
    { id: 'q_w13-w1', authorId: 'p_genREG05', category: 'witty', publishDate: '2024-11-30', voteUp: 2821, stars: 67, commentCount: 287,
      body: '易瘦体质练成方法:\n\n1. 投胎\n2. 投胎\n3. 投胎\n\n投胎失败的话, 接受易胖, 然后用习惯弥补.',
      grade: 'B-', composite: 55 },
    { id: 'q_w13-w2', authorId: 'p_genREG02', category: 'witty', publishDate: '2025-01-04', voteUp: 1487, stars: 34, commentCount: 234,
      body: '我室友天天吃外卖也不胖. 我天天健身仍然胖.\n\n这世界不公平, 接受.',
      grade: 'C+', composite: 46 },
    { id: 'q_w13-w3', authorId: 'p_genREG09', category: 'witty', publishDate: '2024-09-22', voteUp: 891, stars: 21, commentCount: 167,
      body: '所谓"易瘦体质" 翻译过来就是 "她吃饭比你慢, 她平时坐立不安, 她睡眠规律".\n\n你都做不到, 所以你不易瘦.',
      grade: 'C+', composite: 44 },
    { id: 'q_w13-w4', authorId: 'p_genREG10', category: 'witty', publishDate: '2025-02-12', voteUp: 587, stars: 14, commentCount: 124,
      body: '我老婆是易瘦体质. 但是她每周二必健身一次.\n\n不是练就的. 是维持的.\n\n人家维持的体质, 你以为是天生.',
      grade: 'C+', composite: 42 },
    { id: 'q_w13-w5', authorId: 'p_genREG01', category: 'witty', publishDate: '2025-03-29', voteUp: 387, stars: 9, commentCount: 87,
      body: '我妈说我爸是易瘦体质.\n\n我爸 50 岁第一次破 70 公斤.\n\n我妈说"这是我跟他相处 25 年第一次见".',
      grade: 'C+', composite: 41 },
    { id: 'q_w13-a1', authorId: 'p_genMKT01', category: 'ad', publishDate: '2025-03-29', voteUp: 28, stars: 1, commentCount: 9,
      body: '我之前是易胖体质. 后来改造成"接近易瘦" 用了 1 年. 期间最有用的不是运动, 是把早餐换成了一种"高蛋白 + 高纤维" 的代餐.\n\n后来发现是 YY 牌全食代餐. 配合 NEAT 习惯练习一年, 体重稳了, 体脂从 28% 到 19%. 想试可以私信我聊 ~',
      grade: 'D', composite: -20 },
  ],

  q_w14: [
    { id: 'q_w14-v1', authorId: 'p_genHEAVY04', category: 'valuable', publishDate: '2024-08-29', voteUp: 5287, stars: 2423, commentCount: 587,
      body: '健身教练. 直接答案 + 数据 + 故事.\n\n力量训练能提高基础代谢吗? 能. 但是幅度远比社交媒体宣传的小.\n\n数据先放: 每多 1 公斤骨骼肌, 基础代谢约 +13-15 kcal/天. 正常训练者一年增 2-4 公斤肌肉. 一年下来 BMR +30-60 kcal/天, 折合 1.4-2.8 公斤脂肪.\n\n所以单纯"靠力量训练提高代谢" 的实际效益, 有, 但不夸张.\n\n那为什么我所有学员必须做力量训练?\n\n讲一个去年的学员故事.\n\n她是个外企女总监, 35 岁. 来的时候 60 公斤, 想"塑形不掉肌肉".\n\n我跟她说: 你纯有氧, 能瘦到 50 公斤, 但是会变成"瘦但松垮".\n\n她不信. 自己跑了 3 个月.\n\n3 个月后她瘦了 5 公斤. 我让她站 InBody. 数据出来. 体重 -5kg, 但是骨骼肌 -3.2kg, 脂肪只减少 1.8kg.\n\n她当场愣住. 看了我一眼, 说: "我以为我减的全是脂肪."\n\n这就是单做有氧的代价. 你也会同时掉肌肉. 而且比例可能高达 40-60%.\n\n力量训练在减脂期的真正价值不是"突然变成易瘦体质". 是"减脂时不掉肌肉 + 长期身材好看".\n\n我给她加了每周 3 次力量训练. 又减了 3 个月. 体重再降 3 公斤, 但是骨骼肌反而 +0.8kg, 镜子里整个人挺拔了.\n\n力量训练必须做. 不是为了快速燃脂, 是为了减脂之后那张照片你愿意发朋友圈.',
      images: [imageUrl('barbell,gym,deadlift', 600, 400, 7)],
      grade: 'A', composite: 84 },
    { id: 'q_w14-v2', authorId: 'p_genHEAVY01', category: 'valuable', publishDate: '2024-12-04', voteUp: 2287, stars: 921, commentCount: 287,
      body: '我减 26 公斤期间, 力量训练给我的最大改变不是代谢, 是身材.\n\n减到 78 公斤只做有氧的我, 肚子还是松松的, 胸是垂的.\n\n讲个细节. 减到 78 公斤那段时间, 跟老婆出去吃饭. 服务员问"先生你之前一定很高大威猛吧".\n\n我老婆当时表情很尴尬.\n\n服务员的意思是"你以前是个有威胁感的人, 现在不是了".\n\n那一刻我才意识到, 单纯减重是把自己减薄了, 不是减好了.\n\n加力量训练之后再减到 72 公斤. 同样的话术再没听过. 反而是"先生你练健身吧".\n\n力量训练让我从"瘦弱的中年人" 变成"健康的中年人". 体重数字差不多, 但状态差异巨大.\n\n减肥的终点不应该是体重秤, 应该是镜子.',
      grade: 'A-', composite: 71 },
    { id: 'q_w14-w1', authorId: 'p_genREG05', category: 'witty', publishDate: '2025-01-04', voteUp: 2187, stars: 47, commentCount: 234,
      body: '能提高基础代谢, 但不如你想象的那么多.\n\n大概一年 +50 大卡/天.\n\n相当于多吃了半根香蕉. 完了.',
      grade: 'B-', composite: 53 },
    { id: 'q_w14-w2', authorId: 'p_genREG09', category: 'witty', publishDate: '2024-11-19', voteUp: 1424, stars: 34, commentCount: 187,
      body: '能.\n\n前提是你真的练出肌肉来, 而不是练了 3 个月长 0.5 公斤.',
      grade: 'C+', composite: 45 },
    { id: 'q_w14-w3', authorId: 'p_genREG06', category: 'witty', publishDate: '2025-02-18', voteUp: 912, stars: 21, commentCount: 124,
      body: '力量训练真正的好处是镜子里好看, 不是体重秤上轻.\n\n减肥的终点是镜子, 不是秤.',
      grade: 'C+', composite: 46 },
    { id: 'q_w14-w4', authorId: 'p_genREG02', category: 'witty', publishDate: '2025-03-08', voteUp: 587, stars: 14, commentCount: 87,
      body: '我练了 1 年力量. 基础代谢 1340 → 1380.\n\n这点能量我一杯奶茶就毁掉.',
      grade: 'C+', composite: 41 },
    { id: 'q_w14-w5', authorId: 'p_genREG10', category: 'witty', publishDate: '2024-12-15', voteUp: 387, stars: 9, commentCount: 67,
      body: '我练力量后, 体重 +1, 体脂 -3%.\n\n我老婆说"你还是那样".\n\n她不看体脂.',
      grade: 'C+', composite: 39 },
    { id: 'q_w14-a1', authorId: 'p_genMKT04', category: 'ad', publishDate: '2025-04-22', voteUp: 22, stars: 0, commentCount: 7,
      body: '想做力量训练但是没场地的姐妹, 我亲测一套家用哑铃 + 弹力带组合还不错. 在我们公众号 [减脂研究小组] 有完整的"家用力量训练 30 天" 计划 + 装备清单.\n\n关注后回复"力量" 可以领, 也可以加我微信进群 ~',
      grade: 'D', composite: -14 },
  ],
};

// ─── V2 切换 ─────────────────────────────────────────────────────────
// data-v2.jsx 加载后 window.PERSONAS_V2 / QUESTIONS_V2 / ANSWERS_V2 存在,
// 这里优先用; 否则回退到旧池子保持现状不挂.
const PERSONAS  = (typeof window !== 'undefined' && window.PERSONAS_V2)  || PERSONAS_OLD;
const QUESTIONS = (typeof window !== 'undefined' && window.QUESTIONS_V2) || QUESTIONS_OLD;
const ANSWERS   = (typeof window !== 'undefined' && window.ANSWERS_V2)   || ANSWERS_OLD;

// ─── Keywords ──────────────────────────────────────────────────────────
// AI-extracted (here: hand-curated for demo) 3-5 keywords per top answer,
// shown as small tags in the eval panel. Keyed by answerId.
const KEYWORDS_BY_ID = {
  'q_w01-v1': ['168', '胰岛素抵抗', '代谢筛查', '协和'],
  'q_w01-v2': ['168', '水分误读', '热量缺口', '执行率'],
  'q_w02-v1': ['暴食循环', '蛋白质缺口', '皮质醇', '日记法'],
  'q_w02-v2': ['限制-暴食', '心理放松', '自由餐', '8 年'],
  'q_w03-v1': ['代餐', '补偿性进食', '心理代偿', '六院'],
  'q_w03-v2': ['国标 GB/T 29602', '蛋白质', '智商税', '7 品牌'],
  'q_w04-v1': ['BMI 分层', '保肌减脂', '关节恢复', '8 年带教'],
  'q_w04-v2': ['减重保肌', '蛋白 1.8g/kg', '力量训练'],
  'q_w05-v1': ['复胖', '反弹规律', '回调期', '26 个月'],
  'q_w05-v2': ['马拉松', '基础设施', '生活方式'],
  'q_w06-v1': ['儿童肥胖', 'BMI-Z 评分', '全家干预', '心理保护'],
  'q_w06-v2': ['全家改造', '游泳', '屏幕时间', '亲身经历'],
  'q_w07-v1': ['司美格鲁肽', '急性胰腺炎', '适应症', 'BMI≥30'],
  'q_w07-v2': ['处方使用', '食欲降', '停药反弹', '亲历'],
  'q_w07-v3': ['减重手术', '联合疗法', 'BMI>40', '中山一院'],
  'q_w08-v1': ['BMI 失真', '运动员体型', 'InBody', '体脂率'],
  'q_w08-v2': ['TOFI', '瘦胖子', '代谢评估'],
  'q_w09-v1': ['晚餐结构', '碳水缺失', '低 GI', '夜间饥饿'],
  'q_w09-v2': ['应急包', '冰箱常驻', '希腊酸奶', '坚果'],
  'q_w10-v1': ['7 课程', '14800 元', '执行性测试', '智商税'],
  'q_w10-v2': ['行业内幕', '边际成本', '复购模型', '陪伴'],
  'q_w11-v1': ['5 年稳定', '不证明自己', '系统思维', '日常'],
  'q_w11-v2': ['退群', '不打卡', '基础设施'],
  'q_w11-v3': ['基础代谢', '保肌', '代谢底座', '300 例'],
  'q_w12-v1': ['关节负担', 'BMI 分层', '损伤预防', '可持续性'],
  'q_w12-v2': ['运动进阶', '快走', '椭圆机', '饮食 70%'],
  'q_w13-v1': ['NEAT', '双胞胎对照', '基础代谢', '习惯'],
  'q_w13-v2': ['NEAT 习惯', '慢吃', '睡眠规律', '观察'],
  'q_w14-v1': ['EPOC', '保肌', '塑形', '案例'],
  'q_w14-v2': ['镜子标准', '身体线条', '健康'],
};

// Topic average voteUp — used by the eval panel to compute "认可度"
// relative to peers of the same question.
const TOPIC_AVG_VOTES = {};
for (const qid in ANSWERS) {
  const votes = ANSWERS[qid].map(a => a.voteUp).filter(v => v > 0);
  TOPIC_AVG_VOTES[qid] = votes.length
    ? votes.reduce((s, v) => s + v, 0) / votes.length
    : 1;
}

function getKeywords(answerId)  { return KEYWORDS_BY_ID[answerId] || []; }
function getTopicAvg(qid)       { return TOPIC_AVG_VOTES[qid] || 1; }

// ─── Lookup helpers ────────────────────────────────────────────────────
function getPersona(id)        { return PERSONAS[id] || null; }
function getQuestion(qid)      { return QUESTIONS[qid] || null; }
function getAnswers(qid)       { return ANSWERS[qid] || []; }
function getAnswersByAuthor(authorId) {
  const out = [];
  for (const qid in ANSWERS) {
    for (const a of ANSWERS[qid]) {
      if (a.authorId === authorId) {
        out.push({ ...a, qid, qTitle: QUESTIONS[qid]?.title || '' });
      }
    }
  }
  return out.sort((a, b) => (b.publishDate || '').localeCompare(a.publishDate || ''));
}
function getFeedQuestions(count = 14) {
  // Order alternates between image-bearing and image-less top answers
  // so the feed has a natural visual rhythm (not all-images then all-text).
  // Hot topics first (司美格鲁肽 / 5 年成功 / 复胖), then mix.
  const order = [
    'q_w07', // img — hot topic
    'q_w02', // no  — 暴食心理
    'q_w11', // img — 5 年成功
    'q_w10', // no  — 智商税
    'q_w05', // img — 复胖深度
    'q_w04', // no  — 减脂 vs 减重
    'q_w03', // img — 代餐反胖
    'q_w08', // no  — BMI/体脂
    'q_w01', // img — 168 断食
    'q_w09', // no  — 晚饿
    'q_w13', // img — 易瘦体质
    'q_w12', // no  — HIIT
    'q_w14', // img — 力量训练
    'q_w06', // no  — 儿童
  ];
  return order.slice(0, count).map(qid => QUESTIONS[qid]).filter(Boolean);
}

Object.assign(window, {
  PERSONAS, QUESTIONS, ANSWERS, KEYWORDS_BY_ID, TOPIC_AVG_VOTES,
  getPersona, getQuestion, getAnswers, getAnswersByAuthor, getFeedQuestions,
  getKeywords, getTopicAvg,
  avatarUrl, imageUrl,
});
