codexmate 0.0.32 → 0.0.33

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 (147) hide show
  1. package/README.md +147 -363
  2. package/README.zh.md +147 -371
  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 +1725 -1725
  7. package/cli/claude-proxy.js +1022 -1022
  8. package/cli/config-bootstrap.js +402 -402
  9. package/cli/config-health.js +454 -454
  10. package/cli/doctor-core.js +903 -903
  11. package/cli/import-skills-url.js +356 -356
  12. package/cli/local-bridge.js +551 -324
  13. package/cli/openai-bridge.js +1653 -1653
  14. package/cli/openclaw-config.js +629 -629
  15. package/cli/session-convert-args.js +69 -69
  16. package/cli/session-convert-io.js +82 -82
  17. package/cli/session-convert.js +150 -150
  18. package/cli/session-usage.concurrent.js +28 -28
  19. package/cli/session-usage.js +118 -118
  20. package/cli/session-usage.models.js +176 -176
  21. package/cli/skills.js +1141 -1141
  22. package/cli/update.js +162 -0
  23. package/cli/zip-commands.js +510 -510
  24. package/cli.js +16023 -15829
  25. package/lib/automation.js +404 -404
  26. package/lib/cli-file-utils.js +151 -151
  27. package/lib/cli-models-utils.js +440 -440
  28. package/lib/cli-network-utils.js +190 -190
  29. package/lib/cli-path-utils.js +85 -85
  30. package/lib/cli-session-utils.js +121 -121
  31. package/lib/cli-sessions.js +427 -426
  32. package/lib/cli-utils.js +155 -155
  33. package/lib/cli-webhook.js +126 -126
  34. package/lib/download-artifacts.js +92 -92
  35. package/lib/mcp-stdio.js +453 -453
  36. package/lib/task-orchestrator.js +869 -869
  37. package/lib/text-diff.js +303 -303
  38. package/lib/win-tray.js +119 -0
  39. package/lib/workflow-engine.js +340 -340
  40. package/package.json +76 -76
  41. package/plugins/README.md +20 -20
  42. package/plugins/README.zh-CN.md +20 -20
  43. package/plugins/prompt-templates/comment-polish/index.mjs +25 -25
  44. package/plugins/prompt-templates/computed.mjs +253 -253
  45. package/plugins/prompt-templates/index.mjs +8 -8
  46. package/plugins/prompt-templates/manifest.mjs +15 -15
  47. package/plugins/prompt-templates/methods.mjs +553 -553
  48. package/plugins/prompt-templates/overview.mjs +91 -91
  49. package/plugins/prompt-templates/ownership.mjs +19 -19
  50. package/plugins/prompt-templates/rule-ack/index.mjs +21 -21
  51. package/plugins/prompt-templates/storage.mjs +64 -64
  52. package/plugins/registry.mjs +16 -16
  53. package/web-ui/app.js +650 -647
  54. package/web-ui/index.html +36 -36
  55. package/web-ui/logic.agents-diff.mjs +386 -386
  56. package/web-ui/logic.claude.mjs +168 -168
  57. package/web-ui/logic.codex.mjs +69 -69
  58. package/web-ui/logic.mjs +5 -5
  59. package/web-ui/logic.runtime.mjs +128 -128
  60. package/web-ui/logic.session-convert.mjs +70 -70
  61. package/web-ui/logic.sessions.mjs +781 -781
  62. package/web-ui/modules/api.mjs +90 -90
  63. package/web-ui/modules/app.computed.dashboard.mjs +248 -248
  64. package/web-ui/modules/app.computed.index.mjs +17 -17
  65. package/web-ui/modules/app.computed.main-tabs.mjs +205 -205
  66. package/web-ui/modules/app.computed.session.mjs +735 -693
  67. package/web-ui/modules/app.constants.mjs +15 -15
  68. package/web-ui/modules/app.methods.agents.mjs +651 -651
  69. package/web-ui/modules/app.methods.claude-config.mjs +269 -200
  70. package/web-ui/modules/app.methods.codex-config.mjs +861 -861
  71. package/web-ui/modules/app.methods.index.mjs +94 -94
  72. package/web-ui/modules/app.methods.install.mjs +205 -205
  73. package/web-ui/modules/app.methods.navigation.mjs +774 -774
  74. package/web-ui/modules/app.methods.openclaw-core.mjs +814 -814
  75. package/web-ui/modules/app.methods.openclaw-editing.mjs +372 -372
  76. package/web-ui/modules/app.methods.openclaw-persist.mjs +369 -369
  77. package/web-ui/modules/app.methods.providers.mjs +575 -529
  78. package/web-ui/modules/app.methods.runtime.mjs +345 -345
  79. package/web-ui/modules/app.methods.session-actions.mjs +591 -591
  80. package/web-ui/modules/app.methods.session-browser.mjs +1012 -1012
  81. package/web-ui/modules/app.methods.session-timeline.mjs +479 -479
  82. package/web-ui/modules/app.methods.session-trash.mjs +438 -438
  83. package/web-ui/modules/app.methods.startup-claude.mjs +538 -537
  84. package/web-ui/modules/app.methods.task-orchestration.mjs +556 -556
  85. package/web-ui/modules/app.methods.webhook.mjs +79 -79
  86. package/web-ui/modules/config-mode.computed.mjs +124 -124
  87. package/web-ui/modules/config-template-confirm-pref.mjs +33 -33
  88. package/web-ui/modules/i18n.dict.mjs +3192 -3177
  89. package/web-ui/modules/i18n.mjs +62 -62
  90. package/web-ui/modules/plugins.computed.mjs +3 -3
  91. package/web-ui/modules/plugins.methods.mjs +3 -3
  92. package/web-ui/modules/plugins.storage.mjs +11 -11
  93. package/web-ui/modules/provider-url-display.mjs +17 -17
  94. package/web-ui/modules/sessions-filters-url.mjs +85 -85
  95. package/web-ui/modules/skills.computed.mjs +107 -107
  96. package/web-ui/modules/skills.methods.mjs +482 -482
  97. package/web-ui/partials/index/layout-footer.html +13 -13
  98. package/web-ui/partials/index/layout-header.html +499 -503
  99. package/web-ui/partials/index/modal-config-template-agents.html +185 -185
  100. package/web-ui/partials/index/modal-confirm-toast.html +32 -32
  101. package/web-ui/partials/index/modal-health-check.html +45 -45
  102. package/web-ui/partials/index/modal-openclaw-config.html +280 -280
  103. package/web-ui/partials/index/modal-skills.html +200 -200
  104. package/web-ui/partials/index/modals-basic.html +173 -162
  105. package/web-ui/partials/index/panel-config-claude.html +166 -136
  106. package/web-ui/partials/index/panel-config-codex.html +190 -196
  107. package/web-ui/partials/index/panel-config-codex.html.bak +337 -0
  108. package/web-ui/partials/index/panel-config-openclaw.html +83 -83
  109. package/web-ui/partials/index/panel-dashboard.html +186 -219
  110. package/web-ui/partials/index/panel-docs.html +114 -114
  111. package/web-ui/partials/index/panel-market.html +177 -177
  112. package/web-ui/partials/index/panel-orchestration.html +391 -391
  113. package/web-ui/partials/index/panel-plugins.html +253 -253
  114. package/web-ui/partials/index/panel-sessions.html +319 -313
  115. package/web-ui/partials/index/panel-settings.html +190 -190
  116. package/web-ui/partials/index/panel-trash.html +82 -82
  117. package/web-ui/partials/index/panel-usage.html +137 -137
  118. package/web-ui/res/json5.min.js +1 -1
  119. package/web-ui/res/vue.global.prod.js +13 -13
  120. package/web-ui/session-helpers.mjs +591 -591
  121. package/web-ui/source-bundle.cjs +233 -233
  122. package/web-ui/styles/base-theme.css +281 -281
  123. package/web-ui/styles/bridge-pool.css +197 -197
  124. package/web-ui/styles/controls-forms.css +433 -433
  125. package/web-ui/styles/dashboard.css +406 -406
  126. package/web-ui/styles/docs-panel.css +245 -245
  127. package/web-ui/styles/feedback.css +108 -108
  128. package/web-ui/styles/health-check-dialog.css +144 -144
  129. package/web-ui/styles/layout-shell.css +628 -638
  130. package/web-ui/styles/modals-core.css +499 -466
  131. package/web-ui/styles/navigation-panels.css +391 -391
  132. package/web-ui/styles/openclaw-structured.css +266 -266
  133. package/web-ui/styles/plugins-panel.css +564 -564
  134. package/web-ui/styles/responsive.css +392 -392
  135. package/web-ui/styles/sessions-list.css +683 -647
  136. package/web-ui/styles/sessions-preview.css +407 -407
  137. package/web-ui/styles/sessions-toolbar-trash.css +518 -518
  138. package/web-ui/styles/sessions-usage.css +588 -588
  139. package/web-ui/styles/settings-panel.css +349 -349
  140. package/web-ui/styles/skills-list.css +305 -305
  141. package/web-ui/styles/skills-market.css +429 -429
  142. package/web-ui/styles/task-orchestration.css +822 -822
  143. package/web-ui/styles/titles-cards.css +472 -472
  144. package/web-ui/styles/trash-panel.css +90 -90
  145. package/web-ui/styles/webhook.css +81 -81
  146. package/web-ui/styles.css +24 -24
  147. package/web-ui.html +17 -17
@@ -1,391 +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-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
- }
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
+ }