codexmate 0.0.27 → 0.0.29

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 (51) hide show
  1. package/README.md +1 -1
  2. package/README.zh.md +1 -1
  3. package/cli/builtin-proxy.js +430 -4
  4. package/cli/openai-bridge.js +498 -13
  5. package/cli.js +130 -41
  6. package/lib/cli-models-utils.js +71 -10
  7. package/lib/cli-webhook.js +126 -0
  8. package/package.json +76 -74
  9. package/plugins/prompt-templates/computed.mjs +1 -1
  10. package/plugins/prompt-templates/methods.mjs +0 -66
  11. package/plugins/prompt-templates/overview.mjs +1 -0
  12. package/web-ui/app.js +21 -16
  13. package/web-ui/index.html +1 -0
  14. package/web-ui/logic.codex.mjs +69 -0
  15. package/web-ui/modules/app.computed.dashboard.mjs +54 -0
  16. package/web-ui/modules/app.computed.session.mjs +22 -17
  17. package/web-ui/modules/app.methods.claude-config.mjs +24 -8
  18. package/web-ui/modules/app.methods.codex-config.mjs +35 -3
  19. package/web-ui/modules/app.methods.index.mjs +2 -0
  20. package/web-ui/modules/app.methods.navigation.mjs +21 -3
  21. package/web-ui/modules/app.methods.providers.mjs +96 -7
  22. package/web-ui/modules/app.methods.session-actions.mjs +3 -6
  23. package/web-ui/modules/app.methods.session-browser.mjs +1 -6
  24. package/web-ui/modules/app.methods.session-trash.mjs +6 -7
  25. package/web-ui/modules/app.methods.startup-claude.mjs +8 -1
  26. package/web-ui/modules/app.methods.webhook.mjs +79 -0
  27. package/web-ui/modules/i18n.dict.mjs +1104 -104
  28. package/web-ui/modules/i18n.mjs +9 -3
  29. package/web-ui/modules/provider-url-display.mjs +17 -0
  30. package/web-ui/partials/index/layout-header.html +25 -0
  31. package/web-ui/partials/index/modals-basic.html +0 -3
  32. package/web-ui/partials/index/panel-config-claude.html +10 -3
  33. package/web-ui/partials/index/panel-config-codex.html +44 -4
  34. package/web-ui/partials/index/panel-plugins.html +3 -29
  35. package/web-ui/partials/index/panel-sessions.html +0 -10
  36. package/web-ui/partials/index/panel-settings.html +93 -177
  37. package/web-ui/partials/index/panel-trash.html +88 -0
  38. package/web-ui/session-helpers.mjs +2 -2
  39. package/web-ui/styles/base-theme.css +47 -34
  40. package/web-ui/styles/controls-forms.css +27 -28
  41. package/web-ui/styles/docs-panel.css +63 -39
  42. package/web-ui/styles/layout-shell.css +69 -46
  43. package/web-ui/styles/modals-core.css +12 -10
  44. package/web-ui/styles/navigation-panels.css +36 -35
  45. package/web-ui/styles/responsive.css +4 -4
  46. package/web-ui/styles/sessions-list.css +10 -6
  47. package/web-ui/styles/settings-panel.css +197 -33
  48. package/web-ui/styles/titles-cards.css +90 -26
  49. package/web-ui/styles/trash-panel.css +90 -0
  50. package/web-ui/styles/webhook.css +81 -0
  51. package/web-ui/styles.css +2 -0
@@ -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,
@@ -1,7 +1,6 @@
1
1
  .docs-mode-content {
2
2
  display: grid;
3
3
  gap: 14px;
4
- /* CLI Install 是展示型面板:非输入区域不使用 I-beam(text)光标,避免误导为可编辑。 */
5
4
  cursor: default;
6
5
  }
7
6
 
@@ -41,17 +40,19 @@
41
40
  .docs-toolbar-grid {
42
41
  display: grid;
43
42
  grid-template-columns: repeat(12, minmax(0, 1fr));
44
- gap: 12px;
43
+ gap: 10px;
45
44
  }
46
45
 
47
46
  .docs-toolbar-card {
48
47
  grid-column: span 4;
49
48
  display: grid;
50
49
  gap: 8px;
51
- padding: 12px;
52
- border: 1px solid var(--color-border);
53
- border-radius: 10px;
54
- background: rgba(255, 253, 252, 0.76);
50
+ padding: 14px;
51
+ border: 1px solid var(--color-border-soft);
52
+ border-radius: var(--radius-md);
53
+ background: rgba(255, 255, 255, 0.42);
54
+ box-shadow: var(--shadow-subtle);
55
+ backdrop-filter: blur(8px);
55
56
  }
56
57
 
