codexmate 0.0.26 → 0.0.28

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 (41) hide show
  1. package/README.md +7 -2
  2. package/README.zh.md +7 -2
  3. package/cli/builtin-proxy.js +636 -95
  4. package/cli/openai-bridge.js +497 -5
  5. package/cli.js +75 -29
  6. package/lib/cli-models-utils.js +71 -10
  7. package/package.json +3 -1
  8. package/plugins/prompt-templates/computed.mjs +1 -1
  9. package/plugins/prompt-templates/methods.mjs +0 -66
  10. package/plugins/prompt-templates/overview.mjs +1 -0
  11. package/web-ui/app.js +16 -16
  12. package/web-ui/logic.codex.mjs +56 -0
  13. package/web-ui/logic.sessions.mjs +56 -0
  14. package/web-ui/modules/app.computed.dashboard.mjs +54 -0
  15. package/web-ui/modules/app.computed.session.mjs +48 -0
  16. package/web-ui/modules/app.methods.claude-config.mjs +18 -7
  17. package/web-ui/modules/app.methods.codex-config.mjs +35 -3
  18. package/web-ui/modules/app.methods.providers.mjs +9 -1
  19. package/web-ui/modules/app.methods.session-actions.mjs +2 -5
  20. package/web-ui/modules/app.methods.session-browser.mjs +4 -5
  21. package/web-ui/modules/app.methods.session-trash.mjs +19 -4
  22. package/web-ui/modules/app.methods.startup-claude.mjs +12 -1
  23. package/web-ui/modules/i18n.dict.mjs +28 -32
  24. package/web-ui/modules/provider-url-display.mjs +17 -0
  25. package/web-ui/partials/index/panel-config-claude.html +5 -1
  26. package/web-ui/partials/index/panel-config-codex.html +33 -4
  27. package/web-ui/partials/index/panel-plugins.html +3 -29
  28. package/web-ui/partials/index/panel-sessions.html +0 -10
  29. package/web-ui/partials/index/panel-settings.html +62 -67
  30. package/web-ui/partials/index/panel-usage.html +31 -2
  31. package/web-ui/session-helpers.mjs +2 -2
  32. package/web-ui/styles/base-theme.css +47 -34
  33. package/web-ui/styles/controls-forms.css +27 -28
  34. package/web-ui/styles/layout-shell.css +37 -34
  35. package/web-ui/styles/modals-core.css +12 -10
  36. package/web-ui/styles/navigation-panels.css +36 -35
  37. package/web-ui/styles/responsive.css +4 -4
  38. package/web-ui/styles/sessions-list.css +10 -6
  39. package/web-ui/styles/sessions-usage.css +95 -0
  40. package/web-ui/styles/settings-panel.css +19 -0
  41. package/web-ui/styles/titles-cards.css +90 -26
@@ -160,7 +160,7 @@ export function switchMainTab(tab) {
160
160
  this.prepareSessionTabRender();
161
161
  }
162
162
  const shouldLoadTrashListOnSettingsEnter = nextTab === 'settings'
163
- && this.settingsTab === 'trash'
163
+ && this.settingsTab === 'data'
164
164
  && typeof this.loadSessionTrash === 'function';
