codexmate 0.0.21 → 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 (114) hide show
  1. package/README.md +389 -284
  2. package/README.zh.md +321 -0
  3. package/cli/agents-files.js +224 -162
  4. package/cli/archive-helpers.js +446 -446
  5. package/cli/auth-profiles.js +359 -359
  6. package/cli/builtin-proxy.js +1044 -580
  7. package/cli/claude-proxy.js +998 -998
  8. package/cli/config-bootstrap.js +384 -384
  9. package/cli/config-health.js +338 -338
  10. package/cli/openai-bridge.js +950 -0
  11. package/cli/openclaw-config.js +629 -629
  12. package/cli/session-usage.concurrent.js +28 -0
  13. package/cli/session-usage.js +112 -0
  14. package/cli/session-usage.models.js +176 -0
  15. package/cli/skills.js +1141 -1141
  16. package/cli/zip-commands.js +510 -510
  17. package/cli.js +13214 -13129
  18. package/lib/cli-file-utils.js +151 -151
  19. package/lib/cli-models-utils.js +419 -419
  20. package/lib/cli-network-utils.js +164 -164
  21. package/lib/cli-path-utils.js +69 -69
  22. package/lib/cli-session-utils.js +121 -121
  23. package/lib/cli-sessions.js +386 -386
  24. package/lib/cli-utils.js +155 -155
  25. package/lib/download-artifacts.js +77 -77
  26. package/lib/mcp-stdio.js +440 -440
  27. package/lib/task-orchestrator.js +869 -869
  28. package/lib/text-diff.js +303 -303
  29. package/lib/workflow-engine.js +340 -340
  30. package/package.json +74 -74
  31. package/res/json5.min.js +1 -1
  32. package/res/logo.png +0 -0
  33. package/res/vue.global.prod.js +13 -13
  34. package/web-ui/app.js +575 -530
  35. package/web-ui/index.html +34 -33
  36. package/web-ui/logic.agents-diff.mjs +386 -386
  37. package/web-ui/logic.claude.mjs +168 -168
  38. package/web-ui/logic.mjs +5 -5
  39. package/web-ui/logic.runtime.mjs +128 -124
  40. package/web-ui/logic.sessions.mjs +614 -581
  41. package/web-ui/modules/api.mjs +90 -90
  42. package/web-ui/modules/app.computed.dashboard.mjs +126 -113
  43. package/web-ui/modules/app.computed.index.mjs +17 -15
  44. package/web-ui/modules/app.computed.main-tabs.mjs +198 -195
  45. package/web-ui/modules/app.computed.session.mjs +653 -507
  46. package/web-ui/modules/app.constants.mjs +15 -15
  47. package/web-ui/modules/app.methods.agents.mjs +544 -493
  48. package/web-ui/modules/app.methods.claude-config.mjs +174 -174
  49. package/web-ui/modules/app.methods.codex-config.mjs +795 -640
  50. package/web-ui/modules/app.methods.index.mjs +92 -88
  51. package/web-ui/modules/app.methods.install.mjs +161 -149
  52. package/web-ui/modules/app.methods.navigation.mjs +619 -619
  53. package/web-ui/modules/app.methods.openclaw-core.mjs +814 -814
  54. package/web-ui/modules/app.methods.openclaw-editing.mjs +372 -372
  55. package/web-ui/modules/app.methods.openclaw-persist.mjs +369 -369
  56. package/web-ui/modules/app.methods.providers.mjs +404 -363
  57. package/web-ui/modules/app.methods.runtime.mjs +323 -323
  58. package/web-ui/modules/app.methods.session-actions.mjs +537 -520
  59. package/web-ui/modules/app.methods.session-browser.mjs +626 -626
  60. package/web-ui/modules/app.methods.session-timeline.mjs +448 -448
  61. package/web-ui/modules/app.methods.session-trash.mjs +422 -422
  62. package/web-ui/modules/app.methods.startup-claude.mjs +405 -412
  63. package/web-ui/modules/app.methods.task-orchestration.mjs +471 -471
  64. package/web-ui/modules/config-mode.computed.mjs +126 -126
  65. package/web-ui/modules/config-template-confirm-pref.mjs +33 -0
  66. package/web-ui/modules/i18n.mjs +1609 -0
  67. package/web-ui/modules/plugins.computed.mjs +220 -0
  68. package/web-ui/modules/plugins.methods.mjs +620 -0
  69. package/web-ui/modules/plugins.storage.mjs +37 -0
  70. package/web-ui/modules/skills.computed.mjs +107 -107
  71. package/web-ui/modules/skills.methods.mjs +481 -481
  72. package/web-ui/partials/index/layout-footer.html +13 -13
  73. package/web-ui/partials/index/layout-header.html +461 -402
  74. package/web-ui/partials/index/modal-config-template-agents.html +175 -125
  75. package/web-ui/partials/index/modal-confirm-toast.html +32 -32
  76. package/web-ui/partials/index/modal-health-check.html +72 -72
  77. package/web-ui/partials/index/modal-openclaw-config.html +280 -280
  78. package/web-ui/partials/index/modal-skills.html +200 -184
  79. package/web-ui/partials/index/modals-basic.html +165 -156
  80. package/web-ui/partials/index/panel-config-claude.html +138 -126
  81. package/web-ui/partials/index/panel-config-codex.html +234 -237
  82. package/web-ui/partials/index/panel-config-openclaw.html +78 -78
  83. package/web-ui/partials/index/panel-docs.html +147 -130
  84. package/web-ui/partials/index/panel-market.html +174 -174
  85. package/web-ui/partials/index/panel-orchestration.html +397 -397
  86. package/web-ui/partials/index/panel-plugins.html +243 -0
  87. package/web-ui/partials/index/panel-sessions.html +292 -292
  88. package/web-ui/partials/index/panel-settings.html +258 -190
  89. package/web-ui/partials/index/panel-usage.html +353 -213
  90. package/web-ui/session-helpers.mjs +573 -559
  91. package/web-ui/source-bundle.cjs +233 -233
  92. package/web-ui/styles/base-theme.css +264 -271
  93. package/web-ui/styles/controls-forms.css +362 -360
  94. package/web-ui/styles/docs-panel.css +247 -182
  95. package/web-ui/styles/feedback.css +108 -108
  96. package/web-ui/styles/health-check-dialog.css +144 -144
  97. package/web-ui/styles/layout-shell.css +596 -376
  98. package/web-ui/styles/modals-core.css +464 -464
  99. package/web-ui/styles/navigation-panels.css +382 -348
  100. package/web-ui/styles/openclaw-structured.css +266 -266
  101. package/web-ui/styles/plugins-panel.css +518 -0
  102. package/web-ui/styles/responsive.css +456 -450
  103. package/web-ui/styles/sessions-list.css +400 -400
  104. package/web-ui/styles/sessions-preview.css +411 -411
  105. package/web-ui/styles/sessions-toolbar-trash.css +268 -243
  106. package/web-ui/styles/sessions-usage.css +851 -628
  107. package/web-ui/styles/settings-panel.css +166 -0
  108. package/web-ui/styles/skills-list.css +303 -296
  109. package/web-ui/styles/skills-market.css +396 -335
  110. package/web-ui/styles/task-orchestration.css +776 -776
  111. package/web-ui/styles/titles-cards.css +408 -408
  112. package/web-ui/styles.css +20 -18
  113. package/web-ui.html +17 -17
  114. package/README.en.md +0 -349
