#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""BR-Luciferase A4 — 参考科研促销版式 + 2026 biotech 设计语言，两版"""
import base64

def b64(p): return base64.b64encode(open(p,'rb').read()).decode()
LOGO=b64('/tmp/luc_logo.png'); QR=b64('/Users/liuxinyuan/work/公司资料/试用装申请.png')
BASE='/Users/liuxinyuan/Desktop/Hermes输出-工作类/对外物料/'

VIALS=f'''<svg viewBox="0 0 210 240" xmlns="http://www.w3.org/2000/svg">
<defs>
  <linearGradient id="glass" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#ffffff" stop-opacity=".95"/><stop offset=".45" stop-color="#dff2ff" stop-opacity=".65"/><stop offset="1" stop-color="#9fd6f5" stop-opacity=".55"/></linearGradient>
  <linearGradient id="liquid" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#4fc3f7" stop-opacity=".75"/><stop offset="1" stop-color="#0b5bd3" stop-opacity=".9"/></linearGradient>
  <linearGradient id="cap" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#0b3f7a"/><stop offset=".5" stop-color="#1a73e8"/><stop offset="1" stop-color="#0b3f7a"/></linearGradient>
  <linearGradient id="powder" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#ffffff"/><stop offset="1" stop-color="#dceef8"/></linearGradient>
  <filter id="soft"><feGaussianBlur stdDeviation="5"/></filter>
</defs>
<ellipse cx="105" cy="226" rx="72" ry="10" fill="#0b5bd3" opacity=".12" filter="url(#soft)"/>
<g transform="translate(8 14) rotate(-7 58 105)">
  <rect x="22" y="52" width="72" height="150" rx="16" fill="url(#glass)" stroke="#bfe4f7" stroke-width="1.4"/>
  <rect x="27" y="108" width="62" height="88" rx="11" fill="url(#liquid)" opacity=".78"/>
  <rect x="27" y="108" width="62" height="8" fill="#bff0ff" opacity=".6"/>
  <rect x="16" y="30" width="84" height="32" rx="7" fill="url(#cap)"/>
  <rect x="20" y="34" width="76" height="6" rx="3" fill="#7fc4ff" opacity=".55"/>
  <rect x="26" y="76" width="64" height="34" rx="4" fill="#ffffff" opacity=".9"/>
  <text x="58" y="88" text-anchor="middle" font-size="7" fill="#0b3f7a" font-weight="700">BR-Luciferase</text>
  <text x="58" y="99" text-anchor="middle" font-size="5.4" fill="#5f7183">E800-020714</text>
  <text x="58" y="108" text-anchor="middle" font-size="5" fill="#5f7183">1 mg/mL</text>
  <ellipse cx="42" cy="70" rx="6" ry="28" fill="#ffffff" opacity=".35"/>
</g>
<g transform="translate(72 26) rotate(5 58 105)">
  <rect x="22" y="52" width="72" height="150" rx="16" fill="url(#glass)" stroke="#bfe4f7" stroke-width="1.4"/>
  <rect x="27" y="126" width="62" height="70" rx="10" fill="url(#powder)"/>
  <path d="M30 140 q12 -8 24 0 t24 0 t12 4 v52 h-60 z" fill="#ffffff" opacity=".85"/>
  <rect x="16" y="30" width="84" height="32" rx="7" fill="url(#cap)"/>
  <rect x="20" y="34" width="76" height="6" rx="3" fill="#7fc4ff" opacity=".55"/>
  <rect x="26" y="76" width="64" height="34" rx="4" fill="#ffffff" opacity=".9"/>
  <text x="58" y="88" text-anchor="middle" font-size="7" fill="#0b3f7a" font-weight="700">BR-Luciferase</text>
  <text x="58" y="99" text-anchor="middle" font-size="5.4" fill="#5f7183">冻干粉 · 定制</text>
  <text x="58" y="108" text-anchor="middle" font-size="5" fill="#5f7183">lyophilized</text>
  <ellipse cx="42" cy="70" rx="6" ry="28" fill="#ffffff" opacity=".35"/>
</g>
</svg>'''

