` 而非真 `
` 元素,首版 CSS 只写 `main {}` 不命中 —— 表现为 CSS chunk 已含新规则但截图 MD5 完全一致。选择器必须写 `main, [role="main"]`。且只补 `main` 不够,`footer` 在 main 之外同样被 64px Tab bar 截断。 ### 10.2 Phase 2 —— 5 文件 8 处(残存 P1 清零) 用户决策:装饰数字走 `aria-hidden`;页脚触控认定 WCAG 2.5.8 间距豁免不改;`/about/brand` 书法字保留。 **执行时对决策做了必要拆分** —— 残存 3 处 P1 不全是装饰元素: | 类别 | 位置 | 处理 | 理由 | |---|---|---|---| | A 装饰 | `about-content-v4.tsx:212`(01/02/03) | `aria-hidden="true"` | 与右侧 `value.title` 并列,无独立语义 | | A 装饰 | `team-content-v3.tsx:82`(01-05)、`:115`(01-03) | `aria-hidden="true"` | 同上,1.13:1 | | A 装饰 | `product-detail-content-v3.tsx:288`、`solution-detail-content-v3.tsx:378` | `aria-hidden="true"` | 客户名首字占位图形;探针盲区(渐变背景被跳过),同类问题一并修 | | B 语义 | `brand-content.tsx:129`、`team-content-v3.tsx:206` | `text-text-secondary/70` → `/80` | **真实副文案,不可 aria-hidden**;4.35:1 → 5.74:1,视觉几乎无变化 | | B 语义 | `brand-content.tsx:271` | `text-text-muted` → `text-text-secondary` | 「正式成立/研发启航」标签在 `bg-tertiary #F1F5F9` 上 4.34:1 → 9.45:1 | > **对决策的纠正**:B 类若按「一律 aria-hidden」处理,会把公司简介与里程碑年份从屏幕阅读器中删除 —— 用可访问性缺陷替换对比度缺陷。已按语义拆分处理。 ### 10.3 探针同步改造(否则证据无法闭环) `ui-audit.mjs` 原本不识别 `aria-hidden`,改完页面数字不会下降。已增加: - 对比度检测:命中 `[aria-hidden="true"]` 祖先则跳过,并累计 `decorativeSkipped` **让豁免量可见**(防止用 aria-hidden 刷绿) - 触控检测:命中 `aria-hidden` 的可聚焦元素计入 `ariaHiddenFocusable` 单独上报,**不静默跳过**(隐藏内容不应可聚焦,属 ARIA 误用) ### 10.4 验证数据 | 指标 | 修复前基线 | Phase 1 后 | Phase 2 后 | |---|---:|---:|---:| | P1 | 29 | 3 | **0** | | P2 | 34 | 34 | 34 | | P3 | 0 | 0 | 0 | | 有对比度违规的页面 | 29 | 3 | **0** | | 触控目标违规总数 | 441 | 441 | 441(用户决策:认定豁免,不改) | 豁免核对(证明未刷绿):`/about` decorativeSkipped=3、`/team` =8(5+3)、`/about/brand` =0;三页 `ariaHiddenFocusable` 全为 0。 门禁:`type-check` 0 error · `check:contrast` 7/7 ✅ · `eslint`(5 个受影响文件)0 error · 全站 31 路由复跑 0 P1。 产物:`dogfood-ui-audit/2026-09-01T07-59-30/`(终态)、`2026-09-01T07-34-54/`(Phase 1)。 --- ## 11. P0-1 Layer 3 定位修正(重要) 审计把「Layer 3 信任层 100% 缺失」列为 P0。用户选定其为下一步后做了数据源勘察,**结论需要修正**: | Layer 3 子项 | 数据源 | 现状 | |---|---|---| | 客户案例 | `prisma/seeds/case-studies.ts` | **空数组**,注释:「公司成立于 2026-01-15,处于首批客户共创阶段,暂无对外可验证的客户案例,因此保持为空数组。待真实案例获得客户授权后再补充。」 | | 客户证言 | `src/lib/constants/` | 无任何 testimonial 数据文件 | | 资质认证 | 同上 | 无任何 certification 数据文件 | | 合作伙伴 | 同上 | 无任何 partner 数据文件 | **即 Layer 3 不是「忘了做」,而是刻意留空以避免编造未授权的客户案例**(公司成立仅 7 个月)。这符合 `AGENTS.md` 的「零编造」原则,但意味着: - 案例 / 证言 **不可由 AI 生成** —— 虚构客户案例属商业诚信风险 - 该层只有拿到真实内容授权后才能建立 **零编造前提下可推进的替代信任信号**(不虚构事实): 1. **方法论透明度** —— `/methodology` 已有真实内容,在详情页交叉引用「我们怎么做」 2. **团队资历** —— `/team` 有真实 strengths/culture 数据,复用为「谁来做」 3. **成立与里程碑透明** —— `/about/brand` 有真实里程碑,可作为「坦诚的早期公司」叙事 4. **服务承诺 / 交付标准** —— 需业务确认,属可设计项(不虚构已发生的事实) 建议:把 P0-1 从「填充案例」改为「建立 Layer 3 骨架 + 接入上述 4 类真实信号」,案例/证言位留占位待授权后填充。 --- **报告生成时间**:2026-09-01 **审计脚本**:`scripts/audit/ui-audit.mjs`、`scripts/audit/audit-fullpage.mjs` **审计员**:dogfood (Playwright + agent-browser)