Article

蕉不焦交互工程规格

2026年7月11日 · 38 分钟阅读 · ixNieStudio

参数级交互规格真源:design token、动效曲线、手势阈值、组件尺寸与 a11y。呼吸感与三页呈现见 07,用户路径见 06,前端实现见 09。

10 · 交互工程规格(原 mobile-design)

版本:v3.0 · 文档库编号 10
真源职责:参数级交互规格(token、动效曲线、手势阈值、组件尺寸、a11y)。
设计叙事与帧(呼吸感、三页呈现、声线)请以 07-product-presentation.md 为准。
用户路径:06-user-stories-journeys.md
前端实现:09-frontend-architecture.md
技术载体:微信小程序(Taro)
产品主链:闪念 → 沉淀 → 调度排程 → 只一步 → 纠偏 → 释负

本章不负责「产品长什么样」的故事——那是 07。本章负责工程师抄得动的数字。


1. 设计哲学(摘要 · 详见 07)

移动端不是「手机版 Todo App」,也不是「日历排程台」。它是:

随时随地的闪念捕获器 + 调度后只递一步的提醒器 + 可感知的减负智能体。

成败标准:丢进来的成本 < 记在脑子里的成本。
「不焦虑」= 界面与通知不制造压力(非医疗)。

1.0 入口硬约束(闪念:轻量 · 优雅 · 呼吸感)

约束标准禁止
轻量零字段;主路径一次动作(文字提交 / 语音松手)项目、日期、优先级、象限必填
优雅≤2s「已接住」;不跳转脏编辑页;文案短、服务语气捕获后任务墙、审批流
呼吸感大留白、胶囊呼吸、微光判断、果冻回弹(本章规格)密列表、红点债务、羞辱文案
排程可见性仅文案表达「下午再回来 / 今天不再递」无四象限页、无完整日历 time-block 台
WIP聚焦页同时只强调一步同时多条主动推送抢注意力

1.1 三大设计基调

基调内涵视觉语言触感语言
呼吸感界面不压迫,留白暗示「随时可丢闪念」,元素轻呼吸暗示「随时可点」大留白、胶囊呼吸 scale(0.96→1.02) 3s、背景微光径向渐变 8s按下弹性回弹
智能感沉淀与排程在背后运转,可见不打扰微光流动 ≤3s、状态文案、「记下了」波纹思考轻触觉,确认短震
果冻感主按钮物理可信反馈按下 0.92 + 弹性回弹 + 波纹按下轻震,释放回弹

1.2 设计原则

原则说明落地
0 秒启动打开即闪念入口无开屏广告;首页=捕获中心
一次动作捕获只做一次主操作文字/语音/分享
即时反馈≤2sToast/微光,不跳转
智能可见判断过程可见微光 + 文案
排程不扰只在合适时机递一步不连环催;支持今天别推
可见性优先主路径有可见控件常驻捕获条 + 底栏;手势仅增强
可逆可改纠偏成本趋近零按钮/滑动/一句话
有吸引力愿回来呼吸感 + 果冻 + 暖色
低羞耻没完成不是失败无「未完成」主视觉

1.3 用户心智

把事情丢进来,蕉不焦帮你管 Todo,只回来一步。

时刻用户状态移动端职责
闪念涌现杂念、微信催办、截图灵感最低成本丢进,2s 已接住
排程递回系统判断时机合适只看这一步,完成或纠偏
晚间收束需要知道事情有着落状态交还,明天只确认一步

1.4 与理论映射

详见 05-deep-research.md。

设计理论规则
呼吸感留白选择过载只回来一步,无任务墙
零字段认知负荷不填日期/优先级/象限
微光智能感信任可解释、可撤销
「记下了」直接操作纠偏写回可感知
果冻反馈直接操作即时可逆
低羞耻拖延情绪调节可冷冻/稍后,复盘不羞辱
无四象限 UIEisenhower 仅内部前台禁止矩阵作业
调度文案递交时机降错误打断,非日历套件

2. 智能感设计

闪念丢进来后,若只有一句「已接住」,用户难以感知沉淀与排程是否发生。智能感目标:判断过程可见但不打扰,学习可感知,从而建立长期信任。

2.1 智能体可见性原则

原则说明反模式
过程可见AI 判断过程以微光流动呈现,3 秒内完成黑箱处理,用户不知道系统在干什么
结果可解释每个状态判断都附带一句理由只显示状态,不说为什么
学习可感知纠偏后系统反馈”记下了”,让用户知道偏好已写入静默写入,用户不知道系统是否记住
不确定可坦诚AI 不确定时明确说”我不太确定,你扫一眼”装作确定,事后才发现错了
不打扰当前智能体反馈不跳转页面、不弹窗、不强制交互判断完成后跳转详情页要求确认

2.2 AI 判断过程的视觉表达

碎片丢进来后,智能体在后台进行判断(归并/冷冻/拆小/等待/下一步/归档)。这个过程需要被用户感知,但不能打断用户。

微光流动动画:

用户丢进碎片
→ 胶囊按钮边缘亮起一道微光(状态色,初始为中性白)
→ 微光沿胶囊边缘缓慢流动(3 秒内,cubic-bezier(0.4, 0, 0.2, 1))
→ 流动过程中,微光颜色逐渐变化,暗示正在判断
→ 判断完成:微光聚拢为一道状态色闪光(绿=已接住/蓝=已归并/橙=重要/灰=冷冻)
→ 闪光扩散为波纹,2 秒后淡出

微光颜色语义:

阶段微光颜色含义时长
初始#E0E0E0(中性白)正在接收碎片0-300ms
判断中#B0BEC5 → #90A4AE(渐变灰蓝)智能体正在分析300ms-2.5s
完成状态色(绿/蓝/橙/灰)判断结果2.5s-3s
淡出状态色透明度递减反馈结束3s-5s

关键约束:

  • 微光流动总时长不超过 3 秒,超时直接显示”已接住,稍后整理”
  • 微光不闪烁、不跳动,只缓慢流动,避免吸引过多注意力
  • 用户在微光流动期间可以继续操作,不阻塞

2.3 实时状态文案

在 AI 判断过程中,胶囊按钮上方或 Toast 位置显示实时状态文案,让用户知道智能体在做什么。

阶段文案显示时机
接收”接住了,正在帮你放好…”碎片丢进后立即
判断”蕉不焦在帮你看看这件…“300ms 后
归并”已放进客户方案线程,不新增 Todo”判断完成
下一步”现在只做:打开文档写三个小标题”递回时
冷冻”像灵感,先冷冻到周末复盘”判断完成
等待”这件先等对方回复,不压你”判断完成
稍后”今天先不出现,明早再回来”判断完成
待定”我不太确定是不是硬截止,你扫一眼”置信度低
归档”重复链接,已归档”判断完成

文案风格规则:

  • 主语用”蕉不焦”或省略,不用”我”(避免拟人过度)
  • 动作用”帮你”+“动词”,强调服务而非命令
  • 不确定时坦诚说”我不太确定”,不装作全知
  • 不用”正在处理""请稍候”等机械话术

2.4 “记下了”确认动效

用户轻纠偏后(拆小/稍后/今天别推/这很重要/语气保守等),系统需要让用户感知到偏好已被写入,系统会记住这次纠偏。这是建立”系统在变懂我”信任的关键。

确认动效流程:

用户触发纠偏(如点击"拆小")
→ 纠偏按钮果冻回弹(0.92 → 1.0,cubic-bezier(0.34, 1.56, 0.64, 1))
→ 按钮位置绽放一道波纹(状态色,向外扩散 80px,800ms)
→ 波纹中心浮现"记下了"文案(16px Medium,状态色)
→ 文案下方副文案:"下次先拆小"(14px Regular,次要文字色)
→ 文案 + 波纹 1.5 秒后淡出
→ 同时轻触觉反馈(短震动 20ms)

“记下了”文案模板:

纠偏类型主文案副文案(偏好说明)
拆小记下了下次先拆小
稍后记下了下午再回来
今天别推收到今天不再递
这很重要已标重要不冷冻
语气保守记下了客户回复更保守
这不是截止记下了截图优先当资料
这不是任务归档了下次类似不进 Todo

关键约束:

  • “记下了”动效不超过 1.5 秒,不阻塞用户继续操作
  • 副文案让用户知道偏好写入的具体内容,增强可信度
  • 同一纠偏不重复出现”记下了”,避免烦扰

2.5 智能体人格化反馈

蕉不焦的智能体不是聊天机器人,而是状态反馈者。它的人格化体现在反馈的温度,而非对话的长度。

人格化反馈原则:

原则说明示例
短而不冷反馈简短但有温度”接住了,先替你放好” 而非 “已保存”
服务而非命令用”帮你”而非”你应该""蕉不焦在帮你看看” 而非 “请等待处理”
坦诚而非全知不确定时直说”我不太确定,你扫一眼” 而非 “已处理完成”
不评判不评价用户行为”今天已经很好了” 而非 “你还有 10 件没做”
不拟人过度不假装有情感不说”我今天很开心帮你整理”

人格化反馈边界(对齐 06-brand-naming-character.md):

  • 数字人只做状态反馈,不做情绪陪伴
  • 不出现虚拟形象,只用文案 + 微光表达
  • 不模仿人类语气词(不用”哎呀""嗯嗯""哈哈”)
  • 不主动发起对话,只在用户操作后反馈

2.6 学习感知设计

用户需要感知到系统在”变懂自己”。学习感知通过以下方式呈现:

感知方式触发时机呈现形式
”记下了”动效用户纠偏后波纹扩散 + 副文案说明偏好
递回动作变小同类任务下次出现时下一步动作粒度更小(如”打开模板”而非”填写内容”)
不再打扰用户点”今天别推”后当天同类任务不再递回
语气更合适纠偏语气后下次回复草案语气更保守/更软
复盘展示学习成果晚间复盘”今天记下了 3 条偏好:写作类上午不推、客户回复更保守…”

学习感知的克制:

  • 不每次纠偏都强调”我学会了”,只在复盘时汇总
  • 不夸大学习能力,不暗示”AI 越来越聪明”
  • 学习成果以”偏好”而非”记忆”表述,避免拟人过度

2.7 思考动画规格

当智能体需要进行较长时间的判断(如语音倾倒后拆分多个任务、复杂归并判断),展示思考动画让用户知道系统在工作。

思考动画形态:

[微光呼吸点] · · ·
○ ○ ○ ← 三个小圆点依次亮起又暗下,循环
  • 三个小圆点(直径 6px),间距 8px
  • 依次亮起:透明度 0.3 → 1.0 → 0.3,循环
  • 颜色:主色 #4CAF50
  • 循环时长:1.2s(每个点 400ms)
  • 缓动:cubic-bezier(0.4, 0, 0.2, 1)

思考动画使用场景:

场景预期时长动画位置
语音转写 + 拆分2-5s语音录制结束后的反馈区
复杂归并判断1-3s胶囊按钮上方
回复草案生成3-8s纠偏面板内
晚间复盘生成2-4s复盘页加载区

超时处理:

  • 思考动画超过 5s,文案变为”还在想,稍等一下…”
  • 超过 10s,文案变为”这件有点复杂,先接住了,稍后整理”
  • 不让用户等待超过 10s 无反馈

3. 页面结构

移动端核心页面:首页(捕获中心) → 聚焦页(下一步) → 复盘页(晚间收束)。每个页面在原有布局基础上增加智能体状态层,让 AI 的存在贯穿三页。

3.1 首页:捕获中心

目标:让用户在最短时间内完成闪念捕获,成本低于「记在心里」。无四象限、无日历排程台。

布局:

+--------------------------+
| [状态条] 今日已接住 12 件 | ← 顶部轻状态条,不抢占注意力
| |
| [智能体状态层] | ← 微光流动 + 实时文案(判断中显示)
| |
| [大留白] | ← 中央大留白,暗示"这里很空,随时可丢"
| |
| |
| [浮动提示: 随时丢] | ← 首次使用时显示,3秒后淡出
| |
+--------------------------+
| [🎤] [输入框........] [📷] [接住] | ← 常驻捕获条:语音 / 文字 / 图片 全部显式可点
| [捕获] [聚焦] [复盘] | ← 底部导航栏:可见切换三页
+--------------------------+

