codexmate 0.0.20 → 0.0.22

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 (96) hide show
  1. package/README.md +289 -152
  2. package/README.zh.md +321 -0
  3. package/cli/agents-files.js +224 -0
  4. package/cli/archive-helpers.js +446 -0
  5. package/cli/auth-profiles.js +359 -0
  6. package/cli/builtin-proxy.js +1044 -0
  7. package/cli/claude-proxy.js +998 -0
  8. package/cli/config-bootstrap.js +384 -0
  9. package/cli/openai-bridge.js +950 -0
  10. package/cli/openclaw-config.js +629 -0
  11. package/cli/session-usage.concurrent.js +28 -0
  12. package/cli/session-usage.js +112 -0
  13. package/cli/session-usage.models.js +176 -0
  14. package/cli/skills.js +1141 -0
  15. package/cli/zip-commands.js +510 -0
  16. package/cli.js +9408 -9719
  17. package/lib/cli-models-utils.js +109 -1
  18. package/lib/cli-path-utils.js +69 -0
  19. package/lib/cli-sessions.js +386 -0
  20. package/lib/download-artifacts.js +77 -0
  21. package/lib/task-orchestrator.js +869 -0
  22. package/package.json +14 -10
  23. package/res/logo.png +0 -0
  24. package/res/vue.global.prod.js +13 -0
  25. package/web-ui/app.js +193 -15
  26. package/web-ui/index.html +5 -1
  27. package/web-ui/logic.agents-diff.mjs +1 -1
  28. package/web-ui/logic.claude.mjs +60 -0
  29. package/web-ui/logic.runtime.mjs +11 -7
  30. package/web-ui/logic.sessions.mjs +372 -21
  31. package/web-ui/modules/api.mjs +22 -1
  32. package/web-ui/modules/app.computed.dashboard.mjs +23 -10
  33. package/web-ui/modules/app.computed.index.mjs +4 -0
  34. package/web-ui/modules/app.computed.main-tabs.mjs +198 -0
  35. package/web-ui/modules/app.computed.session.mjs +521 -9
  36. package/web-ui/modules/app.methods.agents.mjs +62 -11
  37. package/web-ui/modules/app.methods.codex-config.mjs +189 -34
  38. package/web-ui/modules/app.methods.index.mjs +7 -1
  39. package/web-ui/modules/app.methods.install.mjs +24 -20
  40. package/web-ui/modules/app.methods.navigation.mjs +142 -1
  41. package/web-ui/modules/app.methods.openclaw-core.mjs +339 -39
  42. package/web-ui/modules/app.methods.openclaw-editing.mjs +39 -4
  43. package/web-ui/modules/app.methods.openclaw-persist.mjs +122 -4
  44. package/web-ui/modules/app.methods.providers.mjs +192 -53
  45. package/web-ui/modules/app.methods.session-actions.mjs +99 -19
  46. package/web-ui/modules/app.methods.session-browser.mjs +196 -5
  47. package/web-ui/modules/app.methods.session-timeline.mjs +22 -15
  48. package/web-ui/modules/app.methods.session-trash.mjs +3 -0
  49. package/web-ui/modules/app.methods.startup-claude.mjs +70 -71
  50. package/web-ui/modules/app.methods.task-orchestration.mjs +471 -0
  51. package/web-ui/modules/config-mode.computed.mjs +2 -0
  52. package/web-ui/modules/config-template-confirm-pref.mjs +33 -0
  53. package/web-ui/modules/i18n.mjs +1609 -0
  54. package/web-ui/modules/plugins.computed.mjs +220 -0
  55. package/web-ui/modules/plugins.methods.mjs +620 -0
  56. package/web-ui/modules/plugins.storage.mjs +37 -0
  57. package/web-ui/partials/index/layout-footer.html +1 -57
  58. package/web-ui/partials/index/layout-header.html +299 -175
  59. package/web-ui/partials/index/modal-config-template-agents.html +79 -29
  60. package/web-ui/partials/index/modal-confirm-toast.html +1 -1
  61. package/web-ui/partials/index/modal-health-check.html +14 -14
  62. package/web-ui/partials/index/modal-openclaw-config.html +47 -42
  63. package/web-ui/partials/index/modal-skills.html +130 -114
  64. package/web-ui/partials/index/modals-basic.html +71 -102
  65. package/web-ui/partials/index/panel-config-claude.html +50 -12
  66. package/web-ui/partials/index/panel-config-codex.html +34 -37
  67. package/web-ui/partials/index/panel-config-openclaw.html +10 -16
  68. package/web-ui/partials/index/panel-docs.html +147 -0
  69. package/web-ui/partials/index/panel-market.html +38 -38
  70. package/web-ui/partials/index/panel-orchestration.html +397 -0
  71. package/web-ui/partials/index/panel-plugins.html +243 -0
  72. package/web-ui/partials/index/panel-sessions.html +51 -146
  73. package/web-ui/partials/index/panel-settings.html +188 -96
  74. package/web-ui/partials/index/panel-usage.html +353 -0
  75. package/web-ui/session-helpers.mjs +221 -10
  76. package/web-ui/styles/base-theme.css +120 -229
  77. package/web-ui/styles/controls-forms.css +59 -51
  78. package/web-ui/styles/docs-panel.css +247 -0
  79. package/web-ui/styles/layout-shell.css +394 -128
  80. package/web-ui/styles/modals-core.css +18 -3
  81. package/web-ui/styles/navigation-panels.css +184 -183
  82. package/web-ui/styles/plugins-panel.css +518 -0
  83. package/web-ui/styles/responsive.css +102 -62
  84. package/web-ui/styles/sessions-list.css +13 -27
  85. package/web-ui/styles/sessions-preview.css +13 -7
  86. package/web-ui/styles/sessions-toolbar-trash.css +25 -0
  87. package/web-ui/styles/sessions-usage.css +581 -6
  88. package/web-ui/styles/settings-panel.css +166 -0
  89. package/web-ui/styles/skills-list.css +16 -11
  90. package/web-ui/styles/skills-market.css +63 -2
  91. package/web-ui/styles/task-orchestration.css +776 -0
  92. package/web-ui/styles/titles-cards.css +67 -66
  93. package/web-ui/styles.css +4 -0
  94. package/README.en.md +0 -259
  95. package/res/screenshot.png +0 -0
  96. package/res/vue.global.js +0 -18552