VIALS_DARK=f'''<svg viewBox="0 0 210 240" xmlns="http://www.w3.org/2000/svg">
<defs>
  <linearGradient id="dg" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#eaffff" stop-opacity=".9"/><stop offset=".5" stop-color="#68e6ff" stop-opacity=".35"/><stop offset="1" stop-color="#0b7fa8" stop-opacity=".35"/></linearGradient>
  <linearGradient id="dl" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#7ef7ff" stop-opacity=".85"/><stop offset="1" stop-color="#0a8ec7" stop-opacity=".9"/></linearGradient>
  <linearGradient id="dc" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#062b45"/><stop offset=".5" stop-color="#19b9d8"/><stop offset="1" stop-color="#062b45"/></linearGradient>
  <linearGradient id="dp" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#ffffff"/><stop offset="1" stop-color="#bff4ff"/></linearGradient>
  <filter id="glow"><feGaussianBlur stdDeviation="4" result="b"/><feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge></filter>
</defs>
<ellipse cx="105" cy="226" rx="76" ry="12" fill="#36e6ff" opacity=".18" filter="url(#glow)"/>
<g transform="translate(8 14) rotate(-6 58 105)" filter="url(#glow)">
  <rect x="22" y="52" width="72" height="150" rx="16" fill="url(#dg)" stroke="#8cf3ff" stroke-width="1.2" opacity=".95"/>
  <rect x="27" y="108" width="62" height="88" rx="11" fill="url(#dl)" opacity=".75"/>
  <rect x="16" y="30" width="84" height="32" rx="7" fill="url(#dc)"/>
  <rect x="26" y="76" width="64" height="34" rx="4" fill="#ffffff" opacity=".92"/>
  <text x="58" y="88" text-anchor="middle" font-size="7" fill="#062b45" font-weight="700">BR-Luciferase</text>
  <text x="58" y="99" text-anchor="middle" font-size="5.4" fill="#415a70">E800-020714</text>
  <text x="58" y="108" text-anchor="middle" font-size="5" fill="#415a70">1 mg/mL</text>
</g>
<g transform="translate(72 26) rotate(5 58 105)" filter="url(#glow)">
  <rect x="22" y="52" width="72" height="150" rx="16" fill="url(#dg)" stroke="#8cf3ff" stroke-width="1.2" opacity=".95"/>
  <rect x="27" y="126" width="62" height="70" rx="10" fill="url(#dp)"/>
  <rect x="16" y="30" width="84" height="32" rx="7" fill="url(#dc)"/>
  <rect x="26" y="76" width="64" height="34" rx="4" fill="#ffffff" opacity=".92"/>
  <text x="58" y="88" text-anchor="middle" font-size="7" fill="#062b45" font-weight="700">BR-Luciferase</text>
  <text x="58" y="99" text-anchor="middle" font-size="5.4" fill="#415a70">冻干粉 · 定制</text>
  <text x="58" y="108" text-anchor="middle" font-size="5" fill="#415a70">lyophilized</text>
</g>
</svg>'''

LAB_BG=f'''<svg viewBox="0 0 800 420" xmlns="http://www.w3.org/2000/svg">
<defs>
 <radialGradient id="petri"><stop offset="0" stop-color="#ffffff" stop-opacity=".9"/><stop offset=".6" stop-color="#bde9ff" stop-opacity=".35"/><stop offset="1" stop-color="#8fd9ff" stop-opacity=".12"/></radialGradient>
 <linearGradient id="flask" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#ffffff" stop-opacity=".65"/><stop offset="1" stop-color="#b8ecff" stop-opacity=".18"/></linearGradient>
</defs>
<g opacity=".55">
 <circle cx="160" cy="300" r="130" fill="url(#petri)" stroke="#bfeaff" stroke-width="3"/>
 <circle cx="160" cy="300" r="108" fill="none" stroke="#ffffff" stroke-width="2" opacity=".7"/>
 <circle cx="160" cy="300" r="72" fill="none" stroke="#9fdcff" stroke-width="2" opacity=".6"/>
 <circle cx="120" cy="260" r="8" fill="#ffffff" opacity=".6"/><circle cx="200" cy="330" r="5" fill="#ffffff" opacity=".5"/>
</g>
<g opacity=".5" transform="translate(620 170)">
 <path d="M50 0 h70 v35 l55 145 a22 22 0 0 1 -21 30 h-138 a22 22 0 0 1 -21 -30 l55 -145 z" fill="url(#flask)" stroke="#bfeaff" stroke-width="3"/>
 <path d="M72 120 h96 l40 105 a14 14 0 0 1 -14 19 h-148 a14 14 0 0 1 -14 -19 z" fill="#7fd8ff" opacity=".25"/>
 <line x1="35" y1="35" x2="135" y2="35" stroke="#ffffff" stroke-width="3" opacity=".7"/>
</g>
<g fill="#ffffff" opacity=".6"><circle cx="420" cy="90" r="4"/><circle cx="470" cy="130" r="2.5"/><circle cx="380" cy="60" r="2"/><circle cx="700" cy="70" r="3"/></g>
</svg>'''