57
58
  .docs-toolbar-card-wide {
@@ -62,15 +63,17 @@
62
63
  display: grid;
63
64
  grid-template-columns: repeat(4, minmax(0, 1fr));
64
65
  gap: 10px;
66
+ margin-top: 2px;
65
67
  }
66
68
 
67
69
  .docs-summary-item {
68
70
  display: grid;
69
71
  gap: 4px;
70
- padding: 12px;
71
- border: 1px solid var(--color-border);
72
- border-radius: 10px;
73
- background: rgba(255, 253, 252, 0.82);
72
+ padding: 12px 14px;
73
+ border: 1px solid var(--color-border-soft);
74
+ border-radius: var(--radius-md);
75
+ background: linear-gradient(180deg, rgba(255,255,255,0.88), rgba(255,251,247,0.78));
76
+ box-shadow: var(--shadow-card);
74
77
  }
75
78
 
76
79
  .docs-summary-item-wide {
@@ -78,17 +81,21 @@
78
81
  }
79
82
 
80
83
  .docs-summary-label {
81
- font-size: 11px;
84
+ font-size: 10px;
85
+ font-weight: 700;
82
86
  color: var(--color-text-muted);
83
- letter-spacing: 0.04em;
87
+ letter-spacing: 0.06em;
84
88
  text-transform: uppercase;
89
+ opacity: 0.82;
85
90
  }
86
91
 
87
92
  .docs-summary-value {
88
- font-size: 14px;
93
+ font-size: 15px;
94
+ font-weight: 700;
89
95
  color: var(--color-text-primary);
90
- line-height: 1.4;
96
+ line-height: 1.25;
91
97
  word-break: break-word;
98
+ letter-spacing: -0.02em;
92
99
  }
93
100
 
