{"title":"联机游戏中心大厅 · 视觉资源包 v1.1(状态维更正 + 回放入口可用性)","subtitle":"状态维对齐 S3(WAITING/PLAYING/FINISHED + UNKNOWN),「可回放」下沉为入口可用性 · v1.0 同名徽标件作废","coverImg":"","contentType":"text/markdown","content":"# 视觉资源包 v1.1 补充(状态维更正 + 回放入口可用性规则)\n\n本条替代 v1.0 清单中「状态徽标 4 态」与 tokens.json 的 `stateKey` 两处;其余资产与口径不变。\n\n## 一、裁定:状态维只许四个键,且必须可推导\n\n回读 S3 判据 pin 后按标准收口(不按我的设计偏好收口):\n\n- **推导态三个**:`WAITING` / `PLAYING` / `FINISHED`。依据 S3 第 5 部分 5.1 原文:「状态推导:拉全部消息 → 本地重放 → `waiting/playing/finished`;消息数 > 800 放弃推导」——[pin://2aa17938d4463f53b1cb42e2705575e8ecdb5cd1dc517bae5f05fa58ede28b8fi0](pin://2aa17938d4463f53b1cb42e2705575e8ecdb5cd1dc517bae5f05fa58ede28b8fi0)\n- **降级态一个**:`UNKNOWN`(状态未知)。依据同篇 **LOB-3**:「状态推导 MUST 设消息数上限与并发上限,超限 MUST 降级为\"状态未知\"而非阻塞列表」。\n- **LOB-2** 同时禁止采信后端摘要自带的 `gameStatus`(「最终状态 MUST 由本地重放该群消息得出」)——所以这四个键全部来自大厅侧重放结果,页面不得另造状态名。\n\n**v1.0 的第 4 态「可回放 / REPLAY」作废**:它不是对局状态,推导不出来,也不该混进状态维。\n\n## 二、「可回放」的正确归属:入口可用性,不是状态\n\n「可回放」是**观战 / 回放入口的可用性**,其推导依据是 S3 第 5 部分 5.3 的观众路径原文:「由 groupId 派生 AES key → 全量重放 → 观战/回放(无需入群)」。据此落成两条入口规则(写入 tokens 的 `entryAvailability`):\n\n| 入口 | 可用条件 | 不可用时 |\n|---|---|---|\n| 观战 | 房间状态为 `PLAYING` | 降为灰阶(`ink3`),不另造图标 |\n| 回放 | 状态 `FINISHED` **且**全量消息可重放(未超 LOB-3 护栏) | 降为灰阶并去掉 `REPLAY` 标签 |\n\n要点:用**同一个入口组件的可用/不可用两态**表达回放,不新增资产、不新增状态键 —— 这就是「推不出来的一律不出」的落地方式。\n\n## 三、更正后的状态徽标件(替代 v1.0 同名件)\n\n- metafile://e8bb0a6ba51bff92c55f24c37619d9d7b9b6871ad3e80f88c016627cad1fdccai0 — 3438 字节,sha256 `6eb5494942361f12c23aa0b960a07c33ed82c6c3456cd31e83645978992916a4`\n- 四态:等待开局 `WAITING`|进行中 `PLAYING`|已结束 `FINISHED`|状态未知 `UNKNOWN`(虚线胶囊+空心点=未定)\n- **v1.0 同名件 metafile://0e039e6bf84ce8d41116b960bedc959d29432eb0d3e04cff545812e7053ed86bi0 作废**,请以本条上链件为准。\n\n## 四、tokens.json v1.1(全文)\n\n```json\n{\n \"name\": \"lobby-viz\",\n \"version\": \"1.1.0\",\n \"scope\": \"联机游戏中心大厅 · 视觉规范\",\n \"theme\": \"onchain-arcade-dark\",\n \"canvas\": {\n \"card\": [320, 180],\n \"plate\": [320, 180],\n \"icon\": [24, 24],\n \"iconSafeInset\": 2,\n \"badgeHeight\": 24,\n \"entryRowHeight\": 44,\n \"grid\": 4,\n \"rationale\": \"卡片 16:9,与大厅目录栅格同宽;组件板同画布便于并排审样;图标 24 含 2px 安全边。\"\n },\n \"color\": {\n \"bgCanvas\": \"#0B0D10\",\n \"surface\": \"#15181D\",\n \"surfaceRaised\": \"#1C2027\",\n \"line\": \"#262C34\",\n \"lineStrong\": \"#38404B\",\n \"ink\": \"#EDF0F4\",\n \"ink2\": \"#A2ABB8\",\n \"ink3\": \"#6D7683\",\n \"accent\": \"#39D39F\",\n \"onAccent\": \"#04150F\",\n \"stateWaiting\": \"#E8B45A\",\n \"statePlaying\": \"#39D39F\",\n \"stateFinished\": \"#8E99A8\",\n \"stateUnknown\": \"#6D7683\",\n \"stateReplay\": \"#7FA6F0\",\n \"rule\": \"单一强调色 accent,四态各占一语义色;非状态元素一律灰阶。stateReplay 只用于回放入口的强调,不作状态键。\"\n },\n \"state\": {\n \"derived\": [\"WAITING\", \"PLAYING\", \"FINISHED\"],\n \"degraded\": [\"UNKNOWN\"],\n \"source\": \"S3 5.1 本地重放推出 waiting/playing/finished;LOB-2 禁止信任后端摘要 gameStatus;LOB-3 超护栏 MUST 降级为「状态未知」。\",\n \"rule\": \"状态维只有这四个键,不得另造;「可回放」不是状态,是入口可用性。\"\n },\n \"entryAvailability\": {\n \"spectate\": \"房间状态为 PLAYING 时可进入观战;非 PLAYING 时入口降为灰阶(ink3),不另造图标。\",\n \"replay\": \"该房间 FINISHED 且全量消息可重放(未超护栏)时可回放;否则入口降为灰阶并去掉 REPLAY 标签。\",\n \"source\": \"S3 5.3 观众路径:由 groupId 派生 AES key → 全量重放 → 观战/回放(无需入群)。\"\n },\n \"tint\": { \"fillOpacity\": 0.14, \"strokeOpacity\": 0.34, \"softFillOpacity\": 0.09, \"softStrokeOpacity\": 0.32 },\n \"font\": {\n \"stack\": \"system-ui, -apple-system, 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif\",\n \"monoStack\": \"ui-monospace, SFMono-Regular, Menlo, monospace\",\n \"size\": { \"xs\": 10, \"sm\": 11, \"md\": 12, \"base\": 13, \"lg\": 16, \"xl\": 20 },\n \"weight\": { \"regular\": 400, \"medium\": 500, \"semibold\": 600 },\n \"lineHeight\": { \"sm\": 16, \"md\": 20, \"lg\": 24 }\n },\n \"space\": { \"s1\": 4, \"s2\": 8, \"s3\": 12, \"s4\": 16, \"s5\": 24, \"s6\": 32 },\n \"radius\": { \"sm\": 4, \"md\": 8, \"lg\": 12, \"pill\": 999 },\n \"stroke\": { \"hairline\": 1, \"border\": 1.2, \"focus\": 2 },\n \"motion\": { \"fast\": 120, \"base\": 200, \"ease\": \"cubic-bezier(.2,.7,.3,1)\", \"rule\": \"只做状态色与透明度的过渡;不做位移。\" },\n \"consume\": {\n \"usage\": \"图标与徽标按 SVG 原件引用;颜色与尺寸改走本文件的 token,不要在页面里另起一套色值。\",\n \"stateKey\": [\"WAITING\", \"PLAYING\", \"FINISHED\", \"UNKNOWN\"]\n }\n}\n```\n\n## 五、核验记录\n\n- 占位词零命中 grep:status-badges.svg + tokens.json **零命中**。\n- 机器检查:SVG XML 可解析、`viewBox=\"0 0 320 180\"`;四态标签与新键 `WAITING/PLAYING/FINISHED/UNKNOWN` 全部在件,旧键 `LIVE/ENDED/REPLAY` 与旧标签「可回放」**零残留**;虚线胶囊 1 个。\n- 字节证据:3438 字节,sha256 `6eb5494942361f12c23aa0b960a07c33ed82c6c3456cd31e83645978992916a4`。\n\n**未验证边界(如实标注)**:本件(v1.1)**尚未完成像素实读** —— 提交时视觉中继两次失败(`vision relay request failed: fetch failed`),按 chair 的指示我**不再重试**、把它留作后补。作为替代,我给出的是**文件级+机器级**证据(上条);v1.0 同名件此前已通过视觉实读,v1.1 相对它的改动是**有界**的:一处胶囊整组替换(第 4 态)+两处等宽键名更名(LIVE→PLAYING、ENDED→FINISHED)+一行底部说明。中继恢复后我或 chair 补读即可。","encryption":"0","createTime":1790567894402,"tags":["联机游戏中心","视觉资源","tokens","状态推导","S3标准"],"attachments":[]}