def signal_chart(dark=False):
    c1='#5ee0ff' if dark else '#1a73e8'; c2='#6b7f95' if dark else '#c7d3df'
    txt='#dff6ff' if dark else '#415a70'; muted='#8fb3c4' if dark else '#7b8ea2'
    return f'''<svg viewBox="0 0 340 150" xmlns="http://www.w3.org/2000/svg">
    <line x1="18" y1="128" x2="322" y2="128" stroke="{'#2c5a70' if dark else '#e3ecf4'}"/>
    <rect x="28" y="34" width="220" height="36" rx="5" fill="{c1}"/>
    <text x="258" y="59" font-size="18" fill="{c1}" font-weight="700">100</text>
    <rect x="28" y="88" width="73" height="36" rx="5" fill="{c2}"/>
    <text x="111" y="113" font-size="18" fill="{muted}" font-weight="700">33</text>
    <text x="28" y="143" font-size="9" fill="{txt}">BR-Luciferase</text>
    <text x="210" y="143" font-size="9" fill="{muted}">Supplier N</text>
    </svg>'''

def retention_chart(dark=False):
    c1='#5ee0ff' if dark else '#1a73e8'; c2='#6b7f95' if dark else '#c7d3df'
    txt='#dff6ff' if dark else '#415a70'; muted='#8fb3c4' if dark else '#7b8ea2'
    grid='#2c5a70' if dark else '#eef3f8'
    return f'''<svg viewBox="0 0 340 190" xmlns="http://www.w3.org/2000/svg">
    <line x1="20" y1="160" x2="330" y2="160" stroke="{'#2c5a70' if dark else '#dbe6f0'}"/>
    <line x1="20" y1="55" x2="330" y2="55" stroke="{grid}"/>
    <rect x="38" y="60" width="34" height="100" rx="4" fill="{c1}"/><text x="42" y="52" font-size="12" fill="{c1}" font-weight="700">74</text>
    <rect x="78" y="106" width="34" height="54" rx="4" fill="{c2}"/><text x="82" y="98" font-size="12" fill="{muted}">40</text>
    <rect x="143" y="55" width="34" height="105" rx="4" fill="{c1}"/><text x="147" y="47" font-size="12" fill="{c1}" font-weight="700">77</text>
    <rect x="183" y="85" width="34" height="75" rx="4" fill="{c2}"/><text x="187" y="77" font-size="12" fill="{muted}">55</text>
    <rect x="248" y="42" width="34" height="118" rx="4" fill="{c1}"/><text x="252" y="34" font-size="12" fill="{c1}" font-weight="700">90</text>
    <rect x="288" y="47" width="30" height="113" rx="4" fill="{c2}"/><text x="288" y="39" font-size="12" fill="{muted}">88</text>
    <text x="43" y="178" font-size="9" fill="{txt}">37℃</text><text x="148" y="178" font-size="9" fill="{txt}">25℃</text><text x="253" y="178" font-size="9" fill="{txt}">4℃</text>
    <text x="112" y="178" font-size="8" fill="{muted}">BR</text><text x="208" y="178" font-size="8" fill="{muted}">竞品</text>
    </svg>'''

# ---------- C 光感科研促销版 ----------
C=f'''<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><style>
@page{{size:A4;margin:0}}
*{{box-sizing:border-box;margin:0;padding:0}}
html,body{{width:210mm;height:297mm;overflow:hidden}}
body{{font-family:"PingFang SC","Microsoft YaHei",-apple-system,sans-serif;color:#0b2a4a;-webkit-print-color-adjust:exact;print-color-adjust:exact}}
.page{{width:210mm;height:297mm;padding:8mm 10mm 7mm;position:relative;overflow:hidden;display:flex;flex-direction:column;
background:radial-gradient(circle at 86% 6%,rgba(126,224,255,.55),transparent 27%),radial-gradient(circle at 8% 92%,rgba(160,240,210,.5),transparent 28%),linear-gradient(165deg,#fbfeff 0%,#edf8ff 48%,#e8f8f3 100%)}}
.lab{{position:absolute;left:-22mm;bottom:-18mm;width:120mm;opacity:.75;pointer-events:none}}
.lab2{{position:absolute;right:-25mm;top:112mm;width:95mm;opacity:.5;pointer-events:none}}
.top{{display:flex;align-items:center;position:relative;z-index:2}}
.top img{{height:9mm}}
.pill{{margin-left:auto;border:1.2pt solid #1a73e8;color:#1565c0;border-radius:20mm;padding:1.5mm 4mm;font-size:7pt;letter-spacing:.6pt;background:rgba(255,255,255,.55)}}
.hero{{display:flex;align-items:flex-start;gap:2mm;margin-top:5mm;position:relative;z-index:2}}
.hero .copy{{flex:1;min-width:0}}
.kicker{{font-size:7pt;color:#1a73e8;letter-spacing:1.3pt;font-weight:600}}
.lead{{font-size:12pt;color:#0b2a4a;font-weight:700;margin-top:1.8mm;letter-spacing:.4pt}}
h1{{font-size:27pt;line-height:1.06;color:#082b52;margin-top:1mm;letter-spacing:-.3pt}}
h1 span{{font-size:13pt;font-weight:500;color:#1a4f86;letter-spacing:0}}
.sub{{font-size:7.6pt;color:#41647f;line-height:1.55;margin-top:2mm;max-width:118mm}}
.metrics{{display:flex;margin-top:3.6mm;border-top:.6pt solid #b9d9ee;border-bottom:.6pt solid #b9d9ee;padding:2.2mm 0}}
.metric{{flex:1;text-align:center;position:relative}}
.metric+.metric:before{{content:"";position:absolute;left:0;top:1mm;bottom:1mm;width:.6pt;background:#c8dfef}}
.metric b{{display:block;font-size:19pt;color:#0b5bd3;line-height:1;font-weight:800}}
.metric span{{display:block;font-size:6.5pt;color:#5f7f96;margin-top:1mm}}
.vials{{width:47mm;flex:0 0 47mm;margin-top:-2mm}}
.vials svg{{width:100%;height:auto;display:block;filter:drop-shadow(0 6px 10px rgba(20,110,180,.14))}}
.highlight{{margin-top:3mm;border:1.2pt solid #f5a623;border-radius:2.2mm;background:rgba(255,255,255,.72);padding:2.2mm 4mm;display:flex;align-items:center;gap:3mm;position:relative;z-index:2}}
.highlight .tag{{background:#f5a623;color:#fff;font-size:6.6pt;border-radius:1mm;padding:.7mm 1.8mm;font-weight:700;letter-spacing:.5pt}}
.highlight b{{font-size:10pt;color:#0b2a4a}}
.highlight span{{font-size:6.8pt;color:#5f7183;margin-left:auto}}
.features{{display:grid;grid-template-columns:repeat(3,1fr);gap:3mm;margin-top:3.4mm;position:relative;z-index:2}}
.feature{{position:relative;padding-left:1mm}}
.feature .n{{font-size:30pt;font-weight:800;color:#cfe7f7;line-height:.9;letter-spacing:-1pt}}
.feature b{{display:block;font-size:9.2pt;color:#0b2a4a;margin-top:-1.5mm}}
.feature p{{font-size:6.5pt;color:#5f7183;line-height:1.45;margin-top:.8mm}}
.perf{{margin-top:3mm;background:rgba(255,255,255,.66);border:1pt solid rgba(255,255,255,.9);box-shadow:0 3mm 8mm rgba(20,100,160,.08);border-radius:3mm;padding:3.2mm 3.6mm;position:relative;z-index:2;backdrop-filter:blur(6px)}}
.perf-head{{display:flex;align-items:center;gap:2.2mm}}
.perf-head b{{font-size:11pt;color:#0b2a4a;letter-spacing:.5pt}}
.perf-head span{{font-size:6.4pt;color:#5f7183;margin-left:auto}}
.charts{{display:grid;grid-template-columns:1fr 1fr;gap:3mm;margin-top:2.2mm}}
.chart{{background:#fff;border:.6pt solid #e0eef7;border-radius:2mm;padding:2.2mm 2.4mm}}
.chart .ct{{font-size:7pt;color:#17456e;font-weight:700;margin-bottom:1mm}}
.chart svg{{width:100%;height:auto;display:block}}
.perf-note{{font-size:5.9pt;color:#7b93a5;line-height:1.4;margin-top:1.4mm}}
.sec{{margin-top:3.2mm;position:relative;z-index:2}}
.sec-head{{display:flex;align-items:baseline;gap:2mm;margin-bottom:1.8mm}}
.sec-head b{{font-size:10pt;color:#0b2a4a;letter-spacing:.5pt}}
.sec-head span{{font-size:6.2pt;color:#5f7f96;margin-left:auto}}
.app-grid{{display:grid;grid-template-columns:repeat(3,1fr);gap:2mm}}
.app-card{{background:rgba(255,255,255,.72);border:.6pt solid #dcecf7;border-radius:2mm;padding:2.2mm 2.4mm;display:flex;align-items:center;gap:2mm}}
.app-card b{{font-size:7.2pt;color:#0b5bd3;min-width:13mm}}
.app-card span{{font-size:6.3pt;color:#41647f}}
.order-table{{background:rgba(255,255,255,.72);border:.6pt solid #dcecf7;border-radius:2mm;overflow:hidden}}
.order-table table{{width:100%;border-collapse:collapse;font-size:6.6pt}}
.order-table th{{background:#eaf4ff;color:#17456e;text-align:left;padding:1.4mm 2mm;border-bottom:.5pt solid #dcecf7;font-weight:600}}
.order-table td{{padding:1.6mm 2mm;border-bottom:.5pt solid #eef6fb;color:#41647f}}
.order-table td b{{color:#0b2a4a}}
.order-note{{font-size:5.9pt;color:#7b93a5;margin-top:1.2mm;line-height:1.4}}
.footer{{margin-top:auto;display:flex;align-items:center;gap:3.5mm;position:relative;z-index:2;padding-top:2mm}}
.qr{{display:flex;align-items:center;gap:1.8mm}}
.qr img{{width:15mm;height:15mm;object-fit:contain;background:#fff;border-radius:1mm}}
.qr .vt{{writing-mode:vertical-rl;font-size:6.2pt;color:#1565c0;letter-spacing:.8pt;background:#eaf4ff;padding:1.2mm .8mm;border-radius:1mm}}
.contact{{font-size:6.2pt;color:#41647f;line-height:1.55}}
.contact b{{font-size:7pt;color:#0b2a4a}}
.slogan{{margin-left:auto;text-align:right;font-size:6.1pt;color:#1565c0;letter-spacing:.4pt}}
</style></head><body><div class="page">
<div class="lab">{LAB_BG}</div><div class="lab2">{LAB_BG}</div>
<div class="top"><img src="data:image/png;base64,{LOGO}"><span class="pill">科研加速季 · 分子诊断原料</span></div>

<div class="hero"><div class="copy"><div class="kicker">RECOMBINANT FIREFLY LUCIFERASE</div>
<div class="lead">同酶量，信号约 3 倍</div>
<h1>BR-Luciferase <span>萤火虫荧光素酶</span></h1>
<div class="sub">基因工程改造 · 37℃ 7 天保留 74% · 25℃ 7 天保留 77% · 液体 / 冻干双形式</div>
<div class="metrics"><div class="metric"><b>3×</b><span>相同酶量信号</span></div><div class="metric"><b>74%</b><span>37℃ 7 天活力</span></div><div class="metric"><b>77%</b><span>25℃ 7 天活力</span></div></div></div>
<div class="vials">{VIALS}</div></div>

<div class="highlight"><span class="tag">核心指标</span><b>E800-020714 · 1 mg/mL</b><span>甘油液体 / 冻干粉 · 支持定制</span></div>

<div class="features">
<div class="feature"><div class="n">01</div><b>信号更强</b><p>同酶量 RLU 约为竞品 3 倍；同等信号下可减少酶用量。</p></div>
<div class="feature"><div class="n">02</div><b>耐温更稳</b><p>37℃ 7 天 74%（竞品 40%）；25℃ 7 天 77%（竞品 55%）。</p></div>
<div class="feature"><div class="n">03</div><b>形式灵活</b><p>甘油液体与冻干粉；冻干后稳定，支持浓度/缓冲/规格定制。</p></div>
</div>

<div class="perf"><div class="perf-head"><b>性能展示</b><span>加速稳定性 · 同酶量对比</span></div>
<div class="charts">
<div class="chart"><div class="ct">相对信号（同酶量）</div>{signal_chart(False)}</div>
<div class="chart"><div class="ct">7 天活力保留（%）</div>{retention_chart(False)}</div>
</div>
<div class="perf-note">数据：4℃/25℃/37℃、0/2/4/7 天加速稳定性实验；信号为化学发光 RLU，0 天活力记为 100%；竞品为 Supplier N。</div>
</div>

<div class="sec"><div class="sec-head"><b>应用方向</b><span>ATP 检测与发光体系</span></div>
<div class="app-grid">
<div class="app-card"><b>ATP</b><span>ATP 检测与定量</span></div>
<div class="app-card"><b>REPORT</b><span>报告基因检测</span></div>
<div class="app-card"><b>CELL</b><span>细胞活力 / 代谢</span></div>
<div class="app-card"><b>KIT</b><span>ATP 检测试剂盒开发</span></div>
<div class="app-card"><b>IVD</b><span>体外诊断原料</span></div>
<div class="app-card"><b>RESEARCH</b><span>分子生物学研究</span></div>
</div></div>

<div class="sec"><div class="sec-head"><b>货号与规格</b><span>E800-020714</span></div>
<div class="order-table"><table>
<tr><th>产品名称</th><th>货号</th><th>规格</th><th>形式</th></tr>
<tr><td><b>Luciferase (020714)</b></td><td><b>E800-020714</b></td><td>1 mg/mL</td><td>甘油液体 / 冻干粉（可定制）</td></tr>
</table></div>
<div class="order-note">保存：−20℃ 长期保存，避免反复冻融；冻干粉按说明书复溶。支持浓度、缓冲体系、规格定制。</div></div>

<div class="footer"><div class="qr"><img src="data:image/png;base64,{QR}"><span class="vt">扫码申请试用</span></div>
<div class="contact"><b>珠海宝锐生物科技有限公司</b><br>0756-8699969 ｜ marketing@biori.com ｜ www.biori.com<br>广东省珠海市香洲区水岸一路 88 号</div>
<div class="slogan">BIORI BIOTECH<br>守护生命健康，缔造美好生活</div></div>
</div></body></html>'''

