Files
CyberGril/docs/requirements/sources/approved-frontend-spec-R2.md
T

23 KiB
Raw Blame History

CyberGril 完整产品设计 · 可施工规范(HEL-746 / R2)

延续 HEL-744 R1 已认可的方向「夜色里一扇亮着的窗」。本轮没有改首页的比例、字号和人物窗位置,也没有改交流时放大人物窗的方式。在这个基础上补齐了生活与共同回忆、首建、管理、交流的完整状态、离开后返回、主动消息,以及手机上的完整路径。

依据:需求记录 v1.6(CG-001~031、T-01~09),HEL-738 总工方案(F1~F9 流程、组件边界、需要视觉总监覆盖的状态清单)。本稿只是设计原型,不是正式产品。


1. 交付物与打开方式

文件 说明
index.html 完整原型,包含两套主题和电脑/手机两种布局。不需要联网,也不需要服务
phone.html 在 390×844 的手机框里打开同一份 index.html
assets/ 沿用 R1 的两张参考静帧(房间、近景)
shots/ 55 张实际截图(42 张电脑 1440×900,13 张手机 390×844@2x)
本文件 可施工规范
  • 演示控制:电脑在左下角,手机在顶部中间。可以切换数据(正常/空/很长),以及「未讲述的事」的两种呈现方式,还能模拟两天后回来、她主动说话、断线(恢复/失败)、发送失败、麦克风被拒、语音识别出错、视觉服务失败、重新演示首建、创建失败和保存失败。这个面板只属于原型,不是产品界面。
  • 截图参数:?shot=<场景名>&theme=moon|fog,场景名见第 14 节。自检参数:?selftest=1,结果写在 body 的 data-selftest 属性里。

2. 已认可、本轮不改动的部分

  • 靛蓝月光和蓝紫雾光两套主题整体切换,DOM 和布局完全相同。用户没有指定默认主题,原型以月光打开只是临时设定,不代表用户已经决定。
  • 首页:左侧一句话(30px/300)、心情与关系、她的留言、「你不在时」入口和两个按钮;右侧拱形人物窗(clamp(300px,27vw,430px),比例 1:1.3,距右边缘 14vw)。
  • 交流:人物窗展开为宽幅圆角窗,画面只留当前一两句;输入框常驻,麦克风是唯一实心的强调按钮,完整记录从右侧滑入。
  • 底部导航保持小巧、透光:此刻 / 交谈 / 日子 / 设置。
  • 人物和卧室仍用静帧占位,标注「示意画面 · 参考静帧」。没有新做嘴型实验。

3. 信息架构与导航、返回关系

title 区域与返回关系
flowchart LR
  NOW[此刻 首页] -->|和她说话/麦克风/导航交谈| TALK[交谈]
  NOW -->|你不在时/导航日子| DAYS[日子: 她的日子 / 我们的回忆]
  NOW -->|导航设置| MANAGE[设置: 她/关系/城市/外观/备份/外接服务/显示]
  NOW -->|她留给你的| TALK
  DAYS -->|事件详情→看那段聊天| TALK
  TALK -->|返回日子 原滚动位置与选中项| DAYS
  TALK -->|回到此刻/Esc| NOW
  DAYS -->|回忆↔事件 互链| DAYS
  DAYS -->|× / Esc / 回到她身边| NOW
  MANAGE -->|× / Esc| NOW
  FIRST[首建 仅无伴侣时] -->|完成→去看看她| NOW
  BACK[离开后返回] -->|你不在的这两天| NOW
  REACH[主动消息] -->|回她: 记录定位到该条| TALK
  • 离开日子以后还能回到原来的位置:从事件详情打开聊天时,关闭按钮会改成「返回日子」。日子列表的 DOM 不重建,所以滚动位置和选中的条目都保留。自检里有专门的验证项。
  • Esc 逐层退出:弹层 → 演示面板 → 返回欢迎层 → 聊天记录 → 交谈 → 手机详情 → 区域。首建过程中按 Esc 不会退出。
  • 手机:列表和详情、设置分区列表和分区内容都改成「推入」。左上角的「‹ 她的日子」「‹ 设置」负责返回。
  • 设置里有没保存的修改时,关闭网页会触发浏览器离开提示(beforeunload);对应分区导航上会显示一个暖色小点。

