# -*- coding: utf-8 -*-
"""Build 2-page A4 visit brief for Tianlong ATP project (internal)."""
import os, sys
from datetime import datetime

BASE = os.path.expanduser('~/Desktop/Hermes输出-工作类')
sys.path.insert(0, os.path.join(BASE, '脚本'))
import brand_kit as BK

OUT_HTML = os.path.join(BASE, '客户管理/拜访卡/天隆科技_ATP快检项目_访前作战卡_20261106_V01.html')

PAGE_CSS = r'''
@page{size:A4;margin:0}
*{box-sizing:border-box}
html,body{margin:0;padding:0;background:#e9eef5}
body{font-family:"Times New Roman","Songti SC","STSong","SimSun","宋体",serif;color:#10233f;font-size:8.2pt;line-height:1.38}
.sheet{width:210mm;height:297mm;background:#fff;margin:0 auto 6mm;position:relative;overflow:hidden;display:flex;flex-direction:column;break-after:page}
.sheet:last-child{break-after:auto;margin-bottom:0}
.sheet .bior-header{flex:none}
.sheet .bior-footer{flex:none}
.content{flex:1;min-height:0;overflow:hidden;padding:2.8mm 11mm 1mm}
.topline{display:flex;justify-content:space-between;align-items:flex-start;gap:8mm;border-bottom:1.2pt solid #0f2b52;padding-bottom:2.2mm;margin-bottom:2.2mm}
.topline .eyebrow{font-size:6.8pt;letter-spacing:.16em;color:#1a56db;text-transform:uppercase}
.topline h1{font-size:16.5pt;line-height:1.2;margin:1mm 0 1mm;color:#0b1f3a}
.topline .sub{font-size:7.8pt;color:#5d6b80}
.topline .badge{flex:none;border:1pt solid #b91c1c;color:#b91c1c;padding:1.2mm 2.2mm;font-size:6.8pt;border-radius:1.2mm;white-space:nowrap}
.meta{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:2mm;margin:0 0 2.6mm}
.meta div{border:0.6pt solid #dbe4f0;background:#f8fbff;border-radius:1.2mm;padding:1.6mm 2mm}
.meta .k{font-size:6.4pt;color:#64748b}
.meta .v{font-size:7.6pt;font-weight:700;color:#0b1f3a;margin-top:.4mm;line-height:1.3}
.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:2mm;margin:0 0 2mm}
.kpi{border:0.6pt solid #dbe4f0;border-radius:1.4mm;padding:2mm 2.2mm;background:#fff;min-width:0}
.kpi .n{font-size:14pt;line-height:1.1;font-weight:700;color:#0b1f3a}
.kpi .n small{font-size:7pt;font-weight:400;color:#5d6b80}
.kpi .l{font-size:6.5pt;color:#5d6b80;margin-top:.6mm;line-height:1.3}
.kpi.red .n{color:#b91c1c}.kpi.amber .n{color:#b45309}.kpi.green .n{color:#047857}
.callout{border-left:3.2pt solid #1a56db;background:#eef4ff;padding:2.2mm 3mm;border-radius:0 1.4mm 1.4mm 0;margin:0 0 2mm}
.callout.warn{border-left-color:#b91c1c;background:#fff1f1}
.callout.green{border-left-color:#047857;background:#effaf5}
.callout .t{font-size:7.4pt;font-weight:700;color:#0b1f3a;margin-bottom:.8mm}
.callout p{margin:0;font-size:7.4pt;color:#1f3350;line-height:1.45}
.cols{display:grid;grid-template-columns:1fr 1fr;gap:3.2mm}
.cols.wide-left{grid-template-columns:1.06fr .94fr}
h2{font-size:10.5pt;line-height:1.2;color:#0b1f3a;margin:0 0 1.4mm;border-left:3pt solid #1a56db;padding-left:1.6mm}
h3{font-size:8.7pt;color:#0b1f3a;margin:1.8mm 0 .8mm}
table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:6.8pt;line-height:1.32}
th{background:#0f2b52;color:#fff;font-weight:700;text-align:left;padding:.9mm 1.2mm;border:.5pt solid #2b4b78;vertical-align:middle}
td{padding:.85mm 1.2mm;border:.5pt solid #dbe4f0;vertical-align:top;word-break:break-word}
tr:nth-child(even) td{background:#f8fbff}
td.c{text-align:center}.nowrap{white-space:nowrap}
.tag{display:inline-block;font-size:6.1pt;border-radius:99px;padding:.2mm 1.2mm;margin-left:.8mm;vertical-align:1px}
.t-red{background:#fdebec;color:#a61b1b}.t-amber{background:#fff4df;color:#8a4b00}.t-blue{background:#e8f0ff;color:#174ea6}.t-green{background:#e8f7ef;color:#05603a}.t-gray{background:#f0f3f7;color:#526070}
.kv{font-size:6.8pt;line-height:1.42}
.kv b{color:#0b1f3a}
.bullets{margin:0;padding-left:3.6mm}
.bullets li{margin:.7mm 0}
.timeline{border-left:1.2pt solid #cfe0f4;margin-left:1mm;padding-left:2.6mm}
.tl{position:relative;margin:0 0 1.8mm}
.tl:before{content:"";position:absolute;left:-3.6mm;top:.6mm;width:1.6mm;height:1.6mm;border-radius:50%;background:#1a56db;border:.5pt solid #fff;box-shadow:0 0 0 .5pt #cfe0f4}
.tl .d{font-weight:700;color:#0b1f3a;font-size:6.8pt}
.tl .e{font-size:6.6pt;color:#334155;line-height:1.38}
.check{border:.6pt solid #dbe4f0;border-radius:1.4mm;padding:2mm 2.4mm;background:#fff}
.check .item{display:flex;gap:1.6mm;margin:1.1mm 0;font-size:6.9pt;line-height:1.35}
.check .box{flex:none;width:3mm;height:3mm;border:.8pt solid #1a56db;border-radius:.5mm;margin-top:.4mm}
.small{font-size:6.2pt;color:#64748b;line-height:1.4}
.footnote{font-size:6pt;color:#64748b;border-top:.5pt solid #dbe4f0;padding-top:1.2mm;margin-top:1.4mm;line-height:1.35}
.page2 .topline h1{font-size:15pt}
.goals{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:2mm;margin-bottom:2.4mm}
.goal{border:.6pt solid #dbe4f0;border-radius:1.4mm;padding:2mm 2.2mm;background:#f8fbff}
.goal .n{font-size:6.4pt;color:#1a56db;letter-spacing:.08em}
.goal .t{font-size:8.2pt;font-weight:700;color:#0b1f3a;margin:.5mm 0}
.goal .d{font-size:6.7pt;color:#334155;line-height:1.35}
.qa th{background:#eef4ff;color:#0b1f3a;border:.5pt solid #dbe4f0}
.qa td{font-size:6.6pt}
.qa td:first-child{font-weight:700;color:#0b1f3a}
.risk{border-left:2.6pt solid #b45309;background:#fff8eb;padding:1.8mm 2.2mm;border-radius:0 1.2mm 1.2mm 0}
.risk .t{font-size:7.4pt;font-weight:700;color:#8a4b00;margin-bottom:.6mm}
.risk p{margin:0;font-size:6.7pt;line-height:1.4}
.actions{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1.6mm}
.action{border:.6pt solid #dbe4f0;border-radius:1.2mm;padding:1.6mm;background:#fff}
.action .d{font-size:6.4pt;font-weight:700;color:#1a56db}
.action .t{font-size:6.5pt;line-height:1.35;margin-top:.4mm}
.uncertain{border-top:.5pt solid #dbe4f0;margin-top:1.6mm;padding-top:1.4mm}
.uncertain ol{margin:0;padding-left:3.8mm}
.uncertain li{font-size:6.4pt;line-height:1.38;margin:.4mm 0}
'''