@@ -1,348 +1,382 @@
1
- .main-tabs {
2
- display: flex;
3
- gap: 10px;
4
- }
5
-
6
- .main-tab-btn {
7
- flex: 1;
8
- text-align: center;
9
- border: 1px solid rgba(216, 201, 184, 0.55);
10
- background: rgba(255, 255, 255, 0.95);
11
- border-radius: var(--radius-lg);
12
- padding: 12px 14px;
13
- cursor: pointer;
14
- color: var(--color-text-secondary);
15
- font-size: var(--font-size-body);
16
- font-weight: var(--font-weight-secondary);
17
- box-shadow: var(--shadow-subtle);
18
- transition: all var(--transition-normal) var(--ease-spring);
19
- }
20
-
21
- .main-tab-btn:hover {
22
- border-color: var(--color-brand);
23
- color: var(--color-text-primary);
24
- transform: translateY(-1px);
25
- }
26
-
27
- .main-tab-btn.active {
28
- border-color: var(--color-brand);
29
- box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
30
- color: var(--color-text-primary);
31
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.12), rgba(255, 255, 255, 0.95));
32
- }
33
-
34
- .status-strip {
35
- display: flex;
36
- flex-wrap: wrap;
37
- gap: 8px;
38
- margin: 0 0 12px;
39
- }
40
-
41
- .status-chip {
42
- min-width: 0;
43
- max-width: 100%;
44
- padding: 6px 10px;
45
- border: 1px solid var(--color-border);
46
- background: rgba(255, 253, 252, 0.82);
47
- box-shadow: none;
48
- display: inline-flex;
49
- flex-direction: row;
50
- align-items: center;
51
- gap: 8px;
52
- border-radius: 999px;
53
- }
54
-
55
- .status-chip .label {
56
- display: inline;
57
- font-size: 10px;
58
- color: var(--color-text-muted);
59
- margin-bottom: 0;
60
- letter-spacing: 0.06em;
61
- text-transform: uppercase;
62
- flex-shrink: 0;
63
- }
64
-
65
- .status-chip .value {
66
- font-size: 12px;
67
- font-weight: 600;
68
- color: var(--color-text-primary);
69
- letter-spacing: -0.01em;
70
- white-space: nowrap;
71
- overflow-wrap: normal;
72
- word-break: normal;
73
- }
74
-
75
- .provider-fast-switch {
76
- margin: 0 0 14px;
77
- padding: 10px 12px;
78
- border-radius: 10px;
79
- border: 1px solid var(--color-border);
80
- background: rgba(255, 253, 252, 0.88);
81
- box-shadow: none;
82
- display: grid;
83
- gap: 6px;
84
- }
85
-
86
- .provider-fast-switch-label {
87
- font-size: 11px;
88
- color: var(--color-text-tertiary);
89
- letter-spacing: 0.02em;
90
- font-weight: 600;
91
- }
92
-
93
- .provider-fast-switch-select {
94
- width: 100%;
95
- min-height: 36px;
96
- padding: 7px 10px;
97
- padding-right: 38px;
98
- border: 1px solid var(--color-border-soft);
99
- border-radius: var(--radius-sm);
100
- font-size: var(--font-size-body);
101
- color: var(--color-text-primary);
102
- background-color: var(--color-surface-alt);
103
- outline: none;
104
- cursor: pointer;
105
- appearance: none;
106
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23505A66' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");
107
- background-repeat: no-repeat;
108
- background-position: right 12px center;
109
- background-size: 12px;
110
- }
111
-
112
- .provider-fast-switch-select:focus {
113
- border-color: var(--color-brand);
114
- box-shadow: var(--shadow-input-focus);
115
- }
116
-
117
- .main-panel {
118
- min-width: 0;
119
- background: var(--color-bg);
120
- border: none;
121
- border-radius: 0;
122
- box-shadow: none;
123
- padding: 0 28px 28px;
124
- backdrop-filter: none;
125
- position: relative;
126
- overflow-x: hidden;
127
- overflow-y: auto;
128
- min-height: 0;
129
- height: 100vh;
130
- scrollbar-width: none;
131
- -ms-overflow-style: none;
132
- }
133
-
134
- .main-panel::-webkit-scrollbar {
135
- display: none;
136
- }
137
-
138
- .main-panel-topbar {
139
- position: sticky;
140
- top: 0;
141
- z-index: 12;
142
- margin: 0 -28px 14px;
143
- padding: 0 28px 12px;
144
- background: linear-gradient(180deg, rgba(247, 243, 239, 0.96) 0%, rgba(247, 243, 239, 0.92) 78%, rgba(247, 243, 239, 0) 100%);
145
- backdrop-filter: blur(8px);
146
- }
147
-
148
- .panel-header {
149
- margin-bottom: 14px;
150
- text-align: left;
151
- }
152
-
153
- .panel-header-refined {
154
- display: flex;
155
- align-items: center;
156
- justify-content: space-between;
157
- gap: 14px;
158
- margin: 0 0 14px;
159
- padding: 18px 0 14px;
160
- border-bottom: 1px solid var(--color-border);
161
- background: transparent;
162
- }
163
-
164
- .panel-header-copy {
165
- display: flex;
166
- flex-direction: column;
167
- gap: 4px;
168
- max-width: none;
169
- }
170
-
171
- .panel-kicker {
172
- font-size: 10px;
173
- letter-spacing: 0.08em;
174
- text-transform: uppercase;
175
- color: var(--color-brand-dark);
176
- font-weight: 700;
177
- }
178
-
179
- .hero {
180
- display: flex;
181
- align-items: center;
182
- gap: var(--spacing-sm);
183
- margin-bottom: var(--spacing-sm);
184
- }
185
-
186
- .hero-logo {
187
- display: none;
188
- }
189
-
190
- .hero-title {
191
- font-size: clamp(22px, 2.4vw, 30px);
192
- line-height: 1.08;
193
- font-family: var(--font-family-display);
194
- color: var(--color-text-primary);
195
- letter-spacing: -0.025em;
196
- }
197
-
198
- .hero-title .accent {
199
- color: var(--color-brand);
200
- }
201
-
202
- .hero-subtitle {
203
- margin-top: 0;
204
- font-size: 13px;
205
- color: var(--color-text-tertiary);
206
- line-height: 1.5;
207
- max-width: 54ch;
208
- }
209
-
210
- .hero-github {
211
- display: none;
212
- margin-bottom: var(--spacing-sm);
213
- }
214
-
215
- .top-tabs {
216
- margin: 10px 12px 12px;
217
- background: transparent;
218
- border: none;
219
- border-radius: 0;
220
- padding: 0 8px 2px 2px;
221
- box-shadow: none;
222
- display: flex;
223
- flex-wrap: nowrap;
224
- gap: 6px;
225
- backdrop-filter: none;
226
- overflow-x: auto;
227
- overflow-y: hidden;
228
- -webkit-overflow-scrolling: touch;
229
- scrollbar-width: none;
230
- scroll-snap-type: x proximity;
231
- }
232
-
233
- .top-tabs::-webkit-scrollbar {
234
- display: none;
235
- }
236
-
237
- .top-tab {
238
- border: 1px solid var(--color-border);
239
- border-radius: 999px;
240
- background: var(--color-surface);
241
- padding: 6px 10px;
242
- font-size: 11px;
243
- color: var(--color-text-secondary);
244
- text-align: center;
245
- cursor: pointer;
246
- transition: border-color var(--transition-fast) var(--ease-smooth), background-color var(--transition-fast) var(--ease-smooth), color var(--transition-fast) var(--ease-smooth);
247
- box-shadow: none;
248
- flex: 0 0 auto;
249
- scroll-snap-align: start;
250
- }
251
-
252
- .top-tab:hover {
253
- border-color: var(--color-border-strong);
254
- color: var(--color-text-primary);
255
- }
256
-
257
- .top-tab.active,
258
- .top-tab.nav-intent-active {
259
- border-color: rgba(199, 116, 98, 0.18);
260
- color: var(--color-brand-dark);
261
- background: var(--color-brand-light);
262
- box-shadow: none;
263
- }
264
-
265
- .top-tab.nav-intent-inactive,
266
- .top-tab.active.nav-intent-inactive {
267
- border-color: var(--color-border);
268
- color: var(--color-text-secondary);
269
- background: var(--color-surface);
270
- box-shadow: none;
271
- }
272
-
273
- #panel-sessions.session-panel-fast-hidden {
274
- display: none !important;
275
- }
276
-
277
- .config-subtabs {
278
- display: flex;
279
- gap: 6px;
280
- margin-bottom: 12px;
281
- padding: 4px;
282
- background: rgba(246, 241, 235, 0.72);
283
- border-radius: 12px;
284
- border: 1px solid rgba(216, 201, 184, 0.26);
285
- box-shadow: none;
286
- }
287
-
288
- .config-subtab {
289
- border: 1px solid rgba(216, 201, 184, 0.3);
290
- border-radius: 10px;
291
- padding: 8px 10px;
292
- background: rgba(255, 255, 255, 0.82);
293
- color: var(--color-text-secondary);
294
- cursor: pointer;
295
- font-size: 13px;
296
- font-weight: var(--font-weight-secondary);
297
- transition: all var(--transition-fast) var(--ease-smooth);
298
- box-shadow: none;
299
- }
300
-
301
- .config-subtab:hover {
302
- border-color: var(--color-border-strong);
303
- color: var(--color-text-primary);
304
- }
305
-
306
- .config-subtab.active {
307
- border-color: rgba(201, 94, 75, 0.34);
308
- color: var(--color-text-primary);
309
- background: rgba(255, 255, 255, 0.98);
310
- box-shadow: 0 1px 4px rgba(31, 26, 23, 0.025);
311
- }
312
-
313
- .settings-subtabs {
314
- margin-bottom: var(--spacing-sm);
315
- }
316
-
317
- .settings-tab-badge {
318
- display: inline-flex;
319
- align-items: center;
320
- justify-content: center;
321
- min-width: 18px;
322
- height: 18px;
323
- margin-left: 6px;
324
- padding: 0 6px;
325
- border-radius: 999px;
326
- background: rgba(210, 107, 90, 0.14);
327
- color: var(--color-text-secondary);
328
- font-size: 11px;
329
- line-height: 1;
330
- }
331
-
332
- .content-wrapper {
333
- background: transparent;
334
- border: none;
335
- border-radius: 0;
336
- box-shadow: none;
337
- padding: 0 0 40px;
338
- width: min(100%, 1480px);
339
- max-width: none;
340
- }
341
-
342
- .mode-content {
343
- width: 100%;
344
- border-radius: 0;
345
- background: transparent;
346
- box-shadow: none;
347
- padding: 0;
348
- }
1
+ .main-tabs {
2
+ display: flex;
3
+ gap: 10px;
4
+ }
5
+
6
+ .main-tab-btn {
7
+ flex: 1;
8
+ text-align: center;
9
+ border: 1px solid rgba(216, 201, 184, 0.55);
10
+ background: rgba(255, 255, 255, 0.95);
11
+ border-radius: var(--radius-lg);
12
+ padding: 12px 14px;
13
+ cursor: pointer;
14
+ color: var(--color-text-secondary);
15
+ font-size: var(--font-size-body);
16
+ font-weight: var(--font-weight-secondary);
17
+ box-shadow: var(--shadow-subtle);
18
+ transition: all var(--transition-normal) var(--ease-spring);
19
+ }
20
+
21
+ .main-tab-btn:hover {
22
+ border-color: var(--color-brand);
23
+ color: var(--color-text-primary);
24
+ transform: translateY(-1px);
25
+ }
26
+
27
+ .main-tab-btn.active {
28
+ border-color: var(--color-brand);
29
+ box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
30
+ color: var(--color-text-primary);
31
+ background: linear-gradient(135deg, rgba(201, 94, 75, 0.12), rgba(255, 255, 255, 0.95));
32
+ }
33
+
34
+ .status-strip {
35
+ display: flex;
36
+ flex-wrap: wrap;
37
+ gap: 8px;
38
+ margin: 0 0 12px;
39
+ }
40
+
41
+ /* Give the status strip a bit more breathing room under the sticky header. */
42
+ .main-panel-topbar .status-strip {
43
+ margin-top: 10px;
44
+ margin-bottom: 16px;
45
+ }
46
+
47
+ .lang-toggle {
48
+ display: grid;
49
+ grid-template-columns: 1fr 1fr;
50
+ gap: 10px;
51
+ }
52
+
53
+ .lang-toggle-btn {
54
+ border: 1px solid var(--color-border);
55
+ background: rgba(255, 255, 255, 0.75);
56
+ border-radius: 10px;
57
+ padding: 10px 12px;
58
+ font-size: 12px;
59
+ font-weight: 700;
60
+ color: var(--color-text-secondary);
61
+ transition: background 160ms ease, border-color 160ms ease, color 160ms ease;
62
+ }
63
+
64
+ .lang-toggle-btn:hover {
65
+ border-color: rgba(0, 0, 0, 0.22);
66
+ background: rgba(255, 255, 255, 0.95);
67
+ }
68
+
69
+ .lang-toggle-btn.active {
70
+ background: rgba(18, 22, 35, 0.10);
71
+ border-color: rgba(18, 22, 35, 0.30);
72
+ color: var(--color-text);
73
+ }
74
+
75
+ .status-chip {
76
+ min-width: 0;
77
+ max-width: 100%;
78
+ padding: 6px 10px;
79
+ border: 1px solid var(--color-border);
80
+ background: rgba(255, 253, 252, 0.82);
81
+ box-shadow: none;
82
+ display: inline-flex;
83
+ flex-direction: row;
84
+ align-items: center;
85
+ gap: 8px;
86
+ border-radius: 999px;
87
+ }
88
+
89
+ .status-chip .label {
90
+ display: inline;
91
+ font-size: 10px;
92
+ color: var(--color-text-muted);
93
+ margin-bottom: 0;
94
+ letter-spacing: 0.06em;
95
+ text-transform: uppercase;
96
+ flex-shrink: 0;
97
+ }
98
+
99
+ .status-chip .value {
100
+ font-size: 12px;
101
+ font-weight: 600;
102
+ color: var(--color-text-primary);
103
+ letter-spacing: -0.01em;
104
+ white-space: nowrap;
105
+ overflow-wrap: normal;
106
+ word-break: normal;
107
+ }
108
+
109
+ .provider-fast-switch {
110
+ margin: 0 0 14px;
111
+ padding: 10px 12px;
112
+ border-radius: 10px;
113
+ border: 1px solid var(--color-border);
114
+ background: rgba(255, 253, 252, 0.88);
115
+ box-shadow: none;
116
+ display: grid;
117
+ gap: 6px;
118
+ }
119
+
120
+ .provider-fast-switch-label {
121
+ font-size: 11px;
122
+ color: var(--color-text-tertiary);
123
+ letter-spacing: 0.02em;
124
+ font-weight: 600;
125
+ }
126
+
127
+ .provider-fast-switch-select {
128
+ width: 100%;
129
+ min-height: 36px;
130
+ padding: 7px 10px;
131
+ padding-right: 38px;
132
+ border: 1px solid var(--color-border-soft);
133
+ border-radius: var(--radius-sm);
134
+ font-size: var(--font-size-body);
135
+ color: var(--color-text-primary);
136
+ background-color: var(--color-surface-alt);
137
+ outline: none;
138
+ cursor: pointer;
139
+ appearance: none;
140
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23505A66' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");
141
+ background-repeat: no-repeat;
142
+ background-position: right 12px center;
143
+ background-size: 12px;
144
+ }
145
+
146
+ .provider-fast-switch-select:focus {
147
+ border-color: var(--color-brand);
148
+ box-shadow: var(--shadow-input-focus);
149
+ }
150
+
151
+ .main-panel {
152
+ min-width: 0;
153
+ background: var(--color-bg);
154
+ border: none;
155
+ border-radius: 0;
156
+ box-shadow: none;
157
+ padding: 0 28px 28px;
158
+ backdrop-filter: none;
159
+ position: relative;
160
+ overflow-x: hidden;
161
+ overflow-y: auto;
162
+ min-height: 0;
163
+ height: 100vh;
164
+ scrollbar-width: none;
165
+ -ms-overflow-style: none;
166
+ }
167
+
168
+ .main-panel::-webkit-scrollbar {
169
+ display: none;
170
+ }
171
+
172
+ .main-panel-topbar {
173
+ position: sticky;
174
+ top: 0;
175
+ z-index: 12;
176
+ margin: 0 -28px 14px;
177
+ padding: 0 28px 12px;
178
+ background: linear-gradient(180deg, rgba(247, 243, 239, 0.96) 0%, rgba(247, 243, 239, 0.92) 78%, rgba(247, 243, 239, 0) 100%);
179
+ backdrop-filter: blur(8px);
180
+ }
181
+
182
+ .panel-header {
183
+ margin-bottom: 14px;
184
+ text-align: left;
185
+ }
186
+
187
+ .panel-header-refined {
188
+ display: flex;
189
+ align-items: center;
190
+ justify-content: space-between;
191
+ gap: 14px;
192
+ margin: 0 0 14px;
193
+ padding: 18px 0 14px;
194
+ border-bottom: 1px solid var(--color-border);
195
+ background: transparent;
196
+ }
197
+
198
+ .panel-header-copy {
199
+ display: flex;
200
+ flex-direction: column;
201
+ gap: 4px;
202
+ max-width: none;
203
+ }
204
+
205
+ .panel-kicker {
206
+ font-size: 10px;
207
+ letter-spacing: 0.08em;
208
+ text-transform: uppercase;
209
+ color: var(--color-brand-dark);
210
+ font-weight: 700;
211
+ }
212
+
213
+ .hero {
214
+ display: flex;
215
+ align-items: center;
216
+ gap: var(--spacing-sm);
217
+ margin-bottom: var(--spacing-sm);
218
+ }
219
+
220
+ .hero-logo {
221
+ display: none;
222
+ }
223
+
224
+ .hero-title {
225
+ font-size: clamp(22px, 2.4vw, 30px);
226
+ line-height: 1.08;
227
+ font-family: var(--font-family-display);
228
+ color: var(--color-text-primary);
229
+ letter-spacing: -0.025em;
230
+ }
231
+
232
+ .hero-title .accent {
233
+ color: var(--color-brand);
234
+ }
235
+
236
+ .hero-subtitle {
237
+ margin-top: 0;
238
+ font-size: 13px;
239
+ color: var(--color-text-tertiary);
240
+ line-height: 1.5;
241
+ max-width: 54ch;
242
+ }
243
+
244
+ .hero-github {
245
+ display: none;
246
+ margin-bottom: var(--spacing-sm);
247
+ }
248
+
249
+ .top-tabs {
250
+ margin: 10px 12px 12px;
251
+ background: transparent;
252
+ border: none;
253
+ border-radius: 0;
254
+ padding: 0 8px 2px 2px;
255
+ box-shadow: none;
256
+ display: flex;
257
+ flex-wrap: nowrap;
258
+ gap: 6px;
259
+ backdrop-filter: none;
260
+ overflow-x: auto;
261
+ overflow-y: hidden;
262
+ -webkit-overflow-scrolling: touch;
263
+ scrollbar-width: none;
264
+ scroll-snap-type: x proximity;
265
+ }
266
+
267
+ .top-tabs::-webkit-scrollbar {
268
+ display: none;
269
+ }
270
+
271
+ .top-tab {
272
+ border: 1px solid var(--color-border);
273
+ border-radius: 999px;
274
+ background: var(--color-surface);
275
+ padding: 6px 10px;
276
+ font-size: 11px;
277
+ color: var(--color-text-secondary);
278
+ text-align: center;
279
+ cursor: pointer;
280
+ transition: border-color var(--transition-fast) var(--ease-smooth), background-color var(--transition-fast) var(--ease-smooth), color var(--transition-fast) var(--ease-smooth);
281
+ box-shadow: none;
282
+ flex: 0 0 auto;
283
+ scroll-snap-align: start;
284
+ }
285
+
286
+ .top-tab:hover {
287
+ border-color: var(--color-border-strong);
288
+ color: var(--color-text-primary);
289
+ }
290
+
291
+ .top-tab.active,
292
+ .top-tab.nav-intent-active {
293
+ border-color: rgba(199, 116, 98, 0.18);
294
+ color: var(--color-brand-dark);
295
+ background: var(--color-brand-light);
296
+ box-shadow: none;
297
+ }
298
+
299
+ .top-tab.nav-intent-inactive,
300
+ .top-tab.active.nav-intent-inactive {
301
+ border-color: var(--color-border);
302
+ color: var(--color-text-secondary);
303
+ background: var(--color-surface);
304
+ box-shadow: none;
305
+ }
306
+
307
+ #panel-sessions.session-panel-fast-hidden {
308
+ display: none !important;
309
+ }
310
+
311
+ .config-subtabs {
312
+ display: flex;
313
+ gap: 6px;
314
+ margin-bottom: 12px;
315
+ padding: 4px;
316
+ background: rgba(246, 241, 235, 0.72);
317
+ border-radius: 12px;
318
+ border: 1px solid rgba(216, 201, 184, 0.26);
319
+ box-shadow: none;
320
+ }
321
+
322
+ .config-subtab {
323
+ border: 1px solid rgba(216, 201, 184, 0.3);
324
+ border-radius: 10px;
325
+ padding: 8px 10px;
326
+ background: rgba(255, 255, 255, 0.82);
327
+ color: var(--color-text-secondary);
328
+ cursor: pointer;
329
+ font-size: 13px;
330
+ font-weight: var(--font-weight-secondary);
331
+ transition: all var(--transition-fast) var(--ease-smooth);
332
+ box-shadow: none;
333
+ }
334
+
335
+ .config-subtab:hover {
336
+ border-color: var(--color-border-strong);
337
+ color: var(--color-text-primary);
338
+ }
339
+
340
+ .config-subtab.active {
341
+ border-color: rgba(201, 94, 75, 0.34);
342
+ color: var(--color-text-primary);
343
+ background: rgba(255, 255, 255, 0.98);
344
+ box-shadow: 0 1px 4px rgba(31, 26, 23, 0.025);
345
+ }
346
+
347
+ .settings-subtabs {
348
+ margin-bottom: var(--spacing-sm);
349
+ }
350
+
351
+ .settings-tab-badge {
352
+ display: inline-flex;
353
+ align-items: center;
354
+ justify-content: center;
355
+ min-width: 18px;
356
+ height: 18px;
357
+ margin-left: 6px;
358
+ padding: 0 6px;
359
+ border-radius: 999px;
360
+ background: rgba(210, 107, 90, 0.14);
361
+ color: var(--color-text-secondary);
362
+ font-size: 11px;
363
+ line-height: 1;
364
+ }
365
+
366
+ .content-wrapper {
367
+ background: transparent;
368
+ border: none;
369
+ border-radius: 0;
370
+ box-shadow: none;
371
+ padding: 0 0 40px;
372
+ width: min(100%, 1480px);
373
+ max-width: none;
374
+ }
375
+
376
+ .mode-content {
377
+ width: 100%;
378
+ border-radius: 0;
379
+ background: transparent;
380
+ box-shadow: none;
381
+ padding: 0;
382
+ }