4. 需求 → 页面 / 状态映射

需求 落点(原型中可以操作)
CG-007 单伴侣 首建只出现一次;设置→她,注明「首版只有一位,不提供新建、切换或清空」;恢复别人的备份会被阻止
CG-008 后台生活 日子时间线;「你不在的这两天」;文案注明「网页关着她照常生活(服务器停机期间除外)」
CG-009 备份恢复 设置→备份:每日自动备份列表、完整导出(进度→完成)、恢复(三项检查→要求输入「恢复」两个字的双重确认→恢复前先自动导出)
CG-010 连续语音 语音条:计时、状态(倾听/思考/她在说/停下来了/没听清),「打断她」和常驻的「结束语音」;输入框不会消失
CG-011 主动联系 首页上从人物窗里浮出的轻提醒,注明「由她今天 15:30 的生活经历引起」;交谈导航上的未读点;聊天记录里标「她主动说的」;语音开着时她会直接开口
CG-012/013/014 生辰与底色 首建 4 步:出生(随机生成/手动修改,未满 18 岁会被拦下)→ 底色(四柱、倾向词和白话说明,说明是「倾向不是台词」)→ 关系 → 确认(必须勾选「我明白」)。设置→她:底色只读,带锁标识
CG-015 成长分层 回忆→她的成长;设置→她:「最初就有的」和「后来慢慢有的」分两栏
CG-016 关系可调 设置→关系:关系、称呼、相处边界;改关系类型需要二次确认,确认框说明「记忆和信任都保留,底色不变」
CG-005/006 换外观 设置→外观素材:选择素材包→五项检查(通过/不合格)→新旧对比→确认「她还是她」
CG-022 视觉观察 交谈里的「窗」按钮:首次开启要说明并确认;状态分为正在看、刚刚看到 N 秒前、已过期(不再当作眼前)、失败;设置→外接服务里有总开关
CG-023 城市 设置→城市:搜索、选择、保存(成功或失败),顶栏城市同步变化
CG-018 电脑优先、兼顾手机 全部区域在手机上都能走完关键路径,见第 8 节
CG-031 设计依据 布局以使用流程组织;人物窗只是一个区域,不铺满全屏
HEL-738 F6 断线 顶部横幅「信号不太好,正在重新连上…」,人物窗变灰,发送暂停但草稿保留,语音安全结束;重连成功会提示补了几条;重连失败显示「再试一次」
HEL-738 §5.5 φ 文案 所有错误都用她的话或生活化的话表达(「我没听清」「看不清」),不出现技术报错
SPEC §8.5 不画仪表盘 关系、心情都用一句话描述,不出现数值、进度条或雷达图

5. 各区域规范