def sheet(content, page_class=''):
    return f'''<section class="sheet {page_class}">
{BK.header_html('dark','营销中心 · 销售管理')}
<div class="content">
{content}
</div>
{BK.footer_html('内部访前材料，请勿外发 · 2026-11-06')}
</section>'''

# Page 1
p1 = '''
<div class="topline">
  <div>
    <div class="eyebrow">BIORI BIOTECH · 客户访前作战卡 · INTERNAL</div>
    <h1>西安天隆科技有限公司 · ATP 快检项目</h1>
    <div class="sub">主谈：李红东（技术负责人，用户提供；公开抬头待核）｜我方：刘新元、王新旺｜会面性质：按 ATP 项目首次正式技术交流准备</div>
  </div>
  <div class="badge">内部 · 禁止外发</div>
</div>

<div class="meta">
  <div><div class="k">本次目标</div><div class="v">锁同体系验证 + 小批量路径</div></div>
  <div><div class="k">客户主体</div><div class="v">西安天隆 / 科华（西安）生物（待确认合同抬头）</div></div>
  <div><div class="k">关键缺口</div><div class="v">合同 LOD 口径；Quickswab 自产/OEM</div></div>
  <div><div class="k">今天不承诺</div><div class="v">1×10⁻¹⁶；价格；独家；无限保供</div></div>
</div>

<div class="kpis">
  <div class="kpi"><div class="n">135.88 <small>万</small></div><div class="l">天隆相关主体 2026 订单（含西安华伟；截至 11-04）</div></div>
  <div class="kpi red"><div class="n">0 <small>元</small></div><div class="l">西安天隆 2026 订单：1 张测试单</div></div>
  <div class="kpi green"><div class="n">51.06 <small>万</small></div><div class="l">苏州天隆 2026：94 单（现有主接口）</div></div>
  <div class="kpi amber"><div class="n">0 <small>条</small></div><div class="l">ATP 商机：CRM 未立项，本次从零建</div></div>
</div>

<div class="callout">
  <div class="t">30 秒判断</div>
  <p><b>主体：</b>ATP 项目在西安天隆/科华（西安）生物一侧，采购/技术可能跨主体；先确认合同抬头，不要把苏州天隆的订单当成西安天隆的 ATP 预算。<br>
  <b>抓手：</b>天隆已有 AOAC 022401 的 0.9 fmol 系统，缺的是 Quickswab 酶的第二来源；宝锐有同酶量约 2.7 倍信号、37℃ 7 天 73–74% 稳定性、液体/冻干两种剂型。<br>
  <b>最急的问题：</b>天隆合同 LOD 是 1×10⁻¹⁶、1×10⁻¹⁵，还是 AOAC 0.9 fmol？Quickswab 是自产还是 OEM？</p>
</div>

<div class="cols wide-left">
  <div>
    <h2>客户结构：谁研发、谁采购、谁下单</h2>
    <table>
      <thead><tr><th style="width:27%">主体</th><th style="width:40%">角色</th><th>本次关系</th></tr></thead>
      <tbody>
        <tr><td><b>西安天隆</b></td><td>ATP 仪器/试剂主体；Biolum/Biolum Plus/Pro；Quickswab</td><td>本次项目主体；合同抬头待确认</td></tr>
        <tr><td><b>科华（西安）生物</b></td><td>李红东公开抬头：副总经理；与天隆同集团</td><td>技术/项目影响人；是否兼天隆 ATP 职务待核</td></tr>
        <tr><td><b>苏州天隆</b></td><td>现有订单/项目主接口；2026 年 94 单 51.06 万</td><td>现有合作主线；不要与西安天隆混算</td></tr>
        <tr><td><b>西安华伟</b></td><td>既有合作主体；2026 年 13 单 84.82 万</td><td>集团口径内；与 ATP 项目关系待确认</td></tr>
        <tr><td><b>易瑞生物</b></td><td>天隆 Biolum 海外独家代理（除中国等少数国家）</td><td>渠道/客户，不是本次采购主体</td></tr>
      </tbody>
    </table>

    <h3>项目盘：ATP 是新增，现有主线仍是分子/冻干</h3>
    <table>
      <thead><tr><th style="width:27%">项目</th><th style="width:27%">当前状态</th><th style="width:32%">本次动作</th><th>优先级</th></tr></thead>
      <tbody>
        <tr><td><b>ATP 快检</b><br><span class="small">荧光素酶 + Quickswab</span></td><td>CRM 未立项；无历史活动；用户口径已通过彭洪富/王新旺接触</td><td>确认合同 LOD/生产主体；约同体系验证</td><td><span class="tag t-red">P0</span></td></tr>
        <tr><td><b>MD2104-003006</b></td><td>出货验证；C 引探物料不足；37℃ 3d 验证</td><td>不在本次主谈，顺带确认放行标准</td><td><span class="tag t-amber">P1</span></td></tr>
        <tr><td><b>M4211-3 / M5244-ZJ4</b></td><td>单管不稳定/客诉；003006 替代</td><td>只记录，不展开；避免冲淡 ATP</td><td><span class="tag t-amber">P1</span></td></tr>
        <tr><td><b>冻干球</b><br><span class="small">838 / 003006</span></td><td>客户验证性能；NA 控制问题</td><td>作为“交付能力”旁证，不主动扩题</td><td><span class="tag t-gray">P2</span></td></tr>
      </tbody>
    </table>
  </div>

  <div>
    <h2>关键人：角色重量，不是职务</h2>
    <table>
      <thead><tr><th style="width:18%">姓名</th><th style="width:39%">角色与依据</th><th>本次作用</th></tr></thead>
      <tbody>
        <tr><td><b>李红东</b></td><td>技术负责人（用户提供）。公开：科华（西安）生物副总经理；曾任天隆试剂研发总监/监事。内部无活动记录。</td><td>技术准入/项目拍板；本次按首次正式交流准备；职务以名片为准</td></tr>
        <tr><td><b>王新旺</b></td><td>项目/技术接口（活动记录）。10-28 参与 MD2104-003006 出货验证；3 月来访看冻干车间。</td><td>安排测试、技术对齐；ATP 项目第一技术接口</td></tr>
        <tr><td><b>彭洪富</b></td><td>商务/质量接口（活动记录；职务待确认）。9-17 提“供应商质量审查趋严”；7-29 技术拟单/发货。</td><td>商务路径、采购/质量；不在技术会上逼价</td></tr>
        <tr><td><b>解信美</b></td><td>技术执行/项目接口（活动记录）。10-28 与王新旺一起处理 003006 物料/验证。</td><td>测试落地、样品与排期</td></tr>
      </tbody>
    </table>

    <h2>最近互动：先接住现有项目，再开 ATP</h2>
    <div class="timeline">
      <div class="tl"><div class="d">2026-10-28｜王新旺 / 解信美</div><div class="e">MD2104-003006 出货验证：C 引探量不足，向客户要物料；宝锐拿 4 个批次做 37℃ 3d 验证，再设 Rn 下降范围。</div></div>
      <div class="tl"><div class="d">2026-10-22｜天隆多人（王新旺/彭洪富/张建/刘小辉等）</div><div class="e">RNA 公卫项目；M5244-ZJ4 单管不稳定，24 年丢单、25 年替换回来、26H1 再客诉；MD2104-003006 可实现稳定替代。</div></div>
      <div class="tl"><div class="d">2026-03-25｜王新旺 / 彭洪富来访</div><div class="e">重点看一楼/九楼冻干车间；FM2181-4 大体积冻干球外观/性能 OK；838 冻干球肺炎克雷伯菌阴性未起线；客户提出 DNA/RNA 共检方向。</div></div>
    </div>
    <div class="callout warn" style="margin-top:1.5mm">
      <div class="t">关系事实</div>
      <p>ATP 项目在内部活动/订单中<b>没有历史记录</b>；本次按“首次正式技术交流”准备，前期接触以彭洪富/王新旺为主。现有关系在苏州天隆/分子项目，ATP 必须重新建技术可信度。</p>
    </div>
  </div>
</div>

<div class="check" style="margin-top:2mm">
  <div style="font-size:7.2pt;font-weight:700;color:#0b1f3a;margin-bottom:.8mm">本次要带走的 3 个确认</div>
  <div class="item"><span class="box"></span><span><b>合同 LOD 口径：</b>1×10⁻¹⁶ / 1×10⁻¹⁵ / AOAC 0.9 fmol；测试体积、空白 n 数、积分时间。</span></div>
  <div class="item"><span class="box"></span><span><b>Quickswab 生产主体：</b>自产还是 OEM；现用酶供应商、年用量、采购价、批间 COA。</span></div>
  <div class="item"><span class="box"></span><span><b>验证路径：</b>是否接受同体系并行验证/小批量；技术、采购、质量谁签字。</span></div>
</div>

<div class="footnote">口径：2026-01-01～11-04 含税订单；西安天隆 1 张测试单 0 元、苏州天隆 94 单 51.06 万、西安华伟 13 单 84.82 万；天隆相关主体为内部归集口径。</div>
'''