165
165
  if (shouldLoadTrashListOnSettingsEnter) {
166
166
  this.loadSessionTrash({
@@ -168,7 +168,7 @@ export function switchMainTab(tab) {
168
168
  });
169
169
  }
170
170
  const shouldPrimeTrashCountOnSettingsEnter = nextTab === 'settings'
171
- && this.settingsTab !== 'trash'
171
+ && this.settingsTab !== 'data'
172
172
  && typeof this.loadSessionTrashCount === 'function';
173
173
  if (shouldPrimeTrashCountOnSettingsEnter) {
174
174
  this.sessionTrashLoadedOnce = false;
@@ -4,34 +4,36 @@
4
4
  设计系统 - Design Tokens
5
5
  ============================================ */
6
6
  :root {
7
- /* 色彩系统:中性灰(更贴近 craft/shadcn 观感)+ 品牌强调 */
8
- --color-brand: #C77462;
9
- --color-brand-dark: #B45E4E;
10
- --color-brand-light: rgba(199, 116, 98, 0.12);
11
- --color-brand-subtle: rgba(199, 116, 98, 0.18);
12
-
13
- --color-bg: #FAFAFA;
14
- --color-surface: #FFFFFF;
15
- --color-surface-alt: #F4F4F5;
7
+ /* 色彩系统:低饱和暖色 + 桌面助理式柔和层级 */
8
+ --color-brand: #C87963;
9
+ --color-brand-dark: #A95845;
10
+ --color-brand-light: rgba(200, 121, 99, 0.13);
11
+ --color-brand-subtle: rgba(200, 121, 99, 0.2);
12
+
13
+ --color-bg: #F7F0E9;
14
+ --color-surface: #FFFDFC;
15
+ --color-surface-alt: #F7EFE8;
16
16
  --color-surface-elevated: #FFFFFF;
17
- --color-surface-tint: rgba(255, 255, 255, 0.92);
18
- --color-text-primary: #18181B;
19
- --color-text-secondary: #3F3F46;
20
- --color-text-tertiary: #71717A;
21
- --color-text-muted: #A1A1AA;
22
- --color-border: #E4E4E7;
23
- --color-border-soft: rgba(24, 24, 27, 0.12);
24
- --color-border-strong: rgba(24, 24, 27, 0.24);
17
+ --color-surface-tint: rgba(255, 253, 250, 0.86);
18
+ --color-text-primary: #241F1C;
19
+ --color-text-secondary: #5A504A;
20
+ --color-text-tertiary: #82746A;
21
+ --color-text-muted: #A99B91;
22
+ --color-border: rgba(137, 111, 94, 0.18);
23
+ --color-border-soft: rgba(137, 111, 94, 0.13);
24
+ --color-border-strong: rgba(137, 111, 94, 0.34);
25
25
 
26
26
  --color-success: #4B8B6A;
27
27
  --color-error: #C44536;
28
28
 
29
29
  --bg-warm-gradient:
30
- linear-gradient(180deg, #FAFAFA 0%, #FAFAFA 100%);
30
+ radial-gradient(circle at 14% 8%, rgba(255, 219, 196, 0.5) 0%, rgba(255, 219, 196, 0) 32%),
31
+ radial-gradient(circle at 88% 0%, rgba(252, 239, 207, 0.58) 0%, rgba(252, 239, 207, 0) 30%),
32
+ linear-gradient(135deg, #FFF8F1 0%, #F7F0E9 46%, #F1E8DF 100%);
31
33
 
32
- --color-bg-topbar-strong: rgba(250, 250, 250, 0.96);
33
- --color-bg-topbar-soft: rgba(250, 250, 250, 0.9);
34
- --color-bg-topbar-clear: rgba(250, 250, 250, 0);
34
+ --color-bg-topbar-strong: rgba(255, 248, 241, 0.96);
35
+ --color-bg-topbar-soft: rgba(255, 248, 241, 0.86);
36
+ --color-bg-topbar-clear: rgba(255, 248, 241, 0);
35
37
 
36
38
  /* 字体系统 */
37
39
  --font-family-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif;
@@ -64,24 +66,24 @@
64
66
  --spacing-xl: 64px;
65
67
 
66
68
  /* 圆角系统 */
67
- --radius-sm: 8px;
68
- --radius-md: 10px;
69
- --radius-lg: 12px;
70
- --radius-xl: 16px;
69
+ --radius-sm: 10px;
70
+ --radius-md: 14px;
71
+ --radius-lg: 18px;
72
+ --radius-xl: 24px;
71
73
  --radius-full: 50px;
72
74
 
73
- /* 阴影系统 - 更偏中性与克制 */
74
- --shadow-subtle: 0 1px 2px rgba(24, 24, 27, 0.04);
75
- --shadow-card: 0 1px 3px rgba(24, 24, 27, 0.06);
76
- --shadow-card-hover: 0 8px 26px rgba(24, 24, 27, 0.12);
77
- --shadow-float: 0 14px 36px rgba(24, 24, 27, 0.16);
78
- --shadow-raised: 0 8px 18px rgba(24, 24, 27, 0.12);
75
+ /* 阴影系统 - 柔和桌面浮层 */
76
+ --shadow-subtle: 0 1px 2px rgba(60, 47, 38, 0.05);
77
+ --shadow-card: 0 12px 30px rgba(92, 68, 52, 0.08);
78
+ --shadow-card-hover: 0 18px 44px rgba(92, 68, 52, 0.14);
79
+ --shadow-float: 0 22px 56px rgba(70, 51, 39, 0.18);
80
+ --shadow-raised: 0 14px 30px rgba(92, 68, 52, 0.14);
79
81
  --shadow-modal:
80
- 0 10px 30px rgba(24, 24, 27, 0.14),
81
- 0 28px 72px rgba(24, 24, 27, 0.12);
82
+ 0 16px 42px rgba(70, 51, 39, 0.16),
83
+ 0 34px 84px rgba(70, 51, 39, 0.16);
82
84
  --shadow-input-focus:
83
85
  0 0 0 3px var(--color-brand-light),
84
- 0 1px 2px rgba(24, 24, 27, 0.06);
86
+ 0 1px 2px rgba(60, 47, 38, 0.06);
85
87
 
86
88
  /* 动画 - 更细腻的曲线 */
87
89
  --transition-instant: 100ms;
@@ -266,3 +268,14 @@ body {
266
268
  position: relative;
267
269
  overflow-x: hidden;
268
270
  }
271
+
272
+ body::before {
273
+ content: "";
274
+ position: fixed;
275
+ inset: 0;
276
+ pointer-events: none;
277
+ background:
278
+ radial-gradient(circle at 18% 16%, rgba(255, 255, 255, 0.62), rgba(255, 255, 255, 0) 26%),
279
+ radial-gradient(circle at 86% 18%, rgba(255, 232, 206, 0.36), rgba(255, 232, 206, 0) 30%);
280
+ z-index: 0;
281
+ }
@@ -2,13 +2,12 @@
2
2
  选择器 - 用于模型选择
3
3
  ============================================ */
4
4
  .selector-section {
5
- background: transparent;
6
- border-radius: 0;
7
- padding: 12px 0 0;
5
+ background: rgba(255, 255, 255, 0.36);
6
+ border-radius: var(--radius-md);
7
+ padding: 12px;
8
8
  margin-bottom: 12px;
9
- box-shadow: none;
10
- border: none;
11
- border-top: 1px solid var(--color-border);
9
+ box-shadow: var(--shadow-subtle);
10
+ border: 1px solid var(--color-border-soft);
12
11
  display: flex;
13
12
  flex-direction: column;
14
13
  gap: 6px;
@@ -125,9 +124,9 @@
125
124
  min-height: 28px !important;
126
125
  padding: 0 10px !important;
127
126
  line-height: 1 !important;
128
- border-radius: 8px !important;
127
+ border-radius: var(--radius-sm) !important;
129
128
  border: 1px solid var(--color-border-soft) !important;
130
- background: rgba(255, 255, 255, 0.72) !important;
129
+ background: rgba(255, 255, 255, 0.76) !important;
131
130
  font-size: 12px !important;
132
131
  font-weight: var(--font-weight-secondary) !important;
133
132
  color: var(--color-text-secondary) !important;
@@ -197,12 +196,12 @@
197
196
  align-items: center;
198
197
  justify-content: center;
199
198
  transition: all var(--transition-fast) var(--ease-spring);
200
- box-shadow: 0 2px 4px rgba(210, 107, 90, 0.2);
199
+ box-shadow: 0 8px 18px rgba(92, 68, 52, 0.12);
201
200
  }
202
201
 
203
202
  .btn-icon:hover {
204
203
  transform: translateY(-1px) scale(1.05);
205
- box-shadow: 0 4px 8px rgba(210, 107, 90, 0.25);
204
+ box-shadow: 0 12px 24px rgba(92, 68, 52, 0.16);
206
205
  }
207
206
 
208
207
  .btn-icon:active {
@@ -214,11 +213,11 @@
214
213
  min-height: 36px;
215
214
  padding: 8px 10px;
216
215
  padding-right: 34px;
217
- border: 1px solid var(--color-border);
218
- border-radius: 8px;
216
+ border: 1px solid var(--color-border-soft);
217
+ border-radius: var(--radius-sm);
219
218
  font-size: 13px;
220
219
  font-weight: var(--font-weight-body);
221
- background-color: var(--color-surface);
220
+ background-color: rgba(255, 255, 255, 0.72);
222
221
  color: var(--color-text-primary);
223
222
  outline: none;
224
223
  cursor: pointer;
@@ -228,12 +227,12 @@
228
227
  background-position: right 14px center;
229
228
  background-size: 12px;
230
229
  transition: all var(--transition-fast) var(--ease-smooth);
231
- box-shadow: none;
230
+ box-shadow: var(--shadow-subtle);
232
231
  }
233
232
 
234
233
  .model-select:hover {
235
234
  border-color: var(--color-border-strong);
236
- background-color: var(--color-surface);
235
+ background-color: rgba(255, 255, 255, 0.9);
237
236
  }
238
237
 
239
238
  .model-select:focus {
@@ -246,20 +245,20 @@
246
245
  width: 100%;
247
246
  min-height: 36px;
248
247
  padding: 8px 10px;
249
- border: 1px solid var(--color-border);
250
- border-radius: 8px;
248
+ border: 1px solid var(--color-border-soft);
249
+ border-radius: var(--radius-sm);
251
250
  font-size: 13px;
252
251
  font-weight: var(--font-weight-body);
253
- background-color: var(--color-surface);
252
+ background-color: rgba(255, 255, 255, 0.72);
254
253
  color: var(--color-text-primary);
255
254
  outline: none;
256
255
  transition: all var(--transition-fast) var(--ease-smooth);
257
- box-shadow: none;
256
+ box-shadow: var(--shadow-subtle);
258
257
  }
259
258
 
260
259
  .model-input:hover {
261
260
  border-color: var(--color-border-strong);
262
- background-color: var(--color-surface);
261
+ background-color: rgba(255, 255, 255, 0.9);
263
262
  }
264
263
 
265
264
  .model-input:focus {
@@ -300,9 +299,9 @@
300
299
  width: 100%;
301
300
  min-height: 38px;
302
301
  padding: 8px 10px;
303
- border: 1px dashed rgba(208, 196, 182, 0.55);
304
- border-radius: 8px;
305
- background: rgba(255, 255, 255, 0.22);
302
+ border: 1px dashed rgba(137, 111, 94, 0.28);
303
+ border-radius: var(--radius-md);
304
+ background: rgba(255, 255, 255, 0.42);
306
305
  font-size: 13px;
307
306
  font-weight: var(--font-weight-secondary);
308
307
  color: var(--color-text-tertiary);
@@ -324,7 +323,7 @@
324
323
  .btn-add:hover {
325
324
  border-color: var(--color-brand);
326
325
  color: var(--color-brand);
327
- background: linear-gradient(to bottom, rgba(210, 107, 90, 0.05) 0%, rgba(210, 107, 90, 0.02) 100%);
326
+ background: linear-gradient(to bottom, rgba(200, 121, 99, 0.12) 0%, rgba(255, 255, 255, 0.52) 100%);
328
327
  transform: translateY(-1px);
329
328
  }
330
329
 
@@ -345,15 +344,15 @@
345
344
  .btn-tool {
346
345
  min-height: 36px;
347
346
  padding: 8px 10px;
348
- border-radius: 8px;
347
+ border-radius: var(--radius-sm);
349
348
  border: 1px solid var(--color-border-soft);
350
- background: rgba(255, 255, 255, 0.72);
349
+ background: rgba(255, 255, 255, 0.68);
351
350
  font-size: 13px;
352
351
  font-weight: var(--font-weight-secondary);
353
352
  color: var(--color-text-secondary);
354
353
  cursor: pointer;
355
354
  transition: all var(--transition-fast) var(--ease-spring);
356
- box-shadow: none;
355
+ box-shadow: var(--shadow-subtle);
357
356
  letter-spacing: -0.01em;
358
357
  width: 100%;
359
358
  text-align: center;
@@ -379,7 +378,7 @@
379
378
  border-color: var(--color-brand);
380
379
  color: var(--color-brand);
381
380
  transform: translateY(-1px);
382
- box-shadow: 0 4px 8px rgba(210, 107, 90, 0.12);
381
+ box-shadow: 0 10px 22px rgba(92, 68, 52, 0.1);
383
382
  }
384
383
 
385
384
  .btn-tool:disabled,
@@ -3,7 +3,7 @@
3
3
  ============================================ */
4
4
  body::before,
5
5
  body::after {
6
- content: none;
6
+ pointer-events: none;
7
7
  }
8
8
 
9
9
  /* ============================================
@@ -34,7 +34,7 @@ body::after {
34
34
  min-height: 100vh;
35
35
  height: 100vh;
36
36
  overflow: hidden;
37
- background: var(--color-bg);
37
+ background: transparent;
38
38
  }
39
39
 
40
40
  .app-shell.standalone {
@@ -48,16 +48,17 @@ body::after {
48
48
  display: flex;
49
49
  flex-direction: column;
50
50
  gap: 0;
51
- padding: 0;
52
- background: var(--color-surface);
53
- border-right: 1px solid var(--color-border);
51
+ padding: 10px 8px;
52
+ background:
53
+ linear-gradient(180deg, rgba(255, 253, 250, 0.92) 0%, rgba(255, 248, 241, 0.82) 100%);
54
+ border-right: 1px solid rgba(137, 111, 94, 0.16);
54
55
  border-radius: 0;
55
- box-shadow: none;
56
+ box-shadow: 18px 0 42px rgba(92, 68, 52, 0.08);
56
57
  min-height: 100vh;
57
58
  overflow-y: auto;
58
59
  scrollbar-width: none;
59
60
  -ms-overflow-style: none;
60
- backdrop-filter: none;
61
+ backdrop-filter: blur(18px) saturate(130%);
61
62
  }
62
63
 
63
64
  .side-rail::-webkit-scrollbar {
@@ -73,11 +74,11 @@ body::after {
73
74
  display: flex;
74
75
  flex-direction: column;
75
76
  gap: 4px;
76
- padding: 6px;
77
+ padding: 7px 4px;
77
78
  }
78
79
 
79
80
  .side-section + .side-section {
80
- border-top: 1px solid var(--color-border);
81
+ border-top: 1px solid rgba(137, 111, 94, 0.12);
81
82
  }
82
83
 
83
84
  .side-rail-nav {
@@ -129,8 +130,8 @@ body::after {
129
130
  }
130
131
 
131
132
  .lang-choice-btn.active {
132
- border-color: rgba(199, 116, 98, 0.55);
133
- background: rgba(199, 116, 98, 0.14);
133
+ border-color: rgba(200, 121, 99, 0.55);
134
+ background: rgba(200, 121, 99, 0.14);
134
135
  color: var(--color-brand-dark);
135
136
  }
136
137
 
@@ -201,7 +202,7 @@ body::after {
201
202
  }
202
203
 
203
204
  .lang-fab .lang-switch:hover .lang-switch-track {
204
- border-color: rgba(199, 116, 98, 0.7);
205
+ border-color: rgba(200, 121, 99, 0.7);
205
206
  }
206
207
 
207
208
  .side-rail-lang {
@@ -209,10 +210,10 @@ body::after {
209
210
  bottom: 0;
210
211
  z-index: 2;
211
212
  margin-top: auto;
212
- padding: 12px 10px;
213
- background: transparent;
214
- border-top: 1px solid var(--color-border);
215
- backdrop-filter: none;
213
+ padding: 12px 4px 4px;
214
+ background: linear-gradient(180deg, rgba(255, 248, 241, 0), rgba(255, 248, 241, 0.92) 34%);
215
+ border-top: 1px solid rgba(137, 111, 94, 0.12);
216
+ backdrop-filter: blur(10px);
216
217
  display: flex;
217
218
  justify-content: center;
218
219
  }
@@ -249,7 +250,7 @@ body::after {
249
250
  }
250
251
 
251
252
  .lang-switch:hover .lang-switch-track {
252
- border-color: rgba(199, 116, 98, 0.6);
253
+ border-color: rgba(200, 121, 99, 0.6);
253
254
  background: rgba(255, 253, 252, 0.92);
254
255
  transform: translateY(-1px);
255
256
  }
@@ -297,7 +298,7 @@ body::after {
297
298
  content: "";
298
299
  position: absolute;
299
300
  inset: -20px;
300
- background: radial-gradient(circle at 30% 20%, rgba(199, 116, 98, 0.18), rgba(199, 116, 98, 0) 55%);
301
+ background: radial-gradient(circle at 30% 20%, rgba(200, 121, 99, 0.18), rgba(200, 121, 99, 0) 55%);
301
302
  opacity: 0;
302
303
  transform: translateY(10px);
303
304
  transition: opacity 240ms var(--ease-smooth), transform 240ms var(--ease-smooth);
@@ -322,13 +323,13 @@ body::after {
322
323
  .side-item {
323
324
  width: 100%;
324
325
  text-align: left;
325
- padding: 5px;
326
- border-radius: 8px;
326
+ padding: 8px 10px;
327
+ border-radius: 13px;
327
328
  border: 1px solid transparent;
328
329
  background: transparent;
329
330
  color: var(--color-text-secondary);
330
331
  cursor: pointer;
331
- transition: border-color var(--transition-fast) var(--ease-smooth), background-color var(--transition-fast) var(--ease-smooth), color var(--transition-fast) var(--ease-smooth);
332
+ transition: border-color var(--transition-fast) var(--ease-smooth), background-color var(--transition-fast) var(--ease-smooth), color var(--transition-fast) var(--ease-smooth), box-shadow var(--transition-fast) var(--ease-smooth), transform var(--transition-fast) var(--ease-smooth);
332
333
  display: flex;
333
334
  flex-direction: column;
334
335
  gap: 2px;
@@ -351,16 +352,18 @@ body::after {
351
352
  }
352
353
 
353
354
  .side-item:hover {
354
- background: var(--color-surface-alt);
355
+ background: rgba(255, 255, 255, 0.58);
355
356
  color: var(--color-text-primary);
357
+ transform: translateY(-1px);
356
358
  }
357
359
 
358
360
  .side-item.active,
359
361
  .side-item.nav-intent-active {
360
- border-color: transparent;
361
- background: var(--color-brand-light);
362
+ border-color: rgba(200, 121, 99, 0.28);
363
+ background:
364
+ linear-gradient(135deg, rgba(255, 255, 255, 0.82), rgba(200, 121, 99, 0.14));
362
365
  color: var(--color-brand-dark);
363
- box-shadow: none;
366
+ box-shadow: 0 10px 24px rgba(92, 68, 52, 0.08);
364
367
  }
365
368
 
366
369
  .side-item.nav-intent-inactive,
@@ -421,8 +424,8 @@ body::after {
421
424
  align-items: flex-start;
422
425
  gap: 10px;
423
426
  margin-bottom: 0;
424
- padding: 20px;
425
- border-bottom: 1px solid var(--color-border);
427
+ padding: 16px 10px 18px;
428
+ border-bottom: 1px solid rgba(137, 111, 94, 0.12);
426
429
  }
427
430
 
428
431
  .brand-head {
@@ -434,10 +437,10 @@ body::after {
434
437
  .brand-logo {
435
438
  width: 38px;
436
439
  height: 38px;
437
- border-radius: 10px;
440
+ border-radius: 14px;
438
441
  object-fit: cover;
439
442
  flex-shrink: 0;
440
- box-shadow: var(--shadow-subtle);
443
+ box-shadow: 0 12px 26px rgba(92, 68, 52, 0.12);
441
444
  }
442
445
 
443
446
  .brand-copy {
@@ -497,10 +500,10 @@ body::after {
497
500
  justify-content: flex-start;
498
501
  gap: 8px;
499
502
  padding: 8px 10px;
500
- border-radius: 8px;
501
- background: var(--color-surface);
502
- border: 1px solid var(--color-border);
503
- box-shadow: none;
503
+ border-radius: 13px;
504
+ background: rgba(255, 255, 255, 0.62);
505
+ border: 1px solid rgba(137, 111, 94, 0.15);
506
+ box-shadow: var(--shadow-subtle);
504
507
  }
505
508
 
506
509
  .github-badge:hover {
@@ -511,7 +514,7 @@ body::after {
511
514
  }
512
515
 
513
516
  .github-badge:focus-visible {
514
- outline: 3px solid rgba(199, 116, 98, 0.18);
517
+ outline: 3px solid rgba(200, 121, 99, 0.18);
515
518
  outline-offset: 2px;
516
519
  border-color: var(--color-brand);
517
520
  color: var(--color-text-primary);
@@ -17,7 +17,9 @@
17
17
  left: 0;
18
18
  right: 0;
19
19
  bottom: 0;
20
- background: linear-gradient(to bottom, rgba(31, 26, 23, 0.3) 0%, rgba(31, 26, 23, 0.5) 100%);
20
+ background:
21
+ radial-gradient(circle at 50% 18%, rgba(255, 248, 241, 0.22), rgba(255, 248, 241, 0) 36%),
22
+ linear-gradient(to bottom, rgba(31, 26, 23, 0.28) 0%, rgba(31, 26, 23, 0.48) 100%);
21
23
  display: flex;
22
24
  justify-content: center;
23
25
  align-items: center;
@@ -28,16 +30,16 @@
28
30
  }
29
31
 
30
32
  .modal {
31
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.98) 100%);
33
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.96) 0%, rgba(255, 250, 246, 0.94) 100%);
32
34
  width: 90%;
33
35
  max-width: 400px;
34
36
  max-height: 90vh;
35
37
  overflow-y: auto;
36
38
  overscroll-behavior: contain;
37
- border-radius: var(--radius-lg);
39
+ border-radius: var(--radius-xl);
38
40
  padding: var(--spacing-md);
39
41
  box-shadow: var(--shadow-modal);
40
- border: 1px solid rgba(255, 255, 255, 0.8);
42
+ border: 1px solid rgba(255, 255, 255, 0.72);
41
43
  animation: modalSlideUp var(--transition-slow) var(--ease-spring);
42
44
  }
43
45
 
@@ -75,8 +77,8 @@
75
77
  margin-top: 0;
76
78
  padding: var(--spacing-sm) var(--spacing-md) var(--spacing-md);
77
79
  border-top: 1px solid var(--color-border-soft);
78
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.82) 0%, rgba(255, 255, 255, 0.96) 100%);
79
- backdrop-filter: blur(2px);
80
+ background: linear-gradient(to bottom, rgba(255, 250, 246, 0.78) 0%, rgba(255, 250, 246, 0.96) 100%);
81
+ backdrop-filter: blur(10px);
80
82
  }
81
83
 
82
84
  .modal-title {
@@ -116,8 +118,8 @@
116
118
  gap: var(--spacing-sm);
117
119
  padding: 10px 12px;
118
120
  border: 1px solid var(--color-border-soft);
119
- border-radius: var(--radius-lg);
120
- background: var(--color-surface-alt);
121
+ border-radius: var(--radius-md);
122
+ background: rgba(255, 255, 255, 0.48);
121
123
  }
122
124
 
123
125
  .install-row-main {
@@ -138,7 +140,7 @@
138
140
  font-size: var(--font-size-secondary);
139
141
  color: var(--color-text-primary);
140
142
  word-break: break-all;
141
- background: rgba(255, 255, 255, 0.7);
143
+ background: rgba(255, 255, 255, 0.72);
142
144
  padding: 8px 10px;
143
145
  border-radius: var(--radius-sm);
144
146
  border: 1px solid var(--color-border-soft);
@@ -156,7 +158,7 @@
156
158
 
157
159
  .install-action-tabs .btn-mini.active {
158
160
  background: var(--color-brand-light);
159
- border-color: rgba(199, 116, 98, 0.22);
161
+ border-color: rgba(200, 121, 99, 0.22);
160
162
  color: var(--color-brand-dark);
161
163
  }
162
164