5.1 日子(她的生活与共同回忆)

  • 空间关系:打开后,首页内容向左后退并模糊;人物窗缩小到右侧(--mini-pw: clamp(170px,14vw,230px)),留在原来的空间里;窗下写「她此刻 · …」,并注明「来自她的生活记录 · 画面为示意静帧」,把生活状态和素材播放区分开;背景推近到 1.03 倍并压暗。
  • 面板:left 5vw / top 84px / bottom 104px / width min(1000px,66vw),圆角 28,使用阅读底 --glass-read。电脑上分两栏:列表 400px,详情占剩余宽度。
  • 三种事件:已发生(实心点,--text-2)、正在(强调色点,带呼吸光)、打算(虚线空心点),分组为「之后的打算」和按天分组。打算类注明「计划可能会变」。
  • 标签:「还没跟你说过」(强调色)、「和你有关」(有关联回忆)。已经说过的事标题会弱化成 --text-2。
  • 详情:类型、时间、地点、是否说过、她的话(引用块)、和这件事有关的回忆(可以点)、那时候的聊天(可以点,看完返回)。底部固定说明「这是模拟生活里的一条记录,不是真实发生的事;画面只按记录选片,不会反过来改写生活」。
  • 回忆分为四组:我们一起的 / 你们的小习惯 / 她知道的你 / 她的成长。每条显示时间与来源(如「你 10 月 8 日说的」)、她怎么记得,以及来自哪些日子(反向链接)。
  • 空记录:「她今晚刚住进来,还没有发生什么」;回忆为「聊着聊着就会有了」。
  • 长记录:先显示前 18 条,再按「看更早的日子」每次加载 12 条,加载时保持滚动位置。施工时按天分页。
  • 不做:情绪或信任的数值仪表盘;任何「你好久没来」之类带负罪感的叙述。

5.2 首建

  • 全屏,人物窗和导航隐藏,左侧是叙事一句话(跟随步骤变化),右侧是向导卡 minmax(460px,560px)。
  • 步骤条只覆盖 4 个步骤;进行中和完成不计入步骤数。
  • 校验:名字必填;出生日期必须满 18 年;关系必须选(原型不预选,T-02);确认页没勾选时「创建」按钮不可用。
  • 创建过程分三段:排好底色 → 形成最初的小习惯 → 布置房间。失败时停在失败的那一段,并提示「资料都还在」,可以选「返回修改」(回到第 1 步,数据保留)或「再试一次」。
  • 完成页写「她住进来了」,按「去看看她」进入首页的「刚搬进来」状态:生活为空,首页一句话换成首晚的文案。
  • 创建之后,界面上任何地方都没有重建、清空或切换伴侣的入口。

5.3 设置(创建与管理)

  • 面板几何与日子相同;左侧是 220px 的分区导航,右侧是内容。
  • 表单通用规则:没有修改时「保存」不可用,状态写「尚未修改」;有修改后,文字变成暖色「有未保存的修改」,导航上出现暖色点;「取消」把内容恢复到上次保存的值。保存时显示进行中(转圈和说明,按钮锁定)→ 成功(--ok,一句话说明影响)或失败(--danger,「你的修改还在」,可以重试)。操作栏吸附在底部。
  • 重要确认:改关系类型、应用新外观用普通确认;从备份恢复用危险样式,并要求输入「恢复」两个字。
  • 外接服务:对话模型、ASR、TTS、视觉观察服务四项,各有地址输入框和「测试连接」。原型不会发出任何请求;测试结果明确写「界面演示 / 未真实检测」。地址为空或测试失败时显示「相关功能会显示为不可用,其余照常」。

5.4 交流的完整状态

状态 人物窗左上标签 语音条 台词区 / 提示
文字待机 在你面前 — 上一句和她当前这一句
她在想 在想 她在想 三点跳动
她在打字或说话 在说话(声波) 她在说 · 可以打断,并出现「打断她」 逐字显示加光标
发送失败 — — 「没发出去 · 重试」,记录里虚线边框;重试不会重复发送
麦克风授权 — — 说明弹层:允许 / 不允许(模拟)
倾听 在听你说 红点计时、在听你说、结束语音 你说的话实时显示(灰色)
被打断 停下来了 她停下来了,在等你 她的那句话半透明,后面加省略号
识别出错 没听清 刚才没听清 「刚才没听清,你再说一遍?」,然后自动继续听
麦克风被拒 — —(会话不开始) 麦克风变灰并加斜线;φ 文案;再点一次会给出处理指引
断线 画面变灰 语音自动结束 顶部横幅;发送暂停,草稿保留
视觉观察 绿点:刚刚看到… N 秒前 — 过期后变黄并标「已过期,不再当作眼前」;失败为红点
  • 语音会话期间,「结束语音」一直显示在语音条上,麦克风按钮也同时变成停止键,两处都能结束。
  • 语音开着时,人物窗高度从 100vh-360 降到 100vh-412,给语音条留出位置,三者不会重叠。

