Skip to content

feat(desktop): 登录页面板、控件与主按钮并入墨水口径 - #7559

Open
kirozeng wants to merge 5 commits into
makecindy:mainfrom
kirozeng:feat/login-ink-surfaces
Open

kirozeng wants to merge 5 commits into
makecindy:mainfrom
kirozeng:feat/login-ink-surfaces

Conversation

@kirozeng

@kirozeng kirozeng commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

这次改了什么

摘要

登录页的文字已经在 #6922 并入了主界面的墨水阶梯,但面板、输入框、按钮、描边和悬停 / 按下效果还是登录页自己的一套「墨黑–米白反色」实色,和主界面不是一个口径。深色下尤其明显:输入框比面板还暗,禁用按钮是一块亮灰,比可用按钮还显眼。

这个 PR 把这些也换成主界面 Cindy 皮肤的对应颜色。login-* 仍是独立的 token 族,只跟随亮 / 深两种模式,不受用户扩展主题影响;变的只是取值。方案先出了亮 / 深两套对比稿,由设计负责人确认后实施(深色面板在 #1F1F1F 与 #272727 两个候选里选了 #1F1F1F)。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:登录页并入墨水口径的后续(feat(desktop): 登录页文字并入墨水阶梯,移除 figma-component-spec #6922 只改了文字;当时在 DESIGN.md §16.5 登记的「叠层仍为旧值」缺口由本 PR 关闭)
  • 本 PR 包含:
    • 面板:主界面卡片面 surface-elevated(亮 #FDFDF8 / 深 #1F1F1F)。
    • 输入框、方式行、返回钮、协议弹窗「不同意」钮、协议单选底:墨水填充 surface-chip(黑 5% / 白 6%)。
    • 所有描边:墨水线 border-default(黑 8% / 白 10%);聚焦 / 已填描边和重发链接用正文档,链接 hover 说明档、pressed 强调档。
    • 主按钮、第三方圆钮、「同意」钮、单选选中:主界面反相 CTA(#3C3F43 底 #FCFCFC 字 / #EEEEEE 底 #151515 字),去掉原来的描边。
    • hover / pressed:填充控件叠同色墨水加深一档(合成后约等于主界面 8% / 10% 选中档、10% / 13% 弱档);反相按钮叠黑,亮色 20% / 40%,深色 5% / 10%(深色主按钮 hover 原本就等于主界面 #E2E2E2,取值不变)。
    • Apple 圆钮:新增 login-overlay-apple-hover / -pressed 两个 token。它的底色由 Apple 规范决定(亮黑 / 深白),亮色黑圆叠黑没有反馈。
    • 禁用主按钮:墨水填充 + 占位档文字,去掉「深底叠白 70%」和文字上额外的 80% 透明度;login-disabled-button-overlay 随之无用,已删除(第三个提交)。
    • 注销提示气泡、启动页进度条与加载环轨道:同一口径。
    • 浏览器登录回调页(oauthResultPage.ts,内联常量):页面底、卡片、描边、CTA 同步;CTA 叠层改挂 background-image,叠黑时不再压暗按钮文字。
    • 守护测试:loginInkLadder.test.ts 新增 30 组「登录 token = 主界面对应角色」逐值断言,回调页 6 个 CSS 变量同理。改主界面颜色而登录页没跟上会直接报错。
    • 新增单页验证场景 pnpm ui:check --page login-skin(第二个提交):真实组件,六个场景,用真实鼠标悬停 / 按住截图,以后改登录页可直接 --compare 出改前 / 改后。
    • 文档:DESIGN.md §16 改写现行规则,删除已被取代的 2026-07-24 Figma 状态矩阵,更正「手机与桌面登录色同名同值」等已不成立的说法;cindy-design-system.md 版本记录、决策日志、token 决策表、设计台账同步。
  • 明确不包含:Mobile 登录皮(apps/mobile,另行收拢);服务端那份浏览器回调页模板需要从本仓重新导出;尺寸、布局、文案、品牌红、错误红、Apple 圆钮底色、协议弹窗遮罩均不变。
  • 用户可见变化:Desktop 登录页、启动页、浏览器登录回调页、旧账号迁移弹窗的颜色。亮色变化较细(面板偏暖、主按钮由暖黑变为 #3C3F43、禁用钮变浅);深色变化明显(面板变暗到 #1F1F1F,控件改为比面板亮一档,禁用钮不再是亮灰)。
  • 是否存在 breaking change:无。login-* 42 个改值、新增 2 个(login-overlay-apple-hover / -pressed)、删除 1 个已无作用的 login-disabled-button-overlay(login-* 受主题导入保护,用户主题不会引用它);颜色注册总数 568 → 569,两处计数测试相应更新。

UI 变化

截图来源:单页验证 pnpm ui:check --page login-skin --case all --theme all --compare,macOS · Electron 42.11.12(Chromium 148,与 Cindy 同一渲染内核)。真实组件与主题,场景数据,不是登录账号下的完整 Cindy。改前 = 0694ed7e00(当前 main),改后 = 本分支(截图时为 5acb44cd10;第三个提交只删除透明叠层与改文档,渲染不变,已重跑 ui:check 12/12 通过)。12/12 个场景通过。圆钮里的 A / G / 楼宇是占位字形,不是真实社交图标资产。

亮色 · 整屏

亮色整屏

亮色 · 悬停 / 按下 / 聚焦(真实鼠标操作)

亮色状态

深色 · 整屏

深色整屏

深色 · 悬停 / 按下 / 聚焦(真实鼠标操作)

深色状态

ui:check 原始总览图

单页验证截图 1/2
单页验证截图 2/2

  • 引用的设计规范:
    • DESIGN.md §16.1(本 PR 改写):登录页面板 / 控件 / 描边 / 主按钮取 CINDY 主界面对应角色,仍为独立 login-* token、不随扩展主题。
    • DESIGN.md §16.5 第 1 条与「disabled 态」(本 PR 改写):hover / pressed 叠层取值、Apple 圆钮例外、禁用态写法;叠层挂在内容之下。
    • DESIGN.md §15.16 与 token-decision-table.md §9.2–§9.4:面阶梯、墨水交互态(5% / 8% / 10% / 13%、边框 8% / 10%)与文字档的取值来源。
    • DESIGN.md §10「Light / Dark 双模式交付门槛」:两模式都已实现,并在单页验证里亮 / 深各截一遍。
    • design-governance.md §7:本 PR 属于改设计数值(含新增 2 个 token),设计批准见上方摘要。

怎么验证的

自动验证

pnpm test:unit:related
结果:通过(apps/desktop related 11 个、packages/design-tokens related 5 个;desktop 141.6s、design-tokens 21.6s)

pnpm --filter desktop exec vitest run src/renderer/themes src/renderer/components/login src/renderer/components/splash src/renderer/components/auth src/main/__tests__/oauthResultPage.test.ts
结果:43 个文件 / 663 项通过(变基到 0694ed7e00 后重跑)

pnpm --filter @cindy/design-tokens test
结果:47 项通过

pnpm --filter @cindy/design-tokens check:generated
结果:通过(生成物与源一致)

pnpm --filter desktop run typecheck
pnpm --filter @cindy/design-tokens run typecheck
结果:均通过

node scripts/hardcoded-color-audit.mjs --worktree
node scripts/design-inventory.mjs --check
pnpm check:dev-docs
pnpm check:dco
结果:均通过

pnpm ui:check --page login-skin --case all --theme all --compare
结果:UI_CHECK passed 12/12 variants

测试价值(新增 / 改写的测试):

  • loginInkLadder.test.ts:新增「登录面板 / 控件 / 主按钮 = 主界面墨水口径」30 组 × 亮 / 深断言,回调页 CSS 变量从 3 个扩到 9 个。最小失败输入:任一侧单独改值(例如只改 cindy-dark 的 surface-elevated)即红。单独运行 99 项、约 0.3s。
  • desktop-color-defaults.json(冻结快照)、production.test.ts / generatedEffortInitialization.test.ts 的计数 568 → 569:按治理合同显式更新独立预期,不是放宽断言。
  • oauthResultPage.test.ts:页面底与卡片色断言换成新值。
  • scripts/fixtures/login-skin/:新增单页验证场景,不进单测,ui:check 运行约 12s。

手工验证

逐张看过上面 4 张对照图(亮 / 深 × 整屏 / 状态):改前一侧与 main 现状一致,改后一侧的面板、控件、描边、主按钮、禁用态与各 hover / pressed 符合 §16.1 / §16.5;亮色主按钮按下(叠黑 40%)明显深于悬停(20%)。

未执行的验证

  • 没有在登录账号下的完整 Cindy 里实机走查:登录画布整体缩放、立绘 / 字标品牌层、真实社交图标资产、Windows 渲染都没覆盖。单页验证用的是真实组件和主题,但不是完整应用。
  • 浏览器登录回调页只做了生成 HTML 的单测和 CSS 变量断言,没有在系统浏览器里截图。
  • Mobile 不在本 PR 范围。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:设计数值调整(login-* 42 个改值、2 个新增、1 个删除),用户可见的视觉变化

影响与回滚

  • 影响范围:只影响 Desktop 登录链路(登录页、添加账号页、启动页、浏览器回调页、旧账号迁移弹窗)的颜色;login-* 受主题导入保护,扩展主题与用户自定义主题不受影响;不改任何几何、交互逻辑或数据。
  • 回滚 / 降级方式:整体 revert 本 PR 三个提交即可恢复原取值;颜色值都由 packages/design-tokens 生成,没有数据迁移。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO)
  • UI 改动已在「UI 变化」注明引用的设计规范章节(不涉及 UI 则跳过)
  • 未提交凭证、令牌或授权文件
  • 已核对受影响的文档,行为变化涉及的旧结论已同步修订(不涉及则无需修改文档)
  • 已确认测试结果或说明未执行原因

- 面板改用 CINDY 主界面卡片面(亮 #FDFDF8 / 暗 #1F1F1F,深色按用户选的方案 A);
  输入框、方式行、返回钮、协议弹窗次级钮与单选底改用墨水填充(黑 5% / 白 6%),
  描边统一为墨水线(黑 8% / 白 10%),聚焦描边与重发链接改用墨水正文档。
- 主按钮、第三方圆钮、「同意」钮与单选选中改用主界面反相 CTA
  (#3C3F43 / #FCFCFC,#EEEEEE / #151515),不再另加描边。
- hover / pressed:填充控件叠同色墨水加深一档;反相按钮叠黑(亮 20% / 40%,
  暗 5% / 10%);Apple 圆钮新增 login-overlay-apple-* 两个 token,避免黑圆叠黑无反馈。
- 禁用主按钮改为墨水填充 + 占位档文字,去掉白 70% 叠层与文字 80% 透明度。
- 浏览器登录回调页的页面底、卡片、描边与 CTA 同步;CTA 叠层改挂 background-image,
  不再压暗文字。
- loginInkLadder.test.ts 新增 30 组登录 token ↔ 主界面角色同值断言,回调页 CSS 变量同理。
- DESIGN.md §16 改写现行规则,关闭「叠层仍为旧值」的已知缺口;决策日志补记。
- Mobile 登录皮不在本次范围。

Signed-off-by: kirozeng <kirozeng@gmail.com>
注册 pnpm ui:check --page login-skin:用真实 LoginControls 组件渲染邮箱登录、验证码、选择登录方式、SSO 候选层、加载环与协议弹窗六个场景,亮 / 深两色;check 里用真实鼠标悬停、按住主按钮、第三方圆钮、Apple 圆钮、返回钮、重发链接、方式行与协议弹窗按钮并截图。配合 --compare 可直接出改前 / 改后对照。

Signed-off-by: kirozeng <kirozeng@gmail.com>
@kirozeng
kirozeng requested a review from a team as a code owner October 27, 2026 16:31
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-27T18:07:58.357637Z 54d7a95 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@greptile-apps

greptile-apps Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 4/5

[Medium impact] The changes reach Desktop’s login and account setup screens, splash screen, and browser login callback.

可以合并;建议补齐回调按钮交互颜色的同步测试。

Findings

  1. P2 回调按钮交互颜色漏测 ▶
Fix with agent prompt
### Issue 1
apps/desktop/src/renderer/themes/__tests__/loginInkLadder.test.ts:100-105
新增的 `CALLBACK_VARS` 没有比较 `--cta-hover` 和 `--cta-active`。这两个值仍在 `oauthResultPage.ts` 中手写,本次也修改了亮色取值。以后只改登录按钮的叠层,测试仍会通过,回调页却会保留旧颜色。

建议增加断言,将浅色、强制深色和系统深色三段规则中的这两个值,分别与 `login-overlay-button-hover`、`login-overlay-button-pressed` 比较。这是一项非阻塞的测试补充。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Summary

将 Desktop 登录链路的面板、控件、描边和主按钮统一到 CINDY 墨水配色,保留独立的 login-* token。

  • Desktop login screens and related surfaces now use Cindy’s ink colors.
  • Browser login callback pages now match the Desktop login colors.

范围说明:kirozeng 已明确 Mobile 配色另行收拢,服务端回调模板另行导出;本次不将这些已说明的范围外工作列为问题。

Reviews (1) · Last reviewed commit: "test(desktop): 新增登录页单页验证场景 login-skin" · Reviewed by Greptile

Comment thread apps/desktop/src/renderer/themes/__tests__/loginInkLadder.test.ts
- 禁用主按钮改为墨水填充 + 占位字后,login-disabled-button-overlay 恒为透明却仍在叠层:删除该 token 与组件里的叠层类,颜色注册总数 570 → 569。
- 第三方圆钮的 hover / pressed 类名只把颜色做二选一,不再整串重复。
- LoginControls 顶部注释改为现行口径(叠层全部走 --login-overlay-*,内容在叠层之上)。
- DESIGN.md §16:更正「手机与桌面登录色同名同值」「两端同 token 同值」等已不成立的说法,验收入口改为 pnpm ui:check --page login-skin;cindy-design-system.md 版本记录、决策日志、token 决策表同步。

Signed-off-by: kirozeng <kirozeng@gmail.com>
DESIGN.md §16.1 的登录色值表自 DS-8 起由 packages/design-tokens 生成,治理合同 §11 处置表仍写「人工维护」,与同表上一行 §10 的写法不一致。

Signed-off-by: kirozeng <kirozeng@gmail.com>
oauthResultPage 的 --cta-hover / --cta-active 是登录主按钮叠层的内联副本,此前只比较了颜色角色没比较叠层。三段规则(浅色、强制深色、系统深色)分别与 login-overlay-button-hover / -pressed 比较;临时把亮色按下改回 30% 验证会红。

Signed-off-by: kirozeng <kirozeng@gmail.com>
@kirozeng

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 54d7a95ce7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

registerColor('login-primary-button-bg', GENERATED_DEFAULTS["login-primary-button-bg"], 'Login — 主按钮/第三方圆钮底(同主界面反相 CTA accent-cta-bg-pure:#3C3F43 / #EEEEEE;社交圆图标保品牌色)');
registerColor('login-primary-button-border', GENERATED_DEFAULTS["login-primary-button-border"], 'Login — 主按钮/圆钮描边(与底同色,同主界面 CTA 不另描边)');
registerColor('login-primary-button-text', GENERATED_DEFAULTS["login-primary-button-text"], 'Login — 主按钮文字(同主界面 accent-pure-cta-fg:#FCFCFC / #151515)');
registerColor('login-disabled-button-bg', GENERATED_DEFAULTS["login-disabled-button-bg"], 'Login — disabled 主按钮底(墨水填充 黑 5% / 白 6%,与输入框同档)');

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 保留已退役的登录 Token ID

这里在改写禁用态注册项时同时从 DTCG、bindings 和 registerColor 删除了 login-disabled-button-overlay,但父版本已将该 ID 对外注册,旧版“导出当前主题”也会把它写入本地主题;升级后 exportThemeColors 只遍历现有 registry,因此该键会从再次导出的主题中消失且默认值无法再解析。design-governance.md §4 明确要求旧 Token ID 不得删除或改名,即使组件已不再消费,也应保留为 deprecated/retained 兼容项。

AGENTS.md reference: AGENTS.md:L97-L100

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants