#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""重做技术图表区：3×2 等格统一图卡。
病因：六图原始比例 0.66~2.01（差 3 倍），却给固定高度 + width:100% + object-fit:contain，
      导致高图两侧巨大留白、宽图上下大片留白、行高被最高卡撑歪、图注分隔符混用。
修法：统一图框（等高、等比 contain、统一内边距、浅底）、统一图注（定行高、统一分隔符 ·）、
      取消 f-main/f-tall/f-w/f-wide/f-sm 跨格与差异高度。
"""
import io

P = '/Users/liuxinyuan/Desktop/Hermes输出-工作类/科研2026秋季促销/华南农大海报_20260920/gen_poster.py'
s = io.open(P, encoding='utf-8').read()

# ① 图注文案：分隔符统一为 ·，去掉 "/" 与 "→" 混用；补齐信息量
s = s.replace("('image6', 'main', '环形 RNA 细胞表达验证', 'circGFP-1 / circGFP-3 / circGFP-4 绿色荧光信号')",
              "('image6', 'std', '环形 RNA 细胞表达验证', 'circGFP-1 · circGFP-3 · circGFP-4 绿色荧光信号')")
s = s.replace("('image1', 'tall', 'mRNA 结构与序列优化要点', '5′ Cap · UTR · CDS · Poly-A tail')",
              "('image1', 'std', 'mRNA 结构与序列优化要点', '5′ Cap · UTR · CDS · Poly-A tail')")
s = s.replace("('image2', 'tall', 'circRNA 制备与成环流程', '前体 RNA → 中间体 → 产物')",
              "('image2', 'std', 'circRNA 制备与成环流程', '前体 RNA · 中间体 · 产物')")
s = s.replace("('image3', 'wide', '转录产物电泳验证', 'M：DNA Maker；1–8：IVT 200–10000 nt')",
              "('image3', 'std', '转录产物电泳验证', 'M：DNA Maker · 1–8：IVT 200–10000 nt')")
s = s.replace("('image4', 'w', '递送体系粒径表征（DLS）', 'Z-Average 90.13 nm · Peak 95.86 nm')",
              "('image4', 'std', '递送体系粒径表征（DLS）', 'Z-Average 90.13 nm · Peak 95.86 nm')")
s = s.replace("('image5', 'w', '形貌观察', '显微记录')",
              "('image5', 'std', '形貌观察', '显微形貌记录（TEM 视角）')")

# ② 图卡 CSS：统一图框 + 定高图注
old_css = """  .figs { display:grid; grid-template-columns:repeat(4,1fr); grid-auto-rows:min-content; gap:2.2mm; }
  .fig { border:1px solid #dbe6f0; border-radius:2.5mm; overflow:hidden; background:#fff; display:flex; flex-direction:column; }
  .fig img { width:100%; display:block; object-fit:contain; background:#fff; }
  .fig .cap { padding:1.1mm 1.8mm 1.2mm; border-top:1px solid #eef3f8; }
  .fig .cap .t { font-size:7.4pt; font-weight:800; color:#0a3d62; }
  .fig .cap .s { font-size:6.3pt; color:#6b7b8a; margin-top:.4mm; line-height:1.3; }
  .fig.f-main { grid-column:span 2; }      /* 主视觉占 2 格 */
  .fig.f-main img { height:43.5mm; }
  .fig.f-tall img { height:43.5mm; }
  .fig.f-w img { height:27mm; }
  .fig.f-wide { grid-column:span 2; }
  .fig.f-wide img { height:27mm; }
  .fig.f-sm img { height:43.5mm; }
  .fig.f-sm { grid-column:span 1; }"""
new_css = """  /* 统一图卡：3 列 × 2 行，每格等高、图片等比 contain、内边距一致 */
  .figs { display:grid; grid-template-columns:repeat(3,1fr); gap:2.6mm; }
  .fig { border:1px solid #dbe6f0; border-radius:2.5mm; overflow:hidden; background:#fff;
         display:flex; flex-direction:column; }
  .fig .box { height:__FIGBOX__mm; background:#f7fbff; border-bottom:1px solid #eef3f8;
              display:flex; align-items:center; justify-content:center; padding:1.6mm; }
  .fig .box img { max-width:100%; max-height:100%; width:auto; height:auto; display:block; }
  .fig .cap { padding:1.2mm 2mm 1.3mm; display:flex; flex-direction:column; }
  .fig .cap .t { font-size:7.5pt; font-weight:800; color:#0a3d62; line-height:1.25;
                 height:3.7mm; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }
  .fig .cap .s { font-size:6.4pt; color:#6b7b8a; line-height:1.3; margin-top:.6mm;
                 height:3.3mm; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }"""
assert old_css in s, '图卡 CSS 未命中'
s = s.replace(old_css, new_css, 1)

# ③ 图卡 DOM：图片包进 .box，去掉差异类
old_dom = ("        figs += ('<div class=\"fig f-%s\"><img src=\"%s\" alt=\"%s\"><div class=\"cap\"><div class=\"t\">%s</div>'\n"
           "                 '<div class=\"s\">%s</div></div></div>' % (cls, IMG[int(key.replace('image', ''))], _html.escape(t), _html.escape(t), _html.escape(s)))")
new_dom = ("        figs += ('<div class=\"fig\"><div class=\"box\"><img src=\"%s\" alt=\"%s\"></div>'\n"
           "                 '<div class=\"cap\"><div class=\"t\">%s</div><div class=\"s\">%s</div></div></div>'\n"
           "                 % (IMG[int(key.replace('image', ''))], _html.escape(t), _html.escape(t), _html.escape(s)))")
assert old_dom in s, '图卡 DOM 未命中'
s = s.replace(old_dom, new_dom, 1)

io.open(P, 'w', encoding='utf-8').write(s)
print('  ✅ 图卡已改为统一 3×2 网格（图框高度用 __FIGBOX__ 待定，先按 36mm 试）')
