87 lines
5.6 KiB
Markdown
87 lines
5.6 KiB
Markdown
# Warframe 主题美术重构计划
|
||
|
||
## 目标
|
||
|
||
把 gilded 从“暗色换色皮肤”重构为完整 Warframe 主题:保留原始荒野画作作为主视觉,
|
||
将用户提供的三张画作作为真实可见的次级画面,通过切片、遮罩、景深和界面骨架融合成
|
||
一套连续构图;导航、按钮、输入框、选中态和动效统一采用 Orokin/星际战甲视觉语言,
|
||
同时保持正文阅读表面的高对比度。
|
||
|
||
## 视觉策略
|
||
|
||
- **视觉论点:** 黑曜石舰舱中展开的 Orokin 档案界面,暗金骨架承载冷青能量与赤红战场,
|
||
四张画面组成一个连续视觉场,而不是四张并排海报。
|
||
- **内容规划:** 欢迎态负责完整主题表达;导航负责定位;聊天区负责阅读;输入区负责行动。
|
||
- **交互论点:** 主视觉分层进场;画面切片在 hover/focus 时产生克制景深;按钮和会话选中态
|
||
使用切角、能量线和短距离位移;减少动态模式下全部取消。
|
||
|
||
## 执行步骤
|
||
|
||
1. [complete] 建立四图主题构图与素材契约
|
||
2. [complete] 保存并校验三张参考画作资源
|
||
3. [complete] 重构欢迎态为连续多图主视觉
|
||
4. [complete] 统一导航输入按钮的 Warframe 组件语言
|
||
5. [complete] 完成桌面移动响应式和加载降级
|
||
6. [complete] 更新回归契约与缓存版本
|
||
7. [in_progress] 运行专项全量回归并检查实际资源加载
|
||
|
||
## 完成标准
|
||
|
||
- 原始 1000×1500 画作继续作为主视觉;三张用户提供的 Displate 画作保存为本地静态资源,
|
||
不依赖远程热链,四张图在欢迎态真实可见并有明确主次。
|
||
- 不是相册、卡片墙或简单并排:桌面端通过不规则切片、层叠深度和统一骨架线组成一个连续
|
||
视觉场;移动端重排成主画面加叙事切片,不能横向溢出。
|
||
- 导航、标题栏、会话项、按钮、输入框、菜单与焦点态共享切角、暗金骨架、冷青能量高光;
|
||
不能只改颜色,也不能用图案牺牲文字可读性。
|
||
- 普通聊天正文仍使用不透明表面;主/次/弱文字最低对比度保持 7:1 / 5.5:1 / 4.5:1。
|
||
- 所有图片由真实 `<img>` 或稳定本地资源加载;单图失败时保留结构和可读界面,不出现空白块。
|
||
- `scripts/regression.js` 必须移除旧的“原图只引用 2 次 / 只有 `.welcome-art`”单图契约,
|
||
改为断言四个本地资源存在且 hash/尺寸固定、动态与静态欢迎态均含四个 `<img>`、连续构图
|
||
容器和四种图层类存在、UI 不含远程热链、聊天正文不使用图片背景、移动端有明确重排。
|
||
- `npm run regression -- --target gilded-theme`、`npm run regression`、`git diff --check` 和
|
||
四张图片的本地 HTTP 200 / 正确 Content-Type 检查全部通过。
|
||
|
||
## 素材契约
|
||
|
||
1. 主图:`public/assets/themes/gilded-wasteland.png` → 保持原路径;1000×1500 PNG;
|
||
SHA-256 `11bf3ffed4422c08f6be217c63060ba68d63367e747a3604fc2d7b877e9c5955`;
|
||
用途为最大荒野主画面,不能被替换。
|
||
2. 赤红群像:用户 URL `ce5c50d5-7712-494e-9605-0cf6fa28118a.jpg?speedsize=w_480`,
|
||
当前 `/tmp/warframe-candidate-1.jpg` → 目标
|
||
`public/assets/themes/warframe-ember-squad.jpg`;480×673 JPEG;SHA-256
|
||
`a9c89c5ec1f94445fbdce6b24d7a0a54e492d003cfbee395601fbaba405c6d65`;
|
||
用途为带太阳与中央角色的横向战场切片。
|
||
3. 冷蓝近景:用户 URL `fc78630c-3914-4140-b64a-8e181f41c62f.jpg?speedsize=w_480`,
|
||
当前 `/tmp/warframe-candidate-2.jpg` → 目标
|
||
`public/assets/themes/warframe-orokin-figure.jpg`;480×672 JPEG;SHA-256
|
||
`80c2dec24353ddc38629ae25568802cf3201d9da67b4b948047201952e5fc95b`;
|
||
用途为保留头肩轮廓的冷青窄幅前景。
|
||
4. The Sacrifice:用户 URL `ddd18c99-c3ba-466b-bcbe-690276d29aea.jpg?speedsize=w_480`,
|
||
当前 `/tmp/warframe-candidate-3.jpg` → 目标
|
||
`public/assets/themes/warframe-sacrifice.jpg`;480×672 JPEG;SHA-256
|
||
`792ab3eb2bd0b491f24676c2c42273a2b5167b4450aeb7edd579338f0b777b76`;
|
||
用途为暗青深景、纵向金色中轴和底部标题层。
|
||
|
||
## 约束
|
||
|
||
- 保留现有无关未提交改动,尤其子代理卡片逻辑、Trellis 任务和发布包。
|
||
- 不重启 cc-web;静态文件由当前服务直接提供。
|
||
- 不伪造浏览器截图;若仍没有可用浏览器运行时,明确记录视觉验证边界。
|
||
|
||
## 错误记录
|
||
|
||
- 首次在 `/tmp` 全目录检索候选图时命中 systemd 私有目录权限错误;候选文件仍成功定位,
|
||
后续只读取四个精确路径,不再扫描受限目录。
|
||
- codebase-memory MCP 的 `list_projects` 与 `index_status` 均返回 `Transport closed`;按项目
|
||
约定降级为 `rg`/`sed` 精确定位,并保留最终行号交叉验证。
|
||
- 当前环境没有 ImageMagick 的 `identify`/`convert`;图片尺寸改用 `file` 和已有 JPG/PNG
|
||
元数据核验,色彩与裁切根据已查看的原始像素图判断,不重复调用缺失命令。
|
||
- `/usr/bin/firefox` 的 Snap 包装层因 mount namespace 限制超时;改用
|
||
`/snap/firefox/current/usr/lib/firefox/firefox` 直接运行后截图成功,不重复调用包装层。
|
||
- 首次修正四图 BEM 类名的组合补丁因 `app.js` 实际为多行模板而未匹配;读取精确上下文后
|
||
改用逐行小补丁成功,未产生部分修改。
|
||
- 四图专项回归首次命中按钮金色渐变暗端对比度仅 6.85:1;将暗端由 `#b9995c` 提亮为
|
||
`#c2a566`(7.81:1),保留渐变层次而不降低 7:1 验收标准。
|
||
- 首次全量回归在既有 Codex App steer mock 时序处返回 `no active turn to steer`,主题专项
|
||
断言此前已通过;先检查遗留 mock 进程,再以 60 秒上限复跑,不把该非主题错误算作通过。
|