智能体状态层:

  • 位置:状态条下方,胶囊按钮上方
  • 默认隐藏,仅在 AI 判断过程中显示
  • 内容:微光流动 + 实时状态文案(见第 2 章)
  • 判断完成后 2 秒淡出

交互:

动作触发反馈说明
文字输入在捕获条输入,点「接住」或回车接住碎片 + 安静反馈默认主路径,零隐藏
语音接住(按住说话)点左侧 🎤 切到语音模式,按住「按住 说话」录音,松手发送录音 → 接住碎片微信式语音消息,零学习成本;按住时按钮变高亮+录音层弹出+计时走字,上滑超过阈值进入「取消」态(红色警示、提示「松开取消」),松手放弃、滑回恢复
更多「+」面板点右侧「+」展开,选 拍照 / 相册 / 模板 / 语音触发对应动作进阶动作,微信式九宫格,点外部收起
切换页面点击底部导航栏「聚焦 / 复盘」进入对应页可见导航,主路径
滑动切换(增强)从屏幕边缘向内滑进入相邻页可选增强,首次进入有一次性提示

可见性优先原则(设计依据):GhostUI(CHI 2026)对 81 个主流 App 的实证显示,23.7% 的交互是”隐藏”的(无任何视觉线索),而”有可见边界的按钮与隐藏交互关联最弱”——即带边框、带标签的可见控件最易被用户发现。原方案把”接住”做成单胶囊 + 轻点/长按/上滑三套隐藏手势、三页切换纯靠边缘滑动,正属于”exclusively hidden functionality”反模式。故重构为:主路径全部可见(常驻捕获条 + 底部导航栏),手势仅作可选增强,进阶动作收进点按「+」展开的微信式面板,避免用户因”不知道有这功能”而流失。

状态条:

  • 默认隐藏,下拉显示
  • 内容:“今日已接住 X 件,Y 件已归档,Z 件稍后”
  • 点击状态条可进入”线程列表”(非核心功能,MVP 不优先)

动画:

  • 胶囊按钮:呼吸动画 scale(0.96→1.02) 3s ease-in-out infinite,暗示”随时可点”
  • 捕获后:智能体状态层微光流动 3s → 状态色波纹扩散 2s → 淡出
  • 无操作 10 秒后:状态条淡出,胶囊呼吸节奏放慢(5s 循环)

3.2 聚焦页:下一步

目标:当前只回来一步,其余事项不打扰。

布局:

+--------------------------+
| [< 返回] 现在只做 | ← 顶部导航,不显眼
| |
| [智能体状态层] | ← 递回时微光流动 + "蕉不焦递回一步..."
| |
| +----------------+ |
| | | |
| | [动作卡片] | | ← 中央大卡片,唯一焦点
| | | |
| | 打开客户方案文档 | |
| | 写三个小标题 | |
| | | |
| +----------------+ |
| |
| [完成✓] [拆小] [稍后] [🔥] | ← 四个按钮,滑动操作
+--------------------------+

动作卡片:

格式严格:“现在只做:[动词] [对象] [边界]”

示例:

  • “现在只做:打开客户方案文档,写三个小标题”
  • “现在只做:回复客户邮件,确认收到”
  • “现在只做:泡杯咖啡,坐下休息5分钟”

按钮交互:

按钮颜色滑动方向效果音效
完成✓绿色向右滑卡片飞出,下个任务滑入清脆”叮”
拆小蓝色向上滑卡片翻转,显示更小任务流水声
稍后灰色向左滑卡片淡出,设置稍后提醒轻风
这很重要橙色长按卡片边框发光,标为重要”嗡”一声

防误触:

  • 滑动距离 > 30% 屏幕宽度才生效
  • 滑动过程中显示半透明遮罩,提示当前操作
  • 松开手指后,如果未达阈值,卡片弹性回弹 cubic-bezier(0.34, 1.56, 0.64, 1)

背景:

  • 其余 Todo 项以缩略图形式平铺在背景,模糊处理
  • 用户可点击”展开”查看全部,但默认只显示当前一步
  • 无任务时:显示”暂时没有任务,去捕获一些吧~” + 胶囊按钮

3.3 复盘页:晚间收束

目标:Zeigarnik 显式收束,让用户晚上不再反复想。

布局:

+--------------------------+
| [时间] 21:00 | ← 时间显示,暗示"该复盘了"
| |
| 🌙 今天已经很好了 | ← 温暖问候,无负面词汇
| |
| [智能体状态层] | ← "今天记下了 3 条偏好..."
| |
| +--------------------+ |
| | 接住 归并 冷冻 等 | |
| | 12 5 3 2 | ← 状态流转数字,非"未完成"
| +--------------------+ |
| |
| "明天只看这一步:" | |
| +--------------------+ |
| | 打开客户方案, | |
| | 写第一段标题 | |
| +--------------------+ |
| |
| [明天上午别推了] [收到] | ← 快捷反馈按钮
| |
+--------------------------+

文案风格:

  • 不说”未完成 10 件”,而说”接住 12 件,其中 5 件已归并,3 件冷冻,2 件等待”
  • 不说”你还有任务没做”,而说”明天只看这一步”
  • 不说”效率低下”,而说”今天已经很好了”

交互:

  • 用户点击”明天上午别推了” → “记下了”波纹动效 → 反馈”明天上午不推” → 写回偏好
  • 用户点击”收到” → 复盘结束,返回首页
  • 下拉刷新 → 显示更详细的线程统计(MVP 不必须)

动画:

  • 数字滚动动画(从 0 滚动到实际数字,500ms)
  • 状态流转图示动画(接住→归并→冷冻的流动效果,800ms)
  • 按钮出现动画(透明度 + 位移,200ms 逐个浮现)
  • 学习成果展示:复盘时智能体状态层显示”今天记下了 X 条偏好”

4. 组件设计系统

本章定义移动端所有核心交互组件的精确规格,使每个交互元素都有可执行的尺寸、圆角、间距、颜色和动效参数。所有主要交互按钮遵循果冻按钮系统:按下缩放 0.92 + 弹性回弹 + 触觉反馈 + 波纹扩散。

4.1 组件清单

组件用途出现页面
胶囊按钮底部悬浮主捕获入口首页、聚焦页(无任务时)
动作卡片聚焦页中央显示”现在只做”聚焦页
状态条顶部轻状态显示首页
Toast轻量反馈提示全局
纠偏面板轻纠偏操作面板聚焦页、通知
状态光捕获后边缘闪烁光效全局
微光流动层AI 判断过程可见全局
思考动画长时间判断提示全局

4.2 通用规格参数

参数值说明
基础圆角12px卡片、面板
胶囊圆角999px按钮
小圆角8px标签、小元素
页面边距20px左右安全区
组件间距16px垂直间距
触控热区最小 44×44px符合无障碍标准
安全区底部34px底部悬浮组件距底边距

4.3 果冻按钮系统

所有主要交互按钮(胶囊按钮、完成/拆小/稍后/重要按钮、纠偏面板按钮)统一遵循果冻按钮系统,提供一致的弹性触感反馈。

果冻按钮交互规格:

状态1:默认
├─ scale: 1.0
├─ 阴影: 0 8px 24px rgba(0,0,0,0.12)(重浮)
└─ 无波纹
状态2:按下(touchstart)
├─ scale: 0.92(100ms, ease-out)
├─ 阴影: 0 4px 12px rgba(0,0,0,0.16)(收缩)
├─ 触觉: 单次轻震 10ms
└─ 波纹起点确定(触摸点坐标)
状态3:释放(touchend)
├─ scale: 0.92 → 1.0(400ms, cubic-bezier(0.34, 1.56, 0.64, 1))
├─ 阴影: 恢复重浮
├─ 波纹: 从触摸点向外扩散,半径 0→80px(800ms, ease-out)
│ 透明度 0.4→0(800ms, ease-out)
│ 颜色: 状态色
└─ 触觉: 释放震动 10ms(延迟 100ms 触发,与回弹同步)

波纹扩散规格:

  • 起始半径:0px(从触摸点)
  • 终止半径:80px(或按钮对角线长度,取较小值)
  • 起始透明度:0.4
  • 终止透明度:0
  • 扩散时长:800ms
  • 扩散曲线:ease-out
  • 颜色:对应状态色(绿/蓝/橙/灰)
  • 多次点击:波纹叠加,最多 3 层

禁用态:

  • 透明度:0.4
  • 无呼吸、无果冻、无波纹
  • 触觉:无

4.4 胶囊按钮

底部悬浮的主捕获入口,移动端最核心的交互元素。

尺寸规格:

