paseo-req-kit 1.14.0-beta.5 → 1.15.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/docs/guide//347/273/264/346/212/244/350/200/205/346/214/207/345/215/227.md +2 -0
  3. package/engine/src/review-assets/app.css +153 -234
  4. package/engine/src/review-assets/app.html +44 -32
  5. package/engine/src/review-assets/app.js +11 -7
  6. package/engine/src/review-assets/check.css +11 -56
  7. package/engine/src/review-assets/check.html +48 -22
  8. package/engine/src/review-assets/check.js +169 -86
  9. package/engine/src/review-assets/code.css +15 -92
  10. package/engine/src/review-assets/code.html +41 -26
  11. package/engine/src/review-assets/code.js +196 -101
  12. package/engine/src/review-assets/rk-icons.js +98 -0
  13. package/engine/src/review-assets/rk-tokens.css +252 -0
  14. package/engine/src/review-assets/rk.css +252 -0
  15. package/engine/src/review.ts +6 -4
  16. package/package.json +1 -1
  17. package/paseo-plugin/package.json +1 -1
  18. package/site-dist/404.html +2 -2
  19. package/site-dist/assets/{app.TlOHPtfE.js → app.D5s_yGHZ.js} +1 -1
  20. package/site-dist/assets/changelog.md.RJaBnmnw.js +1 -0
  21. package/site-dist/assets/chunks/@localSearchIndexroot.Dric-MbI.js +1 -0
  22. package/site-dist/assets/chunks/{VPLocalSearchBox.BUVNy7_o.js → VPLocalSearchBox.B4CyDsTr.js} +1 -1
  23. package/site-dist/assets/chunks/{theme.BFeiG1US.js → theme.CCocenmB.js} +2 -2
  24. package/site-dist/assets/{guide_getting-started.md.UhkLCUoY.js → guide_getting-started.md.wFOkpMSx.js} +1 -1
  25. package/site-dist/assets/{guide_getting-started.md.UhkLCUoY.lean.js → guide_getting-started.md.wFOkpMSx.lean.js} +1 -1
  26. package/site-dist/assets/guide_maintainer.md.mFZprBj1.js +1 -0
  27. package/site-dist/assets/{guide_maintainer.md.C1v7EpSY.lean.js → guide_maintainer.md.mFZprBj1.lean.js} +1 -1
  28. package/site-dist/changelog.html +5 -5
  29. package/site-dist/guide/getting-started.html +5 -5
  30. package/site-dist/guide/how-it-works.html +4 -4
  31. package/site-dist/guide/index.html +4 -4
  32. package/site-dist/guide/install.html +4 -4
  33. package/site-dist/guide/maintainer.html +5 -5
  34. package/site-dist/guide/phases.html +4 -4
  35. package/site-dist/guide/project.html +4 -4
  36. package/site-dist/guide/user.html +4 -4
  37. package/site-dist/hashmap.json +1 -1
  38. package/site-dist/index.html +4 -4
  39. package/site-dist/reference/adr/0001-step-agents-under-origin-chat.html +4 -4
  40. package/site-dist/reference/adr/0002-no-directory-switch-in-chat.html +4 -4
  41. package/site-dist/reference/adr/0003-script-engine-not-hub.html +4 -4
  42. package/site-dist/reference/adr/0004-result-files.html +4 -4
  43. package/site-dist/reference/adr/0005-no-default-branch-local-commits-only.html +4 -4
  44. package/site-dist/reference/adr/0006-skill-install-targets.html +4 -4
  45. package/site-dist/reference/adr/0007-own-interview-skill.html +4 -4
  46. package/site-dist/reference/adr/0008-entries-do-not-call-entries.html +4 -4
  47. package/site-dist/reference/adr/0009-versioned-install-layout.html +4 -4
  48. package/site-dist/reference/adr/0010-generated-feature-overview.html +4 -4
  49. package/site-dist/reference/adr/0011-resume-after-completion.html +4 -4
  50. package/site-dist/reference/adr/0012-review-panel.html +4 -4
  51. package/site-dist/reference/adr/0013-no-release-tooling.html +4 -4
  52. package/site-dist/reference/adr/0014-notifier-slot.html +4 -4
  53. package/site-dist/reference/adr/0015-incremental-continue.html +4 -4
  54. package/site-dist/reference/adr/0016-upgrade-from-tags.html +4 -4
  55. package/site-dist/reference/adr/0017-use-paseo-capabilities.html +4 -4
  56. package/site-dist/reference/adr/0018-own-worktree-option.html +4 -4
  57. package/site-dist/reference/adr/0019-parallel-orchestration.html +4 -4
  58. package/site-dist/reference/adr/0020-scheduling-through-the-chat.html +4 -4
  59. package/site-dist/reference/adr/0021-npm-version-manager.html +4 -4
  60. package/site-dist/reference/adr/0022-develop-and-verify-phases.html +4 -4
  61. package/site-dist/reference/adr/0023-types-gate-slices.html +4 -4
  62. package/site-dist/reference/adr/0024-confirm-early-review-axes.html +4 -4
  63. package/site-dist/reference/adr/0025-joint-requirements.html +4 -4
  64. package/site-dist/reference/adr/0026-machine-records-and-api.html +4 -4
  65. package/site-dist/reference/adr/0027-paseo-plugin.html +4 -4
  66. package/site-dist/reference/adr/0028-external-integrations.html +4 -4
  67. package/site-dist/reference/adr/0029-requirements-from-cards.html +4 -4
  68. package/site-dist/reference/adr/0030-card-intake-process.html +4 -4
  69. package/site-dist/reference/adr/0031-fewer-interventions.html +4 -4
  70. package/site-dist/reference/adr/0032-npm-only-install.html +4 -4
  71. package/site-dist/reference/adr/0033-prototype-review-and-ui-check.html +4 -4
  72. package/site-dist/reference/adr/index.html +4 -4
  73. package/site-dist/reference/commands.html +4 -4
  74. package/site-dist/reference/config.html +4 -4
  75. package/site-dist/reference/contracts/cli-json.html +4 -4
  76. package/site-dist/reference/contracts/feature-files.html +4 -4
  77. package/site-dist/reference/contracts/index.html +4 -4
  78. package/site-dist/reference/contracts/notifier-event.html +4 -4
  79. package/site-dist/reference/contracts/result-file.html +4 -4
  80. package/site-dist/reference/contracts/spec.html +4 -4
  81. package/site-dist/reference/contracts/state.html +4 -4
  82. package/site-dist/reference/contracts/usage-record.html +4 -4
  83. package/site-dist/reference/contracts/verify.html +4 -4
  84. package/site-dist/reference/scope.html +4 -4
  85. package/site-dist/assets/changelog.md.DiGi8kHU.js +0 -1
  86. package/site-dist/assets/chunks/@localSearchIndexroot.Dk_-Yka5.js +0 -1
  87. package/site-dist/assets/guide_maintainer.md.C1v7EpSY.js +0 -1
  88. /package/site-dist/assets/{changelog.md.DiGi8kHU.lean.js → changelog.md.RJaBnmnw.lean.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,44 @@
2
2
 
3
3
  每个版本分为"使用者会看到的变化"和"升级须知"。升级步骤见 [docs/guide/安装与升级.md](docs/guide/安装与升级.md)。
4
4
 
5
+ ## 1.15.0-beta.1
6
+
7
+ ### 使用者会看到的变化
8
+
9
+ - **审查原型、验收清单、代码审查三个网页换上了 req-kit 的新设计**(设计规范见仓库 `design/`,和编排平台 CMASTER 同属一个设计家族,主色青柠绿):
10
+ - 统一的顶栏(标志、需求名、功能目录、自动保存时间、只读标记、深浅色切换),底部固定的"决定栏"放这一页要你做的决定,每页只有一个青柠色主按钮;条件不满足时按钮旁边写明还差什么。
11
+ - 代码审查页:AI 评审意见(靛色卡片,带编号、轮次、级别和处理结果)和你写的意见(青柠描边卡片)分开显示;侧栏按"概要 / 代码 / 需求文档"分组;改动摘要卡片显示 AI 评审几轮、修复了几条、还开着几条。
12
+ - 验收清单页:前置条件、操作、预期结果排成表格;侧栏把"先看这些"(流水线没验证、没通过、要你表态的)和"流水线已验证"分开;试用放在一张卡片里。
13
+ - 审查原型页:原型放在点阵画布上;"要看的地方"用靛色虚线框和编号标出,你点选的地方是青柠图钉;有意见时主按钮是"提交修改意见",没有意见时主按钮是"确认方案,开始写代码"。
14
+ - 默认跟随系统的深浅色,右上角可以切换并记住;手机宽度下侧栏变成可横向滑动的一行,决定栏的按钮占满一行。
15
+ - 页面不加载外网字体,内网打开不会等字体超时。
16
+
17
+ ### 升级须知
18
+
19
+ - 页面的接口和行为没有变化,只换了外观。审查服务多提供三个共用文件(`rk-tokens.css`、`rk.css`、`rk-icons.js`),由 `scripts/tokens-build.mjs` 从 `design/` 生成,测试会检查它们和 `design/` 一致。
20
+ - Paseo 插件和文档站的新设计在后面的 beta 里做。
21
+
22
+ ## 1.14.0
23
+
24
+ 稳定版:需求从对齐开始就在插件里,新建工作区能接着做,插件里能做代码审查和验收,危险命令和密钥有程序把关,评审、验收、合并之后的结果有记录可查。内容包括 1.14.0-beta.1 至 beta.5(详见下面各条)。
25
+
26
+ ### 使用者会看到的变化
27
+
28
+ - **修复:自动新建工作区后只有需求说明、没有代码。** 工作区一建好就记下来,再次启动在同一个工作区里接着做;最多等 15 分钟。术语表和设计决定随需求说明一起带过去;需求说明不会再被提交到主分支。
29
+ - **需求从开始谈就出现在插件里**("对齐中");确认了却没开始开发的进"等你处理",点"开始开发"即可,谈需求的对话里也会提醒一次。已经开发完的需求不会误显示为"未开始";同一个需求在两处只列一次。
30
+ - **代码审查**(插件需求页面上的"代码审查",`req code-review`):改动按文件列出,AI 评审意见放在对应的行旁边;评审人在任意一行写意见、标"要改 / 不用改";审核人默认取自 `CODEOWNERS`,提交前可改。退回修改后流水线自动按意见修改,评审通过后有新提交会提示重新评审。
31
+ - **验收清单和一键试用**("验收清单(可一键试用)",`req checklist`、`req try`):按验收标准逐条勾选,提交后写成 `acceptance.md` 并提交;不通过的转给需求的对话处理。
32
+ - **拦截危险命令**(`dangerGuard`):步骤 agent 推送、发布制品、改动集群、连接其他机器上的数据库或主机、删除仓库以外的目录、下载脚本直接执行,或命令里出现配置的生产环境地址时,打断并通知。
33
+ - **密钥扫描**(`secretScan`):每个改代码的步骤之后扫描本需求新增的内容,交回 agent 去掉;有疑似密钥的分支不推送。
34
+ - **记录可查**:代码审查和验收的全文随需求分支提交;结论另记入使用记录。`req stats` 和插件统计新增"人工把关和合并后":评审退回次数、验收通过率、合并进主干的需求、合并后发现的问题(`req outcome`)。
35
+
36
+ ### 升级须知
37
+
38
+ - 新配置都可选:`dangerGuard`(默认开,建议团队配置里把生产环境的主机名、地址写进 `production`)、`secretScan`(默认开)。打开 `dangerGuard` 时流水线每 15 秒读一次步骤 agent 的命令记录,不占模型 token。
39
+ - 合并请求还没有接入,等 shenbing 提供类似 `gh pr create / gh pr merge` 的命令。
40
+ - 状态文件、使用记录、`req api` 和外部通知的新增字段见各 beta 的升级须知;新命令 `req code-review`、`req review-fix`、`req checklist`、`req try`、`req outcome`。
41
+ - 更新后请在 Paseo 中重新加载插件(`req upgrade` 会自动做)。
42
+
5
43
  ## 1.14.0-beta.5
6
44
 
7
45
  ### 使用者会看到的变化
@@ -6,6 +6,7 @@
6
6
 
7
7
  - 先看 [SCOPE.md](../../SCOPE.md) 和 [.out-of-scope/](../../.out-of-scope/):新提议须服务于"帮助非专职开发的同事把一个需求从对齐做到可验收",至少有两个真实场景,并且无法通过项目配置或项目说明解决。
8
8
  - 改动已有的设计决定([docs/adr/](../adr/))时,新增一条 ADR 说明理由,并在旧的一条中注明被哪条取代。
9
+ - 界面的颜色、字体、组件按 `design/`(设计规范,见其中的 README)来;改了 `design/tokens.json`、`design/reference/components.css` 或 `design/examples/icons.js`,运行 `node scripts/tokens-build.mjs` 更新审查网页里的副本。
9
10
  - 改动文件格式(spec、状态文件、结果文件、决策记录等)时,同时更新 [contracts/](../../contracts/)、代码和测试;状态文件的格式变化要加迁移(见 `contracts/state.md`)。
10
11
 
11
12
  ## 2. 改 skill 和提示词的规则
@@ -84,4 +85,5 @@
84
85
  | `evals/` | 评估:样例仓库、用例、对话剧本 |
85
86
  | `contracts/` | 文件格式约定 |
86
87
  | `docs/adr/` | 设计决定 |
88
+ | `design/` | 界面设计规范:tokens、品牌手册、各界面规范、组件、效果图 |
87
89
  | `paseo-plugin/` | Paseo 插件:`client/`(界面,React Native)、`server/`(daemon 侧,运行 `req api`)、`shared/`(RPC 约定)。版本号与根目录的 `package.json` 相同,升版本时两处一起改 |
@@ -1,108 +1,57 @@
1
- :root {
2
- --bg: #f6f7f9;
3
- --surface: #ffffff;
4
- --surface-2: #f1f3f6;
5
- --text: #1c2430;
6
- --muted: #5d6b7c;
7
- --border: #dfe3e9;
8
- --accent: #2457d6;
9
- --accent-text: #ffffff;
10
- --accent-soft: #e8eefc;
11
- --region: #d97706;
12
- --pin: #e11d48;
13
- --ok: #15803d;
14
- --danger: #b91c1c;
15
- --shadow: 0 8px 28px rgba(20, 30, 50, 0.16);
16
- color-scheme: light;
17
- }
18
- @media (prefers-color-scheme: dark) {
19
- :root {
20
- --bg: #12161c;
21
- --surface: #1a2029;
22
- --surface-2: #222a35;
23
- --text: #e6eaf0;
24
- --muted: #9aa7b8;
25
- --border: #2e3846;
26
- --accent: #6f9bff;
27
- --accent-text: #0d1420;
28
- --accent-soft: #1f2c47;
29
- --region: #f59e0b;
30
- --pin: #fb7185;
31
- --ok: #4ade80;
32
- --danger: #f87171;
33
- --shadow: 0 8px 28px rgba(0, 0, 0, 0.5);
34
- color-scheme: dark;
35
- }
36
- }
37
- * {
38
- box-sizing: border-box;
39
- }
40
- [hidden] {
41
- display: none !important;
42
- }
43
- html,
44
- body {
45
- margin: 0;
46
- background: var(--bg);
47
- color: var(--text);
48
- font: 14px/1.55 system-ui, -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
49
- }
1
+ /* The prototype review page (1.15): rk-tokens.css and rk.css first; this file lays out the page and
2
+ styles the parts the script builds (lists, chips, the pop-up). Colors only from --rk-* tokens. */
50
3
  button,
51
4
  input,
52
5
  textarea {
53
6
  font: inherit;
54
7
  color: inherit;
55
8
  }
56
- .top {
57
- position: sticky;
58
- top: 0;
59
- z-index: 10;
60
- background: var(--surface);
61
- border-bottom: 1px solid var(--border);
62
- padding: 12px 20px;
63
- display: flex;
64
- flex-wrap: wrap;
65
- gap: 10px 24px;
66
- align-items: center;
67
- justify-content: space-between;
68
- }
69
- .heading {
9
+ .ap-head {
70
10
  display: flex;
71
- align-items: baseline;
72
- gap: 10px;
73
- min-width: 0;
11
+ flex-direction: column;
12
+ gap: 6px;
13
+ padding: var(--rk-space-6) max(16px, env(safe-area-inset-right, 0px)) 0 max(16px, env(safe-area-inset-left, 0px));
74
14
  }
75
- .eyebrow {
76
- font-size: 12px;
15
+ .ap-head h1 {
16
+ margin: 0;
17
+ font-size: 22px;
18
+ line-height: 30px;
77
19
  font-weight: 600;
78
- color: var(--accent);
79
- white-space: nowrap;
20
+ text-wrap: balance;
80
21
  }
81
- h1 {
82
- font-size: 17px;
22
+ .hint {
83
23
  margin: 0;
84
- overflow: hidden;
85
- text-overflow: ellipsis;
86
- white-space: nowrap;
24
+ color: var(--rk-text-secondary);
25
+ max-width: 68ch;
87
26
  }
88
- .pill {
89
- font-size: 12px;
90
- padding: 2px 10px;
91
- border-radius: 999px;
92
- background: var(--surface-2);
93
- color: var(--muted);
94
- white-space: nowrap;
95
- }
96
- .pill.wait {
97
- background: var(--accent-soft);
98
- color: var(--accent);
99
- font-weight: 600;
27
+ .layout {
28
+ display: grid;
29
+ grid-template-columns: minmax(0, 1fr) 360px;
30
+ gap: var(--rk-space-6);
31
+ padding: var(--rk-space-4) max(16px, env(safe-area-inset-right, 0px)) 120px max(16px, env(safe-area-inset-left, 0px));
32
+ align-items: start;
100
33
  }
101
- .controls {
34
+ @media (max-width: 1000px) {
35
+ .layout {
36
+ grid-template-columns: minmax(0, 1fr);
37
+ padding-bottom: 200px;
38
+ }
39
+ }
40
+ .stage {
41
+ min-width: 0;
42
+ border-radius: var(--rk-radius-xl);
43
+ border: 1px solid var(--rk-border-default);
44
+ overflow: hidden;
45
+ box-shadow: var(--rk-shadow-card);
46
+ }
47
+ .ap-bar {
102
48
  display: flex;
103
49
  flex-wrap: wrap;
104
50
  gap: 8px 16px;
105
51
  align-items: center;
52
+ padding: 8px var(--rk-space-4);
53
+ background: var(--rk-surface-1);
54
+ border-bottom: 1px solid var(--rk-border-default);
106
55
  }
107
56
  .group {
108
57
  display: flex;
@@ -110,79 +59,34 @@ h1 {
110
59
  gap: 6px;
111
60
  }
112
61
  .label {
113
- color: var(--muted);
62
+ color: var(--rk-text-muted);
114
63
  font-size: 12px;
115
64
  }
116
- .seg {
117
- display: inline-flex;
118
- border: 1px solid var(--border);
119
- border-radius: 8px;
120
- overflow: hidden;
65
+ .seg.rk-seg {
121
66
  flex-wrap: wrap;
122
67
  }
123
- .seg button {
124
- border: 0;
125
- background: transparent;
126
- padding: 5px 11px;
127
- cursor: pointer;
128
- font-size: 13px;
129
- }
130
- .seg button + button {
131
- border-left: 1px solid var(--border);
132
- }
133
- .seg button[aria-pressed="true"] {
134
- background: var(--accent);
135
- color: var(--accent-text);
136
- }
137
- .seg button:focus-visible,
138
- .chips button:focus-visible,
139
- .list button:focus-visible,
140
- .actions button:focus-visible,
141
- .pop button:focus-visible {
142
- outline: 2px solid var(--accent);
143
- outline-offset: 2px;
144
- }
145
68
  .check {
146
69
  display: inline-flex;
147
70
  gap: 6px;
148
71
  align-items: center;
149
72
  font-size: 13px;
73
+ color: var(--rk-text-secondary);
150
74
  cursor: pointer;
151
75
  }
152
- .layout {
153
- display: grid;
154
- grid-template-columns: minmax(0, 1fr) 360px;
155
- gap: 16px;
156
- padding: 16px 20px 32px;
157
- align-items: start;
158
- }
159
- @media (max-width: 1000px) {
160
- .layout {
161
- grid-template-columns: 1fr;
162
- }
163
- }
164
- .stage {
165
- min-width: 0;
166
- }
167
- .hint {
168
- margin: 0 0 8px;
169
- color: var(--muted);
170
- font-size: 13px;
76
+ .check input {
77
+ accent-color: var(--rk-brand-500);
171
78
  }
172
79
  .frame-wrap {
173
80
  overflow: auto;
174
- background: repeating-conic-gradient(var(--surface-2) 0% 25%, transparent 0% 50%) 50% / 16px 16px;
175
- border: 1px solid var(--border);
176
- border-radius: 10px;
177
- padding: 12px;
178
- max-height: calc(100vh - 150px);
81
+ padding: var(--rk-space-4);
82
+ max-height: calc(100vh - 200px);
179
83
  }
180
84
  .sizer {
181
85
  position: relative;
182
86
  margin: 0 auto;
183
87
  overflow: hidden;
184
- box-shadow: var(--shadow);
185
- border-radius: 4px;
88
+ box-shadow: var(--rk-shadow-dialog);
89
+ border-radius: 6px;
186
90
  background: #fff;
187
91
  }
188
92
  iframe {
@@ -195,51 +99,68 @@ iframe {
195
99
  transform-origin: 0 0;
196
100
  }
197
101
  .empty {
198
- padding: 40px;
102
+ padding: 48px 24px;
199
103
  text-align: center;
200
- color: var(--muted);
201
- background: var(--surface);
202
- border: 1px dashed var(--border);
203
- border-radius: 10px;
104
+ color: var(--rk-text-secondary);
105
+ background: var(--rk-surface-2);
204
106
  }
205
107
  .side {
206
108
  display: flex;
207
109
  flex-direction: column;
208
- gap: 12px;
110
+ gap: var(--rk-space-3);
209
111
  position: sticky;
210
- top: 80px;
211
- max-height: calc(100vh - 96px);
112
+ top: 64px;
113
+ max-height: calc(100vh - 160px);
212
114
  overflow: auto;
213
115
  }
116
+ @media (max-width: 1000px) {
117
+ .side {
118
+ position: static;
119
+ max-height: none;
120
+ }
121
+ }
214
122
  .card {
215
- background: var(--surface);
216
- border: 1px solid var(--border);
217
- border-radius: 10px;
218
- padding: 12px 14px;
123
+ background: var(--rk-surface-2);
124
+ border: 1px solid var(--rk-border-default);
125
+ border-radius: var(--rk-radius-lg);
126
+ box-shadow: var(--rk-shadow-card);
127
+ padding: 14px var(--rk-space-4);
219
128
  }
220
129
  .card h2,
221
130
  .card summary {
131
+ display: flex;
132
+ align-items: center;
133
+ gap: 8px;
222
134
  font-size: 14px;
223
135
  font-weight: 600;
224
- margin: 0 0 8px;
136
+ margin: 0 0 10px;
225
137
  }
226
138
  .card summary {
227
139
  cursor: pointer;
228
140
  margin: 0;
229
141
  }
230
142
  details[open] summary {
231
- margin-bottom: 6px;
143
+ margin-bottom: 8px;
232
144
  }
233
145
  .card ol {
234
146
  margin: 0;
235
147
  padding-left: 18px;
236
- color: var(--muted);
148
+ color: var(--rk-text-secondary);
149
+ font-size: 13px;
237
150
  }
238
151
  .card ol li + li {
239
152
  margin-top: 4px;
240
153
  }
154
+ .ap-key {
155
+ padding: 0 4px;
156
+ border-radius: 4px;
157
+ }
158
+ .ap-key--region {
159
+ outline: 1.5px dashed var(--rk-ai);
160
+ color: var(--rk-ai);
161
+ }
241
162
  .count {
242
- color: var(--muted);
163
+ color: var(--rk-text-muted);
243
164
  font-weight: 400;
244
165
  }
245
166
  .list {
@@ -248,42 +169,45 @@ details[open] summary {
248
169
  padding: 0;
249
170
  display: flex;
250
171
  flex-direction: column;
251
- gap: 6px;
172
+ gap: 8px;
252
173
  }
253
174
  .list li {
254
- border: 1px solid var(--border);
255
- border-radius: 8px;
256
- padding: 8px 10px;
257
- background: var(--surface);
175
+ border: 1px solid var(--rk-border-default);
176
+ border-radius: var(--rk-radius-md);
177
+ padding: 10px 12px;
178
+ background: var(--rk-surface-1);
179
+ }
180
+ #comments li:has(.badge.pin) {
181
+ border-color: var(--rk-brand-edge);
258
182
  }
259
183
  .list li.flash {
260
- border-color: var(--accent);
261
- background: var(--accent-soft);
184
+ border-color: var(--rk-brand-500);
185
+ background: var(--rk-brand-tint);
262
186
  }
263
187
  .list .row {
264
188
  display: flex;
265
- gap: 8px;
189
+ gap: 10px;
266
190
  align-items: flex-start;
267
191
  }
268
192
  .badge {
269
193
  flex: none;
270
194
  min-width: 22px;
271
195
  height: 22px;
272
- border-radius: 999px;
196
+ border-radius: var(--rk-radius-pill);
273
197
  display: inline-flex;
274
198
  align-items: center;
275
199
  justify-content: center;
276
- font-size: 12px;
277
- font-weight: 700;
200
+ font: 700 12px/1 var(--rk-font-mono);
278
201
  padding: 0 6px;
279
202
  }
280
203
  .badge.region {
281
- background: var(--region);
282
- color: #111;
204
+ background: var(--rk-ai-tint);
205
+ color: var(--rk-ai);
206
+ box-shadow: inset 0 0 0 1.5px var(--rk-ai);
283
207
  }
284
208
  .badge.pin {
285
- background: var(--pin);
286
- color: #fff;
209
+ background: var(--rk-brand-500);
210
+ color: var(--rk-on-brand);
287
211
  }
288
212
  .grow {
289
213
  flex: 1;
@@ -293,100 +217,88 @@ details[open] summary {
293
217
  font-weight: 600;
294
218
  }
295
219
  .muted {
296
- color: var(--muted);
220
+ color: var(--rk-text-secondary);
297
221
  }
298
222
  .small {
299
223
  font-size: 12px;
224
+ line-height: 18px;
300
225
  }
301
226
  .linkish {
302
227
  border: 0;
303
228
  background: none;
304
- color: var(--accent);
229
+ color: var(--rk-brand-text);
305
230
  cursor: pointer;
306
- padding: 0 2px;
231
+ padding: 2px 4px;
307
232
  font-size: 12px;
233
+ font-weight: 600;
234
+ border-radius: 4px;
235
+ }
236
+ .linkish:hover {
237
+ background: var(--rk-surface-3);
308
238
  }
309
239
  .linkish.danger {
310
- color: var(--danger);
240
+ color: var(--rk-status-failed);
241
+ }
242
+ .linkish:focus-visible,
243
+ .chips button:focus-visible {
244
+ outline: 2px solid var(--rk-focus-ring);
245
+ outline-offset: 2px;
311
246
  }
312
247
  .field {
313
248
  display: flex;
314
249
  flex-direction: column;
315
250
  gap: 4px;
316
- margin-top: 8px;
251
+ margin-top: 10px;
317
252
  }
318
253
  .field span {
319
254
  font-size: 12px;
320
- color: var(--muted);
255
+ font-weight: 600;
256
+ color: var(--rk-text-secondary);
321
257
  }
322
258
  .field input,
323
259
  .field textarea {
324
260
  width: 100%;
325
- border: 1px solid var(--border);
326
- border-radius: 8px;
327
- padding: 7px 9px;
328
- background: var(--surface);
261
+ box-sizing: border-box;
262
+ border: 1px solid var(--rk-border-default);
263
+ border-radius: var(--rk-radius-md);
264
+ padding: 7px 10px;
265
+ background: var(--rk-surface-3);
266
+ color: var(--rk-text-primary);
329
267
  resize: vertical;
330
268
  }
331
269
  .field input:focus,
332
270
  .field textarea:focus {
333
- outline: 2px solid var(--accent);
334
- outline-offset: 0;
335
- border-color: transparent;
336
- }
337
- .actions {
338
- display: flex;
339
- flex-direction: column;
340
- gap: 8px;
341
- }
342
- .actions p {
343
- margin: 0;
344
- }
345
- button.primary,
346
- button.secondary {
347
- border-radius: 8px;
348
- padding: 9px 14px;
349
- cursor: pointer;
350
- font-weight: 600;
351
- }
352
- button.primary {
353
- background: var(--accent);
354
- color: var(--accent-text);
355
- border: 1px solid var(--accent);
356
- }
357
- button.secondary {
358
- background: var(--surface);
359
- border: 1px solid var(--border);
360
- }
361
- button:disabled {
362
- opacity: 0.45;
363
- cursor: not-allowed;
271
+ outline: none;
272
+ border-color: var(--rk-brand-edge);
273
+ box-shadow: 0 0 0 3px var(--rk-brand-tint);
364
274
  }
365
275
  .result.ok {
366
- color: var(--ok);
276
+ color: var(--rk-status-success);
367
277
  }
368
278
  .result.err {
369
- color: var(--danger);
279
+ color: var(--rk-status-failed);
370
280
  }
371
281
  .pop {
372
282
  position: fixed;
373
- z-index: 50;
374
- width: 340px;
283
+ z-index: var(--rk-z-modal);
284
+ width: 360px;
375
285
  max-width: calc(100vw - 24px);
376
- background: var(--surface);
377
- border: 1px solid var(--border);
378
- border-radius: 12px;
379
- box-shadow: var(--shadow);
380
- padding: 12px 14px;
286
+ box-sizing: border-box;
287
+ background: var(--rk-surface-1);
288
+ border: 1px solid var(--rk-border-default);
289
+ border-radius: var(--rk-radius-xl);
290
+ box-shadow: var(--rk-shadow-dialog);
291
+ padding: var(--rk-space-4);
381
292
  }
382
293
  .pop-title {
383
294
  margin: 0;
295
+ font-size: 15px;
384
296
  font-weight: 600;
385
297
  }
386
298
  .pop-sub {
387
- margin: 2px 0 8px;
299
+ margin: 2px 0 10px;
388
300
  font-size: 12px;
389
- color: var(--muted);
301
+ color: var(--rk-text-muted);
390
302
  }
391
303
  .chips {
392
304
  display: flex;
@@ -394,27 +306,34 @@ button:disabled {
394
306
  gap: 6px;
395
307
  }
396
308
  .chips button {
397
- border: 1px solid var(--border);
398
- background: var(--surface);
399
- border-radius: 999px;
400
- padding: 4px 11px;
309
+ height: 30px;
310
+ border: 1px solid var(--rk-border-default);
311
+ background: var(--rk-surface-2);
312
+ color: var(--rk-text-secondary);
313
+ border-radius: var(--rk-radius-pill);
314
+ padding: 0 12px;
401
315
  cursor: pointer;
402
316
  font-size: 13px;
317
+ font-weight: 600;
318
+ }
319
+ .chips button:hover {
320
+ border-color: var(--rk-border-strong);
321
+ color: var(--rk-text-primary);
403
322
  }
404
323
  .chips button[aria-checked="true"] {
405
- background: var(--accent);
406
- border-color: var(--accent);
407
- color: var(--accent-text);
324
+ background: var(--rk-brand-500);
325
+ border-color: var(--rk-brand-edge);
326
+ color: var(--rk-on-brand);
408
327
  }
409
328
  .pop-actions {
410
329
  display: flex;
411
330
  justify-content: flex-end;
412
331
  gap: 8px;
413
- margin-top: 10px;
332
+ margin-top: 12px;
414
333
  }
415
334
  .diff-list {
416
335
  margin: 6px 0 0;
417
336
  padding-left: 18px;
418
- color: var(--muted);
337
+ color: var(--rk-text-secondary);
419
338
  font-size: 13px;
420
339
  }