#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生成《biori.com 首页改版方案》——含审计发现 + 首页原型（带标注开关）+ 技术实现
输出：工具/biori首页改版方案_20260917.html（自包含、默认可编辑可保存）
"""
import os, sys, base64, datetime, html as H
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from html_editable_layer import apply as apply_edit

ROOT = os.path.expanduser('~/Desktop/Hermes输出-工作类')
OUT = os.path.join(ROOT, '工具/biori首页改版方案_20260917.html')
LOGO = os.path.expanduser('~/work/公司资料/logo_transparent.png')
logo = ('data:image/png;base64,' + base64.b64encode(open(LOGO, 'rb').read()).decode()) if os.path.exists(LOGO) else ''
TODAY = datetime.date.today().isoformat()

# ── 审计发现（实测）────────────────────────────────────────
AUDIT = [
    ("title 只有公司名", "「珠海宝锐生物科技有限公司」12 字符，无业务/品类/场景关键词",
     "改为「分子诊断原料与生命科学试剂供应商｜BIORI 宝锐生物（冻干专用原料）」，把核心业务词前置"),
    ("无 H1", "整页没有 H1，搜索引擎与 AI 无法确定首页主题",
     "设唯一 H1＝公司定位语；H2 对应每个内容区块（业务板块/技术平台/场景/FAQ）"),
    ("18 张轮播 Banner", "首屏被 18 项轮播占满，用户与爬虫都难以快速抓到重点（且轮播内容多为活动图）",
     "轮播压缩为 1 张主视觉 + 3 条「业务入口卡」；轮播内容改到「新闻/活动」区块"),
    ("95% 图片缺 alt", "60 张图中 57 张无 alt（实测）",
     "全部补 alt：「{内容}（宝锐生物 {产品线}）」；产品图带货号"),
    ("无结构化数据（除 Organization）", "首页 JSON-LD 仅 Organization，缺 WebSite / ItemList / FAQPage",
     "补 WebSite(SearchAction) + ItemList(三大业务板块) + FAQPage(选型常见问题) + BreadcrumbList"),
    ("无 canonical / og / hreflang", "实测均为 0",
     "补 canonical、og:title/description/image/type、hreflang(zh-CN / en / x-default)"),
    ("无 footer 语义标签", "页脚内容存在但未用 <footer>，且缺少营业执照/备案/sitemap 链接",
     "改为语义化 <footer>，分四栏 + 联系信息 + 备案 + Sitemap.xml 链接"),
    ("缺「解决方案 / 场景」入口", "导航只有产品线维度，没有按客户类型（IVD 厂/畜牧/食品安全/高校）的入口",
     "新增「解决方案」一级导航，按客户场景分流——同时是 GEO 高价值内容载体"),
    ("sitemap.xml 404", "robots.txt 未声明 sitemap（实测）",
     "生成 sitemap.xml 并在 robots.txt 声明；首页作为枢纽列全部一级入口"),
]

# ── 待确认数据（不编造，交给市场部核对）─────────────────────
TODO_DATA = [
    "成立年份口径：首页原文写「自2012年成立」，另有页面写「自2014年布局冻干原料」——首页建议统一表述（如「2012 年成立，2014 年起专攻冻干专用原料」）",
    "可公示的规模数据：累计货号数（内部数据 854 个）、服务客户数、合作 IVD 企业数、年产能（L/批）、专利数——需市场部确认可对外口径",
    "资质证书清单与有效期：ISO9001:2015、国家高新技术企业、专精特新、省工程技术研究中心、博士后创新实践基地（需附证书图片与编号）",
    "英文站对应链接：用于 hreflang 互指，需确认英文站产品/关于页 URL 规则",
    "产品目录 PDF 的最新版本号与更新日期（下载中心入口）",
]

# ── 页面区块（原型）────────────────────────────────────────
NAV = [("产品中心", ["生命科学", "诊断原料", "生物医药"]),
       ("解决方案", ["IVD 试剂厂", "畜牧与宠物疫病", "食品安全检测", "高校与科研"]),
       ("技术支持", ["选型指南", "常见问题", "说明书下载"]),
       ("资源下载", []), ("关于我们", []), ("联系我们", [])]

BUSINESS = [
    ("🧬", "诊断原料", "分子酶 / qPCR / qRT-PCR / LAMP-DNA / LAMP-RNA / 辅助原料",
     "为 IVD 企业与第三方实验室提供配方级原料：热启动 Taq、逆转录酶、UNG、可冻干预混液（DG），支持配方定制与冻干转化。",
     ["分子酶", "qPCR", "qRT-PCR", "LAMP-DNA", "LAMP-RNA"]),
    ("🔬", "生命科学", "分子生物学 / 核酸提取纯化 / 测序试剂 / 蛋白质研究",
     "面向高校与科研院所的即用型试剂盒与工具酶，覆盖直扩（植物/动物组织/血液/细胞）、核酸提取与测序建库相关试剂。",
     ["分子生物学", "核酸提取和纯化", "测序试剂", "蛋白质研究"]),
    ("💉", "生物医药", "生物制品质量控制分析 / mRNA 原料",
     "面向生物制品与mRNA 领域：质量控制分析用核酸体系、mRNA 原料相关酶与试剂，满足背景菌残留控制等严苛要求。",
     ["生物制品质量控制分析", "mRNA原料"]),
]

SCENES = [
    ("IVD 试剂厂", "配方定制 · 冻干转化 · 批间一致性", "耐抑制体系、可冻干预混液、单酶替换验证；提供 COA 与变更通知机制。", "进入解决方案"),
    ("畜牧与宠物疫病", "快速直扩 · 常温运输", "血清/拭子/组织免提取直扩，适配现场快检与冻干常温型产品。", "进入解决方案"),
    ("食品安全检测", "多重检测 · 抗抑制", "植物与食品基质粗样品直扩，多重靶标均衡扩增。", "进入解决方案"),
    ("高校与科研", "即用型试剂盒 · 试用装", "直扩系列、qPCR 试剂盒与酶工具，支持试用装申请与文献引用。", "申请试用"),
]

PLATFORM = [
    ("蛋白进化平台", "定向进化与理性设计结合，持续产出高活性、耐抑制、耐热的酶突变体。"),
    ("重组表达与纯化", "自建表达与纯化工艺，保证批次间一致性（附批间 CV 数据位）。"),
    ("抗体开发与封闭技术", "热启动抗体封闭，降低非特异扩增与背景。"),
    ("适配体筛选", "面向特定靶标与体系的适配体筛选能力。"),
    ("冻干工艺平台", "2014 年起布局冻干专用原料，覆盖 DNA/RNA 全系列冻干预混液与冻干球。"),
    ("应用开发与验证", "与客户项目同步验证：灵敏度、抗抑制、加速稳定性（37 ℃ 7 天）。"),
]

SPEC_ROWS = [
    ("热启动 Taq / 抗体封闭", "5 U/μL", "是", "是", "qPCR / 多重 PCR"),
    ("一步法 RT-qPCR 预混液", "2× / 5×", "是", "是（DG）", "RNA 检测 / 直扩"),
    ("直扩预混液（植物/组织/血液）", "2× / 5×", "可选", "是", "免提取粗样品"),
    ("等温扩增（LAMP）", "预混液", "可选", "是", "现场快检 / POCT"),
    ("UNG 酶 / dUTP 方案", "单酶", "—", "是", "防污染体系"),
]

FAQ = [
    ("如何选择适合我项目的 qPCR 体系？", "先看样本类型与抑制物（血清/组织/植物粗提物）、是否需要一步法、是否要求冻干形态。拿不准可提交项目信息，我们给出 2–3 个候选货号与配方建议。"),
    ("能否提供冻干形态？", "可以。我们有 DNA/RNA 全系列可冻干预混液（DG 版本），并提供冻干工艺配合与冻干前后性能对比数据。"),
    ("是否支持单酶替换与配方定制？", "支持。可提供单酶对照测试数据（Ct、荧光增幅、批间 CV），并按客户体系做配方适配。"),
    ("最小起订量与交期？", "按货号与规格不同，请提交需求后由销售确认；常规货号备有安全库存。"),
    ("是否提供 COA / 说明书 / SDS？", "提供。每批货配 COA；说明书与 SDS 可在「资源下载」获取，或直接联系我们。"),
    ("科研客户能否申请试用装？", "可以。高校与科研课题组可申请试用装，我们同时提供选型建议与技术支持。"),
]

JSONLD = {
 "org": {
  "@context": "https://schema.org/", "@type": "Organization",
  "name": "珠海宝锐生物科技有限公司", "alternateName": "BIORI BIOTECH",
  "url": "https://www.biori.com", "logo": "https://www.biori.com/upload/logo.png",
  "foundingDate": "2012",
  "description": "分子诊断原料与生命科学试剂供应商：热启动 Taq、逆转录酶、UNG、可冻干预混液（DG）与直扩系列试剂。",
  "address": {"@type": "PostalAddress", "addressRegion": "广东省", "addressLocality": "珠海市", "addressCountry": "CN"},
  "contactPoint": [{"@type": "ContactPoint", "contactType": "sales", "telephone": "{{电话}}", "email": "{{邮箱}}", "areaServed": "CN", "availableLanguage": ["zh-CN", "en"]}],
  "sameAs": ["{{公众号/视频号/领英等官方链接}}"],
  "hasCredential": ["国家高新技术企业", "专精特新企业", "ISO9001:2015", "广东省分子诊断原料酶工程技术研究中心"]
 },
 "website": {
  "@context": "https://schema.org/", "@type": "WebSite", "name": "宝锐生物 BIORI BIOTECH",
  "url": "https://www.biori.com",
  "potentialAction": {"@type": "SearchAction", "target": "https://www.biori.com/search?q={search_term_string}", "query-input": "required name=search_term_string"}
 },
 "itemlist": {
  "@context": "https://schema.org/", "@type": "ItemList", "name": "宝锐生物业务板块",
  "itemListElement": [
   {"@type": "ListItem", "position": 1, "name": "诊断原料", "url": "https://www.biori.com/catalogue/Diagnostic-raw-materials"},
   {"@type": "ListItem", "position": 2, "name": "生命科学", "url": "https://www.biori.com/catalogue/Life-science"},
   {"@type": "ListItem", "position": 3, "name": "生物医药", "url": "https://www.biori.com/catalogue/Biopharma"}
  ]
 },
 "faq": {
  "@context": "https://schema.org/", "@type": "FAQPage",
  "mainEntity": [{"@type": "Question", "name": q, "acceptedAnswer": {"@type": "Answer", "text": a}} for q, a in FAQ]
 }
}

CSS = """
*{box-sizing:border-box}
body{margin:0;background:#eef2f7;color:#1f2d3d;font:14px/1.7 -apple-system,"PingFang SC","Microsoft YaHei",sans-serif}
.page{max-width:1560px;margin:14px auto;background:#fff;padding:16px 20px 50px;box-shadow:0 2px 14px rgba(16,42,80,.1)}
.hd{display:flex;align-items:center;gap:12px;border-bottom:3px solid #1a73c9;padding-bottom:9px;margin-bottom:12px}
.hd img{height:38px}
.hd .nm{font-weight:800;color:#12325b;font-size:15px}
.hd .nm small{display:block;font-weight:500;font-size:10.5px;color:#7286a0;letter-spacing:1.5px}
.hd .rt{margin-left:auto;text-align:right;font-size:11.5px;color:#7286a0}
h1.doc{font-size:20px;color:#12325b;margin:12px 0 4px}
.sub{font-size:12.5px;color:#7286a0;margin-bottom:14px}
h2{font-size:16px;color:#12325b;margin:20px 0 9px;padding-left:9px;border-left:4px solid #1a73c9;display:flex;align-items:center;gap:8px}
h2 em{font-style:normal;font-size:11.5px;font-weight:500;color:#8a9bb0;margin-left:auto}
table{width:100%;border-collapse:collapse;font-size:12.4px;margin-bottom:10px}
th{background:#f2f7fd;color:#12325b;font-weight:600;text-align:left;padding:6px 8px;border:1px solid #dbe6f3}
td{border:1px solid #dbe6f3;padding:6px 8px;vertical-align:top}
.tag{display:inline-block;border-radius:10px;padding:1px 7px;font-size:11.5px}
.t-p0{background:#fdeaea;color:#b52c2c}.t-p1{background:#fdf0dc;color:#a8641a}.t-p2{background:#e3eefb;color:#1a5fa8}
.t-ok{background:#e2f6ec;color:#0d7a47}
.warn{background:#fff8e6;border:1px solid #f0d080;color:#7a5200;border-radius:8px;padding:9px 12px;font-size:12.4px;margin:8px 0}
.note{background:#eef6ff;border:1px solid #cfe0f2;border-left:4px solid #1a73c9;border-radius:8px;padding:9px 12px;font-size:12.4px;margin:8px 0}
pre{background:#0f2135;color:#d7e6f5;border-radius:9px;padding:12px 14px;font-size:11.5px;line-height:1.6;overflow:auto;max-height:460px;white-space:pre-wrap}
ul.ck{margin:6px 0;padding-left:20px;font-size:12.6px}
/* ===== 首页原型 ===== */
.proto{background:#fff;border:2px dashed #cfe0f2;border-radius:14px;overflow:hidden;margin-top:8px;position:relative}
.toolbar2{background:#12325b;color:#fff;font-size:12.5px;padding:6px 12px;display:flex;gap:14px;align-items:center}
.toolbar2 a{color:#cfe0f2;text-decoration:none}
.mk-nav{display:flex;align-items:center;gap:20px;padding:12px 20px;border-bottom:1px solid #e7eef6;background:#fff}
.mk-nav .lg{font-weight:800;color:#12325b;font-size:17px;letter-spacing:.5px}
.mk-nav .lg small{display:block;font-size:10px;color:#7286a0;letter-spacing:2px;font-weight:500}
.mk-nav .items{display:flex;gap:18px;font-size:14px;color:#33506f;font-weight:600;flex-wrap:wrap}
.mk-nav .items span{position:relative;cursor:default}
.mk-nav .btn{margin-left:auto;background:#1a73c9;color:#fff;padding:8px 16px;border-radius:20px;font-weight:700;font-size:13.5px}
.hero{position:relative;overflow:hidden;background:linear-gradient(135deg,#0b2239 0%,#15406b 48%,#1a73c9 100%);color:#fff;padding:44px 26px 38px}
.hero:before{content:"";position:absolute;inset:0;opacity:.3;
 background-image:linear-gradient(rgba(255,255,255,.5) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.5) 1px,transparent 1px);
 background-size:38px 38px;pointer-events:none}
.hero:after{content:"";position:absolute;right:-90px;top:-150px;width:620px;height:620px;border-radius:50%;
 background:radial-gradient(circle,rgba(90,178,246,.72),rgba(90,178,246,0) 66%);pointer-events:none}
.hero .glow2{position:absolute;left:-140px;bottom:-190px;width:520px;height:520px;border-radius:50%;
 background:radial-gradient(circle,rgba(122,197,255,.34),rgba(122,197,255,0) 70%);pointer-events:none;z-index:1}
.hero>*{position:relative;z-index:2}
.hero .mol{position:absolute;right:34px;bottom:22px;opacity:.5;z-index:1}
@media(max-width:820px){.hero .mol{display:none}}
.hero h1{font-size:36px;line-height:1.26;margin:0 0 8px;color:#fff;letter-spacing:.2px}
.hero .tagline{font-size:16.5px;font-weight:600;color:rgba(191,219,245,.95);margin:0 0 14px;letter-spacing:.3px}
.hero .lead{font-size:14.6px;line-height:1.82;color:rgba(214,231,248,.95);max-width:660px;margin-bottom:20px}
.hero .ctas{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:20px}
.hero .ctas a{background:#fff;color:#12325b;padding:11px 20px;border-radius:24px;font-weight:700;text-decoration:none;font-size:14px}
.hero .ctas a.ghost{background:rgba(255,255,255,.22);color:#fff;border:1.5px solid rgba(255,255,255,.72)}
.hero .facts{display:flex;gap:30px;flex-wrap:wrap;font-size:12.8px;color:#dbeaf9;align-items:flex-start}
.hero .facts div{min-width:132px}
.hero .facts b{display:block;color:#fff;font-size:21px;line-height:1.25;margin-bottom:2px}
.hero .facts span{color:#cfe0f2}
.trust{display:flex;gap:10px;flex-wrap:wrap;padding:14px 20px;background:#f7fafd;border-bottom:1px solid #e7eef6}
.trust span{background:#fff;border:1px solid #dbe6f3;border-radius:20px;padding:5px 13px;font-size:12.5px;color:#33506f}
.sec{padding:26px 20px;border-bottom:1px solid #eef3f9}
.sec h2{border:0;padding:0;font-size:19px;margin:0 0 4px}
.sec .st{color:#7286a0;font-size:13px;margin-bottom:16px}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}
.cd{border:1px solid #dbe6f3;border-radius:12px;padding:16px;background:#fff;transition:.2s}
.cd:hover{box-shadow:0 8px 22px rgba(26,115,201,.12);transform:translateY(-2px)}
.cd .ic{font-size:22px}
.cd h3{margin:6px 0 4px;font-size:16px;color:#12325b}
.cd .cp{font-size:12.5px;color:#1a73c9;font-weight:600;margin-bottom:6px}
.cd p{margin:0 0 10px;font-size:13px;color:#4a6178}
.cd .cl{display:flex;flex-wrap:wrap;gap:6px}
.cd .cl a{font-size:12px;color:#33506f;background:#f2f7fd;border:1px solid #dbe6f3;border-radius:14px;padding:3px 10px;text-decoration:none}
.cd .cl a:hover{border-color:#1a73c9;color:#1a73c9}
.spec td.hl{color:#0d7a47;font-weight:700;text-align:center}
details{border:1px solid #dbe6f3;border-radius:9px;padding:10px 13px;margin-bottom:8px;background:#fbfdff}
details summary{font-weight:600;color:#12325b;cursor:pointer}
details p{margin:8px 0 0;color:#4a6178;font-size:13px}
.mk-foot{background:#0f2138;color:#cfe0f2;padding:26px 22px;font-size:13px}
.mk-foot .cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:18px;margin-bottom:16px}
.mk-foot h4{color:#fff;font-size:13.5px;margin:0 0 8px}
.mk-foot a{display:block;color:#a9c3dd;text-decoration:none;margin-bottom:4px;font-size:12.5px}
.mk-foot .lic{border-top:1px solid #24405c;padding-top:12px;font-size:12px;color:#8fa8c2;display:flex;gap:14px;flex-wrap:wrap}
/* 标注开关 */
.mk{position:relative}
.mk .badge{display:none;position:absolute;top:8px;left:8px;background:#e8912a;color:#fff;font-size:11px;font-weight:700;border-radius:12px;padding:1px 8px;z-index:3}
.mk .mnote{display:none;background:#fff8e6;border-top:1px solid #f0d080;color:#7a5200;font-size:12.2px;padding:8px 20px}
body.annot .mk .badge{display:inline-block}
body.annot .mk .mnote{display:block}
.anno-toggle{position:fixed;right:16px;bottom:96px;z-index:80;background:#e8912a;color:#fff;border:0;border-radius:22px;padding:10px 16px;font-size:13.5px;font-weight:700;cursor:pointer;box-shadow:0 6px 18px rgba(232,145,42,.4)}
.__EDITCSS__
"""

def esc(t):
    return H.escape(str(t), quote=False)

# 审计表
audit_rows = ''.join('<tr><td><b>%s</b></td><td>%s</td><td>%s</td></tr>' % (esc(a[0]), esc(a[1]), esc(a[2])) for a in AUDIT)
# 待确认
todo_rows = ''.join('<li>%s</li>' % esc(t) for t in TODO_DATA)
# 业务卡
biz_blocks = []
for ic, name, cats, desc, links in BUSINESS:
    chips = ''.join('<a href="/catalogue/%s">%s</a>' % (l, l) for l in links)
    biz_blocks.append(
        '<div class="mk"><span class="badge">内链枢纽</span><div class="cd"><div class="ic">%s</div>'
        '<h3>%s</h3><div class="cp">%s</div><p>%s</p><div class="cl">%s<a href="/catalogue/%s">全部 ›</a></div></div>'
        '<div class="mnote">作用：把首页流量按业务线分流到品类页，形成「首页→板块→品种→货号」的内链骨架；'
        '同时与 JSON-LD ItemList 呼应，让 AI 理解业务结构。</div></div>'
        % (ic, esc(name), esc(cats), esc(desc), chips, name))
biz_html = ''.join(biz_blocks)
# 场景卡
scene_html = ''.join(
    '<div class="mk"><span class="badge">GEO 场景页入口</span><div class="cd"><h3>%s</h3><div class="cp">%s</div><p>%s</p>'
    '<div class="cl"><a href="/solutions/%s">%s</a></div></div>'
    '<div class="mnote">作用：按客户类型（而非产品）组织内容，命中「怎么做 X」「X 用什么试剂」类搜索与 AI 提问；'
    '每张卡对应一个解决方案页，是 GEO 最容易被引用的页面类型。</div></div>'
    % (esc(s[0]), esc(s[1]), esc(s[2]), esc(s[0]), esc(s[3])) for s in SCENES)
# 技术平台
plat_html = ''.join('<div class="cd"><h3>%s</h3><p>%s</p></div>' % (esc(p[0]), esc(p[1])) for p in PLATFORM)
# 规格表
spec_html = ''.join('<tr><td><b>%s</b></td><td>%s</td><td class="hl">%s</td><td class="hl">%s</td><td>%s</td></tr>'
                    % (esc(r[0]), esc(r[1]), esc(r[2]), esc(r[3]), esc(r[4])) for r in SPEC_ROWS)
# FAQ
faq_html = ''.join('<details%s><summary>%s</summary><p>%s</p></details>' % (' open' if i == 0 else '', esc(q), esc(a))
                   for i, (q, a) in enumerate(FAQ))
# 导航
nav_html = ''.join('<span>%s ▾</span>' % n[0] if n[1] else '<span>%s</span>' % n[0] for n in NAV)
# JSON-LD
ld1 = H.escape(__import__('json').dumps(JSONLD['org'], ensure_ascii=False, indent=2))
ld2 = H.escape(__import__('json').dumps(JSONLD['website'], ensure_ascii=False, indent=2))
ld3 = H.escape(__import__('json').dumps(JSONLD['itemlist'], ensure_ascii=False, indent=2))
ld4 = H.escape(__import__('json').dumps(JSONLD['faq'], ensure_ascii=False, indent=2))

HTML = """<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>biori.com 首页改版方案（审计 + 原型 + 技术实现）</title>
<style>__CSS__</style>
<script>__EDITJS__</script></head><body>
<div class="page">
<div class="hd">__LOGO__
<div class="nm">BIORI BIOTECH<small>宝锐生物 · 官网改版</small></div>
<div class="rt">制表 __TODAY__<br>用途：首页改版方案（原型+规范）</div></div>

<h1 class="doc">biori.com 首页改版方案</h1>
<div class="sub">基于 __TODAY__ 对现有首页的实测审计（导航结构、区块顺序、图片 alt 覆盖率、结构化数据、SEO 字段）与三大业务板块的真实内容改写</div>

<div class="note"><b>一句话</b>：现有首页的问题是「<b>内容对，但机器读不懂、人也抓不到重点</b>」——18 张轮播占满首屏、整页无 H1、title 仅公司名、95% 图片无 alt、结构化数据只有 Organization。改版方向：<b>首屏讲清一句话定位 + 三大业务入口 → 场景分流 → 技术平台背书 → 机器可读的结构化数据与 FAQ</b>。</div>

<h2>① 现有首页实测审计 <em>9 项问题 · 含实测证据</em></h2>
<table><tr><th style="width:22%">问题</th><th style="width:34%">实测证据</th><th>改版要求</th></tr>__AUDIT__</table>

<h2>② 首页原型 <em>可切换「设计标注」查看每个模块的作用</em></h2>
<button class="anno-toggle" onclick="document.body.classList.toggle('annot');this.textContent=document.body.classList.contains('annot')?'隐藏标注':'显示设计标注'">显示设计标注</button>
<div class="proto">

  <div class="toolbar2"><span>☎ {{电话}}</span><a href="/download">下载中心</a><a href="/support/selection">选型指南</a><a href="/en">EN</a><a href="/login">登录</a></div>

  <div class="mk-nav"><div class="lg">BIORI BIOTECH<small>宝锐生物</small></div>
    <div class="items">__NAV__</div><div class="btn">在线咨询</div></div>

  <div class="mk hero"><span class="badge">唯一 H1 + GEO 事实块</span><span class="glow2"></span>
    <h1>分子诊断原料与生命科学试剂供应商</h1>
    <div class="tagline">冻干专用原料 · 耐抑制体系 · 批间一致性</div>
    <div class="lead">为 IVD 企业、生物医药与科研机构提供热启动 Taq、逆转录酶、UNG、可冻干预混液（DG）与直扩系列试剂；支持配方定制、单酶替换与冻干转化。</div>
    <div class="ctas"><a href="/contact">索取样品 / 申请试用</a><a class="ghost" href="/download">下载产品目录</a><a class="ghost" href="/solutions">按场景选型</a></div>
    <div class="facts">
      <div><b>2012</b><span>公司成立（2014 起专攻冻干原料）</span></div>
      <div><b>3 大板块</b><span>诊断原料 · 生命科学 · 生物医药</span></div>
      <div><b>{{货号数}}</b><span>在售货号（口径待确认）</span></div>
      <div><b>ISO9001</b><span>国家高新技术企业 · 专精特新</span></div>
    </div>
    <svg class="mol" width="230" height="150" viewBox="0 0 230 150" fill="none" aria-hidden="true">
      <g stroke="rgba(255,255,255,.75)" stroke-width="1.4">
        <path d="M18 122 C60 62, 96 62, 138 122 S196 62, 220 30" />
        <path d="M30 138 C72 80, 104 80, 146 138 S200 80, 224 52" />
      </g>
      <g fill="rgba(255,255,255,.9)">
        <circle cx="18" cy="122" r="3.4"/><circle cx="60" cy="80" r="3.4"/><circle cx="96" cy="80" r="3.4"/>
        <circle cx="138" cy="122" r="3.4"/><circle cx="196" cy="80" r="3.4"/><circle cx="220" cy="30" r="3.4"/>
        <circle cx="30" cy="138" r="3"/><circle cx="146" cy="138" r="3"/><circle cx="224" cy="52" r="3"/>
      </g>
    </svg>
    <div class="mnote">作用：① H1 唯一且含核心业务词（SEO 主题 + AI 实体识别）；② 副标题给「谁+提供什么+差异化」；③ 三个 CTA 覆盖不同意图（采购/资料/选型）；④ 数字事实块是 GEO 最易被引用的形式（注意：数字口径须市场部确认后再上线）。</div>
  </div>

  <div class="mk trust"><span class="badge">信任信号</span>
    <span>🏅 国家高新技术企业</span><span>🏅 专精特新企业</span><span>🏅 广东省分子诊断原料酶工程技术研究中心</span>
    <span>🏅 ISO9001:2015</span><span>🏅 广东省博士后创新实践基地</span><span>🏅 珠海市企业技术中心</span>
    <div class="mnote">作用：把「资质事实」前置到首屏之下，提升转化与 E-E-A-T；建议每项可点击跳资质页（附证书编号与图片）。</div>
  </div>

  <div class="sec"><h2>三大业务板块</h2><div class="st">按业务线进入对应品类页，快速找到货号与参数</div>
    <div class="cards">__BIZ__</div></div>

  <div class="sec"><h2>按场景选型</h2><div class="st">不确定选哪个货号？按你的客户类型与场景进入</div>
    <div class="cards">__SCENE__</div></div>

  <div class="mk sec"><span class="badge">技术背书</span><h2>技术平台与能力</h2>
    <div class="st">从蛋白质设计到冻干工艺的完整链路，决定了原料的批间一致性与耐抑制表现</div>
    <div class="cards">__PLAT__</div>
    <div class="mk"><div class="mnote">作用：把抽象「技术平台」翻译成客户关心的结果（一致性/耐抑制/冻干稳定），并为每个平台留一个可验证数据位（如批间 CV、37 ℃ 7 天保留率）。</div></div>
  </div>

  <div class="mk sec"><span class="badge">机器可读表格</span><h2>核心产品线速查</h2>
    <div class="st">按需求快速对照（完整参数见各产品页）</div>
    <table class="spec"><tr><th>产品线</th><th>常备规格</th><th>含 UNG</th><th>可冻干（DG）</th><th>典型应用</th></tr>__SPEC__</table>
    <div class="mnote">作用：HTML 表格是搜索引擎与 AI 最易解析的结构；竞品（赛默飞/诺唯赞）均有参数表，宝锐官网首页当前 0 个产品参数表。</div>
  </div>

  <div class="mk sec"><span class="badge">FAQ → FAQPage 结构化数据</span><h2>选型常见问题</h2>
    <div class="st">来自售前与技术支持的高频提问</div>
    __FAQ__
    <div class="mnote">作用：FAQ 是 GEO 命中率最高的模块（可被 AI 直接摘录作答）；本页 6 条问答已同步进 FAQPage JSON-LD，必须与页面可见内容一致。</div>
  </div>

  <div class="sec"><h2>资源下载与技术支持</h2>
    <div class="cards">
      <div class="cd"><h3>📘 产品目录</h3><p>全系列货号、规格与参数（PDF）</p><div class="cl"><a href="/download">下载最新版</a></div></div>
      <div class="cd"><h3>📄 说明书 / COA / SDS</h3><p>按货号检索，随批提供 COA</p><div class="cl"><a href="/download">进入资源中心</a></div></div>
      <div class="cd"><h3>🧪 选型与配方支持</h3><p>提交项目信息，获得候选货号与配方建议</p><div class="cl"><a href="/contact">联系技术支持</a></div></div>
    </div>
  </div>

  <div class="sec"><h2>新闻与技术文章</h2>
    <div class="st">技术文章优先（如「T7 RNA 聚合酶 3.0 性能升级」），为官网带来长尾自然流量</div>
    <div class="cards">
      <div class="cd"><div class="cp">技术资讯</div><h3>性能全面升级｜宝锐 T7 RNA 聚合酶 3.0</h3><p>关键指标对比与适用场景说明。</p><div class="cl"><a href="/news">阅读</a></div></div>
      <div class="cd"><div class="cp">技术资讯</div><h3>直扩系列：免提取 PCR 的体系选择要点</h3><p>植物/组织/血液样本的抑制物与配方取舍。</p><div class="cl"><a href="/article">阅读</a></div></div>
      <div class="cd"><div class="cp">公司新闻</div><h3>冻干原料全系列与冻干工艺支持</h3><p>常温储运方案与冻干前后性能数据。</p><div class="cl"><a href="/news">阅读</a></div></div>
    </div>
  </div>

  <div class="mk mk-foot"><span class="badge">语义化 footer + 内链</span>
    <footer>
    <div class="cols">
      <div><h4>产品中心</h4><a href="/catalogue/Diagnostic-raw-materials">诊断原料</a><a href="/catalogue/Life-science">生命科学</a><a href="/catalogue/Biopharma">生物医药</a><a href="/products">全部货号</a></div>
      <div><h4>解决方案</h4><a href="/solutions/ivd">IVD 试剂厂</a><a href="/solutions/animal">畜牧与宠物疫病</a><a href="/solutions/food">食品安全检测</a><a href="/solutions/research">高校与科研</a></div>
      <div><h4>支持与资源</h4><a href="/download">下载中心</a><a href="/support/faq">常见问题</a><a href="/support/selection">选型指南</a><a href="/contact">技术支持</a></div>
      <div><h4>关于我们</h4><a href="/guan">公司简介</a><a href="/guan#history">发展历程</a><a href="/guan#honor">资质荣誉</a><a href="/news">新闻资讯</a></div>
      <div><h4>联系我们</h4><a href="tel:{{电话}}">☎ {{电话}}</a><a href="mailto:{{邮箱}}">✉ {{邮箱}}</a><span style="font-size:12.5px;color:#a9c3dd">{{地址}}</span></div>
    </div>
    <div class="lic"><span>© 2012-{{年份}} 珠海宝锐生物科技有限公司</span><span>粤ICP备{{备案号}}</span><a href="/sitemap.xml">Sitemap</a><a href="/privacy">隐私政策</a></div>
    </footer>
    <div class="mnote">作用：语义化 &lt;footer&gt; 让爬虫识别站点结构；分栏内链把权重导向解决方案页与下载页；补 sitemap 链接（当前 sitemap.xml 404）。</div>
  </div>

</div>

<h2>③ 结构化数据（首页 4 段，可直接复制） <em>★ 数据以 {{}} 标注处需确认</em></h2>
<div class="note">Organization（含资质 hasCredential）＋ WebSite（含 SearchAction 站内搜索）＋ ItemList（三大板块）＋ FAQPage（选型问答）。</div>
<pre>__LD1__</pre>
<pre>__LD2__</pre>
<pre>__LD3__</pre>
<pre>__LD4__</pre>

<h2>④ SEO 字段与多语言 <em>首页 head 必备</em></h2>
<table>
<tr><th style="width:18%">字段</th><th style="width:40%">填写内容</th><th>说明</th></tr>
<tr><td><code>title</code></td><td>分子诊断原料与生命科学试剂供应商｜BIORI 宝锐生物（冻干专用原料）</td><td>现有 12 字符仅公司名；改为「定位+品牌+差异化」，≤60 英文字符</td></tr>
<tr><td><code>meta description</code></td><td>宝锐生物提供热启动 Taq、逆转录酶、UNG、可冻干预混液（DG）与直扩系列试剂，服务 IVD 企业、生物医药与科研机构；支持配方定制与冻干转化。</td><td>120–160 字符，含核心业务词与差异化</td></tr>
<tr><td><code>canonical</code></td><td>https://www.biori.com/</td><td>现有缺失；首页必须自指，避免参数化 URL 分流权重</td></tr>
<tr><td><code>hreflang</code></td><td>zh-CN / en / x-default 三行互指</td><td>现有缺失；中英站同一页面互指，防重复内容</td></tr>
<tr><td><code>og:*</code></td><td>og:title / og:description / og:image / og:url / og:type=website</td><td>现有 0 个；决定飞书/微信/领英分享卡片效果</td></tr>
</table>

<h2>⑤ 上线前必须确认的数据 <em>避免对外口径不一致</em></h2>
<ul class="ck">__TODO__</ul>

<div class="foot" style="font-size:11px;color:#8a9bb0;border-top:1px solid #dbe6f3;padding-top:8px;margin-top:12px">
审计方法：__TODAY__ 用真实浏览器采集渲染后 DOM（导航/区块/H 标签/图片 alt/内链/CTA）+ 原始 HTML（title/description/canonical/og/hreflang/JSON-LD）；页面文案中的公司事实（2012 年成立、国家高新技术企业、专精特新、省工程技术研究中心、博士后创新实践基地、技术平台清单、三大业务板块、子类目）均取自现有官网公开内容，未做推测；标注 {{}} 的数字与联系方式需市场部确认后填入。本页可编辑，改动自动保存；「⬇ 导出 HTML」生成带数据的独立文件。
</div>
</div>
__TOOLBAR__
</body></html>"""

html = (HTML.replace('__CSS__', CSS)
        .replace('__LOGO__', ('<img src="%s" alt="BIORI BIOTECH 宝锐生物">' % logo) if logo else '')
        .replace('__TODAY__', TODAY)
        .replace('__AUDIT__', audit_rows).replace('__NAV__', nav_html)
        .replace('__BIZ__', biz_html).replace('__SCENE__', scene_html)
        .replace('__PLAT__', plat_html).replace('__SPEC__', spec_html)
        .replace('__FAQ__', faq_html).replace('__TODO__', todo_rows)
        .replace('__LD1__', ld1).replace('__LD2__', ld2).replace('__LD3__', ld3).replace('__LD4__', ld4))
html = apply_edit(html, ls_key='baoyu-homepage-redesign-20260917',
                  file_base='biori首页改版方案',
                  hint_anchor='<h2>① 现有首页实测审计')
open(OUT, 'w', encoding='utf-8').write(html)
print('✅ %s  %.1f KB' % (OUT, os.path.getsize(OUT) / 1024))
print('   审计 %d 项 ｜ 业务卡 %d ｜ 场景卡 %d ｜ 平台 %d ｜ 规格行 %d ｜ FAQ %d ｜ JSON-LD %d 段'
      % (len(AUDIT), len(BUSINESS), len(SCENES), len(PLATFORM), len(SPEC_ROWS), len(FAQ), 4))
print('   宏残留:', [x for x in ['__CSS__', '__EDITJS__', '__AUDIT__', '__NAV__', '__BIZ__', '__SCENE__', '__PLAT__', '__SPEC__', '__FAQ__', '__TODO__', '__LD1__', '__LD2__', '__LD3__', '__LD4__', '__TOOLBAR__', '__LOGO__', '__TODAY__'] if x in html])


# ══════════ 附加产出：开发可直接使用的独立原型页 ══════════
import json as _json
_i = html.index('<div class="proto">'); _j = html.index('</div>\n\n<h2>③')
proto = html[_i + len('<div class="proto">'):_j]

real_ld = '\n'.join(
    '<script type="application/ld+json">\n%s\n</script>' % _json.dumps(v, ensure_ascii=False, indent=2)
    for v in (JSONLD['org'], JSONLD['website'], JSONLD['itemlist'], JSONLD['faq']))

STANDALONE_HEAD = """<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- ★ SEO：标题按「定位｜品牌（差异化）」公式；≤60 字符 -->
<title>分子诊断原料与生命科学试剂供应商｜BIORI 宝锐生物（冻干专用原料）</title>
<meta name="description" content="宝锐生物提供热启动 Taq、逆转录酶、UNG、可冻干预混液（DG）与直扩系列试剂，服务 IVD 企业、生物医药与科研机构；支持配方定制、单酶替换与冻干转化。">
<link rel="canonical" href="https://www.biori.com/">
<!-- ★ 多语言：中英站同一页面互指，避免重复内容 -->
<link rel="alternate" hreflang="zh-CN" href="https://www.biori.com/">
<link rel="alternate" hreflang="en" href="https://www.biori.com/en/">
<link rel="alternate" hreflang="x-default" href="https://www.biori.com/">
<!-- ★ 分享卡片：飞书/微信/领英 -->
<meta property="og:type" content="website">
<meta property="og:title" content="分子诊断原料与生命科学试剂供应商｜BIORI 宝锐生物">
<meta property="og:description" content="热启动 Taq、逆转录酶、UNG、可冻干预混液（DG）与直扩系列试剂；支持配方定制与冻干转化。">
<meta property="og:url" content="https://www.biori.com/">
<meta property="og:image" content="https://www.biori.com/upload/og-home.jpg">
<meta property="og:site_name" content="宝锐生物 BIORI BIOTECH">
<meta name="twitter:card" content="summary_large_image">
<style>__CSS__
/* 独立原型：去掉方案稿的虚线框 */
.proto{border:0;border-radius:0}
.mk .badge,.mk .mnote{display:none!important}
</style>
__REALLD__
<script>__EDITJS__</script></head><body class="standalone">"""

standalone = (STANDALONE_HEAD
              .replace('__CSS__', CSS).replace('__REALLD__', real_ld)
              )
standalone += '<div class=\"proto\">' + proto + '</div>\n__TOOLBAR__\n</body></html>'
# 注入可编辑层（与方案稿同一套）
standalone = apply_edit(standalone, ls_key='baoyu-homepage-proto-20260917',
                        file_base='biori首页原型',
                        container='.proto',
                        hint_anchor='<div class="toolbar2">')
# PROTO 段里含 .mnote 等标签，独立版已隐藏
OUT2 = os.path.join(ROOT, '工具/biori首页原型_独立可上线版_20260917.html')
open(OUT2, 'w', encoding='utf-8').write(standalone)
print('✅ %s  %.1f KB' % (OUT2, os.path.getsize(OUT2) / 1024))
print('   真实 head：title/description/canonical/hreflang×3/og×6 ｜ JSON-LD %d 段（真 script）' % len(real_ld.split('<script')))
