codexmate 0.0.20 → 0.0.21

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 (102) hide show
  1. package/README.en.md +349 -259
  2. package/README.md +284 -252
  3. package/cli/agents-files.js +162 -0
  4. package/cli/archive-helpers.js +446 -0
  5. package/cli/auth-profiles.js +359 -0
  6. package/cli/builtin-proxy.js +580 -0
  7. package/cli/claude-proxy.js +998 -0
  8. package/cli/config-bootstrap.js +384 -0
  9. package/cli/config-health.js +338 -338
  10. package/cli/openclaw-config.js +629 -0
  11. package/cli/skills.js +1141 -0
  12. package/cli/zip-commands.js +510 -0
  13. package/cli.js +13101 -13497
  14. package/lib/cli-file-utils.js +151 -151
  15. package/lib/cli-models-utils.js +419 -311
  16. package/lib/cli-network-utils.js +164 -164
  17. package/lib/cli-path-utils.js +69 -0
  18. package/lib/cli-session-utils.js +121 -121
  19. package/lib/cli-sessions.js +386 -0
  20. package/lib/cli-utils.js +155 -155
  21. package/lib/download-artifacts.js +77 -0
  22. package/lib/mcp-stdio.js +440 -440
  23. package/lib/task-orchestrator.js +869 -0
  24. package/lib/text-diff.js +303 -303
  25. package/lib/workflow-engine.js +340 -340
  26. package/package.json +74 -70
  27. package/res/json5.min.js +1 -1
  28. package/res/vue.global.prod.js +13 -0
  29. package/web-ui/app.js +530 -397
  30. package/web-ui/index.html +33 -30
  31. package/web-ui/logic.agents-diff.mjs +386 -386
  32. package/web-ui/logic.claude.mjs +168 -108
  33. package/web-ui/logic.mjs +5 -5
  34. package/web-ui/logic.runtime.mjs +124 -124
  35. package/web-ui/logic.sessions.mjs +581 -263
  36. package/web-ui/modules/api.mjs +90 -69
  37. package/web-ui/modules/app.computed.dashboard.mjs +113 -113
  38. package/web-ui/modules/app.computed.index.mjs +15 -13
  39. package/web-ui/modules/app.computed.main-tabs.mjs +195 -0
  40. package/web-ui/modules/app.computed.session.mjs +507 -141
  41. package/web-ui/modules/app.constants.mjs +15 -15
  42. package/web-ui/modules/app.methods.agents.mjs +493 -493
  43. package/web-ui/modules/app.methods.claude-config.mjs +174 -174
  44. package/web-ui/modules/app.methods.codex-config.mjs +640 -640
  45. package/web-ui/modules/app.methods.index.mjs +88 -86
  46. package/web-ui/modules/app.methods.install.mjs +149 -157
  47. package/web-ui/modules/app.methods.navigation.mjs +619 -478
  48. package/web-ui/modules/app.methods.openclaw-core.mjs +814 -514
  49. package/web-ui/modules/app.methods.openclaw-editing.mjs +372 -337
  50. package/web-ui/modules/app.methods.openclaw-persist.mjs +369 -251
  51. package/web-ui/modules/app.methods.providers.mjs +363 -265
  52. package/web-ui/modules/app.methods.runtime.mjs +323 -323
  53. package/web-ui/modules/app.methods.session-actions.mjs +520 -457
  54. package/web-ui/modules/app.methods.session-browser.mjs +626 -435
  55. package/web-ui/modules/app.methods.session-timeline.mjs +448 -441
  56. package/web-ui/modules/app.methods.session-trash.mjs +422 -419
  57. package/web-ui/modules/app.methods.startup-claude.mjs +412 -406
  58. package/web-ui/modules/app.methods.task-orchestration.mjs +471 -0
  59. package/web-ui/modules/config-mode.computed.mjs +126 -124
  60. package/web-ui/modules/skills.computed.mjs +107 -107
  61. package/web-ui/modules/skills.methods.mjs +481 -481
  62. package/web-ui/partials/index/layout-footer.html +13 -69
  63. package/web-ui/partials/index/layout-header.html +402 -337
  64. package/web-ui/partials/index/modal-config-template-agents.html +125 -125
  65. package/web-ui/partials/index/modal-confirm-toast.html +32 -32
  66. package/web-ui/partials/index/modal-health-check.html +72 -72
  67. package/web-ui/partials/index/modal-openclaw-config.html +280 -275
  68. package/web-ui/partials/index/modal-skills.html +184 -184
  69. package/web-ui/partials/index/modals-basic.html +156 -196
  70. package/web-ui/partials/index/panel-config-claude.html +126 -100
  71. package/web-ui/partials/index/panel-config-codex.html +237 -237
  72. package/web-ui/partials/index/panel-config-openclaw.html +78 -84
  73. package/web-ui/partials/index/panel-docs.html +130 -0
  74. package/web-ui/partials/index/panel-market.html +174 -174
  75. package/web-ui/partials/index/panel-orchestration.html +397 -0
  76. package/web-ui/partials/index/panel-sessions.html +292 -387
  77. package/web-ui/partials/index/panel-settings.html +190 -166
  78. package/web-ui/partials/index/panel-usage.html +213 -0
  79. package/web-ui/session-helpers.mjs +559 -362
  80. package/web-ui/source-bundle.cjs +233 -233
  81. package/web-ui/styles/base-theme.css +271 -373
  82. package/web-ui/styles/controls-forms.css +360 -354
  83. package/web-ui/styles/docs-panel.css +182 -0
  84. package/web-ui/styles/feedback.css +108 -108
  85. package/web-ui/styles/health-check-dialog.css +144 -144
  86. package/web-ui/styles/layout-shell.css +376 -330
  87. package/web-ui/styles/modals-core.css +464 -449
  88. package/web-ui/styles/navigation-panels.css +348 -381
  89. package/web-ui/styles/openclaw-structured.css +266 -266
  90. package/web-ui/styles/responsive.css +450 -416
  91. package/web-ui/styles/sessions-list.css +400 -414
  92. package/web-ui/styles/sessions-preview.css +411 -405
  93. package/web-ui/styles/sessions-toolbar-trash.css +243 -243
  94. package/web-ui/styles/sessions-usage.css +628 -276
  95. package/web-ui/styles/skills-list.css +296 -298
  96. package/web-ui/styles/skills-market.css +335 -335
  97. package/web-ui/styles/task-orchestration.css +776 -0
  98. package/web-ui/styles/titles-cards.css +408 -407
  99. package/web-ui/styles.css +18 -16
  100. package/web-ui.html +17 -17
  101. package/res/screenshot.png +0 -0
  102. package/res/vue.global.js +0 -18552
