# 袁了凡 · 立命长卷（2.5D 等距版）交付说明

交付日期：2026-10-25  
版权：© 2026 Creative by 紫苏子ACG

## 一、成品入口

- 全片长卷（真实滚动同步）：https://zisuzi-liaofan-iso.pages.dev/
- 公众号 375px 预览＋一键复制：https://zisuzi-liaofan-iso.pages.dev/snippet-preview
- 史料与取舍：https://zisuzi-liaofan-iso.pages.dev/SOURCES.txt

## 二、规格

- 18 屏独立 SVG，每屏宽 750px，总高 17,824px。
- 高度序列：1120, 960, 960, 1024, 960, 960, 1024, 960, 1024, 960, 960, 1024, 960, 960, 1024, 1024, 960, 960。
- 45°/30° 等距投影；建筑、屋顶、台基、墙体、室内剖面、器物、地貌均有体块与接地投影。
- 独立 SMIL，无外链字体、无渐变依赖。
- 每屏版式独立，没有固定中线、统一事件卡、统一页脚。

## 三、命线：最底层 + 右纸边曲线

### 1. 层级

- 路径层插在 `<!--ART_BEGIN-->`，即 **背景纸纹之后、所有地台/铺装/建筑/人物/器物之前**。这是整幅画面的最底层，任何 art 元素都会盖住它。
- 路径不再穿过模型内部，也不再左右交替做固定支架；统一走 **右侧纸面外边距**。正文、标题、脚注、右侧竖排标签全部在 x=640 左侧，命线在 x=662–742 之间，互不相交。
- 编号印、年份胶囊、纸色光晕环留在顶层，作为可读的事件标记；路径本身在最底层。
- 路径为双轨朱砂带：14px 纸色光晕、8.2px 外晕、5.2px 朱砂主体、1.5px 纸色中缝。
- 上下接缝以 14px 垂直短桥收口，17 条接缝逐像素检查仍为 `max_channel_diff = 0`。

### 2. 轨迹变化

- 18 屏使用连续贝塞尔曲线，节点高度按 `NODE_FRAC` 表逐屏变化（44%–58% 画布高），摆向左右交替；不再有直角折线或固定“支架”。
- 节点高度与曲线方向不同，读者无法凭上一屏预判下一屏轨迹；但始终不出右纸边安全区。
- 节点印固定在 x=702，年份胶囊在左侧，保持可读性；曲线在 662–742 内摆动。

### 3. 滚动同步

- **全片页是真的跟随滚动，而且是单线依次推进**：页面 JS 先找出当前激活屏（最后一屏 top ≤ 38% 视口高的屏），只让这一屏生长；上一屏强制完成，下一屏保持未开始。这样不会出现“第一屏还没走完，第二屏已经走完”。
- 每屏用 `<object type="image/svg+xml">` 承载，JS 读取 `getBoundingClientRect()`，把滚动进度换算为 `stroke-dashoffset`，直接写进 SVG 的 `[data-route-draw]` 路径。
- 激活屏公式：`p = (0.38 * vh - top) / (height * 0.92)`；第一屏从 `0.06 + scrollY/(height*0.9)` 起笔。
- **微信正文里的 `<img>` 无法读取页面滚动百分比**。公众号正文版本保留 SMIL 逐屏生长，时长 6.5s linear，作为可用近似；真正的逐像素滚动同步以全片页为准。

## 四、2.5D 遮挡修正

- **第 10 屏宝坻县署**：左厢房改为先画、正堂后画，修正“后排正堂压前排厢房”的错序；门口差役从门洞内移到门外，消除人物穿门框；右侧“方志/县署”标签左移到 x=640，命线不再穿字。
- **第 2 屏父丧**：两名人物前移到地台前沿，避开墙体和门框。
- **第 7 屏科场**：前景人物移出桌案与地台交界，避免下半身被桌案切穿。
- **第 12 屏军前**：四名士兵移出门洞、栅栏与帐篷边缘，站到前景空地。
- **第 14 屏四训**：父亲从书案后方移到书案侧旁，人物与桌案不再互相穿插。
- 所有人物的脚底投影改为双层接地影（10×3.8 + 4.6×1.5），增强踩地感；门框/桌案按约 1.5 倍安全间距重新落位。
- 页脚只保留 `© 2026 Creative by 紫苏子ACG`，删除说明性冗余文字。