┌─────────────────────────────────────────┐
│ 安全区底部 34px │
│ ┌───────────────────────────────────┐ │
│ │ [🎤] [输入框占位: 随时丢] [📷] │ │ ← 胶囊按钮主体
│ │ 高度: 56px │ │
│ │ 圆角: 999px │ │
│ │ 左右边距: 20px │ │
│ └───────────────────────────────────┘ │
│ 底部安全区 34px │
└─────────────────────────────────────────┘
参数值
宽度屏幕宽度 - 40px(左右各 20px 边距)
高度56px
圆角999px
背景渐变linear-gradient(135deg, #4CAF50, #66BB6A)
阴影0 8px 24px rgba(76,175,80,0.3)
内部图标尺寸24×24px
图标颜色#FFFFFF
占位文字”随时丢”
占位文字字号16px Medium
占位文字颜色rgba(255,255,255,0.7)
左右图标距边20px

状态规格:

状态视觉表现触发
默认呼吸动画 scale(0.96→1.02) 3s ease-in-out infinite无操作时
呼吸放慢scale(0.98→1.01) 5s ease-in-out infinite无操作 10s 后
按下果冻缩放 0.92 + 波纹轻触
录音中左侧语音图标变为停止图标,背景脉动 opacity(0.8→1.0) 600ms长按
判断中边缘微光流动(见第 2 章)碎片丢进后
完成状态色闪光 + 波纹扩散AI 判断完成
禁用透明度 0.4,无呼吸网络异常等

呼吸动画规格:

  • 缩放范围:scale(0.96) → scale(1.02)
  • 循环时长:3s
  • 曲线:ease-in-out
  • 变换原点:center
  • 与阴影联动:阴影也随缩放微变 0 8px 24px → 0 6px 18px

4.5 动作卡片

聚焦页中央的唯一焦点卡片,显示”现在只做”。

尺寸规格:

← 左右边距 20px →
┌──────────────────────────────────┐
│ │
│ ┌──────────────────────────┐ │
│ │ │ │ ← 动作卡片
│ │ 现在只做: │ │ 宽度: 屏宽 - 40px
│ │ │ │ 内边距: 24px
│ │ 打开客户方案文档 │ │ 圆角: 12px
│ │ 写三个小标题 │ │ 背景: #FFFFFF
│ │ │ │ 阴影: 中浮
│ │ │ │
│ └──────────────────────────┘ │
│ │
└──────────────────────────────────┘
参数值
宽度屏幕宽度 - 40px
最小高度200px
内边距24px(上下左右)
圆角12px
背景#FFFFFF
阴影0 4px 16px rgba(0,0,0,0.08)(中浮)
标题字号14px Regular,颜色 #616161
标题文案”现在只做:“
内容字号20px Medium,颜色 #212121
行高1.5

状态规格:

状态视觉表现触发
默认中浮阴影,居中显示聚焦页打开
滑动手势中跟随手指位移 + 半透明遮罩提示操作左/右/上滑
弹性回弹回弹复位 cubic-bezier(0.34, 1.56, 0.64, 1) 400ms滑动未达阈值松开
完成飞出向右飞出 + 淡出 300ms右滑达标
拆小翻转Y 轴翻转 180° + 显示更小任务 400ms上滑达标
稍后淡出向左滑出 + 淡出 300ms左滑达标
标为重要边框发光 box-shadow: 0 0 0 3px #FF9800长按
悬浮微浮动translateY(-2px→0) 4s ease-in-out infinite静止时
空状态显示”暂时没有任务,去捕获一些吧~” + 胶囊按钮无下一步时

滑动遮罩规格:

  • 滑动过程中卡片上方覆盖半透明遮罩
  • 遮罩透明度随滑动距离递增:0→0.3
  • 遮罩内显示当前操作文案(如”完成✓""拆小""稍后”)
  • 遮罩文案字号 18px Medium,颜色白色
  • 遮罩背景色:对应操作状态色

4.6 状态条

首页顶部的轻状态显示,默认隐藏,下拉显示。

尺寸规格:

┌──────────────────────────────────┐
│ [状态条] 今日已接住 12 件 │ ← 高度 44px,毛玻璃背景
│ 5 件归档,2 件稍后 │
└──────────────────────────────────┘
← 高度 44px,全宽 →
参数值
高度44px
宽度100%(全宽)
背景backdrop-filter: blur(12px); background: rgba(255,255,255,0.7)
暗色背景backdrop-filter: blur(12px); background: rgba(30,30,30,0.7)
内边距左右 20px
字号12px Regular
文字颜色#616161
数字颜色#212121 Medium

状态规格:

状态视觉表现触发
隐藏translateY(-100%),不可见默认
下拉显示translateY(-100%→0) 300ms cubic-bezier(0.0, 0, 0.2, 1)下拉手势
显示中毛玻璃背景,显示今日统计下拉到位
自动收起translateY(0→-100%) 300ms cubic-bezier(0.4, 0, 1, 1)3s 后或上滑
无操作淡出opacity(1→0) 500ms10s 无操作

内容格式:

  • “今日已接住 X 件,Y 件已归档,Z 件稍后”
  • 数字使用 Medium 字重,强调可信赖感
  • 不显示”未完成”数量

4.7 Toast

全局轻量反馈提示,用于捕获确认、纠偏反馈等。

尺寸规格:

┌─────────────────────┐
│ ✓ 已接住 │ ← Toast
│ 已放进产品线程 │ 高度: 48-64px(自适应)
└─────────────────────┘ 宽度: 自适应(最大屏宽-80px)
圆角: 12px
参数值
最大宽度屏幕宽度 - 80px
最小高度48px
内边距12px 20px
圆角12px
背景rgba(33,33,33,0.9)(深色半透明)
暗色背景rgba(255,255,255,0.95)(亮色半透明)
主文案字号14px Medium
主文案颜色#FFFFFF(亮色模式)/ #212121(暗色模式)
副文案字号12px Regular
副文案颜色rgba(255,255,255,0.7) / rgba(33,33,33,0.6)
图标尺寸20×20px
阴影0 4px 16px rgba(0,0,0,0.12)

状态规格:

状态视觉表现触发
进入从顶部滑入 translateY(-100%→0) 300ms cubic-bezier(0.0, 0, 0.2, 1)触发反馈
显示居中顶部,距顶 64px(避开状态条)进入完成
退出淡出 + 上滑 translateY(0→-20%) opacity(1→0) 300ms2s 后自动
长文本高度自适应,最大 3 行副文案超长

Toast 类型:

类型图标主色示例
成功✓#4CAF50”已接住”
归并⇄#2196F3”已放进产品线程”
稍后◐#9E9E9E”下午再回来”
重要🔥#FF9800”已标重要”
待定?#FF9800”你扫一眼”
错误!#F44336”稍等片刻,再试试”

关键约束:

  • Toast 不阻塞用户操作
  • 同一时间只显示一个 Toast,新 Toast 替换旧 Toast
  • Toast 不包含可点击按钮(按钮交互用纠偏面板)
  • 显示时长:2s(无副文案)/ 3s(有副文案)

4.8 纠偏面板

底部弹出的轻纠偏操作面板,用于纠偏动作选择和输入。

尺寸规格:

┌──────────────────────────────────┐
│ │ ← 背景遮罩(半透明黑 0.4)
│ ┌────────────────────────┐ │
│ │ [把手] │ │ ← 纠偏面板
│ │ │ │ 圆角: 顶部 16px
│ │ 这件事你要怎么处理? │ │ 背景: 毛玻璃
│ │ │ │
│ │ [完成✓] [拆小] │ │
│ │ [稍后] [这很重要] │ │
│ │ [今天别推] [这不是任务] │ │
│ │ │ │
│ │ ┌─────────────────┐ │ │ ← 一句话输入框
│ │ │ 或输入一句话... │ │ │ 高度 40px
│ │ └─────────────────┘ │ │ 圆角 8px
│ └────────────────────────┘ │
└──────────────────────────────────┘
参数值
宽度100%(全宽)
圆角顶部 16px
背景backdrop-filter: blur(16px); background: rgba(255,255,255,0.8)
暗色背景backdrop-filter: blur(16px); background: rgba(30,30,30,0.8)
内边距20px
把手尺寸36×4px,圆角 2px,颜色 #E0E0E0
把手上边距8px
标题字号16px Medium,颜色 #212121
按钮网格3 列 × 2 行
按钮间距12px
按钮高度44px
按钮圆角12px
输入框高度40px
输入框圆角8px
输入框背景rgba(0,0,0,0.04)
遮罩透明度rgba(0,0,0,0.4)

纠偏按钮规格:

按钮背景文字色图标
完成✓rgba(76,175,80,0.12)#4CAF50✓
拆小rgba(33,150,243,0.12)#2196F3⤓
稍后rgba(158,158,158,0.12)#616161◐
这很重要rgba(255,152,0,0.12)#FF9800🔥
今天别推rgba(158,158,158,0.12)#616161✕
这不是任务rgba(158,158,158,0.12)#616161🗂

所有纠偏按钮遵循果冻按钮系统。

状态规格:

状态视觉表现触发
进入从底部滑入 translateY(100%→0) 300ms cubic-bezier(0.0, 0, 0.2, 1) + 遮罩淡入点击纠偏入口
显示毛玻璃面板 + 遮罩进入完成
按钮按下果冻缩放 0.92 + 波纹轻触按钮
”记下了”动效按钮位置波纹扩散 + 浮现”记下了”文案纠偏确认
退出向下滑出 translateY(0→100%) 300ms cubic-bezier(0.4, 0, 1, 1) + 遮罩淡出纠偏完成或点击遮罩
输入框聚焦边框变为主色 #4CAF50,键盘弹出轻触输入框

关键约束:

  • 纠偏面板不超过屏幕高度 50%,避免遮挡过多内容
  • 一句话输入框支持自然语言纠偏(如”语气保守一点""这不是截止”)
  • 面板可通过下拉手势关闭

4.9 状态光

捕获后边缘闪烁的光效,颜色表示状态,是核心的状态反馈视觉语言。

尺寸规格:

参数值
位置胶囊按钮边缘 / 屏幕边缘
宽度3px(边缘光带)
扩散半径60px(波纹扩散)
起始透明度0.8
终止透明度0

状态色规格:

状态光色rgba
已接住/完成绿rgba(76,175,80,0.8)
已归并蓝rgba(33,150,243,0.8)
稍后/等待灰rgba(158,158,158,0.6)
重要橙rgba(255,152,0,0.8)
冷冻浅灰蓝rgba(176,190,197,0.6)

动画规格:

阶段动画时长曲线
亮起透明度 0→0.8100msease-out
闪烁透明度 0.8→0.4→0.8800ms(2 次循环)ease-in-out
扩散波纹向外扩散 0→60px,透明度 0.8→02sease-out
淡出透明度 0.4→0500msease-in

关键约束:

  • 状态光不闪烁超过 3 次,避免吸引过多注意力
  • 状态光颜色与 Toast 图标色一致,保持状态色统一
  • 多次连续捕获:状态光叠加显示,最多 3 层

4.10 微光流动层

AI 判断过程的视觉表达层,详见第 2 章。此处补充组件规格。

尺寸规格:

参数值
位置状态条下方,胶囊按钮上方
宽度屏幕宽度 - 40px
高度48px(含文案)
内边距12px 20px
圆角12px
背景transparent(仅微光,无背景色)
微光宽度2px(流动光带)
微光起始透明度0.6
文案字号14px Regular
文案颜色#616161

状态规格:

状态视觉表现触发
隐藏opacity: 0; height: 0默认
进入opacity(0→1) 200ms + 高度展开AI 开始判断
流动微光沿胶囊边缘流动 3s判断中
完成微光聚拢为状态色闪光 → 波纹扩散判断完成
退出opacity(1→0) 500ms + 高度收起完成后 2s

4.11 思考动画

长时间判断提示组件,详见第 2 章。此处补充组件规格。

尺寸规格:

参数值
位置反馈区居中
圆点直径6px
圆点间距8px
圆点颜色#4CAF50
总宽度34px(3 点 + 2 间距)
高度6px

动画规格:

圆点亮起延迟亮起时长暗下时长
第 1 点0ms400ms400ms
第 2 点400ms400ms400ms
第 3 点800ms400ms400ms
  • 亮起:透明度 0.3 → 1.0
  • 暗下:透明度 1.0 → 0.3
  • 循环时长:1.2s
  • 曲线:cubic-bezier(0.4, 0, 0.2, 1)

与文案的组合:

  • 思考动画下方显示状态文案(如”蕉不焦在帮你看看这件…”)
  • 文案字号 14px Regular,颜色 #616161
  • 文案与动画间距 12px

4.12 组件状态色汇总

所有组件的状态色统一映射,确保状态在全应用中视觉一致:

状态色值用于组件应用
已接住/完成#4CAF50成功、活跃状态光、Toast、波纹、完成按钮
已归并#2196F3归并、拆小状态光、Toast、波纹、拆小按钮
重要#FF9800重要、待定状态光、Toast、波纹、重要按钮
稍后/等待#9E9E9E稍后、归档状态光、Toast、波纹、稍后按钮
冷冻#B0BEC5冷冻状态光
错误#F44336失败、异常Toast 错误类型
原始碎片#BDBDBD未处理状态光(初始)

5. 手势交互系统

本章建立完整的手势词典,从 4 种基础手势扩展到 10 种,并定义拖拽场景、手势组合与冲突处理规则。所有手势设计考虑微信小程序手势 API 限制(bindtap/bindlongpress/bindtouchstart/bindtouchmove/bindtouchend/movable-view),确保可落地。

手势仅作增强,不替代可见入口:依据 GhostUI(CHI 2026)“可见性优先”结论,凡核心功能(捕获、页面切换)必须提供带边界、带标签的可见入口;本章手势词典中的边缘滑动、长按等均为可选增强,不可作为唯一路径。首页捕获已改为微信式输入栏(语音/键盘切换 + 文字输入 +「+」面板,全部显式,§3.1),页面切换已改为底部可见导航栏。交互范式直接复用微信已教育市场的操作习惯(按住说话、「+」面板),不做自创手势。

5.1 手势词典

5.1.1 轻触(Tap)

属性值
触发条件手指接触屏幕 < 300ms,位移 < 10px
触觉反馈单次轻震 10ms
视觉反馈果冻按钮缩放 0.92 + 弹性回弹 + 波纹
适用场景胶囊按钮触发、纠偏按钮、Toast 关闭、状态条点击
小程序 APIbindtap
防抖500ms 内同一元素只响应一次

5.1.2 长按(Long Press)

属性值
触发条件手指接触屏幕 > 1000ms,位移 < 10px
触觉反馈单次中震 20ms
视觉反馈按钮状态变色 + 触觉提示
适用场景胶囊按钮语音录制、动作卡片标为重要
小程序 APIbindlongpress
取消条件长按开始后位移 > 20px 则取消

语音录制长按规格:

  • 长按开始:胶囊按钮左侧图标变为停止图标,背景脉动 opacity(0.8→1.0) 600ms
  • 录制中:显示录音波形动画 + 时长计数
  • 松开停止:自动提交语音,进入 AI 判断流程
  • 最长录制:60s,超时自动停止

5.1.3 双击(Double Tap)

属性值
触发条件两次轻触间隔 < 300ms,位移均 < 10px
触觉反馈双次轻震 10ms×2
视觉反馈果冻回弹 + 绿色波纹
适用场景动作卡片快速完成、首页快速捕获
小程序 API自定义实现(bindtap + 时间戳判断)
与轻触冲突300ms 延迟判断:首次点击后等待 300ms,若无第二次点击则触发轻触

5.1.4 上滑(Swipe Up)

属性值
触发条件向上滑动 > 50px,水平位移 < 30px
触觉反馈单次轻震 10ms
视觉反馈跟随手指位移 + 遮罩提示
适用场景胶囊按钮唤起截图、动作卡片拆小
小程序 APIbindtouchstart/bindtouchmove/bindtouchend
阈值50px 触发,未达阈值弹性回弹

胶囊上滑(截图输入):

  • 上滑 > 50px:唤起截图/相册选择
  • 上滑过程中显示向上箭头 + “截图”文案
  • 松开手指:若达阈值则进入截图选择,否则回弹

卡片上滑(拆小):

  • 上滑 > 30% 屏幕高度:触发拆小
  • 上滑过程中卡片跟随位移 + 蓝色遮罩 + “拆小”文案
  • 松开手指:若达阈值则卡片翻转显示更小任务,否则弹性回弹

5.1.5 下滑(Swipe Down)

属性值
触发条件向下滑动 > 50px,水平位移 < 30px
触觉反馈单次轻震 10ms
视觉反馈状态条滑入 / 刷新指示器
适用场景首页显示状态条、复盘页下拉刷新
小程序 APIbindtouchstart/bindtouchmove/bindtouchend 或 onPullDownRefresh
阈值50px 触发状态条,80px 触发刷新

5.1.6 左滑(Swipe Left)

属性值
触发条件向左滑动 > 30% 屏幕宽度,垂直位移 < 30px
触觉反馈单次轻震 10ms
视觉反馈卡片跟随位移 + 灰色遮罩 + “稍后”文案
适用场景动作卡片稍后、卡片归档
小程序 APIbindtouchstart/bindtouchmove/bindtouchend 或 movable-view
阈值30% 屏宽触发,未达阈值弹性回弹
后续操作松开后弹出时段选择(今天/明天/下周)

5.1.7 右滑(Swipe Right)

属性值
触发条件向右滑动 > 30% 屏幕宽度,垂直位移 < 30px
触觉反馈双次短震 20ms×2(完成确认)
视觉反馈卡片跟随位移 + 绿色遮罩 + “完成✓“文案
适用场景动作卡片完成、首页右滑进入聚焦页
小程序 APIbindtouchstart/bindtouchmove/bindtouchend
阈值30% 屏宽触发,未达阈值弹性回弹
完成动效卡片向右飞出 + 淡出 300ms + 下个任务滑入

5.1.8 拖拽(Drag)

属性值
触发条件长按 > 500ms 后开始移动,或直接按住并移动 > 10px
触觉反馈开始拖拽时中震 20ms
视觉反馈被拖拽元素放大 scale(1.05) + 阴影增强
适用场景卡片拖拽排序、拖拽到状态区域
小程序 APImovable-view/movable-area 或自定义 touchmove
释放松开手指后吸附到最近有效位置

5.1.9 边缘滑动(Edge Swipe)

属性值
触发条件从屏幕边缘 20px 内开始滑动,向内滑动 > 60px
触觉反馈单次轻震 10ms
视觉反馈页面跟随位移 + 下一页预览
适用场景三页之间切换(首页↔聚焦页↔复盘页)
小程序 APIbindtouchstart/bindtouchmove/bindtouchend(需判断起始坐标)
阈值60px 触发切换,未达阈值回弹
方向右边缘左滑→聚焦页;左边缘右滑→复盘页(晚间)

边缘滑动与系统手势冲突:

  • 微信小程序中,右边缘左滑可能与系统返回手势冲突
  • 解决方案:使用左边缘右滑作为主要页面切换手势,右边缘左滑作为辅助
  • 左边缘 20px 内开始滑动时优先响应页面切换,不触发系统返回

5.1.10 双指捏合(Pinch)

属性值
触发条件两指距离缩小 > 20%
触觉反馈单次轻震 10ms
视觉反馈元素缩小 + 淡出
适用场景聚焦页背景缩略图折叠/展开、复盘页线程统计折叠
小程序 API两指 touchstart/touchmove 计算距离
阈值距离缩小 20% 触发折叠,放大 20% 触发展开

5.1.11 摇晃(Shake)

属性值
触发条件设备加速度超过阈值(微信 wx.onAccelerometerChange)
触觉反馈双次中震 20ms×2
视觉反馈撤销 Toast “已撤销最后操作”
适用场景撤销最后一次捕获或操作
小程序 APIwx.onAccelerometerChange
阈值加速度 > 2g(避免误触)
限制5s 内只响应一次,避免连续摇晃
可撤销范围最后一次捕获、最后一次状态变更、最后一次纠偏

5.2 手势组合

复合手势由基础手势组合而成,用于实现更高效的交互。

手势组合序列效果场景
长按 + 上滑长按胶囊 → 不松开上滑长按录音 → 上滑取消录音语音输入取消
长按 + 拖拽长按卡片 → 拖拽到状态区进入拖拽排序模式卡片状态变更
双击 + 长按双击卡片 → 长按快速完成 + 标重要高效操作
边缘滑动 + 滑动边缘滑出页面 → 继续滑动连续切换多页快速导航

长按 + 拖拽的实现:

  • 长按 500ms 后进入”拖拽就绪”状态(触觉中震 + 元素放大 1.05)
  • 拖拽就绪后手指不松开继续移动即开始拖拽
  • 拖拽过程中显示状态区域热区(底部出现 4 个状态区域:完成/拆小/稍后/重要)
  • 释放到对应状态区域即触发该状态变更

5.3 拖拽场景详细设计

5.3.1 卡片拖拽排序

场景:聚焦页背景的任务缩略图,用户可长按拖拽重新排序。

交互流程:

1. 长按背景缩略图 > 500ms
→ 缩略图放大 scale(1.05) + 阴影增强 + 触觉中震
→ 其他缩略图轻微下沉(透明度 0.6)
2. 手指拖动
→ 被拖拽缩略图跟随手指
→ 其他缩略图自动腾位(Y 轴位移 200ms 缓动)
3. 松开手指
→ 缩略图吸附到最近空位(200ms 缓动)
→ 触觉轻震 + 排序写入
→ 其他缩略图恢复透明度

视觉规格:

  • 被拖拽元素:scale(1.05) + 阴影 0 12px 32px rgba(0,0,0,0.2)
  • 其他元素:透明度 0.6 + 自动腾位
  • 腾位动画:translateY 200ms cubic-bezier(0.4, 0, 0.2, 1)

5.3.2 拖拽到状态区域

场景:聚焦页动作卡片可拖拽到底部状态区域,直接改变状态。

交互流程:

1. 长按动作卡片 > 500ms
→ 卡片放大 scale(1.05) + 触觉中震
→ 底部浮现 4 个状态区域:
┌──────┬──────┬──────┬──────┐
│ 完成✓│ 拆小 │ 稍后 │ 重要 │
│ 绿 │ 蓝 │ 灰 │ 橙 │
└──────┴──────┴──────┴──────┘
2. 拖拽卡片到某状态区域上方
→ 该区域高亮(背景色加深 + scale(1.1))
→ 其他区域变暗(透明度 0.5)
→ 触觉轻震提示进入有效区域
3. 松开手指
→ 若在有效区域内:触发该状态变更 + "记下了"波纹
→ 若不在有效区域内:卡片弹性回弹到原位

状态区域规格:

  • 位置:底部安全区上方
  • 每个区域尺寸:等分屏宽,高度 80px
  • 圆角:顶部 12px
  • 默认背景:对应状态色 12% 透明度
  • 高亮背景:对应状态色 24% 透明度 + scale(1.1)
  • 图标 + 文案:居中,字号 14px Medium

5.3.3 拖拽切换页面

场景:三页之间通过边缘拖拽切换。

交互流程:

1. 从屏幕边缘 20px 内开始拖拽
→ 当前页面跟随手指位移
→ 下一页从边缘滑入(半透明预览)
2. 拖拽超过 60px
→ 下一页逐渐清晰(透明度 0.3→0.8)
→ 触觉轻震提示达到切换阈值
3. 松开手指
→ 若超过阈值:页面切换完成(300ms 缓动到位)
→ 若未超过阈值:当前页面弹性回弹(400ms 弹性曲线)

页面切换方向:

  • 左边缘右滑 → 复盘页(晚间优先显示)
  • 右边缘左滑 → 聚焦页
  • 页面顺序:首页(中) ↔ 聚焦页(右) ↔ 复盘页(左)

5.4 手势冲突处理

多手势可能同时触发,需要明确的优先级和处理规则。

5.4.1 优先级规则

优先级手势说明
1(最高)边缘滑动页面切换优先,避免与系统返回冲突
2长按长按一旦触发(>1s),忽略后续滑动
3拖拽长按 > 500ms 后进入拖拽,优先于普通滑动
4滑动(左/右/上/下)方向明确的滑动
5双击需等待 300ms 判断
6(最低)轻触最基础手势,最后判断

5.4.2 冲突处理规则

轻触 vs 双击:

  • 首次轻触后不立即触发,等待 300ms
  • 300ms 内有第二次轻触 → 触发双击
  • 300ms 内无第二次轻触 → 触发轻触
  • 代价:轻触有 300ms 延迟(可接受,果冻回弹动画掩盖延迟)

轻触 vs 长按:

  • 手指接触屏幕后同时启动两个计时器
  • < 300ms 松开 → 轻触
  • 1000ms 未松开 → 长按

  • 300ms-1000ms 松开 → 不触发任何手势

滑动 vs 长按:

  • 手指接触后位移 > 10px → 取消长按计时,进入滑动判断
  • 手指接触后位移 < 10px 且 > 1000ms → 触发长按

滑动方向冲突:

  • 计算滑动的主方向(水平 vs 垂直)
  • 水平位移 > 垂直位移 → 左滑/右滑
  • 垂直位移 > 水平位移 → 上滑/下滑
  • 主方向位移需 > 30px 才触发

边缘滑动 vs 普通滑动:

  • 起始点在边缘 20px 内 → 优先边缘滑动
  • 起始点在边缘 20px 外 → 普通滑动

拖拽 vs 滑动:

  • 长按 > 500ms 后移动 → 拖拽
  • 未长按直接移动 > 10px → 滑动

摇晃 vs 触摸手势:

  • 摇晃与触摸手势独立,可同时触发
  • 摇晃仅触发撤销,不干扰当前触摸操作

5.5 微信小程序手势 API 适配

手势推荐实现注意事项
轻触bindtap原生支持,注意 300ms 延迟
长按bindlongpress原生支持,bindlongpress 优先于 bindtap
双击bindtap + 时间戳需自定义判断,注意与轻触的延迟
滑动bindtouchstart/bindtouchmove/bindtouchend计算位移和方向,需处理多点触控
拖拽movable-view/movable-area原生组件,限制在 movable-area 内
边缘滑动bindtouchstart 判断坐标需判断起始点是否在边缘 20px 内
双指捏合双指 touchmove 计算距离需处理 touches 数组
摇晃wx.onAccelerometerChange需申请加速度权限

小程序手势限制与应对:

  • movable-view 性能有限,复杂拖拽场景需自定义 touchmove
  • 小程序无原生 Force Touch 支持,暂不实现
  • 小程序返回手势优先级高于应用手势,边缘滑动需避开右边缘
  • 使用 catchtouchmove 阻止事件冒泡,避免页面滚动干扰拖拽

6. 动效系统

本章定义所有动效的精确曲线和时长,区分弹性动画、缓入缓出、呼吸循环三类曲线,使开发可直接使用。每类动效都标注完整的 CSS 实现参数。

6.1 动效曲线规范

曲线类型cubic-bezier 值适用场景特征
弹性曲线cubic-bezier(0.34, 1.56, 0.64, 1)果冻回弹、卡片回弹超出目标值后回弹,模拟物理弹性
缓入缓出cubic-bezier(0.4, 0, 0.2, 1)页面切换、淡入淡出对称加速减速,自然流畅
缓出cubic-bezier(0.0, 0, 0.2, 1)元素进入快速启动,缓慢停止
缓入cubic-bezier(0.4, 0, 1, 1)元素退出缓慢启动,快速离开
呼吸曲线ease-in-out循环呼吸动画对称缓动,适合无限循环
线性linear进度条、匀速旋转匀速,仅用于功能性动画

6.2 动效分类

6.2.1 呼吸类动效

呼吸类动效是”呼吸感”基调的核心,通过缓慢的循环缩放/位移/透明度变化,暗示元素的”活性”。

动效属性变化时长曲线触发
胶囊呼吸scale(0.96→1.02) + 阴影联动3s 循环ease-in-out首页无操作时
胶囊呼吸放慢scale(0.98→1.01)5s 循环ease-in-out无操作 10s 后
背景微光radial-gradient 位置缓动8s 循环ease-in-out首页背景持续
卡片悬浮微浮动translateY(-2px→0)4s 循环ease-in-out聚焦页卡片静止时
录音中脉动opacity(0.8→1.0)600ms 循环ease-in-out语音录制中
思考心跳三点透明度 0.3→1.01.2s 循环cubic-bezier(0.4, 0, 0.2, 1)AI 判断中

呼吸动画 CSS 示例:

@keyframes breathe {
0%, 100% { transform: scale(0.96); box-shadow: 0 8px 24px rgba(76,175,80,0.3); }
50% { transform: scale(1.02); box-shadow: 0 6px 18px rgba(76,175,80,0.25); }
}
.capsule { animation: breathe 3s ease-in-out infinite; }

6.2.2 果冻类动效

果冻类动效是”果冻感”基调的核心,通过弹性曲线提供物理触感反馈。

动效属性变化时长曲线触发
果冻按下scale(1.0→0.92)100msease-out按钮按下(touchstart)
果冻回弹scale(0.92→1.0)400mscubic-bezier(0.34, 1.56, 0.64, 1)按钮释放(touchend)
波纹扩散radius(0→80px) + opacity(0.4→0)800msease-out按钮释放
卡片弹性回弹translateX(0)400mscubic-bezier(0.34, 1.56, 0.64, 1)滑动未达阈值松开
”记下了”波纹radius(0→80px) + 文案浮现800ms + 1.5s 淡出ease-out纠偏确认
状态光扩散radius(0→60px) + opacity(0.8→0)2sease-out捕获完成

果冻回弹 CSS 示例:

@keyframes jelly-bounce {
0% { transform: scale(0.92); }
60% { transform: scale(1.04); }
100% { transform: scale(1.0); }
}
.button.released { animation: jelly-bounce 400ms cubic-bezier(0.34, 1.56, 0.64, 1); }

6.2.3 流转类动效

流转类动效用于页面切换、状态转换,强调流畅过渡。

动效属性变化时长曲线触发
页面切换translateX + opacity200mscubic-bezier(0.4, 0, 0.2, 1)边缘滑动切换
卡片飞出(完成)translateX(100%) + opacity(1→0)300mscubic-bezier(0.4, 0, 0.2, 1)右滑完成
卡片翻转(拆小)rotateY(180°)400mscubic-bezier(0.4, 0, 0.2, 1)上滑拆小
卡片淡出(稍后)translateX(-100%) + opacity(1→0)300mscubic-bezier(0.4, 0, 0.2, 1)左滑稍后
Toast 进入translateY(-100%→0) + opacity(0→1)300mscubic-bezier(0.0, 0, 0.2, 1)Toast 触发
Toast 退出translateY(0→-20%) + opacity(1→0)300mscubic-bezier(0.4, 0, 1, 1)Toast 自动消失
状态条滑入translateY(-100%→0)300mscubic-bezier(0.0, 0, 0.2, 1)下滑显示
纠偏面板滑入translateY(100%→0)300mscubic-bezier(0.0, 0, 0.2, 1)点击纠偏入口
微光流动边缘光带位移3scubic-bezier(0.4, 0, 0.2, 1)AI 判断中

6.2.4 微交互类动效

微交互类动效用于细节反馈,增强交互的精致感。

动效属性变化时长曲线触发
数字滚动数字从 0 递增到目标值500msease-out复盘页统计
按钮浮现opacity(0→1) + translateY(10px→0)200ms 逐个(间隔 80ms)cubic-bezier(0.0, 0, 0.2, 1)复盘页按钮
状态光闪烁opacity(0→0.8→0.4→0.8)800ms(2 次循环)ease-in-out捕获后状态反馈
状态光淡出opacity(0.4→0)500msease-in状态光结束
遮罩淡入opacity(0→0.4)200msease-out滑动过程中遮罩
图标变色color 过渡200msease-out状态切换
边框发光box-shadow 过渡300msease-out标为重要
缩略图腾位translateY200mscubic-bezier(0.4, 0, 0.2, 1)拖拽排序时其他元素

6.3 动效组合规则

多个动效同时触发时的组合规则,确保动效协调不冲突。

组合场景动效 A动效 B组合方式
按钮按下 + 触觉果冻缩放 0.92震动 10ms同步触发
按钮释放 + 波纹 + 触觉果冻回弹 400ms波纹扩散 800ms回弹先开始 100ms,波纹延迟 100ms
纠偏确认 + 波纹 + 文案”记下了”波纹 800ms文案浮现 200ms波纹先开始,文案延迟 200ms 浮现
捕获完成 + 状态光 + Toast状态光扩散 2sToast 进入 300ms状态光先开始,Toast 延迟 500ms
卡片完成 + 飞出 + 下一个滑入卡片飞出 300ms下一个滑入 300ms飞出完成后立即滑入(无间隔)
页面切换 + 呼吸重置页面切换 200ms胶囊呼吸启动切换完成后启动呼吸(延迟 200ms)

组合约束:

  • 同一元素同一时刻最多 2 个动效叠加
  • 循环动效(呼吸、微光)在交互动效触发时暂停,交互完成后恢复
  • 波纹扩散不与果冻回弹冲突(波纹在元素上层,不影响 transform)

6.4 性能约束

约束值说明
动画帧率≥ 60fps所有动画必须保持流畅
同时动画数≤ 5同屏同时运行的独立动画不超过 5 个
循环动画数≤ 3同屏同时运行的循环动画不超过 3 个
动画属性仅 transform/opacity避免触发重排(不用 width/height/margin/top/left)
复杂动画使用 will-change预告浏览器优化(如 will-change: transform)
小程序限制避免 setData 高频调用动画用 CSS/wxs 实现,不用 JS 驱动

性能优化策略:

  • 循环动画用 CSS animation 实现,不用 JS requestAnimationFrame
  • 拖拽动画用小程序 wxs 响应事件,减少 setData 调用
  • 离屏元素暂停动画(animation-play-state: paused)
  • 减少动态模式下关闭所有非功能性动画

7. 视觉设计

本章定义完整的视觉设计系统,包括主色/辅色/强调/中性色阶、渐变色、阴影层级、毛玻璃参数、光效规格,以及 8 种状态色的完整映射和暗黑模式全量映射。

7.1 色彩系统

7.1.1 主色阶(绿 - 健康、减负、已接住、完成)

色阶色值用途
Green 50#E8F5E9浅背景、成功底色
Green 100#C8E6C9标签背景、轻提示
Green 200#A5D6A7边框、分割
Green 400#66BB6A渐变辅助色、暗色模式主色
Green 500#4CAF50主色,按钮、状态光、波纹
Green 600#43A047按下态
Green 700#388E3C深色文字

7.1.2 辅色阶(蓝 - 归并、拆小、平静)

色阶色值用途
Blue 50#E3F2FD浅背景
Blue 100#BBDEFB标签背景
Blue 200#90CAF9边框
Blue 400#42A5F5暗色模式辅色
Blue 500#2196F3辅色,归并、拆小
Blue 600#1E88E5按下态
Blue 700#1565C0深色文字

7.1.3 强调色阶(橙 - 重要、硬截止、提醒)

色阶色值用途
Orange 50#FFF3E0浅背景
Orange 100#FFE0B2标签背景
Orange 200#FFCC80边框
Orange 400#FFA726暗色模式强调
Orange 500#FF9800强调色,重要、待定
Orange 600#FB8C00按下态
Orange 700#F57C00深色文字

7.1.4 中性色阶(灰 - 稍后、等待、文字、背景)

色阶色值用途
Gray 50#FAFAFA页面背景
Gray 100#F5F5F5次级背景
Gray 200#EEEEEE分割线浅
Gray 300#E0E0E0分割线、边框、已归档
Gray 400#BDBDBD原始碎片、禁用
Gray 500#9E9E9E中性色,稍后、等待
Gray 600#757575非文字用途(边框、图标辅助)
Gray 700#616161次要文字(AA 合规,对比度 5.8:1)
Gray 800#424242深色文字辅助
Gray 900#212121主文字

7.1.5 功能色

用途色值说明
错误#F44336 (Red 500)操作失败、异常
错误浅#FFEBEE (Red 50)错误背景
成功#4CAF50 (Green 500)同主色
警告#FF9800 (Orange 500)同强调色
信息#2196F3 (Blue 500)同辅色
链接#1976D2 (Blue 700)可点击文字

7.2 状态色完整映射

将 PRD 中 8 种 Todo 状态(对齐 prd.md 状态模型)各映射到主色、浅色、图标、视觉表现和交互语义:

状态主色浅色(背景)图标视觉表现交互语义
原始碎片#BDBDBD#F5F5F5○未处理,中性灰刚丢进来,正在判断
下一步#4CAF50#E8F5E9▶可开始,活跃绿当前递回,唯一焦点
等待#90A4AE#ECEFF1⏸等外部,平静灰蓝不催促,7天后轻确认
归并线程#2196F3#E3F2FD⇄已归并,平静蓝不新增Todo,可拆出
稍后再出现#9E9E9E#F5F5F5◐暂时消失,灰时间到自动回来
冷冻#B0BEC5#ECEFF1❄不提醒,冷淡浅灰蓝30天后复盘
接住待定#FF9800#FFF3E0?需确认,注意橙48小时内轻确认
已归档#E0E0E0#FAFAFA✓无行动,淡出浅灰可恢复

状态色使用规则:

  • 状态光:使用主色,透明度 0.8
  • 波纹:使用主色,透明度 0.4→0
  • 标签背景:使用浅色
  • 图标:使用主色
  • Toast 图标色:使用主色

7.3 渐变色

用途渐变说明
背景微光radial-gradient(circle at 30% 20%, rgba(76,175,80,0.04), transparent 60%), radial-gradient(circle at 70% 80%, rgba(33,150,243,0.03), transparent 60%)首页背景双微光,8s 缓慢移动
胶囊按钮linear-gradient(135deg, #4CAF50, #66BB6A)主捕获入口,135° 对角
完成按钮linear-gradient(135deg, #4CAF50, #43A047)完成动作,稍深
拆小按钮linear-gradient(135deg, #2196F3, #1E88E5)拆小动作
重要按钮linear-gradient(135deg, #FF9800, #FB8C00)重要标记
状态光(绿)radial-gradient(circle, rgba(76,175,80,0.8), transparent 60%)已接住/完成
状态光(蓝)radial-gradient(circle, rgba(33,150,243,0.8), transparent 60%)已归并
状态光(橙)radial-gradient(circle, rgba(255,152,0,0.8), transparent 60%)重要/待定
状态光(灰)radial-gradient(circle, rgba(158,158,158,0.6), transparent 60%)稍后/等待
微光流动linear-gradient(90deg, transparent, rgba(176,190,197,0.6), transparent)AI 判断中,边缘流动

渐变使用规则:

  • 按钮渐变统一 135° 对角
  • 状态光统一 radial-gradient 圆形
  • 背景微光透明度 ≤ 0.04,不喧宾夺主
  • 微光流动使用 linear-gradient + 位移动画

7.4 阴影系统

层级亮色阴影暗色阴影用途
无浮nonenone平面元素、内嵌元素
轻浮0 2px 8px rgba(0,0,0,0.06)0 2px 8px rgba(0,0,0,0.3)状态条、小卡片、标签
中浮0 4px 16px rgba(0,0,0,0.08)0 4px 16px rgba(0,0,0,0.4)动作卡片、面板、Toast
重浮0 8px 24px rgba(0,0,0,0.12)0 8px 24px rgba(0,0,0,0.5)胶囊按钮、弹窗
彩色浮(绿)0 8px 24px rgba(76,175,80,0.3)0 8px 24px rgba(102,187,106,0.2)胶囊按钮(带主色)
拖拽浮0 12px 32px rgba(0,0,0,0.2)0 12px 32px rgba(0,0,0,0.6)拖拽中的元素
发光(橙)0 0 0 3px rgba(255,152,0,0.4)0 0 0 3px rgba(255,167,38,0.4)标为重要的卡片

阴影使用规则:

  • 层级与 z 轴对应:无浮 < 轻浮 < 中浮 < 重浮 < 拖拽浮
  • 暗色模式阴影更深(rgba 透明度更高),因为暗背景需要更强对比
  • 彩色阴影仅用于主交互元素(胶囊按钮)
  • 动画中阴影跟随缩放联动变化

7.5 毛玻璃系统

用途亮色参数暗色参数说明
状态条blur(12px); rgba(255,255,255,0.7)blur(12px); rgba(30,30,30,0.7)顶部状态条
Toastblur(0px); rgba(33,33,33,0.9)blur(0px); rgba(255,255,255,0.95)Toast 不用毛玻璃(深色半透明)
纠偏面板blur(16px); rgba(255,255,255,0.8)blur(16px); rgba(30,30,30,0.8)底部弹出面板
遮罩rgba(0,0,0,0.4)rgba(0,0,0,0.6)半透明遮罩
背景模糊blur(8px)blur(8px)聚焦页背景缩略图
微光流动层transparent(无背景)transparent仅微光,无背景

毛玻璃使用规则:

  • 毛玻璃用于浮层(状态条、面板),不用于页面主体
  • 模糊半径 12-16px,保证可读性
  • 背景透明度 0.7-0.8,确保下方内容可感知但不干扰
  • 小程序中 backdrop-filter 兼容性需测试,降级方案为半透明纯色背景

7.6 光效系统

光效参数用途
状态光radial-gradient + 扩散动画捕获后边缘闪烁(见 4.9)
微光流动linear-gradient + 位移动画AI 判断过程(见 4.10)
边框发光box-shadow: 0 0 0 3px [状态色]标为重要
波纹radial-gradient + 扩散动画按钮释放、纠偏确认
背景微光radial-gradient + 缓动动画首页背景呼吸感
胶囊呼吸光阴影联动缩放胶囊按钮呼吸时阴影微变

7.7 字体系统

层级字体大小字重行高颜色用途
大标题PingFang SC24pxBold (700)1.3#212121复盘页问候
动作卡片标题PingFang SC14pxRegular (400)1.4#616161”现在只做:“
动作卡片内容PingFang SC20pxMedium (600)1.5#212121动作描述
按钮文字PingFang SC16pxMedium (600)1.0#FFFFFF / 状态色按钮文案
正文PingFang SC16pxRegular (400)1.5#212121正文内容
说明文字PingFang SC14pxRegular (400)1.4#616161辅助说明
Toast 主文案PingFang SC14pxMedium (600)1.4#FFFFFFToast 主文字
Toast 副文案PingFang SC12pxRegular (400)1.4rgba(255,255,255,0.7)Toast 副文字
状态条PingFang SC12pxRegular (400)1.2#616161状态条文字
数字(统计)PingFang SC28pxBold (700)1.0#212121复盘页数字

字体使用规则:

  • 字体跟随系统(PingFang SC 为 iOS 默认,Android 降级为系统默认)
  • 字号支持系统缩放(最大 200%)
  • 行高统一 1.4-1.5(正文),1.0-1.2(紧凑元素)
  • 字重仅用 Regular (400) / Medium (600) / Bold (700) 三档

7.8 间距系统

级别值用途
xs4px图标与文字间距、紧密元素
sm8px小元素间距、标签内边距
md12px组件内间距、按钮间距
lg16px组件间距、垂直间距
xl20px页面边距、卡片内边距
2xl24px大卡片内边距
3xl34px安全区底部边距

7.9 圆角系统

级别值用途
无0px全屏元素
sm8px标签、小元素、输入框
md12px卡片、面板、Toast
lg16px纠偏面板顶部
胶囊999px按钮、胶囊按钮

7.10 暗黑模式完整映射

元素亮色暗色说明
页面背景#FAFAFA#121212主背景
次级背景#F5F5F5#1E1E1E卡片区背景
卡片背景#FFFFFF#1E1E1E卡片、面板
状态条毛玻璃rgba(255,255,255,0.7)rgba(30,30,30,0.7)状态条
纠偏面板毛玻璃rgba(255,255,255,0.8)rgba(30,30,30,0.8)纠偏面板
主文字#212121#E0E0E0主文字
次要文字#616161#9E9E9E辅助说明
分割线#E0E0E0#333333分割、边框
主色#4CAF50#66BB6A提亮一档
辅色#2196F3#42A5F5提亮一档
强调#FF9800#FFA726提亮一档
中性#9E9E9E#BDBDBD提亮一档
胶囊渐变linear-gradient(135deg, #4CAF50, #66BB6A)linear-gradient(135deg, #66BB6A, #81C784)提亮
背景微光rgba(76,175,80,0.04)rgba(102,187,106,0.06)提亮且增强
状态光(绿)rgba(76,175,80,0.8)rgba(102,187,106,0.8)提亮
状态光(蓝)rgba(33,150,243,0.8)rgba(66,165,245,0.8)提亮
状态光(橙)rgba(255,152,0,0.8)rgba(255,167,38,0.8)提亮
阴影rgba(0,0,0,0.06-0.12)rgba(0,0,0,0.3-0.5)更深
Toast 背景rgba(33,33,33,0.9)rgba(255,255,255,0.95)反转
Toast 文字#FFFFFF#212121反转
遮罩rgba(0,0,0,0.4)rgba(0,0,0,0.6)更深

暗黑模式规则:

  • 跟随系统暗黑模式自动切换
  • 主色/辅色/强调色统一提亮一档(500→400),确保暗背景上的可读性
  • 阴影更深(透明度更高),因为暗背景需要更强对比
  • 背景微光增强(透明度从 0.04 提升到 0.06),补偿暗色下的呼吸感
  • Toast 反转配色(亮色用深底白字,暗色用亮底深字)

7.11 视觉设计令牌汇总

所有视觉参数汇总为设计令牌,便于开发统一引用:

:root {
/* 主色 */
--color-primary: #4CAF50;
--color-primary-light: #66BB6A;
--color-primary-dark: #43A047;
/* 辅色 */
--color-secondary: #2196F3;
--color-secondary-light: #42A5F5;
/* 强调 */
--color-accent: #FF9800;
--color-accent-light: #FFA726;
/* 中性 */
--color-neutral: #9E9E9E;
--color-error: #F44336;
/* 背景 */
--bg-page: #FAFAFA;
--bg-card: #FFFFFF;
/* 文字 */
--text-primary: #212121;
--text-secondary: #616161;
/* 阴影 */
--shadow-sm: 0 2px 8px rgba(0,0,0,0.06);
--shadow-md: 0 4px 16px rgba(0,0,0,0.08);
--shadow-lg: 0 8px 24px rgba(0,0,0,0.12);
/* 圆角 */
--radius-sm: 8px;
--radius-md: 12px;
--radius-lg: 16px;
--radius-pill: 999px;
/* 间距 */
--space-xs: 4px;
--space-sm: 8px;
--space-md: 12px;
--space-lg: 16px;
--space-xl: 20px;
--space-2xl: 24px;
--space-3xl: 34px;
}
@media (prefers-color-scheme: dark) {
:root {
--color-primary: #66BB6A;
--color-secondary: #42A5F5;
--color-accent: #FFA726;
--bg-page: #121212;
--bg-card: #1E1E1E;
--text-primary: #E0E0E0;
--text-secondary: #9E9E9E;
--shadow-sm: 0 2px 8px rgba(0,0,0,0.3);
--shadow-md: 0 4px 16px rgba(0,0,0,0.4);
--shadow-lg: 0 8px 24px rgba(0,0,0,0.5);
}
}

8. 触觉与音效

本章定义震动模式和音效规范,实现多感官协同反馈。触觉与音效是果冻感和智能感的重要补充,让用户在视觉之外也能感知到系统的响应和学习。

8.1 触觉反馈系统

8.1.1 震动模式定义

震动模式波形时长强度小程序 API
轻触单次短振10ms轻wx.vibrateShort({ type: 'light' })
确认单次中振20ms中wx.vibrateShort({ type: 'medium' })
强调单次长振50ms强wx.vibrateLong()
双击确认双次中振(间隔 50ms)20ms×2中自定义两次 vibrateShort
心跳单次极轻振(循环)10ms/1.2s极轻循环 vibrateShort
警告三次短振(递增)10ms+15ms+20ms中→强自定义三次
撤销双次轻振(递减)15ms+10ms中→轻自定义两次

8.1.2 场景震动映射

场景震动模式说明
胶囊按钮按下轻触(10ms 轻)按下即反馈
胶囊按钮释放轻触(10ms 轻,延迟 100ms)与果冻回弹同步
语音录制开始确认(20ms 中)长按触发录音
语音录制结束确认(20ms 中)松开停止录音
捕获完成双击确认(20ms×2 中)AI 判断完成
状态确认确认(20ms 中)状态变更反馈
”记下了”轻触(20ms 轻)纠偏偏好写入
完成动作双击确认(20ms×2 中)任务完成
拆小动作确认(20ms 中)卡片翻转
稍后动作轻触(10ms 轻)卡片淡出
标为重要强调(50ms 强)重要标记
撤销操作撤销(15ms+10ms 中→轻)摇晃撤销
拖拽开始确认(20ms 中)进入拖拽模式
拖拽进入有效区域轻触(10ms 轻)提示有效区域
拖拽释放(有效)双击确认(20ms×2 中)拖拽成功
拖拽释放(无效)轻触(10ms 轻)回弹提示
页面切换轻触(10ms 轻)页面切换完成
思考心跳心跳(10ms/1.2s 极轻)AI 判断中
错误警告(10ms+15ms+20ms 中→强)操作失败
接住待定确认(20ms 中)需要用户确认

8.1.3 触觉约束

约束值说明
最小间隔100ms两次震动最小间隔,避免连续震动
最大频率6 次/分钟非循环震动最大频率,避免震动疲劳
循环震动心跳模式 1 次/1.2s仅思考心跳使用循环
总时长上限5s 内累计震动 ≤ 200ms避免过度震动
用户可控设置中可关闭尊重用户偏好
静音模式不影响震动独立于系统静音

8.2 音效系统

8.2.1 音效定义

音效声音描述时长音量文件格式
完成”叮”清脆的金属敲击声300ms30%mp3
拆小”流水”轻柔的流水声400ms20%mp3
稍后”轻风”轻风吹过400ms20%mp3
重要”嗡”低沉的共鸣音200ms25%mp3
接住”啵”轻柔的气泡声200ms20%mp3
归并”滴”柔和的滴水声200ms20%mp3
错误”嗯”低沉的疑问音400ms30%mp3
记下了”叮咚”清脆的两音阶上行400ms25%mp3
页面切换”嗖”轻柔的空气滑动声150ms15%mp3

8.2.2 场景音效映射

场景音效说明
捕获完成(已接住)接住”啵”碎片丢进确认
捕获完成(已归并)归并”滴”归并到线程
完成动作完成”叮”任务完成
拆小动作拆小”流水”卡片翻转拆小
稍后动作稍后”轻风”卡片淡出稍后
标为重要重要”嗡”重要标记
”记下了”确认记下了”叮咚”纠偏偏好写入
页面切换页面切换”嗖”三页切换
错误错误”嗯”操作失败
语音录制开始无仅触觉反馈,避免干扰
语音录制结束接住”啵”与捕获完成一致
思考中无仅视觉(思考动画),避免持续音效

8.2.3 音效约束

约束值说明
时长上限≤ 500ms所有音效不超过 500ms
音量上限≤ 30%不超过系统音量 30%
同时播放最多 1 个同一时间只播放一个音效
防抖500ms同一音效 500ms 内不重复
用户可控设置中可关闭默认开启
静音模式尊重系统系统静音时不播放
渐入渐出50ms音效首尾渐入渐出,避免突兀

8.3 多感官协同

触觉、音效、视觉三者的协同映射,确保同一操作的多感官反馈一致。

8.3.1 协同映射表

操作视觉触觉音效
按下按钮果冻缩放 0.92轻触 10ms无
释放按钮果冻回弹 + 波纹轻触 10ms(延迟 100ms)无
捕获完成微光流动→状态光扩散双击确认 20ms×2接住”啵”
完成动作卡片飞出 + 绿色波纹双击确认 20ms×2完成”叮”
拆小卡片翻转 + 蓝色波纹确认 20ms拆小”流水”
稍后卡片淡出 + 灰色波纹轻触 10ms稍后”轻风”
标为重要边框发光 + 橙色波纹强调 50ms重要”嗡"
"记下了”波纹扩散 + 文案浮现轻触 20ms记下了”叮咚”
页面切换页面滑动轻触 10ms页面切换”嗖”
思考中三点心跳动画心跳 10ms/1.2s无
错误红色 Toast警告 10+15+20ms错误”嗯”

8.3.2 协同时序规则

多感官反馈的触发时序,确保感知同步而非混乱:

规则说明
触觉优先触觉反馈延迟最低(< 10ms),最先触发
视觉同步视觉动效与触觉同时开始(按下即缩放)
音效延迟音效延迟 50-100ms 触发,避免与触觉叠加过载
波纹延迟波纹扩散延迟 100ms,在果冻回弹开始后触发
文案延迟”记下了”文案延迟 200ms,在波纹扩散后浮现
结束同步所有反馈在 1.5s 内完成,不留尾巴

8.3.3 减少感官模式

对应用户设置的”减少动态”模式(见第 10 章),多感官反馈也需降级:

感官默认减少感官模式
视觉循环动画呼吸/微光/悬浮关闭
视觉交互动画果冻回弹 400ms改为 150ms 线性
视觉波纹波纹扩散 800ms关闭
触觉完整震动模式仅保留确认/错误两种
音效完整音效仅保留完成/错误两种
思考心跳触觉心跳关闭,仅保留视觉

8.4 小程序 API 适配

能力推荐实现限制
震动wx.vibrateShort / wx.vibrateLongiOS 不支持自定义震动强度,仅 light/medium/heavy
音效wx.createInnerAudioContext需预加载音频文件,注意内存占用
加速度wx.onAccelerometerChange需申请权限,后台不响应
音量InnerAudioContext.volume0-1 范围,受系统音量限制

小程序限制与应对:

  • iOS 震动强度不可精细控制,用 type: 'light'/'medium'/'heavy' 三档替代
  • 音频文件需打包或 CDN 加载,总大小控制在 500KB 以内
  • 震动 API 在部分 Android 机型上表现不一致,需做真机测试
  • 音效播放有 50-100ms 延迟,与触觉/视觉的时序需在设计中预留缓冲

9. 交互流程

本章定义移动端核心交互的完整流程序列,对齐 prd.md 的状态模型、03-brainstorm.md 的 4 条核心路径和轻纠偏机制,使每个交互都有明确的步骤、反馈和状态变更。

9.1 核心交互概览

场景用户动作系统反馈状态变更说明
碎片捕获点击/长按/上滑胶囊微光流动 3s → 状态色波纹 + Toast”已接住”→ 原始碎片 → 判断后入状态不跳转页面
下一步递回滑动卡片完成→卡片飞出;拆小→翻转显示更小任务下一步 → 完成 / 更小下一步不到 1s
轻纠偏点击纠偏按钮/滑动”记下了”波纹动效 + 副文案状态变更 + 偏好写回偏好写回
晚间复盘打开 App/点击推送状态交还 + 明天第一步 + 学习成果全天状态汇总无责复盘
语音倾倒长按胶囊录音思考动画 → 拆分多个状态→ 多个不同状态情绪倾倒不等于任务爆炸
通知纠偏通知上操作”记下了”波纹 + 下次行为改变偏好写回按钮即偏好学习

9.2 碎片捕获完整流程

对齐 03-brainstorm.md 路径二和路径四,碎片捕获是移动端最核心的交互。

文字捕获流程:

步骤1: 用户轻触胶囊按钮
→ 胶囊果冻回弹 + 波纹 + 触觉轻震
→ 输入框展开 + 键盘弹出(200ms 缓出)
→ 输入框占位文案:"随时丢"
步骤2: 用户输入文字,按发送
→ 胶囊果冻回弹 + 触觉轻震
→ 输入框收起 + 键盘收起(200ms 缓入)
→ 微光流动层显示:"接住了,正在帮你放好..."(0-300ms)
步骤3: AI 判断中(300ms-2.5s)
→ 微光流动动画:边缘光带缓慢流动
→ 实时文案更新:"蕉不焦在帮你看看这件..."
→ 思考心跳触觉(10ms/1.2s 极轻)
步骤4: 判断完成(2.5s-3s)
→ 微光聚拢为状态色闪光
→ 状态光扩散(2s)
→ Toast 显示状态文案 + 触觉双击确认
→ 例:"已放进客户方案线程,不新增 Todo"(归并)
→ 例:"现在只做:打开文档写三个小标题"(下一步)
→ 例:"我不太确定是不是硬截止,你扫一眼"(待定)
步骤5: 反馈结束(3s-5s)
→ 状态光淡出
→ Toast 2s 后自动消失
→ 微光流动层淡出
→ 胶囊恢复呼吸动画

语音捕获流程:

步骤1: 用户长按胶囊 > 1s
→ 触觉中震 + 胶囊状态变色
→ 左侧图标变为停止图标
→ 录音波形动画显示 + 时长计数
步骤2: 用户说话(最长 60s)
→ 实时波形动画
→ 时长计数递增
步骤3: 用户松开手指
→ 触觉中震 + 录音停止
→ 语音转写中:思考动画显示"蕉不焦在听..."
→ 转写完成 → 进入文字捕获流程的步骤3(AI 判断)

截图捕获流程:

步骤1: 用户上滑胶囊 > 50px
→ 胶囊上滑遮罩显示"截图"文案
→ 松开后唤起截图/相册选择
步骤2: 用户选择截图
→ 截图预览 + 思考动画"蕉不焦在看看这张图..."
→ OCR 识别中
步骤3: 识别完成 → 进入文字捕获流程的步骤3(AI 判断)
→ 若识别到截止信息(如"明天中午前"):
→ 触发高代价轻确认(见 9.5)
→ 若为普通资料:
→ 归并到线程或冷冻

9.3 下一步递回完整流程

对齐 prd.md 的递交层”同一时刻只主动递交一个动作”。

通知递回流程:

步骤1: 系统判断时机合适(如下午专注时段)
→ 发送微信模板消息通知
→ 通知格式:"蕉不焦 | 打开客户方案文档,写三个小标题"
→ 通知按钮:[完成✓] [拆小] [稍后] [🔥]
步骤2: 用户点击通知 → 进入聚焦页
→ 动作卡片滑入(200ms 缓出)
→ 智能体状态层:"蕉不焦递回一步..."(1s 后淡出)
→ 卡片悬浮微浮动启动

完成动作流程:

步骤1: 用户右滑卡片 > 30% 屏宽
→ 卡片跟随位移 + 绿色遮罩 + "完成✓"文案
→ 触觉轻震提示达到阈值
步骤2: 用户松开手指
→ 卡片向右飞出 + 淡出(300ms)
→ 触觉双击确认 + 完成"叮"音效
→ 状态变更:下一步 → 已完成
→ 偏好写回:同类任务完成时间记录
步骤3: 下一个任务滑入(300ms 缓出)
→ 若有下一个下一步:新卡片滑入
→ 若无下一个:显示"暂时没有任务,去捕获一些吧~"

拆小动作流程:

步骤1: 用户上滑卡片 > 30% 屏高
→ 卡片跟随位移 + 蓝色遮罩 + "拆小"文案
步骤2: 用户松开手指
→ 卡片 Y 轴翻转 180°(400ms)
→ 触觉确认 + 拆小"流水"音效
→ 翻转后显示更小任务
→ "记下了"波纹 + 副文案"下次先拆小"
→ 偏好写回:同类任务动作粒度更小

9.4 轻纠偏完整流程

对齐 prd.md 和 03-brainstorm.md 的 7 种纠偏动作,每种纠偏都有对应的移动端交互和偏好写回。

纠偏移动端交互系统反馈状态变更偏好写回
拆小点击”拆小”按钮 / 上滑卡片”记下了”波纹 + 更小动作下一步 → 更小下一步同类任务动作更小
稍后再出现左滑卡片 → 选择”今天/明天/下周""记下了”波纹 + “下午再回来”下一步 → 稍后再出现学习时段偏好
今天别推点击”今天别推""收到”波纹 + “今天不再递”下一步 → 稍后再出现(今天)降低当天频率
这不是任务左滑卡片 → “归档""归档了”波纹 + “下次类似不进 Todo”下一步 → 已归档改善分类
这很重要长按卡片 / 点击”🔥""已标重要”波纹 + 卡片发光提高优先级提高同类优先级
语气保守纠偏面板输入”语气保守一点""记下了”波纹 + 改写草案回复草案更新学习联系人偏好
这不是截止纠偏面板输入”这不是截止""记下了”波纹 + 改为资料接住待定 → 归并/归档改善截止识别

纠偏面板交互流程:

步骤1: 用户点击纠偏入口(卡片上的"···"按钮)
→ 遮罩淡入(200ms)
→ 纠偏面板从底部滑入(300ms 缓出)
→ 面板显示标题:"这件事你要怎么处理?"
→ 6 个纠偏按钮 + 一句话输入框
步骤2: 用户选择纠偏方式
方式A: 点击按钮(如"拆小")
→ 按钮果冻回弹 + 波纹
→ 触觉轻震
→ 面板退出(300ms 缓入)
→ "记下了"波纹在卡片位置绽放
→ 副文案浮现:"下次先拆小"
方式B: 输入一句话(如"语气保守一点")
→ 输入框聚焦 + 键盘弹出
→ 用户输入 + 点击发送
→ 思考动画"蕉不焦在改..."(2-5s)
→ 改写完成 → "记下了"波纹 + 副文案
步骤3: 偏好写回
→ 偏好写入对应层级(全局/用户/线程)
→ 下次同类任务生效
→ 复盘页展示学习成果

9.5 高代价轻确认流程

对齐 prd.md 4.2 节高代价轻确认,硬截止/对外承诺/删除等不黑箱处理。

触发条件:硬截止 / 对外承诺 / 删除或归档 / 合同付款提交发送 / 客户沟通

轻确认流程:

步骤1: AI 识别为高代价事项
→ 微光流动颜色偏向橙色(注意色)
→ Toast:"这像对外承诺,我先给保守回复草案"
→ 不直接入状态,等待用户确认
步骤2: 显示轻确认
方式A: 简单问题
→ "这是今天必须回复的承诺吗?"
→ [是] [不是,先记为等待]
方式B: 草案确认
→ 显示回复草案
→ [发送] [改一下] [不发了]
方式C: 状态选择
→ "归档还是稍后再出现?"
→ [归档] [稍后再出现]
步骤3: 用户确认
→ 果冻回弹 + "记下了"波纹
→ 状态入库
→ 偏好写回(如适用)

关键约束:

  • 轻确认最多一个问题或一组短按钮,不是审批流
  • 轻确认不阻塞用户继续捕获其他碎片
  • 用户可跳过轻确认(转为接住待定)

9.6 语音倾倒流程

对齐 03-brainstorm.md 路径四,情绪倾倒不等于任务爆炸。

步骤1: 用户长按胶囊录音
→ "我有点乱,报告没做,宿舍费好像要交,还有英语也没背。"
步骤2: 语音转写 + AI 拆分
→ 思考动画"蕉不焦在帮你分开,不会全变成今日 Todo..."(2-5s)
→ 后台拆分为多个碎片:
- 报告下一步
- 宿舍费待确认
- 英语冷冻到本周计划
- 情绪释放(不进 Todo)
步骤3: 多状态反馈
→ 多个状态光依次闪烁(绿/橙/灰蓝/灰)
→ Toast 汇总:"接住 4 件,1 件下一步,1 件待定,1 件冷冻,1 件已释放"
步骤4: 前台只回来一步
→ 动作卡片显示:"现在只做:打开群文件,确认你负责哪一页"
→ 其余事项在后台等待/冷冻/待定
步骤5: 用户可即时纠偏
→ 用户说:"宿舍费今晚截止"
→ 触觉确认 + "记下了"波纹
→ 宿舍费改为高优先级 + 今晚提醒
→ 报告第一步仍保留

9.7 晚间复盘流程

对齐 03-brainstorm.md 路径六,Zeigarnik 显式收束。

步骤1: 晚间 21:00 用户打开 App(或点击推送)
→ 复盘页淡入
→ 温暖问候:"🌙 今天已经很好了"
→ 数字滚动动画:接住 12 / 归并 5 / 冷冻 3 / 等待 2
步骤2: 状态交还
→ "今天接住 12 件,3 件变下一步,5 件归并线程,2 件等待,2 件冷冻。"
→ 不出现"未完成"负面词汇
→ 状态流转图示动画
步骤3: 学习成果展示
→ 智能体状态层:"今天记下了 3 条偏好"
→ "写作类上午不推、客户回复更保守、截图优先当资料"
步骤4: 明天第一步确认
→ "明天只看这一步:打开客户方案,写第一段标题"
→ 按钮:[明天上午别推了] [收到]
步骤5: 用户反馈
→ 点击"明天上午别推了"
→ "记下了"波纹 + "明天上午不推"
→ 偏好写回:写作类任务上午不推
→ 点击"收到"
→ 复盘结束 + 返回首页
→ 触觉双击确认

9.8 异常处理

场景用户感知系统行为触觉/音效
网络断开Toast”离线中,已保存到本地”本地队列,联网后同步警告震动
捕获失败Toast”稍等片刻,再试试”重试 3 次,失败后提示手动输入错误”嗯”
智能体不确定进入”接住待定”状态 + 橙色状态光轻确认弹窗确认震动
用户连续操作快无感知防抖 500ms,避免重复提交无
AI 判断超时Toast”这件有点复杂,先接住了,稍后整理”转为后台处理,不阻塞用户轻触
思考动画超时文案变为”还在想,稍等一下…”继续后台处理,不强制等待无
语音录制失败Toast”没听清,再说一次?“重新开始录制错误”嗯”
截图 OCR 失败Toast”看不太清,手动输入?“提供手动输入入口轻触
存储空间不足Toast”空间不够了,清理一下?“引导清理归档警告震动

9.9 防骚扰机制

对齐 prd.md 6.1 节防骚扰机制:

规则说明
同一任务只通知一次无论是否完成,同一任务不重复通知
3 次不回应降频用户 3 次不回应同类通知,系统自动降低该类型频率
”今天别推”当天生效点击后当天不再递回同类任务
通知不展示任务总数不显示”还有 17 个任务”,避免压力
晚间 21:00 后不主动通知除非硬截止,否则晚间不递回
用户关闭通知理解为信号不催促用户开启通知

10. 适配与无障碍

本章定义屏幕适配、暗黑模式、无障碍和减少动态的完整规范。暗黑模式完整色值映射见第 7.10 节。

10.1 屏幕尺寸适配

设备宽度布局调整胶囊按钮卡片间距
Android 小屏360px紧凑布局,减少留白高度 52px,字号 15px12px
iPhone SE375px紧凑布局,胶囊按钮稍小高度 52px,字号 15px12px
iPhone 14 Pro390px标准布局高度 56px,字号 16px16px
iPhone 14 Pro Max430px舒适布局,可展示更多信息高度 56px,字号 16px16px
Android 大屏450px+舒适布局,卡片最大宽 420px 居中高度 56px,字号 16px20px

适配规则:

  • 所有布局基于 375px 基准设计,其他尺寸等比缩放
  • 卡片最大宽度 420px,大屏居中显示,避免过宽难读
  • 胶囊按钮始终全宽(减去左右边距),保证触达性
  • 安全区适配:顶部状态栏 + 底部 Home Indicator

10.2 暗黑模式

暗黑模式完整色值映射见 第 7.10 节。

切换规则:

  • 跟随系统暗黑模式自动切换(prefers-color-scheme)
  • 用户也可在设置中手动指定(跟随系统/强制亮色/强制暗色)
  • 切换时所有颜色平滑过渡(200ms 缓入缓出)
  • 切换时动画暂停,切换完成后恢复

10.3 无障碍

需求实现WCAG 级别
色盲友好颜色 + 图标双重提示(见状态色映射表 7.2)AA
字体大小跟随系统设置,最大支持 200%AA
屏幕阅读器按钮语义化(aria-label),状态可播报,动效有文字替代AA
减少动态设置中可关闭呼吸、微光、果冻动画,保留必要过渡AA
触控热区所有可点击元素最小 44×44pxAA
对比度文字与背景对比度 ≥ 4.5:1(正文),≥ 3:1(大文字)AA
焦点可见键盘/遥控器导航时焦点可见(2px 主色边框)AA
语义化结构使用语义化标签(header/main/nav/button)A

屏幕阅读器播报规则:

元素播报内容
胶囊按钮”捕获入口按钮,轻触输入,长按语音”
动作卡片”现在只做:[动作内容]。右滑完成,上滑拆小,左滑稍后”
纠偏按钮”[按钮名称]按钮”
Toast自动播报 Toast 文案
状态光不播报(纯视觉)
思考动画”蕉不焦正在思考”

10.4 减少动态模式

动效默认减少动态说明
胶囊呼吸3s 循环关闭装饰性
背景微光8s 循环关闭装饰性
果冻回弹400ms 弹性改为 150ms 线性保留反馈,降低弹性
微光流动3s改为即时状态色显示(无流动)保留状态反馈
思考动画1.2s 循环保留(功能性动画)必要的状态提示
卡片悬浮4s 循环关闭装饰性
波纹扩散800ms关闭装饰性
数字滚动500ms改为即时显示装饰性
页面切换200ms保留(150ms 缓入缓出)必要的过渡

减少动态联动:

  • 触觉和音效也降级(见第 8.3.3 节)
  • 仅保留功能性反馈(确认/错误),关闭装饰性反馈
  • 呼吸/微光/悬浮全部关闭,界面变为静态

10.5 微信小程序适配约束

约束说明应对
包大小限制主包 2MB,分包 20MB音频文件放 CDN 或分包
backdrop-filter 兼容部分 Android 机型不支持降级为半透明纯色背景
动画性能复杂动画可能卡顿用 CSS/wxs 实现,避免 JS 驱动
手势限制无原生 Force Touch暂不实现
返回手势冲突右边缘左滑与系统返回冲突页面切换用左边缘右滑
音频延迟50-100ms 播放延迟设计时预留时序缓冲
震动差异iOS 仅三档强度用 light/medium/heavy 替代自定义

11. 附录

11.1 术语表

术语说明
胶囊按钮底部悬浮的大按钮,主要捕获入口,带呼吸动画
动作卡片聚焦页中央的卡片,显示”现在只做…”
状态条顶部轻状态条,显示今日已接住数量
状态光捕获后边缘闪烁的光效,颜色表示状态
滑动操作卡片上的手势操作(完成/拆小/稍后/重要)
智能体状态层显示 AI 判断过程的微光流动 + 实时文案区域
微光流动AI 判断过程的视觉表达,3 秒内边缘微光缓慢流动
”记下了”动效纠偏后波纹扩散 + 偏好说明文案的确认动效
果冻按钮带弹性回弹触感的按钮,按下缩放 0.92 + 弹性回弹
呼吸感界面元素轻微缩放循环,暗示”随时可点”
智能感AI 判断过程可见但不打扰的设计基调
接住碎片被系统接收并保存到 Todo 底座
归并将碎片放入已有线程,不新增 Todo
冷冻有价值但近期不做的碎片,不提醒,30 天后复盘
递交/递回系统将下一步动作推送给用户,同一时刻只递一步
收束晚间显式交还沉淀结果,释放大脑对未完成事项的追踪
接住待定AI 不确定时,不黑箱处理,交给用户轻扫一眼
轻纠偏一句话、一个按钮、一次滑动完成纠偏,成本趋近于零
轻确认高代价事项不黑箱处理,前台最多一个问题或一组短按钮
沉淀碎片经智能体判断后,被归并、冷冻、等待、归档或变为下一步
下一步当前能开始的一小步,格式”现在只做:[动词] [对象] [边界]“
状态区域拖拽场景中底部浮现的 4 个状态变更热区
果冻回弹按下缩放 0.92 后释放,弹性曲线回弹到 1.0

11.2 状态色速查

状态色值图标
原始碎片#BDBDBD○
下一步#4CAF50▶
等待#90A4AE⏸
归并线程#2196F3⇄
稍后再出现#9E9E9E◐
冷冻#B0BEC5❄
接住待定#FF9800?
已归档#E0E0E0✓

11.3 手势速查

手势主要用途
轻触按钮触发
长按语音录制、标为重要
双击快速完成
上滑截图输入、拆小
下滑显示状态条、刷新
左滑稍后、归档
右滑完成、页面切换
拖拽排序、状态区域
边缘滑动页面切换
双指捏合折叠/展开
摇晃撤销

11.4 动效曲线速查

曲线cubic-bezier用途
弹性cubic-bezier(0.34, 1.56, 0.64, 1)果冻回弹
缓入缓出cubic-bezier(0.4, 0, 0.2, 1)页面切换
缓出cubic-bezier(0.0, 0, 0.2, 1)元素进入
缓入cubic-bezier(0.4, 0, 1, 1)元素退出

11.5 触觉与音效速查

操作触觉音效
按下按钮轻触 10ms无
释放按钮轻触 10ms(延迟 100ms)无
捕获完成双击确认 20ms×2接住”啵”
完成动作双击确认 20ms×2完成”叮”
拆小确认 20ms拆小”流水”
稍后轻触 10ms稍后”轻风”
标为重要强调 50ms重要”嗡"
"记下了”轻触 20ms记下了”叮咚”
页面切换轻触 10ms页面切换”嗖”
思考中心跳 10ms/1.2s无
错误警告 10+15+20ms错误”嗯”
撤销撤销 15+10ms无

11.6 组件尺寸速查

组件关键尺寸圆角
胶囊按钮高 56px,全宽 - 40px999px
动作卡片宽 屏宽 - 40px,最小高 200px,内边距 24px12px
状态条高 44px,全宽无
Toast最大宽 屏宽 - 80px,最小高 48px,内边距 12px 20px12px
纠偏面板全宽,按钮高 44px,间距 12px顶部 16px
纠偏按钮高 44px,3 列 × 2 行12px
输入框高 40px8px
状态光宽 3px,扩散半径 60px无
思考动画圆点直径 6px,间距 8px999px
页面边距左右 20px-
安全区底部34px-
触控热区最小 44×44px-

11.7 纠偏动作速查

纠偏交互反馈偏好写回
拆小点击按钮/上滑”记下了” + 更小动作同类动作更小
稍后左滑 → 选时段”记下了” + “下午再回来”时段偏好
今天别推点击按钮”收到” + “今天不再递”降低当天频率
这不是任务左滑 → 归档”归档了” + “下次不进 Todo”改善分类
这很重要长按/点🔥“已标重要” + 发光提高优先级
语气保守输入一句话”记下了” + 改写草案联系人偏好
这不是截止输入一句话”记下了” + 改为资料截止识别

11.8 对比度合规说明

本文档所有文字色值已验证 WCAG AA 对比度要求:

文字色背景色对比度合规
#212121(主文字)#FAFAFA(页面背景)16.1:1AAA
#212121(主文字)#FFFFFF(卡片背景)16.4:1AAA
#616161(次要文字)#FAFAFA(页面背景)5.8:1AA
#616161(次要文字)#FFFFFF(卡片背景)5.9:1AA
#E0E0E0(暗色主文字)#121212(暗色背景)15.3:1AAA
#9E9E9E(暗色次要文字)#121212(暗色背景)7.3:1AAA
#FFFFFF(按钮文字)#4CAF50(主色按钮)3.4:1AA(大文字)

注意:#FFFFFF 白色文字在 #4CAF50 绿色按钮上对比度为 3.4:1,满足大文字(≥18px 或 bold ≥14px)的 AA 要求(3:1),按钮文字为 16px Medium 满足此条件。

11.9 相关文档

文档说明
01-overview.md产品定位总览:Todo 底座、智能体减负、四个支柱
prd.md产品需求文档:8 种状态模型、轻纠偏机制、沉淀引擎
technical-spec.md技术设计文档:微信小程序技术选型、数据模型、API
03-brainstorm.md操作路径:4 条核心路径、轻纠偏交互
05-deep-research.md学术理论:减负机制的理论支撑与 UX 规则
06-brand-naming-character.md品牌与数字人:人格化边界、话术规范
assessment.md落地性评估
04-product-strategy.md产品策略