diff --git a/.gitignore b/.gitignore
index d42b7b8..febdb18 100644
--- a/.gitignore
+++ b/.gitignore
@@ -58,6 +58,4 @@ sitemap.xml
/unpackage/
/.vite/
/design-pipeline/generated/
-/docs/design/screens/runtime/
-/docs/superpowers/specs/design/
/tmp-g01-icon-audit.png
diff --git a/.superpowers/sdd/progress.md b/.superpowers/sdd/progress.md
deleted file mode 100644
index d6e52a9..0000000
--- a/.superpowers/sdd/progress.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# SDD Progress
-
-Plan: docs/superpowers/plans/2026-07-21-page-header-safe-area-g03.md
-Branch: fix/page-header-safe-area
-Base: 779a442
-
-Task 1: complete (commits 779a442..2f22df6, review clean)
-Task 2: complete (commits 2f22df6..a0d19f4, review clean after strict-regex fix)
-Task 3: complete (verification only at a0d19f4, review clean; 8 contracts + 2 H5 smokes pass)
diff --git a/.superpowers/sdd/review-task-1-779a442..2f22df6.diff b/.superpowers/sdd/review-task-1-779a442..2f22df6.diff
deleted file mode 100644
index 086e293..0000000
--- a/.superpowers/sdd/review-task-1-779a442..2f22df6.diff
+++ /dev/null
@@ -1,143 +0,0 @@
-# Review package: 779a442..2f22df6
-
-## Commits
-2f22df6 fix: adapt shared page header to safe area
-
-## Files changed
- components/PageHeader.vue | 12 ++++++++++--
- tests/shared-component-document-flow-contract.ps1 | 4 ++++
- tests/shared-interaction-accessibility-contract.ps1 | 10 ++++++++++
- 3 files changed, 24 insertions(+), 2 deletions(-)
-
-## Diff
-diff --git a/components/PageHeader.vue b/components/PageHeader.vue
-index 5ef28dd..17ab7ef 100644
---- a/components/PageHeader.vue
-+++ b/components/PageHeader.vue
-@@ -67,52 +67,60 @@
-
-
-
-
-
- ').Groups[1].Value
- $positions = [regex]::Matches([regex]::Replace($style, '(?s)/\*.*?\*/', ''), '(?m)\bposition\s*:\s*([^;]+);')
- if ($positions.Count -ne 1 -or $positions[0].Groups[1].Value.Trim() -ne 'fixed') {
- throw "G03 must retain only its combined fixed dialog layer rule; found $($positions.Count) position declarations"
- }
- foreach ($required in @(
-- 'background: url("/static/assets/foundation/opaque/root-header-cinnabar.jpg")',
- 'background: url("/static/assets/modules/genealogy/transparent/g01-empty-panel-frame.png")',
- 'background: url("/static/assets/modules/auth/transparent/a01-scroll-dialog-v3.png")',
- 'background: url("/static/assets/foundation/transparent/a01-scroll-primary-v3.png")'
- )) { if ($page -notmatch [regex]::Escape($required)) { throw "G03 is missing real asset background: $required" } }
-+foreach ($forbidden in @('flow-header', 'root-header-cinnabar.jpg')) {
-+ if ($page -match [regex]::Escape($forbidden)) { throw "G03 must not retain private header token: $forbidden" }
-+}
- Write-Output 'G03-DOCUMENT-FLOW-CONTRACT PASS'
-diff --git a/tests/g03-visual-states-contract.ps1 b/tests/g03-visual-states-contract.ps1
-index 5342acb..cfb7911 100644
---- a/tests/g03-visual-states-contract.ps1
-+++ b/tests/g03-visual-states-contract.ps1
-@@ -2,22 +2,22 @@ $ErrorActionPreference = 'Stop'
-
- $root = Split-Path -Parent $PSScriptRoot
- $g03 = Get-Content -LiteralPath (Join-Path $root 'pages/genealogy/g03-create-genealogy.vue') -Raw -Encoding utf8
-
- function Assert-Match {
- param([string]$Content, [string]$Pattern, [string]$Message)
- if ($Content -notmatch $Pattern) { throw $Message }
- }
-
- if ($g03 -match '返回') { throw 'G03 header must use only the approved image back arrow' }
--Assert-Match -Content $g03 -Pattern '(?s)\.flow-header__back,\s*\.flow-header__side\s*\{[^}]*width:\s*72rpx;' -Message 'G03 header side slots must preserve centered title after removing back text'
--Assert-Match -Content $g03 -Pattern '(?s)\.flow-header__back-icon\s*\{[^}]*width:\s*34rpx;[^}]*height:\s*34rpx;' -Message 'G03 back arrow must use the approved visible size'
-+Assert-Match -Content $g03 -Pattern '(?s)' -Message 'G03 must use PageHeader with its dynamic title and custom back handler'
-+if ($g03 -match 'flow-header|flow-header__back|flow-header__title') { throw 'G03 must not retain a private header implementation' }
- Assert-Match -Content $g03 -Pattern '(?s)\.flow-note,\s*\.flow-rule__note\s*\{[^}]*font-size:\s*25rpx;' -Message 'G03 guidance copy must use the approved readable size'
- Assert-Match -Content $g03 -Pattern '(?s)\.flow-rule__option\s*\{[^}]*font-size:\s*23rpx;' -Message 'G03 visibility options must use the approved readable size'
- Assert-Match -Content $g03 -Pattern '(?s)\.field-error\s*\{[^}]*font-size:\s*24rpx;[^}]*line-height:\s*34rpx;' -Message 'G03 field errors must use the approved readable size'
- Assert-Match -Content $g03 -Pattern '(?s)\.flow-error\s*\{[^}]*font-size:\s*25rpx;[^}]*line-height:\s*36rpx;' -Message 'G03 submit errors must use the approved readable size'
-
- foreach ($asset in @('a01-scroll-dialog-v3.png', 'a01-scroll-primary-v3.png', 'a01-scroll-secondary-v3.png')) {
- if ($g03 -notmatch [regex]::Escape($asset)) { throw "G03 must retain approved shared asset: $asset" }
- }
-
- Write-Output 'G03-VISUAL-STATES-CONTRACT PASS'
diff --git a/.superpowers/sdd/review-task-2-rereview-2f22df6..a0d19f4.diff b/.superpowers/sdd/review-task-2-rereview-2f22df6..a0d19f4.diff
deleted file mode 100644
index 82c65d9..0000000
--- a/.superpowers/sdd/review-task-2-rereview-2f22df6..a0d19f4.diff
+++ /dev/null
@@ -1,230 +0,0 @@
-# Review package: 2f22df6..a0d19f4
-
-## Commits
-a0d19f4 test: tighten G03 shared header contract
-9362c47 refactor: reuse shared header on G03
-
-## Files changed
- pages/genealogy/g03-create-genealogy.vue | 62 ++++----------------------------
- tests/g03-create-flow-contract.ps1 | 9 +++--
- tests/g03-document-flow-contract.ps1 | 4 ++-
- tests/g03-visual-states-contract.ps1 | 4 +--
- 4 files changed, 17 insertions(+), 62 deletions(-)
-
-## Diff
-diff --git a/pages/genealogy/g03-create-genealogy.vue b/pages/genealogy/g03-create-genealogy.vue
-index 2bc757d..f37cadc 100644
---- a/pages/genealogy/g03-create-genealogy.vue
-+++ b/pages/genealogy/g03-create-genealogy.vue
-@@ -1,30 +1,20 @@
-
-
-
-
-
--
-+
-
-
-
-
- 第一步 · 立谱信息
- 为家族立一部可传承的谱
- 家谱建立后可继续完善,名称与访问规则由创建者维护。
-
-@@ -241,20 +231,21 @@
-
-
-
-
-
-
-
-
- ').Groups[1].Value
- $positions = [regex]::Matches([regex]::Replace($style, '(?s)/\*.*?\*/', ''), '(?m)\bposition\s*:\s*([^;]+);')
- if ($positions.Count -ne 1 -or $positions[0].Groups[1].Value.Trim() -ne 'fixed') {
- throw "G03 must retain only its combined fixed dialog layer rule; found $($positions.Count) position declarations"
- }
- foreach ($required in @(
-- 'background: url("/static/assets/foundation/opaque/root-header-cinnabar.jpg")',
- 'background: url("/static/assets/modules/genealogy/transparent/g01-empty-panel-frame.png")',
- 'background: url("/static/assets/modules/auth/transparent/a01-scroll-dialog-v3.png")',
- 'background: url("/static/assets/foundation/transparent/a01-scroll-primary-v3.png")'
- )) { if ($page -notmatch [regex]::Escape($required)) { throw "G03 is missing real asset background: $required" } }
-+foreach ($forbidden in @('flow-header', 'root-header-cinnabar.jpg')) {
-+ if ($page -match [regex]::Escape($forbidden)) { throw "G03 must not retain private header token: $forbidden" }
-+}
- Write-Output 'G03-DOCUMENT-FLOW-CONTRACT PASS'
-diff --git a/tests/g03-visual-states-contract.ps1 b/tests/g03-visual-states-contract.ps1
-index 5342acb..d539bc5 100644
---- a/tests/g03-visual-states-contract.ps1
-+++ b/tests/g03-visual-states-contract.ps1
-@@ -2,22 +2,22 @@ $ErrorActionPreference = 'Stop'
-
- $root = Split-Path -Parent $PSScriptRoot
- $g03 = Get-Content -LiteralPath (Join-Path $root 'pages/genealogy/g03-create-genealogy.vue') -Raw -Encoding utf8
-
- function Assert-Match {
- param([string]$Content, [string]$Pattern, [string]$Message)
- if ($Content -notmatch $Pattern) { throw $Message }
- }
-
- if ($g03 -match '返回') { throw 'G03 header must use only the approved image back arrow' }
--Assert-Match -Content $g03 -Pattern '(?s)\.flow-header__back,\s*\.flow-header__side\s*\{[^}]*width:\s*72rpx;' -Message 'G03 header side slots must preserve centered title after removing back text'
--Assert-Match -Content $g03 -Pattern '(?s)\.flow-header__back-icon\s*\{[^}]*width:\s*34rpx;[^}]*height:\s*34rpx;' -Message 'G03 back arrow must use the approved visible size'
-+Assert-Match -Content $g03 -Pattern '(?s)' -Message 'G03 must use PageHeader with its dynamic title and custom back handler'
-+if ($g03 -match 'flow-header|flow-header__back|flow-header__title') { throw 'G03 must not retain a private header implementation' }
- Assert-Match -Content $g03 -Pattern '(?s)\.flow-note,\s*\.flow-rule__note\s*\{[^}]*font-size:\s*25rpx;' -Message 'G03 guidance copy must use the approved readable size'
- Assert-Match -Content $g03 -Pattern '(?s)\.flow-rule__option\s*\{[^}]*font-size:\s*23rpx;' -Message 'G03 visibility options must use the approved readable size'
- Assert-Match -Content $g03 -Pattern '(?s)\.field-error\s*\{[^}]*font-size:\s*24rpx;[^}]*line-height:\s*34rpx;' -Message 'G03 field errors must use the approved readable size'
- Assert-Match -Content $g03 -Pattern '(?s)\.flow-error\s*\{[^}]*font-size:\s*25rpx;[^}]*line-height:\s*36rpx;' -Message 'G03 submit errors must use the approved readable size'
-
- foreach ($asset in @('a01-scroll-dialog-v3.png', 'a01-scroll-primary-v3.png', 'a01-scroll-secondary-v3.png')) {
- if ($g03 -notmatch [regex]::Escape($asset)) { throw "G03 must retain approved shared asset: $asset" }
- }
-
- Write-Output 'G03-VISUAL-STATES-CONTRACT PASS'
diff --git a/.superpowers/sdd/review-task-3-a0d19f4..a0d19f4.diff b/.superpowers/sdd/review-task-3-a0d19f4..a0d19f4.diff
deleted file mode 100644
index bbdf4e1..0000000
--- a/.superpowers/sdd/review-task-3-a0d19f4..a0d19f4.diff
+++ /dev/null
@@ -1,7 +0,0 @@
-# Review package: a0d19f4..a0d19f4
-
-## Commits
-
-## Files changed
-
-## Diff
diff --git a/.superpowers/sdd/task-1-brief.md b/.superpowers/sdd/task-1-brief.md
deleted file mode 100644
index 1c5e4e4..0000000
--- a/.superpowers/sdd/task-1-brief.md
+++ /dev/null
@@ -1,116 +0,0 @@
-### Task 1: 为公共 PageHeader 建立安全区与返回契约
-
-**Files:**
-- Modify: `tests/shared-component-document-flow-contract.ps1`
-- Modify: `tests/shared-interaction-accessibility-contract.ps1`
-- Modify: `components/PageHeader.vue`
-
-**Interfaces:**
-- Consumes: uni-app 提供的 `var(--status-bar-height, 0px)`、`getCurrentPages()`、`uni.navigateBack()`、`uni.reLaunch()`。
-- Produces: `customBack: Boolean = false` 属性和 `back` 事件;普通页头及占位槽均使用安全区总高度。
-
-- [ ] **Step 1: 写入普通页头安全区的失败契约**
-
-在 `tests/shared-component-document-flow-contract.ps1` 的 PageHeader 断言中加入:
-
-```powershell
-Assert-Match $header '(?s)\.page-header-slot\s*\{[^}]*height:\s*calc\(104rpx \+ var\(--status-bar-height, 0px\)\);' 'PageHeader secondary slot must reserve status bar plus 104rpx content height'
-Assert-Match $header '(?s)\.page-header\s*\{[^}]*height:\s*calc\(104rpx \+ var\(--status-bar-height, 0px\)\);[^}]*padding-top:\s*var\(--status-bar-height, 0px\);' 'PageHeader secondary header must place its 104rpx content below the status bar'
-Assert-Match $header '(?s)\.page-header-slot--root\s*\{[^}]*height:\s*calc\(124rpx \+ var\(--status-bar-height, 0px\)\);' 'PageHeader root slot height must remain unchanged'
-Assert-Match $header '(?s)\.page-header--root\s*\{[^}]*height:\s*calc\(124rpx \+ var\(--status-bar-height, 0px\)\);' 'PageHeader root height must remain unchanged'
-```
-
-- [ ] **Step 2: 写入自定义返回的失败契约**
-
-在 `tests/shared-interaction-accessibility-contract.ps1` 的 PageHeader 检查中加入:
-
-```powershell
-foreach ($token in @(
- 'customBack: { type: Boolean, default: false }',
- 'const emit = defineEmits(["brand", "notice", "action", "back"]);',
- 'if (props.customBack) {',
- 'emit("back");',
- 'uni.navigateBack();',
- 'uni.reLaunch({ url: props.fallbackUrl });'
-)) {
- if (-not $header.Contains($token)) { throw "PageHeader back contract missing: $token" }
-}
-```
-
-- [ ] **Step 3: 运行聚焦契约并确认 RED**
-
-Run:
-
-```powershell
-& powershell -ExecutionPolicy Bypass -File tests/shared-component-document-flow-contract.ps1
-& powershell -ExecutionPolicy Bypass -File tests/shared-interaction-accessibility-contract.ps1
-```
-
-Expected: 两项均 FAIL,分别指出普通页头仍为固定 `104rpx`、`customBack` 合同不存在。
-
-- [ ] **Step 4: 实现最小公共组件改动**
-
-在 `components/PageHeader.vue` 中补充属性和事件:
-
-```js
-const props = defineProps({
- title: { type: String, required: true },
- action: { type: String, default: "" },
- root: { type: Boolean, default: false },
- unreadCount: { type: Number, default: 0 },
- fallbackUrl: { type: String, default: "/pages/genealogy/g01-my-genealogies" },
- customBack: { type: Boolean, default: false },
-});
-
-const emit = defineEmits(["brand", "notice", "action", "back"]);
-
-const goBack = () => {
- if (props.customBack) {
- emit("back");
- return;
- }
- const stack = getCurrentPages();
- if (stack.length > 1) {
- uni.navigateBack();
- return;
- }
- uni.reLaunch({ url: props.fallbackUrl });
-};
-```
-
-把普通变体的尺寸改为:
-
-```scss
-.page-header-slot {
- height: calc(104rpx + var(--status-bar-height, 0px));
- flex: none;
-}
-
-.page-header {
- height: calc(104rpx + var(--status-bar-height, 0px));
- padding: 0 24rpx;
- padding-top: var(--status-bar-height, 0px);
-}
-```
-
-保留 `.page-header-slot--root` 与 `.page-header--root` 的现有 `124rpx` 规则不变。
-
-- [ ] **Step 5: 运行聚焦契约并确认 GREEN**
-
-Run:
-
-```powershell
-& powershell -ExecutionPolicy Bypass -File tests/shared-component-document-flow-contract.ps1
-& powershell -ExecutionPolicy Bypass -File tests/shared-interaction-accessibility-contract.ps1
-git diff --check
-```
-
-Expected: 两项输出 `PASS`,`git diff --check` 退出码为 0。
-
-- [ ] **Step 6: 提交公共组件改动**
-
-```powershell
-git add components/PageHeader.vue tests/shared-component-document-flow-contract.ps1 tests/shared-interaction-accessibility-contract.ps1
-git commit -m "fix: adapt shared page header to safe area"
-```
-
diff --git a/.superpowers/sdd/task-1-report.md b/.superpowers/sdd/task-1-report.md
deleted file mode 100644
index 3af5a92..0000000
--- a/.superpowers/sdd/task-1-report.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# Task 1 Report
-
-Status: DONE
-
-## Changed files
-
-- `components/PageHeader.vue`
-- `tests/shared-component-document-flow-contract.ps1`
-- `tests/shared-interaction-accessibility-contract.ps1`
-
-## RED
-
-Command:
-
-```powershell
-& powershell -ExecutionPolicy Bypass -File tests/shared-component-document-flow-contract.ps1
-& powershell -ExecutionPolicy Bypass -File tests/shared-interaction-accessibility-contract.ps1
-```
-
-Failure evidence:
-
-- `PageHeader secondary slot must reserve status bar plus 104rpx content height`
-- `PageHeader back contract missing: customBack: { type: Boolean, default: false }`
-
-Both contract scripts exited with code `1`, for the expected missing behavior.
-
-## GREEN
-
-Command:
-
-```powershell
-& powershell -ExecutionPolicy Bypass -File tests/shared-component-document-flow-contract.ps1
-& powershell -ExecutionPolicy Bypass -File tests/shared-interaction-accessibility-contract.ps1
-git diff --check
-```
-
-Result summary:
-
-- `SHARED-COMPONENT-DOCUMENT-FLOW-CONTRACT PASS`
-- `SHARED-INTERACTION-ACCESSIBILITY-CONTRACT PASS`
-- `git diff --check` exited `0`
-
-## Commit
-
-`2f22df6 fix: adapt shared page header to safe area`
-
-## Self-review
-
-- Normal PageHeader slot and header use `calc(104rpx + var(--status-bar-height, 0px))`; the header applies status-bar top padding.
-- Root slot and header retain their `calc(124rpx + var(--status-bar-height, 0px))` rules.
-- `customBack` emits `back` and returns before navigation; normal navigation retains stack-aware back and fallback relaunch behavior.
-- The added contract tests cover the required exact public interface and layout declarations.
-
-## Concerns
-
-None. Git emitted existing line-ending conversion warnings during checks and commit, but all required checks passed.
diff --git a/.superpowers/sdd/task-2-brief.md b/.superpowers/sdd/task-2-brief.md
deleted file mode 100644
index 05fdf23..0000000
--- a/.superpowers/sdd/task-2-brief.md
+++ /dev/null
@@ -1,98 +0,0 @@
-### Task 2: 用公共 PageHeader 替换 G03 自建页头
-
-**Files:**
-- Modify: `tests/g03-visual-states-contract.ps1`
-- Modify: `tests/g03-create-flow-contract.ps1`
-- Modify: `tests/g03-document-flow-contract.ps1`
-- Modify: `pages/genealogy/g03-create-genealogy.vue`
-
-**Interfaces:**
-- Consumes: Task 1 的 ``。
-- Produces: G03 动态标题 `isAncestorStep ? "录入首代人物" : "创建家谱"`,以及现有 `goBack()` 对第一、第二步的业务分流。
-
-- [ ] **Step 1: 将 G03 契约改成公共页头要求**
-
-在 `tests/g03-visual-states-contract.ps1` 删除 `.flow-header__back`、`.flow-header__side` 和 `.flow-header__back-icon` 尺寸断言,改为:
-
-```powershell
-Assert-Match -Content $g03 -Pattern '(?s)' -Message 'G03 must use PageHeader with its dynamic title and custom back handler'
-if ($g03 -match 'flow-header|flow-header__back|flow-header__title') { throw 'G03 must not retain a private header implementation' }
-```
-
-在 `tests/g03-create-flow-contract.ps1` 的 required 项中加入:
-
-```powershell
-'import PageHeader from "@/components/PageHeader.vue";',
-'
-```
-
-在 `
-```
-
-本任务阶段不得引入 `appApi`、`calcMD5`、真实登录、真实微信授权或不存在的 A-02/A-03 路由;跨页跳转在 Task 5 的执行门槛满足后替换。
-
-- [ ] **Step 3: 写入页面主体,保持三种入口与显式复选框**
-
-```vue
-
-
-
-
-
- 家谱为家族留存可传承的记忆
-
-
-
-
-
- 我已阅读并同意《用户协议》与《隐私政策》
-
-
-
-```
-
-- [ ] **Step 4: 完成最小 SCSS 外观**
-
-要求:用 `background-image` 组合 `header-cinnabar-texture-v2.jpg`、`paper-rice-texture-v2.jpg`;红头可见祠堂线描;纸面底部可见但低对比的 `footer-mountain-bamboo.png`;按钮高度至少 `88rpx`;不使用 CSS Grid、`gap`、`clip-path`、滤镜或外部 URL。协议区域不得使用“登录即表示同意”文案,未选中复选框只显示古金圆圈,选中后显示朱砂对勾。
-
-- [ ] **Step 5: 运行合同测试,确认通过**
-
-Run: `powershell -ExecutionPolicy Bypass -File tests\a01-login-guide-contract.ps1`
-Expected: `PASS A-01 login guide contract`.
-
-- [ ] **Step 6: 做一次静态构建健康检查**
-
-Run: `powershell -ExecutionPolicy Bypass -File tests\compile-audit.ps1`
-Expected: `PASS compile audit`.
-
-- [ ] **Step 7: 提交独立 A-01 页面**
-
-```powershell
-git add pages/auth/entry.vue pages.json tests/a01-login-guide-contract.ps1
-git commit -m "feat: add A01 login guide"
-```
-
-### Task 4: 视觉验收与设计状态记录
-
-**Files:**
-- Modify: `docs/规划.md`
-- Test: `tests/a01-login-guide-contract.ps1`, HBuilderX Android 小屏预览
-
-**Interfaces:**
-- Consumes: Task 3 完成的页面与合同
-- Produces: D2 阶段下 A-01 的真实设计状态
-
-- [ ] **Step 1: 在 HBuilderX 中预览 `pages/auth/entry` 的 `360 × 800dp` 画面**
-
-检查:红头、标题、三个按钮和未勾选协议同时可见;账号密码为唯一红色主操作;宣纸与山水不压住协议;没有底部 Tab。
-
-- [ ] **Step 2: 手动验证两种协议状态**
-
-1. 初始未勾选,分别点击三个入口,均显示“请先阅读并同意相关协议”,且不跳转。
-2. 勾选后复选框显示朱砂对勾;三个入口只显示本地确认提示,不请求网络。
-
-- [ ] **Step 3: 仅在上述视觉和手动检查通过后更新 `docs/规划.md`**
-
-将 `A-01 启动 / 登录引导页` 改为“视觉完成(已验收)”;D2 保持“进行中”,因为 A-02 至 A-06 尚未完成。
-
-- [ ] **Step 4: 重跑最终验证**
-
-Run:
-
-```powershell
-powershell -ExecutionPolicy Bypass -File tests\a01-login-guide-contract.ps1
-powershell -ExecutionPolicy Bypass -File tests\compile-audit.ps1
-powershell -ExecutionPolicy Bypass -File tests\uni-scss-injection.ps1
-```
-
-Expected: 三条命令均输出 `PASS`.
-
-- [ ] **Step 5: 提交验收记录**
-
-```powershell
-git add docs/规划.md
-git commit -m "docs: mark A01 visual review"
-```
-
-### Task 5: D2 跨页设计完成后的路由接通(执行门槛任务)
-
-**Precondition:** A-02 与 A-03 的设计说明、页面文件和 `pages.json` 路由均已通过各自视觉验收;否则此任务不得开始。
-
-**Files:**
-- Modify: `pages/auth/entry.vue`
-- Test: `tests/a01-login-guide-contract.ps1`(扩展路由断言)
-
-**Interfaces:**
-- Consumes: A-02 的已验收密码页路由;A-03 的已验收验证码/微信回跳页路由
-- Produces: `entryRoutes`,键固定为 `password`、`phone`、`wechat`
-
-- [ ] **Step 1: 扩展合同,要求所有目标路由已在 `pages.json` 注册**
-
-```powershell
-foreach ($route in @('pages/auth/password-login', 'pages/auth/phone-login')) {
- if ($route -notin $paths) { throw "Missing approved auth target route: $route" }
-}
-```
-
-- [ ] **Step 2: 将 Task 3 的本地确认提示替换为唯一的目标映射**
-
-```js
-const entryRoutes = {
- password: '/pages/auth/password-login',
- phone: '/pages/auth/phone-login',
- wechat: '/pages/auth/phone-login?source=wechat'
-}
-
-const enterLogin = (entry) => {
- if (!consented.value) {
- uni.showToast({ title: '请先阅读并同意相关协议', icon: 'none' })
- return
- }
- uni.navigateTo({ url: entryRoutes[entry] })
-}
-```
-
-模板调用固定为 `enterLogin('password')`、`enterLogin('phone')`、`enterLogin('wechat')`。不得在 A-01 增加任何接口调用或注册入口。
-
-- [ ] **Step 3: 运行合同和 A-02/A-03 各自的视觉合同**
-
-Run: `powershell -ExecutionPolicy Bypass -File tests\a01-login-guide-contract.ps1`
-Expected: `PASS A-01 login guide contract`.
-
-- [ ] **Step 4: 提交跨页接通**
-
-```powershell
-git add pages/auth/entry.vue tests/a01-login-guide-contract.ps1
-git commit -m "feat: connect A01 auth routes"
-```
-
-## Self-Review
-
-- **规格覆盖:** Task 1 和 Task 3 覆盖三入口、主次层级、本地资产、无接口和显式协议;Task 4 覆盖小屏视觉与两种协议状态;Task 5 覆盖 A-02/A-03 的跳转契约且被 D2 设计完成门槛锁住。
-- **占位检查:** 没有未落实的实现步骤。Task 2 的来源 URL 是执行时取得的审计事实;没有可验证来源即停止该任务,不得提交资产。
-- **命名一致性:** 页面状态固定为 `consented`,守卫固定为 `enterLogin`,跨页唯一映射固定为 `entryRoutes`;Task 1 与 Task 5 的测试和实现使用同一命名。
-# 已失效历史记录(2026-07-13)
-
-> 本计划在未完成设计归档与验收前被错误建立,现禁止执行。唯一有效的 A-01 归档为 `docs/design/A01_启动登录引导_设计记录.md`;当前工作仍以 `docs/交接记录.md` 的 G-01 验收为准。
diff --git a/docs/superpowers/plans/2026-07-13-a01-reference-asset-rebuild.md b/docs/superpowers/plans/2026-07-13-a01-reference-asset-rebuild.md
deleted file mode 100644
index 4a497d8..0000000
--- a/docs/superpowers/plans/2026-07-13-a01-reference-asset-rebuild.md
+++ /dev/null
@@ -1,150 +0,0 @@
-# A01 Reference Asset Rebuild Implementation Plan
-
-> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
-
-**Goal:** Rebuild A01's visible red header, paper scene, title lockup, divider knots, and button frames from the approved 412 × 915 reference while preserving real DOM interactions.
-
-**Architecture:** `pages/auth/entry.vue` remains the only interactive owner. Reference-derived raster assets own decorative visual details, while DOM owns button labels, icons, agreement state, and navigation. A small local asset-preparation command reads only the approved source screen, exports composited header/body layers and alpha PNG foreground assets, then leaves no runtime dependency on that command.
-
-**Tech Stack:** Uni-app Vue 3, scoped SCSS, PowerShell/System.Drawing asset preparation, existing PowerShell contract and alpha audits.
-
-## Global Constraints
-
-- Visual truth is `docs/design/screens/A01-启动登录引导-栅格验收-412x915.png` at 412 × 915.
-- Do not render the whole reference image as page content; header, body scene, title lockup, divider knot, and button frames are distinct assets.
-- Preserve A01 agreement gating and `'/pages/auth/login?agreed=1'` navigation.
-- Do not modify `components/GenealogyCard.vue` or `unpackage/dist/cache/.vite/deps/*`.
-- New v2 frame/title/knot assets must have transparent outer corners; remove A01's unused v1 generated ornaments.
-
----
-
-### Task 1: Encode the v2 reference-asset contract
-
-**Files:**
-- Modify: `tests/a01-a02-ui-contract.ps1`
-- Modify: `tests/a01-asset-alpha-audit.ps1`
-
-**Interfaces:**
-- Consumes: current `pages/auth/entry.vue` and existing v1 A01 assets.
-- Produces: a failing contract requiring `auth-header-reference-v2.png`, `auth-body-scene-v2.png`, `auth-brand-lockup-v2.png`, `auth-divider-knot-v2.png`, `auth-primary-frame-v2.png`, and `auth-secondary-frame-v2.png`.
-
-- [ ] **Step 1: Write the failing test**
-
-Add these required paths to the A01 entry contract:
-
-```powershell
-foreach ($asset in @(
- 'auth-header-reference-v2.png', 'auth-body-scene-v2.png',
- 'auth-brand-lockup-v2.png', 'auth-divider-knot-v2.png',
- 'auth-primary-frame-v2.png', 'auth-secondary-frame-v2.png'
-)) {
- Assert-Contains -Content $entry -Expected $asset -Message "Missing A01 reference asset: $asset"
-}
-Assert-NotContains -Content $entry -Unexpected 'auth-button-corner-v1.png' -Message 'A01 must not retain the rejected generated corner asset'
-```
-
-Replace the alpha-audit icon list with the four transparent v2 foreground assets and assert their source dimensions: brand lockup `240 × 110`, divider knot `80 × 48`, primary frame `291 × 65`, secondary frame `291 × 65`. Assert header `412 × 139` and body scene `412 × 776` exist as opaque scene layers.
-
-- [ ] **Step 2: Run test to verify it fails**
-
-Run: `powershell -ExecutionPolicy Bypass -File tests\a01-a02-ui-contract.ps1; powershell -ExecutionPolicy Bypass -File tests\a01-asset-alpha-audit.ps1`
-
-Expected: FAIL because the six `v2` paths are not referenced or do not exist.
-
-- [ ] **Step 3: Commit the contract only after Task 2 passes**
-
-Do not commit an intentionally failing contract. It is staged with the asset and page changes in Task 3.
-
-### Task 2: Prepare exact reference-derived v2 assets
-
-**Files:**
-- Create: `static/assets/backgrounds/auth-header-reference-v2.png`
-- Create: `static/assets/backgrounds/auth-body-scene-v2.png`
-- Create: `static/assets/icons/auth/auth-brand-lockup-v2.png`
-- Create: `static/assets/icons/auth/auth-divider-knot-v2.png`
-- Create: `static/assets/icons/auth/auth-primary-frame-v2.png`
-- Create: `static/assets/icons/auth/auth-secondary-frame-v2.png`
-- Delete: `static/assets/icons/auth/auth-button-corner-v1.png`
-- Delete: `static/assets/icons/auth/auth-divider-knot-v1.png`
-- Delete: `static/assets/icons/auth/auth-title-cloud-v1.png`
-
-**Interfaces:**
-- Consumes: `docs/design/screens/A01-启动登录引导-栅格验收-412x915.png`.
-- Produces: fixed-pixel v2 assets used by `entry.vue`; no asset contains a clickable control or agreement copy.
-
-- [ ] **Step 1: Export the visual layers from the approved source**
-
-Use System.Drawing to read the 412 × 915 source. Crop rows `0..138` to `auth-header-reference-v2.png`. Crop rows `139..914` to `auth-body-scene-v2.png`, replacing the title, divider, button, register and agreement foreground rectangles with sampled rice-paper pixels before saving. The retained side architecture, bamboo, and lower mountain must stay in their original reference positions.
-
-- [ ] **Step 2: Export alpha foregrounds**
-
-Use the same source to create: a `240 × 110` brand lockup (dark title plus both gold clouds), an `80 × 48` divider knot, and two `291 × 65` button frame images. For the foregrounds, make the paper/background pixels transparent, preserve the exact colored ornament pixels, and for each frame clear its center rectangle while retaining the double rule and all four reference corner curls.
-
-- [ ] **Step 3: Inspect and audit the assets**
-
-Open the three frame/title/knot PNGs and confirm their outer corners are transparent and their visible artwork has no green matte. Run: `powershell -ExecutionPolicy Bypass -File tests\a01-asset-alpha-audit.ps1`.
-
-Expected: PASS once the Task 1 audit rules are in place.
-
-### Task 3: Replace the A01 decorative layer implementation
-
-**Files:**
-- Modify: `pages/auth/entry.vue`
-- Modify: `docs/design/A01_启动登录引导_设计记录.md`
-- Modify: `design-qa.md`
-- Modify: `tests/a01-a02-ui-contract.ps1`
-- Modify: `tests/a01-asset-alpha-audit.ps1`
-
-**Interfaces:**
-- Consumes: all six v2 assets from Task 2.
-- Produces: reference-derived visuals with unchanged `toggleAgreement`, `openLogin`, `prepareWechatLogin`, `prepareRegister`, and `prepareAgreement` functions.
-
-- [ ] **Step 1: Update page asset ownership**
-
-Replace the generated header plus `header-seal` overlay with `auth-header-reference-v2.png`. Replace the current paper/scenery pair with the prepared body scene layer. Replace the text/cloud title group with `auth-brand-lockup-v2.png`; retain its wrapper only for layout. Keep CSS gold rules but replace each v1 divider ornament with `auth-divider-knot-v2.png`.
-
-For both button types, remove all four `.button-corner-asset` images. Add one absolute `.entry-button__frame` image that uses the matching primary or secondary frame asset. Keep the DOM icon/text group above the frame and preserve existing click handlers.
-
-- [ ] **Step 2: Update visual calibration values and records**
-
-Set the lockup and divider image dimensions to their source ratios, keep the validated vertical anchors, and remove stale v1 asset statements from the A01 design record. Update `design-qa.md` to list the latest screenshot as pending visual confirmation rather than passed.
-
-- [ ] **Step 3: Run the focused tests**
-
-Run: `powershell -ExecutionPolicy Bypass -File tests\a01-a02-ui-contract.ps1; powershell -ExecutionPolicy Bypass -File tests\a01-asset-alpha-audit.ps1; powershell -ExecutionPolicy Bypass -File tests\a01-design-record-audit.ps1; powershell -ExecutionPolicy Bypass -File tests\compile-audit.ps1`
-
-Expected: all four scripts print `PASS` with exit code 0.
-
-- [ ] **Step 4: Run full regression verification**
-
-Run: `Get-ChildItem -LiteralPath tests -Filter *.ps1 | Sort-Object Name | ForEach-Object { & powershell -ExecutionPolicy Bypass -File $_.FullName; if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } }; git diff --check`
-
-Expected: every test script passes and `git diff --check` reports no errors.
-
-- [ ] **Step 5: Commit the reference rebuild**
-
-```powershell
-git add -- pages/auth/entry.vue tests/a01-a02-ui-contract.ps1 tests/a01-asset-alpha-audit.ps1 docs/design/A01_启动登录引导_设计记录.md design-qa.md static/assets/backgrounds/auth-header-reference-v2.png static/assets/backgrounds/auth-body-scene-v2.png static/assets/icons/auth/auth-brand-lockup-v2.png static/assets/icons/auth/auth-divider-knot-v2.png static/assets/icons/auth/auth-primary-frame-v2.png static/assets/icons/auth/auth-secondary-frame-v2.png static/assets/icons/auth/auth-button-corner-v1.png static/assets/icons/auth/auth-divider-knot-v1.png static/assets/icons/auth/auth-title-cloud-v1.png
-git commit -m "fix: rebuild A01 reference visual assets"
-```
-
-### Task 4: Obtain runtime evidence
-
-**Files:**
-- Modify: `design-qa.md` after receiving user-provided HBuilderX/Android screenshots.
-
-**Interfaces:**
-- Consumes: rendered unchecked A01 screenshots at 412 × 915 and 320 × 568.
-- Produces: a visual QA verdict grounded in those screenshots.
-
-- [ ] **Step 1: Compare the two same-state screenshots**
-
-At 412 × 915, verify: header bottom gold band and seal, side architecture/bamboo/lower mountain placements, brand lockup scale, both frame corner curls, divider knots, and agreement baseline.
-
-- [ ] **Step 2: Check narrow-screen safety**
-
-At 320 × 568, scroll to the agreement row and verify that the checkbox and all copy remain visible above the system navigation area.
-
-- [ ] **Step 3: Record evidence status**
-
-Set `design-qa.md` to `final result: passed` only if both screenshots satisfy the checks; otherwise document the remaining pixel difference and keep it pending.
diff --git a/docs/superpowers/plans/2026-07-13-a01-runtime-visual-calibration.md b/docs/superpowers/plans/2026-07-13-a01-runtime-visual-calibration.md
deleted file mode 100644
index 890f55e..0000000
--- a/docs/superpowers/plans/2026-07-13-a01-runtime-visual-calibration.md
+++ /dev/null
@@ -1,273 +0,0 @@
-# A-01 Runtime Visual Calibration Implementation Plan
-
-> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
-
-**Goal:** Make the A-01 unchecked entry page's real DOM match the approved 412 x 915 visual reference for its header, title, dividers, buttons, registration entry, and agreement row.
-
-**Architecture:** `docs/design/A01_启动登录引导_设计记录.md` owns the calibrated A-01 layout contract. `pages/auth/entry.vue` consumes that contract through local scoped styles and named A-01 elements; it retains the existing local interaction handlers. `tests/a01-a02-ui-contract.ps1` guards the layout anchors and blocks the rejected registration side lines and button-corner construction.
-
-**Tech Stack:** uni-app Vue 3, scoped SCSS, local PNG assets, PowerShell contract scripts.
-
-## Global Constraints
-
-- Use `docs/design/screens/A01-启动登录引导-栅格验收-412x915.png` as the sole visual reference for the unchecked state.
-- Keep real DOM, local-only interaction, the existing route to A-02, and explicit agreement gating.
-- Do not use the whole reference image as page content, call APIs, modify A-02, or alter the existing authentication backgrounds in this task.
-- Preserve vertical scrolling and `env(safe-area-inset-bottom)` for 320 x 568.
-- Use local transparent PNG assets for title cloud imagery; do not use text glyphs or emoji as ornaments.
-
----
-
-### Task 1: Make the A-01 record the sole measured-layout owner and add a red visual contract
-
-**Files:**
-- Modify: `docs/design/A01_启动登录引导_设计记录.md:30-33`
-- Modify: `docs/superpowers/specs/2026-07-13-a01-runtime-visual-calibration-design.md:7-31`
-- Modify: `docs/superpowers/specs/2026-07-13-a01-a02-static-ui-implementation-design.md:19`
-- Modify: `tests/a01-a02-ui-contract.ps1:74-87`
-
-**Interfaces:**
-- Consumes: approved `A01-启动登录引导-栅格验收-412x915.png` and the current local route/interaction contract.
-- Produces: one permanent 750rpx coordinate table and a contract that rejects the old visual construction.
-
-- [ ] **Step 1: Replace the old prose layout values in the A-01 design record with the calibrated table**
-
- Replace the current fixed-layout bullets with this table. It is the only owner of these values:
-
- ```markdown
- | 元素 | 412 × 915 像素基准 | 750rpx 实现基准 |
- | --- | --- | --- |
- | 朱砂家祠头图 | 高 139px | 高 253rpx |
- | 标题区起点 | 红头后约 82px | `padding-top: 150rpx` |
- | 标题分隔饰线 | 宽约 234px | 宽 426rpx;上、下间距独立 |
- | 两个按钮 | x=60px,宽约 291px,高约 65px | `margin: 95rpx 110rpx 0`,高 118rpx |
- | 两按钮间距 | 约 28px | `margin-top: 51rpx` |
- | 注册入口 | 微信按钮后约 56px;无左右短线 | `margin-top: 98rpx` |
- | 协议行 | 注册入口后约 70px | `margin-top: 128rpx` 加安全区 |
- ```
-
-- [ ] **Step 2: Remove the superseded dimensions from the static UI implementation contract**
-
- In `2026-07-13-a01-runtime-visual-calibration-design.md`, replace its numeric coordinate table with this ownership statement so the design record remains the only permanent coordinate source:
-
- ```markdown
- ## Contract ownership
-
- `docs/design/A01_启动登录引导_设计记录.md` owns the calibrated 412 × 915 coordinate table and acceptance thresholds. This implementation specification records scope and component strategy only; it does not define duplicate layout values.
- ```
-
- Then replace the static UI implementation contract's layout sentence with:
-
- ```markdown
- - A-01 的运行时布局唯一遵循 `docs/design/A01_启动登录引导_设计记录.md` 中的“412 × 915 运行时校准表”;本文件不再重复或定义按钮与间距数值。
- ```
-
-- [ ] **Step 3: Extend the PowerShell contract before changing the page**
-
- Add these assertions immediately after the existing A-01 DOM-structure assertions:
-
- ```powershell
- foreach ($requiredVisualAnchor in @(
- 'brand-divider--top',
- 'brand-divider--bottom',
- 'entry-button--primary',
- 'entry-button--secondary',
- 'height: 253rpx',
- 'padding: 150rpx 56rpx 0',
- 'width: 426rpx',
- 'margin: 95rpx 110rpx 0',
- 'height: 118rpx',
- 'margin-top: 51rpx',
- 'margin-top: 98rpx',
- 'margin-top: 128rpx'
- )) {
- Assert-Contains -Content $entry -Expected $requiredVisualAnchor -Message "Missing A-01 calibrated visual anchor: $requiredVisualAnchor"
- }
- foreach ($rejectedVisualConstruction in @('link-line', 'button-corner', 'class="auth-button primary-button"')) {
- Assert-NotContains -Content $entry -Unexpected $rejectedVisualConstruction -Message "A-01 retains rejected visual construction: $rejectedVisualConstruction"
- }
- ```
-
-- [ ] **Step 4: Run the focused contract to prove it is red**
-
- Run: `powershell -ExecutionPolicy Bypass -File tests\a01-a02-ui-contract.ps1`
-
- Expected: failure mentioning `Missing A-01 calibrated visual anchor` or `A-01 retains rejected visual construction`.
-
-### Task 2: Rebuild A-01's measured DOM layout without changing its interaction contract
-
-**Files:**
-- Modify: `pages/auth/entry.vue:11-65,145-324`
-- Test: `tests/a01-a02-ui-contract.ps1`
-
-**Interfaces:**
-- Consumes: the measured A-01 table from the design record and existing `openLogin`, `prepareWechatLogin`, `prepareRegister`, and `toggleAgreement` handlers.
-- Produces: `brand-divider--top`, `brand-divider--bottom`, `entry-button--primary`, and `entry-button--secondary` rendered from real DOM.
-
-- [ ] **Step 1: Replace the entry markup that creates the rejected decorations**
-
- Keep the existing cloud `image` source, but split the dividers by purpose, remove the registration side lines, remove the four corner views, and use A-01-specific button classes:
-
- ```vue
-
-
-
-
-
-
-
-
-
- 登录
-
-
-
- 微信登录
-
-
- 还没有账号?注册账号
-
-
- ```
-
- Render the second divider after `brand-subtitle` with the same child structure and class `brand-divider--bottom`.
-
-- [ ] **Step 2: Replace the old generic layout selectors with these calibrated scoped rules**
-
- Keep the existing background and script blocks unchanged. Replace `.auth-header` through `.link-hover` with the following A-01 rules:
-
- ```scss
- .auth-header { position: relative; height: 253rpx; overflow: hidden; }
-
- .brand-intro {
- display: flex;
- flex-direction: column;
- align-items: center;
- padding: 150rpx 56rpx 0;
- color: #3f2c1d;
- }
-
- .brand-divider {
- display: flex;
- align-items: center;
- justify-content: center;
- width: 426rpx;
- }
- .brand-divider--top { margin: 47rpx 0 21rpx; }
- .brand-divider--bottom { margin: 34rpx 0 30rpx; }
- .brand-divider__line { flex: 1; height: 1rpx; background: #d5a34f; }
- .brand-divider__ornament { width: 44rpx; height: 24rpx; margin: 0 14rpx; }
-
- .entry-actions { margin: 95rpx 110rpx 0; }
- .entry-button {
- position: relative;
- display: flex;
- align-items: center;
- justify-content: center;
- box-sizing: border-box;
- width: 100%;
- height: 118rpx;
- border: 2rpx solid #d8ad63;
- border-radius: 6rpx;
- font-family: STKaiti, KaiTi, serif;
- font-size: 38rpx;
- letter-spacing: 4rpx;
- }
- .entry-button::after {
- position: absolute;
- inset: 10rpx;
- border: 1rpx solid rgba(225, 180, 105, 0.92);
- border-radius: 2rpx;
- content: '';
- pointer-events: none;
- }
- .entry-button--primary {
- border-color: #9e170e;
- background: #b7170d;
- color: #fffaf0;
- }
- .entry-button--primary::after { border-color: #edc67c; }
- .entry-button--secondary {
- margin-top: 51rpx;
- background: rgba(255, 252, 245, 0.82);
- color: #60442f;
- }
- .entry-button__icon { width: 46rpx; height: 46rpx; margin-right: 18rpx; }
- .entry-button__icon--wechat { width: 52rpx; }
- .entry-button--primary .entry-button__icon { filter: brightness(0) invert(1); }
- .entry-button > text { position: relative; z-index: 1; }
- .entry-button--pressed { opacity: 0.84; }
-
- .register-link {
- display: flex;
- align-items: center;
- justify-content: center;
- margin-top: 98rpx;
- color: #60442f;
- font-family: STKaiti, KaiTi, serif;
- font-size: 30rpx;
- letter-spacing: 2rpx;
- white-space: nowrap;
- }
- .agreement-row { margin-top: 128rpx; }
- ```
-
- Delete `.gold-divider`, `.divider-line`, `.divider-ornament`, `.auth-button`, `.primary-button`, `.secondary-button`, `.button-icon`, `.wechat-icon`, `.button-hover`, `.button-corner`, all `.corner-*` selectors, and `.link-line`. Do not change any handler or copy.
-
-- [ ] **Step 3: Run the focused contract and relevant compilation audits**
-
- Run:
-
- ```powershell
- powershell -ExecutionPolicy Bypass -File tests\a01-a02-ui-contract.ps1
- powershell -ExecutionPolicy Bypass -File tests\vue3-entry.ps1
- powershell -ExecutionPolicy Bypass -File tests\compile-audit.ps1
- ```
-
- Expected: all three scripts print `PASS`; the focused contract prints `A01-A02-UI-CONTRACT PASS`.
-
-### Task 3: Record the completed static change and request runtime evidence
-
-**Files:**
-- Modify: `docs/design/A01_启动登录引导_设计记录.md:51-57`
-- Modify: `design-qa.md:1-31`
-- Test: `tests/a01-a02-ui-contract.ps1`, `tests/vue3-entry.ps1`, `tests/compile-audit.ps1`
-
-**Interfaces:**
-- Consumes: passing static contract and a page that still needs HBuilderX/Android visual evidence.
-- Produces: an honest handoff that separates static verification from runtime screenshot acceptance.
-
-- [ ] **Step 1: Update the design record's verification state**
-
- Add this sentence under the runtime-verification gap:
-
- ```markdown
- - 2026-07-13 已按 412 × 915 参考图重新校准真实 DOM 的标题区、分隔饰线、双按钮、注册入口与协议行;静态合同通过,但仍须由同尺寸 HBuilderX 或 Android 截图叠图确认,未确认前不得标记 A-01 完成。
- ```
-
-- [ ] **Step 2: Replace the stale QA finding with the exact next capture**
-
- Set `design-qa.md` to state that the source remains `A01-启动登录引导-栅格验收-412x915.png`, static calibration has passed, and the sole remaining evidence is an unchecked `412 x 915` HBuilderX/Android capture without browser chrome plus a `320 x 568` safety/scroll capture.
-
-- [ ] **Step 3: Run the final static verification and inspect the scoped diff**
-
- Run:
-
- ```powershell
- powershell -ExecutionPolicy Bypass -File tests\a01-a02-ui-contract.ps1
- powershell -ExecutionPolicy Bypass -File tests\vue3-entry.ps1
- powershell -ExecutionPolicy Bypass -File tests\compile-audit.ps1
- git diff --check
- git diff -- pages/auth/entry.vue tests/a01-a02-ui-contract.ps1 docs/design/A01_启动登录引导_设计记录.md docs/superpowers/specs/2026-07-13-a01-runtime-visual-calibration-design.md docs/superpowers/specs/2026-07-13-a01-a02-static-ui-implementation-design.md design-qa.md
- ```
-
- Expected: all scripts pass, `git diff --check` is silent, and no interaction, route, or API code is changed.
-
-- [ ] **Step 4: Commit only the A-01 calibration work**
-
- ```powershell
- git add -- pages/auth/entry.vue tests/a01-a02-ui-contract.ps1 docs/design/A01_启动登录引导_设计记录.md docs/superpowers/specs/2026-07-13-a01-runtime-visual-calibration-design.md docs/superpowers/specs/2026-07-13-a01-a02-static-ui-implementation-design.md design-qa.md
- git commit -m "fix: calibrate A01 entry visual layout"
- ```
-
- Expected: the commit includes only the listed A-01 files; it must not include `components/GenealogyCard.vue` or Vite cache files.
diff --git a/docs/superpowers/plans/2026-07-13-a01-text-registration-evidence.md b/docs/superpowers/plans/2026-07-13-a01-text-registration-evidence.md
deleted file mode 100644
index 884fb83..0000000
--- a/docs/superpowers/plans/2026-07-13-a01-text-registration-evidence.md
+++ /dev/null
@@ -1,312 +0,0 @@
-# A-01 Text Registration Entry Design Evidence Implementation Plan
-
-> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
-
-**Goal:** 完成 A-01“登录 + 微信登录 + 文字注册入口”的可归档设计证据与 Android 固定栅格验收口径,不修改 uni-app 页面、接口或打包。
-
-**Architecture:** `docs/design/A01_启动登录引导_设计记录.md` 是 A-01 当前规则的唯一所有者。PowerShell 审计脚本只验证该记录、归档效果稿和项目内静态资产;四个尺寸的效果稿是静态设计验证,不冒充 uni-app 运行时验收。
-
-**Tech Stack:** Markdown、PNG/JPG 静态资产、PowerShell 5.1、内置图像生成工具、HBuilderX Web 浏览器(仅在页面实现阶段用于运行时验收)。
-
-## Global Constraints
-
-- 只做 `D2 / A-01` 的设计证据;不改 `.vue`、路由、接口、真实登录、Android 打包或依赖。
-- 当前设计唯一所有者是 `docs/design/A01_启动登录引导_设计记录.md`;本计划和所有审计脚本不得重复定义入口规则。
-- A-01 只有朱砂红“登录”主按钮、古金描边“微信登录”按钮和“还没有账号?注册账号”文字入口。
-- 登录进入 A-02;A-02 承接“账号密码登录 / 手机验证码登录”双标签;微信授权属于 A-03,注册属于 A-04,忘记密码属于 A-05。
-- 协议复选框默认未勾选。任何进入操作都不能默认视为用户同意协议;未勾选仅提示用户先确认协议。
-- 使用 Android `rpx + flex` 设计口径,不使用 CSS Grid 或 `gap`;底部安全区规则必须使用 `env(safe-area-inset-bottom)`。
-- 登录欢迎页的头图、宣纸和山水必须是 A-01 独立资产,不复用 G-01 的 `footer-mountain-bamboo.png`。
-- 功能图标必须为项目内 `96 × 96px` RGBA 透明 PNG;微信标志只使用官方或许可来源的原色透明 PNG,不重绘或改色。
-- 效果稿 v1、v2 是历史证据,保留但不可作为当前入口结构依据;当前整页效果稿 v3 也不能充当真实背景或图标资产。
-
-## File Structure
-
-| 文件 | 职责 |
-| --- | --- |
-| `docs/design/A01_启动登录引导_设计记录.md` | A-01 当前入口、栅格、状态、资产清单与静态验收结论的唯一设计来源。 |
-| `tests/a01-design-record-audit.ps1` | 验证当前入口、路由归属、栅格约束和 v3 效果稿的归档存在。 |
-| `static/assets/backgrounds/auth-ancestral-header-v1.png` | A-01 独立朱砂家祠头图,`750 × 196px`。 |
-| `static/assets/backgrounds/auth-rice-paper-v1.jpg` | A-01 独立暖宣纸纹理,`750 × 1334px`。 |
-| `static/assets/backgrounds/auth-ink-scenery-v1.png` | A-01 独立淡墨建筑、竹影与山水叠层,`750 × 1334px`。 |
-| `static/assets/icons/auth/login-outline-v1.png` | 登录按钮使用的 `96 × 96px` 透明 PNG。 |
-| `static/assets/icons/auth/wechat-licensed-v1.png` | 微信按钮使用的 `96 × 96px` 许可来源、原色透明 PNG。 |
-| `tests/a01-asset-alpha-audit.ps1` | 验证 A-01 图标的尺寸、透明角和可见像素,以及 A-01 独立背景文件。 |
-| `docs/design/screens/A01-启动登录引导-栅格验收-320x568.png` | 320 × 568 静态设计效果稿。 |
-| `docs/design/screens/A01-启动登录引导-栅格验收-360x640.png` | 360 × 640 静态设计效果稿。 |
-| `docs/design/screens/A01-启动登录引导-栅格验收-360x800.png` | 360 × 800 静态设计效果稿。 |
-| `docs/design/screens/A01-启动登录引导-栅格验收-412x915.png` | 412 × 915 静态设计效果稿。 |
-
----
-
-### Task 1: 锁定当前入口与固定栅格的审计关口
-
-**Files:**
-
-- Modify: `tests/a01-design-record-audit.ps1`
-- Test: `tests/a01-design-record-audit.ps1`
-
-**Interfaces:**
-
-- Consumes: UTF-8 Base64 文本解码函数 `ConvertFrom-Utf8Base64`、A-01 设计记录和效果稿 v3。
-- Produces: 退出码 `0` 与 `A01-DESIGN-RECORD-AUDIT PASS`;缺少任何规则或效果稿时抛出明确错误。
-
-- [x] **Step 1: 写入会失败的栅格规则断言**
-
- 在现有 `$rules` 数组后增加以下代码;这些规则在本任务开始时尚未写入设计记录,因此审计应失败。
-
- ```powershell
- $layoutRules = @(
- (ConvertFrom-Utf8Base64 '5YaF5a655a695bqmIDYzOHJweA=='),
- (ConvertFrom-Utf8Base64 '5Li75oyJ6ZKu6auY5bqmIDEwOHJweA=='),
- (ConvertFrom-Utf8Base64 'ZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20p'),
- (ConvertFrom-Utf8Base64 '6LSm5Y+35a+G56CB55m75b2VIC8g5omL5py66aqM6K+B56CB55m75b2V')
- )
-
- foreach ($rule in $layoutRules) {
- if ($record -notmatch [regex]::Escape($rule)) {
- throw "Missing A01 layout rule: $rule"
- }
- }
-
- $currentStructure = [regex]::Match($record, '(?s)## 2\\..*?(?=## 3\\.)').Value
- $currentStructureRule = ConvertFrom-Utf8Base64 '5Lik5Liq5aSn5oyJ6ZKu5ZKM5LiA5Liq5paH5a2X5YWl5Y+j'
- if ($currentStructure -notmatch [regex]::Escape($currentStructureRule)) {
- throw "Missing current A01 structure rule: $currentStructureRule"
- }
- ```
-
-- [x] **Step 2: 运行审计并确认它先失败**
-
- Run:
-
- ```powershell
- powershell -NoProfile -ExecutionPolicy Bypass -File tests/a01-design-record-audit.ps1
- ```
-
- Expected: `Missing A01 layout rule: 内容宽度 638rpx`。
-
-- [x] **Step 3: 保持红灯测试未提交并进入 Task 2**
-
- 红灯只用于证明固定栅格规则确实缺失。不要单独提交失败测试;在 Task 2 将设计记录补齐并转绿后,再与设计记录一起提交。
-
-### Task 2: 写入 A-01 固定栅格与状态边界
-
-**Files:**
-
-- Modify: `docs/design/A01_启动登录引导_设计记录.md`
-- Test: `tests/a01-design-record-audit.ps1`
-
-**Interfaces:**
-
-- Consumes: Task 1 的 `$layoutRules` 与当前入口结构断言。
-- Produces: 以 750rpx 设计画布表达的固定栅格、四类进入状态和明确的非运行时验收边界。
-
-- [x] **Step 1: 在第 3 节加入固定栅格**
-
- 在“固定布局与状态边界”中加入以下内容,保持现有的入口与协议规则不变:
-
- ```markdown
- - 固定设计画布为 `750rpx` 宽;内容宽度 638rpx,左右各 56rpx。朱砂家祠头图高 196rpx;标题与副标题区域从头图下方开始,操作区首按钮顶边固定为 646rpx。
- - 主按钮高度 108rpx,微信按钮高度 108rpx,二者间距 30rpx;注册文字在微信按钮下方 56rpx,字号 28rpx,整行居中且不得换行。两个按钮文字字号 36rpx,均单行居中。
- - 协议行使用 26rpx 字号,页面最小底部内边距为 `calc(32rpx + env(safe-area-inset-bottom))`。320 × 568 时页面允许纵向滚动,协议行与任一入口均不得落入系统导航区。
- - 仅作静态设计验证,不代表 uni-app 运行时验收;页面实现后仍须在 Android 320 × 568、360 × 640、360 × 800、412 × 915 上重新验收。
- ```
-
-- [x] **Step 2: 在第 3 节加入状态表**
-
- 紧接固定栅格条目,加入以下表格:
-
- ```markdown
- | 状态 | 触发 | A-01 可见结果 | 去向 |
- | --- | --- | --- | --- |
- | 初始未勾选 | 首次进入 | 两个按钮、注册文字与空复选框 | 留在 A-01 |
- | 未同意协议 | 点击登录、微信登录或注册账号 | 提示“请先阅读并同意相关协议”,不跳转、不改变勾选状态 | 留在 A-01 |
- | 登录已确认协议 | 点击“登录” | 结束 A-01 引导 | A-02,默认账号密码登录标签 |
- | 微信已确认协议 | 点击“微信登录” | 结束 A-01 引导 | A-03,显示授权中、取消或失败回跳 |
- | 注册已确认协议 | 点击“注册账号”文字 | 结束 A-01 引导 | A-04 |
- ```
-
-- [x] **Step 3: 运行审计并确认通过**
-
- Run:
-
- ```powershell
- powershell -NoProfile -ExecutionPolicy Bypass -File tests/a01-design-record-audit.ps1
- ```
-
- Expected: `A01-DESIGN-RECORD-AUDIT PASS`。
-
-- [x] **Step 4: 检查文档差异并提交**
-
- ```powershell
- git diff --check
- git add docs/design/A01_启动登录引导_设计记录.md tests/a01-design-record-audit.ps1
- git commit -m "docs: define A01 grid and entry states"
- ```
-
-### Task 3: 归档 A-01 独立背景和透明图标
-
-**Files:**
-
-- Create: `static/assets/backgrounds/auth-ancestral-header-v1.png`
-- Create: `static/assets/backgrounds/auth-rice-paper-v1.jpg`
-- Create: `static/assets/backgrounds/auth-ink-scenery-v1.png`
-- Create: `static/assets/icons/auth/login-outline-v1.png`
-- Create: `static/assets/icons/auth/wechat-licensed-v1.png`
-- Create: `tests/a01-asset-alpha-audit.ps1`
-- Modify: `docs/design/A01_启动登录引导_设计记录.md`
-- Test: `tests/a01-asset-alpha-audit.ps1`
-
-**Interfaces:**
-
-- Consumes: Task 2 的 A-01 独立美术方向和项目现有 `tests/g01-asset-alpha-audit.ps1` 的透明角审计方式。
-- Produces: 可由页面实现消费的独立背景与两个 `96 × 96px` RGBA 透明图标;设计记录中带来源、用途、路径、尺寸和 Alpha 验收结论的资产清单。
-
-- [x] **Step 1: 创建先失败的资产审计脚本**
-
- 创建 `tests/a01-asset-alpha-audit.ps1`,内容如下:
-
- ```powershell
- $ErrorActionPreference = 'Stop'
-
- $root = Split-Path -Parent $PSScriptRoot
- Add-Type -AssemblyName System.Drawing
-
- $backgrounds = @(
- 'static/assets/backgrounds/auth-ancestral-header-v1.png',
- 'static/assets/backgrounds/auth-rice-paper-v1.jpg',
- 'static/assets/backgrounds/auth-ink-scenery-v1.png'
- )
- $icons = @(
- 'static/assets/icons/auth/login-outline-v1.png',
- 'static/assets/icons/auth/wechat-official-v1.png'
- )
-
- foreach ($asset in $backgrounds + $icons) {
- if (-not (Test-Path -LiteralPath (Join-Path $root $asset))) {
- throw "Missing A01 asset: $asset"
- }
- }
-
- foreach ($asset in $icons) {
- $bitmap = [System.Drawing.Bitmap]::FromFile((Join-Path $root $asset))
- $width = [int]$bitmap.Width
- $height = [int]$bitmap.Height
- $corners = @(
- $bitmap.GetPixel(0, 0).A,
- $bitmap.GetPixel(($width - 1), 0).A,
- $bitmap.GetPixel(0, ($height - 1)).A,
- $bitmap.GetPixel(($width - 1), ($height - 1)).A
- )
- $visiblePixels = 0
- for ($y = 0; $y -lt $height; $y++) {
- for ($x = 0; $x -lt $width; $x++) {
- if ($bitmap.GetPixel($x, $y).A -gt 24) { $visiblePixels++ }
- }
- }
- $bitmap.Dispose()
-
- if ($width -ne 96 -or $height -ne 96) { throw "$asset must be 96 x 96px." }
- if (($corners | Where-Object { $_ -ne 0 }).Count -ne 0) { throw "$asset has opaque outer corners." }
- if ($visiblePixels -lt 80) { throw "$asset has no usable visible artwork." }
- Write-Output "PASS $asset transparent corners and visible artwork"
- }
-
- Write-Output 'A01-ASSET-ALPHA-AUDIT PASS'
- ```
-
-- [x] **Step 2: 运行资产审计并确认它先失败**
-
- Run:
-
- ```powershell
- powershell -NoProfile -ExecutionPolicy Bypass -File tests/a01-asset-alpha-audit.ps1
- ```
-
- Expected: `Missing A01 asset: static/assets/backgrounds/auth-ancestral-header-v1.png`。
-
-- [x] **Step 3: 生成或下载并记录资产**
-
- 生成以下三张独立背景,不能裁切或复用 G-01 背景:朱砂家祠头图 `750 × 196px`、暖宣纸纹理 `750 × 1334px`、淡墨建筑竹影山水叠层 `750 × 1334px`。将它们存到本任务列出的精确路径。
-
- 为登录按钮准备古金或白色线性人物图标,保存为 `login-outline-v1.png`;从官方或明确许可来源取得未经改色的微信图标,保存为 `wechat-licensed-v1.png`。两个文件均为 `96 × 96px` RGBA PNG,四个角完全透明。
-
- 在 A-01 设计记录新增“资产清单”表格,并写入以下列:资产路径、用途、来源或生成提示、尺寸、透明验收。微信条目必须填入直接来源页面与获取日期;其余四项必须写入生成提示或公开许可证来源。
-
-- [x] **Step 4: 运行资产审计并确认通过**
-
- Run:
-
- ```powershell
- powershell -NoProfile -ExecutionPolicy Bypass -File tests/a01-asset-alpha-audit.ps1
- ```
-
- Expected: 每个图标输出一行 `PASS`,最后输出 `A01-ASSET-ALPHA-AUDIT PASS`。
-
-- [x] **Step 5: 提交可消费资产与审计**
-
- ```powershell
- git add static/assets/backgrounds/auth-ancestral-header-v1.png static/assets/backgrounds/auth-rice-paper-v1.jpg static/assets/backgrounds/auth-ink-scenery-v1.png static/assets/icons/auth/login-outline-v1.png static/assets/icons/auth/wechat-licensed-v1.png tests/a01-asset-alpha-audit.ps1 docs/design/A01_启动登录引导_设计记录.md
- git commit -m "assets: add A01 login design resources"
- ```
-
-### Task 4: 归档四个 Android 尺寸的静态设计验收稿
-
-**Files:**
-
-- Create: `docs/design/screens/A01-启动登录引导-栅格验收-320x568.png`
-- Create: `docs/design/screens/A01-启动登录引导-栅格验收-360x640.png`
-- Create: `docs/design/screens/A01-启动登录引导-栅格验收-360x800.png`
-- Create: `docs/design/screens/A01-启动登录引导-栅格验收-412x915.png`
-- Modify: `docs/design/A01_启动登录引导_设计记录.md`
-- Modify: `docs/规划.md`
-- Modify: `docs/交接记录.md`
-- Test: `tests/a01-design-record-audit.ps1`
-
-**Interfaces:**
-
-- Consumes: Task 2 的 750rpx 栅格、Task 3 的独立资产和当前 v3 的视觉方向。
-- Produces: 四张按目标尺寸生成的静态设计验收稿;设计记录明确区分静态验收与页面实现后的运行时验收。
-
-- [x] **Step 1: 生成四张静态验收稿**
-
- 使用当前 v3 作为样式参考,为每个精确尺寸单独生成整页效果稿,不裁切同一张长图。每一张都必须显示:朱砂家祠头图、标题与副标题、两个大按钮、单行文字注册入口、未勾选协议和安全区留白。
-
- 验收时逐项检查:320 × 568 的“还没有账号?注册账号”不换行;四个尺寸的两个按钮文字均单行;协议行完整可见;底部内容不进入 `env(safe-area-inset-bottom)` 预留区;没有账号密码或手机验证码的独立大按钮。
-
-- [x] **Step 2: 在设计记录写入静态验收结论**
-
- 在第 4 节增加四个效果稿链接和以下结论:
-
- ```markdown
- - 静态设计验收已覆盖 320 × 568、360 × 640、360 × 800、412 × 915;四个尺寸均保持两个大按钮与单行文字注册入口。
- - 此结论只验证设计稿与固定栅格,不替代 uni-app 页面实现后的 Android 运行时验收。
- ```
-
-- [x] **Step 3: 运行设计记录审计并检查差异**
-
- Run:
-
- ```powershell
- powershell -NoProfile -ExecutionPolicy Bypass -File tests/a01-design-record-audit.ps1
- git diff --check
- ```
-
- Expected: `A01-DESIGN-RECORD-AUDIT PASS`,且 `git diff --check` 没有错误输出。
-
-- [x] **Step 4: 更新阶段状态并提交**
-
- 仅当四张静态验收稿和 Task 3 资产审计均通过时,将 `docs/规划.md` 与 `docs/交接记录.md` 更新为“A-01 静态设计证据已完成,等待页面实现阶段的运行时验收”;不得写成页面已实现、接口已接通或 Android 已打包。
-
- ```powershell
- git add docs/design/screens/A01-启动登录引导-栅格验收-320x568.png docs/design/screens/A01-启动登录引导-栅格验收-360x640.png docs/design/screens/A01-启动登录引导-栅格验收-360x800.png docs/design/screens/A01-启动登录引导-栅格验收-412x915.png docs/design/A01_启动登录引导_设计记录.md docs/规划.md docs/交接记录.md
- git commit -m "docs: archive A01 static size evidence"
- ```
-
-## Plan Self-Review
-
-- 规格覆盖:入口层级由 Task 1 审计、Task 2 固定;协议、路由和状态由 Task 2 记录;独立背景、透明图标与微信来源由 Task 3 归档;四个 Android 尺寸由 Task 4 归档。
-- 范围检查:所有任务限于设计记录、静态资源、效果稿和审计;没有 Vue、接口、登录逻辑或打包步骤。
-- 一致性检查:A-02 只承接账号密码与手机验证码双标签;A-03 只承接微信授权;A-04 只承接注册;A-05 只承接忘记密码。
-- 验收边界:四张效果稿是静态设计验证,不能替代页面实现后的真实 Android 运行时验收。
diff --git a/docs/superpowers/plans/2026-07-13-a01-v3-visual-fidelity.md b/docs/superpowers/plans/2026-07-13-a01-v3-visual-fidelity.md
deleted file mode 100644
index 3d09c4d..0000000
--- a/docs/superpowers/plans/2026-07-13-a01-v3-visual-fidelity.md
+++ /dev/null
@@ -1,165 +0,0 @@
-# A-01 V3 Visual Fidelity Implementation Plan
-
-> 状态:已失效。用户否决“整张效果图作为页面视觉层”的方案;当前 A-01 必须以真实 DOM 还原 v3,见 `docs/design/A01_启动登录引导_设计记录.md`。
-
-> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
-
-**Goal:** Make the running A-01 page reproduce the selected 412×915 visual baseline at mobile width while preserving its existing local-only interactions.
-
-**Architecture:** The accepted v3 image is a complete 852 × 1846 mobile visual, including typography, ornamental borders, header, ink scenery and the empty agreement circle. `pages/auth/entry.vue` renders it at a logical width of 750rpx and layers only transparent interaction regions above it. The existing `agreed` state and local-only toast/navigation functions remain the sole interaction owner.
-
-**Tech Stack:** uni-app Vue 3 `
-
-
-
-
-
-
-```
-
-Set the root to `width: 750rpx; min-height: 1625rpx;` with no `overflow: hidden`, so 320 × 568 remains scrollable.
-
-- [ ] **Step 2: Add only invisible v3 hit regions**
-
-```vue
-
-
-
-
-✓
-```
-
-Use v3’s 750rpx logical coordinates: login `top: 799rpx; left: 99rpx; width: 552rpx; height: 126rpx`; WeChat `top: 960rpx`; register `top: 1155rpx; left: 200rpx; width: 350rpx; height: 72rpx`; agreement toggle `top: 1362rpx; left: 126rpx; width: 60rpx; height: 60rpx`. Display the check marker only after a user toggle.
-
-- [ ] **Step 3: Preserve the existing local-only behavior**
-
-```js
-const requireAgreement = () => {
- if (agreed.value) return true
- uni.showToast({ title: '请先阅读并同意相关协议', icon: 'none' })
- return false
-}
-
-const openLogin = () => {
- if (!requireAgreement()) return
- uni.navigateTo({ url: '/pages/auth/login?agreed=1' })
-}
-```
-
-Keep prepared-state toasts for WeChat, registration and agreement pages. Do not add `appApi`, `calcMD5`, `loginWithPassword`, `uni.reLaunch`, or an implicit agreement sentence.
-
-- [ ] **Step 4: Run the focused test cycle**
-
-Run: `& .\tests\a01-a02-ui-contract.ps1`
-
-Expected: `A01-A02-UI-CONTRACT PASS`.
-
----
-
-### Task 3: Record the v3 runtime source and verify
-
-**Files:**
-- Modify: `docs/design/A01_启动登录引导_设计记录.md`
-- Modify: `docs/交接记录.md`
-
-**Interfaces:**
-- Consumes: selected v3 source and current A-01 local interaction contract.
-- Produces: one documented visual source for the next Android screenshot comparison.
-
-- [ ] **Step 1: Update the A-01 record**
-
-State that v3 is the runtime visual source, not merely archived evidence. Correct the principal button copy to `登录`; its destination remains A-02’s default account/password tab after explicit agreement.
-
-- [ ] **Step 2: Update hand-off status**
-
-Record that the first local preview diverged from v3 in header height, button width and vertical rhythm, and that the correction uses v3 directly. Keep four-size Android runtime comparison pending.
-
-- [ ] **Step 3: Run project verification**
-
-```powershell
-$tests = Get-ChildItem -LiteralPath .\tests -Filter *.ps1 | Sort-Object Name
-foreach ($test in $tests) { & $test.FullName }
-git diff --check
-git status --short
-```
-
-Expected: all scripts pass, `git diff --check` is silent, and only these four files changed besides user-owned dirty files.
-
-- [ ] **Step 4: Commit scoped work**
-
-```powershell
-git add -- pages/auth/entry.vue tests/a01-a02-ui-contract.ps1 docs/design/A01_启动登录引导_设计记录.md docs/交接记录.md
-git commit -m "fix: match A01 v3 visual reference"
-```
-
----
-
-## Self-Review
-
-- [x] The target is the exact saved v3 image the user displayed, not a new interpretation.
-- [x] The plan replaces hand-drawn visible ornaments with the existing visual asset and keeps interactions local.
-- [x] The contract goes red before the page change, then verifies the visual source and interaction regions.
-- [x] No API, new route, Android configuration, or non-A-01 screen is included.
-- [x] Android runtime screenshot comparison remains follow-up work, not an unverified claim.
diff --git a/docs/superpowers/plans/2026-07-13-foundation-rebuild.md b/docs/superpowers/plans/2026-07-13-foundation-rebuild.md
deleted file mode 100644
index 908be6f..0000000
--- a/docs/superpowers/plans/2026-07-13-foundation-rebuild.md
+++ /dev/null
@@ -1,226 +0,0 @@
-# 家谱 APP 地基重整 Implementation Plan
-
-> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
-
-**Goal:** 在不改变 A01、G01 已验收视觉结果的前提下,完成页面路由命名、图片资产包、代码中文注释和无引用资源清理的可维护地基。
-
-**Architecture:** `pages.json` 继续作为唯一实际路由源;P00 文档提供页面语义映射。跨模块图片归入 `static/assets/foundation/{opaque,transparent}`,模块专用图片归入 `static/assets/modules//`。页面只引用语义路径;公共组件仅复用两个及以上已确认页面的稳定结构。
-
-**Tech Stack:** Vue 3、uni-app、SCSS、PowerShell 审计脚本、HBuilderX Android 预览。
-
-## Global Constraints
-
-- Android `uni-app`;不新增依赖、接口、业务功能或未确认页面状态。
-- A01、G01 在 412 × 915 的可见结果冻结,迁移后必须回归验证。
-- 可见装饰一律为图片:`opaque` 负责完整底色,`transparent` 为 RGBA 叠加;禁止 CSS/SVG 装饰和截图切片。
-- 页面路径采用 `<编号>-<语义名>.vue`;旧入口必须在所有引用更新并验证后删除。
-- 关键结构、路由、资产图层和复杂逻辑使用中文注释;不得保留无用代码、资产、依赖或兼容入口。
-
----
-
-### Task 1: 建立可重复的地基审计
-
-**Files:**
-- Create: `tests/foundation-structure-audit.ps1`
-- Modify: `docs/design/P00_页面结构与资产清单.md`
-- Test: `tests/foundation-structure-audit.ps1`
-
-**Interfaces:**
-- Consumes: `pages.json` 的 `pages[*].path`,P00 的目标页面命名规则。
-- Produces: 退出码 `0` 表示路由、文件、资产目录和中文文件头满足当前迁移阶段;非 `0` 输出具体缺失路径。
-
-- [ ] **Step 1: 写出会失败的结构审计**
-
- 在 `tests/foundation-structure-audit.ps1` 定义下列检查:
-
- ```powershell
- $pages = (Get-Content -Raw pages.json | ConvertFrom-Json).pages
- foreach ($page in $pages) {
- $file = "$($page.path).vue"
- if (-not (Test-Path $file)) { throw "缺少路由页面:$file" }
- if ($file -match '/(index|list|detail)\.vue$') { throw "最终页面名不允许使用:$file" }
- if (-not (Get-Content -Raw $file -Encoding utf8).StartsWith('
-
- ```
-
- A01、G01 文件头额外注明“视觉冻结”;`content-list-skeleton.vue` 明确注明“功能骨架,不计为设计完成页面”。
-
-- [ ] **Step 3: 在同一批次更新路由和跳转**
-
- `pages.json` 的路径去掉 `.vue` 后必须与新文件完全一致,例如:
-
- ```json
- { "path": "pages/auth/a01-entry", "style": { "navigationStyle": "custom" } }
- ```
-
- 所有 `uni.navigateTo`、`uni.reLaunch`、测试断言同步改为新 URL;不留下旧 URL 回退分支。
-
-- [ ] **Step 4: 运行路由审计**
-
- Run: `powershell -ExecutionPolicy Bypass -File tests/foundation-structure-audit.ps1`
- Expected: PASS,所有 `pages.json` 路径对应真实 Vue 文件并带中文文件头。
-
-- [ ] **Step 5: 运行现有编译与 manifest 审计**
-
- Run: `powershell -ExecutionPolicy Bypass -File tests/compile-audit.ps1`
- Expected: PASS,所有 `pages.json` 路由和本地模块引用均存在。
-
- Run: `powershell -ExecutionPolicy Bypass -File tests/manifest-json.ps1`
- Expected: PASS,`manifest.json` 仍是有效 JSON。
-
-### Task 3: 建立图片资产清单并迁移 A01/G01 资产
-
-**Files:**
-- Create: `static/assets/foundation/opaque/`
-- Create: `static/assets/foundation/transparent/`
-- Create: `static/assets/modules/genealogy/opaque/`
-- Create: `static/assets/modules/genealogy/transparent/`
-- Create: `tests/foundation-asset-audit.ps1`
-- Modify: `pages/auth/a01-entry.vue`, `pages/auth/a02-login.vue`, `pages/genealogy/g01-my-genealogies.vue`, `components/PageHeader.vue`, `components/AppTabbar.vue`
-- Modify: `tests/a01-a02-ui-contract.ps1`, `tests/a01-asset-alpha-audit.ps1`, `tests/g01-asset-alpha-audit.ps1`, `tests/g01-visual-contract.ps1`
-- Modify: `docs/design/P00_页面结构与资产清单.md`
-- Test: `tests/foundation-asset-audit.ps1`, `tests/a01-asset-alpha-audit.ps1`
-
-**Interfaces:**
-- Consumes: 当前已验收 A01/G01 图片、D1 的 `opaque`/`transparent` 规则。
-- Produces: 每一项保留图片有唯一语义路径、透明属性与至少一个明确代码引用。
-
-- [ ] **Step 1: 写出会失败的资产审计**
-
- `tests/foundation-asset-audit.ps1` 扫描 `pages/`、`components/`、`pages.json` 和测试内的 `/static/assets/` 路径;对每个路径检查文件存在。脚本还读取 P00 中的资产登记表,拒绝 `-v1`、`-v2`、`-source`、重复语义文件作为最终 `foundation/` 路径。
-
-- [ ] **Step 2: 运行并确认当前版本失败**
-
- Run: `powershell -ExecutionPolicy Bypass -File tests/foundation-asset-audit.ps1`
- Expected: FAIL,指出当前资源仍在旧 `backgrounds/`、`icons/` 路径且没有最终登记。
-
-- [ ] **Step 3: 按属性迁移已验收资源**
-
- 迁移时不修改像素内容,只改路径和名称:
-
- ```text
- auth-rice-paper-v1.jpg -> foundation/opaque/auth-page-paper.jpg
- auth-ancestral-header-v1.png -> foundation/opaque/auth-header.png
- auth-ink-scenery-v1.png -> foundation/transparent/auth-ink-scenery.png
- auth-title-cloud-v1.png -> foundation/transparent/auth-title-cloud.png
- auth-divider-knot-v1.png -> foundation/transparent/auth-divider-knot.png
- auth-button-corner-v1.png -> foundation/transparent/auth-button-frame.png
- ```
-
- G01 的纸纹、页头、导航底图归 `opaque`;谱印、云纹、功能图标、Tab 图标、分隔纹归 `transparent`。如果某个当前按钮仍依赖 CSS 填色或四角拼接,记录为“待完整按钮图片替代”,不得把它伪装为已完成。
-
-- [ ] **Step 4: 更新所有引用并写中文图层注释**
-
- 每个页面的图片层在模板中标明,例如:
-
- ```vue
-
-
- ```
-
- 透明 PNG 注释注明叠加的宿主底图。不得新增新图片或改变 A01/G01 的尺寸、层级或 `mode`。
-
-- [ ] **Step 5: 运行资产审计和透明度审计**
-
- Run: `powershell -ExecutionPolicy Bypass -File tests/foundation-asset-audit.ps1`
- Expected: PASS,所有代码图片引用存在且最终资产路径没有临时版本名。
-
- Run: `powershell -ExecutionPolicy Bypass -File tests/a01-asset-alpha-audit.ps1`
- Expected: PASS,A01 中登记为透明的 PNG 保持 RGBA 属性。
-
-### Task 4: 删除无引用旧资产并做视觉回归
-
-**Files:**
-- Delete: 资产审计确定为 `无引用删除` 或 `迁移后删除` 的旧文件
-- Modify: `docs/design/P00_页面结构与资产清单.md`
-- Test: `tests/foundation-asset-audit.ps1`, `tests/a01-a02-ui-contract.ps1`, `tests/compile-audit.ps1`
-
-**Interfaces:**
-- Consumes: Task 3 的通过资产审计和 P00 中的去留状态。
-- Produces: 不存在无引用旧资产;A01、G01 仍引用唯一的语义资产。
-
-- [ ] **Step 1: 输出删除候选并二次扫描**
-
- Run: `rg -n "/static/assets/" pages components tests pages.json --glob '!unpackage/**'`
-
- Expected: 每一个候选旧文件均不在输出中;若仍有输出,保留文件并回到 Task 3。
-
-- [ ] **Step 2: 删除已确认路径并立即更新 P00**
-
- 仅删除 P00 表格中标记为 `无引用删除` 或 `迁移后删除` 的文件;不递归删除目录,不删除用户未确认的模块资产。
-
-- [ ] **Step 3: 运行视觉与编译回归**
-
- Run: `powershell -ExecutionPolicy Bypass -File tests/a01-a02-ui-contract.ps1`
- Expected: PASS。
-
- Run: `powershell -ExecutionPolicy Bypass -File tests/compile-audit.ps1`
- Expected: PASS。
-
- 在 HBuilderX 以 412 × 915 复核 A01、G01:纸纹、页头、按钮、祥云、谱印、导航无断裂、无缺失、无拼接痕迹。
-
-- [ ] **Step 4: 检查差异与文档状态**
-
- Run: `git diff --check`
- Expected: PASS。
-
- 将 P00 每个页面和资产的处理状态更新为真实结论;仅在上述检查均通过后将总规划的 P-00 标记为完成。
diff --git a/docs/superpowers/plans/2026-07-13-full-page-visual-delivery.md b/docs/superpowers/plans/2026-07-13-full-page-visual-delivery.md
deleted file mode 100644
index 11ae25c..0000000
--- a/docs/superpowers/plans/2026-07-13-full-page-visual-delivery.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# 59 页面视觉全量交付执行计划
-
-**Goal:** 在 2026-07-17 前完成 59 个规划页面/状态单元的统一移动端视觉与本地可浏览流程。
-
-**Architecture:** 以 A01/G01 的宣纸、朱砂、古金、淡墨视觉为唯一系统。新增共享页面壳、六类精致母版与本地页面目录:页面目录只维护内容,母版拥有各自的视觉比例、卡片层级、空状态和操作区;现有页面保留已可用逻辑并接入对应母版。所有页面先覆盖正常/空/待接入可见状态,接口后置。
-
-**Global Constraints:** 不改 A01/G01 的已验收可见结构;不接真实接口;只在当前工作目录改动;不执行 Git 提交、推送或上传;每页必须有编号语义路径和中文用途注释。
-
-### Task 1: 建立全量路由红灯合同
-
-- Create `tests/full-page-visual-contract.ps1`,固定 A01-A06、G01-G12、T01-T08、F01-F10、R01-R11、N01-N02、M01-M10 共 59 条最终路由;检查每条路由对应 Vue 文件、中文页面注释和页面壳引用。
-- 先运行该测试,预期因缺少 44 条路由/页面失败。
-
-### Task 2: 建立共享页面壳与本地页面目录
-
-- Create `components/ModulePage.vue`:负责纸纹、认证/业务页头、分区、信息卡、表单、列表、空状态、主按钮及安全区;按认证、列表详情、表单编辑、成员档案、内容流、个人消息六种精致母版渲染,禁止只替换标题的单一通用卡片。
-- Create `data/page-catalog.js`:唯一维护每个新增页面的标题、类型、说明、分组和本地操作反馈。
-- Create `components/ModulePage` 所需的最小本地样式,不引入依赖。
-
-### Task 3: 补齐账户与家谱模块
-
-- Create A03-A06、G02、G07-G09、G11-G12 的页面与路由。
-- Update A02、G03-G06、G10 的样式壳/跳转,保留现有功能逻辑。
-- 每页使用 `ModulePage` 与页面目录的唯一配置;本地操作只提示待接入或进入已设计页面。
-
-### Task 4: 补齐世系与家族内容模块
-
-- Create T02、T04-T08、F03-F10 的页面与路由。
-- Update T01、T03、F01、F02 的样式壳/跳转,保留当前可用逻辑。
-- 通过成员、关系、动态、谱文、相册、视频的列表/详情/表单三类母版覆盖全部状态。
-
-### Task 5: 补齐人物、消息和个人中心模块
-
-- Create R01-R11、N02、M02-M10 的页面与路由。
-- Update N01、M01 的样式壳/跳转。
-- 完成档案、礼仪、礼物、成长记录、消息、设置、帮助、VIP 等页面的本地展示与操作反馈。
-
-### Task 6: 替换临时入口并完成全量回归
-
-- Update `pages.json`、现有跳转路径、`docs/规划.md`、`docs/design/P00_页面结构与资产清单.md`,让 59 路由与页面目录一致;确认零引用后移除临时 `content-list-skeleton` 入口。
-- Run `full-page-visual-contract.ps1`、现有页面/编译审计、`git diff --check`。
-- 在 320×568、360×640、360×800、412×915 集中检查模块代表页;记录用户接下来逐页精修的起点。
diff --git a/docs/superpowers/plans/2026-07-13-g01-v5-structural-alignment.md b/docs/superpowers/plans/2026-07-13-g01-v5-structural-alignment.md
deleted file mode 100644
index ce00ca0..0000000
--- a/docs/superpowers/plans/2026-07-13-g01-v5-structural-alignment.md
+++ /dev/null
@@ -1,159 +0,0 @@
-# G01 v5 Structural Alignment Implementation Plan
-
-> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
-
-**Goal:** Rebuild G01’s title slip and list hierarchy, and align its header, hall eave, cloud button, background, and Tabbar to the v5 reference.
-
-**Architecture:** `pages/genealogy/index.vue` owns the current title slip, spacing, lower background, and new cloud asset. `GenealogyCard.vue` owns the two-row list entry. `PageHeader.vue` and `AppTabbar.vue` keep their existing APIs and receive only scoped CSS changes.
-
-**Tech Stack:** uni-app Vue 3, scoped SCSS, local RGBA PNG, PowerShell static contracts.
-
-## Global Constraints
-
-- Android only: use rpx and flexbox; do not add CSS Grid, `gap`, `clip-path`, filters, routes, APIs, or data fields.
-- Visual source: `docs/design/screens/G01-我的家谱-紧凑版设计稿-v5-Tabbar安全区.png`.
-- Dynamic values remain Vue text; visible ornaments remain local transparent PNGs.
-- At `max-width: 340px`, hide only `更新于`.
-- Keep G-01 unchecked until HBuilderX evidence exists at `360 × 800` and `320 × 568`.
-
----
-
-### Task 1: Add failing structural and asset contracts
-
-**Files:**
-- Modify: `tests/g01-visual-contract.ps1`
-- Modify: `tests/g01-asset-alpha-audit.ps1`
-
-**Interfaces:** Requires `create-cloud-v2.png`, `.current-summary`, `.card-main`, and `.card-title-row`; rejects the v1 asset and `.card-copy`.
-
-- [ ] **Step 1: Replace the old assertions**
-
-Replace v1 with v2 in both test asset lists. Add this contract block:
-
-```powershell
-if ($header -notmatch 'height:\s*164rpx') { throw 'Header height does not match the approved narrow red-head proportion.' }
-if ($header -notmatch 'opacity:\s*\.29') { throw 'Header hall line-art is not visible enough for the approved eave layer.' }
-if ($tabbar -notmatch 'font-size:\s*30rpx') { throw 'Tabbar label size does not match the approved visual weight.' }
-if ($tabbar -notmatch 'width:\s*64rpx') { throw 'Tabbar icon size does not match the approved visual weight.' }
-foreach ($token in @('current-summary', 'create-cloud-v2.png')) { if ($page -notmatch $token) { throw "G-01 current panel is missing $token" } }
-foreach ($token in @('card-main', 'card-title-row', 'card-detail-row')) { if ($card -notmatch $token) { throw "G-01 list card is missing $token" } }
-if ($page -match 'create-cloud-v1\.png' -or $card -match 'card-copy') { throw 'G-01 retains a superseded visual structure.' }
-```
-
-- [ ] **Step 2: Verify old code fails**
-
-Run `powershell -ExecutionPolicy Bypass -File tests\g01-visual-contract.ps1`.
-
-Expected: `FAIL` because v2, title-slip/list structure, and new shared sizes do not yet exist.
-
-- [ ] **Step 3: Commit the failing contract**
-
-```powershell
-git add tests/g01-visual-contract.ps1 tests/g01-asset-alpha-audit.ps1; git commit -m "test: define G01 v5 structural alignment"
-```
-
-### Task 2: Replace the cloud ornament
-
-**Files:**
-- Create: `static/assets/icons/action/create-cloud-v2.png`
-- Delete: `static/assets/icons/action/create-cloud-v1.png`
-- Modify: `pages/genealogy/index.vue`
-
-**Interfaces:** v2 is a 96px RGBA transparent antique-gold horizontal cloud ornament rendered once normally and once with the existing mirror class.
-
-- [ ] **Step 1: Generate and inspect v2**
-
-Create one transparent-background 96px asset: two compact, symmetrical antique-gold Chinese cloud curls joined by a short fine line; no text, shadow, red fill, border, or background. The artwork fills the middle 70% of the canvas and matches the reference’s line weight.
-
-- [ ] **Step 2: Install v2 and remove v1**
-
-Point both button images to `/static/assets/icons/action/create-cloud-v2.png`. Set `.create-action` to `width: 350rpx`, `.create-cloud` to `74rpx × 36rpx`, `.create-action .create-icon` to `48rpx × 48rpx`, and its text to `34rpx`. Run `rg -n 'create-cloud-v1\.png' -g '!unpackage/**'`; expected no output. Remove v1 only after this check.
-
-- [ ] **Step 3: Verify alpha and commit**
-
-Run `powershell -ExecutionPolicy Bypass -File tests\g01-asset-alpha-audit.ps1`; expected `PASS static/assets/icons/action/create-cloud-v2.png transparent corners and visible artwork`.
-
-```powershell
-git add static/assets/icons/action/create-cloud-v2.png static/assets/icons/action/create-cloud-v1.png pages/genealogy/index.vue; git commit -m "feat: replace G01 create cloud ornament"
-```
-
-### Task 3: Rebuild the current title slip and list rows
-
-**Files:**
-- Modify: `pages/genealogy/index.vue`
-- Modify: `components/GenealogyCard.vue`
-
-**Interfaces:** Page owns `.current-summary` and full-width `.current-meta`; card owns `.card-main`, `.card-title-row`, and `.card-detail-row`. Props and `select` event stay unchanged.
-
-- [ ] **Step 1: Replace current title-slip hierarchy**
-
-Use this markup around the existing images and text bindings:
-
-```vue
-家谱{{ currentGenealogy.name }}{{ currentGenealogy.location }}{{ currentGenealogy.memberCount }} 位成员管理员
-```
-
-Delete `.current-copy`. Use `.current-slip { display: block; min-height: 268rpx; padding: 30rpx 34rpx 28rpx; }`, `.current-summary { display: flex; align-items: center; }`, `.current-meta { display: flex; justify-content: space-between; }`, and `.current-meta-item { margin: 0; }`.
-
-- [ ] **Step 2: Replace the list’s split columns**
-
-Use this layout after the existing seal:
-
-```vue
-{{ genealogy.name }}{{ role }}{{ genealogy.location }}{{ genealogy.memberCount }} 位成员更新于 {{ genealogy.updatedAt }}
-```
-
-Use `.card-main { display: flex; min-width: 0; flex: 1; flex-direction: column; }`, `.card-title-row { display: flex; align-items: center; justify-content: space-between; }`, and remove the fixed-width `.card-side` column. Preserve `.card-updated { display: none; }` at 340px.
-
-- [ ] **Step 3: Reduce spacing and expand landscape coverage**
-
-Set `.genealogy-content` to `padding: 24rpx 32rpx 176rpx`; set `.page-footer-landscape` to `bottom: 112rpx`, `height: 480rpx`, and `opacity: 0.5`. Reduce only existing shortcut/list margins; do not alter handlers or states.
-
-- [ ] **Step 4: Verify and commit**
-
-Run `powershell -ExecutionPolicy Bypass -File tests\g01-visual-contract.ps1`; expected `PASS G-01 visual contract`.
-
-```powershell
-git add pages/genealogy/index.vue components/GenealogyCard.vue; git commit -m "feat: restructure G01 information hierarchy"
-```
-
-### Task 4: Calibrate shared shell, document, and verify
-
-**Files:**
-- Modify: `components/PageHeader.vue`
-- Modify: `components/AppTabbar.vue`
-- Modify: `docs/design/G01_我的家谱_设计记录.md`
-- Modify: `docs/规划.md`
-
-**Interfaces:** Header events and Tabbar routes remain unchanged; docs record implementation without checking off G-01.
-
-- [ ] **Step 1: Implement narrow header and visible eave**
-
-Set `.page-header--root` to `height: 164rpx`. Set `.header-hall` to `bottom: -2rpx`, `left: -48rpx`, `width: 476rpx`, `height: 166rpx`, and `opacity: .29`. Keep all click targets at least `88rpx` high.
-
-- [ ] **Step 2: Compact the Tabbar while increasing its visual weight**
-
-Set `.app-tabbar` to `height: 112rpx`, `.tab-item` padding to `4rpx 0`, `.tab-icon` to `64rpx × 64rpx`, and `.tab-label` to `30rpx`. Preserve the safe area and active/default assets.
-
-- [ ] **Step 3: Record and run focused checks**
-
-Append a dated record covering the new current slip, list rows, header/eave, compact spacing, landscape, and v2 cloud. Leave G-01 unchecked in `docs/规划.md`. Then run:
-
-```powershell
-powershell -ExecutionPolicy Bypass -File tests\g01-visual-contract.ps1; powershell -ExecutionPolicy Bypass -File tests\g01-asset-alpha-audit.ps1; powershell -ExecutionPolicy Bypass -File tests\compile-audit.ps1; powershell -ExecutionPolicy Bypass -File tests\uni-scss-injection.ps1; powershell -ExecutionPolicy Bypass -File tests\vue3-entry.ps1
-```
-
-Expected: five `PASS` results. Capture HBuilderX at `360 × 800` and `320 × 568`; only a direct v5 comparison can complete G-01.
-
-- [ ] **Step 4: Commit**
-
-```powershell
-git add components/PageHeader.vue components/AppTabbar.vue docs/design/G01_我的家谱_设计记录.md docs/规划.md; git commit -m "feat: align G01 shared visual shell"
-```
-
-## Plan self-review
-
-- Task 1 locks every structural and asset change before runtime edits.
-- Task 2 replaces only the mismatched cloud asset and removes its old path.
-- Task 3 covers title-slip/list structure, compact spacing, and landscape coverage.
-- Task 4 covers header/eave, Tabbar, docs, static checks, and HBuilderX evidence.
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
deleted file mode 100644
index fdf6000..0000000
--- a/docs/superpowers/plans/2026-07-13-product-design-visual-refinement.md
+++ /dev/null
@@ -1,366 +0,0 @@
-# 家谱 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 小屏上成立的家祠卷轴界面。
-
-**Architecture:** A01、G01 是唯一的视觉源,不把它们当作可以随意模仿的截图,而是提炼为“完整图片资产承担可见外观,Vue/CSS 只承担布局、文字和状态”的设计系统。每个模块先完成一张可截图验收的代表页,再将已确认的面板、按钮、列表或状态结构复用到同模块;不得用 `ModulePage.vue` 的单一通用卡片替代不同任务的页面设计。
-
-**Tech Stack:** Vue 3、`
-```
-
-样式按 Global Constraints 的两档精确尺寸实现,动画继续由 `app-loading-breathe` 唯一维护。
-
-- [ ] **Step 4: 更新 G01 消费方式**
-
-```vue
-
-```
-
-删除 G01 的 `.state-copy--loading` 独立说明节点。
-
-- [ ] **Step 5: 验证通过**
-
-Run:
-
-```powershell
-powershell -NoProfile -ExecutionPolicy Bypass -File tests/app-loading-contract.ps1
-powershell -NoProfile -ExecutionPolicy Bypass -File tests/g01-loading-state-contract.ps1
-```
-
-Expected: 全部 PASS。
-
----
-
-### Task 2: G 系列接入
-
-**Files:**
-- Create: `tests/g-series-app-loading-contract.ps1`
-- Modify: `pages/genealogy/g05-genealogy-overview.vue`
-- Modify: `pages/genealogy/g06-search-genealogies.vue`
-- Modify: `pages/genealogy/g09-my-applications.vue`
-- Modify: `pages/genealogy/g10-application-review.vue`
-- Modify: `pages/genealogy/g11-genealogy-settings.vue`
-- Modify: `pages/genealogy/g12-generation-poems.vue`
-
-**Interfaces:**
-- Consumes: Task 1 的 `AppLoading` 属性合同。
-- Produces: G05/G09/G10/G11/G12 页面级 Loading 与 G06 局部 Loading。
-
-- [ ] **Step 1: 写入失败契约**
-
-每页必须导入 `AppLoading`;G05、G09、G10、G11、G12 在自身 `loading` 分支渲染页面级组件;G06 搜索区渲染 `variant="section"`。
-
-- [ ] **Step 2: 验证失败**
-
-Run: `powershell -NoProfile -ExecutionPolicy Bypass -File tests/g-series-app-loading-contract.ps1`
-
-Expected: FAIL,指出首个尚未接入的 G 页面。
-
-- [ ] **Step 3: 接入页面级分支**
-
-各页在现有成功/空/失败分支之前加入:
-
-```vue
-
-```
-
-其中 `pageState` 分别为 `overviewState`、`applicationState`、`reviewState`、`settingsState`、`poemState`;保留各页其他分支和操作。
-
-- [ ] **Step 4: 接入 G06 局部加载**
-
-```vue
-
-```
-
-搜索框、模式切换、地区筛选和分隔线继续可见。
-
-- [ ] **Step 5: 验证通过**
-
-Run:
-
-```powershell
-powershell -NoProfile -ExecutionPolicy Bypass -File tests/g-series-app-loading-contract.ps1
-powershell -NoProfile -ExecutionPolicy Bypass -File tests/g01-visual-contract.ps1
-node tests/module-page-runtime-smoke.js http://localhost:5173
-```
-
-Expected: 全部 PASS。
-
----
-
-### Task 3: T/F/N 页面级接入
-
-**Files:**
-- Create: `tests/module-app-loading-contract.ps1`
-- Modify: `pages/tree/t01-tree-overview.vue`
-- Modify: `pages/tree/t03-member-profile.vue`
-- Modify: `pages/tree/t07-member-directory.vue`
-- Modify: `pages/family/f01-family-feed.vue`
-- Modify: `pages/notification/n01-message-center.vue`
-
-**Interfaces:**
-- Consumes: Task 1 的页面级 `AppLoading`。
-- Produces: 五个页面独立且不会误落入错误卡的 `loading` 分支。
-
-- [ ] **Step 1: 写入失败契约**
-
-锁定五页导入组件并在现有列表/详情/树/错误判断之前单独处理 `loading`;Loading 期间不显示错误操作或发布/审核按钮。
-
-- [ ] **Step 2: 验证失败**
-
-Run: `powershell -NoProfile -ExecutionPolicy Bypass -File tests/module-app-loading-contract.ps1`
-
-Expected: FAIL,指出首个仍把 `loading` 当成错误/空状态的页面。
-
-- [ ] **Step 3: 实施五页分支**
-
-统一结构:
-
-```vue
-
-…
-…原空/错误状态…
-```
-
-只调整状态分支,不改变数据、入口、卡片和按钮行为。
-
-- [ ] **Step 4: 验证通过**
-
-Run:
-
-```powershell
-powershell -NoProfile -ExecutionPolicy Bypass -File tests/module-app-loading-contract.ps1
-node tests/t01-tree-state-runtime-smoke.js http://localhost:5173
-node tests/t03-t08-member-flow-runtime-smoke.js http://localhost:5173
-node tests/root-pages-runtime-smoke.js http://localhost:5173
-```
-
-Expected: 全部 PASS。
-
----
-
-### Task 4: 全量验证与视觉检查
-
-**Files:**
-- Verify only: all modified files.
-
-**Interfaces:**
-- Consumes: Tasks 1–3 的加载组件和页面状态分支。
-- Produces: H5 内部候选证据,不改变验收状态。
-
-- [ ] **Step 1: 静态与编译验证**
-
-Run:
-
-```powershell
-powershell -NoProfile -ExecutionPolicy Bypass -File tests/app-loading-contract.ps1
-powershell -NoProfile -ExecutionPolicy Bypass -File tests/g01-loading-state-contract.ps1
-powershell -NoProfile -ExecutionPolicy Bypass -File tests/g-series-app-loading-contract.ps1
-powershell -NoProfile -ExecutionPolicy Bypass -File tests/module-app-loading-contract.ps1
-powershell -NoProfile -ExecutionPolicy Bypass -File tests/compile-audit.ps1
-```
-
-- [ ] **Step 2: 运行态验证**
-
-Run G01、G 系列、T/F/N 现有 runtime smoke,任何失败均先定位状态分支,不放宽测试。
-
-- [ ] **Step 3: 代表性截图**
-
-捕获 G01 页面级与 G06 局部级在 320×568、360×640、360×800、412×915 的真实 H5 画面,检查无横向溢出、无错误态闪现、固定底栏不遮挡。
-
-- [ ] **Step 4: 工作区检查**
-
-Run: `git diff --check`
-
-Expected: 无空白错误;现有 LF/CRLF 提示单独报告。
diff --git a/docs/superpowers/plans/2026-07-19-app-loading-essential-motion.md b/docs/superpowers/plans/2026-07-19-app-loading-essential-motion.md
deleted file mode 100644
index e26c0ef..0000000
--- a/docs/superpowers/plans/2026-07-19-app-loading-essential-motion.md
+++ /dev/null
@@ -1,160 +0,0 @@
-# AppLoading 必要加载动效实施计划
-
-> **执行要求:** 使用 `superpowers:executing-plans` 在当前会话内逐步执行。用户明确禁止多代理、worktree、`git add`、commit、push、reset 和 checkout。
-
-**目标:** 修复 G01 在 `prefers-reduced-motion: reduce` 下加载态完全静止的问题,使印牌和如意结保留清晰的透明度呼吸,同时不产生缩放、旋转或位移。
-
-**架构:** 继续由 `components/AppLoading.vue` 单一维护加载动效,不在 G01 复制样式。正常模式保持现有动画;减少动态效果模式改用独立的透明度关键帧,并强制 `transform: none`。测试先锁定旧行为必须失败,再验证静态契约和当前 Chrome 运行时证据。
-
-**技术栈:** Vue 3、uni-app、SCSS、PowerShell 契约测试、Chrome DevTools Protocol、Node.js。
-
-## 全局约束
-
-- 只修改 G01 加载态直接依赖的公共 `AppLoading`、聚焦测试和当轮内部证据。
-- 不改变 `variant`、`text`、`description` 组件契约。
-- 不改变 G01 状态逻辑、布局、背景、文案、标题栏或底部导航。
-- 不新增图片、CSS 图形、JavaScript 定时器或业务接口。
-- `prefers-reduced-motion: reduce` 下只允许透明度变化,`transform` 必须为 `none`。
-- H5 截图只是内部候选;Android/HBuilderX 仍未验证。
-- 不执行任何 Git 写操作。
-
----
-
-### Task 1:修复并验证减少动态效果模式的必要加载反馈
-
-**文件:**
-
-- 修改:`tests/app-loading-contract.ps1`
-- 修改:`components/AppLoading.vue`
-- 验证:`tests/g01-loading-state-contract.ps1`
-- 验证:`tests/g-series-app-loading-contract.ps1`
-- 验证:`tests/module-app-loading-contract.ps1`
-- 内部证据:`docs/design/screens/runtime/2026-07-19/g01-approval/03-loading-essential-motion-412x915.png`
-
-**接口:**
-
-- 消费:`AppLoading` 现有 `variant`、`text`、`description` 属性。
-- 产出:正常模式继续使用 `app-loading-seal-breathe`/`app-loading-knot-breathe`;减少动态效果模式使用 `app-loading-seal-essential-pulse`/`app-loading-knot-essential-pulse`。
-- 不增加新的组件属性、事件或页面状态。
-
-- [ ] **Step 1:先补充会失败的公共契约**
-
-在 `tests/app-loading-contract.ps1` 的现有动画断言之后加入:
-
-```powershell
-Assert-Match -Content $component -Pattern '@keyframes\s+app-loading-seal-essential-pulse' -Message 'Reduced-motion AppLoading must retain an essential seal opacity pulse'
-Assert-Match -Content $component -Pattern '@keyframes\s+app-loading-knot-essential-pulse' -Message 'Reduced-motion AppLoading must retain an essential knot opacity pulse'
-Assert-Match -Content $component -Pattern '(?s)@media\s*\(prefers-reduced-motion:\s*reduce\).*?\.app-loading__seal\s*\{[^}]*animation:\s*app-loading-seal-essential-pulse\s+1\.2s\s+ease-in-out\s+infinite;[^}]*transform:\s*none;' -Message 'Reduced-motion seal must pulse opacity without transform motion'
-Assert-Match -Content $component -Pattern '(?s)@media\s*\(prefers-reduced-motion:\s*reduce\).*?\.app-loading__knot\s*\{[^}]*animation:\s*app-loading-knot-essential-pulse\s+1\.2s\s+ease-in-out\s+\.2s\s+infinite;[^}]*transform:\s*none;' -Message 'Reduced-motion knot must pulse opacity without transform motion'
-if ($component -match '(?s)@media\s*\(prefers-reduced-motion:\s*reduce\).*?animation:\s*none') {
- throw 'Reduced-motion AppLoading must not become completely static'
-}
-```
-
-- [ ] **Step 2:运行聚焦契约并确认 RED**
-
-运行:
-
-```powershell
-powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/app-loading-contract.ps1
-```
-
-预期:退出码非 0,错误首先指向缺少 `app-loading-seal-essential-pulse`,证明测试捕获的是当前完全静止行为,而不是语法或路径错误。
-
-- [ ] **Step 3:实现最小降动效透明度脉冲**
-
-在 `components/AppLoading.vue` 中保留现有正常模式关键帧,并把当前媒体查询替换为:
-
-```scss
-@keyframes app-loading-seal-essential-pulse {
- 0%, 100% { opacity: .58; }
- 50% { opacity: 1; }
-}
-
-@keyframes app-loading-knot-essential-pulse {
- 0%, 100% { opacity: .28; }
- 50% { opacity: .86; }
-}
-
-@media (prefers-reduced-motion: reduce) {
- .app-loading__seal {
- animation: app-loading-seal-essential-pulse 1.2s ease-in-out infinite;
- transform: none;
- }
-
- .app-loading__knot {
- animation: app-loading-knot-essential-pulse 1.2s ease-in-out .2s infinite;
- transform: none;
- }
-}
-```
-
-不得修改模板、属性、尺寸、文案或正常模式关键帧。
-
-- [ ] **Step 4:运行聚焦契约并确认 GREEN**
-
-运行:
-
-```powershell
-powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/app-loading-contract.ps1
-powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/g01-loading-state-contract.ps1
-```
-
-预期:分别输出 `APP-LOADING-CONTRACT PASS` 和 `G01-LOADING-STATE-CONTRACT PASS`,退出码均为 0。
-
-- [ ] **Step 5:在当前唯一 Chrome 标签页验证真实动画**
-
-保持 G01 `state=loading` 和 412×915 视口。通过 9222 CDP 在同一次检查中读取:
-
-```js
-const seal = document.querySelector('.app-loading__seal')
-const knot = document.querySelector('.app-loading__knot')
-const sealStyle = getComputedStyle(seal)
-const knotStyle = getComputedStyle(knot)
-({
- reduced: matchMedia('(prefers-reduced-motion: reduce)').matches,
- sealAnimation: sealStyle.animationName,
- sealTransform: sealStyle.transform,
- sealOpacity: sealStyle.opacity,
- sealAnimations: seal.getAnimations().length,
- knotAnimation: knotStyle.animationName,
- knotTransform: knotStyle.transform,
- knotOpacity: knotStyle.opacity,
- knotAnimations: knot.getAnimations().length
-})
-```
-
-等待约 420ms 后再次读取。预期:
-
-- `reduced` 为 `true`;
-- 两个 `animationName` 分别以新的 essential pulse 名称开头;Vue scoped CSS 可在运行时追加哈希后缀;
-- 两个 `getAnimations().length` 均大于 0;
-- 两次读取的透明度不同;
-- 两个 `transform` 均为 `none`;
-- 页面仍为 G01 加载态。
-
-- [ ] **Step 6:捕获并人工检查当前候选帧**
-
-使用当前唯一标签页保存:
-
-```text
-docs/design/screens/runtime/2026-07-19/g01-approval/03-loading-essential-motion-412x915.png
-```
-
-人工检查:标题栏、背景、印牌、如意结、两行文案和底部导航均完整;没有列表、失败态或原生 Loading 串入。静态截图不作为动画运行证明,动画结论以 Step 5 的多时点数据为准。
-
-- [ ] **Step 7:运行受影响合同与空白检查**
-
-运行:
-
-```powershell
-powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/g-series-app-loading-contract.ps1
-powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/module-app-loading-contract.ps1
-git diff --check -- components/AppLoading.vue tests/app-loading-contract.ps1 docs/superpowers/specs/2026-07-19-app-loading-essential-motion-design.md docs/superpowers/plans/2026-07-19-app-loading-essential-motion.md
-```
-
-预期:两个合同均输出各自的 `PASS`,`git diff --check` 退出码为 0。不得把 Android/HBuilderX 写成已验证。
-
-- [ ] **Step 8:回到同一加载态等待用户复核**
-
-保持浏览器停留在修正后的 G01 加载态,不自动切换到失败态。只有用户明确说加载态“通过”后,才继续 G01 下一状态;在此之前 G01 保持 `[!]`。
diff --git a/docs/superpowers/plans/2026-07-19-f01-family-feed-baseline-redesign.md b/docs/superpowers/plans/2026-07-19-f01-family-feed-baseline-redesign.md
deleted file mode 100644
index 33c327c..0000000
--- a/docs/superpowers/plans/2026-07-19-f01-family-feed-baseline-redesign.md
+++ /dev/null
@@ -1,200 +0,0 @@
-# F01 Family Feed Baseline Redesign Implementation Plan
-
-> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. This project explicitly forbids subagents, worktrees, staging, and commits.
-
-**Goal:** Replace F01's application-status cards with a dedicated transparent family-letter content card and make all four shortcuts usable at every supported viewport.
-
-**Architecture:** Keep F01 state and navigation logic unchanged. Add one F01-owned raster card skin under the family module, update only F01 markup/styles, and protect the asset, hierarchy, touch-target, and state contracts with a focused PowerShell test plus existing runtime coverage.
-
-**Tech Stack:** uni-app, Vue 3 `