codexmate 0.0.27 → 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 (137) hide show
  1. package/README.md +421 -421
  2. package/README.zh.md +354 -354
  3. package/cli/agents-files.js +224 -224
  4. package/cli/archive-helpers.js +446 -446
  5. package/cli/auth-profiles.js +375 -375
  6. package/cli/builtin-proxy.js +1620 -1299
  7. package/cli/claude-proxy.js +1022 -1022
  8. package/cli/config-bootstrap.js +384 -384
  9. package/cli/config-health.js +338 -338
  10. package/cli/doctor-core.js +903 -903
  11. package/cli/import-skills-url.js +356 -356
  12. package/cli/openai-bridge.js +1489 -1091
  13. package/cli/openclaw-config.js +629 -629
  14. package/cli/session-convert-args.js +65 -65
  15. package/cli/session-convert-io.js +82 -82
  16. package/cli/session-convert.js +43 -43
  17. package/cli/session-usage.concurrent.js +28 -28
  18. package/cli/session-usage.js +118 -118
  19. package/cli/session-usage.models.js +176 -176
  20. package/cli/skills.js +1141 -1141
  21. package/cli/zip-commands.js +510 -510
  22. package/cli.js +15264 -15251
  23. package/lib/automation.js +404 -404
  24. package/lib/cli-file-utils.js +151 -151
  25. package/lib/cli-models-utils.js +440 -379
  26. package/lib/cli-network-utils.js +190 -190
  27. package/lib/cli-path-utils.js +85 -85
  28. package/lib/cli-session-utils.js +121 -121
  29. package/lib/cli-sessions.js +417 -417
  30. package/lib/cli-utils.js +155 -155
  31. package/lib/download-artifacts.js +92 -92
  32. package/lib/mcp-stdio.js +453 -453
  33. package/lib/task-orchestrator.js +869 -869
  34. package/lib/text-diff.js +303 -303
  35. package/lib/workflow-engine.js +340 -340
  36. package/package.json +3 -1
  37. package/plugins/README.md +20 -20
  38. package/plugins/README.zh-CN.md +20 -20
  39. package/plugins/prompt-templates/comment-polish/index.mjs +25 -25
  40. package/plugins/prompt-templates/computed.mjs +253 -253
  41. package/plugins/prompt-templates/index.mjs +8 -8
  42. package/plugins/prompt-templates/manifest.mjs +15 -15
  43. package/plugins/prompt-templates/methods.mjs +553 -619
  44. package/plugins/prompt-templates/overview.mjs +91 -90
  45. package/plugins/prompt-templates/ownership.mjs +19 -19
  46. package/plugins/prompt-templates/rule-ack/index.mjs +21 -21
  47. package/plugins/prompt-templates/storage.mjs +64 -64
  48. package/plugins/registry.mjs +16 -16
  49. package/web-ui/app.js +625 -634
  50. package/web-ui/index.html +35 -35
  51. package/web-ui/logic.agents-diff.mjs +386 -386
  52. package/web-ui/logic.claude.mjs +168 -168
  53. package/web-ui/logic.codex.mjs +56 -0
  54. package/web-ui/logic.mjs +5 -5
  55. package/web-ui/logic.runtime.mjs +128 -128
  56. package/web-ui/logic.session-convert.mjs +70 -70
  57. package/web-ui/logic.sessions.mjs +765 -765
  58. package/web-ui/modules/api.mjs +90 -90
  59. package/web-ui/modules/app.computed.dashboard.mjs +225 -171
  60. package/web-ui/modules/app.computed.index.mjs +17 -17
  61. package/web-ui/modules/app.computed.main-tabs.mjs +205 -205
  62. package/web-ui/modules/app.computed.session.mjs +994 -994
  63. package/web-ui/modules/app.constants.mjs +15 -15
  64. package/web-ui/modules/app.methods.agents.mjs +632 -632
  65. package/web-ui/modules/app.methods.claude-config.mjs +190 -184
  66. package/web-ui/modules/app.methods.codex-config.mjs +892 -860
  67. package/web-ui/modules/app.methods.index.mjs +92 -92
  68. package/web-ui/modules/app.methods.install.mjs +205 -205
  69. package/web-ui/modules/app.methods.navigation.mjs +743 -743
  70. package/web-ui/modules/app.methods.openclaw-core.mjs +814 -814
  71. package/web-ui/modules/app.methods.openclaw-editing.mjs +372 -372
  72. package/web-ui/modules/app.methods.openclaw-persist.mjs +369 -369
  73. package/web-ui/modules/app.methods.providers.mjs +412 -404
  74. package/web-ui/modules/app.methods.runtime.mjs +345 -345
  75. package/web-ui/modules/app.methods.session-actions.mjs +593 -596
  76. package/web-ui/modules/app.methods.session-browser.mjs +984 -989
  77. package/web-ui/modules/app.methods.session-timeline.mjs +479 -479
  78. package/web-ui/modules/app.methods.session-trash.mjs +439 -439
  79. package/web-ui/modules/app.methods.startup-claude.mjs +533 -526
  80. package/web-ui/modules/app.methods.task-orchestration.mjs +556 -556
  81. package/web-ui/modules/config-mode.computed.mjs +124 -124
  82. package/web-ui/modules/config-template-confirm-pref.mjs +33 -33
  83. package/web-ui/modules/i18n.dict.mjs +2109 -2131
  84. package/web-ui/modules/i18n.mjs +56 -56
  85. package/web-ui/modules/plugins.computed.mjs +3 -3
  86. package/web-ui/modules/plugins.methods.mjs +3 -3
  87. package/web-ui/modules/plugins.storage.mjs +11 -11
  88. package/web-ui/modules/provider-url-display.mjs +17 -0
  89. package/web-ui/modules/sessions-filters-url.mjs +85 -85
  90. package/web-ui/modules/skills.computed.mjs +107 -107
  91. package/web-ui/modules/skills.methods.mjs +481 -481
  92. package/web-ui/partials/index/layout-footer.html +13 -13
  93. package/web-ui/partials/index/layout-header.html +475 -475
  94. package/web-ui/partials/index/modal-config-template-agents.html +174 -174
  95. package/web-ui/partials/index/modal-confirm-toast.html +32 -32
  96. package/web-ui/partials/index/modal-health-check.html +45 -45
  97. package/web-ui/partials/index/modal-openclaw-config.html +280 -280
  98. package/web-ui/partials/index/modal-skills.html +200 -200
  99. package/web-ui/partials/index/modals-basic.html +165 -165
  100. package/web-ui/partials/index/panel-config-claude.html +188 -187
  101. package/web-ui/partials/index/panel-config-codex.html +312 -283
  102. package/web-ui/partials/index/panel-config-openclaw.html +83 -83
  103. package/web-ui/partials/index/panel-dashboard.html +186 -186
  104. package/web-ui/partials/index/panel-docs.html +147 -147
  105. package/web-ui/partials/index/panel-market.html +177 -177
  106. package/web-ui/partials/index/panel-orchestration.html +391 -391
  107. package/web-ui/partials/index/panel-plugins.html +253 -279
  108. package/web-ui/partials/index/panel-sessions.html +316 -326
  109. package/web-ui/partials/index/panel-settings.html +253 -274
  110. package/web-ui/partials/index/panel-usage.html +371 -371
  111. package/web-ui/res/json5.min.js +1 -1
  112. package/web-ui/res/vue.global.prod.js +13 -13
  113. package/web-ui/session-helpers.mjs +576 -576
  114. package/web-ui/source-bundle.cjs +233 -233
  115. package/web-ui/styles/base-theme.css +281 -268
  116. package/web-ui/styles/controls-forms.css +422 -423
  117. package/web-ui/styles/dashboard.css +274 -274
  118. package/web-ui/styles/docs-panel.css +247 -247
  119. package/web-ui/styles/feedback.css +108 -108
  120. package/web-ui/styles/health-check-dialog.css +144 -144
  121. package/web-ui/styles/layout-shell.css +606 -603
  122. package/web-ui/styles/modals-core.css +466 -464
  123. package/web-ui/styles/navigation-panels.css +391 -390
  124. package/web-ui/styles/openclaw-structured.css +266 -266
  125. package/web-ui/styles/plugins-panel.css +523 -523
  126. package/web-ui/styles/responsive.css +454 -454
  127. package/web-ui/styles/sessions-list.css +419 -415
  128. package/web-ui/styles/sessions-preview.css +411 -411
  129. package/web-ui/styles/sessions-toolbar-trash.css +330 -330
  130. package/web-ui/styles/sessions-usage.css +1040 -1040
  131. package/web-ui/styles/settings-panel.css +185 -185
  132. package/web-ui/styles/skills-list.css +303 -303
  133. package/web-ui/styles/skills-market.css +406 -406
  134. package/web-ui/styles/task-orchestration.css +822 -822
  135. package/web-ui/styles/titles-cards.css +472 -408
  136. package/web-ui/styles.css +21 -21
  137. package/web-ui.html +17 -17