5.5 返回与主动消息

  • 离开后返回:首页左侧换成欢迎层「你不在的这两天」,列出时间范围、3 件小事和留言提示,用中性语气,按钮是「看她留的话 / 看她的日子 / 先待一会儿」。
  • 主动消息:在首页时,她的话从人物窗下部浮出(width = 窗宽-32);在日子或设置里时,提示出现在右下角,不打断当前操作。提示上注明这句话来自哪段生活经历。点「回她」会打开聊天记录并定位、高亮这一条,关闭后回到原处。点「稍后再看」会留在「交谈」的未读里。

6. 设计 Token(R1 的值照旧,以下只列 R2 新增)

Token 月光 雾光 用途
--glass-read rgba(10,18,46,.62) rgba(34,20,66,.60) 日子和设置这类长内容的阅读底
--surface #0b1330 #24154a 手机上推入的详情层和吸底操作栏(不透明,避免下层透字)
--field / --field-line rgba(255,255,255,.05) / rgba(205,222,255,.16) rgba(255,240,255,.06) / rgba(236,218,255,.16) 输入框
--ok #9fe8cf #a8f0d8 成功、视觉观察「新鲜」
--warn #ffd79c #ffdcae 未保存、待定、观察已过期
--danger #ff9fb3 #ffa8c8 失败、危险操作、录音红点
--radius-field 14px 输入框、链接卡片
--pane-l / -w / -t / -b 5vw / min(1000px,66vw) / 84px / 104px 区域面板几何
--mini-pw clamp(170px,14vw,230px) 区域页里缩小后的人物窗
  • 字体、字号层级(30/20/15/13/11.5)、间距(4/8/12/16/24/32/48)、圆角(999/20/28)、曲线、时长与 R1 一致。新增:详情标题 24px/300,分区标题 22px/300,表单标签 13px,分组标题 12px,字间距 .14em。
  • 状态色只用在小点、细边框和短文字上,不做大面积色块,以免破坏夜色的整体气氛。

7. 组件与状态

组件 状态
.btn-primary 默认(微光)/ hover(光晕变大)/ 按下(缩到 .97)/ 不可用(.42 透明,去掉光)
.btn-ghost / .btn-danger / .btn-text 同上;危险按钮只用描边加文字色
.input/.select/.textarea 默认 / 获得焦点(强调色描边并加 4px 柔光圈)/ 错误(--danger 描边加下方说明)/ 只读(虚线描边)
.seg 选中项为强调色实底
.status busy / ok / fail
.checklist 待检查 / 检查中(转圈)/ 通过 ✓ / 失败 !
.ev 事件行 默认 / hover / 当前选中(强调色浅底)/ 已讲述(弱化)/ 打算
.tag 中性 / accent / ok / warn / danger;.tag-demo 用虚线表示「演示/模拟」
.modal 普通 / 危险;需要输入确认字时,主按钮会先锁住,输入正确后才能点
.netbar 重连中(转圈)/ 失败(红点,加「再试一次」)
.observe asking / fresh / stale / fail
.nav-item 默认 / 当前项 / 未读(小点)

8. 响应式

断点 布局
≥1101px 如上;区域页右侧显示缩小的人物窗和说明
721–1100px 区域面板宽 90vw,隐藏缩小的人物窗,在面板标题上改用「她此刻在…」一行字;日子列表 340px,设置导航 200px
≤720px 首页和交流沿用 R1 已认可的手机布局。区域面板改为全屏层(top 54 / bottom 84),底部导航始终可见,不被遮挡。列表和详情、设置分区都改为推入方式,详情层和吸底操作栏使用不透明的 --surface。首建为纵向可滚动布局,「上一步 / 下一步」吸在底部。语音时人物窗高 min(42vh, 1.1w),自上而下依次是台词、语音条(底部 162px 处)、输入框(98px 处)、导航(16px 处),互不重叠。弹层宽度为 100vw-32px