94
101
  .docs-install-list {
@@ -97,12 +104,16 @@
97
104
 
98
105
  .docs-install-row {
99
106
  align-items: stretch;
100
- background: rgba(255, 253, 252, 0.8);
107
+ background: linear-gradient(180deg, rgba(255,255,255,0.88), rgba(255,251,247,0.78));
108
+ border: 1px solid var(--color-border-soft);
109
+ border-radius: var(--radius-md);
110
+ padding: 14px;
111
+ box-shadow: var(--shadow-card);
101
112
  }
102
113
 
103
114
  .docs-command-head {
104
115
  display: grid;
105
- gap: 4px;
116
+ gap: 6px;
106
117
  }
107
118
 
108
119
  .docs-command-row {
@@ -119,34 +130,38 @@
119
130
  grid-template-columns: 1fr auto;
120
131
  align-items: stretch;
121
132
  gap: 10px;
122
- padding: 10px 10px 10px 12px;
123
- border: 1px solid var(--color-border);
124
- border-radius: 10px;
125
- background: rgba(255, 253, 252, 0.9);
133
+ padding: 10px 10px 10px 14px;
134
+ border: 1px solid var(--color-border-soft);
135
+ border-radius: var(--radius-sm);
136
+ background: rgba(255,255,255,0.64);
137
+ box-shadow: var(--shadow-subtle);
126
138
  }
127
139
 
128
140
  .docs-command-row .install-command {
129
141
  min-width: 0;
130
- padding: 10px 12px;
131
- border-radius: 8px;
132
- background: rgba(18, 22, 35, 0.06);
142
+ padding: 10px 14px;
143
+ border-radius: var(--radius-sm);
144
+ background: rgba(18,22,35,0.04);
145
+ border: 1px solid rgba(18,22,35,0.05);
133
146
  overflow-x: auto;
134
147
  white-space: nowrap;
135
148
  user-select: text;
149
+ font-size: 13px;
150
+ line-height: 1.5;
136
151
  }
137
152
 
138
153
  .docs-command-prefix {
139
154
  display: inline-flex;
140
155
  align-items: center;
141
- padding: 2px 8px;
156
+ padding: 3px 10px;
142
157
  margin-right: 10px;
143
158
  border-radius: 999px;
144
- border: 1px solid rgba(0, 0, 0, 0.1);
145
- background: rgba(210, 107, 90, 0.10);
146
- color: var(--color-text-secondary);
159
+ border: 1px solid rgba(200,121,99,0.18);
160
+ background: var(--color-brand-light);
161
+ color: var(--color-brand-dark);
147
162
  font-size: 11px;
148
163
  font-weight: 700;
149
- letter-spacing: 0.02em;
164
+ letter-spacing: 0.03em;
150
165
  }
151
166
 
152
167
  .docs-command-meta {
@@ -160,16 +175,23 @@
160
175
  .docs-meta-pill {
161
176
  display: inline-flex;
162
177
  align-items: center;
163
- padding: 4px 8px;
178
+ padding: 3px 10px;
164
179
  border-radius: 999px;
165
- border: 1px solid rgba(0, 0, 0, 0.08);
166
- background: rgba(255, 255, 255, 0.6);
180
+ border: 1px solid var(--color-border-soft);
181
+ background: rgba(255,255,255,0.72);
182
+ font-size: 11px;
183
+ font-weight: 600;
184
+ color: var(--color-text-secondary);
185
+ letter-spacing: 0.01em;
167
186
  }
168
187
 
169
188
  .docs-copy-btn {
170
- min-width: 76px;
189
+ min-width: 72px;
171
190
  min-height: 40px;
172
191
  flex: 0 0 auto;
192
+ border-radius: var(--radius-sm);
193
+ font-weight: 600;
194
+ letter-spacing: 0.01em;
173
195
  }
174
196
 
175
197
  .docs-help-grid {
@@ -179,17 +201,19 @@
179
201
  }
180
202
 
181
203
  .docs-note-card {
182
- padding: 14px;
183
- border: 1px solid var(--color-border);
184
- border-radius: 10px;
185
- background: rgba(255, 253, 252, 0.78);
204
+ padding: 16px;
205
+ border: 1px solid var(--color-border-soft);
206
+ border-radius: var(--radius-md);
207
+ background: linear-gradient(180deg, rgba(255,255,255,0.86), rgba(255,251,247,0.76));
208
+ box-shadow: var(--shadow-card);
186
209
  }
187
210
 
188
211
  .docs-note-title {
189
212
  font-size: 13px;
190
213
  font-weight: 700;
191
214
  color: var(--color-text-primary);
192
- margin-bottom: 8px;
215
+ margin-bottom: 10px;
216
+ letter-spacing: -0.02em;
193
217
  }
194
218
 
195
219
  .docs-help-list {
@@ -201,11 +225,11 @@
201
225
  padding-left: 18px;
202
226
  color: var(--color-text-secondary);
203
227
  font-size: 13px;
204
- line-height: 1.55;
228
+ line-height: 1.6;
205
229
  }
206
230
 
207
231
  .docs-static-list li + li {
208
- margin-top: 6px;
232
+ margin-top: 8px;
209
233
  }
210
234
 
211
235
  @media (max-width: 1100px) {
@@ -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: 14px 10px;
52
+ background:
53
+ linear-gradient(180deg, rgba(255, 252, 248, 0.95) 0%, rgba(255, 248, 241, 0.89) 100%);
54
+ border-right: 1px solid rgba(137, 111, 94, 0.10);
54
55
  border-radius: 0;
55
- box-shadow: none;
56
+ box-shadow: 8px 0 28px rgba(92, 68, 52, 0.05), 1px 0 0 rgba(255, 255, 255, 0.5);
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 {
@@ -72,12 +73,12 @@ body::after {
72
73
  .side-section {
73
74
  display: flex;
74
75
  flex-direction: column;
75
- gap: 4px;
76
- padding: 6px;
76
+ gap: 3px;
77
+ padding: 8px 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.08);
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: 10px 4px 6px;
214
+ background: linear-gradient(180deg, rgba(255, 248, 241, 0), rgba(255, 248, 241, 0.94) 28%);
215
+ border-top: 1px solid rgba(137, 111, 94, 0.08);
216
+ backdrop-filter: blur(12px);
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);
@@ -310,28 +311,29 @@ body::after {
310
311
  }
311
312
 
312
313
  .side-section-title {
313
- font-size: 11px;
314
+ font-size: 10px;
314
315
  font-weight: 700;
315
316
  color: var(--color-text-muted);
316
- letter-spacing: 0.06em;
317
+ letter-spacing: 0.08em;
317
318
  text-transform: uppercase;
318
- padding: 0 6px;
319
- margin-bottom: 8px;
319
+ padding: 0 8px;
320
+ margin-bottom: 6px;
321
+ opacity: 0.72;
320
322
  }
321
323
 
322
324
  .side-item {
323
325
  width: 100%;
324
326
  text-align: left;
325
- padding: 5px;
326
- border-radius: 8px;
327
+ padding: 9px 12px 9px 14px;
328
+ border-radius: 12px;
327
329
  border: 1px solid transparent;
328
330
  background: transparent;
329
331
  color: var(--color-text-secondary);
330
332
  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);
333
+ transition: border-color 180ms var(--ease-out-expo), background-color 180ms var(--ease-out-expo), color 180ms var(--ease-out-expo), box-shadow 180ms var(--ease-out-expo), transform 180ms var(--ease-out-expo);
332
334
  display: flex;
333
335
  flex-direction: column;
334
- gap: 2px;
336
+ gap: 3px;
335
337
  box-shadow: none;
336
338
  position: relative;
337
339
  }
@@ -339,28 +341,28 @@ body::after {
339
341
  .side-item::before {
340
342
  content: "";
341
343
  position: absolute;
342
- left: 0;
344
+ left: 2px;
343
345
  top: 50%;
344
346
  transform: translateY(-50%);
345
347
  width: 3px;
346
- height: 16px;
347
- border-radius: 0 2px 2px 0;
348
+ height: 18px;
349
+ border-radius: 0 3px 3px 0;
348
350
  background: transparent;
349
- transition: background-color var(--transition-fast) var(--ease-smooth);
350
- display: none;
351
351
  }
352
352
 
353
353
  .side-item:hover {
354
- background: var(--color-surface-alt);
354
+ background: rgba(255, 255, 255, 0.64);
355
355
  color: var(--color-text-primary);
356
+ transform: translateX(2px);
356
357
  }
357
358
 
358
359
  .side-item.active,
359
360
  .side-item.nav-intent-active {
360
- border-color: transparent;
361
- background: var(--color-brand-light);
361
+ border-color: rgba(200, 121, 99, 0.22);
362
+ background:
363
+ linear-gradient(135deg, rgba(255, 255, 255, 0.86), rgba(200, 121, 99, 0.10));
362
364
  color: var(--color-brand-dark);
363
- box-shadow: none;
365
+ box-shadow: 0 8px 20px rgba(92, 68, 52, 0.06);
364
366
  }
365
367
 
366
368
  .side-item.nav-intent-inactive,
@@ -385,6 +387,7 @@ body::after {
385
387
  font-size: 13px;
386
388
  font-weight: 600;
387
389
  letter-spacing: -0.01em;
390
+ line-height: 1.25;
388
391
  }
389
392
 
390
393
  .side-item-meta {
@@ -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: 14px 10px 16px;
428
+ border-bottom: 1px solid rgba(137, 111, 94, 0.10);
426
429
  }
427
430
 
428
431
  .brand-head {
@@ -434,10 +437,12 @@ body::after {
434
437
  .brand-logo {
435
438
  width: 38px;
436
439
  height: 38px;
437
- border-radius: 10px;
440
+ border-radius: 13px;
438
441
  object-fit: cover;
439
442
  flex-shrink: 0;
440
- box-shadow: var(--shadow-subtle);
443
+ box-shadow:
444
+ 0 8px 20px rgba(92, 68, 52, 0.10),
445
+ 0 0 0 1px rgba(200, 121, 99, 0.08);
441
446
  }
442
447
 
443
448
  .brand-copy {
@@ -465,10 +470,11 @@ body::after {
465
470
 
466
471
  .brand-title {
467
472
  font-size: 18px;
468
- line-height: 1.1;
473
+ line-height: 1.15;
469
474
  font-family: var(--font-family-display);
470
475
  color: var(--color-text-primary);
471
476
  letter-spacing: -0.02em;
477
+ font-weight: 700;
472
478
  }
473
479
 
474
480
  .github-badge {
@@ -497,10 +503,10 @@ body::after {
497
503
  justify-content: flex-start;
498
504
  gap: 8px;
499
505
  padding: 8px 10px;
500
- border-radius: 8px;
501
- background: var(--color-surface);
502
- border: 1px solid var(--color-border);
503
- box-shadow: none;
506
+ border-radius: 13px;
507
+ background: rgba(255, 255, 255, 0.62);
508
+ border: 1px solid rgba(137, 111, 94, 0.15);
509
+ box-shadow: var(--shadow-subtle);
504
510
  }
505
511
 
506
512
  .github-badge:hover {
@@ -511,7 +517,7 @@ body::after {
511
517
  }
512
518
 
513
519
  .github-badge:focus-visible {
514
- outline: 3px solid rgba(199, 116, 98, 0.18);
520
+ outline: 3px solid rgba(200, 121, 99, 0.18);
515
521
  outline-offset: 2px;
516
522
  border-color: var(--color-brand);
517
523
  color: var(--color-text-primary);
@@ -601,3 +607,20 @@ body::after {
601
607
  .github-badge-rail:hover {
602
608
  border-color: var(--color-border-strong);
603
609
  }
610
+
611
+ /* 侧边栏计数徽标 */
612
+ .side-item-badge {
613
+ display: inline-flex;
614
+ align-items: center;
615
+ justify-content: center;
616
+ min-width: 20px;
617
+ height: 20px;
618
+ padding: 0 6px;
619
+ border-radius: 10px;
620
+ background: var(--color-brand);
621
+ color: #fff;
622
+ font-size: 11px;
623
+ font-weight: 700;
624
+ line-height: 1;
625
+ box-shadow: 0 2px 6px rgba(200, 121, 99, 0.28);
626
+ }