// Produces the offline report specimen from proposal tokens and an original project level. import {readFileSync,writeFileSync} from 'node:fs'; const tokens=JSON.parse(readFileSync(new URL('tokens.json',import.meta.url),'utf8')); const audit=JSON.parse(readFileSync(new URL('contrast-audit.json',import.meta.url),'utf8')); const pack=JSON.parse(readFileSync(new URL('../../../modes/01-number-stroke/levels/pack-1-tutorial.json',import.meta.url),'utf8')); const level=pack.levels.find(x=>x.id==='1-8'); const esc=s=>String(s).replaceAll('&','&').replaceAll('<','<').replaceAll('"','"'); const palette=tokens.color; const vars=Object.entries(palette).map(([key,value])=>`--${key}:${value};`).join(''); const labels={background:'暖白背景',surface:'卡片表面',surfaceMuted:'次级表面',cellFace:'未走块面',cellBoundary:'结构轮廓',cellDepth:'块底厚度',ink:'关键文字',inkSecondary:'辅助文字',inkTertiary:'三级文字',primary:'路径主紫',primaryPressed:'按压深紫',primarySoft:'淡紫底',danger:'错误面',hint:'提示环',wallInk:'墙身',wallStripe:'墙内条纹'}; const swatches=Object.keys(labels).map(k=>`
${labels[k]}${palette[k]}${k}
`).join(''); const typeRows=Object.entries(tokens.type).map(([k,v])=>`${k}${k==='display'?'一步,一块':k==='pageTitle'?'数字一笔':k==='section'?'出口的选择':k==='button'?'继续挑战':k==='label'?'剩余 8 格':k==='caption'?'点已走格,可退回':k==='micro'?'入门 · 第 8 关':'从 1 开始,走遍每一块'}${v.size} / ${v.line} / ${v.weight}`).join(''); const contrastRows=audit.rows.map(r=>`${esc(r.name)}${r.ratio.toFixed(2)} : 1${r.pass===null?'诊断':r.pass?'通过':'未通过'}`).join(''); const html=` 柔和积木 · 视觉样张 v1.0
NUMBERSWIPE / ART DIRECTION / V1.0 PROPOSAL

柔和积木
清楚,也愿意触摸

正俯视 · 哑光面 · 暖白与蓝紫 · 轻厚度。数字和邻接始终优先。本页是设计规范样张,不是完整游戏;按钮仅切换局部演示状态。

2026-10-21 · 字体文件尚未随样张打包,显示使用本机可用回退;正式 Nunito / Noto Sans SC 字形需接入后验收。阅读完整报告 · 查看设计令牌

配色:柔和的是材质,清楚的是信息

实色 / sRGB
${swatches}

字体与字阶

${typeRows}
角色字号实样字号 / 行高 / 字重
数字建议:NUNITO 800
1 2 3 4 5
6 7 8 9 0
11 17 18 21

本页按本机字体显示。正式样板需检查1/7、3/8、6/9、两位数测宽及中文回退。

  • UI正文16D,关键教学16D,微型信息不低于12D。
  • u=60:一位数31.2D;两位数27.6D。
  • 大格数字仍按单位格节距计算,不按面积放大。
  • 中文500/600/700;数字800,正文不全加粗。

积木状态:同一种材质,不同的规则信息

下沿默认2D,未走结构边1.25D。示例角标“8”表示原要求,错误面内“7”表示当前步号。材质阴影不能独自承担轮廓识别。

页面样张

展示用状态 · 非真实存档
选关 · 小尺寸预览采用4列
NUMBERSWIPE

数字一笔

按步数,一笔走遍每一块

入门包 · 已完成 3 / 10
入门学会看见出口
${Array.from({length:12},(_,i)=>i<3?``:i===3?``:``).join('')}
示例网格4列仅用于缩略样张;正式375D页面推荐5列,按触区和边距计算。
对局 · 保留三个真实动作角色
1–8入门 · 出口的选择
剩余 8 格
大格,也只算一步
按住滑动 · 点已走格回退
设置 · 拟新增能力须真实接入
偏好设置

按你的节奏

静音,也能看清每一步

错误保留条件标记,墙保留杆形与条纹;声音和触感都只是辅助。

本页设置只影响演示,不写入游戏。

真实关卡1-8的视觉状态演示;不包含输入求解器。

特效:轻按压,快确认,机构不失真

3

落格按压

200ms;厚度短暂降低;不改变逻辑命中。

转墙120°

120ms单调旋转;非时间机关,不循环。

这是动作外观示例,不是六边规则模拟。减少动态时,按压不动、转墙直接切到目标角度。

时长用途表现限制
120ms按下、桥厚度增长、转墙不排长队,不阻塞输入
200ms局部回弹、面板进入轻位移,无夸张果冻
320ms错误短反馈、完成收束不全屏闪白、不盖数字
500ms完成路线停留保留完整解供玩家看清

组件与信息层级

清除全部进度?

这会移除本机已完成的关卡记录。此处只展示确认样式,不执行清除。

示例提示:已回到第 3 步,可以换个方向。

材质执行要点

  • 顶面纯色;需要渐变时重新验对比。
  • 底沿2D,接触阴影≤8%,模糊≤6D。
  • 整体描边一次,异形内部不留拼接线。
  • 连桥覆盖接缝和连接处描线,不连无关邻格。
  • 墙高于路径;琥珀提示外圈不掩盖墙。
  • 过关保持主紫面,仅边缘/光带收束。

计算过的颜色配对

19组目标配对通过;3组诊断单独列出。阈值用原始浮点值判断,表中只显示两位小数;这不等于所有动态或透明合成状态都已验收。

${contrastRows}
配对对比度结果
`; writeFileSync(new URL('style-guide.html',import.meta.url),html,'utf8'); console.log(`Built style-guide.html (${Buffer.byteLength(html)} bytes), ${audit.rows.filter(r=>r.pass===true).length} contrast pairs passed.`);