9. 动效

动效 触发 时长 / 曲线 能否打断
进入日子或设置:首页后退并模糊,人物窗缩小移到右侧,面板上升 24px 并淡入,背景缩放到 1.03 导航、入口 人物窗 720ms、面板 420ms(延迟 80ms),ease-out (.22,1,.36,1) 可以,全部用 transition,中途反向会从当前位置回去
列表 → 详情(手机推入) 点条目 420ms ease-out 可以
首建换步 下一步 / 上一步 420ms,前进时从右侧淡入 16px,后退时从左侧 —
弹层 确认、授权 280ms,缩放 .97→1 并淡入 Esc 或点遮罩取消
主动消息浮出 推送 420ms,上移 10px 并淡入 可以
断线横幅 断开 280ms —
语音条 开始语音 280ms —
「正在」事件的点、录音红点、倾听外圈、声波 常驻或状态 1–2.4s 循环 —
主题切换 开关 1100ms (.65,0,.35,1) 可以
  • 减少动效(系统设置或设置→显示):所有循环停止;空间不再推近;过渡统一为 200ms、无延迟;粒子只画一帧。
  • 页面隐藏时:粒子停止绘制,CSS 动画暂停(html.paused)。
  • 施工建议(与 R1 相同):人物窗缩放改用 FLIP(transform),雾层模糊预先烘焙。本轮没有做性能实测,所以不给帧率数字。

10. 模拟与真实能力的边界

  • 原型里所有数据、回复、语音、摄像头、生活、备份、导出、导入、服务测试都是模拟,没有连接任何服务,也不会写入或下载文件。界面上用「演示数据 / 模拟生活 / 模拟 / 原型 · 不连接服务、不写数据」等标签逐处标明。
  • 施工时按 HEL-738 §7 的能力标签处理:mock 打「演示数据」角标;unavailable 用 φ 占位文案;不能为了显示「在线」而伪装。
  • 人物画面始终标注「示意画面 · 参考静帧」。正式版通过 Presenter 替换成视频,无论有没有口型驱动,页面结构都不变。
  • 文案不暗示「关网页会停机」,也不承诺「服务器停机时她还在生活」。

11. 施工验收清单(与 S1 切片对齐)

  1. 两套主题下,每个区域的 DOM 和布局完全一致;切换主题不改变滚动位置,也不改变当前视图。
  2. 首页比例、字号、人物窗位置和 R1 一致(拿 D01 与 R1 截图对照)。
  3. 从日子打开聊天再返回,列表的滚动位置和选中项都不变。
  4. 事件和回忆可以互相跳转;空记录和长记录(分页)都正常。
  5. 首建:未成年、未选关系、未勾选确认三种情况都会被拦下;创建失败时资料保留并能返回修改;完成后进入首页的空生活状态;之后任何地方都没有重建入口。
  6. 设置:有修改才能保存,取消能恢复,保存过程中按钮锁定,失败时修改保留,改关系要确认,恢复要输入两个字确认,并且会拦下别人的备份。
  7. 交流:发送失败能重试且不重复;语音的倾听、思考、她在说、打断、出错、结束都能走通;语音中「结束语音」一直可见;麦克风被拒后文字照常可用;断线时草稿保留、语音安全结束,重连后补齐消息。
  8. 视觉观察:标注时效;30 秒后显示为过期(演示用的阈值,真实值以小视觉服务的实测为准);失败时不影响交谈。
  9. 主动消息注明依据;点开后定位到那条,关闭后回到原处;不展示负罪叙事。
  10. 手机 390×844:输入框、语音条、导航、吸底操作栏和弹层互不遮挡;手机上的详情层不透出下面的文字。
  11. 减少动效、隐藏页面暂停都生效;Esc 能逐层退出。
  12. 所有模拟能力都带标签。