## 五、验收结果

### 本地与结构

- 严格 XML：18/18 通过。
- 文字越界：0。
- 正文重叠：0。
- 17 条接缝逐像素检查：17/17，`max_channel_diff = 0`。
- 18 屏均含且仅含一个 `ART_BEGIN` 注入点，路径层全部成功注入。

### 线上

- 18/18 SVG：HTTP 200、`image/svg+xml`、严格 XML 解析通过。
- `/`、`/snippet-preview`、`/SOURCES.txt`：HTTP 200。
- 390px 全片页：18/18 object 加载完成，`blankHeights = 0`，`scrollWidth = innerWidth = 390`。
- 滚动同步实测（第 5 屏）：`top = 204px` 时 `stroke-dashoffset = 0.746358`；再滚动 250px 后 `top = -46px`、`stroke-dashoffset = 0.201995`。数值随滚动连续变化。
- 单线依次推进实测：第 1 屏激活时，上一屏 offset 已为 0（完成），当前屏 offset 0.981863（刚开始），下一屏 offset 为 1（未开始）。
- 精确 375px 预览：`scrollWidth = innerWidth = 375`，无横向溢出。
- 公众号源预览：初始懒加载 2/18，逐屏滚完 18/18；所有图片自然宽度 750。
- 一键复制：`text/plain`＋`text/html`；18 个 section、18 个 img、18 个 `data-src`；运行时 `src` 泄漏 false。
- 控制台错误 0，失败请求 0。

### 动态两帧

- 场景帧：红色像素 3,221 → 15,338；确认 SMIL 场景在动。
- 命线单独帧：红色像素 381 → 5,754；差异 9,693 像素，确认 6.5s 回退生长有效。
- 证据：`verification/live/route-growth-a.png`、`route-growth-b.png`、`verification/route-growth.svg`、`route-growth.json`。

### 仍需人工实测

- 微信后台 `mp.weixin.qq.com` 受平台策略限制，自动化无法进入。
- 发布：打开 `/snippet-preview` → 点“一键复制公众号正文” → 公众号编辑器切 HTML 模式粘贴 → 保存 → 重开 → 手机预览。
- headless Chrome 的 375/390 不等于真实微信客户端；最终以公众号“保存 → 重开 → 手机预览”为准。
- 微信正文的命线是逐屏 6.5s 生长，不读取滚动进度；需要真实同步时用全片页。

## 六、文件

- `svg/`：18 个最终独立 SVG。
- `deploy/`：可直接部署的静态站、18 个 assets、公众号粘贴片段、暖纸 375px 预览。
- `work/route.mjs`：右纸边四种曲线、节点高度、双层带与生长参数。
- `work/build.mjs`：`ART_BEGIN` 注入、manifest。
- `work/iso-base.mjs`、`scenes-early.mjs`、`scenes-late.mjs`、`story.mjs`。
- `SOURCES.md`：史料底本、逐句引文、事件表、排除说明。
- `verification/`：18 屏 PNG、联系表、scene-report、seam-report、live-verify、mobile-report、动态两帧。
- `verification/live/mobile-report.json`：375/390 尺寸、18/18 加载、复制状态、第 5 屏滚动同步数值。
- `verification/live/route-growth.json`：命线单独生长测试记录。

## 七、史料口径

沿用 `SOURCES.md`。关键纠偏：袁仁卒于 1546 年七月初四；袁黄生于 1533 年十二月十一日；孔先生标“约 1547”；1567 只写“入贡燕都、留京一年”；宝坻到任为万历十六年六月初九；《劝农书》成于 1591；1594 迁居吴江赵田；卒于万历三十四年七月；追赠尚宝司少卿 1621/1623 两说并列。