# ---------- D 生物荧光数据版 ----------
D=f'''<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><style>
@page{{size:A4;margin:0}}
*{{box-sizing:border-box;margin:0;padding:0}}
html,body{{width:210mm;height:297mm;overflow:hidden}}
body{{font-family:"PingFang SC","Microsoft YaHei",-apple-system,sans-serif;color:#eafcff;-webkit-print-color-adjust:exact;print-color-adjust:exact}}
.page{{width:210mm;height:297mm;padding:8mm 10mm 7mm;position:relative;overflow:hidden;display:flex;flex-direction:column;
background:radial-gradient(circle at 72% 12%,rgba(0,220,255,.20),transparent 34%),radial-gradient(circle at 12% 82%,rgba(0,255,210,.12),transparent 28%),linear-gradient(160deg,#03101f 0%,#06253b 52%,#083b4a 100%)}}
.grid{{position:absolute;inset:0;background-image:linear-gradient(rgba(120,240,255,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(120,240,255,.06) 1px,transparent 1px);background-size:12mm 12mm;mask-image:radial-gradient(circle at 50% 40%,#000 0%,transparent 75%)}}
.glow{{position:absolute;border-radius:50%;filter:blur(18mm);pointer-events:none}}
.g1{{width:90mm;height:90mm;right:-15mm;top:-10mm;background:rgba(0,220,255,.22)}}
.g2{{width:70mm;height:70mm;left:-20mm;bottom:20mm;background:rgba(0,255,200,.14)}}
.top{{display:flex;align-items:center;position:relative;z-index:3}}
.logo-chip{{background:#fff;border-radius:2mm;padding:1.6mm 2.6mm;display:flex;align-items:center}}
.logo-chip img{{height:8mm;display:block}}
.pill{{margin-left:auto;border:1pt solid rgba(140,243,255,.55);color:#9ff4ff;border-radius:20mm;padding:1.4mm 3.6mm;font-size:6.4pt;letter-spacing:1.2pt;background:rgba(10,60,80,.35)}}
.hero{{position:relative;z-index:3;display:flex;align-items:center;gap:3mm;margin-top:5mm}}
.hero .copy{{flex:1;min-width:0;position:relative}}
.kicker{{font-size:6.6pt;color:#6ee9ff;letter-spacing:1.8pt}}
h1{{font-size:13pt;color:#eafcff;margin-top:2mm;letter-spacing:.6pt}}
h1 b{{display:block;font-size:35pt;line-height:.98;letter-spacing:-.8pt;color:#fff;margin-top:1mm}}
h1 span{{display:block;font-size:11pt;font-weight:400;color:#9fdfea;margin-top:1.4mm;letter-spacing:.4pt}}
.sub{{font-size:7.2pt;color:#a8d8e4;line-height:1.6;margin-top:2.4mm;max-width:112mm}}
.watermark{{position:absolute;right:0;top:-8mm;font-size:88pt;font-weight:800;color:rgba(110,233,255,.08);line-height:1;letter-spacing:-5pt;pointer-events:none}}
.metrics{{display:flex;gap:2.2mm;margin-top:3.4mm}}
.metric{{flex:1;background:rgba(255,255,255,.07);border:1px solid rgba(140,243,255,.18);border-radius:2mm;padding:2.2mm 2.4mm;backdrop-filter:blur(8px)}}
.metric b{{display:block;font-size:20pt;color:#7ef7ff;line-height:1;font-weight:800}}
.metric span{{display:block;font-size:6.2pt;color:#a8d8e4;margin-top:.9mm}}
.metric em{{display:block;font-style:normal;font-size:5.8pt;color:#6f9fad;margin-top:.5mm}}
.vials{{width:50mm;flex:0 0 50mm;align-self:flex-end;margin-bottom:-4mm}}
.vials svg{{width:100%;height:auto;display:block;filter:drop-shadow(0 0 10px rgba(80,230,255,.4))}}
.panel{{margin-top:4mm;background:rgba(5,35,52,.55);border:1px solid rgba(140,243,255,.18);border-radius:3mm;padding:3.2mm 3.4mm;position:relative;z-index:3;backdrop-filter:blur(10px)}}
.panel-head{{display:flex;align-items:baseline;gap:2mm}}
.panel-head b{{font-size:10pt;color:#eafcff;letter-spacing:.5pt}}
.panel-head span{{font-size:6.2pt;color:#6f9fad;margin-left:auto}}
.charts{{display:grid;grid-template-columns:1fr 1fr;gap:3mm;margin-top:2mm}}
.chart{{background:rgba(2,22,34,.55);border:1px solid rgba(140,243,255,.14);border-radius:2mm;padding:2.2mm 2.4mm}}
.chart .ct{{font-size:6.8pt;color:#9ff4ff;font-weight:600;margin-bottom:.8mm}}
.chart svg{{width:100%;height:auto;display:block}}
.note{{font-size:5.8pt;color:#6f9fad;line-height:1.45;margin-top:1.4mm}}
.features{{display:grid;grid-template-columns:repeat(3,1fr);gap:2.6mm;margin-top:3mm;position:relative;z-index:3}}
.feature{{background:rgba(255,255,255,.05);border:1px solid rgba(140,243,255,.14);border-radius:2mm;padding:2.2mm 2.4mm}}
.feature .n{{font-size:7pt;color:#6ee9ff;letter-spacing:1pt}}
.feature b{{display:block;font-size:8.4pt;color:#eafcff;margin-top:.8mm}}
.feature p{{font-size:6pt;color:#9fc4cf;line-height:1.45;margin-top:.6mm}}
.secD{{margin-top:3mm;position:relative;z-index:3}}
.secD .sec-head b{{font-size:9.6pt;color:#eafcff}}
.secD .sec-head span{{font-size:6pt;color:#6f9fad}}
.app-gridD{{display:grid;grid-template-columns:repeat(3,1fr);gap:2mm}}
.appD{{background:rgba(255,255,255,.05);border:1px solid rgba(140,243,255,.14);border-radius:1.8mm;padding:2mm 2.2mm;display:flex;align-items:center;gap:1.8mm}}
.appD b{{font-size:6.8pt;color:#7ef7ff;min-width:12mm}}
.appD span{{font-size:6pt;color:#9fc4cf}}
.orderD{{background:rgba(5,35,52,.55);border:1px solid rgba(140,243,255,.16);border-radius:2mm;padding:2mm 2.4mm}}
.orderD table{{width:100%;border-collapse:collapse;font-size:6.3pt}}
.orderD th{{color:#9ff4ff;text-align:left;padding:1mm 1.4mm;border-bottom:1px solid rgba(140,243,255,.18);font-weight:600}}
.orderD td{{color:#a8d8e4;padding:1mm 1.4mm;border-bottom:1px solid rgba(140,243,255,.10)}}
.orderD td b{{color:#eafcff}}
.orderD .note{{margin-top:.8mm}}
.footer{{margin-top:auto;display:flex;align-items:center;gap:3.5mm;position:relative;z-index:3;border-top:1px solid rgba(140,243,255,.16);padding-top:2mm}}
.qr{{display:flex;align-items:center;gap:1.8mm}}
.qr img{{width:15mm;height:15mm;object-fit:contain;background:#fff;border-radius:1mm;padding:.6mm}}
.qr .vt{{writing-mode:vertical-rl;font-size:6pt;color:#9ff4ff;letter-spacing:.8pt;background:rgba(0,200,230,.12);padding:1mm .7mm;border-radius:1mm}}
.contact{{font-size:6pt;color:#9fc4cf;line-height:1.55}}
.contact b{{font-size:6.8pt;color:#eafcff}}
.slogan{{margin-left:auto;text-align:right;font-size:6pt;color:#6ee9ff;letter-spacing:.5pt}}
</style></head><body><div class="page">
<div class="grid"></div><div class="glow g1"></div><div class="glow g2"></div>
<div class="top"><div class="logo-chip"><img src="data:image/png;base64,{LOGO}"></div><span class="pill">BIOLUMINESCENT DATA · 2026</span></div>

<div class="hero"><div class="copy"><div class="watermark">3×</div><div class="kicker">RECOMBINANT FIREFLY LUCIFERASE</div>
<h1>同酶量<b>BR-Luciferase</b><span>萤火虫荧光素酶</span></h1>
<div class="sub">基因工程改造 · 37℃ 7 天保留 74% · 25℃ 7 天保留 77% · 液体 / 冻干双形式</div>
<div class="metrics"><div class="metric"><b>3×</b><span>相同酶量信号</span><em>BR vs Supplier N</em></div><div class="metric"><b>74%</b><span>37℃ 7 天活力</span><em>竞品 40%</em></div><div class="metric"><b>77%</b><span>25℃ 7 天活力</span><em>竞品 55%</em></div></div></div>
<div class="vials">{VIALS_DARK}</div></div>

<div class="panel"><div class="panel-head"><b>核心性能 / CORE PERFORMANCE</b><span>加速稳定性 · 同酶量对比</span></div>
<div class="charts">
<div class="chart"><div class="ct">相对信号（同酶量）</div>{signal_chart(True)}</div>
<div class="chart"><div class="ct">7 天活力保留（%）</div>{retention_chart(True)}</div>
</div>
<div class="note">数据：4℃/25℃/37℃、0/2/4/7 天加速稳定性实验；信号为化学发光 RLU，0 天活力记为 100%；竞品为 Supplier N。E800-020714｜1 mg/mL。</div></div>

<div class="features">
<div class="feature"><div class="n">01 / SIGNAL</div><b>信号更强</b><p>同酶量 RLU 约为竞品 3 倍；同等信号下可减少酶用量。</p></div>
<div class="feature"><div class="n">02 / STABILITY</div><b>耐温更稳</b><p>37℃ 7 天 74%，25℃ 7 天 77%；冻干后性能稳定。</p></div>
<div class="feature"><div class="n">03 / FORMAT</div><b>形式灵活</b><p>甘油液体 / 冻干粉；浓度、缓冲体系、规格可定制。</p></div>
</div>

<div class="secD"><div class="sec-head"><b>应用方向 / APPLICATIONS</b><span>ATP 检测与发光体系</span></div>
<div class="app-gridD">
<div class="appD"><b>ATP</b><span>检测与定量</span></div><div class="appD"><b>REPORT</b><span>报告基因</span></div><div class="appD"><b>CELL</b><span>活力 / 代谢</span></div>
<div class="appD"><b>KIT</b><span>试剂盒开发</span></div><div class="appD"><b>IVD</b><span>体外诊断原料</span></div><div class="appD"><b>RESEARCH</b><span>分子生物学</span></div>
</div></div>

<div class="secD"><div class="sec-head"><b>订购信息 / ORDERING</b><span>E800-020714</span></div>
<div class="orderD"><table>
<tr><th>产品名称</th><th>货号</th><th>规格</th><th>形式</th></tr>
<tr><td><b>Luciferase (020714)</b></td><td><b>E800-020714</b></td><td>1 mg/mL</td><td>甘油液体 / 冻干粉（可定制）</td></tr>
</table><div class="note">保存：−20℃ 长期保存，避免反复冻融；冻干粉按说明书复溶。支持浓度、缓冲体系、规格定制。</div></div></div>

<div class="footer"><div class="qr"><img src="data:image/png;base64,{QR}"><span class="vt">扫码申请试用</span></div>
<div class="contact"><b>珠海宝锐生物科技有限公司</b><br>0756-8699969 ｜ marketing@biori.com ｜ www.biori.com<br>广东省珠海市香洲区水岸一路 88 号</div>
<div class="slogan">BIORI BIOTECH<br>守护生命健康，缔造美好生活</div></div>
</div></body></html>'''

for name,html in [('BR-Luciferase_A4_设计版C_科研光感_20261027.html',C),('BR-Luciferase_A4_设计版D_生物荧光_20261027.html',D)]:
    p=BASE+name; open(p,'w',encoding='utf-8').write(html); print('saved',p,len(html))
