#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生成《2026-10月 生命科学朋友圈集赞送礼活动方案》v2
   结构：1 套活动 = 2 个子活动（W2-W3 主推 D303+E102；W4-W5 主推 C103）
   规则：点赞序号为 8 的倍数或含数字 8 的那位点赞者得礼
"""
import base64
import os

WS = os.path.expanduser('~/Desktop/Hermes输出-工作类')
OUTDIR = os.path.join(WS, '营销活动', '2026-10月朋友圈集赞送礼')
os.makedirs(OUTDIR, exist_ok=True)
GIFT = '/tmp/gift_imgs'


def b64(path, mime='image/jpeg'):
    if not os.path.exists(path):
        return ''
    return 'data:%s;base64,%s' % (mime, base64.b64encode(open(path, 'rb').read()).decode())


GIFTS = [
    ('07_科研实验记录本.jpg', '科研实验记录本', '¥8.0', '实验室刚需 · 印宝锐 logo，人手一本'),
    ('11_定制笔记本磁吸扣.jpg', '定制笔记本 + 磁吸扣', '¥11.5', 'B5 烫金 logo，学术会议 / 拜访伴手礼'),
    ('09_冰箱贴.jpg', '实验室冰箱贴', '¥12.0', '贴在冰箱 / 通风橱，长期曝光'),
    ('10_生肖公仔.jpg', '生肖公仔', '¥12.0', '国潮风，节日拜访伴手礼'),
    ('13_三合一数据线手机支架.jpg', '三合一数据线 + 手机支架', '¥16.0', '天天用，实用高频'),
    ('12_天堂遮阳伞.jpg', '天堂遮阳伞', '¥23.0', '品牌伞，中档拜访伴手礼'),
]
LOGO = b64(os.path.expanduser('~/work/公司资料/logo_transparent.png'), 'image/png')

gift_cards = ''
for fn, name, price, scene in GIFTS:
    img = b64(os.path.join(GIFT, fn))
    if not img:
        continue
    gift_cards += ('<div class="gc"><div class="gc-img"><img src="%s" alt="%s"></div>'
                   '<div class="gc-b"><div class="gc-n">%s</div><div class="gc-p">%s</div>'
                   '<div class="gc-s">%s</div></div></div>' % (img, name, name, price, scene))

WIN = [n for n in range(1, 121) if n % 8 == 0 or '8' in str(n)]
win_chips = ''.join('<span class="wn%s">%d</span>' % (' hi' if i < 5 else '', n) for i, n in enumerate(WIN[:16]))
win_all = '、'.join(str(n) for n in WIN[:24])

HTML = r'''<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>2026-10月 朋友圈集赞送礼 · 活动方案 v2</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
:root{--pri:#1852B6;--pri2:#1a73e8;--deep:#0f3460;--gold:#f4a236;--red:#d93025;
--green:#0d904f;--orange:#e8710a;--bg:#f4f6f9;--card:#fff;--text:#202124;--sub:#5f6368;--line:#e3e8ef}
body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
background:var(--bg);color:var(--text);line-height:1.7;padding-bottom:60px}
.topbar{position:sticky;top:0;z-index:100;height:56px;background:#fff;border-bottom:1px solid #e0e0e0;
display:flex;align-items:center;padding:0 20px;gap:12px;box-shadow:0 1px 4px rgba(0,0,0,.05)}
.topbar img{height:30px}
.topbar .t{font-size:14.5px;font-weight:800;color:var(--pri)}
.topbar .s{font-size:11.5px;color:var(--sub);margin-left:auto}
.page{max-width:1080px;margin:0 auto;padding:22px 18px}
h2.sec{display:flex;align-items:center;gap:10px;font-size:19px;font-weight:800;color:var(--deep);margin:32px 0 14px}
h2.sec::before{content:"";width:5px;height:20px;background:var(--pri);border-radius:3px}
h2.sec small{font-size:12px;font-weight:400;color:var(--sub);margin-left:6px}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px;box-shadow:0 1px 3px rgba(0,0,0,.04)}
.hero{background:linear-gradient(135deg,#0f3460 0%,#1852B6 55%,#1a73e8 100%);color:#fff;
border-radius:16px;padding:30px 28px;position:relative;overflow:hidden}
.hero::after{content:"8";position:absolute;right:-6px;bottom:-74px;font-size:270px;font-weight:900;opacity:.09;line-height:1}
.hero h1{font-size:29px;font-weight:900;letter-spacing:.5px}
.hero .sub{font-size:14.5px;opacity:.94;margin-top:8px}
.hero .kicker{display:inline-block;font-size:12px;background:rgba(255,255,255,.18);
border:1px solid rgba(255,255,255,.32);padding:3px 12px;border-radius:14px;margin-bottom:12px}
.hero .row{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}
.hero .kpi{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.24);
border-radius:10px;padding:9px 14px;min-width:132px}
.hero .kpi b{display:block;font-size:16px;font-weight:900}
.hero .kpi span{font-size:11px;opacity:.85}
.tl{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}
.ph{background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:0 1px 4px rgba(0,0,0,.05)}
.ph .hd{padding:13px 17px;color:#fff;display:flex;align-items:center;gap:10px}
.ph.a .hd{background:linear-gradient(120deg,#0b5c3f,#19a86b)}
.ph.b .hd{background:linear-gradient(120deg,#7b3f00,#e08b00)}
.ph .hd .wk{font-size:11px;background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.3);
padding:2px 9px;border-radius:10px;white-space:nowrap}
.ph .hd b{font-size:15px}
.ph .bd{padding:15px 17px}
.ph .dates{font-size:12.5px;color:var(--sub);margin-bottom:10px}
.ph .dates b{color:var(--deep);font-size:13.5px}
.pbar{display:flex;align-items:center;gap:9px;margin:7px 0;font-size:12.5px}
.pbar .sku2{font-family:ui-monospace,Menlo,monospace;font-size:11.5px;font-weight:800;color:#fff;
background:var(--pri);padding:2px 8px;border-radius:5px;white-space:nowrap}
.pbar .nm{color:#3c4043}
.ph .tagline{margin-top:11px;background:#f8fafc;border-left:3px solid var(--pri2);
padding:8px 11px;border-radius:0 6px 6px 0;font-size:12.5px;color:#0d47a1;font-weight:700;line-height:1.7}
.rule-line{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:#fff;
border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin-bottom:10px}
.rule-line .n{flex:0 0 34px;height:34px;line-height:34px;text-align:center;border-radius:50%;
background:var(--pri);color:#fff;font-weight:900;font-size:15px}
.rule-line .tx{font-size:13.5px;flex:1;min-width:200px}
.rule-line .tx b{color:var(--deep)}
.winbox{background:#fff;border:2px solid var(--gold);border-radius:14px;padding:16px 18px;margin:10px 0}
.winbox .wt{font-size:13.5px;font-weight:800;color:#8a5a00;margin-bottom:10px}
.wn{display:inline-block;font-family:ui-monospace,Menlo,monospace;font-size:13.5px;font-weight:800;
background:linear-gradient(135deg,#fff3d6,#ffe0a8);color:#8a5a00;border:1px solid #f0c96b;
border-radius:8px;padding:3px 10px;margin:3px 4px 3px 0}
.wn.hi{background:linear-gradient(135deg,#1852B6,#1a73e8);color:#fff;border-color:var(--pri)}
.steps{counter-reset:s;margin-top:6px}
.step{display:flex;gap:12px;padding:11px 0;border-bottom:1px solid #f1f3f4}
.step:last-child{border-bottom:none}
.step .sn{counter-increment:s;flex:0 0 26px;height:26px;line-height:26px;text-align:center;
border-radius:7px;background:#eef4ff;color:var(--pri);font-weight:900;font-size:13px}
.step .sn::before{content:counter(s)}
.step .sb{font-size:13px;flex:1}
.step .sb b{color:var(--deep)}
.prods{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:14px}
.prod{background:#fff;border:1px solid var(--line);border-radius:13px;padding:16px;
border-top:4px solid var(--pri);box-shadow:0 1px 3px rgba(0,0,0,.04)}
.prod.g{border-top-color:var(--green)}
.prod.o{border-top-color:var(--orange)}
.prod .sku{font-family:ui-monospace,Menlo,monospace;font-size:12px;font-weight:800;color:#fff;
background:var(--pri);display:inline-block;padding:2px 9px;border-radius:5px}
.prod h3{font-size:14.5px;font-weight:800;color:var(--deep);margin:9px 0 4px}
.prod .en{font-size:11px;color:var(--sub);margin-bottom:9px;line-height:1.5}
.prod ul{list-style:none}
.prod li{font-size:12.5px;color:#3c4043;padding:3px 0 3px 18px;position:relative}
.prod li::before{content:"▸";position:absolute;left:2px;color:var(--pri2);font-weight:900}
.prod .hl{margin-top:10px;background:#eef4ff;border-left:3px solid var(--pri);
padding:7px 10px;border-radius:0 6px 6px 0;font-size:12.5px;color:#0d47a1;font-weight:700}
.coupons{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.coupon{border-radius:14px;padding:16px 18px;color:#fff;position:relative;overflow:hidden;
display:flex;align-items:center;gap:14px;box-shadow:0 4px 14px rgba(0,0,0,.12)}
.coupon::before,.coupon::after{content:"";position:absolute;width:18px;height:18px;background:var(--bg);border-radius:50%;left:-9px}
.coupon::before{top:calc(50% - 24px)}
.coupon::after{bottom:calc(50% - 24px)}
.c-luckin{background:linear-gradient(135deg,#002d72,#0d47a1 60%,#1565c0)}
.c-tea{background:linear-gradient(135deg,#7b3f00,#b06000 55%,#e08b00)}
.c-star{background:linear-gradient(135deg,#0b5c3f,#0d904f 60%,#19a86b)}
.coupon .cico{flex:0 0 46px;height:46px;border-radius:12px;background:rgba(255,255,255,.18);
display:flex;align-items:center;justify-content:center;font-size:23px;font-weight:900}
.coupon .cbd{flex:1}
.coupon .cn{font-size:14.5px;font-weight:800}
.coupon .cd{font-size:11.5px;opacity:.9;margin-top:2px}
.coupon .cut{border-left:1px dashed rgba(255,255,255,.45);padding-left:14px;text-align:center}
.coupon .cut .cv{font-size:20px;font-weight:900;white-space:nowrap}
.coupon .cut small{display:block;font-size:10px;opacity:.8}
.gifts{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:13px}
.gc{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,.04)}
.gc-img{height:150px;background:#fafbfc;display:flex;align-items:center;justify-content:center;padding:9px}
.gc-img img{max-height:132px;max-width:100%;object-fit:contain}
.gc-b{padding:11px 13px 13px}
.gc-n{font-size:13px;font-weight:800;color:var(--deep)}
.gc-p{font-size:14px;font-weight:900;color:var(--pri);margin:2px 0 4px}
.gc-s{font-size:11.5px;color:var(--sub);line-height:1.5}
.copy{background:#fff;border:1px solid var(--line);border-left:4px solid var(--pri2);
border-radius:10px;padding:16px 18px;margin-bottom:14px}
.copy .ch{display:flex;align-items:center;gap:9px;margin-bottom:10px;flex-wrap:wrap}
.copy .ch b{font-size:13.5px;color:var(--deep)}
.copy .ch .tag{font-size:11px;background:#e8f0fe;color:var(--pri);padding:2px 9px;border-radius:10px;font-weight:700}
.copy .ch .use{margin-left:auto;font-size:11.5px;color:var(--sub)}
.copy pre{font-family:-apple-system,"PingFang SC",sans-serif;font-size:13px;line-height:1.85;
white-space:pre-wrap;word-break:break-word;background:#f8fafc;border-radius:8px;padding:13px 15px;color:#202124}
table{width:100%;border-collapse:collapse;background:#fff;border-radius:10px;overflow:hidden;
box-shadow:0 1px 3px rgba(0,0,0,.04);font-size:13px}
th{background:#eef4ff;color:var(--deep);font-weight:800;padding:10px 12px;text-align:left;font-size:12.5px;white-space:nowrap}
td{padding:10px 12px;border-top:1px solid #f1f3f4;vertical-align:top}
td.mono{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:var(--pri);font-weight:700}
.preview{display:flex;gap:22px;flex-wrap:wrap;align-items:flex-start}
.mock-a4{width:250px;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}
.mock-a4 .mh{height:74px;background:linear-gradient(135deg,#0f3460,#1a73e8);color:#fff;
display:flex;flex-direction:column;justify-content:center;align-items:center;font-size:11px;font-weight:800}
.mock-a4 .mb{height:300px;padding:9px;display:flex;flex-direction:column;gap:6px;background:#fbfcfe}
.mstrip{height:15px;background:#e8eef7;border-radius:4px}
.mblock{flex:1;background:#f1f5fb;border-radius:6px;border:1px dashed #cfdcee;display:flex;
align-items:center;justify-content:center;font-size:10.5px;color:#8fa3bd;text-align:center;padding:4px}
.mock-grid{display:grid;grid-template-columns:repeat(2,118px);gap:8px}
.mock-grid .cell{width:118px;height:118px;border-radius:9px;background:#f1f5fb;border:1px dashed #cfdcee;
display:flex;align-items:center;justify-content:center;text-align:center;font-size:10.5px;color:#8fa3bd;padding:6px}
.owner{display:grid;grid-template-columns:repeat(auto-fit,minmax(255px,1fr));gap:12px}
.own{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px}
.own .wh{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.own .av{width:30px;height:30px;border-radius:50%;background:var(--pri);color:#fff;
display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:800}
.own .nm{font-size:13.5px;font-weight:800;color:var(--deep)}
.own .dl{font-size:11px;color:var(--red);font-weight:700;margin-left:auto}
.own ul{list-style:none}
.own li{font-size:12.5px;color:#3c4043;padding:2.5px 0 2.5px 16px;position:relative}
.own li::before{content:"•";position:absolute;left:3px;color:var(--pri2)}
.notice{border-radius:11px;padding:14px 16px;font-size:12.5px;line-height:1.8;margin-top:12px}
.notice.warn{background:#fff8e1;border-left:4px solid var(--gold);color:#5c4813}
.notice.info{background:#e8f0fe;border-left:4px solid var(--pri2);color:#0d3a72}
.notice.stop{background:#fce8e6;border-left:4px solid var(--red);color:#7a1c17}
.notice b{font-weight:800}
.foot{text-align:center;font-size:11.5px;color:#9aa0a6;margin-top:34px;padding-top:16px;border-top:1px solid var(--line)}
</style>
</head>
<body>
<div class="topbar">
  <img src="__LOGO__" alt="BIORI BIOTECH">
  <span class="t">2026-10月 生命科学朋友圈集赞送礼 · 活动方案</span>
  <span class="s">宝锐生物 ｜ 内部方案 v2</span>
</div>

<div class="page">

  <div class="hero">
    <span class="kicker">宝锐生命科学 · 10月实验加速季</span>
    <h1>把省下的时间，换杯咖啡</h1>
    <div class="sub">1 套活动 · 2 个子活动 ｜ 客户点赞「序号逢 8」即中奖</div>
    <div class="row">
      <div class="kpi"><b>10.5–10.18</b><span>子活动① D303+E102</span></div>
      <div class="kpi"><b>10.19–10.31</b><span>子活动② C103</span></div>
      <div class="kpi"><b>第 8/16/18/24/28…</b><span>位点赞者得礼</span></div>
      <div class="kpi"><b>11.10 前</b><span>礼品统一寄出</span></div>
    </div>
  </div>

  <div class="notice info" style="margin-top:18px">
    <b>活动逻辑：</b>10 月拆成 <b>2 个子活动</b>，按"用户旅程"推进 ——
    先推 <b>BR1D303 + BR1E102</b>（RNA→cDNA→qPCR 全流程，一套跑通），
    再推 <b>BR1C103</b>（室温无缝克隆，构建实验刚需）。
    奖励线索与产品卖点同频：产品卖点是「<b>省时间</b>」，奖励是「<b>一杯咖啡的时间</b>」。
  </div>

  <h2 class="sec">一、两个子活动 <small>按周拆期，各主推一套</small></h2>
  <div class="tl">
    <div class="ph a">
      <div class="hd"><span class="wk">W2–W3</span><b>子活动 ①｜从 RNA 到结果，两管搞定</b></div>
      <div class="bd">
        <div class="dates">📅 <b>10月5日 – 10月18日</b>（14 天）</div>
        <div class="pbar"><span class="sku2">BR1D303</span><span class="nm">4×Neoscript All-in-One cDNA 合成预混</span></div>
        <div class="pbar"><span class="sku2">BR1E102</span><span class="nm">2×FastAmpli SYBR qPCR 预混（通用 ROX）</span></div>
        <div class="tagline">🔄 一套完整流程：gDNA 清除 + 逆转录（最快 5 min）→ qPCR（30 min 40 循环）<br>对客户说：<b>从 RNA 到结果，两管搞定</b></div>
      </div>
    </div>
    <div class="ph b">
      <div class="hd"><span class="wk">W4–W5</span><b>子活动 ②｜不用冰盒的克隆</b></div>
      <div class="bd">
        <div class="dates">📅 <b>10月19日 – 10月31日</b>（13 天）</div>
        <div class="pbar"><span class="sku2">BR1C103</span><span class="nm">VellixClon™ Ambient Seamless Cloning Mix</span></div>
        <div class="tagline">🧊 室温无缝克隆：不用冰盒、不用冰上配制，桌面配完直接上机<br>对客户说：<b>载体构建，不用再守冰盒</b></div>
      </div>
    </div>
  </div>

  <h2 class="sec">二、中奖规则 <small>点赞序号逢「8」</small></h2>
  <div class="rule-line"><span class="n">①</span><span class="tx"><b>谁发：</b>由 <b>宝锐销售</b> 发朋友圈（非客户发），客户点赞参与</span></div>
  <div class="rule-line"><span class="n">②</span><span class="tx"><b>谁中：</b>点赞<b>排在第 N 位</b>的那位客户中奖，<b>N 为 8 的倍数或含数字 8</b></span></div>
  <div class="rule-line"><span class="n">③</span><span class="tx"><b>给什么：</b>瑞幸咖啡券（或同档奶茶券）1 张，<b>或</b> 等值宝锐伴手礼 1 份（二选一）</span></div>
  <div class="rule-line"><span class="n">④</span><span class="tx"><b>怎么领：</b>销售公示中奖截图 → 客户私信报「集赞中奖」→ 登记 → 11.10 前统一寄出</span></div>

  <div class="winbox">
    <div class="wt">🎯 中奖序号表（8 的倍数 ∪ 含数字 8）—— 前 16 位</div>
    __WINCHIPS__
    <div style="font-size:12px;color:#8a5a00;margin-top:11px;line-height:1.7">
      完整序列（1–120）：__WINALL__ …<br>
      <b>中奖率约 20%</b>（每 5 位点赞者中约 1 位中奖）—— 门槛低、参与感强，能让客户主动拉朋友来点赞。
    </div>
  </div>

  <div class="notice warn">
    <b>⚠️ 执行关键：微信点赞列表「看不到序号」，必须靠截图追溯。</b>规则本身一句话，但<b>能不能开奖全看销售有没有留痕</b>。三种取证方式见下节。
  </div>

  <h2 class="sec">三、开奖取证流程 <small>这一步不做好，规则再漂亮也开不了奖</small></h2>
  <div class="card">
    <div class="steps">
      <div class="step"><span class="sn"></span><span class="sb"><b>发布即留底：</b>发圈后立刻截 1 张「0 赞」的原始图（记录发布时间 + 初始状态）</span></div>
      <div class="step"><span class="sn"></span><span class="sb"><b>主通道 · 点赞通知截图（最可靠）：</b>微信「消息」里的「XXX 赞了你的朋友圈」是<b>逐条、带时间</b>的通知 ——
        按时间顺序数第 8、16、18、24、28… 条，<b>当场截图该条通知</b>。逐条无歧义，是首选凭证</span></div>
      <div class="step"><span class="sn"></span><span class="sb"><b>辅助通道 · 点赞列表存档：</b>发布后 <b>每小时截 1 张</b>点赞列表（存档成时间序列），
        万一通知被清理，可用"相邻两张图的差集 = 新增点赞者"回溯</span></div>
      <div class="step"><span class="sn"></span><span class="sb"><b>差集法（精确锁定）：</b>点赞数 <b>N-1 时截一张、到 N 时再截一张</b>，
        两张图的新增头像就是第 N 位点赞者 —— 完全不受列表排序方向影响</span></div>
      <div class="step"><span class="sn"></span><span class="sb"><b>公示开奖：</b>把中奖通知截图（昵称中间字打码）发在<b>评论区</b>，
        @中奖客户告知领取方式，同时形成"真有人中奖"的社会证明</span></div>
      <div class="step"><span class="sn"></span><span class="sb"><b>登记归档：</b>填「集赞中奖登记表」（含截图文件名），做到<b>一次活动、一份礼品、一张签收</b></span></div>
    </div>
  </div>

  <div class="notice stop">
    <b>两个只能由销售侧控的坑：</b>① <b>通知别清</b> —— 活动期内不要清理微信消息，否则开奖无凭证；
    ② <b>发现爆赞要立刻截图</b> —— 一条朋友圈可能几小时冲到几十赞，盯着"到 8 / 到 16"的瞬间远比事后补图可靠。
  </div>

  <h2 class="sec">四、产品资料 <small>发给客户 / 给设计都用这套口径</small></h2>
  <div class="prods">
    <div class="prod o">
      <span class="sku">BR1D303</span>
      <h3>4×Neoscript All-in-One cDNA 合成预混</h3>
      <div class="en">4×Neoscript All-in-One cDNA Synthesis Premix for qPCR</div>
      <ul>
        <li><b>一管到底</b>：gDNA 清除 + 逆转录同管完成，降低加样污染与 RNA 降解风险</li>
        <li><b>最快 5 min</b>：42℃ 5min → 85℃ 5sec</li>
        <li>含热敏型 DNase + Random 6 mers / Oligo(dT)18 双引物，<b>无需跨内含子设计引物</b></li>
        <li>产物兼容染料法与探针法 qPCR，官方推荐搭配 <b>BR1E102</b></li>
        <li>长片段可延长至 10 min；-20℃ 长期保存</li>
      </ul>
      <div class="hl">⏱️ 一管 5 分钟，省掉一个环节</div>
    </div>
    <div class="prod g">
      <span class="sku">BR1E102</span>
      <h3>2×FastAmpli SYBR qPCR 预混（通用 ROX）</h3>
      <div class="en">2×FastAmpli SYBR qPCR Premix (Universal ROX)</div>
      <ul>
        <li><b>30 min 跑完</b> 40 个循环（快速程序 95℃1s / 56–64℃10s）；竞品标准程序 56–58 min</li>
        <li><b>通用型 ROX</b>：大部分仪器免调浓度，一套配方通吃</li>
        <li>抗体修饰 Taq + 优化 Buffer → 特异性、扩增效率、灵敏度更高</li>
        <li>实测：10 倍梯度稀释 <b>R²=0.999、Eff%=97.55%</b>；<b>1 copy/μL 仍可检出（检出率 100%）</b></li>
        <li>高抗干扰（耐样本抑制物）、宽 GC 适应（31% / 68% / 75% 均有良好扩增）</li>
      </ul>
      <div class="hl">🚀 半小时出结果，通用 ROX 免调</div>
    </div>
    <div class="prod">
      <span class="sku">BR1C103</span>
      <h3>VellixClon™ 室温无缝克隆预混</h3>
      <div class="en">VellixClon™ Ambient Seamless Cloning Mix</div>
      <ul>
        <li><b>室温操作</b>：不用冰盒、不用冰上配制，桌面配完直接上机</li>
        <li>无缝克隆（同源重组），单片段 / 多片段通用</li>
        <li>面向载体构建高频课题组 —— 替代"守着冰盒配体系"的旧流程</li>
        <li>竞品对标：诺唯赞 / 爱博泰克 / 塔克拉 / Genstar 等同源重组产品</li>
      </ul>
      <div class="hl">🧊 不用冰盒的克隆</div>
    </div>
  </div>

  <h2 class="sec">五、奖励 <small>咖啡券 / 奶茶券 + 等值伴手礼</small></h2>
  <div class="coupons">
    <div class="coupon c-luckin">
      <div class="cico">☕</div>
      <div class="cbd"><div class="cn">瑞幸咖啡券</div><div class="cd">全场通用 · 有效期 12 个月 · 可转赠</div></div>
      <div class="cut"><div class="cv">¥16</div><small>单张面值</small></div>
    </div>
    <div class="coupon c-tea">
      <div class="cico">🧋</div>
      <div class="cbd"><div class="cn">同档奶茶券</div><div class="cd">霸王茶姬 / 古茗 / 茶百道 / 沪上阿姨 任选</div></div>
      <div class="cut"><div class="cv">15–20</div><small>单张面值 ¥</small></div>
    </div>
    <div class="coupon c-star">
      <div class="cico">🎁</div>
      <div class="cbd"><div class="cn">或换等值伴手礼</div><div class="cd">宝锐礼品平台实物 · 与咖啡券等值同享</div></div>
      <div class="cut"><div class="cv">8–23</div><small>单份价值 ¥</small></div>
    </div>
  </div>
  <div style="margin-top:16px">
    <div style="font-size:13px;color:var(--sub);margin-bottom:10px">
      等值伴手礼（取自宝锐礼品订货平台 <b>gift/index.html</b>，均为在架在库款）：
    </div>
    <div class="gifts">__GIFTS__</div>
  </div>

  <h2 class="sec">六、朋友圈文案 <small>两个子活动各一版</small></h2>

  <div class="copy">
    <div class="ch"><b>① 子活动一（W2–W3）· D303 + E102</b><span class="tag">10/5 发布</span><span class="use">配 9 图或 A4 长图</span></div>
<pre>🧪 实验加速季 · 第一季｜从 RNA 到结果，两管搞定

做 qPCR 最烦的不是机器，是前面那一堆等待。

这一季推两件"省时间"的活：
⏱ BR1D303  一管式 cDNA —— gDNA 清除 + 逆转录同管完成，最快 5 min 出 cDNA
🚀 BR1E102  快速 qPCR —— 30 min 跑完 40 循环，通用 ROX 免调浓度
（这两管是官方推荐搭配，一套流程直接跑通：RNA → cDNA → 结果）

🎁 规矩很简单：点赞序号"逢 8"就中
排在第 8、16、18、24、28、32… 位点赞的朋友，送 1 张瑞幸咖啡券
（不喝咖啡也行，换同档奶茶券，或等值宝锐伴手礼 🎀）

参与方式：
1) 点赞本条
2) 我会在评论区公示中奖截图
3) 中了私信我，报「集赞中奖」领奖

📅 本季 10.5–10.18 ｜ 📦 礼品 11.10 前统一寄出
两款都能申请试用装，想先测的直接说 👇

#宝锐生物 #实验加速季 #科研日常</pre>
  </div>

  <div class="copy">
    <div class="ch"><b>② 子活动二（W4–W5）· C103</b><span class="tag">10/19 发布</span><span class="use">配 9 图或 A4 长图</span></div>
<pre>🧪 实验加速季 · 第二季｜载体构建，不用再守冰盒

配连接体系的时候，你在冰上站了多久？

这一季推一件"省时间"的活：
🧊 BR1C103  VellixClon™ 室温无缝克隆 —— 不用冰盒、不用冰上配制，桌面配完直接上机
（做单片段、多片段构建都适用）

🎁 规矩不变：点赞序号"逢 8"就中
排在第 8、16、18、24、28、32… 位点赞的朋友，送 1 张瑞幸咖啡券
（也可以换同档奶茶券，或等值宝锐伴手礼 🎀）

参与方式：
1) 点赞本条
2) 我在评论区公示中奖截图
3) 中了私信我，报「集赞中奖」领奖

📅 本季 10.19–10.31 ｜ 📦 礼品 11.10 前统一寄出
BR1C103 可申请试用装，先测再决定 👇

#宝锐生物 #实验加速季 #科研日常</pre>
  </div>

  <div class="copy">
    <div class="ch"><b>③ 短版</b><span class="tag">私聊 / 群发</span><span class="use">3 行读完</span></div>
<pre>🎁 10 月福利：我这条朋友圈点赞序号"逢 8"就中奖（第 8/16/18/24/28… 位点赞的朋友）
奖品：瑞幸咖啡券 / 同档奶茶券，或等值宝锐伴手礼 🎀
顺带一提，这几款都开放试用：5min 逆转录 BR1D303、30min qPCR BR1E102、室温无缝克隆 BR1C103
点赞后我会在评论区公示中奖名单～</pre>
  </div>

  <div class="copy">
    <div class="ch"><b>④ 课题组向</b><span class="tag">PI / 博士师兄师姐</span><span class="use">强调省时间 + 可测</span></div>
<pre>老师/师兄师姐好 ——

我们 10 月做了「实验加速季」，两个阶段各推一套，都指向同一件事：帮课题组把实验时间压下来。

第一阶段（10.5–10.18）：从 RNA 到结果
· BR1D303  一管式 cDNA：gDNA 清除 + 逆转录同管，最快 5 min
· BR1E102  快速 qPCR：30 min 完成 40 循环，通用 ROX

第二阶段（10.19–10.31）：载体构建
· BR1C103  室温无缝克隆：不用冰盒，桌面配完直接上机

我这条朋友圈点赞序号"逢 8"就中奖（第 8/16/18/24/28… 位），送瑞幸咖啡券或等值伴手礼。
更重要的是：三款都可申请试用装，先测再决定，需要的话我这边直接安排寄样。</pre>
  </div>

  <h2 class="sec">七、展示图片方案 <small>给设计：每个子活动 5–10 张</small></h2>
  <div class="notice info" style="margin-bottom:14px">
    <b>两种版式：</b>① <b>A4 长图</b>（竖版 1080×6000+px，单图发完信息）② <b>4 宫格</b>（1:1 方图 ×4，九宫格发）。
    注意：<b>点赞规则必须出现在图里</b>（客户只看图不看字），建议单独做一张"规则卡"。
  </div>
  <table>
    <tr><th style="width:34px">#</th><th style="width:150px">画面</th><th>内容要点</th><th style="width:92px">尺寸</th><th style="width:64px">用于</th></tr>
    <tr><td class="mono">01</td><td><b>主 KV</b></td><td>「实验加速季」主视觉 + 当前阶段产品货号 + 「点赞逢 8 中好礼」角标 + 宝锐 logo</td><td>1080×1440</td><td>两季共用</td></tr>
    <tr><td class="mono">02</td><td><b>D303 卖点卡</b></td><td>「一管 5 分钟」：gDNA 清除 + 逆转录合一流程图，对比传统两步法；标注 42℃5min→85℃5sec</td><td>1080×1080</td><td>第一季</td></tr>
    <tr><td class="mono">03</td><td><b>E102 卖点卡</b></td><td>「半小时出结果」：时间轴对比（宝锐 28–30min vs 竞品 56–58min）+ 通用 ROX 图标</td><td>1080×1080</td><td>第一季</td></tr>
    <tr><td class="mono">04</td><td><b>D303+E102 联用</b></td><td>全流程：RNA → cDNA → qPCR，标注每步耗时与总时长对比</td><td>1080×1080</td><td>第一季</td></tr>
    <tr><td class="mono">05</td><td><b>实测：扩增曲线</b></td><td>E102 10 倍梯度稀释扩增曲线 + 标准曲线（R²=0.999、Eff%=97.55%）—— <b>真实数据重绘，去仪器水印</b></td><td>1080×1080</td><td>第一季</td></tr>
    <tr><td class="mono">06</td><td><b>实测：灵敏度</b></td><td>1 copy/μL 检出率 100%（附曲线）；文案"单个拷贝也能检出"</td><td>1080×1080</td><td>第一季</td></tr>
    <tr><td class="mono">07</td><td><b>实测：宽 GC / 抗干扰</b></td><td>不同 GC（31%/68%/75%）扩增效果 + 抑制物耐受性 vs 竞品 A/B（曲线组图或柱状图）</td><td>1080×1080</td><td>第一季</td></tr>
    <tr><td class="mono">08</td><td><b>C103 卖点卡</b></td><td>「不用冰盒的克隆」：左=传统冰上配制（多步、等），右=室温一步到位；配操作实拍/示意</td><td>1080×1080</td><td>第二季</td></tr>
    <tr><td class="mono">09</td><td><b>C103 实测案例</b></td><td>客户实测连接成功率 / 平板菌落对比（隐去客户名，写"某高校课题组实测"）</td><td>1080×1080</td><td>第二季</td></tr>
    <tr><td class="mono">10</td><td><b>规则卡</b> <span style="color:#d93025">★必做</span></td><td>点赞序号逢 8 规则 + 中奖序号表（8/16/18/24/28…）+ 奖品三选（咖啡券/奶茶券/伴手礼）+ 申请二维码</td><td>1080×1080</td><td>两季共用</td></tr>
    <tr><td class="mono">11</td><td><b>伴手礼合集</b></td><td>6 款等值伴手礼平铺图 + 价格标</td><td>1080×1080</td><td>两季共用</td></tr>
  </table>
  <div class="notice warn" style="margin-top:12px">
    <b>案例图三条硬要求：</b>① 用<b>真实测试数据</b>，不得改数值或夸大；② 去掉仪器截图的<b>水印 / 序列号 / 操作人</b>；
    ③ 客户实测一律<b>隐去客户名称与 logo</b>，统一写"某高校课题组实测"。
  </div>

  <h2 class="sec">八、版式示意</h2>
  <div class="preview">
    <div>
      <div style="font-size:13px;font-weight:800;color:var(--deep);margin-bottom:9px">① A4 长图（竖版）</div>
      <div class="mock-a4">
        <div class="mh"><span>实验加速季</span><span style="font-size:9px;opacity:.85">把省下的时间，换杯咖啡</span></div>
        <div class="mb">
          <div class="mstrip" style="width:58%"></div>
          <div class="mblock">① 主 KV + 本季产品</div>
          <div class="mblock">② 产品卖点（1–2 张）</div>
          <div class="mblock">③ 实测数据案例</div>
          <div class="mblock">④ 点赞规则 + 奖品格</div>
          <div class="mblock">⑤ 二维码 + 参与方式</div>
        </div>
      </div>
      <div style="font-size:11.5px;color:var(--sub);margin-top:7px;max-width:250px">一次读完，适合单图发朋友圈 + 私聊转发</div>
    </div>
    <div>
      <div style="font-size:13px;font-weight:800;color:var(--deep);margin-bottom:9px">② 4 宫格（1:1 ×4）</div>
      <div class="mock-grid">
        <div class="cell">图1<br>主 KV<br>本季主题</div>
        <div class="cell">图2<br>产品卖点<br>+ 实测数据</div>
        <div class="cell">图3<br>中奖规则<br>序号表</div>
        <div class="cell">图4<br>奖品 + 二维码</div>
      </div>
      <div style="font-size:11.5px;color:var(--sub);margin-top:8px;max-width:250px">4 图并排，点击放大；信息密度低，更适合手机阅读</div>
    </div>
  </div>

  <h2 class="sec">九、排期与分工</h2>
  <div class="owner">
    <div class="own">
      <div class="wh"><span class="av">刘</span><span class="nm">刘新元</span><span class="dl">9/29 前</span></div>
      <ul>
        <li>审定两季机制与文案（本方案第六节）</li>
        <li>确认咖啡券/奶茶券采购渠道与单价</li>
        <li>确认合规口径与开奖取证流程</li>
      </ul>
    </div>
    <div class="own">
      <div class="wh"><span class="av">文</span><span class="nm">文杰</span><span class="dl">10/8 前</span></div>
      <ul>
        <li>两季各出 5–10 张展示图（清单见第七节）</li>
        <li>规则卡必须做（客户只看图不看字）</li>
        <li>选定 A4 长图 / 4 宫格 版式并出定稿</li>
      </ul>
    </div>
    <div class="own">
      <div class="wh"><span class="av">销</span><span class="nm">生命科学销售（浙江/广东）</span><span class="dl">10/5 起</span></div>
      <ul>
        <li>统一发朋友圈（第一季 10/5、第二季 10/19）</li>
        <li><b>发布后盯点赞 + 及时截图留痕</b>（见第三节）</li>
        <li>评论区公示中奖、登记领奖、推进试用装寄样</li>
      </ul>
    </div>
    <div class="own">
      <div class="wh"><span class="av">技</span><span class="nm">技术支持</span><span class="dl">10/8 前</span></div>
      <ul>
        <li>提供 E102 实测曲线 / 灵敏度 / 宽GC 原始图</li>
        <li>提供 C103 客户实测案例素材</li>
        <li>核对案例图数据与产品单页一致性</li>
      </ul>
    </div>
  </div>

  <h2 class="sec">十、预算测算 <small>示例口径，按实际中奖人数结算</small></h2>
  <table>
    <tr><th>项目</th><th>单价</th><th>预估份数</th><th>小计</th><th>备注</th></tr>
    <tr><td>瑞幸咖啡券</td><td>¥16/张</td><td>50 张</td><td>¥800</td><td>按两季合计约 40–50 位中奖者估</td></tr>
    <tr><td>同档奶茶券</td><td>¥18/张</td><td>20 张</td><td>¥360</td><td>按 1/3 客户选奶茶估</td></tr>
    <tr><td>等值伴手礼</td><td>¥15/份（均）</td><td>30 份</td><td>¥450</td><td>记录本8 / 笔记本11.5 / 数据线16 / 伞23</td></tr>
    <tr><td>试用装（三款）</td><td>按成本</td><td>30 份</td><td>另计</td><td>走市场费用，不计入本活动</td></tr>
    <tr><td colspan="3" style="text-align:right;font-weight:800">合计（不含试用装）</td>
        <td style="font-weight:900;color:var(--pri)">¥1,610</td><td>示例口径</td></tr>
  </table>
  <div class="notice warn" style="margin-top:12px">
    预算为<b>示例测算</b>，非实际预算。实际以「集赞中奖登记表」人数结算；礼品走宝锐礼品订货平台下单，自动进物料台账。
  </div>

  <h2 class="sec">十一、执行清单</h2>
  <table>
    <tr><th style="width:34px">✓</th><th>事项</th><th style="width:92px">主责</th><th style="width:84px">时间</th></tr>
    <tr><td>☐</td><td>确认活动机制 + 文案定稿</td><td>刘新元</td><td>9/29</td></tr>
    <tr><td>☐</td><td>咖啡券/奶茶券采购渠道落定（单价、有效期、可否转赠）</td><td>刘新元</td><td>9/29</td></tr>
    <tr><td>☐</td><td>输出两季展示图（含规则卡、实测案例）</td><td>文杰</td><td>10/8</td></tr>
    <tr><td>☐</td><td>提供实测原始数据与 C103 案例素材给设计</td><td>技术支持</td><td>10/8</td></tr>
    <tr><td>☐</td><td>销售培训开奖取证流程（点赞通知截图 + 列表存档）</td><td>销售支持</td><td>10/9</td></tr>
    <tr><td>☐</td><td>发布第一季朋友圈（D303 + E102）</td><td>生科销售部</td><td>10/5</td></tr>
    <tr><td>☐</td><td>发布第二季朋友圈（C103）</td><td>生科销售部</td><td>10/19</td></tr>
    <tr><td>☐</td><td>建立「集赞中奖登记表」（客户、点赞序号、截图文件名、奖品、签收）</td><td>销售支持</td><td>10/9</td></tr>
    <tr><td>☐</td><td>礼品统一寄出 + 台账登记</td><td>销售支持</td><td>11/10</td></tr>
  </table>

  <div class="notice stop" style="margin-top:18px">
    <b>⚠️ 待你确认的一个货号：</b>本轮需求里写的「<b>1D103</b>」，在 ERP 全库中<b>不存在</b>
    （BR1D* 只有 D201 / D301 / D303）。结合第一轮「1C103和1D303+1E102」的表述，本方案按
    <b>BR1C103（VellixClon™ 室温无缝克隆）</b> 处理。若你指的是别的东西，请直接说，我再改。
  </div>

  <div class="foot">
    宝锐生物 BIORI BIOTECH ｜ 生命科学销售部 · 2026年10月「实验加速季」朋友圈集赞送礼活动方案<br>
    本方案为内部物料，含价格与成本口径，请勿外发 ｜ 奖励实物图取自宝锐礼品订货平台在架款
  </div>
</div>
</body>
</html>'''

HTML = (HTML.replace('__LOGO__', LOGO).replace('__GIFTS__', gift_cards)
            .replace('__WINCHIPS__', win_chips).replace('__WINALL__', win_all))
out = os.path.join(OUTDIR, '10月朋友圈集赞送礼方案.html')
open(out, 'w', encoding='utf-8').write(HTML)
print('OK →', out, '(%d KB)' % (os.path.getsize(out) // 1024))
print('  中奖序号前16:', WIN[:16])
print('  礼品图:', gift_cards.count('<img'), '张')