@@ -1,390 +1,391 @@
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 var(--color-border);
10
- background: var(--color-surface-tint);
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: var(--shadow-card-hover);
30
- color: var(--color-text-primary);
31
- background: linear-gradient(135deg, var(--color-brand-light), var(--color-surface-tint));
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: var(--color-surface-tint);
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: var(--color-surface);
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: var(--color-surface-tint);
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: var(--color-surface-tint);
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
- .provider-fast-switch-select:disabled {
152
- cursor: not-allowed;
153
- opacity: 0.72;
154
- border-color: var(--color-border-soft);
155
- background-color: var(--color-surface-alt);
156
- box-shadow: none;
157
- }
158
-
159
- .main-panel {
160
- min-width: 0;
161
- background: var(--color-bg);
162
- border: none;
163
- border-radius: 0;
164
- box-shadow: none;
165
- padding: 0 28px 28px;
166
- backdrop-filter: none;
167
- position: relative;
168
- overflow-x: hidden;
169
- overflow-y: auto;
170
- min-height: 0;
171
- height: 100vh;
172
- scrollbar-width: none;
173
- -ms-overflow-style: none;
174
- }
175
-
176
- .main-panel::-webkit-scrollbar {
177
- display: none;
178
- }
179
-
180
- .main-panel-topbar {
181
- position: sticky;
182
- top: 0;
183
- z-index: 12;
184
- margin: 0 -28px 14px;
185
- padding: 0 28px 12px;
186
- background: linear-gradient(180deg, var(--color-bg-topbar-strong) 0%, var(--color-bg-topbar-soft) 78%, var(--color-bg-topbar-clear) 100%);
187
- backdrop-filter: blur(8px);
188
- }
189
-
190
- .panel-header {
191
- margin-bottom: 14px;
192
- text-align: left;
193
- }
194
-
195
- .panel-header-refined {
196
- display: flex;
197
- align-items: center;
198
- justify-content: space-between;
199
- gap: 14px;
200
- margin: 0 0 14px;
201
- padding: 18px 0 14px;
202
- border-bottom: 1px solid var(--color-border);
203
- background: transparent;
204
- }
205
-
206
- .panel-header-copy {
207
- display: flex;
208
- flex-direction: column;
209
- gap: 4px;
210
- max-width: none;
211
- }
212
-
213
- .panel-kicker {
214
- font-size: 10px;
215
- letter-spacing: 0.08em;
216
- text-transform: uppercase;
217
- color: var(--color-brand-dark);
218
- font-weight: 700;
219
- }
220
-
221
- .hero {
222
- display: flex;
223
- align-items: center;
224
- gap: var(--spacing-sm);
225
- margin-bottom: var(--spacing-sm);
226
- }
227
-
228
- .hero-logo {
229
- display: none;
230
- }
231
-
232
- .hero-title {
233
- font-size: clamp(22px, 2.4vw, 30px);
234
- line-height: 1.08;
235
- font-family: var(--font-family-display);
236
- color: var(--color-text-primary);
237
- letter-spacing: -0.025em;
238
- }
239
-
240
- .hero-title .accent {
241
- color: var(--color-brand);
242
- }
243
-
244
- .hero-subtitle {
245
- margin-top: 0;
246
- font-size: 13px;
247
- color: var(--color-text-tertiary);
248
- line-height: 1.5;
249
- max-width: 54ch;
250
- }
251
-
252
- .hero-github {
253
- display: none;
254
- margin-bottom: var(--spacing-sm);
255
- }
256
-
257
- .top-tabs {
258
- margin: 10px 12px 12px;
259
- background: transparent;
260
- border: none;
261
- border-radius: 0;
262
- padding: 0 8px 2px 2px;
263
- box-shadow: none;
264
- display: flex;
265
- flex-wrap: nowrap;
266
- gap: 6px;
267
- backdrop-filter: none;
268
- overflow-x: auto;
269
- overflow-y: hidden;
270
- -webkit-overflow-scrolling: touch;
271
- scrollbar-width: none;
272
- scroll-snap-type: x proximity;
273
- }
274
-
275
- .top-tabs::-webkit-scrollbar {
276
- display: none;
277
- }
278
-
279
- .top-tab {
280
- border: 1px solid var(--color-border);
281
- border-radius: 999px;
282
- background: var(--color-surface);
283
- padding: 6px 10px;
284
- font-size: 11px;
285
- color: var(--color-text-secondary);
286
- text-align: center;
287
- cursor: pointer;
288
- transition: border-color var(--transition-fast) var(--ease-smooth), background-color var(--transition-fast) var(--ease-smooth), color var(--transition-fast) var(--ease-smooth);
289
- box-shadow: none;
290
- flex: 0 0 auto;
291
- scroll-snap-align: start;
292
- }
293
-
294
- .top-tab:hover {
295
- border-color: var(--color-border-strong);
296
- color: var(--color-text-primary);
297
- }
298
-
299
- .top-tab.active,
300
- .top-tab.nav-intent-active {
301
- border-color: rgba(199, 116, 98, 0.18);
302
- color: var(--color-brand-dark);
303
- background: var(--color-brand-light);
304
- box-shadow: none;
305
- }
306
-
307
- .top-tab.nav-intent-inactive,
308
- .top-tab.active.nav-intent-inactive {
309
- border-color: var(--color-border);
310
- color: var(--color-text-secondary);
311
- background: var(--color-surface);
312
- box-shadow: none;
313
- }
314
-
315
- #panel-sessions.session-panel-fast-hidden {
316
- display: none !important;
317
- }
318
-
319
- .config-subtabs {
320
- display: flex;
321
- gap: 6px;
322
- margin-bottom: 12px;
323
- padding: 4px;
324
- background: rgba(246, 241, 235, 0.72);
325
- border-radius: 12px;
326
- border: 1px solid rgba(216, 201, 184, 0.26);
327
- box-shadow: none;
328
- }
329
-
330
- .config-subtab {
331
- border: 1px solid rgba(216, 201, 184, 0.3);
332
- border-radius: 10px;
333
- padding: 8px 10px;
334
- background: rgba(255, 255, 255, 0.82);
335
- color: var(--color-text-secondary);
336
- cursor: pointer;
337
- font-size: 13px;
338
- font-weight: var(--font-weight-secondary);
339
- transition: all var(--transition-fast) var(--ease-smooth);
340
- box-shadow: none;
341
- }
342
-
343
- .config-subtab:hover {
344
- border-color: var(--color-border-strong);
345
- color: var(--color-text-primary);
346
- }
347
-
348
- .config-subtab.active {
349
- border-color: rgba(201, 94, 75, 0.34);
350
- color: var(--color-text-primary);
351
- background: rgba(255, 255, 255, 0.98);
352
- box-shadow: 0 1px 4px rgba(31, 26, 23, 0.025);
353
- }
354
-
355
- .settings-subtabs {
356
- margin-bottom: var(--spacing-sm);
357
- }
358
-
359
- .settings-tab-badge {
360
- display: inline-flex;
361
- align-items: center;
362
- justify-content: center;
363
- min-width: 18px;
364
- height: 18px;
365
- margin-left: 6px;
366
- padding: 0 6px;
367
- border-radius: 999px;
368
- background: rgba(210, 107, 90, 0.14);
369
- color: var(--color-text-secondary);
370
- font-size: 11px;
371
- line-height: 1;
372
- }
373
-
374
- .content-wrapper {
375
- background: transparent;
376
- border: none;
377
- border-radius: 0;
378
- box-shadow: none;
379
- padding: 0 0 40px;
380
- width: min(100%, 1480px);
381
- max-width: none;
382
- }
383
-
384
- .mode-content {
385
- width: 100%;
386
- border-radius: 0;
387
- background: transparent;
388
- box-shadow: none;
389
- padding: 0;
390
- }
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 var(--color-border);
10
+ background: var(--color-surface-tint);
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-card);
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: var(--shadow-card-hover);
30
+ color: var(--color-text-primary);
31
+ background: linear-gradient(135deg, var(--color-brand-light), var(--color-surface-tint));
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: var(--color-surface-tint);
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: var(--color-border-strong);
66
+ background: var(--color-surface);
67
+ }
68
+
69
+ .lang-toggle-btn.active {
70
+ background: var(--color-brand-light);
71
+ border-color: rgba(200, 121, 99, 0.28);
72
+ color: var(--color-brand-dark);
73
+ }
74
+
75
+ .status-chip {
76
+ min-width: 0;
77
+ max-width: 100%;
78
+ padding: 6px 10px;
79
+ border: 1px solid var(--color-border-soft);
80
+ background: rgba(255, 255, 255, 0.62);
81
+ box-shadow: var(--shadow-subtle);
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: var(--radius-md);
113
+ border: 1px solid var(--color-border-soft);
114
+ background: rgba(255, 255, 255, 0.58);
115
+ box-shadow: var(--shadow-card);
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: rgba(255, 255, 255, 0.72);
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
+ .provider-fast-switch-select:disabled {
152
+ cursor: not-allowed;
153
+ opacity: 0.72;
154
+ border-color: var(--color-border-soft);
155
+ background-color: var(--color-surface-alt);
156
+ box-shadow: none;
157
+ }
158
+
159
+ .main-panel {
160
+ min-width: 0;
161
+ background: transparent;
162
+ border: none;
163
+ border-radius: 0;
164
+ box-shadow: none;
165
+ padding: 0 28px 28px;
166
+ backdrop-filter: none;
167
+ position: relative;
168
+ overflow-x: hidden;
169
+ overflow-y: auto;
170
+ min-height: 0;
171
+ height: 100vh;
172
+ scrollbar-width: none;
173
+ -ms-overflow-style: none;
174
+ }
175
+
176
+ .main-panel::-webkit-scrollbar {
177
+ display: none;
178
+ }
179
+
180
+ .main-panel-topbar {
181
+ position: sticky;
182
+ top: 0;
183
+ z-index: 12;
184
+ margin: 0 -28px 18px;
185
+ padding: 0 28px 14px;
186
+ background: linear-gradient(180deg, var(--color-bg-topbar-strong) 0%, var(--color-bg-topbar-soft) 78%, var(--color-bg-topbar-clear) 100%);
187
+ backdrop-filter: blur(18px) saturate(130%);
188
+ }
189
+
190
+ .panel-header {
191
+ margin-bottom: 14px;
192
+ text-align: left;
193
+ }
194
+
195
+ .panel-header-refined {
196
+ display: flex;
197
+ align-items: center;
198
+ justify-content: space-between;
199
+ gap: 14px;
200
+ margin: 0 0 14px;
201
+ padding: 20px 0 16px;
202
+ border-bottom: 1px solid rgba(137, 111, 94, 0.14);
203
+ background: transparent;
204
+ }
205
+
206
+ .panel-header-copy {
207
+ display: flex;
208
+ flex-direction: column;
209
+ gap: 4px;
210
+ max-width: none;
211
+ }
212
+
213
+ .panel-kicker {
214
+ font-size: 10px;
215
+ letter-spacing: 0.08em;
216
+ text-transform: uppercase;
217
+ color: var(--color-brand-dark);
218
+ font-weight: 700;
219
+ }
220
+
221
+ .hero {
222
+ display: flex;
223
+ align-items: center;
224
+ gap: var(--spacing-sm);
225
+ margin-bottom: var(--spacing-sm);
226
+ }
227
+
228
+ .hero-logo {
229
+ display: none;
230
+ }
231
+
232
+ .hero-title {
233
+ font-size: clamp(22px, 2.4vw, 30px);
234
+ line-height: 1.08;
235
+ font-family: var(--font-family-display);
236
+ color: var(--color-text-primary);
237
+ letter-spacing: -0.025em;
238
+ }
239
+
240
+ .hero-title .accent {
241
+ color: var(--color-brand);
242
+ }
243
+
244
+ .hero-subtitle {
245
+ margin-top: 0;
246
+ font-size: 13px;
247
+ color: var(--color-text-tertiary);
248
+ line-height: 1.5;
249
+ max-width: 54ch;
250
+ }
251
+
252
+ .hero-github {
253
+ display: none;
254
+ margin-bottom: var(--spacing-sm);
255
+ }
256
+
257
+ .top-tabs {
258
+ margin: 10px 12px 12px;
259
+ background: transparent;
260
+ border: none;
261
+ border-radius: 0;
262
+ padding: 0 8px 2px 2px;
263
+ box-shadow: none;
264
+ display: flex;
265
+ flex-wrap: nowrap;
266
+ gap: 6px;
267
+ backdrop-filter: none;
268
+ overflow-x: auto;
269
+ overflow-y: hidden;
270
+ -webkit-overflow-scrolling: touch;
271
+ scrollbar-width: none;
272
+ scroll-snap-type: x proximity;
273
+ }
274
+
275
+ .top-tabs::-webkit-scrollbar {
276
+ display: none;
277
+ }
278
+
279
+ .top-tab {
280
+ border: 1px solid var(--color-border-soft);
281
+ border-radius: 999px;
282
+ background: rgba(255, 255, 255, 0.66);
283
+ padding: 6px 10px;
284
+ font-size: 11px;
285
+ color: var(--color-text-secondary);
286
+ text-align: center;
287
+ cursor: pointer;
288
+ 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);
289
+ box-shadow: var(--shadow-subtle);
290
+ flex: 0 0 auto;
291
+ scroll-snap-align: start;
292
+ }
293
+
294
+ .top-tab:hover {
295
+ border-color: var(--color-border-strong);
296
+ color: var(--color-text-primary);
297
+ transform: translateY(-1px);
298
+ }
299
+
300
+ .top-tab.active,
301
+ .top-tab.nav-intent-active {
302
+ border-color: rgba(200, 121, 99, 0.28);
303
+ color: var(--color-brand-dark);
304
+ background: rgba(255, 255, 255, 0.82);
305
+ box-shadow: 0 10px 24px rgba(92, 68, 52, 0.1);
306
+ }
307
+
308
+ .top-tab.nav-intent-inactive,
309
+ .top-tab.active.nav-intent-inactive {
310
+ border-color: var(--color-border);
311
+ color: var(--color-text-secondary);
312
+ background: var(--color-surface);
313
+ box-shadow: none;
314
+ }
315
+
316
+ #panel-sessions.session-panel-fast-hidden {
317
+ display: none !important;
318
+ }
319
+
320
+ .config-subtabs {
321
+ display: flex;
322
+ gap: 6px;
323
+ margin-bottom: 12px;
324
+ padding: 4px;
325
+ background: rgba(255, 255, 255, 0.42);
326
+ border-radius: var(--radius-md);
327
+ border: 1px solid var(--color-border-soft);
328
+ box-shadow: var(--shadow-subtle);
329
+ }
330
+
331
+ .config-subtab {
332
+ border: 1px solid rgba(216, 201, 184, 0.3);
333
+ border-radius: var(--radius-sm);
334
+ padding: 8px 10px;
335
+ background: rgba(255, 255, 255, 0.62);
336
+ color: var(--color-text-secondary);
337
+ cursor: pointer;
338
+ font-size: 13px;
339
+ font-weight: var(--font-weight-secondary);
340
+ transition: all var(--transition-fast) var(--ease-smooth);
341
+ box-shadow: none;
342
+ }
343
+
344
+ .config-subtab:hover {
345
+ border-color: var(--color-border-strong);
346
+ color: var(--color-text-primary);
347
+ }
348
+
349
+ .config-subtab.active {
350
+ border-color: rgba(200, 121, 99, 0.34);
351
+ color: var(--color-text-primary);
352
+ background: rgba(255, 255, 255, 0.98);
353
+ box-shadow: 0 8px 20px rgba(92, 68, 52, 0.08);
354
+ }
355
+
356
+ .settings-subtabs {
357
+ margin-bottom: var(--spacing-sm);
358
+ }
359
+
360
+ .settings-tab-badge {
361
+ display: inline-flex;
362
+ align-items: center;
363
+ justify-content: center;
364
+ min-width: 18px;
365
+ height: 18px;
366
+ margin-left: 6px;
367
+ padding: 0 6px;
368
+ border-radius: 999px;
369
+ background: rgba(200, 121, 99, 0.14);
370
+ color: var(--color-text-secondary);
371
+ font-size: 11px;
372
+ line-height: 1;
373
+ }
374
+
375
+ .content-wrapper {
376
+ background: transparent;
377
+ border: none;
378
+ border-radius: 0;
379
+ box-shadow: none;
380
+ padding: 0 0 40px;
381
+ width: min(100%, 1480px);
382
+ max-width: none;
383
+ }
384
+
385
+ .mode-content {
386
+ width: 100%;
387
+ border-radius: 0;
388
+ background: transparent;
389
+ box-shadow: none;
390
+ padding: 0;
391
+ }