codexmate 0.0.40 → 0.0.41

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