@@ -4,35 +4,35 @@
4
4
  设计系统 - Design Tokens
5
5
  ============================================ */
6
6
  :root {
7
- /* 色彩系统:去除杂纹,强调干净留白与温柔橙红 */
8
- --color-brand: #D0583A;
9
- --color-brand-dark: #B8442B;
10
- --color-brand-light: rgba(208, 88, 58, 0.14);
11
- --color-brand-subtle: rgba(201, 94, 75, 0.2);
7
+ /* 色彩系统:温和中性暖灰 + 柔粉强调 */
8
+ --color-brand: #C77462;
9
+ --color-brand-dark: #B45E4E;
10
+ --color-brand-light: rgba(199, 116, 98, 0.14);
11
+ --color-brand-subtle: rgba(199, 116, 98, 0.2);
12
12
 
13
- --color-bg: #F8F2EA;
13
+ --color-bg: #F7F3EF;
14
14
  --color-surface: #FFFDFC;
15
- --color-surface-alt: #FFF8F2;
15
+ --color-surface-alt: #F8F3EE;
16
16
  --color-surface-elevated: #FFFFFF;
17
- --color-surface-tint: rgba(255, 255, 255, 0.84);
18
- --color-text-primary: #1B1714;
19
- --color-text-secondary: #473C34;
20
- --color-text-tertiary: #6F6054;
21
- --color-text-muted: #6C5B50;
22
- --color-border: #D8C9B8;
23
- --color-border-soft: rgba(216, 201, 184, 0.38);
24
- --color-border-strong: rgba(216, 201, 184, 0.68);
17
+ --color-surface-tint: rgba(255, 253, 252, 0.9);
18
+ --color-text-primary: #241F1C;
19
+ --color-text-secondary: #5A514B;
20
+ --color-text-tertiary: #7A6E66;
21
+ --color-text-muted: #A39286;
22
+ --color-border: #E7DDD4;
23
+ --color-border-soft: rgba(163, 146, 134, 0.22);
24
+ --color-border-strong: rgba(163, 146, 134, 0.4);
25
25
 
26
26
  --color-success: #4B8B6A;
27
27
  --color-error: #C44536;
28
28
 
29
29
  --bg-warm-gradient:
30
- linear-gradient(180deg, #F8F2EA 0%, #F8F2EA 100%);
30
+ linear-gradient(180deg, #F7F3EF 0%, #F7F3EF 100%);
31
31
 
32
32
  /* 字体系统 */
33
- --font-family-body: 'JetBrainsMono Nerd Font Mono', 'OPPO Sans 4.0', 'Fira Mono', 'JetBrains Mono', 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', monospace;
34
- --font-family-display: 'JetBrainsMono Nerd Font Mono', 'OPPO Sans 4.0', 'Fira Mono', 'JetBrains Mono', 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', monospace;
35
- --font-family-mono: 'JetBrainsMono Nerd Font Mono', 'OPPO Sans 4.0', 'Fira Mono', 'JetBrains Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', monospace;
33
+ --font-family-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif;
34
+ --font-family-display: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif;
35
+ --font-family-mono: 'JetBrainsMono Nerd Font Mono', 'JetBrains Mono', 'Fira Code', 'SFMono-Regular', Consolas, 'Liberation Mono', monospace;
36
36
  --font-family: var(--font-family-body);
37
37
 
38
38
  --font-size-display: 52px;
@@ -66,15 +66,15 @@
66
66
  --radius-xl: 18px;
67
67
  --radius-full: 50px;
68
68
 
69
- /* 阴影系统 - 多层叠加提升真实感 */
70
- --shadow-subtle: 0 1px 2px rgba(31, 26, 23, 0.03);
71
- --shadow-card: 0 6px 18px rgba(31, 26, 23, 0.06);
72
- --shadow-card-hover: 0 10px 24px rgba(31, 26, 23, 0.08);
73
- --shadow-float: 0 12px 26px rgba(31, 26, 23, 0.12);
74
- --shadow-raised: 0 10px 20px rgba(31, 26, 23, 0.1);
69
+ /* 阴影系统 - 温和、轻量 */
70
+ --shadow-subtle: 0 1px 2px rgba(36, 31, 28, 0.03);
71
+ --shadow-card: 0 4px 12px rgba(36, 31, 28, 0.045);
72
+ --shadow-card-hover: 0 8px 22px rgba(36, 31, 28, 0.07);
73
+ --shadow-float: 0 12px 28px rgba(36, 31, 28, 0.1);
74
+ --shadow-raised: 0 8px 18px rgba(36, 31, 28, 0.08);
75
75
  --shadow-modal:
76
- 0 8px 24px rgba(31, 26, 23, 0.08),
77
- 0 24px 64px rgba(31, 26, 23, 0.06);
76
+ 0 8px 24px rgba(36, 31, 28, 0.08),
77
+ 0 24px 64px rgba(36, 31, 28, 0.05);
78
78
  --shadow-input-focus:
79
79
  0 0 0 3px var(--color-brand-light),
80
80
  0 1px 3px rgba(31, 26, 23, 0.04);
@@ -100,11 +100,6 @@ body.force-compact {
100
100
  --font-size-caption: 12px;
101
101
  }
102
102
 
103
- body.force-compact .container {
104
- max-width: 760px;
105
- padding: 10px 10px 16px;
106
- }
107
-
108
103
  body.force-compact .provider-fast-switch {
109
104
  position: sticky;
110
105
  top: 8px;
@@ -116,111 +111,112 @@ body.force-compact .provider-fast-switch-select {
116
111
  font-size: 16px;
117
112
  }
118
113
 
119
- body.force-compact .app-shell {
120
- grid-template-columns: 1fr;
121
- gap: 12px;
122
- }
123
-
124
- body.force-compact .main-panel {
125
- position: relative;
126
- top: auto;
127
- align-self: stretch;
128
- width: 100%;
129
- height: auto;
130
- }
114
+ @media (max-width: 720px) {
115
+ body.force-compact .app-shell {
116
+ grid-template-columns: 1fr;
117
+ gap: 12px;
118
+ height: auto;
119
+ min-height: auto;
120
+ overflow: visible;
121
+ }
131
122
 
132
- body.force-compact .side-rail,
133
- body.force-compact .status-inspector {
134
- display: none;
135
- }
123
+ body.force-compact .main-panel {
124
+ position: relative;
125
+ top: auto;
126
+ align-self: stretch;
127
+ width: 100%;
128
+ height: auto;
129
+ overflow-y: visible;
130
+ padding: 14px 12px;
131
+ }
136
132
 
137
- body.force-compact .top-tabs {
138
- display: grid !important;
139
- grid-template-columns: repeat(1, minmax(0, 1fr));
140
- }
133
+ body.force-compact .side-rail,
134
+ body.force-compact .status-inspector {
135
+ display: none;
136
+ }
141
137
 
142
- @media (min-width: 541px) {
143
138
  body.force-compact .top-tabs {
144
- grid-template-columns: repeat(2, minmax(0, 1fr));
139
+ display: flex !important;
140
+ flex-wrap: nowrap;
141
+ overflow-x: auto;
142
+ overflow-y: hidden;
143
+ -webkit-overflow-scrolling: touch;
144
+ scrollbar-width: none;
145
145
  }
146
- }
147
146
 
148
- body.force-compact .hero-logo {
149
- display: block;
150
- }
151
-
152
- body.force-compact .hero-github {
153
- display: flex;
154
- }
155
-
156
- body.force-compact .main-panel {
157
- padding: 14px 12px;
158
- }
147
+ body.force-compact .top-tabs::-webkit-scrollbar {
148
+ display: none;
149
+ }
159
150
 
160
- body.force-compact .hero-title {
161
- font-size: 34px;
162
- }
151
+ body.force-compact .main-panel-topbar {
152
+ position: static;
153
+ margin: 0 0 10px;
154
+ padding: 0;
155
+ background: transparent;
156
+ backdrop-filter: none;
157
+ }
163
158
 
164
- body.force-compact .card {
165
- display: flex;
166
- flex-direction: column;
167
- align-items: flex-start;
168
- justify-content: flex-start;
169
- padding: 12px;
170
- gap: 8px;
171
- }
159
+ body.force-compact .card {
160
+ display: flex;
161
+ flex-direction: column;
162
+ align-items: flex-start;
163
+ justify-content: flex-start;
164
+ padding: 12px;
165
+ gap: 8px;
166
+ }
172
167
 
173
- body.force-compact .card-leading {
174
- align-items: flex-start;
175
- width: 100%;
176
- }
168
+ body.force-compact .card-leading {
169
+ align-items: flex-start;
170
+ width: 100%;
171
+ }
177
172
 
178
- body.force-compact .card-content {
179
- width: 100%;
180
- }
173
+ body.force-compact .card-content {
174
+ width: 100%;
175
+ }
181
176
 
182
- body.force-compact .card-title,
183
- body.force-compact .card-title > span:first-child {
184
- white-space: normal;
185
- overflow: visible;
186
- text-overflow: clip;
187
- overflow-wrap: anywhere;
188
- }
177
+ body.force-compact .card-title,
178
+ body.force-compact .card-title > span:first-child {
179
+ white-space: normal;
180
+ overflow: visible;
181
+ text-overflow: clip;
182
+ overflow-wrap: anywhere;
183
+ }
189
184
 
190
- body.force-compact .card-subtitle {
191
- white-space: normal;
192
- overflow: hidden;
193
- text-overflow: clip;
194
- overflow-wrap: anywhere;
195
- display: -webkit-box;
196
- -webkit-line-clamp: 2;
197
- -webkit-box-orient: vertical;
198
- }
185
+ body.force-compact .card-subtitle {
186
+ white-space: normal;
187
+ overflow: hidden;
188
+ text-overflow: clip;
189
+ overflow-wrap: anywhere;
190
+ display: -webkit-box;
191
+ -webkit-line-clamp: 2;
192
+ -webkit-box-orient: vertical;
193
+ }
199
194
 
200
- body.force-compact .card-trailing {
201
- width: 100%;
202
- margin-top: 0;
203
- grid-auto-flow: row;
204
- grid-auto-columns: 1fr;
205
- justify-content: stretch;
206
- justify-items: end;
207
- }
195
+ body.force-compact .card-trailing {
196
+ width: 100%;
197
+ margin-top: 0;
198
+ grid-auto-flow: row;
199
+ grid-auto-columns: 1fr;
200
+ justify-content: stretch;
201
+ justify-items: end;
202
+ }
208
203
 
209
- body.force-compact .card-trailing .card-actions {
210
- width: 100%;
211
- justify-content: flex-end;
212
- justify-self: stretch;
213
- flex-wrap: wrap;
214
- }
204
+ body.force-compact .card-trailing .card-actions {
205
+ width: 100%;
206
+ justify-content: flex-end;
207
+ justify-self: stretch;
208
+ flex-wrap: wrap;
209
+ }
215
210
 
216
- body.force-compact .card-actions {
217
- opacity: 1;
218
- transform: none;
219
- }
211
+ body.force-compact .card-actions {
212
+ opacity: 1;
213
+ transform: none;
214
+ }
220
215
 
221
- body.force-compact .card-trailing .pill,
222
- body.force-compact .card-trailing .latency {
223
- justify-self: end;
216
+ body.force-compact .card-trailing .pill,
217
+ body.force-compact .card-trailing .latency {
218
+ justify-self: end;
219
+ }
224
220
  }
225
221
 
226
222
  body.force-compact .btn-add,
@@ -257,117 +253,12 @@ body {
257
253
  background: var(--bg-warm-gradient);
258
254
  color: var(--color-text-primary);
259
255
  display: flex;
260
- justify-content: center;
261
- align-items: center;
256
+ justify-content: stretch;
257
+ align-items: stretch;
262
258
  min-height: 100vh;
263
- padding: var(--spacing-lg) var(--spacing-md);
259
+ padding: 0;
264
260
  -webkit-font-smoothing: antialiased;
265
261
  -moz-osx-font-smoothing: grayscale;
266
262
  position: relative;
267
263
  overflow-x: hidden;
268
264
  }
269
-
270
- .fab-install {
271
- position: fixed;
272
- left: 16px;
273
- bottom: calc(16px + env(safe-area-inset-bottom, 0px));
274
- z-index: 90;
275
- display: inline-grid;
276
- place-items: center;
277
- width: 50px;
278
- height: 50px;
279
- min-width: 44px;
280
- min-height: 44px;
281
- padding: 0;
282
- border-radius: var(--radius-full);
283
- border: 1px solid rgba(255, 255, 255, 0.28);
284
- background:
285
- linear-gradient(135deg, rgba(255, 255, 255, 0.18) 0%, rgba(255, 255, 255, 0.04) 100%),
286
- linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
287
- color: #fff;
288
- font-size: var(--font-size-secondary);
289
- font-weight: var(--font-weight-secondary);
290
- letter-spacing: 0.015em;
291
- box-shadow: var(--shadow-float);
292
- cursor: pointer;
293
- overflow: hidden;
294
- transition:
295
- transform var(--transition-fast) var(--ease-spring),
296
- box-shadow var(--transition-fast) var(--ease-spring),
297
- filter var(--transition-fast) var(--ease-smooth);
298
- animation: fabPulse 3.2s ease-in-out infinite;
299
- }
300
-
301
- .fab-install::after {
302
- content: "";
303
- position: absolute;
304
- inset: 1px;
305
- border-radius: inherit;
306
- border: 1px solid rgba(255, 255, 255, 0.12);
307
- pointer-events: none;
308
- }
309
-
310
- .fab-install-icon {
311
- width: 20px;
312
- height: 20px;
313
- display: inline-grid;
314
- place-items: center;
315
- color: #fff;
316
- background: transparent;
317
- box-shadow: none;
318
- flex-shrink: 0;
319
- }
320
-
321
- .fab-install-icon svg {
322
- width: 18px;
323
- height: 18px;
324
- }
325
-
326
- .fab-install:hover {
327
- transform: translateY(-1px);
328
- box-shadow: var(--shadow-raised);
329
- filter: saturate(1.04);
330
- }
331
-
332
- .fab-install:active {
333
- transform: translateY(0);
334
- filter: saturate(0.98);
335
- }
336
-
337
- @media (max-width: 640px) {
338
- .fab-install {
339
- left: 12px;
340
- bottom: calc(12px + env(safe-area-inset-bottom, 0px));
341
- width: 44px;
342
- height: 44px;
343
- padding: 0;
344
- font-size: var(--font-size-secondary);
345
- }
346
-
347
- .fab-install-icon {
348
- width: 18px;
349
- height: 18px;
350
- }
351
-
352
- .fab-install-icon svg {
353
- width: 16px;
354
- height: 16px;
355
- }
356
- }
357
-
358
- @keyframes fabPulse {
359
- 0%,
360
- 100% {
361
- box-shadow: var(--shadow-float);
362
- }
363
- 50% {
364
- box-shadow: 0 14px 30px rgba(31, 26, 23, 0.14);
365
- }
366
- }
367
-
368
- @media (prefers-reduced-motion: reduce) {
369
- .fab-install {
370
- animation: none;
371
- transition: none;
372
- }
373
- }
@@ -2,22 +2,23 @@
2
2
  选择器 - 用于模型选择
3
3
  ============================================ */
4
4
  .selector-section {
5
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.92) 100%);
6
- border-radius: var(--radius-lg);
7
- padding: calc(var(--spacing-sm) + 2px);
8
- margin-bottom: 16px;
9
- box-shadow: var(--shadow-card);
10
- border: 1px solid var(--color-border-soft);
5
+ background: transparent;
6
+ border-radius: 0;
7
+ padding: 12px 0 0;
8
+ margin-bottom: 12px;
9
+ box-shadow: none;
10
+ border: none;
11
+ border-top: 1px solid var(--color-border);
11
12
  display: flex;
12
13
  flex-direction: column;
13
- gap: var(--spacing-xs);
14
+ gap: 6px;
14
15
  }
15
16
 
16
17
  .selector-header {
17
18
  display: flex;
18
19
  justify-content: space-between;
19
20
  align-items: center;
20
- margin-bottom: var(--spacing-xs);
21
+ margin-bottom: 2px;
21
22
  }
22
23
 
23
24
  .settings-tab-header {
@@ -74,11 +75,11 @@
74
75
  }
75
76
 
76
77
  .selector-title {
77
- font-size: var(--font-size-caption);
78
+ font-size: 11px;
78
79
  font-weight: var(--font-weight-secondary);
79
80
  color: var(--color-text-muted);
80
81
  text-transform: none;
81
- letter-spacing: 0.04em;
82
+ letter-spacing: 0.03em;
82
83
  opacity: 0.85;
83
84
  }
84
85
 
@@ -89,10 +90,11 @@
89
90
 
90
91
  .health-report {
91
92
  margin-top: 10px;
92
- padding: 10px 12px;
93
- border-radius: var(--radius-md);
94
- border: 1px solid var(--color-border-soft);
95
- background: var(--color-surface-alt);
93
+ padding: 10px 0 0;
94
+ border-radius: 0;
95
+ border: 1px solid var(--color-border);
96
+ border-width: 1px 0 0;
97
+ background: transparent;
96
98
  display: grid;
97
99
  gap: 8px;
98
100
  }
@@ -115,10 +117,10 @@
115
117
  }
116
118
 
117
119
  .health-issue {
118
- background: #fff6f5;
120
+ background: #FEF2F2;
119
121
  border-left: 3px solid var(--color-error);
120
122
  padding: 8px 10px;
121
- border-radius: 10px;
123
+ border-radius: 8px;
122
124
  }
123
125
 
124
126
  .health-issue-title {
@@ -161,13 +163,14 @@
161
163
 
162
164
  .model-select {
163
165
  width: 100%;
164
- padding: 12px var(--spacing-sm);
165
- padding-right: 40px;
166
- border: 1px solid var(--color-border-soft);
167
- border-radius: var(--radius-sm);
168
- font-size: var(--font-size-body);
166
+ min-height: 36px;
167
+ padding: 8px 10px;
168
+ padding-right: 34px;
169
+ border: 1px solid var(--color-border);
170
+ border-radius: 8px;
171
+ font-size: 13px;
169
172
  font-weight: var(--font-weight-body);
170
- background-color: var(--color-surface-alt);
173
+ background-color: var(--color-surface);
171
174
  color: var(--color-text-primary);
172
175
  outline: none;
173
176
  cursor: pointer;
@@ -177,7 +180,7 @@
177
180
  background-position: right 14px center;
178
181
  background-size: 12px;
179
182
  transition: all var(--transition-fast) var(--ease-smooth);
180
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
183
+ box-shadow: none;
181
184
  }
182
185
 
183
186
  .model-select:hover {
@@ -193,16 +196,17 @@
193
196
 
194
197
  .model-input {
195
198
  width: 100%;
196
- padding: 12px var(--spacing-sm);
197
- border: 1px solid var(--color-border-soft);
198
- border-radius: var(--radius-sm);
199
- font-size: var(--font-size-body);
199
+ min-height: 36px;
200
+ padding: 8px 10px;
201
+ border: 1px solid var(--color-border);
202
+ border-radius: 8px;
203
+ font-size: 13px;
200
204
  font-weight: var(--font-weight-body);
201
- background-color: var(--color-surface-alt);
205
+ background-color: var(--color-surface);
202
206
  color: var(--color-text-primary);
203
207
  outline: none;
204
208
  transition: all var(--transition-fast) var(--ease-smooth);
205
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
209
+ box-shadow: none;
206
210
  }
207
211
 
208
212
  .model-input:hover {
@@ -217,16 +221,16 @@
217
221
  }
218
222
 
219
223
  .config-template-hint {
220
- margin-top: 8px;
221
- margin-bottom: 10px;
222
- font-size: var(--font-size-caption);
224
+ margin-top: 6px;
225
+ margin-bottom: 4px;
226
+ font-size: 11px;
223
227
  color: var(--color-text-tertiary);
224
- line-height: 1.4;
228
+ line-height: 1.35;
225
229
  }
226
230
 
227
231
  .codex-config-grid {
228
232
  display: grid;
229
- gap: var(--spacing-sm);
233
+ gap: 10px;
230
234
  grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr));
231
235
  align-items: start;
232
236
  }
@@ -246,11 +250,12 @@
246
250
  ============================================ */
247
251
  .btn-add {
248
252
  width: 100%;
249
- padding: 14px var(--spacing-sm);
250
- border: 1.5px dashed rgba(208, 196, 182, 0.6);
251
- border-radius: var(--radius-lg);
252
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0.15) 100%);
253
- font-size: var(--font-size-body);
253
+ min-height: 38px;
254
+ padding: 8px 10px;
255
+ border: 1px dashed rgba(208, 196, 182, 0.55);
256
+ border-radius: 8px;
257
+ background: rgba(255, 255, 255, 0.22);
258
+ font-size: 13px;
254
259
  font-weight: var(--font-weight-secondary);
255
260
  color: var(--color-text-tertiary);
256
261
  cursor: pointer;
@@ -265,7 +270,7 @@
265
270
  .selector-section + .btn-add,
266
271
  .btn-add + .card-list,
267
272
  .card-list + .btn-add {
268
- margin-top: 12px;
273
+ margin-top: 8px;
269
274
  }
270
275
 
271
276
  .btn-add:hover {
@@ -290,16 +295,17 @@
290
295
  }
291
296
 
292
297
  .btn-tool {
293
- padding: 12px var(--spacing-sm);
294
- border-radius: var(--radius-sm);
298
+ min-height: 36px;
299
+ padding: 8px 10px;
300
+ border-radius: 8px;
295
301
  border: 1px solid var(--color-border-soft);
296
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.85) 100%);
297
- font-size: var(--font-size-body);
302
+ background: rgba(255, 255, 255, 0.72);
303
+ font-size: 13px;
298
304
  font-weight: var(--font-weight-secondary);
299
305
  color: var(--color-text-secondary);
300
306
  cursor: pointer;
301
307
  transition: all var(--transition-fast) var(--ease-spring);
302
- box-shadow: var(--shadow-subtle);
308
+ box-shadow: none;
303
309
  letter-spacing: -0.01em;
304
310
  width: 100%;
305
311
  text-align: center;
@@ -342,13 +348,15 @@
342
348
  }
343
349
 
344
350
  .btn-tool-compact {
345
- padding: 9px 12px;
346
- font-size: var(--font-size-secondary);
351
+ padding: 7px 10px;
352
+ font-size: 12px;
347
353
  }
348
354
 
349
355
  .selector-header .btn-tool-compact {
350
- padding: 6px 10px;
351
- font-size: var(--font-size-caption);
352
- line-height: 1.1;
353
- box-shadow: var(--shadow-subtle);
356
+ padding: 3px 7px;
357
+ font-size: 10px;
358
+ line-height: 1;
359
+ box-shadow: none;
360
+ min-height: 24px;
361
+ white-space: nowrap;
354
362
  }