+ 我会先核对发布清单与项目知识,再给出不执行变更的更新计划。 +
+ +diff --git a/DESIGN.md b/DESIGN.md index 85ecdaa..a342caa 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -39,6 +39,8 @@ 组件不得直接使用原始颜色值。主题差异只在令牌层定义,业务组件仅引用语义令牌。 +两种主题必须保持相同的信息层级,但不要求机械地反转明暗。浅色主题以白色主内容画布、冰蓝灰侧栏和轻微着色的顶栏建立空间关系;深色主题使用深海军蓝与蓝灰表面逐层提亮,避免纯黑。蓝色承担主要选择和交互,青绿色主要承担成功与可用状态,二者不得混用语义。 + ## 3. 设计令牌 令牌以 CSS 自定义属性实现。`:root` 提供浅色值,`[data-theme="dark"]` 覆盖深色值。组件样式不得新增只服务于单个页面的颜色、阴影、圆角或间距常量。 @@ -69,6 +71,14 @@ 浅色与深色具体值只在 `styles.css` 的主题根节点维护。状态组件必须同时显示文字或图标,不能仅靠颜色区分。 +表面与边框使用规则: + +- 浅色主题的阅读、编辑和页面主内容使用白色或接近白色的 `--surface-raised`;主侧栏使用更深一阶的冰蓝灰 `--surface-canvas`,顶栏使用弱于侧栏的次级表面。相邻区域必须可辨,但不能形成高饱和色块。 +- 深色主题从深海军蓝画布开始,以蓝灰表面逐层提亮。不同层级优先依靠表面亮度与语义边框区分,不使用纯黑底色或无边界的大面积同色区域。 +- 浅色侧栏中,导航与最近会话、最近会话与账户区之间的结构分隔线使用 `--border-default`。列表行之间或卡片内部的弱分隔仍使用 `--border-subtle`,不得为了增强结构而给每一项加重边框。 +- 控件边界、焦点环和选中边框必须达到至少 `3:1` 的非文本对比度;正文、状态色和弱文本分别遵守无障碍对比度要求。 +- 业务组件不得通过主题条件分支写原始颜色;新增视觉层级时先确认能否复用现有表面、边框和状态令牌。 + ### 3.2 间距令牌 采用 4 像素基准: @@ -112,12 +122,12 @@ | 令牌 | 值 | 用途 | | --- | --- | --- | -| `--radius-control` | `8px` | 输入框、按钮、菜单项 | -| `--radius-card` | `12px` | 卡片和面板 | +| `--radius-control` | `10px` | 输入框、按钮、菜单项 | +| `--radius-card` | `14px` | 卡片和面板 | | `--shadow-card` | 主题定义 | 卡片和选中分段控件 | | `--shadow-dialog` | 主题定义 | 对话框和浮层 | -普通卡片通过表面色和边框区分,不默认添加阴影。阴影只表示真实的浮层关系。不允许页面自行创建高于 `--z-dialog` 的层级。 +整体使用适度圆角:控件和卡片保持清晰、克制的几何轮廓,不使用胶囊化的大圆角替代信息层级。普通卡片通过表面色和边框区分,不默认添加阴影;输入区等需要从内容流中明确浮起的持续操作面板可以使用克制的 `--shadow-card`。菜单和对话框使用对应层级阴影,阴影只表示真实的浮层关系。不允许页面自行创建高于 `--z-dialog` 的层级。 ### 3.5 动效令牌 @@ -263,20 +273,40 @@ - 活动记录必须保留操作者、动作、对象、范围、结果和时间等审计语义,不用纯图标代替关键字段。 - 表格密度可以选择“默认”或“紧凑”,但同一页面不得混用。 -### 6.8 应用顶栏与全局菜单 +### 6.8 应用侧栏 + +主侧栏用于一级导航、最近会话和稳定的账户入口,必须通过表面、结构线和选中状态建立清楚但不过度装饰的层级。 + +- 浅色侧栏使用冰蓝灰表面,与白色主内容画布形成明确边界;深色侧栏使用比主画布略亮的蓝灰表面。 +- 一级导航与最近会话之间、最近会话与底部账户区之间必须有可见结构分隔线。浅色主题使用 `--border-default`,深色主题可在可辨前提下使用 `--border-subtle`。 +- 当前导航项和当前会话必须同时使用至少三种信号中的两种:强调背景、可见边框、图标或文字强调。浅色主题的当前项优先使用更完整的蓝色选中表面和较高字重。 +- 未选中项保持平整,不为每一行添加卡片边框或阴影。悬停反馈不得强于选中状态。 +- 账户与设置入口固定在侧栏底部。已有稳定设置入口时,不在顶栏重复提供同一入口。 + +### 6.9 应用顶栏与全局操作 应用顶栏用于窗口级状态、侧栏开关和低频全局操作,不承担页面标题或主要导航。顶栏必须保持紧凑,不能与页面内容争夺注意力。 - 顶栏高度默认为 `58px`,图标按钮使用 `34px × 34px` 点击区域。 - Runtime 状态、同步状态等短标签使用 `--font-caption`,不得放大为正文标题。 -- 全局菜单项使用 `--font-body`,图标为 `14px`,单项高度为 `32px`。 -- 菜单标签使用短名称,例如“安全与 Runtime 设置”“使用帮助”,不得同时使用大字号、粗体和强调色。 -- 全局菜单宽度由最长标签决定,建议为 `180px` 至 `200px`;说明性长文放入目标页面,不放在菜单项中。 -- 顶栏只直接显示当前任务所需的高频操作。设置、帮助、关于和版本检查等低频操作进入同一个全局菜单。 +- 浅色与深色切换属于持续可用的窗口级操作,直接显示太阳或月亮图标,并通过可访问名称说明将切换到的主题。选择必须持久化,切换不得改变布局。 +- 顶栏只直接显示当前任务所需的高频操作。已有侧栏账户设置入口时,不再重复显示 Runtime/设置入口;使用帮助优先放在相关操作附近,而不是为单个帮助项创建“更多”菜单。 +- 只有存在至少两个无法由稳定入口承载的低频全局操作时才增加全局菜单,不为了容纳一个冗余入口而显示省略号按钮。 - 窄窗口下优先压缩状态标签并保留图标按钮,不隐藏窗口控制、当前范围或进行中的风险状态。 -- 菜单使用 `menu`、`menuitem` 语义,支持上下方向键、Home、End 和 Escape,关闭后焦点返回触发按钮。 +- 使用全局菜单时,菜单项使用 `--font-body`、`14px` 图标和约 `32px` 单项高度;标签使用短名称。菜单保留 `menu`、`menuitem` 语义,支持上下方向键、Home、End 和 Escape,关闭后焦点返回触发按钮。 -### 6.9 应用通知与就地反馈 +### 6.10 上下文单选菜单 + +模型、专家角色和工作模式属于同一输入上下文,其选择器必须共享结构、尺寸和菜单视觉,不能出现一个精细菜单与两个风格不一致的原生下拉框。 + +- 触发按钮复用统一的模型选择按钮样式,保持相同高度、圆角、边框、展开指示和焦点状态。 +- 菜单使用 `menu` 与 `menuitemradio` 语义,当前项同时显示选中标记和 `aria-checked`。选项可以包含一行简短说明,但标签和说明不得被截断到无法区分。 +- 支持上、下方向键、Home、End、Enter 或 Space、Escape;打开后焦点进入当前项,关闭后返回触发按钮。 +- 点击或聚焦菜单外部时关闭;同一输入区内的模型、专家和模式菜单互斥展开。 +- 不可用选项保持可读并说明原因,键盘导航不得停留在不可选择项上。 +- 仅在选项简单且不需要说明、禁用原因或一致菜单行为时使用原生 `select`。 + +### 6.11 应用通知与就地反馈 应用级通知统一进入全局通知视口,页面不得自行复制通知卡片或在内容流中长期堆放短期消息。 @@ -355,7 +385,8 @@ ## 10. 深色主题 - 深色主题通过语义令牌替换实现,不在组件中使用主题条件分支选择原始颜色。 -- 表面层级主要依靠亮度和边框区分,避免大面积纯黑与高亮白形成刺眼对比。 +- 主画布使用深海军蓝,侧栏、顶栏、输入区和浮层使用逐级提亮的蓝灰表面;表面层级主要依靠亮度和边框区分,避免大面积纯黑与高亮白形成刺眼对比。 +- 深色强调色使用明亮但不荧光的蓝色,成功状态使用青绿色。用户消息等大面积强调表面使用更深的实心蓝,确保反白文字舒适可读。 - 输入框、代码块、表格悬停、选中行、弹窗遮罩和滚动条必须分别检查深色值。 - 图片、图表和状态色在深色背景下保持可读。图表系列不能只靠色相区分,还应使用形状、线型或标签。 - 焦点环、危险文本和弱文本在两种主题下都满足对比度要求。 @@ -427,6 +458,9 @@ GoodBuddy 是可调整窗口大小的桌面应用。响应式设计优先保证 - 使用 `reading` 壳层,消息流与输入区共享宽度。 - 对话标题和当前项目范围位于 `PageHeader` 或对话上下文区,不在消息流中重复。 - 模式、模型或工具权限属于上下文控制,不与页面导航页签混用。 +- 模型、专家角色和工作模式使用统一的上下文单选菜单,并保持菜单互斥、键盘可达和选中状态明确。 +- “Enter 发送 · Shift+Enter 换行 · 附件仅在选择后发送”等输入操作提示放在空输入框内部,作为主占位文案的次级行;不得在输入框下方单独占用第二行。输入框下方只保留一行当前模式、安全边界或全局快捷键说明。 +- 输入操作提示不能替代表单的可访问名称,输入框始终保留持久的程序化标签。 - 空对话展示可执行的起始建议,发送失败保留输入并提供重试。 ### 13.2 最近对话 @@ -466,6 +500,14 @@ GoodBuddy 是可调整窗口大小的桌面应用。响应式设计优先保证 - 创建、保存、更新、删除和 AI 评论完成等短期结果进入应用级通知,不在编辑区或列表上方堆放页内通知。 - 标题或正文校验、删除确认、同步进度和可就地恢复的错误仍靠近对应编辑器或操作呈现。 +### 13.7 设置中心 + +- 全页设置使用固定标题区、左侧分类导航和独立滚动的内容区。右上角关闭按钮是离开设置中心的稳定入口。 +- 全页设置标题区依靠留白与内容区分层,不在标题下方绘制贯穿整个工作区的分隔线;模态设置可以保留标题边界。 +- 仅包含“关闭”的模态框页脚不得出现在全页设置中,避免重复关闭入口和没有功能意义的整宽分隔线。 +- 当前分类存在“保存”“测试”或“取消”等未提交配置操作时,可以显示操作页脚;页脚分隔线只用于界定这些持续操作。 +- 自动生效的设置不为了显示成功文案而长期占用页脚,通过应用通知提供短期反馈。加载或保存错误仍需保留可处理的上下文。 + ## 14. 文案规则 - 使用简体中文,动词直接、对象明确。 @@ -480,9 +522,11 @@ GoodBuddy 是可调整窗口大小的桌面应用。响应式设计优先保证 ### 15.1 基础层 - [ ] 建立浅色与深色语义颜色令牌,移除业务组件中的原始颜色值。 +- [ ] 建立白色浅色主画布、冰蓝灰侧栏与深海军蓝深色表面的稳定层级。 - [ ] 建立间距、字体、圆角、阴影、层级和动效令牌。 - [ ] 为主题切换、减少动态效果和原生控件设置全局规则。 - [ ] 建立组件交互状态和焦点环基线。 +- [ ] 验证浅色侧栏结构分隔线与导航、会话选中状态清晰可辨。 ### 15.2 页面壳层与层级 @@ -502,14 +546,17 @@ GoodBuddy 是可调整窗口大小的桌面应用。响应式设计优先保证 - [ ] 实现 `ScopeBadge` 并覆盖全局、项目、失效和可切换状态。 - [ ] 实现 `EmptyState` 的首次为空、无结果、失败和只读变体。 - [ ] 实现 `danger-ghost`、`danger-solid` 和 `danger-zone`。 +- [ ] 统一模型、专家角色和工作模式的单选菜单结构、视觉与键盘行为。 ### 15.4 页面迁移 - [ ] 聊天迁移到 `reading`,统一消息流与输入区宽度。 +- [ ] 将输入快捷键与附件提示置于空输入框内部,输入区下方保持单行说明。 - [ ] 最近对话迁移到 `standard`,统一搜索、范围、时间和删除行为。 - [ ] 知识库迁移到 `master-detail`,清除内联浅色样式并补齐窄窗口单面板流程。 - [ ] 智能心跳迁移到 `dashboard`,统一状态卡片、配置和运行历史层级。 - [ ] 任务迁移到 `standard`,活动记录迁移到 `dashboard`,统一导航、筛选和表格行为。 +- [ ] 全页设置移除只含关闭操作的重复页脚,仅为未提交配置保留操作页脚。 ### 15.5 验收 diff --git a/demoui.html b/demoui.html new file mode 100644 index 0000000..f826a4d --- /dev/null +++ b/demoui.html @@ -0,0 +1,1221 @@ + + +
+ + +