Files
NumberSwipe_New/docs/design.md
T
cabinw 8026e4628d 初始提交:三玩法 Web 原型与设计文档
- 玩法一 数字一笔:规则库、求解器、26 关、竖屏触摸 Web 原型、测试
- 玩法二 连连气球:连消畅玩版核心、Web 原型、Cocos 球槽组件与导出脚本
- 玩法三 六边一笔:规则库、求解器、10 关 + 转墙实验包、Web 原型、测试
- 产品文档、UI 设计规范、各玩法 GDD / HANDOFF
- 文档移除全部外部参考作引用;删除玩法二 v0 旧稿
2026-09-16 14:30:59 +08:00

330 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# UI 设计规范 · design.md
版本 1.5 · 2026-09-16 · 参考实现:玩法一「数字一笔」(`modes/01-number-stroke`)。设计师看图请打开同目录的 [`design.html`](design.html)(可离线双击,含色板、字阶、组件样张与可回放的动效)。
本文是产品级的视觉与动效规范。规则、关卡、交互语义仍以各玩法的 GDD 为准;本文只管「长什么样、怎么动」。
## 0. 怎么用这份文档
三处必须一致,改任何一处都要同步另外两处:
| 位置 | 内容 | 谁在用 |
|---|---|---|
| `docs/design.md` + `docs/design.html` | 规范与样张 | 设计师、接手人 |
| `modes/01-number-stroke/web/style.css` 的 `:root` | CSS 令牌 | DOM 壳(选关、顶栏、底栏、toast) |
| `modes/01-number-stroke/src/theme.ts` | `THEME` / `BOARD_TYPE` / `MOTION` | Canvas 盘面(Web 与 Cocos 共用) |
`tests/theme.test.ts` 会校验 `style.css` 与 `theme.ts` 的颜色、动效时长、字体栈一致,改了一边没改另一边 `npm run check` 会红。
**改设计的流程**:先改本文对应表格 → 改 `style.css` / `theme.ts` → 改 `design.html` 样张 → 在 §12 变更记录追加一行。
## 1. 设计原则
1. **板要干净。** 逻辑 puzzle 的盘面只回答三个问题:我走到哪了、哪错了、过没过。任何装饰都不能和这三件事抢注意力。
2. **一个主色。** 蓝紫 `#6558F5` 只表示「已走 / 当前 / 可继续」。红只表示冲突,琥珀只表示提示。不要每关换主题色。
3. **数字优先。** 盘面上的数字是内容本身。数字用系统圆体、800 字重、等宽数字;其余文字都比数字轻。
4. **动效四档。** 所有动效只用 120 / 200 / 320 / 500 ms 四档时长和四条缓动曲线。新动效先归档,再写代码。
5. **反馈紧贴手指。** 落子、踩对、冲突、死路的反馈都发生在手指所在的格子上,不弹窗、不撒纸片。
6. **信息随手可见。** 关号、包名、本包进度、剩余格数常驻顶栏,一眼看清「我在哪、还差多少」。
## 2. 色彩
浅色单主题。所有颜色取自下表,DOM 用 CSS 变量,Canvas 用 `THEME`。
### 2.1 令牌
| 令牌 | 值 | 用途 | CSS | theme.ts |
|---|---|---|---|---|
| 背景 | `#FFFFFF` | 页面与盘面背景 | `--bg` | `bg` |
| 桌面底 | `#F2F2F6` | 桌面浏览器上手机框外的底色 | `--bg-app` | – |
| 二级表面 | `#F3F3F7` | 按钮、胶囊、chip、锁定关卡格 | `--surface-2` | – |
| 未走格 | `#E6E7EC` | 盘面未走格、选关未过关格、进度条底 | `--cell` | `cell` |
| 分隔线 | `#E1E2EA` | 细线(预留) | `--line` | – |
| 墨 | `#23243A` | 标题、正文、未走线索数字、冲突角标底 | `--ink` | `clueInk` |
| 墨 2 | `#6B6D80` | 副文案、字幕、胶囊文字、图标 | `--ink-2` | – |
| 墨 3 | `#A3A5B5` | 弱文案、进度数字、锁图标 | `--ink-3` | – |
| 主色 | `#6558F5` | 已走格、桥、当前关、主按钮、进度 | `--primary` | `visited` |
| 主色·亮 | `#7D72FF` | 过关后全盘提亮 | `--primary-bright` | `visitedBright` |
| 主色·淡 | `#ECEAFE` | 当前关格底、开启态 chip、完成态胶囊 | `--primary-soft` | – |
| 主色上的字 | `#FFFFFF` | 已走格数字、主按钮文字 | `--on-primary` | `visitedInk` |
| 冲突 | `#E5484D` | 冲突格、重置进度 | `--danger` | `conflict` |
| 冲突·淡 | `#FDECEC` | 预留(高对比模式) | `--danger-soft` | – |
| 提示 | `#F5A524` | 提示描边、提示按钮脉冲 | `--hint` | `hint` |
| 提示·淡 | `#FEF3DD` | 预留 | `--hint-soft` | – |
| 线索描边 | `#23243A` | 未走线索 / 奇偶格的描边(= 墨,与线索数字同色) | `--clue-ring` | `clueRing` |
| 已走线索描边 | `#DFE1EC` | 起点与已走线索格外圈的灰白描边 | – | `activeClueRing` |
| 闪色 | `#FFFFFF` | 踩对线索闪白、过关扫光 | – | `flash` |
| 遮罩 | `rgba(35,36,58,.92)` | toast 底 | `--overlay` | – |
阴影:主按钮 `0 6px 18px rgba(101,88,245,.28)`,按下时 `0 3px 10px rgba(101,88,245,.22)`;桌面手机框 `0 20px 60px rgba(20,20,40,.14)`。盘面无阴影。
### 2.2 语义规则
- 紫 = 路径。已走格、桥、起点 `1`、当前关、主按钮、进度条都是同一个紫。
- 红只出现在冲突格。错误发生时该格轻晃 280ms,进出连线保持紫色;步号占用别处固定数字时不显示「×」。本格数字 / 奇偶要求不符时仍保留原要求角标。
- 琥珀只出现在提示描边和提示按钮脉冲,不用于任何常驻元素。
- 灰阶承担一切非路径信息:未走格 `cell`、文字三档墨。未走线索 / 奇偶格的描边与线索数字同用墨色,像印在盘上的一圈,不引入第二种彩色。
- 过关后全盘从 `primary` 切到 `primary-bright`,这是唯一允许的「换色」。
### 2.3 对比度
| 组合 | 对比度 | 用途 |
|---|---|---|
| `#FFFFFF` on `#6558F5` | 5.2 : 1 | 已走格数字、主按钮 |
| `#23243A` on `#E6E7EC` | 12.6 : 1 | 未走线索数字 |
| `#FFFFFF` on `#E5484D` | 4.5 : 1 | 冲突格数字(角标另有墨底白字) |
| `#6B6D80` on `#FFFFFF` | 5.1 : 1 | 副文案 |
| `#23243A` on `#E6E7EC` | 12.6 : 1 | 未走线索描边(与数字同色) |
| `#A3A5B5` on `#FFFFFF` | 2.5 : 1 | 仅用于非关键弱文案 |
## 3. 字体与字阶
### 3.1 字体栈
```
ui-rounded, "SF Pro Rounded", "PingFang SC", "Hiragino Sans GB", "Noto Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif
```
`ui-rounded` 让 iOS / macOS 直接拿到系统圆体(数字圆润、与圆角格子同气质);Android 回落到 Noto Sans SC;Windows 回落到 Segoe UI。DOM 与 Canvas 用同一串(`--font` 与 `BOARD_FONT_FAMILY`)。
全局 `font-variant-numeric: tabular-nums`,所有数字等宽,计数变化时不跳动。
### 3.2 UI 字阶
| 名称 | 字号 / 字重 | 用途 | CSS |
|---|---|---|---|
| display | 34 / 800 | 选关页标题 | `--fs-display` |
| title | 22 / 800 | 顶栏关号 `1-7` | `--fs-title` |
| heading | 17 / 700 | 包标题、主按钮 | `--fs-heading` |
| body | 15 / 500 | 副标题、字幕 | `--fs-body` |
| label | 14 / 600–700 | 剩余格胶囊、包进度、toast | `--fs-label` |
| caption | 13 / 600 | chip、总进度数字 | `--fs-caption` |
| micro | 12 / 600 | 顶栏副标题「入门 · 第 7 关」(字距 0.04em) | `--fs-micro` |
选关关卡格数字 20 / 700;底栏按钮 15 / 700。
### 3.3 盘面字阶(相对单位格边长 u)
| 用途 | 比例 | 字重 | theme.ts |
|---|---|---|---|
| 起点 `1`(未按下的提示态与已走第 1 步) | 0.60 u | 800 | `BOARD_TYPE.start` |
| 单位数步号 / 线索 | 0.52 u | 800 | `single` |
| 两位数步号 / 线索 | 0.46 u | 800 | `double` |
| 未走奇偶格「奇 / 偶」 | 0.44 u | 700 | `parity` |
| 已走奇偶格下方小字「奇 / 偶」 | 0.19 u | 700 | `paritySub` |
| 冲突角标半径 / 角标字号 | 0.15 u / 半径 × 1.25 | 800 | `badge` / `badgeText` |
| 线索描边线宽 | 0.05 u(≥ 2px) | – | `ring` |
| 提示描边线宽 | 0.08 u(≥ 3px) | – | `hintRing` |
数字一律 800,汉字 700,文字基线下沉 4% 字号做视觉居中。大格 / 异形格的数字放在锚点单位(形心最近的单位格)中心。
## 4. 间距、圆角、尺寸
- **间距**:4pt 网格。`--sp-1..7` = 4 / 8 / 12 / 16 / 20 / 24 / 28。页面左右内边距 20,顶部 12 + 安全区,底部 16 + 安全区。
- **圆角**:`--r-sm` 10(预留)、`--r-md` 14(关卡格、toast)、`--r-lg` 18(主按钮、底栏按钮)、`--r-xl` 24(预留)、`--r-pill` 胶囊。桌面手机框 28。
- **盘面**:格圆角 0.18 u,格间缝 0.10 u,桥厚 0.46 u。
- **点击区**:所有可点元素 ≥ 44 × 44(`--tap`)。返回按钮 44,chip 34 高但左右各留 16 内边距。
- **桌面**:≥ 520px 宽时以 480px 手机框居中,四周 24 留白,圆角 28 + 框阴影。
## 5. 盘面(Canvas)
### 5.1 布局
- `fitBoard`:按短边缩放,四周留 10px,单位格封顶 96px(≤ 6 格的教学盘)或 110px。
- 整盘垂直居中后**上提容器高度的 3%**:视觉中心略高于几何中心,小盘不显得下坠。
- 命中测试:触屏每格四周 8% 死区,鼠标 14%。点按或滑到任意历史格可直接回退;触点进入历史格时优先处理回退。
### 5.2 格的状态
| 状态 | 底 | 描边 | 数字 | 备注 |
|---|---|---|---|---|
| 未走 | `cell` | 无 | 无 | – |
| 未走线索 | `cell` | `clue-ring`(墨)0.05 u | `ink` 0.52 / 0.46 u | 描边用「外层剪影 + 内层填充」画,矩形与异形同一画法 |
| 未走奇偶 | `cell` | `clue-ring`(墨)0.05 u | 「奇 / 偶」`ink` 0.44 u | – |
| 起点 `1`(未按下) | `primary` | `activeClueRing` | `on-primary` 0.60 u | 只是视觉提示,按下才计入路径 |
| 已走 | `primary` | 无 | 步号 `on-primary` | 与相邻已走格之间画桥 |
| 已走线索 / 起点 | `primary` | `activeClueRing` | 步号 | 描边保留,说明它曾是线索 |
| 已走奇偶 | `primary` | `activeClueRing` | 步号上移 0.09 u,下方 0.19 u 小字「奇 / 偶」 | – |
| 冲突 | `danger` | 线索有描边则 `activeClueRing` | 步号 `on-primary` | 单格轻晃 280ms,连接线仍紫色;步号错位无叉号。本格要求不符时保留数字 / 奇偶角标,半径 0.15 u |
| 补数字 | 同普通线索 | 先叠加琥珀外圈 2.4s,之后恢复普通线索描边 | 新数字使用普通数字字阶;奇偶格保留下方小字 | 本局重开仍保留数字 |
| 提示目标 | 不变 | 外圈 `hint` 描边 0.08 u,向外扩一线宽 | 不变 | 2.4s 脉冲后消失 |
| 退回压暗 | 覆 `bg` 45% | – | – | 提示「已偏离」时,分叉点之后的段压暗 |
| 过关 | `primary-bright` | – | – | 按步序扫白光 |
大格(2×2、3×3、1×2…)是一个圆角矩形;异形格由单位矩形 + 接缝矩形同色拼成一整块,凸角圆、凹角直。
### 5.3 桥
两个相邻已走格之间的连接:沿共享边居中,厚 0.46 u,跨缝方向盖满缝再多 1px。始终使用路径色;任一侧冲突也不变红、不随格子晃动。**生长动画只长厚度**,跨缝方向从第一帧起就盖满,不露白缝。
## 6. 组件
### 6.1 顶栏(对局)
```
[←] 1-7 [▢ 6]
入门 · 第 7 关
▬▬ ▬▬ ▬▬ ▬▬ ▬▬ ▬▬ ▬▬ ▬▬ ▬▬ ▬▬ ← 本包进度条
```
- 三列网格 `1fr auto 1fr`,中间永远居中。高 52。
- 返回:44 圆形点击区,墨 2 色 26px 箭头,按下时底 `surface-2`。
- 关号:title 22 / 800;副标题 micro 12 / 600 墨 3,内容 `{包名} · 第 {n} 关`。
- 剩余格胶囊:高 32,`surface-2` 底,墨 2 字 14 / 700,左侧 16px 圆角方框图标(墨 3)。数字变化时 `bump`(200ms spring 缩放 1 → 1.14 → 1)。过关后切到 `done`:底 `primary-soft`、字与图标 `primary`、图标换勾、文字「完成」。
- 本包进度条:每关一段,高 4,段间 3,圆角 2。灰 = 未到,紫 40% = 已过,紫 100% = 当前。
### 6.2 字幕
顶栏下方 36 高一行,body 15 / 500 墨 2 居中。只有教学关有内容,空时 200ms 淡出。
### 6.3 底栏
三个等宽按钮「重开 / 补数字 / 指路」(最大 170),高 56,圆角 18,`surface-2` 底,15 / 700 墨色,图标 22px 墨 2,图标与文字间距 4px。按下底色变 `cell` + 缩放 0.97。禁用 40% 透明。「指路」发现起手错时,重开按钮 `pulse`:0.9s 琥珀外圈呼吸。
底栏上方是常驻手势说明「按住滑动连线 · 点已走格回退」,caption 13px 墨 2,顶部间距 8px,居中。
### 6.4 Toast
距页面底边 128px + 底部安全区居中,避开手势说明。圆角 14,`overlay` 底白字 14 / 600,最大宽度为页面宽减 40px,长句自动换行;进出 200ms(透明 + 上移 8px),停留 1.8s。
### 6.5 选关页
- 标题 display 34 / 800,副标题 body 墨 2;下方**总进度**:6px 胶囊条(`cell` 底、`primary` 填充,320ms 过渡)+ 右侧 `16 / 26` caption 墨 3。
- 包标题 heading 17 / 700,右侧 `x / n` label 墨 3;整包完成时变 `primary`。
- 关卡格:5 列,间距 12,正方形,圆角 14,数字 20 / 700。
- 未过关:`cell` 底墨字。
- 已过关:`primary` 底白字,右上角 CSS 画的小勾。
- 当前:`primary-soft` 底 + 3px 内描边 `primary` + 紫字,2.4s 呼吸外圈。
- 锁定:`surface-2` 底,墨 3 锁图标,无数字;点击 320ms 抖动。
- 按下缩放 0.94。
- 列表可滚,顶部 12px、底部 20px 渐隐遮罩,不被按钮切断。
- 继续按钮:高 54,圆角 18,`primary` 底白字 17 / 700,紫色投影;文案 `继续 · 2-1`。
- 设置 chip:高 34 胶囊,`surface-2` 底墨 2 字 13 / 600;开启态 `primary-soft` 底紫字;「重置进度」红字。
## 7. 页面
### 7.1 对局页(自上而下)
| 区块 | 高度 |
|---|---|
| 安全区 + 12 | – |
| 顶栏 | 52 |
| 本包进度条 | 8 上边距 + 4 |
| 字幕 | 8 上边距 + 36 |
| 盘面 | 剩余全部(flex: 1) |
| 手势说明 | 8 上边距 + caption 行高 |
| 底栏 | 12 上边距 + 56 |
| 16 + 安全区 | – |
### 7.2 状态流
```
选关 ──点关卡 / 继续──▶ 对局(整屏淡入 200ms,盘面错落进场)
对局 ──过关──▶ 扫光 320ms → 停留 500ms → 盘面淡出 160ms → 下一关盘面进场(顶栏就地更新)
对局 ──最后一关过关──▶ 选关(toast「已通关全部 26 关」)
对局 ──返回──▶ 选关(整屏淡入)
```
## 8. 动效
### 8.1 时长与缓动
| 档 | 时长 | 用途 | CSS | theme.ts |
|---|---|---|---|---|
| fast | 120ms | 按下反馈、步号淡入、桥生长 | `--t-fast` | `MOTION.fast` |
| base | 200ms | 整屏切换、toast、胶囊 bump、进场单格 | `--t-base` | `MOTION.base` |
| slow | 320ms | 闪白衰减、过关扫光、抖动、进度条 | `--t-slow` | `MOTION.slow` |
| hold | 500ms | 过关停留 | `--t-hold` | `MOTION.hold` |
| 缓动 | 曲线 | 用途 |
|---|---|---|
| ease-out | `cubic-bezier(.22, 1, .36, 1)` | 进场、淡入、桥生长(Canvas 用 quart ease-out) |
| ease-in | `cubic-bezier(.4, 0, 1, 1)` | 退场 |
| ease-in-out | `cubic-bezier(.65, 0, .35, 1)` | 呼吸、脉冲 |
| spring | `cubic-bezier(.34, 1.56, .64, 1)` | bump;Canvas 弹簧 k=260、c=18、初速 2.4 |
### 8.2 事件 → 动效
| 事件 | 对象 | 动效 | 时长 | 音效 | 振动 |
|---|---|---|---|---|---|
| 开局 / 切关 | 每个格 | 缩放 0.92 → 1 + 淡入,按阅读顺序每格延迟 14ms,延迟封顶 200ms | base | – | – |
| 追加一步 | 当前格 | 弹簧放大回 1(初速 2.4) | ≈ 200 | step(音高随步号) | 8ms |
| 追加一步 | 步号 | 淡入 | fast | – | – |
| 追加一步 | 桥 | 厚度 0 → 1(ease-out),跨缝方向始终盖满 | fast | – | – |
| 踩对线索 | 该格描边 | 闪白 1 → 0 线性衰减 | slow | step | 18ms |
| 冲突 | 该格 | 立即红底 + 横向轻晃,幅度 0.06 u 递减;进出连线保持紫色 | 280ms | conflict(闷音) | 40ms |
| 撤销 | 该格 / 桥 | 立即褪回,无动画 | 0 | – | – |
| 多步回退 | 目标格 | 后缀立即撤回,目标格轻弹;toast 说明回到第几步 | ≈ 200 | – | 12ms |
| 补数字 | 目标格 | 数字成为固定线索,目标轻弹并显示琥珀外圈 | 2.4s | – | 18ms |
| 死路 | 当前格 | 横向抖动,6 个来回,幅度 0.06 u 递减 | 280ms | – | 10-30-10 |
| 非法起手 | 线索 `1` 格 | 同上抖动 | 280ms | reject | 15ms |
| 剩余格变化 | 顶栏胶囊 | bump 1 → 1.14 → 1(spring) | base | – | – |
| 提示 | 目标格 | 琥珀外描边,≈ 1.1Hz 正弦脉冲,最后 0.4s 淡出 | 2.4s | – | – |
| 提示·已偏离 | 分叉后的段 | 覆白 45% 随脉冲 | 2.4s | – | – |
| 提示·起手错 | 重开按钮 | 琥珀外圈脉冲 | 0.9s 循环 | – | – |
| 过关 | 全盘 | 底色切 `primary-bright`;按步序扫白光,每格 250ms 正弦,整盘 320ms 内起完 | slow | cleared(和弦) | 20-40-30 |
| 过关 | 胶囊 | 切 `done`(完成 + 勾) | base | – | – |
| 过关后 | 全盘 | 停留 500ms → 淡出 160ms → 下一关进场 | hold + 160 | – | – |
| 切屏 | 整屏 | 淡入 + 上移 8px | base | – | – |
| Toast | toast | 淡入 + 上移 8px,停 1.8s | base | – | – |
| 按钮按下 | 按钮 | 缩放 0.97(关卡格 0.94、主按钮 0.98) | fast | – | – |
| 锁定关卡被点 | 关卡格 | 横向抖动 ±5px | slow | – | – |
| 当前关 | 关卡格 | 外圈呼吸 0 → 6px 紫 16% | 2.4s 循环 | – | – |
### 8.3 过关时间线
```
0ms cleared 事件:全盘切亮色,和弦起,胶囊变「完成」,按钮禁用
0–320ms 按步序扫光(每格 250ms 正弦,起点先亮)
320–820 停留
820–980 整盘淡出(160ms)
980 下一关:顶栏 / 进度条就地更新,新盘面错落进场(≤ 400ms)
```
### 8.4 减弱动态
系统开启「减弱动态效果」时:CSS 全部动画与过渡关闭;Canvas 去掉进场错落、弹簧、扫光与淡出,只保留状态切换与提示描边(静态显示),错误格变红但不晃动。`BoardView` 通过 `reducedMotion` 选项接收。
### 8.5 性能约束
`BoardView.update()` 返回 `isAnimating`,宿主只在有动画时重绘;静止时 0 帧。所有动效都是无状态插值(`dt` 封顶 50ms),掉帧不会漏掉状态。
## 9. 声音与振动
| 事件 | 音效 | 振动 |
|---|---|---|
| 落子 | 90ms 正弦短音,C5 起每步升半音,12 步循环 | 8ms(踩对线索 18ms) |
| 冲突 | 160ms 方波 130Hz 闷音 | 40ms |
| 非法起手 | 60ms 三角波 220Hz | 15ms |
| 死路 | – | 10-30-10 |
| 过关 | C-E-G-C 三角波和弦,每音 220ms 间隔 70ms | 20-40-30 |
均可在选关页 chip 关闭。Cocos 侧换 4 段短音,接口同 `Sfx`。
## 10. 可访问性
- 关键文字对比度 ≥ 4.5 : 1(§2.3)。
- 冲突发生时单格晃动;本格要求不符时有角标。过关胶囊有勾和文字,已过关卡格有勾,锁定有锁图标。
- 所有可点元素 ≥ 44px;键盘焦点有 3px 紫描边。
- 剩余格胶囊 `aria-live="polite"`;装饰性 SVG `aria-hidden`。
- 遵守 `prefers-reduced-motion`(§8.4)。
## 11. 与其他玩法的关系
- **玩法三「六边一笔」**:结构与本规范一致(同一套壳、同一套四档动效),但 `theme.ts` 目前是靛蓝 `#4F5BD5` + 黄黑墙。待办:把 `--primary` 统一到 `#6558F5`(需先确认与墙黄 `#FFC826` 的对比),其余令牌直接复用本文。
- **玩法二「连连气球」**:独立的天蓝 / 气球体系(`#83B4EB` 系),不套用本文色板;动效时长与缓动可以对齐四档。
- **壳(`shared/`)**:首页选玩法、设置、通用按钮皮肤按本文 §4 / §6 的按钮、chip、toast 规格实现。
## 12. 变更记录
| 日期 | 变更 |
|---|---|
| 2026-09-16 | v1.5:去掉步号错位的 ×,错误格单独变红并晃动 280ms,进出连接线保持紫色;撤销 / 重开立即停止晃动。独立试玩版全部关卡直接可选。 |
| 2026-09-16 | v1.4:第 n 步走到预定数字 n 以外的位置立即标红,角标显示「×」;本格要求不符仍显示原要求。补数字的约束同步生效。 |
| 2026-09-16 | v1.3:触屏命中死区缩至 8%,任意历史格可直接回退;增加补数字提示,保留指路;底栏改为三个 15px 按钮,加常驻手势说明,toast 上移并支持换行。颜色、盘面字阶与动效令牌保持 v1.2。 |
| 2026-09-16 | v1.2:未走线索 / 奇偶格描边改为墨色 `#23243A`(与线索数字同色),线宽 0.05 u。试玩反馈:主色描边跳脱、不简洁。 |
| 2026-09-16 | v1.1:未走线索 / 奇偶格描边由灰 `#B4B8CC` 改为主色 `#6558F5`,线宽 0.05 u → 0.06 u(试玩反馈:灰描边不显眼)。已被 v1.2 替代。 |
| 2026-09-15 | v1.0:建立令牌体系(色彩 / 字阶 / 间距 / 圆角 / 动效四档),CSS 与 `theme.ts` 由测试守门;字体栈加 `ui-rounded`;线索描边加深到 `#B4B8CC`;顶栏加副标题「包名 · 第 n 关」、本包进度条、剩余格胶囊(bump / 完成态);选关页加总进度条、已过关勾、当前关呼吸、列表渐隐;盘面加错落进场与过关后淡出;桥生长改为只长厚度;支持减弱动态。 |
待办:高对比模式(冲突改红底 + 斜纹)、暗色主题、玩法三令牌统一、Cocos 侧 Label 池化后复核字阶。