12. 待定项(不阻塞其他设计,都已做成可替换的呈现)

编号 事项 本稿处理
A 她没亲口分享过的事对你是否可见(用户未拍板) 默认显示并标注「还没跟你说过」;演示控制里可以切到「讲之前不显示」。详情页用黄色虚线框标为待定
B 默认主题 两套都保留,原型以月光打开只是临时设定
C 关系的默认值和编辑形式(T-02) 首建时不预选;设置里用表单呈现,可以换成引导式对话
D 单伴侣下的重新创建或清空(T-06) 不设入口
E 城市清单和天气来源(T-07) 搜索列表为演示
F 素材包规范(T-03) 五项检查只是示意
G 自动备份的保留份数(T-06) 列表只显示 3 份并注明待定
H 内网 HTTPS(T-07) 麦克风授权弹层里注明;不可用时按「麦克风被拒或不可用」的状态显示
I 观察过期的阈值、刷新间隔(CG-022) 原型用 30 秒演示,真实值以实测为准
J 她的名字是否在首建时由用户填写 原型放了名字输入框;如果要改成别的方式,只影响第 1 步

13. 原型检查记录

  • 自动自检(?selftest=1,用真实点击走关键流程,共 43 项):在 Edge 无头模式下,1440×900、1280×800、窄窗(手机布局生效)三种尺寸全部通过。覆盖:主题、日子的打开/详情/互链/看聊天后返回原位、空记录与长记录、未讲述切换、设置的修改/取消/确认/保存成功/保存失败、恢复拦截、素材检查、文字失败重试、麦克风拒绝与授权、语音的思考/说话/打断/结束、视觉观察开关、断线与重连、Esc、欢迎层、主动消息定位、首建的三项拦截/失败返回/成功进入首页。
  • 截图检查:电脑截图是 1440×900 下实际 DOM 的截图;手机截图在 390×844 的 iframe 里按 2 倍像素密度截取并裁切(无头窗口有最小宽度,所以不直接截窗口)。
  • 本轮发现并已修正的问题:手机详情层半透明,下面的列表文字透出来(改为不透明的 --surface);手机语音时人物窗没有铺满宽度;语音条文字换行(手机上隐藏声波图标,文字过长时截断);静帧截图里声波条高度为 0;吸底操作栏的偏移。
  • 限制:
    • 没有录屏工具,动效请直接打开原型查看。
    • 没有做性能实测。
    • 没有在真实手机或 Safari 上测试,只用了 Edge(Chromium)。
    • 截图时关闭了过渡,所以截图里看不到「你不在的这两天」卡片的闪亮反馈。
    • 本运行环境里没有可用的设计或动效类技能(只有平台类技能),动效由本规范和自检把关,没有使用其他技能。

14. 截图索引

D01 首页 · D02/D03 事件详情(两套主题)· D04 你不在时摘要 · D05 打算中的事 · D06 还没跟你说过(待定呈现)· D07 长记录 · D08 空记录 · D09 回忆详情与关联日子 · D10 成长 · D11 返回欢迎层 · D12 主动消息(首页)· D13 主动消息定位 · D14~D21 首建(出生、校验错误、底色、关系、确认、失败、完成、首建后首页)· D22~D30 设置(她、关系确认、城市成功/失败、外观通过/失败、备份、恢复双重确认、外接服务)· D31~D41 交流(发送失败、授权、倾听、她在说、打断、麦克风被拒、断线、重连失败、观察新鲜/过期/失败)· D42 演示控制台 · P01~P13 手机(日子列表、详情、回忆、首建出生/确认/失败、设置列表、关系表单、恢复确认、语音、断线、返回、主动消息)。