# Page 2
p2 = '''
<div class="topline">
  <div>
    <div class="eyebrow">BIORI BIOTECH · 客户访前作战卡 · PAGE 2</div>
    <h1>怎么谈：先拿数据，再谈商务</h1>
    <div class="sub">目标不是“说服”，是拿到同体系验证入口；今天不解决价格，只解决“怎么测、谁来测、测什么”。</div>
  </div>
  <div class="badge">内部 · 禁止外发</div>
</div>

<div class="goals">
  <div class="goal"><div class="n">GOAL 01</div><div class="t">锁同体系验证</div><div class="d">Biolum + Quickswab；ATP 0/0.9/1/5/25/100/500/1,500 fmol；空白 n≥10；3σ/10σ。</div></div>
  <div class="goal"><div class="n">GOAL 02</div><div class="t">锁样品与接口</div><div class="d">20/100 mg 样品、批特异 COA、测试方法；接口人王新旺/解信美；测试排期落书面。</div></div>
  <div class="goal"><div class="n">GOAL 03</div><div class="t">锁商务路径</div><div class="d">双源/小批量；彭洪富/李红东分开谈；不现场报价、不承诺独家/无限保供。</div></div>
</div>

<div class="cols">
  <div>
    <h2>开场 30 秒：三件事，不铺产品</h2>
    <div class="callout">
      <p>“天隆的 Biolum 已经用 AOAC 0.9 fmol 证明了系统能力；宝锐不要求改仪器，也不动现有体系。<br>
      我们想做的，是 Quickswab 酶的第二来源：同体系验证、批间 COA、液体/冻干两种剂型。<br>
      今天只确认三件事：合同 LOD 口径、Quickswab 生产主体、是否接受并行验证。”</p>
    </div>

    <h2>必问 6 问：每问只锁一个项目</h2>
    <table class="qa">
      <thead><tr><th style="width:42%">问题</th><th>为什么问 / 听到后怎么接</th></tr></thead>
      <tbody>
        <tr><td>合同规格到底是 1×10⁻¹⁶、1×10⁻¹⁵，还是 AOAC 0.9 fmol？</td><td>决定宝锐要补多少；把“标称”与“系统 LOD”分开。听到 1×10⁻¹⁶ 时，追问测试体积/空白 n/积分时间。</td></tr>
        <tr><td>Quickswab 是自产还是 OEM？酶是自配还是外购？</td><td>决定我们是直供天隆，还是先找 OEM；也决定谁做批间 COA。</td></tr>
        <tr><td>现用酶供应商是谁、年用量多少、采购价/批间 COA 能否给？</td><td>不确认竞品名也能问“现在向谁询价、成本线多少”；拿到年用量才能谈 3–5 g 参照。</td></tr>
        <tr><td>系统 LOD 用什么仪器/体积/积分时间测？Biolum、Plus 还是 Pro？</td><td>避免拿 96 孔板数据对整机；同体系必须同仪器、同拭子、同体积。</td></tr>
        <tr><td>是否接受双源/小批量并行验证？技术、采购、质量谁签字？</td><td>把“技术兴趣”变成“验证项目”；没有签字人就不算立项。</td></tr>
        <tr><td>易瑞海外双品牌场景能否用 field data？需要什么授权？</td><td>易瑞是天隆海外代理；三方 NDA 下可做匿名案例，不直接给配方/价格。</td></tr>
      </tbody>
    </table>
  </div>

  <div>
    <h2>必带材料：三样，不带报价单</h2>
    <ul class="bullets">
      <li><b>E800 样品：</b>20 mg / 100 mg；液体（含甘油）与冻干粉两种剂型；附 COA 模板、批间数据（待补）。</li>
      <li><b>一页数据：</b>LOD 0.1 pmol/管（96 孔板，3σ）；线性 0.1–200 pmol；同酶量 2.7 倍信号；37℃ 7 天 73–74% vs 克拉玛尔 40%。</li>
      <li><b>一页验证方案：</b>Biolum + Quickswab 的 ATP 标准曲线、空白、LOD/LOQ、回收率、37℃ 7/11 天；现场只讨论方案，不讨论价格。</li>
    </ul>

    <h2>客户可能反问 / 应答边界</h2>
    <table class="qa">
      <thead><tr><th style="width:30%">客户问</th><th>回应</th><th style="width:22%">不承诺</th></tr></thead>
      <tbody>
        <tr><td>“你们 LOD 能到 1×10⁻¹⁶ 吗？”</td><td>“宝锐 0.1 pmol/管是 96 孔板 3σ；天隆 AOAC 系统是 0.9 fmol。同体系还没测，今天不承诺 1×10⁻¹⁶；先做同体系曲线。”</td><td>不写“对标 10⁻¹⁶”</td></tr>
        <tr><td>“价格能做到多少？”</td><td>“天隆 3–5 g/年量级按 12.96–16 元/mg 目录带测算；具体等年用量、包装、COA 确认。今天不报价。”</td><td>不现场报价/不让价</td></tr>
        <tr><td>“易瑞在用吗？”</td><td>“有一个海外食品快检客户的小批量案例；客户信息、配方、价格不能披露；可做匿名化参考。”</td><td>不披露客户名/数据</td></tr>
        <tr><td>“Quickswab 不能换酶。” </td><td>“不要求改仪器/拭子结构；只做酶的第二来源。如果必须用天隆指定酶，我们退出，不纠缠。”</td><td>不承诺“一定替换”</td></tr>
      </tbody>
    </table>

    <div class="risk" style="margin-top:1.8mm">
      <div class="t">三个雷区</div>
      <p>① 把李红东当采购：技术准入不等于商务承诺，价格/合同找彭洪富/采购。② 把 1×10⁻¹⁶ 当系统 LOD：AOAC 是 0.9 fmol；宝锐 0.1 pmol = 100 fmol，差 111×。③ 把易瑞数据直接给天隆：先三方 NDA 或匿名化。</p>
    </div>
  </div>
</div>

<h2 style="margin-top:2mm">会后 72 小时：把“兴趣”变成“排期”</h2>
<div class="actions">
  <div class="action"><div class="d">T+0 当天</div><div class="t">发纪要 + 一页验证方案；把合同 LOD/Quickswab 主体写成待确认项。</div></div>
  <div class="action"><div class="d">T+1 次日</div><div class="t">内部对齐研发/质量/生产：样品、COA、37℃ 7/11 天排期。</div></div>
  <div class="action"><div class="d">T+3 三天内</div><div class="t">约王新旺/解信美确认测试排期与收样地址；不等“有空再测”。</div></div>
  <div class="action"><div class="d">T+7 一周内</div><div class="t">给天隆一页验证计划 + 20/100 mg 样品；同步彭洪富商务路径。</div></div>
</div>

<div class="uncertain">
  <div style="font-size:7pt;font-weight:700;color:#0b1f3a;margin-bottom:.6mm">我不确定的三个点</div>
  <ol>
    <li>天隆合同 LOD 口径 + Quickswab 自产/OEM：决定直供还是先找 OEM；现场必须问清。</li>
    <li>克拉玛尔在天隆的实际份额/价格：公开无法证明；易瑞 40% 数据不能外推到天隆。</li>
    <li>宝锐 0.1 pmol 原始数据（体积/空白 n/CV/回收）与易瑞仪器/buffer：没有原始数据，不签“符合”。</li>
  </ol>
  <div class="small" style="margin-top:1mm">来源：AOAC RI 022401；天隆官网/产品页；内部订单与飞书活动（截至 2026-11-05）；宝锐 E800 产品资料与定价方案。职务以现场名片为准。</div>
</div>
'''

html = f'''<!doctype html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>天隆科技 ATP 快检项目 · 访前作战卡</title>
<style>{BK.CSS}\n{PAGE_CSS}</style></head>
<body>
{sheet(p1, 'page1')}
{sheet(p2, 'page2')}
</body></html>'''

assert html.count('</body>') == 1
assert all(BK.verify(html).values()), BK.verify(html)
os.makedirs(os.path.dirname(OUT_HTML), exist_ok=True)
open(OUT_HTML, 'w', encoding='utf-8').write(html)
print('WROTE', OUT_HTML, len(html.encode('utf-8')))
print('BRAND', BK.verify(html))
