diff --git a/data/page-catalog.js b/data/page-catalog.js
index b543a46..cf57679 100644
--- a/data/page-catalog.js
+++ b/data/page-catalog.js
@@ -1,11 +1,6 @@
// 全量视觉交付的本地页面目录:只保存页面内容与状态,样式由 ModulePage 的六类母版统一维护。
export const pageCatalog = {
- a03: { number: 'A-03', title: '手机验证', subtitle: '验证手机号,守护家谱记忆', template: 'auth', fields: ['手机号', '验证码'], action: '验证并继续', note: '验证码服务待接入' },
- a04: { number: 'A-04', title: '注册账号', subtitle: '创建属于你的家谱账号', template: 'auth', fields: ['手机号', '设置密码', '确认密码'], action: '提交注册', note: '注册服务待接入' },
- a05: { number: 'A-05', title: '重设密码', subtitle: '通过手机号找回登录凭证', template: 'auth', fields: ['手机号', '验证码', '新密码'], action: '确认重设', note: '密码重设服务待接入' },
- a06: { number: 'A-06', title: '登录状态', subtitle: '账户安全提醒与登录结果', template: 'status', badge: '安', lead: '当前没有需要处理的登录异常', note: '授权取消、账号受限和登录失败会显示在这里', action: '返回登录' },
- g02: { number: 'G-02', title: '我的家谱', subtitle: '等待第一段家族记忆开始', template: 'status', badge: '谱', lead: '你还没有加入任何家谱', note: '创建自己的家谱,或搜索并申请加入家族', action: '搜索家谱' },
g07: { number: 'G-07', title: '搜索结果', subtitle: '为你找到 3 部公开家谱', template: 'list', sections: [['洛阳汤氏家谱', '河南 · 洛阳 · 158 位成员'], ['汝南周氏家谱', '河南 · 周口 · 86 位成员'], ['清河张氏家谱', '河北 · 邢台 · 214 位成员']], action: '申请加入' },
g08: { number: 'G-08', title: '申请加入家谱', subtitle: '留下真实姓名,等待管理员审核', template: 'form', fields: ['真实姓名', '与家谱关系', '申请说明'], action: '提交申请', note: '提交后可在我的申请中查看进度' },
g09: { number: 'G-09', title: '我的申请', subtitle: '查看加入家谱的审核进度', template: 'timeline', sections: [['洛阳汤氏家谱', '审核中 · 已提交于今天'], ['清河张氏家谱', '已通过 · 可进入家谱']], action: '查看申请说明' },
diff --git a/design-qa.md b/design-qa.md
index a18b8ac..96a0862 100644
--- a/design-qa.md
+++ b/design-qa.md
@@ -38,12 +38,42 @@
Evidence: `A02-after-360x800.png`.
Follow-up: remove only the heading cloud if the user finds the top-right decoration busy; do not alter the panel frame or input structure.
+### Iteration 3: A02 本页协议确认
+
+**Findings**
+
+- [P1] 直接进入 A02 时,协议确认以前只是一句“请先在登录引导页阅读并确认协议”,用户无法在当前任务页修正状态。
+ Location: `pages/auth/a02-login.vue`,原 `.agreement-reminder`。
+ Evidence: `docs/design/screens/runtime/2026-07-14/A02-without-agreement-360x800.png`。
+ Fix: 以 A02 卷轴面板内的可点击协议行替换提示;未选中与选中状态分别使用两枚 96×96 透明 PNG,文字和链接保留在 Vue 文字层。
+
+- [P2] Chrome 捕获脚本在选择器出现 300ms 后就截图,A02 图层尚未加载时会产生黑块或过渡状态,不能作为视觉证据。
+ Location: `scripts/capture-chrome-page.js`。
+ Evidence: 本轮已拒绝的半渲染截图;修复后截图均由 `tests/capture-chrome-page-contract.ps1` 约束为“图片资源加载完成且额外稳定等待后再采集”。
+ Fix: 截图脚本等待全部 `document.images` 加载完成,再等待 900ms;新截图逐张打开检查。
+
+### Iteration 4: A02 注册入口与证据隔离
+
+**Findings**
+
+- [P2] 直接进入 A02 的新用户在账号密码与验证码登录之外没有注册路径,页面功能感不完整。
+ Location: `pages/auth/a02-login.vue`,协议行下方。
+ Evidence: 用户审视的 412×915 运行截图与本轮 `A02-register-entry-412x915.png`。
+ Fix: 在协议行下方的既有留白内增加“还没有账号? 注册账号”;仅朱砂色“注册账号”可点,真实跳转到既有 A04 路由,不新增按钮资产或重做 A04。
+
+- [P1] Chrome 对同一路由的 hash 导航会复用 Vue 实例;直接进入 URL 的截图可能继承上一次勾选协议的状态,不能证明初始态。
+ Location: `scripts/capture-chrome-page.js`。
+ Evidence: 导航后 URL 已是无参数 A02,但实际图标仍为 `a02-agreement-checked.png`;整页刷新后才回到未选中图标。
+ Fix: 截图脚本在到达目标 URL 后刷新,并等待 `performance.timeOrigin` 变化,再检查选择器、图片和稳定时间。该顺序由 `tests/capture-chrome-page-contract.ps1` 约束。
+
## Required fidelity surfaces
- Fonts and typography: A02 uses the project’s existing STKaiti/KaiTi hierarchy; current capture keeps the title above form labels and retains readable body copy.
- Spacing and layout rhythm: the larger panel establishes a clear header → title → tab → form → action cadence; 320 × 568 and 360 × 640 intentionally scroll rather than clip the action.
- Colors and visual tokens: cinnabar remains limited to the header, selected Tab, helper action and primary button; antique gold frames and ink-brown body text follow A01/G01.
- Image quality and asset fidelity: the panel is a complete opaque PNG with no generated text, placeholder controls, or CSS-drawn frame; the button remains the approved complete A01 asset.
+- Agreement control: the 96×96 unchecked and checked icons are separate transparent PNGs with transparent corners; A02 does not draw the circle, fill, or checkmark with CSS.
+- Registration entry: the low-emphasis text path follows the agreement row and uses only the existing panel whitespace; it does not compete with the full-surface cinnabar login button or invent a second button asset.
- Copy and content: account and SMS flows retain their original Chinese copy and real input controls; no visible workflow was invented.
## Primary interactions checked
@@ -51,13 +81,14 @@
- Account/password state captured at 320 × 568, 360 × 640, 360 × 800 and 412 × 915.
- SMS Tab was clicked through the Chrome debugging session and captured at 360 × 800: `docs/design/screens/runtime/2026-07-13/A02-sms-360x800.png`.
- Form submission behavior is covered by the existing A01/A02 contract and was not changed in this visual pass.
+- Direct A02 now opens unchecked at 320×568, 360×640, 360×800 and 412×915; `?agreed=1` opens checked at 360×800. A real Chrome click changed the checked icon back to the unchecked PNG, and an unchecked submit displayed the current-page agreement message.
+- Registration entry was captured at 360×800 and 412×915 after a fresh-document reload; a real Chrome click reached `http://localhost:5173/#/pages/auth/a04-register`.
+- A03 重复验证码页已删除;删除后重新捕获 A02 的手机验证码 Tab(360×800),手机号、验证码、获取验证码、登录、协议和注册入口均完整显示,作为唯一验证码登录入口的运行证据。
-## Open question
+## Acceptance
-There is no user-approved A02 visual mockup at the same route and state. A01 and G01 establish the visual language, but they cannot prove that this exact A02 composition meets the user’s subjective standard.
+用户已于 2026-07-14 确认 A02 账号密码登录、协议确认和注册入口的视觉结果。本页从待验收样板转为冻结的认证模块参考;后续页面可继承其视觉语言,但不能改动 A02 可见效果。
## Final result
-final result: blocked
-
-Blocker: wait for the user’s visual approval of the captured A02 account-password state before treating it as the final authentication module sample or propagating it to A03–A05.
+final result: accepted
diff --git a/docs/design/2026-07-14_页面与状态合并审计.md b/docs/design/2026-07-14_页面与状态合并审计.md
new file mode 100644
index 0000000..e6afbe4
--- /dev/null
+++ b/docs/design/2026-07-14_页面与状态合并审计.md
@@ -0,0 +1,73 @@
+# 页面与状态合并审计
+
+> 审计日期:2026-07-14
+> 结论状态:G02→G01、G04→G03 已获用户授权并完成实施;其余四项仍是待实施建议。
+
+## 1. 审计范围与证据
+
+- 审计时 `pages.json` 实际登记 58 条路由;用户确认后已依序删除 G02、G04、G07 独立路由,当前由 `tests/full-page-visual-contract.ps1` 约束为 **55 条路由**。
+- G02 原先替换的是 `pages/genealogy/g02-empty-genealogies` 通用壳;该路由与 G01 的空态重复,现已收敛为 G01 的 `?state=empty`,不再进入独立页面验收。
+- 已在本轮重新捕获并审视 A01、A02、A04、A05、A06、G01 的 360×800 真实运行图:`screens/runtime/2026-07-14/route-audit/accepted-route-audit-360x800.png`。
+- G01 源码在 `hasGenealogies` 的 `v-else` 分支拥有“新建家谱/搜索并申请加入”两条动作;现已由 `forceEmptyState` 统一所有权。默认态前后对比为 `screens/runtime/2026-07-14/G01-default-before-after-360x800.png`,空状态为 `G01-empty-after-360x800.png` 与 `G01-empty-after-412x915.png`,均已获用户审美确认。
+- 其余 40 个仍渲染 `ModulePage` 的路由尚无独立视觉实现;其合并判断依据目前是规划中的任务语义、页面中文用途注释与目录状态,不将通用壳截图误当成最终交互。
+
+## 2. 判断标准
+
+保留独立路由,当用户进入的是不同的主任务、需要独立返回历史、可被深链/通知直接打开,或需要承载未保存的完整表单。
+
+合并为同页状态,当差异仅是加载/空/失败/权限、查询前后、同一表单的步骤,或同一详情内的媒体预览与上传结果。状态由页面数据或查询参数驱动,不另建占位路由。
+
+## 3. 已验收页面复核
+
+| 已验收路由 | 结论 | 理由 |
+| --- | --- | --- |
+| A01 启动/登录引导 | 保留独立页 | 品牌入口、微信登录、注册入口与协议确认,和登录表单不是同一步。 |
+| A02 账号登录 | 保留独立页;现有双 Tab 正确 | 账号密码/短信验证码已经在同页状态切换,无需拆为 A03。 |
+| A04 注册账号 | 保留独立页 | 需要完整新用户表单、协议确认与返回链。 |
+| A05 重置密码 | 保留独立页 | 手机验证、验证码与两次密码确认是独立安全任务。 |
+| A06 登录状态 | 保留一个路由;现有六状态正确 | `normal/failed/restricted/register-pending/wechat-*` 已在同页状态配置中,未为每种错误新增页面。 |
+| G01 我的家谱 | 保留根页;合并 G02 | 已具备列表、加载和空态分支,G02 不应是第十二个家谱路由。 |
+
+结论:已验收页面中没有需要为了减少页面而合并的认证页;A02 与 A06 已经是正确的“同页多状态”实现。唯一明确重复的是 G02→G01。
+
+## 4. 全量路由建议
+
+| 模块 | 现有路由/单元 | 保留为独立任务 | 合并为同页状态 | 路由数变化 |
+| --- | ---: | --- | --- | ---: |
+| 认证 | 5 | A01、A02、A04、A05、A06 | A02 Tab;A06 六状态均保留在各自页面内部 | 5 → 5 |
+| 家谱 | 9 | G01、G03、G05、G06、G08、G09、G10、G11、G12 | 已完成 G07→G06 搜索结果/无结果收敛 | 9 → 9 |
+| 世系树 | 8 | T01、T03、T04、T05、T06、T07 | T02→T01 的横屏/空/加载失败状态;T08→T03 的已故/隐私/无权状态 | 8 → 6 |
+| 家族内容 | 10 | F01、F02、F03、F04、F05、F06、F07、F08、F10 | F09→F08 的图片预览/上传/失败状态;F03 评论/删除确认和 F10 服务未开放也只作本页状态 | 10 → 9 |
+| 人物与礼仪 | 11 | R01--R11 | R02 编辑、R04 新增/详情/删除确认、R07 新建/编辑均已应作为各自路由内部状态 | 11 → 11 |
+| 消息 | 2 | N01、N02 | N01 空态、N02 已读均为内部状态 | 2 → 2 |
+| 个人中心 | 10 | M01--M10 | M01 登录态、M03 安全态、M09 空订单均为内部状态;M04/M05 保持独立,尤其 M05 符合用户已确认的“安全设置按钮跳转绑定手机号页面” | 10 → 10 |
+| **总计** | **55** | | **尚余 3 个重复路由合并** | **55 → 52** |
+
+## 5. 建议的 52 条路由主表
+
+### 合并清单(高置信)
+
+1. 已删除 `G07` 路由;G06 同页管理初始搜索、结果列表与无结果,点选后进入 G08。G06 截图与自动验证已完成,等待用户审美确认。
+2. 删除 `T02` 路由;T01 同页管理树正常态、小屏横屏提示、无成员、加载与失败。
+3. 删除 `T08` 路由;T03 同页管理正常成员、已故、隐私隐藏、无权限。T07 仅保留目录和搜索结果。
+4. 删除 `F09` 路由;F08 同页管理照片墙、预览、选择上传、上传中、失败重试。
+
+### 暂不合并的边界
+
+- 不把 A01/A02、A04/A05、M04/M05 合成万能认证/安全页:这些是不同主任务,且 M05 的独立跳转是用户已确认的产品要求。
+- 不把 G08/G09 合并:一次申请表单与“我的全部申请记录”是不同任务和信息密度。
+- 不把 T04/T06、F02/F06、R03/R05/R08--R11 合并:对象、数据结构与返回历史不同;可复用表单组件,但不应强行共享一个路由。
+- F10 是否并入 F01 的媒体 Tab 不足以从当前规划判断,暂保留 F10 路由;待家族首页信息架构定稿后再评估,不计入 52 的高置信精简。
+
+## 6. 已完成的 G02、G04、G07 收敛
+
+G02 不进入独立视觉验收。用户已授权实施后,独立页面、G02 契约/冒烟测试、专属截图与“等待验收”文档已删除;最终 ImageGen 面板已改名为 `g01-empty-panel.png`,归属 G01 `state=empty`,现已获用户确认。G04 也已删除;其字段、校验与真实保存行为归属 G03 `step=ancestor`,并已获用户继续授权通过。G07 也已删除;公开检索的初始、结果和无结果均归属 G06,结果点选只进入 G08。`tests/g01-empty-state-contract.ps1`、`tests/g03-create-flow-contract.ps1`、`tests/g06-search-flow-contract.ps1` 与对应 Chrome 冒烟测试保护三条收敛链路;G01 默认态前后对比和 G06 前后对比证明已验收状态没有可见回退,G06 本身仍待用户审美确认。
+
+## 7. 推荐执行顺序(G06 三态等待审美确认)
+
+1. G02→G01、G04→G03、G07→G06 已完成,路由总数已从 58 变为 55;G01 两种状态与 G03 双步骤已获用户确认,G06 三态等待审美确认。
+2. 用户已授权连续推进;下一项实施 T02→T01,路由数变为 54。
+3. 在世系树完成 T01、T03 的独立设计时同步吸收 T02、T08,不先为状态壳单独生成资产。
+4. 在相册 F08 设计时同步吸收 F09;其余模块按“先任务页、后状态”推进。
+
+除已获用户确认的 G02→G01 外,未经用户确认,本审计不改动其余路由、已验收页面或现有未提交内容。
diff --git a/docs/design/A01_启动登录引导_设计记录.md b/docs/design/A01_启动登录引导_设计记录.md
index 85e0635..fc35188 100644
--- a/docs/design/A01_启动登录引导_设计记录.md
+++ b/docs/design/A01_启动登录引导_设计记录.md
@@ -1,6 +1,6 @@
# A-01 启动 / 登录引导设计记录
-> 状态:A-01 文字注册入口方案、四尺寸静态验收、本地 UI 与 412 × 915 运行时视觉基准已完成并获用户验收;A-02 双标签本地 UI 已完成。协议页去向、A-03 至 A-06 的设计、认证接口与 Android 全尺寸回归验收仍未完成,D2 继续进行中。
+> 状态:A-01 文字注册入口方案、四尺寸静态验收、本地 UI 与 412 × 915 运行时视觉基准已完成并获用户验收;A-02 双标签本地 UI 已完成并获用户验收。A-03 已删除;协议页去向、A-04 至 A-06 的设计、认证接口与 Android 全尺寸回归验收仍未完成,D2 继续进行中。
>
> 本页设计事实的唯一归档位置为本文件。旧的 `2026-07-13-a01-login-guide-design.md` 与 `2026-07-13-a01-login-guide.md` 仅保留为失效历史,不可作为实现或推进下一页的依据。
@@ -18,7 +18,7 @@
- 标题区保留“家谱 / 为家族留存可传承的记忆”,使用美术锚点中的朱砂家祠红头、暖宣纸、古金云纹、墨褐文字与淡墨建筑/竹影层次。
- 操作区只保留两个大按钮和一个文字入口:朱砂主按钮“登录”、古金描边按钮“微信登录”,以及其下方的“还没有账号?注册账号”。“注册账号”仅为朱砂红可点击文字,不再作为独立大按钮。
- 入口顺序:登录为主入口;微信登录为次入口;注册账号为辅助文字入口。
-- 已勾选协议后,“登录”前往 `A-02`,且 `A-02` 内固定使用“账号密码登录 / 手机验证码登录”双标签切换,默认显示账号密码登录。微信授权中、取消与失败回跳状态仍归 `A-03`,在 A-03 设计完成前当前入口只提示“微信登录功能准备中”。
+- 已勾选协议后,“登录”前往 `A-02`,且 `A-02` 内固定使用“账号密码登录 / 手机验证码登录”双标签切换,默认显示账号密码登录。微信授权取消、失败与受限状态以后归 `A-06`;当前入口继续提示“微信登录功能准备中”,不新增真实授权跳转。
- 注册账号入口仍归 `A-04`;忘记密码仍归 `A-05`。这两页完成设计前,当前入口只提示页面准备中,不伪造跳转。
- 协议必须为用户主动勾选:初始未勾选,可分别打开《家谱用户协议》和《隐私政策》。不得使用“登录即表示同意”或任何默认同意文案;未勾选时登录操作应明确提示用户先确认协议。
@@ -26,7 +26,7 @@
- 页面采用纵向滚动;`320 × 568` 下两个按钮、注册文字和协议行可以滚动,但任一按钮文字、注册文字、协议行和底部内容不得被系统导航区遮挡。
- A-01 的登录与微信功能图标均需采用独立本地透明 PNG;微信标志只使用官方或许可来源的原色透明 PNG,不自行重绘或改色。账号密码与手机号验证码的表单图标归 A-02 设计时确定。
-- A-01 只设计欢迎、入口与协议未勾选提示。账号密码与手机号验证码表单均归 `A-02`,微信授权结果归 `A-03`,注册归 `A-04`,忘记密码归 `A-05`。
+- A-01 只设计欢迎、入口与协议未勾选提示。账号密码与手机号验证码表单均归 `A-02`,微信授权取消、失败与受限结果归 `A-06`,注册归 `A-04`,忘记密码归 `A-05`。绑定手机号以后归个人中心安全设置。
- A-01 正常态必须展示两个按钮、注册文字入口和未勾选协议;点击任一需要授权的入口但未勾选协议时,仅提示“请先阅读并同意相关协议”,不视为用户已同意。
- 页面根容器宽度必须为 100%,不可写死为 `750rpx` 或使用整张效果图。固定设计画布仍以 `750rpx` 为测量基准,运行时由真实 DOM 按当前屏宽响应式还原。
#### 412 × 915 运行时校准表
@@ -52,7 +52,7 @@
| 初始未勾选 | 首次进入 | 两个按钮、注册文字与空复选框 | 留在 A-01 |
| 未同意协议 | 点击登录、微信登录或注册账号 | 提示“请先阅读并同意相关协议”,不跳转、不改变勾选状态 | 留在 A-01 |
| 登录已确认协议 | 点击“登录” | 结束 A-01 引导 | A-02,默认账号密码登录标签 |
-| 微信已确认协议 | 点击“微信登录” | 提示“微信登录功能准备中” | 留在 A-01,等待 A-03 设计完成 |
+| 微信已确认协议 | 点击“微信登录” | 提示“微信登录功能准备中” | 留在 A-01;真实授权取消、失败与受限状态以后归 A-06 |
| 注册已确认协议 | 点击“注册账号”文字 | 提示“注册页面准备中” | 留在 A-01,等待 A-04 设计完成 |
### A-01 资产清单
@@ -73,10 +73,10 @@
- 此结论只验证设计稿与固定栅格,不替代 uni-app 页面实现后的 Android 运行时验收。
- 2026-07-13 用户已验收当前连续背景、完整按钮边框与单行协议区的 `412 × 915` 运行截图,A-01 当前视觉基准标记为完成;本轮不再授权继续微调视觉细节。
- 页面实现阶段仍须按本记录在 Android 实机或同等运行环境复核四个尺寸的安全区、滚动与文字折行。
-- A-01 的协议最终页面去向及 A-03 至 A-06 的设计仍未完成;这些后续范围不影响当前 A-01 视觉基准的验收结论。
+- A-01 的协议最终页面去向及 A-04 至 A-06 的设计仍未完成;A-03 已删除。这些后续范围不影响当前 A-01 视觉基准的验收结论。
## 5. 推进约束
-- `A-01` 与 `A-02` 的本地 UI 已按本记录及实现合同落地;A-02 的最终效果稿与 Android 运行时验收仍待补齐,不能据此推进 A-03。
+- `A-01` 与 `A-02` 的本地 UI 已按本记录及实现合同落地并获用户视觉验收;A-03 已删除,后续仅在 A04--A06 获得明确授权后推进。
- 当前 A-01 视觉基准已完成;后续只在协议页面、认证接口或新页面范围获得明确授权后继续推进。
- 用户已于 2026-07-13 授权落地 A-01 欢迎入口与 A-02 双标签登录页的本地 UI;仍不接接口、不执行真实登录、不改 Android 打包配置。实现细节的唯一所有者见 `docs/superpowers/specs/2026-07-13-a01-a02-static-ui-implementation-design.md`。
diff --git a/docs/design/A02_账号登录_设计记录.md b/docs/design/A02_账号登录_设计记录.md
index 0a1b5e7..efcc0ed 100644
--- a/docs/design/A02_账号登录_设计记录.md
+++ b/docs/design/A02_账号登录_设计记录.md
@@ -1,18 +1,20 @@
# A02 账号登录设计记录
-> 状态:实现与运行时截图已完成,等待用户视觉验收。
-> 路由:`pages/auth/a02-login?agreed=1`
+> 状态:已于 2026-07-14 获用户视觉验收,A02 可见效果冻结。
+> 路由:`pages/auth/a02-login`;A01 已确认协议进入时附带 `?agreed=1`。
> 视觉来源:已验收的 A01 启动/登录引导与 G01 我的家谱。
## 1. 页面任务
-让已确认协议的用户在“账号密码登录”与“手机验证码登录”之间切换并进入家谱。页面只保留本地字段校验、A05 忘记密码跳转与待接入 toast;不新增真实账号、短信、微信或后端逻辑。
+让用户在“账号密码登录”与“手机验证码登录”之间切换并进入家谱。A02 自己提供协议确认:直接进入默认未同意,A01 已确认协议进入时默认已同意;没有账号的新用户可从协议行下方进入既有 A04 注册路由。页面只保留本地字段校验、A04 注册跳转、A05 忘记密码跳转与待接入 toast;不新增真实账号、短信、微信或后端逻辑。
+
+手机号验证码登录只由 A02 的“手机验证码登录”Tab 承接;重复的 A03 页面已于 2026-07-14 删除。绑定手机号以后属于个人中心安全设置,微信授权取消、失败与受限状态以后属于 A06。
## 2. 视觉结构
1. 使用与 A01 同高度的朱砂祠堂头和居中谱印,保证认证入口属于同一品牌场景。
2. 头部下方放置一张完整不透明的卷轴认证面板,而不是普通 CSS 矩形卡;标题、双 Tab、输入、辅助链接和按钮文字都是可编辑的 Vue 内容层。
-3. 面板上部承载任务标题和双 Tab,中部承载两行输入与辅助操作,下部留给原比例朱砂按钮、协议提示与淡墨山水收束。
+3. 面板上部承载任务标题和双 Tab,中部承载两行输入与辅助操作,下部留给原比例朱砂按钮、可点击协议确认行、轻量文字注册入口与淡墨山水收束。
4. 主按钮继续复用 A01 的 `a01-primary-button.png`,显示槽高度为 128rpx;不把约 4.49:1 的皮肤压进旧的 100rpx 矮按钮。
5. 背景山水只出现在认证面板之外和面板底部,保证输入、标签与占位文本的对比度。
@@ -25,6 +27,8 @@
| `static/assets/modules/auth/opaque/a02-login-panel.png` | opaque / 940×1672 | 完整卷轴登录面板,承载纸纹、双金线、角纹、云纹与底部山水;A02 容器 666rpx × 1184rpx。 |
| `static/assets/foundation/opaque/a01-primary-button.png` | opaque / 1877×418 | A02 唯一主操作按钮皮肤,显示槽 128rpx 高。 |
| `static/assets/foundation/transparent/chevron-right.png` | transparent / 96×96 | 返回图标,水平翻转后使用,不再用文字符号或 CSS 圆框。 |
+| `static/assets/modules/auth/transparent/a02-agreement-unchecked.png` | transparent / 96×96 | A02 本页未同意协议图标;四角透明,不以 CSS 圆环代替。 |
+| `static/assets/modules/auth/transparent/a02-agreement-checked.png` | transparent / 96×96 | A02 本页已同意协议图标;四角透明,不以文字勾号或 CSS 底色代替。 |
认证面板由内置 ImageGen 根据 A01、G01 的已验收截图生成;提示词约束为“完整不透明暖宣纸、双古金线、角纹、边缘淡云竹、中央留给真实控件、无文字无按钮无图标”。生成源保留在 Codex 生成目录,项目运行时只引用上表中的最终资产。
@@ -33,6 +37,9 @@
- 两个 Tab 仍由 `activeTab` 切换;已验证手机验证码 Tab 的真实页面状态。
- 账号、密码、手机号、验证码继续使用原生 `input`,不烘焙到图片。
- A02 不绘制面板或主按钮的 CSS `border`/`background`;对应完整外观由图片资产承担。
+- A02 的 `agreed` 是本页登录提交的唯一协议状态;H5 从当前 `location.hash` 读取 `agreed=1`,Android 从当前 uni 页面选项读取,直接进入默认未同意。
+- 协议行点击可切换两枚透明图标;未同意提交时在本页提示“请先阅读并同意相关协议”,不再要求返回 A01。协议名称仍沿用“协议页面准备中”提示,不新增协议正文路由。
+- 协议行下方显示“还没有账号? 注册账号”;只有朱砂色“注册账号”具有 88rpx 高的文字触点,点击进入既有 `/pages/auth/a04-register`。该入口不依赖协议状态,也不在本轮重做 A04。
- 320 × 568 下可纵向滚动,主按钮位于首屏可达区域;360 × 640、360 × 800、412 × 915 均无横向裁切。
## 5. 运行时证据
@@ -45,11 +52,22 @@
| 改造后,账号密码 Tab,360×800 | `screens/runtime/2026-07-13/A02-after-360x800.png` |
| 改造后,账号密码 Tab,412×915 | `screens/runtime/2026-07-13/A02-after-412x915.png` |
| 改造后,手机验证码 Tab,360×800 | `screens/runtime/2026-07-13/A02-sms-360x800.png` |
+| 本页协议未同意,320×568 | `screens/runtime/2026-07-14/A02-agreement-unchecked-320x568.png` |
+| 本页协议未同意,360×640 | `screens/runtime/2026-07-14/A02-agreement-unchecked-360x640.png` |
+| 本页协议未同意,360×800 | `screens/runtime/2026-07-14/A02-agreement-unchecked-360x800.png` |
+| 本页协议未同意,412×915 | `screens/runtime/2026-07-14/A02-agreement-unchecked-412x915.png` |
+| A01 已确认协议进入,360×800 | `screens/runtime/2026-07-14/A02-agreement-checked-360x800.png` |
+| 含注册入口、本页协议未同意,360×800 | `screens/runtime/2026-07-14/A02-register-entry-360x800.png` |
+| 含注册入口、本页协议未同意,412×915 | `screens/runtime/2026-07-14/A02-register-entry-412x915.png` |
+| A03 删除后,手机验证码 Tab,360×800 | `screens/runtime/2026-07-14/A02-sms-tab-after-a03-removal-360x800.png` |
## 6. 自动检查
-- `tests/a02-asset-alpha-audit.ps1`:A02 卷轴面板存在、尺寸稳定、比例稳定、四角不透明。
-- `tests/a01-a02-ui-contract.ps1`:A02 使用完整卷轴面板与完整主按钮;保留 Tab、原生输入、A05 跳转;拒绝 CSS 面板和 CSS 主按钮外观。
+- `tests/a02-asset-alpha-audit.ps1`:A02 卷轴面板稳定;两枚协议图标均为 96×96、带 Alpha、四角透明且包含不透明图形。
+- `tests/a01-a02-ui-contract.ps1`:A02 使用完整卷轴面板与完整主按钮;协议行、双状态图标、H5/Android 路由初始化和本页提交门禁可审计;保留 Tab、原生输入、A05 跳转;拒绝 CSS 面板、主按钮和协议图标外观。
+- `tests/a02-register-entry-contract.ps1`:A02 注册入口的文案、阅读顺序、88rpx 触点、A04 跳转与目标路由均可审计。
+- `tests/a03-route-removal-contract.ps1`:A03 页面、路由和临时目录条目均不存在;G02/G04 合并后,56 条最终路由与 A02 的唯一短信入口职责同步收敛。
- `tests/compile-audit.ps1`:Vue 结构可编译。
+- `tests/capture-chrome-page-contract.ps1`:Chrome 截图在目标 URL、新文档、页面选择器和全部图片资源就绪后再采集,防止复用状态、黑块或半渲染证据。
-用户未确认前,A02 不得在规划中标记为视觉验收完成,也不得作为其他认证页的最终样板直接复制。
+用户已确认本页视觉结果。后续认证页可参考其已验收的品牌层级与完整位图面板规则,但不得直接复制其登录表单或改变 A02 的可见效果。
diff --git a/docs/design/A04_注册账号_设计记录.md b/docs/design/A04_注册账号_设计记录.md
new file mode 100644
index 0000000..8629e67
--- /dev/null
+++ b/docs/design/A04_注册账号_设计记录.md
@@ -0,0 +1,60 @@
+# A04 注册账号设计记录
+
+> 状态:用户已于 2026-07-14 视觉验收通过;A04 可见效果冻结。
+> 路由:`pages/auth/a04-register`;A02 的注册入口与本页“登录”入口构成新用户与已有用户的双向路径。
+> 视觉来源:已验收的 A01 启动/登录引导、A02 账号登录与 G01 我的家谱。
+
+## 1. 页面任务
+
+让新用户填写手机号、设置密码、确认密码并在本页主动确认协议。A02 是唯一的账号密码/手机验证码登录页;A04 只处理注册,不重复验证码登录。真实注册、短信、微信、协议正文和后端接口均不在本页实现。
+
+## 2. 视觉结构
+
+1. 复用 A02 的朱砂祠堂头与居中谱印,让注册仍属于同一认证场景。
+2. 使用完整不透明 `a02-login-panel.png` 承担卷轴纸纹、双金线、角纹、云纹和底部山水;A04 不绘制 CSS 卡片、边框或按钮表面。
+3. 面板标题下使用既有结饰位图建立分隔,随后是三行真实输入、完整朱砂“注册账号”按钮、协议确认行和“已有账号?登录”回流入口;不保留挤压表单的独立引导文案。
+4. 360 × 800 与 412 × 915 均完整呈现;较小屏幕保留纵向滚动,不允许横向裁切。
+
+## 3. 资产合同
+
+| 路径 | 属性/原图尺寸 | A04 职责 |
+| --- | --- | --- |
+| `static/assets/foundation/opaque/auth-page-paper.jpg` | opaque / 750×1334 | 认证页纸纹底色。 |
+| `static/assets/foundation/opaque/auth-header.png` | opaque / 750×196 | 朱砂祠堂头。 |
+| `static/assets/foundation/transparent/brand-seal.png` | transparent / 240×288 | 头部谱印。 |
+| `static/assets/foundation/transparent/auth-divider-knot.png` | transparent / 160×96 | 标题与表单之间的位图结饰分隔。 |
+| `static/assets/modules/auth/opaque/a02-login-panel.png` | opaque / 940×1672 | A04 完整卷轴注册面板。 |
+| `static/assets/foundation/opaque/a01-primary-button.png` | opaque / 1877×418 | A04 注册主按钮皮肤。 |
+| `static/assets/modules/auth/transparent/a02-agreement-unchecked.png` | transparent / 96×96 | 本页未同意协议图标。 |
+| `static/assets/modules/auth/transparent/a02-agreement-checked.png` | transparent / 96×96 | 本页已同意协议图标。 |
+
+现有认证资产已完整覆盖本页,未使用 ImageGen,也未新增视觉资产。
+
+## 4. 交互合同
+
+- `phone`、`password`、`confirmPassword` 与 `agreed` 都是 A04 本页状态;协议初始未同意。
+- 点击协议行切换两枚透明图标;点击协议名称仅提示“协议页面准备中”。
+- 注册前依次校验协议、11 位手机号、密码非空和两次密码一致;通过后仅提示“注册服务待接入”。
+- “已有账号?登录”真实跳转 `/pages/auth/a02-login`;Chrome 已验证该 URL。
+- A04 已从 `data/page-catalog.js` 移出,不再使用 `ModulePage` 临时母版。
+
+## 5. 运行时证据
+
+| 状态 | 截图 |
+| --- | --- |
+| 改造前,通用表单壳,360×800 | `screens/runtime/2026-07-14/A04-before-360x800.png` |
+| 改造前,通用表单壳,412×915 | `screens/runtime/2026-07-14/A04-before-412x915.png` |
+| 改造后,注册初始态,360×800 | `screens/runtime/2026-07-14/A04-after-360x800.png` |
+| 改造后,注册初始态,412×915 | `screens/runtime/2026-07-14/A04-after-412x915.png` |
+| 平衡修订审视前,360×800 | `screens/runtime/2026-07-14/A04-audit-before-360x800.png` |
+| 平衡修订审视前,412×915 | `screens/runtime/2026-07-14/A04-audit-before-412x915.png` |
+| 平衡修订后,注册初始态,360×800 | `screens/runtime/2026-07-14/A04-after-balance-360x800.png` |
+| 平衡修订后,注册初始态,412×915 | `screens/runtime/2026-07-14/A04-after-balance-412x915.png` |
+
+## 6. 自动检查
+
+- `tests/a04-registration-contract.ps1`:独立页面、完整位图面板/按钮、结饰分隔、长标签留白、三项字段、协议状态、校验、A02 回流和禁止 CSS 伪造均可审计。
+- `tests/compile-audit.ps1`:A04 不使用失效目录条目,Vue 文件与现有本地导入可编译。
+- `tests/full-page-visual-contract.ps1`:A04 保持最终编号路由;G02/G04 合并后全项目共 56 条路由。
+
+用户已于 2026-07-14 确认本页通过视觉验收;后续可审视 A05,但不得改变 A04 可见效果。
diff --git a/docs/design/A05_重置密码_设计记录.md b/docs/design/A05_重置密码_设计记录.md
new file mode 100644
index 0000000..efc7460
--- /dev/null
+++ b/docs/design/A05_重置密码_设计记录.md
@@ -0,0 +1,57 @@
+# A05 重置密码设计记录
+
+> 状态:用户已于 2026-07-14 视觉验收通过;A05 可见效果冻结。
+> 路由:`pages/auth/a05-reset-password`;A02 的“忘记密码”入口进入本页,本页“返回登录”回到 A02。
+
+## 1. 页面任务与边界
+
+让用户通过已绑定手机号和验证码重设登录密码。A05 使用手机号、验证码、新密码、确认新密码四项本页状态,避免在没有两次确认的情况下覆盖密码。
+
+真实短信、验证码下发、账号校验、密码重设接口和后端数据均不在本页实现。“获取验证码”仅提示“验证码功能待接入”;所有字段有效后仅提示“密码重设服务待接入”。
+
+## 2. 视觉结构
+
+1. 复用 A02/A04 已验收的朱砂祠堂头、谱印、宣纸、淡墨山水和完整卷轴认证面板,使重置密码仍属于同一认证场景。
+2. 标题为“重设密码”,副标题说明“验证手机号后重新设置登录密码”,不暴露 A-05 内部编号。
+3. 标题和表单之间使用既有结饰位图;正文依次为手机号、验证码(含文字型获取动作)、新密码、确认新密码、完整朱砂主按钮、完成提示与返回登录入口。
+4. 面板、按钮、页头和结饰均由既有位图提供;CSS 只处理布局、文字、输入与交互状态,不绘制 CSS 卡片或按钮表面。
+
+## 3. 资产合同
+
+| 路径 | 属性/原图尺寸 | A05 职责 |
+| --- | --- | --- |
+| `static/assets/foundation/opaque/auth-page-paper.jpg` | opaque / 750×1334 | 认证页纸纹底色。 |
+| `static/assets/foundation/transparent/auth-ink-scenery.png` | transparent / 750×1334 | 认证页淡墨叠层。 |
+| `static/assets/foundation/opaque/auth-header.png` | opaque / 750×196 | 朱砂祠堂头。 |
+| `static/assets/foundation/transparent/brand-seal.png` | transparent / 240×288 | 头部谱印。 |
+| `static/assets/modules/auth/opaque/a02-login-panel.png` | opaque / 940×1672 | A05 完整卷轴重设面板。 |
+| `static/assets/foundation/opaque/a01-primary-button.png` | opaque / 1877×418 | “确认重设”完整主按钮皮肤。 |
+| `static/assets/foundation/transparent/auth-title-cloud.png` | transparent / 200×120 | 标题右侧祥云。 |
+| `static/assets/foundation/transparent/auth-divider-knot.png` | transparent / 160×96 | 标题与表单之间的结饰。 |
+| `static/assets/foundation/transparent/chevron-right.png` | transparent / 96×96 | 返回动作图标。 |
+
+现有认证资产已完整覆盖本页,未使用 ImageGen,也未新增视觉资产。
+
+## 4. 交互合同
+
+- 空提交先提示“请输入正确手机号”;手机号必须为 11 位,验证码必须为 6 位,密码非空且两次一致。
+- 点击“获取验证码”显示“验证码功能待接入”。
+- 点击“返回登录”真实跳转 `/pages/auth/a02-login`;Chrome 已验证 URL。
+- A05 已从 `data/page-catalog.js` 移出,不再使用 `ModulePage` 临时母版。
+
+## 5. 运行时证据
+
+| 状态 | 截图 |
+| --- | --- |
+| 改造前,通用白卡壳,360×800 | `screens/runtime/2026-07-14/A05-before-360x800.png` |
+| 改造前,通用白卡壳,412×915 | `screens/runtime/2026-07-14/A05-before-412x915.png` |
+| 改造后,重设密码初始态,360×800 | `screens/runtime/2026-07-14/A05-after-360x800.png` |
+| 改造后,重设密码初始态,412×915 | `screens/runtime/2026-07-14/A05-after-412x915.png` |
+
+## 6. 自动检查
+
+- `tests/a05-reset-password-contract.ps1`:独立页面、完整位图面板/按钮、四项字段、验证码动作、校验、A02 回流、目录项移除和禁止 CSS 伪造可审计。
+- `tests/compile-audit.ps1`:A05 不使用失效目录条目,Vue 文件与现有本地导入可编译。
+- `tests/full-page-visual-contract.ps1`:A05 保持最终编号路由;G02/G04 合并后全项目共 56 条路由。
+
+用户已于 2026-07-14 确认本页通过视觉验收;后续可审视 A06,但不得改变 A05 可见效果。
diff --git a/docs/design/A06_登录状态_设计记录.md b/docs/design/A06_登录状态_设计记录.md
new file mode 100644
index 0000000..6ba886e
--- /dev/null
+++ b/docs/design/A06_登录状态_设计记录.md
@@ -0,0 +1,50 @@
+# A06 登录状态设计记录
+
+> 状态:用户已于 2026-07-14 视觉验收通过;A06 可见效果冻结。
+> 唯一路由:`pages/auth/a06-auth-status`;以 `?status=` 表示当前认证状态,不新建状态页面。
+
+## 1. 页面任务与边界
+
+A06 承接认证流程中不能继续进入家谱的结果:登录未完成、登录失败、账号暂时受限、注册尚未完成、微信授权取消和微信授权失败。
+
+没有接入真实账号状态、客服、申诉、微信授权或后端接口。账号受限的“查看帮助”只显示“账号申诉功能待接入”;注册未完成真实跳转 A04;其余主操作与次操作真实跳转 A02。绑定手机号仍属于后续个人中心安全设置页面,本页不承担该功能。
+
+## 2. 状态合同
+
+| `status` 值 | 标题 | 主操作 | 次操作 |
+| --- | --- | --- | --- |
+| `normal`(含未知值回退) | 登录未完成 | 返回登录 → A02 | 无 |
+| `failed` | 登录失败 | 返回登录 → A02 | 无 |
+| `restricted` | 账号暂时受限 | 查看帮助 → 本地提示 | 返回登录 → A02 |
+| `register-pending` | 注册尚未完成 | 继续注册 → A04 | 返回登录 → A02 |
+| `wechat-cancelled` | 微信授权已取消 | 返回登录 → A02 | 无 |
+| `wechat-failed` | 微信授权失败 | 返回登录 → A02 | 无 |
+
+H5 由 `location.hash` 的查询参数读取状态;uni-app 原生端读取当前页 `options`。两端对未知值统一回退 `normal`,避免状态壳无文案或失去下一步。
+
+## 3. 视觉结构与资产
+
+1. 删除通用白卡、CSS 红方徽章和压缩按钮,改为 A02/A04/A05 已验证的“朱砂祠堂头 → 卷轴面板 → 状态说明 → 朱砂操作”的认证节奏。
+2. 状态图形只使用已有透明 `auth-login-outline.png`,避免为每种异常绘制夸张警示符号;文案承担状态区别,朱砂只强调标签与主操作。
+3. 主操作保持完整 `a01-primary-button.png` 位图比例;受限与注册未完成的次操作为低权重朱砂文字,不与主按钮竞争。
+4. 页面壳、面板、按钮、边框、云纹和结饰均由既有位图提供;CSS 只处理布局、文字与点击态。现有资产已完整覆盖需求,因此未调用 ImageGen、未新增资产。
+
+## 4. 运行时审视与证据
+
+| 状态 | 截图 |
+| --- | --- |
+| 改造前通用壳,360×800 | `screens/runtime/2026-07-14/A06-before-360x800.png` |
+| 改造前通用壳,412×915 | `screens/runtime/2026-07-14/A06-before-412x915.png` |
+| `normal` 默认态,360×800 | `screens/runtime/2026-07-14/A06-after-360x800.png` |
+| `normal` 默认态,412×915 | `screens/runtime/2026-07-14/A06-after-412x915.png` |
+| `restricted` 受限态,360×800 | `screens/runtime/2026-07-14/A06-restricted-360x800.png` |
+
+截图审视结论:两个尺寸中,朱砂头图、卷轴框、状态图形、标题/说明、完整主按钮与底部淡墨山水均未被裁切;360×800 的面板底部在首屏内结束,412×915 保留呼吸留白;`restricted` 的次操作保持在主按钮下方且不抢主路径。当前未发现黑块、图片未加载、横向溢出或 CSS 伪造完整表面。
+
+## 5. 自动与交互检查
+
+- `tests/a06-auth-status-contract.ps1`:约束唯一路由、独立页面、六个状态键、状态动作、A02/A04 目标、既有位图资产与禁止 CSS 伪造。
+- `tests/a06-auth-status-runtime-smoke.js`:通过 Chrome DevTools 9222 真实验证默认主操作进入 A02、受限主操作展示本地帮助提示、注册未完成主操作进入 A04。脚本在每次 hash 跳转后刷新文档,以规避 H5 Vue 实例保留上一次状态。
+- `tests/compile-audit.ps1`:确认 A06 不再依赖已移除的目录临时项。
+
+用户已于 2026-07-14 确认本页通过视觉验收;后续可开始 G02,但不得改变 A01、A02、A04、A05、A06、G01 的可见效果。若用户后续指定调整 A06,仍须重新截图、运行上述检查和相关回归。
diff --git a/docs/design/P00_页面结构与资产清单.md b/docs/design/P00_页面结构与资产清单.md
index 1051d01..f420484 100644
--- a/docs/design/P00_页面结构与资产清单.md
+++ b/docs/design/P00_页面结构与资产清单.md
@@ -1,13 +1,13 @@
# P00 页面结构与资产清单
-> 状态:59 条最终编号路由与第一版统一视觉母版已落地;A01/G01 运行时截图回归及全量逐页视觉精修待办。
+> 状态:55 条最终编号路由与第一版统一视觉母版已落地;A01/A02/A04/A05/A06/G01 两种状态与 G03 `create|ancestor` 已验收;G06 已合并 G07 的三态,最新「朱砂题签」候选只完成初始态截图,结果/无结果同版截图与用户审美确认待补。
> 目的:让页面、路由和资产都有唯一、可读、可审计的归属;本文件是 P-00 的执行清单。
## 1. 页面命名规则
最终页面文件遵循 `<页面编号>-<语义名>.vue`:
-- 账户:`a01-entry.vue`、`a02-login.vue`
+- 账户:`a01-entry.vue`、`a02-login.vue`、`a04-register.vue`、`a05-reset-password.vue`、`a06-auth-status.vue`
- 家谱:`g01-my-genealogies.vue`、`g03-create-genealogy.vue`
- 世系:`t01-tree-overview.vue`、`t03-member-profile.vue`
- 家族:`f01-family-feed.vue`、`f02-publish-feed.vue`
@@ -21,12 +21,11 @@
| 当前路由 | 当前可确认用途 | 目标文件 | 处理状态 |
| --- | --- | --- | --- |
| `pages/auth/a01-entry` | A01 启动/登录引导 | `pages/auth/a01-entry.vue` | 已迁移;视觉冻结;完整按钮资产待补 |
-| `pages/auth/a02-login` | A02 账号登录 | `pages/auth/a02-login.vue` | 已迁移;未验收 |
+| `pages/auth/a02-login` | A02 账号登录 | `pages/auth/a02-login.vue` | 已迁移;已验收,视觉冻结 |
| `pages/genealogy/g01-my-genealogies` | G01 我的家谱 | `pages/genealogy/g01-my-genealogies.vue` | 已迁移;视觉冻结 |
-| `pages/genealogy/g03-create-genealogy` | G03 创建家谱 | `pages/genealogy/g03-create-genealogy.vue` | 已迁移;未验收 |
-| `pages/genealogy/g04-first-ancestor` | G04 始祖录入 | `pages/genealogy/g04-first-ancestor.vue` | 已迁移;未验收 |
+| `pages/genealogy/g03-create-genealogy` | G03 创建家谱/始祖录入 | `pages/genealogy/g03-create-genealogy.vue` | `step=create|ancestor`;已获用户验收,视觉冻结 |
| `pages/genealogy/g05-genealogy-overview` | G05 家谱总览 | `pages/genealogy/g05-genealogy-overview.vue` | 已迁移;未验收 |
-| `pages/genealogy/g06-search-genealogies` | G06 公开家谱搜索 | `pages/genealogy/g06-search-genealogies.vue` | 已迁移;未验收 |
+| `pages/genealogy/g06-search-genealogies` | G06 公开家谱搜索/结果/无结果 | `pages/genealogy/g06-search-genealogies.vue` | 已收敛 G07;朱砂题签候选已实现,只有初始态新截图,三态复核与用户审美确认待补 |
| `pages/genealogy/g10-application-review` | G10 管理员入谱审核 | `pages/genealogy/g10-application-review.vue` | 已迁移;未验收 |
| `pages/tree/t01-tree-overview` | T01 世系树总览 | `pages/tree/t01-tree-overview.vue` | 已迁移;未验收 |
| `pages/tree/t03-member-profile` | T03 成员档案 | `pages/tree/t03-member-profile.vue` | 已迁移;未验收 |
@@ -35,7 +34,7 @@
| `pages/notification/n01-message-center` | N01 消息中心 | `pages/notification/n01-message-center.vue` | 已迁移;未验收 |
| `pages/profile/m01-profile-home` | M01 我的首页 | `pages/profile/m01-profile-home.vue` | 已迁移;未验收 |
-上述表仅保留首批迁移的历史背景;当前最终 59 路由、文件存在性和中文编号注释的唯一合同是 `tests/full-page-visual-contract.ps1`。临时 `content-list-skeleton` 已由谱文、相册、礼仪、备忘录和字辈诗最终页面替代并移除。
+上述表仅保留首批迁移的历史背景;当前最终 55 路由、文件存在性和中文编号注释的唯一合同是 `tests/full-page-visual-contract.ps1`。临时 `content-list-skeleton` 已由谱文、相册、礼仪、备忘录和字辈诗最终页面替代并移除。
迁移要求:同一轮更新页面文件、`pages.json`、所有跳转路径、测试和中文文件头注释;未完成全部引用更新时,不得删除旧路径。
@@ -60,8 +59,16 @@ static/assets/
auth/
opaque/
a02-login-panel.png
+ transparent/
+ a02-agreement-unchecked.png
+ a02-agreement-checked.png
genealogy/
opaque/
+ g01-empty-panel.png
+ g03-create-flow-panel.png
+ g06-search-title-strip.png
+ g06-search-input-wide.png
+ g06-search-button.png
transparent/
tree/
opaque/
@@ -79,23 +86,31 @@ static/assets/
| 路径 | 属性/尺寸 | 用途 | 引用位置 | 状态 |
| --- | --- | --- | --- | --- |
-| `foundation/opaque/auth-page-paper.jpg` | opaque / 750×1334 | 认证页纸纹底色 | A01、A02 | 保留 |
-| `foundation/opaque/auth-header.png` | opaque / 750×196 | 认证页红色页头 | A01、A02 | 保留 |
-| `foundation/opaque/page-paper.jpg` | opaque / 852×1846 | 根页宣纸底图 | G01 | 保留 |
+| `foundation/opaque/auth-page-paper.jpg` | opaque / 750×1334 | 认证页纸纹底色 | A01、A02、A04、A05、A06 | 保留 |
+| `foundation/opaque/auth-header.png` | opaque / 750×196 | 认证页红色页头 | A01、A02、A04、A05、A06 | 保留 |
+| `foundation/opaque/page-paper.jpg` | opaque / 852×1846 | 根页宣纸底图 | G01、G06 | 保留 |
| `foundation/opaque/root-header-cinnabar.jpg` | opaque / 720×184 | 根页朱砂页头 | `PageHeader` | 保留 |
-| `foundation/transparent/auth-ink-scenery.png` | transparent / 750×1334 | 认证页淡墨叠层 | A01、A02 | 保留 |
-| `foundation/transparent/auth-title-cloud.png` | transparent / 200×120 | A01 标题左右云纹 | A01 | 保留 |
-| `foundation/transparent/auth-divider-knot.png` | transparent / 160×96 | A01 文案分隔结 | A01 | 保留 |
-| `foundation/opaque/a01-primary-button.png` | opaque / 1877×418 | A01 朱砂主按钮完整皮肤 | A01 | 保留;待运行截图回归 |
+| `foundation/transparent/auth-ink-scenery.png` | transparent / 750×1334 | 认证页淡墨叠层 | A01、A02、A04、A05、A06 | 保留 |
+| `foundation/transparent/auth-title-cloud.png` | transparent / 200×120 | 认证标题右侧云纹 | A01、A02、A04、A05、A06 | 保留 |
+| `foundation/transparent/auth-divider-knot.png` | transparent / 160×96 | 认证标题与正文结饰 | A01、A04、A05、A06 | 保留 |
+| `foundation/opaque/a01-primary-button.png` | opaque / 1877×418 | A01 朱砂主按钮完整皮肤 | A01、A02、A04、A05、A06 | 保留;A01、A02、A04、A05、A06 已验收 |
| `foundation/opaque/a01-secondary-button.png` | opaque / 1881×419 | A01 宣纸次按钮完整皮肤 | A01 | 保留;待运行截图回归 |
-| `modules/auth/opaque/a02-login-panel.png` | opaque / 940×1672 | A02 完整卷轴登录面板,含纸纹、双金线、角纹、云纹与底部山水 | A02 | 保留;待用户视觉验收 |
-| `foundation/transparent/auth-login-outline.png` | transparent / 96×96 | 登录图标 | A01 | 保留 |
+| `modules/auth/opaque/a02-login-panel.png` | opaque / 940×1672 | 认证完整卷轴面板,含纸纹、双金线、角纹、云纹与底部山水 | A02、A04、A05、A06 | 保留;A02、A04、A05、A06 已验收 |
+| `modules/auth/transparent/a02-agreement-unchecked.png` | transparent / 96×96 | 认证未同意协议图标 | A02、A04 协议确认行,叠在卷轴面板上 | 保留;A02、A04 已验收 |
+| `modules/auth/transparent/a02-agreement-checked.png` | transparent / 96×96 | 认证已同意协议图标 | A02、A04 协议确认行,叠在卷轴面板上 | 保留;A02、A04 已验收 |
+| `foundation/transparent/auth-login-outline.png` | transparent / 96×96 | 登录/状态图标 | A01、A06 | 保留 |
| `foundation/transparent/auth-wechat.png` | transparent / 96×96 | 微信图标 | A01 | 保留 |
-| `foundation/transparent/brand-seal.png` | transparent / 240×288 | 品牌谱印 | A01、A02、`PageHeader` | 保留 |
+| `foundation/transparent/brand-seal.png` | transparent / 240×288 | 品牌谱印 | A01、A02、A04、A05、A06、G06、`PageHeader` | 保留 |
| `foundation/transparent/root-header-hall.png` | transparent / 750×300 | 根页祠堂线稿 | `PageHeader` | 保留 |
-| `foundation/transparent/footer-mountain-bamboo.png` | transparent / 750×360 | 根页底部山水竹影 | G01 | 保留 |
+| `foundation/transparent/footer-mountain-bamboo.png` | transparent / 750×360 | 根页底部山水竹影 | G01、G06 | 保留 |
| `foundation/transparent/notice.png` | transparent / 96×96 | 通知图标 | `PageHeader` | 保留 |
-| `foundation/transparent/chevron-right.png` | transparent / 96×96 | 列表右箭头 | `GenealogyCard` | 保留 |
+| `foundation/transparent/chevron-right.png` | transparent / 96×96 | 返回与列表箭头 | A02、A04、A05、A06、`GenealogyCard` | 保留 |
+| `modules/genealogy/opaque/g01-empty-panel.png` | opaque / 1122×1402 | 无家谱空态完整宣纸卡,双金线、角饰、云纹与下沿山水 | G01 `state=empty` | 保留;由 ImageGen 生成,已获用户验收 |
+| `modules/genealogy/opaque/g03-create-flow-panel.png` | opaque / 1122×1500 | 创建流程完整宣纸表单面板,双金线、回纹角饰、云纹与下沿淡墨山水 | G03 `step=create|ancestor` | 保留;由 ImageGen 生成,已获用户验收 |
+| `modules/genealogy/opaque/g06-search-title-strip.png` | opaque / 1122×220 | 朱砂题签完整视觉面,含古金边饰与云纹,不烘焙文字或印玺 | G06 顶部检索题签 | 保留;用户选定 ImageGen 第 3 稿方向,Vue 叠放真实 `brand-seal.png` 与标题文字 |
+| `modules/genealogy/opaque/g06-search-input-wide.png` | opaque / 1120×248 | 宽版独立宣纸输入框完整皮肤,含古金双线与角饰 | G06 真实输入框底层 | 保留;真实原生输入控件叠放其上 |
+| `modules/genealogy/opaque/g06-search-input.png` | opaque / 720×248 | 早期窄版输入框完整皮肤 | 当前无引用 | 已停用;仅因用户要求停止工作而保留,恢复工作后需在引用扫描通过且用户允许时删除 |
+| `modules/genealogy/opaque/g06-search-button.png` | opaque / 300×132 | 独立朱砂搜索按钮完整皮肤,含古金双线与角饰 | G06 真实搜索点击控件底层 | 保留;由 ImageGen 生成,真实点击控件与文本叠放其上 |
| `foundation/transparent/meta-location.png` | transparent / 96×96 | 地点元信息 | G01、`GenealogyCard` | 保留 |
| `foundation/transparent/meta-member.png` | transparent / 96×96 | 成员元信息 | G01、`GenealogyCard` | 保留 |
| `foundation/transparent/meta-admin.png` | transparent / 96×96 | 管理员元信息 | G01 | 保留 |
@@ -110,14 +125,14 @@ static/assets/
| `modules/genealogy/transparent/section-divider.png` | transparent / 720×30 | G01 分区金线 | G01 | 保留 |
| `modules/genealogy/transparent/current-seal-frame.png` | transparent / 144×208 | 当前家谱谱印框 | G01 | 保留 |
| `modules/genealogy/transparent/row-seal-frame.png` | transparent / 112×160 | 列表谱印框 | `GenealogyCard` | 保留 |
-| `modules/genealogy/transparent/create-cloud.png` | transparent / 192×96 | 新建入口云纹 | G01 | 保留 |
+| `modules/genealogy/transparent/create-cloud.png` | transparent / 192×96 | 新建/搜索状态云纹 | G01、G06 | 保留 |
| `modules/genealogy/transparent/add.png` | transparent / 96×96 | 新建入口加号 | G01 | 保留 |
| `modules/genealogy/transparent/shortcut-tree.png` | transparent / 96×96 | 世系图入口 | G01 | 保留 |
| `modules/genealogy/transparent/shortcut-members.png` | transparent / 96×96 | 成员入口 | G01 | 保留 |
| `modules/genealogy/transparent/shortcut-generation-poem.png` | transparent / 96×96 | 字辈诗入口 | G01 | 保留 |
| `modules/genealogy/transparent/shortcut-application.png` | transparent / 96×96 | 审核入口 | G01 | 保留 |
-本轮已迁入 35 项在用资产,删除 24 项运行时零引用的旧副本。A01 的两张完整按钮皮肤由图像生成工具制作,不是设计图裁切;它们的原始比例均约为 4.49:1,并由 A01 页面作为单张底层皮肤引用。旧版设计记录中的历史路径不再是资产依据;后续只按本台账引用和维护。
+本轮已迁入 38 项在用资产,删除 24 项运行时零引用的旧副本。A01 的两张完整按钮皮肤与 G06 检索资产均由图像生成工具制作,不是设计图裁切;G06 不再使用大型检索面板,当前使用朱砂题签、宽版输入框与搜索按钮三张独立位图,页面只叠放真实品牌印、文字与交互控件。旧版设计记录中的历史路径不再是资产依据;后续只按本台账引用和维护。
## 5. 图片属性规则
diff --git a/docs/design/screens/runtime/2026-07-14/A01-agreement-360x800.png b/docs/design/screens/runtime/2026-07-14/A01-agreement-360x800.png
new file mode 100644
index 0000000..69afe69
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A01-agreement-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A02-agreed-360x800-retry.png b/docs/design/screens/runtime/2026-07-14/A02-agreed-360x800-retry.png
new file mode 100644
index 0000000..69cd4fc
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A02-agreed-360x800-retry.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A02-agreement-checked-360x800.png b/docs/design/screens/runtime/2026-07-14/A02-agreement-checked-360x800.png
new file mode 100644
index 0000000..ced31c5
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A02-agreement-checked-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-320x568.png b/docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-320x568.png
new file mode 100644
index 0000000..6e75f02
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-320x568.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-360x640.png b/docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-360x640.png
new file mode 100644
index 0000000..58eb62a
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-360x640.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-360x800.png b/docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-360x800.png
new file mode 100644
index 0000000..72542fa
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-412x915.png b/docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-412x915.png
new file mode 100644
index 0000000..dac2b42
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A02-agreement-unchecked-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A02-reference-360x800-for-a04-audit.png b/docs/design/screens/runtime/2026-07-14/A02-reference-360x800-for-a04-audit.png
new file mode 100644
index 0000000..302a522
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A02-reference-360x800-for-a04-audit.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A02-register-entry-360x800.png b/docs/design/screens/runtime/2026-07-14/A02-register-entry-360x800.png
new file mode 100644
index 0000000..302a522
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A02-register-entry-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A02-register-entry-412x915.png b/docs/design/screens/runtime/2026-07-14/A02-register-entry-412x915.png
new file mode 100644
index 0000000..e9e10b0
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A02-register-entry-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A02-sms-tab-after-a03-removal-360x800.png b/docs/design/screens/runtime/2026-07-14/A02-sms-tab-after-a03-removal-360x800.png
new file mode 100644
index 0000000..e3bfea8
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A02-sms-tab-after-a03-removal-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A02-without-agreement-360x800.png b/docs/design/screens/runtime/2026-07-14/A02-without-agreement-360x800.png
new file mode 100644
index 0000000..69cd4fc
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A02-without-agreement-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A03-before-360x800.png b/docs/design/screens/runtime/2026-07-14/A03-before-360x800.png
new file mode 100644
index 0000000..883ee9a
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A03-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A03-before-412x915.png b/docs/design/screens/runtime/2026-07-14/A03-before-412x915.png
new file mode 100644
index 0000000..1ba7589
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A03-before-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A04-after-360x800.png b/docs/design/screens/runtime/2026-07-14/A04-after-360x800.png
new file mode 100644
index 0000000..a46ea43
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A04-after-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A04-after-412x915.png b/docs/design/screens/runtime/2026-07-14/A04-after-412x915.png
new file mode 100644
index 0000000..7b0b83d
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A04-after-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A04-after-balance-360x800.png b/docs/design/screens/runtime/2026-07-14/A04-after-balance-360x800.png
new file mode 100644
index 0000000..909d71c
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A04-after-balance-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A04-after-balance-412x915.png b/docs/design/screens/runtime/2026-07-14/A04-after-balance-412x915.png
new file mode 100644
index 0000000..c876b7b
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A04-after-balance-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A04-audit-before-360x800.png b/docs/design/screens/runtime/2026-07-14/A04-audit-before-360x800.png
new file mode 100644
index 0000000..a46ea43
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A04-audit-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A04-audit-before-412x915.png b/docs/design/screens/runtime/2026-07-14/A04-audit-before-412x915.png
new file mode 100644
index 0000000..7b0b83d
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A04-audit-before-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A04-before-360x800.png b/docs/design/screens/runtime/2026-07-14/A04-before-360x800.png
new file mode 100644
index 0000000..8a47e75
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A04-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A04-before-412x915.png b/docs/design/screens/runtime/2026-07-14/A04-before-412x915.png
new file mode 100644
index 0000000..cd9b622
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A04-before-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A05-after-360x800.png b/docs/design/screens/runtime/2026-07-14/A05-after-360x800.png
new file mode 100644
index 0000000..589177b
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A05-after-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A05-after-412x915.png b/docs/design/screens/runtime/2026-07-14/A05-after-412x915.png
new file mode 100644
index 0000000..8694598
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A05-after-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A05-before-360x800.png b/docs/design/screens/runtime/2026-07-14/A05-before-360x800.png
new file mode 100644
index 0000000..902063c
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A05-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A05-before-412x915.png b/docs/design/screens/runtime/2026-07-14/A05-before-412x915.png
new file mode 100644
index 0000000..e97ae34
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A05-before-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A06-after-360x800.png b/docs/design/screens/runtime/2026-07-14/A06-after-360x800.png
new file mode 100644
index 0000000..21e8317
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A06-after-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A06-after-412x915.png b/docs/design/screens/runtime/2026-07-14/A06-after-412x915.png
new file mode 100644
index 0000000..060c5e2
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A06-after-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A06-before-360x800.png b/docs/design/screens/runtime/2026-07-14/A06-before-360x800.png
new file mode 100644
index 0000000..063d826
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A06-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A06-before-412x915.png b/docs/design/screens/runtime/2026-07-14/A06-before-412x915.png
new file mode 100644
index 0000000..a1ddd51
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A06-before-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/A06-restricted-360x800.png b/docs/design/screens/runtime/2026-07-14/A06-restricted-360x800.png
new file mode 100644
index 0000000..b75303d
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/A06-restricted-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G01-G03-create-comparison-360x800.png b/docs/design/screens/runtime/2026-07-14/G01-G03-create-comparison-360x800.png
new file mode 100644
index 0000000..0751fa2
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G01-G03-create-comparison-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G01-default-after-360x800.png b/docs/design/screens/runtime/2026-07-14/G01-default-after-360x800.png
new file mode 100644
index 0000000..f01e9cd
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G01-default-after-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G01-default-before-after-360x800.png b/docs/design/screens/runtime/2026-07-14/G01-default-before-after-360x800.png
new file mode 100644
index 0000000..85b99de
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G01-default-before-after-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G01-empty-after-360x800.png b/docs/design/screens/runtime/2026-07-14/G01-empty-after-360x800.png
new file mode 100644
index 0000000..c971ba5
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G01-empty-after-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G01-empty-after-412x915.png b/docs/design/screens/runtime/2026-07-14/G01-empty-after-412x915.png
new file mode 100644
index 0000000..0d85fac
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G01-empty-after-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G03-ancestor-after-360x800.png b/docs/design/screens/runtime/2026-07-14/G03-ancestor-after-360x800.png
new file mode 100644
index 0000000..6ff9d38
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G03-ancestor-after-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G03-ancestor-after-412x915.png b/docs/design/screens/runtime/2026-07-14/G03-ancestor-after-412x915.png
new file mode 100644
index 0000000..b9e3701
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G03-ancestor-after-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G03-create-after-360x800.png b/docs/design/screens/runtime/2026-07-14/G03-create-after-360x800.png
new file mode 100644
index 0000000..d1e3fd2
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G03-create-after-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-before-after-results-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-before-after-results-360x800.png
new file mode 100644
index 0000000..d5a1f27
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-before-after-results-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-compact-controls-empty-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-compact-controls-empty-360x800.png
new file mode 100644
index 0000000..47f7ae4
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-compact-controls-empty-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-compact-controls-results-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-compact-controls-results-360x800.png
new file mode 100644
index 0000000..0b11bee
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-compact-controls-results-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-correction-after-empty-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-correction-after-empty-360x800.png
new file mode 100644
index 0000000..20baf36
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-correction-after-empty-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-correction-after-initial-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-correction-after-initial-360x800.png
new file mode 100644
index 0000000..8ae0266
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-correction-after-initial-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-correction-after-results-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-correction-after-results-360x800.png
new file mode 100644
index 0000000..176767a
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-correction-after-results-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-correction-before-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-correction-before-360x800.png
new file mode 100644
index 0000000..ffc81ac
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-correction-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-correction-before-after-initial-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-correction-before-after-initial-360x800.png
new file mode 100644
index 0000000..df569d8
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-correction-before-after-initial-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-correction-compact-controls-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-correction-compact-controls-360x800.png
new file mode 100644
index 0000000..1e72efe
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-correction-compact-controls-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-empty-after-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-empty-after-360x800.png
new file mode 100644
index 0000000..e335f62
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-empty-after-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-initial-after-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-initial-after-360x800.png
new file mode 100644
index 0000000..ffc81ac
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-initial-after-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-no-panel-after-initial-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-no-panel-after-initial-360x800.png
new file mode 100644
index 0000000..b295a50
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-no-panel-after-initial-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-no-panel-before-after-initial-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-no-panel-before-after-initial-360x800.png
new file mode 100644
index 0000000..faffe33
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-no-panel-before-after-initial-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-no-panel-empty-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-no-panel-empty-360x800.png
new file mode 100644
index 0000000..dec5f8a
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-no-panel-empty-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-no-panel-results-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-no-panel-results-360x800.png
new file mode 100644
index 0000000..efa37d7
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-no-panel-results-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-results-after-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-results-after-360x800.png
new file mode 100644
index 0000000..52a5333
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-results-after-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-results-after-412x915.png b/docs/design/screens/runtime/2026-07-14/G06-results-after-412x915.png
new file mode 100644
index 0000000..f7dc4cb
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-results-after-412x915.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-selected-strip-final-initial-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-selected-strip-final-initial-360x800.png
new file mode 100644
index 0000000..db7008b
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-selected-strip-final-initial-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-selected-strip-initial-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-selected-strip-initial-360x800.png
new file mode 100644
index 0000000..93448ec
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-selected-strip-initial-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-selected-strip-reference-actual-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-selected-strip-reference-actual-360x800.png
new file mode 100644
index 0000000..bc2945e
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-selected-strip-reference-actual-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-selected-strip-refined-initial-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-selected-strip-refined-initial-360x800.png
new file mode 100644
index 0000000..17c6a09
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-selected-strip-refined-initial-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/G06-selected-strip-refined-reference-actual-360x800.png b/docs/design/screens/runtime/2026-07-14/G06-selected-strip-refined-reference-actual-360x800.png
new file mode 100644
index 0000000..cdf2c46
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/G06-selected-strip-refined-reference-actual-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/A01-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/A01-360x800.png
new file mode 100644
index 0000000..72bd4eb
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/A01-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/A02-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/A02-360x800.png
new file mode 100644
index 0000000..302a522
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/A02-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/A04-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/A04-360x800.png
new file mode 100644
index 0000000..909d71c
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/A04-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/A05-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/A05-360x800.png
new file mode 100644
index 0000000..589177b
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/A05-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/A06-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/A06-360x800.png
new file mode 100644
index 0000000..21e8317
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/A06-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/G01-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/G01-360x800.png
new file mode 100644
index 0000000..9f0b31f
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/G01-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/G03-before-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/G03-before-360x800.png
new file mode 100644
index 0000000..1178cea
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/G03-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/G04-before-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/G04-before-360x800.png
new file mode 100644
index 0000000..fb80f20
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/G04-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/G06-before-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/G06-before-360x800.png
new file mode 100644
index 0000000..ae6599d
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/G06-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/G07-before-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/G07-before-360x800.png
new file mode 100644
index 0000000..ba12a54
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/G07-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/T01-before-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/T01-before-360x800.png
new file mode 100644
index 0000000..5b1ea92
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/T01-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/T01-populated-before-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/T01-populated-before-360x800.png
new file mode 100644
index 0000000..1435a8f
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/T01-populated-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/T02-before-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/T02-before-360x800.png
new file mode 100644
index 0000000..3608ccf
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/T02-before-360x800.png differ
diff --git a/docs/design/screens/runtime/2026-07-14/route-audit/accepted-route-audit-360x800.png b/docs/design/screens/runtime/2026-07-14/route-audit/accepted-route-audit-360x800.png
new file mode 100644
index 0000000..d7da5b1
Binary files /dev/null and b/docs/design/screens/runtime/2026-07-14/route-audit/accepted-route-audit-360x800.png differ
diff --git a/docs/design/视觉设计交接手册.md b/docs/design/视觉设计交接手册.md
index 7391ec1..4941110 100644
--- a/docs/design/视觉设计交接手册.md
+++ b/docs/design/视觉设计交接手册.md
@@ -3,41 +3,54 @@
> 更新日期:2026-07-14
> 用途:在新电脑或交给新的 GPT 后,按本手册恢复当前工作;它只记录已发生的事实,不把待验收写成已完成。
+## 0. 给新 GPT 的可直接执行指令
+
+你接手的是一个 **uni-app Android 家谱项目的高质量视觉设计任务**,全程中文工作;它不是只改 CSS 的任务。先不修改代码,完整阅读:`AGENTS.md`、`docs/交接记录.md`、本手册、`docs/规划.md`、`docs/design/D1_安卓视觉规范与页面壳.md`、`docs/design/P00_页面结构与资产清单.md`、`docs/superpowers/plans/2026-07-13-product-design-visual-refinement.md`、`design-qa.md`。随后只向用户简洁复述当前停点和准备如何处理反馈。
+
+必须保留已有未提交改动;不使用 worktree 或多代理;不执行 `git add`、`git commit`、`git push`、上传、`git reset` 或 `git checkout`。A01、A02、A04、A05、A06、G01、G03 的可见效果已获用户验收并冻结,不能以重构或顺手优化的名义改变。G07 是 G06 的页面内状态,不得重新建为独立页。
+
+当前唯一应向用户确认的候选是 G06:用户选定最近 ImageGen 第 3 稿的「朱砂题签 + 宽输入框 + 搜索按钮」方向,通用印玺已替换为项目真实 `brand-seal.png`。最后实际运行证据只有初始态 `docs/design/screens/runtime/2026-07-14/G06-selected-strip-final-initial-360x800.png`;同版结果态和无结果态截图未完成,G06 也**未验收**。不要把旧 `G06-no-panel-*` 截图当作当前最终版本。先请用户看当前初始态并决定是否继续;用户要求继续 G06 时,先截图审视,再补三态和验证;用户明确验收后,才继续 T02→T01(除非用户指定新优先级)。
+
+新环境必须可用并实际调用:`product-design:index`、`product-design:audit`、`imagegen`、`superpowers:test-driven-development`、`superpowers:systematic-debugging`、`superpowers:verification-before-completion`。没有这些能力时,先安装/启用同等能力,不得假装已经完成设计审视或位图生成。
+
## 1. 当前停点:先看这一节
-项目已有 59 条最终编号路由,第一版都可以浏览;这不等于 59 个页面已完成视觉验收。
+项目已有 55 条最终编号路由,第一版都可以浏览;这不等于 55 个页面已完成视觉验收。
-- 用户已经验收的视觉基准只有两个:**A01 启动/登录引导**、**G01 我的家谱**。它们的可见效果已冻结。
-- **A02 账号登录**已经完成一次资产化重做、功能回归和多尺寸截图,但**仍在等待用户审美验收**。在用户确认前,不得把 A02 标记为完成,也不得把它的样式批量传播到 A03--A06。
+- 用户已经验收的视觉基准有六个:**A01 启动/登录引导**、**A02 账号登录**、**A04 注册账号**、**A05 重置密码**、**A06 登录状态**、**G01 我的家谱**。它们的可见效果已冻结。
+- **A02 账号登录**已经完成资产化重做、功能回归和多尺寸截图,并于 2026-07-14 获用户审美验收。A03 已删除;A02 的短信 Tab 是唯一手机号验证码登录入口。A04、A05、A06 均于同日完成独立重做并获用户审美验收;G02 已按用户确认合并为 G01 的 `?state=empty` 并获用户审美确认;G04 已合并为 G03 的 `?step=ancestor`,G03 双步骤已获用户继续授权通过;G07 已合并为 G06 初始/结果/无结果状态。G06 曾被指出页头层级、伪控件和大面板截图感;用户最后选择最近 ImageGen 第 3 稿,当前以朱砂题签、真实品牌谱印、独立宽输入框和搜索按钮实现。最后候选只完成初始态新截图,结果态/无结果态的同版截图和用户审美确认尚未完成。
- 其余模块的页面仍属于后续视觉设计任务;其中不少页面目前由 `components/ModulePage.vue` 与 `data/page-catalog.js` 提供第一版可浏览壳。这个壳是过渡方案,不是最终 UI。
- 不提交、不推送、不上传 Git;由用户自行处理版本库操作。
-下一位执行者的第一件事不是开始做新页面,而是请用户查看 A02 的前后对比:
+下一位执行者先读取当前停点与已验收页面,再向用户展示 **G06 当前候选的初始态** 并等待反馈:
-- `docs/design/screens/runtime/2026-07-13/A02-before-after-360x800.png`
-- `docs/design/screens/runtime/2026-07-13/A02-after-412x915.png`
-- `docs/design/screens/runtime/2026-07-13/A02-sms-360x800.png`
+- `docs/design/screens/runtime/2026-07-14/A05-after-360x800.png`
+- `docs/design/screens/runtime/2026-07-14/A05-after-412x915.png`
+- `docs/design/screens/runtime/2026-07-14/A06-after-360x800.png`
+- `docs/design/screens/runtime/2026-07-14/A06-after-412x915.png`
+- `docs/design/screens/runtime/2026-07-14/A06-restricted-360x800.png`
+- `docs/design/screens/runtime/2026-07-14/G06-selected-strip-final-initial-360x800.png`
-用户若要求调整,只修改 A02 并重新截图、复核;用户若明确通过,才进入 A03--A06。
+旧 `G06-no-panel-*` 图是被用户否定后各轮尝试的历史证据,只能帮助理解迭代原因,不能用于当前验收。用户若要求调整,只修改对应页面状态并重新截图、复核;当前 A01、A02、A04、A05、A06、G01 两种状态与 G03 `create|ancestor` 均已明确通过。G06 当前候选的初始态待用户确认,结果态/无结果态的新截图待补;不得把 G06 写成已验收。只有用户明确通过 G06 或明确要求跳过它,下一项才按 T02→T01 状态收敛执行。
## 1.1 迁移前必须保留的文件
-本手册和截图工具是本轮新增文件;换电脑前,用户需在自行提交/上传时包含它们,或完整复制当前工作区。我没有执行任何 Git 暂存、提交、推送或上传操作。
+本手册、G06 最终候选资产和截图工具均是接管所需文件;换电脑前,用户需在自行提交/上传时包含它们,或完整复制当前工作区。我没有执行任何 Git 暂存、提交、推送或上传操作。
-至少要保留:`docs/design/视觉设计交接手册.md`、`docs/交接记录.md`、`scripts/capture-chrome-page.js`、A02 页面/资产/测试、`docs/design/screens/runtime/2026-07-13/` 的运行证据,以及现有计划与设计记录。只复制已提交的旧版本会丢失当前停点。
+至少要保留:`docs/design/视觉设计交接手册.md`、`docs/交接记录.md`、`scripts/capture-chrome-page.js`、G06 页面/资产/测试、`docs/design/screens/runtime/2026-07-14/G06-selected-strip-final-initial-360x800.png`、A02 页面/资产/测试、`docs/design/screens/runtime/2026-07-13/` 的运行证据,以及现有计划与设计记录。只复制已提交的旧版本会丢失当前停点。
## 2. 必读文件与唯一职责
| 文件 | 负责什么 |
| --- | --- |
| `AGENTS.md` | 最小修改、保护既有未提交内容、验证后再交付的项目规则。 |
-| `docs/规划.md` | 59 个页面的范围、模块顺序和“完成”的定义。 |
+| `docs/规划.md` | 55 条独立路由的范围、模块顺序和“完成”的定义。 |
| `docs/design/D1_安卓视觉规范与页面壳.md` | Android 页面、资产、布局与中文注释的硬约束。 |
| `docs/design/P00_页面结构与资产清单.md` | 路由、页面文件和资产台账的唯一清单。 |
| `docs/superpowers/plans/2026-07-13-product-design-visual-refinement.md` | 已批准的分模块视觉精修计划和验收顺序。 |
| `docs/design/2026-07-13-A01-G01-A02-视觉审视.md` | A01/G01 视觉证据与旧 A02 的问题定位。 |
| `docs/design/A02_账号登录_设计记录.md` | A02 当前实现、资产、截图和测试记录。 |
-| `design-qa.md` | A02 的 Design QA;当前 `final result: blocked`,原因是缺少用户的审美确认。 |
+| `design-qa.md` | A02 的 Design QA;当前 `final result: accepted`。 |
| `docs/交接记录.md` | 简版当前状态与恢复入口;本手册提供完整操作细节。 |
发生冲突时,按“用户最新明确指令 > AGENTS.md > 上表中的当前台账/计划 > 历史文档”的顺序处理。不要以旧的草案或已废弃的截图切片方案为依据。
@@ -88,7 +101,7 @@
已通过的是:资产尺寸与不透明角审计、A01/A02 页面契约、编译检查、A02 的多尺寸运行截图和短信 Tab 交互。
-未通过的是:用户对 A02 的最终审美确认。因此 `design-qa.md` 必须保持 `blocked`,直至用户明确确认。用户若觉得顶部祥云偏多,只可先移除 A02 标题右侧的单个祥云;不要无根据改动面板框、输入区或交互。
+已通过的是:用户对 A02 的最终审美确认,`design-qa.md` 为 `accepted`,A02 可见效果冻结。用户若提出新的明确调整,只改动被指出的区域并重新截图复核;不要无根据改动面板框、输入区或交互。
## 5. 换电脑后如何恢复截图与审视能力
@@ -128,16 +141,16 @@ node scripts/capture-chrome-page.js `
## 6. 后续执行顺序与每轮产物
-### 门禁 0:先处理 A02
+### 门禁 0:A02 与 A04 已通过
-1. 让用户审 A02 前后对比与 412 × 915、短信 Tab 图。
-2. 若不通过:只在 A02 修正明确问题,先调整对应契约测试,再改页面/资产,重新截全尺寸图。
-3. 若通过:把 A02 状态同步到 `docs/规划.md`、`docs/交接记录.md`、`docs/design/A02_账号登录_设计记录.md` 与 `design-qa.md`,再开始 A03--A06。
+1. A02 与 A04 均已通过;不因后续页面改动而触碰其可见效果。
+2. 若用户提出明确调整:只在对应页面修正,先调整对应契约测试,再改页面/资产,重新截图复核。
+3. A05、A06 与 G01 空状态均已通过并完成状态同步;G04 已合并为 G03 `step=ancestor`,该双步骤已获用户通过;G07 已合并为 G06 三态。G06 当前朱砂题签候选只完成初始态新截图,尚待结果/无结果截图、审视和用户审美确认。
### 其后的模块顺序
-1. **账号 A03--A06**:以已验收 A02 为认证样板,但每个页面保留各自的任务与状态,不能直接复制表单。
-2. **家谱 G02--G12**:先做空态/创建、家谱概览与世代字等代表页,再扩展搜索、申请、设置。
+1. **账号 A04--A06**:以已验收 A02 为认证样板,但每个页面保留各自的任务与状态,不能直接复制表单。绑定手机号以后归个人中心安全设置的独立入口;微信授权取消、失败、受限归 A06。
+2. **家谱 G03、G05--G12**:G07→G06 搜索流程已收敛;先由用户审美确认 G06 当前候选,并补齐同版三态截图;之后再推进家谱概览、世代字、申请与设置。用户明确授权连续推进时,先执行 T02→T01 状态收敛。
3. **世系树 T01--T08**:先建立树、成员档案、关系编辑三类代表页。
4. **家族内容 F01--F10**:动态、文章、相册、媒体上传分别建立内容档案式层级。
5. **人物记录 R01--R11**:人物档案、礼仪活动、成长时间线先定样板。
@@ -161,7 +174,7 @@ node scripts/capture-chrome-page.js `
| 能力/技能 | 何时使用 | 项目中的正确做法 |
| --- | --- | --- |
-| `product-design:index`、`product-design:audit` | 审视、评价或设计一个已运行页面/流程时。 | 先拿到真实路由截图,再依据 A01/G01 与页面任务写审视结论;不要靠源码猜好不好看。 |
+| `product-design:index`、`product-design:audit` | 审视、评价或设计一个已运行页面/流程时;接管 G06 后的第一项视觉工作也必须使用。 | 先拿到真实路由截图,再依据 A01/G01 与页面任务写审视结论;不要靠源码猜好不好看。 |
| Product Design 的 `user-context`、`get-context`、`ideate`、`image-to-code`、Design QA 流程 | 需要探索方向、选择视觉方案、将已选样稿落地、或交付前比对时。 | 有明确视觉真源时先忠实落地;没有真源且需要新方向时先给可比较方案,选定后再实现;最后在 `design-qa.md` 诚实记录通过或阻塞。 |
| `imagegen` | 现有资产无法承担完整视觉面时。 | 先用 A01/G01 实图作为参考,明确输出是完整不透明面板还是透明叠加件;检查实际尺寸/Alpha 后再放入项目。不能用截图代替资产。 |
| `superpowers:brainstorming` 与 `superpowers:writing-plans` | 新模块或会改变页面行为的创作工作开始前。 | 先写清用户目标、交互和验收,不以“尽快”跳过设计决定。 |
@@ -169,7 +182,7 @@ node scripts/capture-chrome-page.js `
| `superpowers:systematic-debugging` | 截图、路由、构建或测试出现意外时。 | 先复现和定位单一根因,禁止靠删测试、盲改样式掩盖问题。 |
| `superpowers:verification-before-completion` | 任何“完成/修好/通过”的表述前。 | 以命令输出、运行截图和用户确认作证据;不能用意图代替验证。 |
-若新电脑没有 Product Design 或 ImageGen 插件,应先安装/启用同等能力;在能力缺失时不能假装完成视觉审计或资产生成。当前环境曾因 Windows 的 `python`/`python3` 只是商店占位符而无法保存 Product Design 的持久 context,这不影响当前项目文件和截图恢复;新环境若有可用 Python,可重新运行该插件的 context 预检。
+若新电脑没有 Product Design 或 ImageGen 插件,应先安装/启用同等能力;在能力缺失时不能假装完成视觉审计或资产生成。新环境先执行 `python --version`、`node --version` 确认可用环境;当前用户已确认 Python 已安装。若 Product Design 的持久 context 预检仍失败,记录原因即可,不得阻塞对项目内真实截图、资产和测试的接管。
## 8. 验证命令
@@ -196,6 +209,17 @@ powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/full-page-visual-c
git diff --check
```
+G06 当前候选继续或验收前的最小回归集合:
+
+```powershell
+powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/g06-search-flow-contract.ps1
+node tests/g06-search-flow-runtime-smoke.js http://localhost:5173
+node scripts/capture-chrome-page.js "http://localhost:5173/#/pages/genealogy/g06-search-genealogies" ".search-page" "docs/design/screens/runtime/<日期>/G06-selected-strip-initial-360x800.png" 360 800
+git diff --check
+```
+
+若 G06 发生视觉改动,必须用真实输入分别截取有结果和无结果状态,再用 Product Design 审视;只有三态、相关测试与用户确认齐全,才能更新为验收通过。
+
`git diff --check` 可能提示仓库既有的 CRLF 行尾警告;只有真正的空白错误或非零退出码才算失败。不要 reset、checkout、清空或覆盖用户已有改动。
## 9. 文档与资源维护清单
diff --git a/docs/superpowers/plans/2026-07-13-product-design-visual-refinement.md b/docs/superpowers/plans/2026-07-13-product-design-visual-refinement.md
index ec93394..fdf6000 100644
--- a/docs/superpowers/plans/2026-07-13-product-design-visual-refinement.md
+++ b/docs/superpowers/plans/2026-07-13-product-design-visual-refinement.md
@@ -1,5 +1,7 @@
# 家谱 App Product Design 视觉精修实施计划
+> 现行范围更新:A03 已于 2026-07-14 删除;验证码登录归 A02,绑定手机号归个人中心,微信异常归 A06。历史方案不再作为实现依据。
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use `superpowers:executing-plans` to implement this plan task-by-task. Do not use parallel agents in this shared workspace.
**Goal:** 在不改变已验收 A01、G01 可见效果和既有业务交互的前提下,把其余 57 个页面从“可浏览的第一版”精修为同一套、可在 Android 小屏上成立的家祠卷轴界面。
@@ -168,25 +170,24 @@
只在用户确认 A02 后,将 `docs/规划.md` 状态更新为“认证样板已验收”。用户未确认时,记录为“实现完成,视觉待验收”,不得假称完成。
-## Task 4: 完成认证模块 A03–A06
+## Task 4: 完成认证模块 A04–A06
**Files:**
-- Modify: `pages/auth/a03-mobile-verify.vue`
- Modify: `pages/auth/a04-register.vue`
- Modify: `pages/auth/a05-reset-password.vue`
- Modify: `pages/auth/a06-auth-status.vue`
- Create only after A02 布局被两页复用: `components/auth/AuthFormPanel.vue`
-- Modify: `data/page-catalog.js` and `components/ModulePage.vue` only when the corresponding A03–A06 entry is removed from the temporary motherplate
+- Modify: `data/page-catalog.js` and `components/ModulePage.vue` only when the corresponding A04–A06 entry is removed from the temporary motherplate
- Modify: `tests/full-page-visual-contract.ps1`
- Modify: `docs/design/P00_页面结构与资产清单.md`
**Consumes:** 已验收的 A02 面板、按钮和文字层级。
-**Produces:** 认证六页同一入口体验:登录、验证码、注册、重设和结果状态各有对应任务,不能仍显示泛化的“功能完善中”。
+**Produces:** 认证五页同一入口体验:登录、注册、重设和结果状态各有对应任务,不能仍显示泛化的“功能完善中”。
- [ ] **Step 1: 分别写四条红灯合同。**
- A03 必须有手机号与验证码;A04 有手机号、密码、确认密码和协议提示;A05 有手机号、验证码、新密码;A06 有状态图标、说明和明确返回登录操作。合同只验证存在的交互和资产锚点,不宣称后端已接入。
+ A04 有手机号、密码、确认密码和协议提示;A05 有手机号、验证码、新密码;A06 有状态图标、说明和明确返回登录操作,并承接微信授权取消、失败与受限。合同只验证存在的交互和资产锚点,不宣称后端已接入。
- [ ] **Step 2: 用 A02 的已确认结构分别实现。**
@@ -194,7 +195,7 @@
- [ ] **Step 3: 模块截图与回归。**
- 对 A03、A04、A05、A06 至少各保存 360×800 一张截图;运行认证合同、`compile-audit.ps1`、`git diff --check`。A01 不改动且至少复核 412×915。
+ 对 A04、A05、A06 至少各保存 360×800 一张截图;运行认证合同、`compile-audit.ps1`、`git diff --check`。A01 不改动且至少复核 412×915。
## Task 5: 完成家谱模块 G02–G12
diff --git a/docs/superpowers/plans/2026-07-14-a02-agreement-control.md b/docs/superpowers/plans/2026-07-14-a02-agreement-control.md
new file mode 100644
index 0000000..d67ae97
--- /dev/null
+++ b/docs/superpowers/plans/2026-07-14-a02-agreement-control.md
@@ -0,0 +1,109 @@
+# A02 协议确认控件实施计划
+
+> 现行范围更新:A03 已于 2026-07-14 删除;验证码登录归 A02,绑定手机号归个人中心,微信异常归 A06。历史方案不再作为实现依据。
+
+> **For agentic workers:** 本计划由当前根代理内联执行;用户明确禁止 worktree、子代理、Git 暂存、提交、推送与上传。步骤以复选框追踪。
+
+**Goal:** 在不改变 A01 可见效果的前提下,让 A02 在当前页提供可见、可操作的协议确认并以其状态拦截登录提交。
+
+**Architecture:** A02 页面本地 `agreed` 状态是提交前协议状态的唯一所有者,A01 的 `agreed=1` 只用于初始化。两个 96 × 96 的透明 PNG 负责未选中和选中图标,Vue 负责可点击行、文字、链接与状态切换;不新增协议正文路由。
+
+**Tech Stack:** Vue 3 `
diff --git a/pages/auth/a04-register.vue b/pages/auth/a04-register.vue
index f034aa7..e197c38 100644
--- a/pages/auth/a04-register.vue
+++ b/pages/auth/a04-register.vue
@@ -1,3 +1,345 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 注册账号
+ 创建属于你的家谱账号
+
+
+
+
+
+
+
+ 手机号
+
+
+
+ 设置密码
+
+
+
+ 确认密码
+
+
+
+
+
+
+ 注册账号
+
+
+
+
+
+ 我已阅读并同意
+ 《用户协议》
+ 与
+ 《隐私政策》
+
+
+
+
+ 已有账号?
+ 登录
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/auth/a05-reset-password.vue b/pages/auth/a05-reset-password.vue
index 8f64739..4fa69f1 100644
--- a/pages/auth/a05-reset-password.vue
+++ b/pages/auth/a05-reset-password.vue
@@ -1,3 +1,328 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重设密码
+ 验证手机号后重新设置登录密码
+
+
+
+
+
+
+
+
+ 手机号
+
+
+
+ 验证码
+
+ 获取验证码
+
+
+ 新密码
+
+
+
+ 确认新密码
+
+
+
+
+
+
+ 确认重设
+
+
+ 重设完成后,请使用新密码登录
+
+ 想起密码了?
+ 返回登录
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/auth/a06-auth-status.vue b/pages/auth/a06-auth-status.vue
index 41f7dcf..a5cb425 100644
--- a/pages/auth/a06-auth-status.vue
+++ b/pages/auth/a06-auth-status.vue
@@ -1,3 +1,371 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 登录提示
+ 请确认当前状态后继续操作
+
+
+
+
+
+
+
+ {{ currentState.eyebrow }}
+ {{ currentState.title }}
+ {{ currentState.description }}
+
+
+
+
+ {{ currentState.primaryLabel }}
+
+
+
+ {{ currentState.secondaryLabel }}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/genealogy/g01-my-genealogies.vue b/pages/genealogy/g01-my-genealogies.vue
index b36330f..67e69f9 100644
--- a/pages/genealogy/g01-my-genealogies.vue
+++ b/pages/genealogy/g01-my-genealogies.vue
@@ -139,21 +139,67 @@
-
- 待立家谱
- 从第一位家人开始
- 为家族留下可传承的名字、故事与记忆。
-
+
+
- 新建家谱
+
+
+
+ 家谱
+
+ 还没有加入任何家谱
+ 先为自己的家族立一部谱,或搜索家谱申请加入
+
+
+
+
+
+ 新建家谱
+
+
+
+
+
+ 搜索并申请加入
+
+
- 搜索并申请加入
@@ -163,6 +209,7 @@
diff --git a/pages/genealogy/g03-create-genealogy.vue b/pages/genealogy/g03-create-genealogy.vue
index 50544d3..86e05a6 100644
--- a/pages/genealogy/g03-create-genealogy.vue
+++ b/pages/genealogy/g03-create-genealogy.vue
@@ -1,69 +1,504 @@
-
+
-
-
-
- 立谱信息
- 家谱建立后可继续完善,名称与访问规则由创建者维护。
-
- 姓氏
-
-
-
- 谱名
-
-
-
- 堂号
-
-
-
- 所在地
-
+
+
+
+
+
+
-
-
- 访问规则
- 默认仅成员可见
-
- 保护族人资料。创建者可在家谱设置中开放搜索与申请加入。
-
+
+
+
-
+
+ 第一步 · 立谱信息
+ 为家族立一部可传承的谱
+ 家谱建立后可继续完善,名称与访问规则由创建者维护。
+
+
+
+ 姓氏
+
+
+
+ 谱名
+
+
+
+ 堂号
+
+
+
+ 所在地
+
+
+
+
+
+ 访问规则
+ 默认仅成员可见
+
+ 保护族人资料;创建后可在家谱设置中开放搜索与申请加入。
+
+
+
+ 创建并录入首代
+
+
+
+
+ 第二步 · 首代人物
+ 家谱从这一位开始
+ 可先录入姓名、世代和简要生平,其他资料后续随时补充。
+
+
+
+ 姓名
+
+
+
+ 世代
+ 第一世
+
+
+ 出生日期
+
+
+
+
+
+ 生平简述
+
+
+
+
+
+ 保存并查看世系树
+
+
+
+
diff --git a/pages/genealogy/g04-first-ancestor.vue b/pages/genealogy/g04-first-ancestor.vue
deleted file mode 100644
index 5c2cf61..0000000
--- a/pages/genealogy/g04-first-ancestor.vue
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
-
- 家谱从这一位开始
- 可先录入姓名、世代和简要生平,其他资料后续随时补充。
- 姓名
- 世代第一世
- 出生日期
- 生平简述
-
-
-
-
-
-
-
-
diff --git a/pages/genealogy/g06-search-genealogies.vue b/pages/genealogy/g06-search-genealogies.vue
index 01f781f..f48ab49 100644
--- a/pages/genealogy/g06-search-genealogies.vue
+++ b/pages/genealogy/g06-search-genealogies.vue
@@ -1,15 +1,48 @@
-
+
-
-
-
-
- 搜索
-
- 仅展示已开放申请加入的家谱。
-
-
- 暂未找到公开家谱可联系家谱创建者开通公开申请
+
+
+
+
+
+
+
+
+
+
+
+ 公开家谱检索
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+ 正在整理可申请加入的家谱
+
+
+ 从姓氏、谱名或祖居地开始
+ 找到合适的家谱后,可申请加入并查阅。
+
+
+
+ 检索到 {{ results.length }} 部可申请的家谱点选后填写申请
+
+
+
+
+ 暂未找到公开家谱
+ 可换一个姓氏、谱名或祖居地再试。
+
@@ -23,25 +56,61 @@ import { appApi } from '@/utils/api.js'
const keyword = ref('')
const allResults = ref([])
const results = ref([])
-const searched = ref(false)
+const searchState = ref('initial')
+
+onMounted(async () => {
+ searchState.value = 'loading'
+ allResults.value = await appApi.getPublicGenealogies()
+ searchState.value = 'initial'
+})
-onMounted(async () => { allResults.value = await appApi.getPublicGenealogies(); results.value = allResults.value })
const search = () => {
const value = keyword.value.trim()
- results.value = value ? allResults.value.filter((item) => `${item.name}${item.surname}${item.location}`.includes(value)) : allResults.value
- searched.value = true
+ results.value = value
+ ? allResults.value.filter((item) => `${item.name}${item.surname}${item.location}`.includes(value))
+ : allResults.value
+ searchState.value = results.value.length ? 'results' : 'empty'
}
-const openApply = (genealogy) => uni.showModal({ title: '申请加入', content: `确认申请加入“${genealogy.name}”吗?`, success: async ({ confirm }) => { if (confirm) { await appApi.applyToJoin(genealogy.id, { message: '希望加入家谱并完善本人资料' }); uni.showToast({ title: '申请已提交,等待审核', icon: 'none' }) } } })
+
+const openApply = (genealogy) => uni.navigateTo({ url: `/pages/genealogy/g08-join-application?genealogyId=${genealogy.id}` })
diff --git a/pages/genealogy/g07-search-result.vue b/pages/genealogy/g07-search-result.vue
deleted file mode 100644
index 26b84f5..0000000
--- a/pages/genealogy/g07-search-result.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/scripts/capture-chrome-page.js b/scripts/capture-chrome-page.js
index ab0ce49..45b0ee5 100644
--- a/scripts/capture-chrome-page.js
+++ b/scripts/capture-chrome-page.js
@@ -2,6 +2,7 @@ const fs = require('fs')
const path = require('path')
const [url, selector, output, width = '360', height = '800', action] = process.argv.slice(2)
+const renderSettleMilliseconds = 900
if (!url || !selector || !output) {
throw new Error('Usage: node scripts/capture-chrome-page.js