@@ -1,276 +1,628 @@
1
- .sessions-subtabs {
2
- display: flex;
3
- gap: 10px;
4
- align-items: center;
5
- margin: 0 0 16px;
6
- }
7
-
8
- .sessions-subtab {
9
- border: 1px solid var(--color-border);
10
- background: var(--color-surface-alt);
11
- color: var(--color-text-secondary);
12
- padding: 8px 14px;
13
- border-radius: 999px;
14
- cursor: pointer;
15
- font-size: 13px;
16
- font-weight: 600;
17
- transition:
18
- background var(--transition-fast) var(--ease-smooth),
19
- color var(--transition-fast) var(--ease-smooth),
20
- border-color var(--transition-fast) var(--ease-smooth),
21
- box-shadow var(--transition-fast) var(--ease-smooth),
22
- transform var(--transition-fast) var(--ease-smooth);
23
- }
24
-
25
- .sessions-subtab:hover {
26
- background: var(--color-surface);
27
- border-color: var(--color-border-strong);
28
- color: var(--color-text-primary);
29
- }
30
-
31
- .sessions-subtab.active {
32
- background: var(--color-brand-light);
33
- color: var(--color-brand-dark);
34
- border-color: var(--color-brand);
35
- box-shadow: var(--shadow-subtle);
36
- }
37
-
38
- .usage-toolbar {
39
- display: flex;
40
- justify-content: space-between;
41
- align-items: center;
42
- gap: 12px;
43
- flex-wrap: wrap;
44
- margin-bottom: 16px;
45
- }
46
-
47
- .usage-range-group {
48
- display: flex;
49
- gap: 8px;
50
- flex-wrap: wrap;
51
- }
52
-
53
- .usage-range-btn {
54
- border: 1px solid var(--color-border);
55
- background: var(--color-surface-alt);
56
- color: var(--color-text-secondary);
57
- padding: 6px 12px;
58
- border-radius: 999px;
59
- cursor: pointer;
60
- font-size: 12px;
61
- font-weight: 600;
62
- transition:
63
- background var(--transition-fast) var(--ease-smooth),
64
- color var(--transition-fast) var(--ease-smooth),
65
- border-color var(--transition-fast) var(--ease-smooth),
66
- box-shadow var(--transition-fast) var(--ease-smooth);
67
- }
68
-
69
- .usage-range-btn:hover {
70
- background: var(--color-surface);
71
- border-color: var(--color-border-strong);
72
- color: var(--color-text-primary);
73
- }
74
-
75
- .usage-range-btn.active {
76
- background: var(--color-brand-light);
77
- color: var(--color-brand-dark);
78
- border-color: var(--color-brand);
79
- box-shadow: var(--shadow-subtle);
80
- }
81
-
82
- .usage-summary-grid {
83
- display: grid;
84
- grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
85
- gap: 12px;
86
- margin-bottom: 16px;
87
- }
88
-
89
- .usage-summary-card {
90
- padding: 14px 16px;
91
- border-radius: 14px;
92
- background: var(--color-surface-alt);
93
- border: 1px solid var(--color-border-soft);
94
- box-shadow: var(--shadow-subtle);
95
- }
96
-
97
- .usage-summary-label {
98
- font-size: 12px;
99
- color: var(--color-text-secondary);
100
- margin-bottom: 6px;
101
- }
102
-
103
- .usage-summary-value {
104
- font-size: 24px;
105
- font-weight: 700;
106
- color: var(--color-text-primary);
107
- }
108
-
109
- .usage-chart-grid {
110
- display: grid;
111
- grid-template-columns: 2fr 1fr;
112
- gap: 16px;
113
- }
114
-
115
- .usage-card {
116
- padding: 16px;
117
- border-radius: 16px;
118
- background: var(--color-surface);
119
- border: 1px solid var(--color-border-soft);
120
- box-shadow: var(--shadow-subtle);
121
- min-width: 0;
122
- overflow: hidden;
123
- }
124
-
125
- .usage-card-title {
126
- font-size: 14px;
127
- font-weight: 700;
128
- color: var(--color-text-primary);
129
- margin-bottom: 12px;
130
- }
131
-
132
- .usage-bars {
133
- display: flex;
134
- align-items: flex-end;
135
- gap: 8px;
136
- min-height: 180px;
137
- width: 100%;
138
- min-width: 0;
139
- overflow-x: auto;
140
- overflow-y: hidden;
141
- padding-bottom: 4px;
142
- }
143
-
144
- .usage-bar-group {
145
- flex: 1 0 44px;
146
- min-width: 44px;
147
- display: flex;
148
- flex-direction: column;
149
- align-items: center;
150
- gap: 8px;
151
- }
152
-
153
- .usage-bar-stack {
154
- width: 100%;
155
- max-width: 36px;
156
- height: 160px;
157
- display: flex;
158
- align-items: flex-end;
159
- gap: 4px;
160
- }
161
-
162
- .usage-bar {
163
- flex: 1;
164
- border-radius: 10px 10px 4px 4px;
165
- min-height: 4px;
166
- }
167
-
168
- .usage-bar.codex {
169
- background: var(--color-brand);
170
- }
171
-
172
- .usage-bar.claude {
173
- background: #8b6bd6;
174
- }
175
-
176
- .usage-bar-label {
177
- font-size: 11px;
178
- color: var(--color-text-secondary);
179
- width: 100%;
180
- text-align: center;
181
- white-space: nowrap;
182
- overflow: hidden;
183
- text-overflow: ellipsis;
184
- }
185
-
186
- .usage-legend {
187
- display: flex;
188
- gap: 14px;
189
- flex-wrap: wrap;
190
- font-size: 12px;
191
- color: var(--color-text-secondary);
192
- margin-bottom: 10px;
193
- }
194
-
195
- .usage-legend-dot {
196
- width: 10px;
197
- height: 10px;
198
- border-radius: 999px;
199
- display: inline-block;
200
- margin-right: 6px;
201
- }
202
-
203
- .usage-list {
204
- display: flex;
205
- flex-direction: column;
206
- gap: 10px;
207
- min-width: 0;
208
- }
209
-
210
- .usage-list-row {
211
- display: grid;
212
- grid-template-columns: minmax(56px, 72px) minmax(0, 1fr) minmax(48px, auto);
213
- gap: 10px;
214
- align-items: center;
215
- min-width: 0;
216
- }
217
-
218
- .usage-list-label,
219
- .usage-list-value {
220
- font-size: 12px;
221
- color: var(--color-text-secondary);
222
- min-width: 0;
223
- }
224
-
225
- .usage-list-value {
226
- word-break: break-word;
227
- overflow-wrap: anywhere;
228
- text-align: right;
229
- }
230
-
231
- .usage-progress {
232
- height: 8px;
233
- border-radius: 999px;
234
- background: rgba(71, 60, 52, 0.10);
235
- overflow: hidden;
236
- }
237
-
238
- .usage-progress-fill {
239
- height: 100%;
240
- border-radius: 999px;
241
- background: linear-gradient(90deg, var(--color-brand), #8b6bd6);
242
- }
243
-
244
- .usage-empty {
245
- padding: 24px 16px;
246
- border-radius: 16px;
247
- background: var(--color-surface-alt);
248
- border: 1px dashed var(--color-border);
249
- color: var(--color-text-secondary);
250
- }
251
-
252
- @media (max-width: 960px) {
253
- .usage-chart-grid {
254
- grid-template-columns: 1fr;
255
- }
256
- }
257
-
258
- @media (max-width: 640px) {
259
- .usage-list-row {
260
- grid-template-columns: 1fr;
261
- gap: 6px;
262
- }
263
-
264
- .usage-list-value {
265
- text-align: left;
266
- }
267
-
268
- .usage-bar-group {
269
- flex-basis: 36px;
270
- min-width: 36px;
271
- }
272
-
273
- .usage-bar-stack {
274
- max-width: 28px;
275
- }
276
- }
1
+ .sessions-subtabs {
2
+ display: flex;
3
+ gap: 10px;
4
+ align-items: center;
5
+ margin: 0 0 16px;
6
+ }
7
+
8
+ .sessions-subtab {
9
+ border: 1px solid var(--color-border);
10
+ background: var(--color-surface-alt);
11
+ color: var(--color-text-secondary);
12
+ padding: 8px 14px;
13
+ border-radius: 999px;
14
+ cursor: pointer;
15
+ font-size: 13px;
16
+ font-weight: 600;
17
+ transition:
18
+ background var(--transition-fast) var(--ease-smooth),
19
+ color var(--transition-fast) var(--ease-smooth),
20
+ border-color var(--transition-fast) var(--ease-smooth),
21
+ box-shadow var(--transition-fast) var(--ease-smooth),
22
+ transform var(--transition-fast) var(--ease-smooth);
23
+ }
24
+
25
+ .sessions-subtab:hover {
26
+ background: var(--color-surface);
27
+ border-color: var(--color-border-strong);
28
+ color: var(--color-text-primary);
29
+ }
30
+
31
+ .sessions-subtab.active {
32
+ background: var(--color-brand-light);
33
+ color: var(--color-brand-dark);
34
+ border-color: var(--color-brand);
35
+ box-shadow: var(--shadow-subtle);
36
+ }
37
+
38
+ .usage-toolbar {
39
+ display: flex;
40
+ justify-content: space-between;
41
+ align-items: center;
42
+ gap: 12px;
43
+ flex-wrap: wrap;
44
+ margin-bottom: 16px;
45
+ }
46
+
47
+ .usage-range-group {
48
+ display: flex;
49
+ gap: 8px;
50
+ flex-wrap: wrap;
51
+ }
52
+
53
+ .usage-range-btn {
54
+ border: 1px solid var(--color-border);
55
+ background: var(--color-surface-alt);
56
+ color: var(--color-text-secondary);
57
+ padding: 6px 12px;
58
+ border-radius: 999px;
59
+ cursor: pointer;
60
+ font-size: 12px;
61
+ font-weight: 600;
62
+ transition:
63
+ background var(--transition-fast) var(--ease-smooth),
64
+ color var(--transition-fast) var(--ease-smooth),
65
+ border-color var(--transition-fast) var(--ease-smooth),
66
+ box-shadow var(--transition-fast) var(--ease-smooth);
67
+ }
68
+
69
+ .usage-range-btn:hover {
70
+ background: var(--color-surface);
71
+ border-color: var(--color-border-strong);
72
+ color: var(--color-text-primary);
73
+ }
74
+
75
+ .usage-range-btn.active {
76
+ background: var(--color-brand-light);
77
+ color: var(--color-brand-dark);
78
+ border-color: var(--color-brand);
79
+ box-shadow: var(--shadow-subtle);
80
+ }
81
+
82
+ .usage-summary-grid {
83
+ display: grid;
84
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
85
+ gap: 12px;
86
+ margin-bottom: 16px;
87
+ }
88
+
89
+ .usage-summary-card {
90
+ display: flex;
91
+ flex-direction: column;
92
+ justify-content: flex-start;
93
+ gap: 4px;
94
+ min-height: 88px;
95
+ padding: 12px 14px;
96
+ border-radius: 14px;
97
+ background: var(--color-surface-alt);
98
+ border: 1px solid var(--color-border-soft);
99
+ box-shadow: var(--shadow-subtle);
100
+ }
101
+
102
+ .usage-summary-label {
103
+ min-height: 0;
104
+ font-size: 12px;
105
+ line-height: 1.4;
106
+ color: var(--color-text-secondary);
107
+ margin-bottom: 0;
108
+ }
109
+
110
+ .usage-summary-value {
111
+ min-height: 0;
112
+ display: flex;
113
+ align-items: center;
114
+ font-size: clamp(18px, 1.8vw, 22px);
115
+ line-height: 1.15;
116
+ font-weight: 700;
117
+ color: var(--color-text-primary);
118
+ word-break: break-word;
119
+ }
120
+
121
+ .usage-summary-note {
122
+ margin-top: 2px;
123
+ min-height: 0;
124
+ font-size: 12px;
125
+ color: var(--color-text-secondary);
126
+ line-height: 1.35;
127
+ }
128
+
129
+ .usage-chart-grid {
130
+ display: grid;
131
+ grid-template-columns: 2fr 1fr;
132
+ gap: 16px;
133
+ }
134
+
135
+ .usage-card {
136
+ padding: 16px;
137
+ border-radius: 16px;
138
+ background: var(--color-surface);
139
+ border: 1px solid var(--color-border-soft);
140
+ box-shadow: var(--shadow-subtle);
141
+ min-width: 0;
142
+ overflow: hidden;
143
+ }
144
+
145
+ .usage-card-head {
146
+ display: flex;
147
+ align-items: flex-start;
148
+ justify-content: space-between;
149
+ gap: 12px;
150
+ margin-bottom: 12px;
151
+ }
152
+
153
+ .usage-card-title {
154
+ font-size: 14px;
155
+ font-weight: 700;
156
+ color: var(--color-text-primary);
157
+ margin-bottom: 4px;
158
+ }
159
+
160
+ .usage-card-subtitle {
161
+ font-size: 12px;
162
+ line-height: 1.5;
163
+ color: var(--color-text-secondary);
164
+ }
165
+
166
+ .usage-card-kicker {
167
+ display: inline-flex;
168
+ align-items: center;
169
+ min-height: 30px;
170
+ padding: 0 10px;
171
+ border-radius: 999px;
172
+ border: 1px solid var(--color-border);
173
+ background: var(--color-surface-alt);
174
+ color: var(--color-text-secondary);
175
+ font-size: 12px;
176
+ font-weight: 600;
177
+ white-space: nowrap;
178
+ }
179
+
180
+ .usage-bars {
181
+ display: flex;
182
+ align-items: flex-end;
183
+ gap: 8px;
184
+ min-height: 180px;
185
+ width: 100%;
186
+ min-width: 0;
187
+ overflow-x: auto;
188
+ overflow-y: hidden;
189
+ padding: 0 2px 10px;
190
+ scrollbar-gutter: stable both-edges;
191
+ scrollbar-width: thin;
192
+ scrollbar-color: rgba(199, 116, 98, 0.72) rgba(199, 116, 98, 0.08);
193
+ }
194
+
195
+ .usage-bars::-webkit-scrollbar {
196
+ height: 10px;
197
+ }
198
+
199
+ .usage-bars::-webkit-scrollbar-track {
200
+ background: linear-gradient(90deg, rgba(199, 116, 98, 0.04), rgba(199, 116, 98, 0.1));
201
+ border-radius: 999px;
202
+ }
203
+
204
+ .usage-bars::-webkit-scrollbar-thumb {
205
+ background: linear-gradient(90deg, rgba(199, 116, 98, 0.68), rgba(180, 94, 78, 0.92));
206
+ border-radius: 999px;
207
+ border: 2px solid rgba(248, 243, 238, 0.96);
208
+ }
209
+
210
+ .usage-bars::-webkit-scrollbar-thumb:hover {
211
+ background: linear-gradient(90deg, rgba(199, 116, 98, 0.82), rgba(180, 94, 78, 1));
212
+ }
213
+
214
+ .usage-bar-group {
215
+ flex: 1 0 44px;
216
+ min-width: 44px;
217
+ display: flex;
218
+ flex-direction: column;
219
+ align-items: center;
220
+ gap: 8px;
221
+ }
222
+
223
+ .usage-bar-stack {
224
+ width: 100%;
225
+ max-width: 36px;
226
+ height: 160px;
227
+ display: flex;
228
+ align-items: flex-end;
229
+ gap: 4px;
230
+ }
231
+
232
+ .usage-bar {
233
+ flex: 1;
234
+ border-radius: 10px 10px 4px 4px;
235
+ min-height: 4px;
236
+ }
237
+
238
+ .usage-bar.codex {
239
+ background: var(--color-brand);
240
+ }
241
+
242
+ .usage-bar.claude {
243
+ background: #8b6bd6;
244
+ }
245
+
246
+ .usage-bar-label {
247
+ font-size: 11px;
248
+ color: var(--color-text-secondary);
249
+ width: 100%;
250
+ text-align: center;
251
+ white-space: nowrap;
252
+ overflow: hidden;
253
+ text-overflow: ellipsis;
254
+ }
255
+
256
+ .usage-legend {
257
+ display: flex;
258
+ gap: 14px;
259
+ flex-wrap: wrap;
260
+ font-size: 12px;
261
+ color: var(--color-text-secondary);
262
+ margin-bottom: 10px;
263
+ }
264
+
265
+ .usage-legend-dot {
266
+ width: 10px;
267
+ height: 10px;
268
+ border-radius: 999px;
269
+ display: inline-block;
270
+ margin-right: 6px;
271
+ }
272
+
273
+ .usage-list {
274
+ display: flex;
275
+ flex-direction: column;
276
+ gap: 10px;
277
+ min-width: 0;
278
+ }
279
+
280
+ .usage-list-row {
281
+ display: grid;
282
+ grid-template-columns: minmax(56px, 72px) minmax(0, 1fr) minmax(48px, auto);
283
+ gap: 10px;
284
+ align-items: center;
285
+ min-width: 0;
286
+ }
287
+
288
+ .usage-list-label,
289
+ .usage-list-value {
290
+ font-size: 12px;
291
+ color: var(--color-text-secondary);
292
+ min-width: 0;
293
+ }
294
+
295
+ .usage-list-label {
296
+ font-weight: 600;
297
+ color: var(--color-text-primary);
298
+ }
299
+
300
+ .usage-list-value {
301
+ word-break: break-word;
302
+ overflow-wrap: anywhere;
303
+ text-align: right;
304
+ }
305
+
306
+ .usage-list-subvalue {
307
+ grid-column: 1 / -1;
308
+ font-size: 11px;
309
+ color: var(--color-text-tertiary, var(--color-text-secondary));
310
+ line-height: 1.45;
311
+ }
312
+
313
+ .usage-list-row-compact {
314
+ grid-template-columns: minmax(52px, 64px) minmax(0, 1fr) minmax(32px, auto);
315
+ }
316
+
317
+ .usage-progress {
318
+ height: 8px;
319
+ border-radius: 999px;
320
+ background: rgba(71, 60, 52, 0.10);
321
+ overflow: hidden;
322
+ }
323
+
324
+ .usage-progress-fill {
325
+ height: 100%;
326
+ border-radius: 999px;
327
+ background: linear-gradient(90deg, var(--color-brand), #8b6bd6);
328
+ }
329
+
330
+ .usage-mini-bars {
331
+ display: grid;
332
+ grid-template-columns: repeat(24, minmax(0, 1fr));
333
+ gap: 10px 8px;
334
+ align-items: end;
335
+ }
336
+
337
+ .usage-mini-bar-group {
338
+ display: flex;
339
+ flex-direction: column;
340
+ align-items: center;
341
+ gap: 6px;
342
+ min-width: 0;
343
+ }
344
+
345
+ .usage-mini-bar-track {
346
+ width: 100%;
347
+ min-width: 16px;
348
+ max-width: 24px;
349
+ height: 72px;
350
+ border-radius: 10px;
351
+ background: rgba(71, 60, 52, 0.08);
352
+ display: flex;
353
+ align-items: flex-end;
354
+ overflow: hidden;
355
+ }
356
+
357
+ .usage-mini-bar-fill {
358
+ width: 100%;
359
+ min-height: 6px;
360
+ border-radius: 10px 10px 4px 4px;
361
+ background: linear-gradient(180deg, #8b6bd6 0%, var(--color-brand) 100%);
362
+ }
363
+
364
+ .usage-mini-bar-label {
365
+ font-size: 10px;
366
+ color: var(--color-text-secondary);
367
+ }
368
+
369
+ .usage-session-list {
370
+ display: flex;
371
+ flex-direction: column;
372
+ gap: 10px;
373
+ }
374
+
375
+ .usage-session-item {
376
+ padding: 12px;
377
+ border-radius: 12px;
378
+ background: var(--color-surface-alt);
379
+ border: 1px solid var(--color-border-soft);
380
+ min-width: 0;
381
+ }
382
+
383
+ .usage-session-row {
384
+ display: flex;
385
+ justify-content: space-between;
386
+ gap: 10px;
387
+ align-items: flex-start;
388
+ min-width: 0;
389
+ }
390
+
391
+ .usage-session-title {
392
+ font-size: 13px;
393
+ font-weight: 600;
394
+ color: var(--color-text-primary);
395
+ min-width: 0;
396
+ overflow: hidden;
397
+ text-overflow: ellipsis;
398
+ white-space: nowrap;
399
+ }
400
+
401
+ .usage-inline-stat {
402
+ font-size: 11px;
403
+ color: var(--color-brand-dark);
404
+ background: var(--color-brand-light);
405
+ border-radius: 999px;
406
+ padding: 4px 8px;
407
+ flex-shrink: 0;
408
+ font-weight: 700;
409
+ }
410
+
411
+ .usage-session-meta {
412
+ display: flex;
413
+ gap: 10px;
414
+ flex-wrap: wrap;
415
+ font-size: 11px;
416
+ color: var(--color-text-secondary);
417
+ margin-top: 6px;
418
+ }
419
+
420
+ .usage-session-path {
421
+ margin-top: 6px;
422
+ font-size: 11px;
423
+ color: var(--color-text-secondary);
424
+ word-break: break-word;
425
+ overflow-wrap: anywhere;
426
+ }
427
+
428
+ .usage-card-models {
429
+ display: flex;
430
+ flex-direction: column;
431
+ gap: 12px;
432
+ }
433
+
434
+ .usage-model-coverage-strip {
435
+ display: grid;
436
+ grid-template-columns: repeat(3, minmax(0, 1fr));
437
+ gap: 10px;
438
+ }
439
+
440
+ .usage-model-coverage-item {
441
+ padding: 12px;
442
+ border-radius: 12px;
443
+ border: 1px solid var(--color-border-soft);
444
+ background: var(--color-surface-alt);
445
+ display: flex;
446
+ flex-direction: column;
447
+ gap: 4px;
448
+ }
449
+
450
+ .usage-model-coverage-item strong {
451
+ font-size: 20px;
452
+ color: var(--color-text-primary);
453
+ }
454
+
455
+ .usage-model-coverage-item span,
456
+ .usage-inline-note,
457
+ .usage-diagnostic-copy,
458
+ .usage-diagnostic-meta {
459
+ font-size: 12px;
460
+ line-height: 1.5;
461
+ color: var(--color-text-secondary);
462
+ }
463
+
464
+ .usage-diagnostic-empty {
465
+ padding: 14px;
466
+ border-radius: 14px;
467
+ border: 1px dashed var(--color-border);
468
+ background: var(--color-surface-alt);
469
+ }
470
+
471
+ .usage-diagnostic-title {
472
+ font-size: 13px;
473
+ font-weight: 700;
474
+ color: var(--color-text-primary);
475
+ margin-bottom: 6px;
476
+ }
477
+
478
+ .usage-inline-note {
479
+ padding: 10px 12px;
480
+ border-radius: 12px;
481
+ background: rgba(255, 244, 220, 0.62);
482
+ color: #7a5110;
483
+ }
484
+
485
+ .usage-inline-tag {
486
+ display: inline-flex;
487
+ align-items: center;
488
+ margin: 0 6px 0 0;
489
+ padding: 2px 8px;
490
+ border-radius: 999px;
491
+ background: rgba(122, 81, 16, 0.10);
492
+ border: 1px solid rgba(122, 81, 16, 0.14);
493
+ color: inherit;
494
+ font-weight: 700;
495
+ }
496
+
497
+ .usage-diagnostic-list {
498
+ display: flex;
499
+ flex-direction: column;
500
+ gap: 8px;
501
+ }
502
+
503
+ .usage-diagnostic-list-title {
504
+ font-size: 12px;
505
+ font-weight: 700;
506
+ color: var(--color-text-primary);
507
+ }
508
+
509
+ .usage-diagnostic-row {
510
+ display: flex;
511
+ justify-content: space-between;
512
+ gap: 12px;
513
+ align-items: center;
514
+ padding: 10px 12px;
515
+ border-radius: 12px;
516
+ border: 1px solid var(--color-border-soft);
517
+ background: var(--color-surface-alt);
518
+ }
519
+
520
+ .usage-diagnostic-row-main,
521
+ .usage-diagnostic-row-side {
522
+ min-width: 0;
523
+ }
524
+
525
+ .usage-diagnostic-row-title {
526
+ font-size: 12px;
527
+ font-weight: 700;
528
+ color: var(--color-text-primary);
529
+ word-break: break-word;
530
+ overflow-wrap: anywhere;
531
+ }
532
+
533
+ .usage-diagnostic-row-meta {
534
+ display: flex;
535
+ flex-wrap: wrap;
536
+ gap: 8px;
537
+ margin-top: 4px;
538
+ font-size: 11px;
539
+ color: var(--color-text-secondary);
540
+ }
541
+
542
+ .usage-diagnostic-row-side {
543
+ display: flex;
544
+ align-items: center;
545
+ gap: 8px;
546
+ flex-wrap: wrap;
547
+ justify-content: flex-end;
548
+ }
549
+
550
+ .usage-model-list {
551
+ display: flex;
552
+ flex-wrap: wrap;
553
+ gap: 10px;
554
+ }
555
+
556
+ .usage-model-chip {
557
+ min-width: 0;
558
+ max-width: 100%;
559
+ padding: 10px 12px;
560
+ border-radius: 12px;
561
+ background: var(--color-surface-alt);
562
+ border: 1px solid var(--color-border-soft);
563
+ }
564
+
565
+ .usage-model-name {
566
+ font-size: 12px;
567
+ font-weight: 700;
568
+ color: var(--color-text-primary);
569
+ word-break: break-word;
570
+ overflow-wrap: anywhere;
571
+ }
572
+
573
+ .usage-model-meta {
574
+ margin-top: 4px;
575
+ font-size: 11px;
576
+ color: var(--color-text-secondary);
577
+ line-height: 1.4;
578
+ }
579
+
580
+ .usage-empty {
581
+ padding: 24px 16px;
582
+ border-radius: 16px;
583
+ background: var(--color-surface-alt);
584
+ border: 1px dashed var(--color-border);
585
+ color: var(--color-text-secondary);
586
+ }
587
+
588
+ @media (max-width: 960px) {
589
+ .usage-chart-grid,
590
+ .usage-model-coverage-strip {
591
+ grid-template-columns: 1fr;
592
+ }
593
+ }
594
+
595
+ @media (max-width: 640px) {
596
+ .usage-list-row {
597
+ grid-template-columns: 1fr;
598
+ gap: 6px;
599
+ }
600
+
601
+ .usage-list-subvalue {
602
+ grid-column: auto;
603
+ }
604
+
605
+ .usage-list-value {
606
+ text-align: left;
607
+ }
608
+
609
+ .usage-mini-bars {
610
+ grid-template-columns: repeat(12, minmax(0, 1fr));
611
+ }
612
+
613
+ .usage-bar-group {
614
+ flex-basis: 36px;
615
+ min-width: 36px;
616
+ }
617
+
618
+ .usage-bar-stack {
619
+ max-width: 28px;
620
+ }
621
+
622
+ .usage-toolbar,
623
+ .usage-card-head,
624
+ .usage-session-row {
625
+ flex-direction: column;
626
+ align-items: stretch;
627
+ }
628
+ }