feat(design): add the Macaron (07) art direction and land the Signpost (06) package files

- 07 macaron, referenced from Meowdoku: cream worlds, a white tray with
  gutters, candy tokens with white arrows, two-column 关卡/待解 HUD, white
  elevated tool discs (macaron-only exception to the flat rule), full-screen
  dark result overlay, a brick ripple on board clear, an eased glide-out and
  dot-lattice dissolve on exit; Resource Han Rounded subset fonts (SIL OFL)
  in assets/fonts with the charset and regeneration note
- 06 signpost: the design.md, tokens and preview directory that earlier
  commits left untracked
- design docs, catalog, manifest, showcase and base spec updated to seven
  directions; the analysis and proposal live in docs/art-proposal-macaron.html
- the renderer, app, geometry and CSS sources for both directions were
  already carried by the level commits made from this working tree

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
cabinw
2026-09-15 15:43:25 +08:00
co-authored by Claude Fable 5.1
parent 7607f48cb1
commit e447d1f807
31 changed files with 1415 additions and 60 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="refresh" content="0;url=macaron/index.html"><title>马卡龙 · 设计稿已迁移</title></head><body><p>设计稿已整理到独立目录:<a href="macaron/index.html">07 · 马卡龙</a></p></body></html>
+5
View File
@@ -0,0 +1,5 @@
# 07 · 马卡龙
本文件为旧入口。完整、人工维护的 Agent 规范已迁移到 [macaron/design.md](macaron/design.md)。
[设计稿](macaron/index.html) · [配色数据](macaron/tokens.json) · [Agent 接入说明](../README.md)
+72
View File
@@ -0,0 +1,72 @@
# 07 · 马卡龙
设计 ID:`macaron` · 渲染风格:`macaron` · 英文名:MACARON。2026-09-14 参考 Meowdoku(喵喵数独)的设计语言制作,可与其他方案同时保留。参考分析与实机对照见 [docs/art-proposal-macaron.html](../../../docs/art-proposal-macaron.html)。
[Agent 接入约定](../../shared.md) · [配色数据](tokens.json) · [完整设计稿](index.html) · [试玩与审核](../../../design-showcase.html?design=macaron)
## 设计目标
从 Meowdoku 借来的是一套"奶油世界 + 白卡片 + 糖果色块 + 白色粗记号"的语言:奶油色世界上托一张白色软托盘,六角格像带白缝的软糖砖,藕紫色轨道压在糖砖上;棋子是糖果色圆角六角,白色贴纸边,十二色统一粗圆头白箭头。所有状态用颜色和弹跳表达,不用描边和阴影:路线点亮成棋子自己的浅色,碰撞处橘红打叉,出场从左上角一波弹开,离场撒星。文字是藕紫褐色,行动色只有一种橙。
## 棋盘与棋子怎么画
以格半径 s 为单位,复用 [renderer.js](../../../src/renderer.js) 的 macaron 分支和 [token-art.js](../../../src/token-art.js) 的 macaron 分支。圆角六角由 [tile-shape.js](../../../src/tile-shape.js) 的 `roundedHex(x, y, r, 0.16)` 生成。
| 部件 | 当前实现 |
| --- | --- |
| 画布边距 | `layout.pad = 0.3`:布局时每一侧多留 0.3 格半径;同时画布向左右各多伸 8px 到外壳内边距里(`.canvas-wrap` 负外边距),所以棋盘尺寸与其他方案相同,出口处的冲出与消融仍落在画布内 |
| 托盘 | 全部格面外扩 0.34s 后取凸包,转角圆化半径 0.9s,纯色 `tray`(白),随棋盘旋转 |
| 托盘阴影 | 两层不透明色阶:外层再放大 0.06s、下移 0.20s 用 `shadowSoft`;内层下移 0.10s 用 `shadow`。偏移在屏幕坐标里施加,旋转时保持向下 |
| 糖砖(格面) | 圆角六角,半径 0.90s,圆角 0.16;格与格之间是 0.17s 的白缝,不画格线 |
| 环带色 | 从棋盘中心格向外按六角距离分环,三色循环 `rings[d % 3]`;只表达位置,旋转后不变 |
| 轨道 | `track` 藕紫褐(每个世界一档),单层,宽 clamp(0.11s, 2.2, 6.5),圆头圆接;跨过白缝连续画,路线不断开;只有板边端点内收到 0.90s − 轨宽/√3 |
| 棋子 | 圆角六角,半径 0.90s,正好盖满糖砖,圆角 0.16,纯色面;白色贴纸边宽 0.10r,与白缝连成一体。轨道从棋子底下钻过:白缝里的一小段一直画到白边为止,和空砖之间的画法一致,所以看得出哪几条轨道通向这枚棋子;不再画底座 |
| 箭头 | 白色线条:杆从 −0.34r 到 0.30r,头两笔到 ±0.30r;线宽 0.20r,圆头,十二色统一 |
| 路线点亮 | 预览或行进中路线经过的糖砖改用棋子色调白 80%(行进中 84%);被挡时用 `blush` 橘奶色 |
| 预览路线 | 棋子本色一根粗线 1.15 × 轨宽,画在轨道上、棋子下;被挡只画到接触点,末端橘红叉 |
| 碰撞 | 接触时被撞格改 `blush`,接触点画橘红 `blocked` 叉,大小随 impact 变化;回弹沿用共用碰撞动画 |
| 提示 | 两层实心圆角六角光晕:`hintGlow` 1.02s、`hint` 0.94s,露出棋子外一圈蜂蜜黄 |
| 出场 | 新棋盘时糖砖、轨道、棋子按左上到右下的顺序缩放弹入:每格延迟 = 归一化位置 × 0.55,各自 0.45 段,ease-out 回弹 5%,总长 720ms |
| 离场 | 滑行沿用共用时序;到达出口后是 640ms 的收束(`exitDuration` 把窗口从共用的 180ms 放宽):前 45% 棋子沿出口方向减速冲出 0.55s(三次 ease-out),大半个身体越过托盘边缘;从 15% 起实心面、白边在 20% 内淡掉,箭头在 25% 内淡掉;面被一层同色圆点阵接管(间距 0.17s、半径 0.115s、六角排列、内缩到 0.82r),圆点跟着棋子走,并从外圈向中心依次化掉:开始时刻 = 0.16 + 0.38 × (1 − 到边缘的比例) + 0.16 × 噪声,各自用 0.28 段缩小到 0、颜色向白调 45%、透明度降到 40%、沿固定随机方向漂 0.14s 并上浮 0.10s。没有尾迹、碎片和飞出的粒子 |
| 计数 | 棋子离场后 `.moves-bubble` 弹一次(1 → 1.18 → 1,420ms) |
| 通关庆祝 | 最后一枚棋子离场后先在棋盘上放 720ms 的清空涟漪(`state.celebrate`):糖砖按到中心格的环数依次鼓起 8% 并向白调亮 35% 再落回,每环延迟 0.07、各自 0.45 段的正弦脉冲;轨道不随之缩放;结束后才淡入结算 |
不使用棋子图集,不使用滤镜调色。全部造型由多边形、折线与圆组成;阴影是两层不透明多边形,不是模糊。
## 五种主题
| 主题 ID | 阶段 | 名称 | 用色方向 |
| --- | --- | --- | --- |
| lagoon | 轻松 | 奶油 | 奶油底,蜜桃奶/奶黄/薄荷奶三环,草莓、蓝莓、抹茶领色 |
| apricot | 进阶 | 蜜桃 | 蜜桃奶油底,蜜柑与海盐蓝领色 |
| lavender | 烧脑 | 香芋 | 香芋奶油底,香芋紫与玫瑰领色 |
| rose | 挑战 | 草莓牛奶 | 草莓牛奶底,玫瑰与抹茶对照 |
| midnight | 每周挑战 | 可可夜 | 可可色底,白托盘像被灯照亮的甜品盘 |
完整色值、环带色、托盘与阴影色、每主题 4/7/9/12 色有序 palette 见 tokens.json 与 [art-directions.js](../../../src/art-directions.js)。场景文字用藕紫褐(可可夜用奶白),对世界色 5.5 : 1 以上;十二色白箭头最低 3.30 : 1;轨道对三种糖砖最低 3.28 : 1(奶油世界)。
主游戏中本方案的主题按旅程切换:五个世界平均铺在整条主线上,最后一段为可可夜;`?theme=` 参数仍可强制指定。
## 控件与边界
- 字体:资源圆体 Resource Han Rounded(用户指定,SIL OFL),Medium 500 与 Bold 700 两档子集在 [assets/fonts](../../../assets/fonts/README.md),`@font-face` 写在 game-tools.css 的 macaron 段;其后回落 `ui-rounded`、Arial Rounded、Nunito、PingFang。界面里 600 以上的字重落到 Bold,400–500 落到 Medium。子集之外的字符按字形回落到系统字体,新增文案要补进字符表。
- 顶部选关、设置:白色圆底加柔和投影,图标通过遮罩着色为深藕紫;不用滤镜。
- 关卡号与待解计数:两列并排放在两枚圆钮之间,小标签在上(关卡 / 待解,淡藕紫 12px),大数字在下(26px 粗体深藕紫);由 `direction.hud` 提供标签,app.js 生成;数字在棋子离场后弹一次。教学关显示 入门 N/3。
- 通知:白色气泡,顶部小尾巴指向计数胶囊,前置一枚橙点;位置沿用 shared.md(步数下方)。
- 旋转按钮:无底座,图标 60px 用世界色对应的浅藕紫着色,标签 12px 藕紫;位置由 [app.js](../../../src/app.js) 的 `placeRotation` 按棋盘几何计算(`layout.rotation = 'under-board'`,`layout.rim = 0.40`):取下方斜边中点,向下作垂线到道具上缘,按钮中心放在垂线中点。旋转不占独立布局行,与 06 相同,是与 shared.md 的一处出入。
- 撤销、重来、提示:参考作品的白色圆钮。白底 64px、柔和投影、无描边;图标通过图集遮罩着色为海盐蓝 #4A91D4 / 玫瑰 #D06E93 / 蜂蜜褐 #C98A0E;标签藕紫;禁用 45% 透明。这是与 shared.md「道具无阴影」的一处有意出入,2026-09-14 用户确认只允许本方案使用,不向其他方案放开。
- 结算:参考作品的深色庆祝画面,而且是全屏覆盖层:`<dialog>` 铺满整个视口(inset 0、无最大宽高、无圆角、无卡片),320ms 淡入,遮罩 rgba(40,26,32,.86) 加模糊;内容居中,奶白发光标题 25px,副标题浅奶色,金色发光星星后有 640px 缓慢旋转的奶黄射线和一次糖果色纸屑,全部铺在整屏上不被裁切;主按钮是橙色胶囊 `#E07416`(白字 3.1 : 1)底边 4px 深橙,次按钮是半透明奶白胶囊。失败画面用同一覆盖层。
- 选关与设置:白色圆角卡片弹入(0.86 → 1,380ms 回弹),顶部一条蜜桃色标题带,右上角白色圆形关闭钮;当前关橙色胶囊,普通关奶油方块,完成关薄荷奶。
- 棋盘居中、金色奖励继承 shared.md。
## 验收与接入
使用 `artDirection('macaron')` 和 `directionTheme(direction, themeId, colorCount)`;主游戏 `?design=macaron`。
- 检查五个世界的托盘、阴影方向与环带色;可可夜下托盘保持奶白。
- 检查 37 / 61 / 91 格下白缝与轨道宽度:91 格时白缝约 3px、轨道 2.2px,箭头仍可读。
- 检查出场动画在换关、重来、教学三处都播放一次;旋转、撤销时不重播;清空涟漪只播一次且全屏结算在它之后淡入,射线与纸屑不被任何盒子裁切。
- 检查棋子砖面上没有轨道露出,白缝里通向棋子的轨道段可见,空格之间的轨道连续不断;提示路线连续画过白缝。
- 检查路线点亮只覆盖路线经过的格;被挡路线在接触点结束并打叉。
- 检查左右两侧出口的消融完整留在画布内,没有被画布边裁掉;`prefers-reduced-motion` 下取消出场、消融、庆祝与计数弹跳。
- 原生端需实现两层不透明阴影、圆角六角与遮罩着色;尚未完成原生实机验收。
File diff suppressed because one or more lines are too long
+469
View File
@@ -0,0 +1,469 @@
{
"schemaVersion": 1,
"generated": true,
"generatedBy": "scripts/build-art-directions.mjs",
"pathBase": "repository-root",
"designId": "macaron",
"artStyle": "macaron",
"sources": {
"directions": "src/art-directions.js",
"baseTokens": "src/design-tokens.js",
"renderer": "src/renderer.js",
"tokenDrawing": "src/token-art.js",
"componentStyles": "design/art-directions.css",
"itemStyles": "design/game-tools.css"
},
"accent": "#E07416",
"documentBackground": "#FBF6F0",
"sharedSemanticColors": {
"background": "#A8BECF",
"board": "#F2EEE5",
"boardGrid": "#89867D",
"track": "#435F78",
"trackHalo": "#F2EEE5",
"surface": "#F7F6F2",
"textPrimary": "#273B50",
"textSecondary": "#314A5F",
"primary": "#6652B8",
"onPrimary": "#FFFFFF",
"secondary": "#E4EAF0",
"utility": "#52697E",
"onUtility": "#FFFFFF",
"selection": "#DFD9F3",
"onSelection": "#3F327A",
"disabled": "#CBD4DD",
"onDisabled": "#526579",
"input": "#FFFFFF",
"reward": "#B9760C",
"warning": "#A44825",
"warningSurface": "#F9E3D2",
"scrim": "#273B507A",
"focus": "#3F327A",
"tileBlue": "#2392FD",
"tilePink": "#FC3E80",
"tileYellow": "#FDBC28",
"tilePurple": "#874FFD",
"arrowLight": "#FFFFFF",
"arrowDark": "#273B50"
},
"assets": {
"tileAtlas": null,
"uiIconAtlas": "assets/ui-icons-generated.png"
},
"pigments": [
{
"index": 0,
"name": "草莓",
"color": "#EE5398",
"arrow": "#FFFFFF"
},
{
"index": 1,
"name": "蜜柑",
"color": "#E5680C",
"arrow": "#FFFFFF"
},
{
"index": 2,
"name": "蜂蜜",
"color": "#AB8716",
"arrow": "#FFFFFF"
},
{
"index": 3,
"name": "抹茶",
"color": "#4C9E5A",
"arrow": "#FFFFFF"
},
{
"index": 4,
"name": "薄荷",
"color": "#369C94",
"arrow": "#FFFFFF"
},
{
"index": 5,
"name": "蓝莓",
"color": "#578BF0",
"arrow": "#FFFFFF"
},
{
"index": 6,
"name": "香芋",
"color": "#937DE4",
"arrow": "#FFFFFF"
},
{
"index": 7,
"name": "玫瑰",
"color": "#D06E93",
"arrow": "#FFFFFF"
},
{
"index": 8,
"name": "可可",
"color": "#B5806A",
"arrow": "#FFFFFF"
},
{
"index": 9,
"name": "海盐",
"color": "#4A91D4",
"arrow": "#FFFFFF"
},
{
"index": 10,
"name": "葡萄",
"color": "#8C68CC",
"arrow": "#FFFFFF"
},
{
"index": 11,
"name": "洋李",
"color": "#C56AC4",
"arrow": "#FFFFFF"
}
],
"themes": [
{
"id": "lagoon",
"label": "轻松",
"name": "奶油",
"background": "#F5EFE7",
"ink": "#7A5560",
"materials": {
"board": "#FADBCB",
"boardGrid": "#FFFFFF",
"track": "#96707B",
"trackHalo": "#FFFFFF"
},
"anchorPalette": [
0,
5,
3,
2,
6,
1,
4
],
"palettes": {
"4": [
0,
5,
3,
2
],
"7": [
0,
5,
3,
2,
6,
1,
4
],
"9": [
0,
5,
3,
2,
6,
1,
4,
7,
8
],
"12": [
0,
5,
3,
2,
6,
1,
4,
7,
8,
9,
10,
11
]
},
"contrast": {
"sceneText": 5.577670453960404,
"trackOnBoard": 3.277177835431525
}
},
{
"id": "apricot",
"label": "进阶",
"name": "蜜桃",
"background": "#FBE6DA",
"ink": "#7C4E52",
"materials": {
"board": "#FDE3D3",
"boardGrid": "#FFFFFF",
"track": "#976A66",
"trackHalo": "#FFFFFF"
},
"anchorPalette": [
1,
9,
0,
4,
2,
10,
3
],
"palettes": {
"4": [
1,
9,
0,
4
],
"7": [
1,
9,
0,
4,
2,
10,
3
],
"9": [
1,
9,
0,
4,
2,
10,
3,
5,
6
],
"12": [
1,
9,
0,
4,
2,
10,
3,
5,
6,
7,
8,
11
]
},
"contrast": {
"sceneText": 5.681057760459171,
"trackOnBoard": 3.7433859071275655
}
},
{
"id": "lavender",
"label": "烧脑",
"name": "香芋",
"background": "#EEE8F6",
"ink": "#5F4E78",
"materials": {
"board": "#E9E0F6",
"boardGrid": "#FFFFFF",
"track": "#78678F",
"trackHalo": "#FFFFFF"
},
"anchorPalette": [
6,
7,
4,
2,
11,
5,
3
],
"palettes": {
"4": [
6,
7,
4,
2
],
"7": [
6,
7,
4,
2,
11,
5,
3
],
"9": [
6,
7,
4,
2,
11,
5,
3,
0,
1
],
"12": [
6,
7,
4,
2,
11,
5,
3,
0,
1,
8,
9,
10
]
},
"contrast": {
"sceneText": 6.148741738606406,
"trackOnBoard": 3.979775627465162
}
},
{
"id": "rose",
"label": "挑战",
"name": "草莓牛奶",
"background": "#F9E2E8",
"ink": "#7B4658",
"materials": {
"board": "#FBDDE5",
"boardGrid": "#FFFFFF",
"track": "#966076",
"trackHalo": "#FFFFFF"
},
"anchorPalette": [
7,
3,
5,
2,
11,
8,
1
],
"palettes": {
"4": [
7,
3,
5,
2
],
"7": [
7,
3,
5,
2,
11,
8,
1
],
"9": [
7,
3,
5,
2,
11,
8,
1,
0,
4
],
"12": [
7,
3,
5,
2,
11,
8,
1,
0,
4,
6,
9,
10
]
},
"contrast": {
"sceneText": 5.970867897749838,
"trackOnBoard": 3.917201236136076
}
},
{
"id": "midnight",
"label": "每周挑战",
"name": "可可夜",
"background": "#3E2E35",
"ink": "#FBEFE6",
"materials": {
"board": "#F9E3D6",
"boardGrid": "#FFFFFF",
"track": "#8A6370",
"trackHalo": "#FFFFFF"
},
"anchorPalette": [
4,
0,
2,
6,
1,
9,
3
],
"palettes": {
"4": [
4,
0,
2,
6
],
"7": [
4,
0,
2,
6,
1,
9,
3
],
"9": [
4,
0,
2,
6,
1,
9,
3,
5,
7
],
"12": [
4,
0,
2,
6,
1,
9,
3,
5,
7,
8,
10,
11
]
},
"contrast": {
"sceneText": 11.287619453403153,
"trackOnBoard": 4.143716175864876
}
}
]
}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="refresh" content="0;url=signpost/index.html"><title>路标 · 设计稿已迁移</title></head><body><p>设计稿已整理到独立目录:<a href="signpost/index.html">06 · 路标</a></p></body></html>
+5
View File
@@ -0,0 +1,5 @@
# 06 · 路标
本文件为旧入口。完整、人工维护的 Agent 规范已迁移到 [signpost/design.md](signpost/design.md)。
[设计稿](signpost/index.html) · [配色数据](signpost/tokens.json) · [Agent 接入说明](../README.md)
+59
View File
@@ -0,0 +1,59 @@
# 06 · 路标
设计 ID:`signpost` · 渲染风格:`signpost` · 英文名:SIGNPOST。2026-09-14 由美术评审后的设计提案接入,可与其他方案同时保留。提案与实机对照见 [docs/art-proposal-signpost.html](../../../docs/art-proposal-signpost.html)。
[Agent 接入约定](../../shared.md) · [配色数据](tokens.json) · [完整设计稿](index.html) · [试玩与审核](../../../design-showcase.html?design=signpost)
## 设计目标
棋盘是一张线路图:奶白卡片托在世界色上,带一圈边框和一层向下偏移的平面底板;浅色路基先铺,墨蓝钢轨再压上去,端点在板边收口。棋子是路标:内缩露出脚下端口,一圈细描边,十二色统一白箭头。控件退到纸面里,一眼看过去重心只在棋盘。
## 棋盘与棋子怎么画
以格半径 s 为单位,复用 [renderer.js](../../../src/renderer.js) 的 signpost 分支和 [token-art.js](../../../src/token-art.js) 的 signpost 分支。
| 部件 | 当前实现 |
| --- | --- |
| 底板 | 全部格面放大 s + 0.2 + 边框宽,向下偏移 0.12s,纯色 `base`;偏移在屏幕坐标里施加,旋转时保持向下 |
| 边框 | 同样放大的格面,纯色 `rim`,内部被格面覆盖只剩外缘;宽 max(1.5, 0.06s) |
| 格面 | 正六角 s + 0.2,各主题奶白 `board` |
| 格线 | max(0.6, 0.02s),`boardGrid`,约 1.14 : 1,只在旋转时对位 |
| 路基 | `trackHalo`,宽 clamp(0.30s, 5, 18) |
| 钢轨 | `track` #3A5068,宽 clamp(0.105s, 2.5, 7),圆头圆接;板边端点按路基宽内收,不外伸 |
| 棋子 | 圆角六角,半径 0.90s,纯色面,描边 #2E4256 38%、宽 max(1.5, 0.05s) |
| 箭头 | 白色七点形,尺度 0.66 × 棋子半径,十二色统一 |
| 预览路线 | 画在棋子之上:光晕 1.05 × 路基宽 + 主线 1.5 × 钢轨宽;可出 #2F5FBF / #C9D7F3,被挡 #C4432F / #F3D3CB,末端小叉 |
| 提示环 | 单环 #D9A227,半径 1.1s,宽 max(2.5, 0.08s) |
不使用棋子图集,不使用滤镜调色。全部造型由多边形、折线与圆组成。
## 五种主题
| 主题 ID | 阶段 | 名称 | 用色方向 |
| --- | --- | --- | --- |
| lagoon | 轻松 | 晨雾 | 蓝灰世界色,靛蓝、松石与琥珀领色 |
| apricot | 进阶 | 杏仁 | 暖砂世界色,朱砂与靛蓝领色 |
| lavender | 烧脑 | 苔原 | 灰绿世界色,紫藤与玫红提亮 |
| rose | 挑战 | 暮砂 | 玫瑰灰世界色,玫红与靛蓝对照 |
| midnight | 每周挑战 | 夜航 | 深蓝灰世界色,奶白卡片像被灯照亮的图 |
完整色值、边框与底板色、每主题 4/7/9/12 色有序 palette 见 tokens.json 与 [art-directions.js](../../../src/art-directions.js)。世界色压低明度,棋盘对世界色 1.50–1.62 : 1,边界靠边框与底板而不是色相差;场景文字对世界色 7 : 1 以上;十二色白箭头最低 4.48 : 1。
主游戏中本方案的主题按旅程切换:五个世界平均铺在整条主线上,最后一段为夜航;`?theme=` 参数仍可强制指定。
## 控件与边界
- 顶部选关、设置:底板只比世界色深一档(`--signpost-plate`),图标用场景文字色;图标通过遮罩着色,不用滤镜。
- 旋转按钮:无底座,图标 64px,用世界色深一档着色,上 1px 暗、下 1px 亮形成压痕;标签 12px 同色系。位置由 [app.js](../../../src/app.js) 的 `placeRotation` 按棋盘几何计算:取下方斜边中点(棋盘轮廓宽 25% / 75%、高 87.5%),向下作垂线到道具上缘,按钮中心放在垂线中点。旋转不再占独立布局行,这是与 shared.md 的一处出入。
- 撤销、重来、提示:沿用原版蓝、紫、金圆底与白边;标签用场景文字色。
- 通知位置、棋盘居中、金色奖励继承 shared.md。
## 验收与接入
使用 `artDirection('signpost')` 和 `directionTheme(direction, themeId, colorCount)`;主游戏 `?design=signpost`。
- 检查五个世界的棋盘边框、底板与格线;夜航下棋盘保持奶白。
- 检查 37 / 61 / 91 格下钢轨宽度上限与棋子描边,箭头在 19px 格半径可读。
- 检查旋转按钮落点:斜边中点与道具上缘的中点;换关、旋转、窗口尺寸变化后位置稳定。
- 检查提示路线画在棋子之上、被挡路线只到接触点。
- 原生端需实现两次偏移绘制的压痕与白色精灵着色;尚未完成原生实机验收。
File diff suppressed because one or more lines are too long
+469
View File
@@ -0,0 +1,469 @@
{
"schemaVersion": 1,
"generated": true,
"generatedBy": "scripts/build-art-directions.mjs",
"pathBase": "repository-root",
"designId": "signpost",
"artStyle": "signpost",
"sources": {
"directions": "src/art-directions.js",
"baseTokens": "src/design-tokens.js",
"renderer": "src/renderer.js",
"tokenDrawing": "src/token-art.js",
"componentStyles": "design/art-directions.css",
"itemStyles": "design/game-tools.css"
},
"accent": "#2F5FBF",
"documentBackground": "#F6F2E9",
"sharedSemanticColors": {
"background": "#A8BECF",
"board": "#F2EEE5",
"boardGrid": "#89867D",
"track": "#435F78",
"trackHalo": "#F2EEE5",
"surface": "#F7F6F2",
"textPrimary": "#273B50",
"textSecondary": "#314A5F",
"primary": "#6652B8",
"onPrimary": "#FFFFFF",
"secondary": "#E4EAF0",
"utility": "#52697E",
"onUtility": "#FFFFFF",
"selection": "#DFD9F3",
"onSelection": "#3F327A",
"disabled": "#CBD4DD",
"onDisabled": "#526579",
"input": "#FFFFFF",
"reward": "#B9760C",
"warning": "#A44825",
"warningSurface": "#F9E3D2",
"scrim": "#273B507A",
"focus": "#3F327A",
"tileBlue": "#2392FD",
"tilePink": "#FC3E80",
"tileYellow": "#FDBC28",
"tilePurple": "#874FFD",
"arrowLight": "#FFFFFF",
"arrowDark": "#273B50"
},
"assets": {
"tileAtlas": null,
"uiIconAtlas": "assets/ui-icons-generated.png"
},
"pigments": [
{
"index": 0,
"name": "靛蓝",
"color": "#2F5FBF",
"arrow": "#FFFFFF"
},
{
"index": 1,
"name": "朱砂",
"color": "#C4432F",
"arrow": "#FFFFFF"
},
{
"index": 2,
"name": "松石",
"color": "#1C8378",
"arrow": "#FFFFFF"
},
{
"index": 3,
"name": "紫藤",
"color": "#7A4EB8",
"arrow": "#FFFFFF"
},
{
"index": 4,
"name": "苔绿",
"color": "#4A8235",
"arrow": "#FFFFFF"
},
{
"index": 5,
"name": "琥珀",
"color": "#A8690C",
"arrow": "#FFFFFF"
},
{
"index": 6,
"name": "玫红",
"color": "#BF3A6B",
"arrow": "#FFFFFF"
},
{
"index": 7,
"name": "钢蓝",
"color": "#4A6B8A",
"arrow": "#FFFFFF"
},
{
"index": 8,
"name": "赤陶",
"color": "#B0572F",
"arrow": "#FFFFFF"
},
{
"index": 9,
"name": "墨绿",
"color": "#357358",
"arrow": "#FFFFFF"
},
{
"index": 10,
"name": "藕紫",
"color": "#8A5C92",
"arrow": "#FFFFFF"
},
{
"index": 11,
"name": "铁灰",
"color": "#5A6D7C",
"arrow": "#FFFFFF"
}
],
"themes": [
{
"id": "lagoon",
"label": "轻松",
"name": "晨雾",
"background": "#B7CBD3",
"ink": "#12202A",
"materials": {
"board": "#F5F2EA",
"boardGrid": "#E9E3D6",
"track": "#3A5068",
"trackHalo": "#E2DBCC"
},
"anchorPalette": [
0,
2,
5,
3,
1,
8,
6
],
"palettes": {
"4": [
0,
2,
5,
3
],
"7": [
0,
2,
5,
3,
1,
8,
6
],
"9": [
0,
2,
5,
3,
1,
8,
6,
4,
7
],
"12": [
0,
2,
5,
3,
1,
8,
6,
4,
7,
9,
10,
11
]
},
"contrast": {
"sceneText": 9.872709985958306,
"trackOnBoard": 7.427567140854274
}
},
{
"id": "apricot",
"label": "进阶",
"name": "杏仁",
"background": "#DBC4A6",
"ink": "#12202A",
"materials": {
"board": "#F7F2E7",
"boardGrid": "#EAE3D3",
"track": "#3A5068",
"trackHalo": "#E4DCCA"
},
"anchorPalette": [
1,
0,
2,
6,
3,
9,
7
],
"palettes": {
"4": [
1,
0,
2,
6
],
"7": [
1,
0,
2,
6,
3,
9,
7
],
"9": [
1,
0,
2,
6,
3,
9,
7,
4,
5
],
"12": [
1,
0,
2,
6,
3,
9,
7,
4,
5,
8,
10,
11
]
},
"contrast": {
"sceneText": 9.84281455268355,
"trackOnBoard": 7.442657598835995
}
},
{
"id": "lavender",
"label": "烧脑",
"name": "苔原",
"background": "#BBCBB1",
"ink": "#12202A",
"materials": {
"board": "#F5F3E9",
"boardGrid": "#E8E4D6",
"track": "#3A5068",
"trackHalo": "#E1DCCC"
},
"anchorPalette": [
3,
6,
1,
0,
4,
10,
2
],
"palettes": {
"4": [
3,
6,
1,
0
],
"7": [
3,
6,
1,
0,
4,
10,
2
],
"9": [
3,
6,
1,
0,
4,
10,
2,
5,
7
],
"12": [
3,
6,
1,
0,
4,
10,
2,
5,
7,
8,
9,
11
]
},
"contrast": {
"sceneText": 9.709754954665774,
"trackOnBoard": 7.470269532165791
}
},
{
"id": "rose",
"label": "挑战",
"name": "暮砂",
"background": "#D7BAB5",
"ink": "#12202A",
"materials": {
"board": "#F7F1EA",
"boardGrid": "#EAE2D8",
"track": "#3A5068",
"trackHalo": "#E4DBCF"
},
"anchorPalette": [
6,
0,
3,
5,
2,
11,
8
],
"palettes": {
"4": [
6,
0,
3,
5
],
"7": [
6,
0,
3,
5,
2,
11,
8
],
"9": [
6,
0,
3,
5,
2,
11,
8,
1,
4
],
"12": [
6,
0,
3,
5,
2,
11,
8,
1,
4,
7,
9,
10
]
},
"contrast": {
"sceneText": 9.148840055226982,
"trackOnBoard": 7.409208337359319
}
},
{
"id": "midnight",
"label": "每周挑战",
"name": "夜航",
"background": "#1F2C3B",
"ink": "#FFFFFF",
"materials": {
"board": "#F6F2E9",
"boardGrid": "#E9E3D6",
"track": "#3A5068",
"trackHalo": "#E2DBCC"
},
"anchorPalette": [
2,
5,
0,
6,
1,
9,
3
],
"palettes": {
"4": [
2,
5,
0,
6
],
"7": [
2,
5,
0,
6,
1,
9,
3
],
"9": [
2,
5,
0,
6,
1,
9,
3,
4,
7
],
"12": [
2,
5,
0,
6,
1,
9,
3,
4,
7,
8,
10,
11
]
},
"contrast": {
"sceneText": 14.173029259487338,
"trackOnBoard": 7.437303508154617
}
}
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long