codexmate 0.0.25 → 0.0.26

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 (135) hide show
  1. package/README.md +416 -413
  2. package/README.zh.md +349 -346
  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 +1079 -1079
  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 +997 -997
  13. package/cli/openclaw-config.js +629 -629
  14. package/cli/session-convert-args.js +65 -0
  15. package/cli/session-convert-io.js +82 -0
  16. package/cli/session-convert.js +43 -0
  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 +15218 -14736
  23. package/lib/automation.js +404 -404
  24. package/lib/cli-file-utils.js +151 -151
  25. package/lib/cli-models-utils.js +379 -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 +74 -74
  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 +619 -619
  44. package/plugins/prompt-templates/overview.mjs +90 -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 -612
  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.mjs +5 -5
  54. package/web-ui/logic.runtime.mjs +128 -128
  55. package/web-ui/logic.session-convert.mjs +70 -0
  56. package/web-ui/logic.sessions.mjs +709 -614
  57. package/web-ui/modules/api.mjs +90 -90
  58. package/web-ui/modules/app.computed.dashboard.mjs +171 -128
  59. package/web-ui/modules/app.computed.index.mjs +17 -17
  60. package/web-ui/modules/app.computed.main-tabs.mjs +205 -205
  61. package/web-ui/modules/app.computed.session.mjs +946 -670
  62. package/web-ui/modules/app.constants.mjs +15 -15
  63. package/web-ui/modules/app.methods.agents.mjs +632 -632
  64. package/web-ui/modules/app.methods.claude-config.mjs +179 -174
  65. package/web-ui/modules/app.methods.codex-config.mjs +860 -784
  66. package/web-ui/modules/app.methods.index.mjs +92 -92
  67. package/web-ui/modules/app.methods.install.mjs +205 -205
  68. package/web-ui/modules/app.methods.navigation.mjs +743 -695
  69. package/web-ui/modules/app.methods.openclaw-core.mjs +814 -814
  70. package/web-ui/modules/app.methods.openclaw-editing.mjs +372 -372
  71. package/web-ui/modules/app.methods.openclaw-persist.mjs +369 -369
  72. package/web-ui/modules/app.methods.providers.mjs +404 -404
  73. package/web-ui/modules/app.methods.runtime.mjs +345 -345
  74. package/web-ui/modules/app.methods.session-actions.mjs +596 -544
  75. package/web-ui/modules/app.methods.session-browser.mjs +985 -722
  76. package/web-ui/modules/app.methods.session-timeline.mjs +479 -448
  77. package/web-ui/modules/app.methods.session-trash.mjs +424 -424
  78. package/web-ui/modules/app.methods.startup-claude.mjs +522 -417
  79. package/web-ui/modules/app.methods.task-orchestration.mjs +556 -556
  80. package/web-ui/modules/config-mode.computed.mjs +124 -124
  81. package/web-ui/modules/config-template-confirm-pref.mjs +33 -33
  82. package/web-ui/modules/i18n.dict.mjs +2113 -2055
  83. package/web-ui/modules/i18n.mjs +56 -56
  84. package/web-ui/modules/plugins.computed.mjs +3 -3
  85. package/web-ui/modules/plugins.methods.mjs +3 -3
  86. package/web-ui/modules/plugins.storage.mjs +11 -11
  87. package/web-ui/modules/sessions-filters-url.mjs +85 -85
  88. package/web-ui/modules/skills.computed.mjs +107 -107
  89. package/web-ui/modules/skills.methods.mjs +481 -481
  90. package/web-ui/partials/index/layout-footer.html +13 -13
  91. package/web-ui/partials/index/layout-header.html +475 -475
  92. package/web-ui/partials/index/modal-config-template-agents.html +174 -174
  93. package/web-ui/partials/index/modal-confirm-toast.html +32 -32
  94. package/web-ui/partials/index/modal-health-check.html +45 -45
  95. package/web-ui/partials/index/modal-openclaw-config.html +280 -280
  96. package/web-ui/partials/index/modal-skills.html +200 -200
  97. package/web-ui/partials/index/modals-basic.html +165 -165
  98. package/web-ui/partials/index/panel-config-claude.html +184 -179
  99. package/web-ui/partials/index/panel-config-codex.html +283 -283
  100. package/web-ui/partials/index/panel-config-openclaw.html +83 -83
  101. package/web-ui/partials/index/panel-dashboard.html +186 -186
  102. package/web-ui/partials/index/panel-docs.html +147 -147
  103. package/web-ui/partials/index/panel-market.html +177 -177
  104. package/web-ui/partials/index/panel-orchestration.html +391 -391
  105. package/web-ui/partials/index/panel-plugins.html +279 -279
  106. package/web-ui/partials/index/panel-sessions.html +326 -303
  107. package/web-ui/partials/index/panel-settings.html +258 -258
  108. package/web-ui/partials/index/panel-usage.html +342 -361
  109. package/web-ui/res/json5.min.js +1 -1
  110. package/web-ui/res/vue.global.prod.js +13 -13
  111. package/web-ui/session-helpers.mjs +576 -573
  112. package/web-ui/source-bundle.cjs +233 -233
  113. package/web-ui/styles/base-theme.css +268 -264
  114. package/web-ui/styles/controls-forms.css +423 -423
  115. package/web-ui/styles/dashboard.css +274 -274
  116. package/web-ui/styles/docs-panel.css +247 -247
  117. package/web-ui/styles/feedback.css +108 -108
  118. package/web-ui/styles/health-check-dialog.css +144 -144
  119. package/web-ui/styles/layout-shell.css +603 -603
  120. package/web-ui/styles/modals-core.css +464 -464
  121. package/web-ui/styles/navigation-panels.css +390 -390
  122. package/web-ui/styles/openclaw-structured.css +266 -266
  123. package/web-ui/styles/plugins-panel.css +523 -523
  124. package/web-ui/styles/responsive.css +454 -454
  125. package/web-ui/styles/sessions-list.css +415 -398
  126. package/web-ui/styles/sessions-preview.css +411 -411
  127. package/web-ui/styles/sessions-toolbar-trash.css +330 -268
  128. package/web-ui/styles/sessions-usage.css +945 -912
  129. package/web-ui/styles/settings-panel.css +166 -166
  130. package/web-ui/styles/skills-list.css +303 -303
  131. package/web-ui/styles/skills-market.css +406 -406
  132. package/web-ui/styles/task-orchestration.css +822 -822
  133. package/web-ui/styles/titles-cards.css +408 -408
  134. package/web-ui/styles.css +21 -21
  135. package/web-ui.html +17 -17
@@ -1,912 +1,945 @@
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-current-session-bar {
48
- display: flex;
49
- flex-wrap: wrap;
50
- align-items: center;
51
- gap: 12px;
52
- padding: 10px 12px;
53
- margin: 0 0 14px;
54
- border-radius: 12px;
55
- border: 1px solid var(--color-border-soft);
56
- background: var(--color-surface-alt);
57
- font-size: 12px;
58
- color: var(--color-text-secondary);
59
- }
60
-
61
- .usage-current-session-label {
62
- font-weight: 700;
63
- color: var(--color-text-primary);
64
- }
65
-
66
- .usage-current-session-item strong {
67
- font-weight: 700;
68
- color: var(--color-text-primary);
69
- }
70
-
71
- .usage-range-group {
72
- display: flex;
73
- gap: 8px;
74
- flex-wrap: wrap;
75
- }
76
-
77
- .usage-range-btn {
78
- border: 1px solid var(--color-border);
79
- background: var(--color-surface-alt);
80
- color: var(--color-text-secondary);
81
- padding: 6px 12px;
82
- border-radius: 999px;
83
- cursor: pointer;
84
- font-size: 12px;
85
- font-weight: 600;
86
- transition:
87
- background var(--transition-fast) var(--ease-smooth),
88
- color var(--transition-fast) var(--ease-smooth),
89
- border-color var(--transition-fast) var(--ease-smooth),
90
- box-shadow var(--transition-fast) var(--ease-smooth);
91
- }
92
-
93
- .usage-range-btn:hover {
94
- background: var(--color-surface);
95
- border-color: var(--color-border-strong);
96
- color: var(--color-text-primary);
97
- }
98
-
99
- .usage-range-btn.active {
100
- background: var(--color-brand-light);
101
- color: var(--color-brand-dark);
102
- border-color: var(--color-brand);
103
- box-shadow: var(--shadow-subtle);
104
- }
105
-
106
- .usage-summary-grid {
107
- display: grid;
108
- grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
109
- gap: 12px;
110
- margin-bottom: 16px;
111
- }
112
-
113
- .usage-summary-card {
114
- display: flex;
115
- flex-direction: column;
116
- justify-content: flex-start;
117
- gap: 4px;
118
- min-height: 88px;
119
- padding: 12px 14px;
120
- border-radius: 14px;
121
- background: var(--color-surface-alt);
122
- border: 1px solid var(--color-border-soft);
123
- box-shadow: var(--shadow-subtle);
124
- }
125
-
126
- .usage-content {
127
- position: relative;
128
- }
129
-
130
- .usage-content-loading {
131
- opacity: 0.82;
132
- }
133
-
134
- .usage-content-overlay {
135
- position: absolute;
136
- inset: 0;
137
- display: flex;
138
- align-items: flex-start;
139
- justify-content: flex-end;
140
- padding: 12px 10px;
141
- pointer-events: none;
142
- font-size: 12px;
143
- color: var(--color-text-secondary);
144
- }
145
-
146
- .usage-spinner {
147
- width: 14px;
148
- height: 14px;
149
- border-radius: 999px;
150
- border: 2px solid rgba(80, 90, 100, 0.22);
151
- border-top-color: rgba(80, 90, 100, 0.7);
152
- margin-right: 8px;
153
- animation: usage-spin 0.9s linear infinite;
154
- }
155
-
156
- @keyframes usage-spin {
157
- to {
158
- transform: rotate(360deg);
159
- }
160
- }
161
-
162
- .usage-copyable {
163
- cursor: pointer;
164
- user-select: none;
165
- -webkit-tap-highlight-color: transparent;
166
- }
167
-
168
- .usage-copyable:focus-visible {
169
- outline: 2px solid var(--color-brand);
170
- outline-offset: 2px;
171
- border-radius: 10px;
172
- }
173
-
174
- .usage-summary-card.usage-copyable:hover {
175
- border-color: var(--color-border-strong);
176
- }
177
-
178
- .usage-loading-skeleton {
179
- display: flex;
180
- flex-direction: column;
181
- gap: 16px;
182
- }
183
-
184
- /* When showing the "正在加载" notice above the skeleton, keep comfortable spacing. */
185
- .session-empty + .usage-loading-skeleton {
186
- margin-top: 14px;
187
- }
188
-
189
- .usage-skeleton-card {
190
- position: relative;
191
- overflow: hidden;
192
- }
193
-
194
- .usage-skeleton-block {
195
- position: relative;
196
- min-height: 220px;
197
- overflow: hidden;
198
- }
199
-
200
- .usage-skeleton-line {
201
- height: 10px;
202
- border-radius: 999px;
203
- background: linear-gradient(90deg, rgba(150, 160, 170, 0.12), rgba(150, 160, 170, 0.22), rgba(150, 160, 170, 0.12));
204
- background-size: 200% 100%;
205
- animation: usage-skeleton 1.2s ease-in-out infinite;
206
- }
207
-
208
- .usage-skeleton-line.h-lg {
209
- height: 20px;
210
- margin-top: 6px;
211
- }
212
-
213
- .usage-skeleton-line.w-40 { width: 40%; }
214
- .usage-skeleton-line.w-55 { width: 55%; }
215
- .usage-skeleton-line.w-70 { width: 70%; }
216
-
217
- .usage-skeleton-card .usage-skeleton-line + .usage-skeleton-line {
218
- margin-top: 10px;
219
- }
220
-
221
- .usage-skeleton-block::before,
222
- .usage-skeleton-card::before {
223
- content: '';
224
- position: absolute;
225
- inset: 0;
226
- background: radial-gradient(circle at 25% 10%, rgba(255, 255, 255, 0.22), transparent 55%);
227
- pointer-events: none;
228
- }
229
-
230
- @keyframes usage-skeleton {
231
- 0% { background-position: 0% 0; }
232
- 100% { background-position: 200% 0; }
233
- }
234
-
235
- .usage-summary-label {
236
- min-height: 0;
237
- font-size: 12px;
238
- line-height: 1.4;
239
- color: var(--color-text-secondary);
240
- margin-bottom: 0;
241
- }
242
-
243
- .usage-summary-value {
244
- min-height: 0;
245
- display: flex;
246
- align-items: center;
247
- font-size: clamp(18px, 1.8vw, 22px);
248
- line-height: 1.15;
249
- font-weight: 700;
250
- color: var(--color-text-primary);
251
- word-break: break-word;
252
- }
253
-
254
- .usage-summary-note {
255
- margin-top: 2px;
256
- min-height: 0;
257
- font-size: 12px;
258
- color: var(--color-text-secondary);
259
- line-height: 1.35;
260
- }
261
-
262
- .usage-chart-grid {
263
- display: grid;
264
- grid-template-columns: 2fr 1fr;
265
- gap: 16px;
266
- }
267
-
268
- .usage-card {
269
- padding: 16px;
270
- border-radius: 16px;
271
- background: var(--color-surface);
272
- border: 1px solid var(--color-border-soft);
273
- box-shadow: var(--shadow-subtle);
274
- min-width: 0;
275
- overflow: hidden;
276
- }
277
-
278
- .usage-card-head {
279
- display: flex;
280
- align-items: flex-start;
281
- justify-content: space-between;
282
- gap: 12px;
283
- margin-bottom: 12px;
284
- }
285
-
286
- .usage-card-title {
287
- font-size: 14px;
288
- font-weight: 700;
289
- color: var(--color-text-primary);
290
- margin-bottom: 4px;
291
- }
292
-
293
- .usage-card-subtitle {
294
- font-size: 12px;
295
- line-height: 1.5;
296
- color: var(--color-text-secondary);
297
- }
298
-
299
- .usage-card-kicker {
300
- display: inline-flex;
301
- align-items: center;
302
- min-height: 30px;
303
- padding: 0 10px;
304
- border-radius: 999px;
305
- border: 1px solid var(--color-border);
306
- background: var(--color-surface-alt);
307
- color: var(--color-text-secondary);
308
- font-size: 12px;
309
- font-weight: 600;
310
- white-space: nowrap;
311
- }
312
-
313
- .usage-bars {
314
- display: flex;
315
- align-items: flex-end;
316
- gap: 8px;
317
- min-height: 180px;
318
- width: 100%;
319
- min-width: 0;
320
- overflow-x: auto;
321
- overflow-y: hidden;
322
- padding: 0 2px 10px;
323
- scrollbar-gutter: stable both-edges;
324
- scrollbar-width: thin;
325
- scrollbar-color: rgba(199, 116, 98, 0.72) rgba(199, 116, 98, 0.08);
326
- }
327
-
328
- .usage-bars::-webkit-scrollbar {
329
- height: 10px;
330
- }
331
-
332
- .usage-bars::-webkit-scrollbar-track {
333
- background: linear-gradient(90deg, rgba(199, 116, 98, 0.04), rgba(199, 116, 98, 0.1));
334
- border-radius: 999px;
335
- }
336
-
337
- .usage-bars::-webkit-scrollbar-thumb {
338
- background: linear-gradient(90deg, rgba(199, 116, 98, 0.68), rgba(180, 94, 78, 0.92));
339
- border-radius: 999px;
340
- border: 2px solid rgba(248, 243, 238, 0.96);
341
- }
342
-
343
- .usage-bars::-webkit-scrollbar-thumb:hover {
344
- background: linear-gradient(90deg, rgba(199, 116, 98, 0.82), rgba(180, 94, 78, 1));
345
- }
346
-
347
- .usage-bar-group {
348
- flex: 1 0 44px;
349
- min-width: 44px;
350
- display: flex;
351
- flex-direction: column;
352
- align-items: center;
353
- gap: 8px;
354
- }
355
-
356
- .usage-bar-stack {
357
- width: 100%;
358
- max-width: 36px;
359
- height: 160px;
360
- display: flex;
361
- align-items: flex-end;
362
- gap: 4px;
363
- }
364
-
365
- .usage-bar {
366
- flex: 1;
367
- border-radius: 10px 10px 4px 4px;
368
- min-height: 4px;
369
- }
370
-
371
- .usage-bar.codex {
372
- background: var(--color-brand);
373
- }
374
-
375
- /* =========================
376
- Daily usage (token + cost)
377
- ========================= */
378
-
379
- .usage-card-wide {
380
- grid-column: 1 / -1;
381
- }
382
-
383
- .usage-daily-legend {
384
- display: flex;
385
- flex-wrap: wrap;
386
- align-items: center;
387
- gap: 12px;
388
- margin: 0 0 10px;
389
- font-size: 12px;
390
- color: var(--color-text-secondary);
391
- }
392
-
393
- .usage-daily-dot {
394
- width: 10px;
395
- height: 10px;
396
- border-radius: 999px;
397
- }
398
-
399
- .usage-daily-dot-tokens {
400
- background: var(--color-brand);
401
- }
402
-
403
- .usage-daily-dot-cost {
404
- background: linear-gradient(135deg, rgba(139, 107, 214, 0.95), rgba(199, 116, 98, 0.95));
405
- }
406
-
407
- .usage-daily-bar-stack {
408
- width: 100%;
409
- max-width: 40px;
410
- height: 160px;
411
- display: flex;
412
- align-items: flex-end;
413
- justify-content: center;
414
- gap: 4px;
415
- }
416
-
417
- .usage-daily-bar {
418
- flex: 1;
419
- min-height: 4px;
420
- border-radius: 10px 10px 4px 4px;
421
- box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.28);
422
- }
423
-
424
- .usage-daily-bar-tokens {
425
- background: linear-gradient(180deg, rgba(199, 116, 98, 1) 0%, rgba(180, 94, 78, 1) 100%);
426
- }
427
-
428
- .usage-daily-bar-cost {
429
- background: linear-gradient(180deg, rgba(139, 107, 214, 0.92) 0%, rgba(95, 72, 170, 0.98) 100%);
430
- }
431
-
432
- .usage-daily-table-wrap {
433
- margin-top: 12px;
434
- border-radius: 14px;
435
- border: 1px solid var(--color-border-soft);
436
- background: var(--color-surface-alt);
437
- overflow: auto;
438
- }
439
-
440
- .usage-daily-table {
441
- width: 100%;
442
- border-collapse: collapse;
443
- min-width: 560px;
444
- }
445
-
446
- .usage-daily-table th,
447
- .usage-daily-table td {
448
- padding: 10px 12px;
449
- border-bottom: 1px solid rgba(216, 201, 184, 0.22);
450
- font-size: 12px;
451
- color: var(--color-text-secondary);
452
- white-space: nowrap;
453
- }
454
-
455
- .usage-daily-table thead th {
456
- position: sticky;
457
- top: 0;
458
- background: rgba(248, 243, 238, 0.92);
459
- backdrop-filter: blur(6px);
460
- font-weight: 700;
461
- color: var(--color-text-primary);
462
- z-index: 1;
463
- }
464
-
465
- .usage-daily-table tr:last-child td {
466
- border-bottom: none;
467
- }
468
-
469
- .usage-daily-table .right {
470
- text-align: right;
471
- }
472
-
473
- .usage-daily-table .mono {
474
- font-family: var(--font-family-mono);
475
- letter-spacing: -0.01em;
476
- }
477
-
478
- .usage-daily-note {
479
- margin-top: 10px;
480
- padding: 10px 12px;
481
- border-radius: 12px;
482
- background: rgba(255, 244, 220, 0.58);
483
- border: 1px solid rgba(216, 201, 184, 0.22);
484
- color: #7a5110;
485
- font-size: 12px;
486
- line-height: 1.45;
487
- }
488
-
489
- .usage-bar.claude {
490
- background: #8b6bd6;
491
- }
492
-
493
- .usage-bar-label {
494
- font-size: 11px;
495
- color: var(--color-text-secondary);
496
- width: 100%;
497
- text-align: center;
498
- white-space: nowrap;
499
- overflow: hidden;
500
- text-overflow: ellipsis;
501
- }
502
-
503
- .usage-legend {
504
- display: flex;
505
- gap: 14px;
506
- flex-wrap: wrap;
507
- font-size: 12px;
508
- color: var(--color-text-secondary);
509
- margin-bottom: 10px;
510
- }
511
-
512
- .usage-legend-dot {
513
- width: 10px;
514
- height: 10px;
515
- border-radius: 999px;
516
- display: inline-block;
517
- margin-right: 6px;
518
- }
519
-
520
- .usage-list {
521
- display: flex;
522
- flex-direction: column;
523
- gap: 10px;
524
- min-width: 0;
525
- }
526
-
527
- .usage-list-scroll {
528
- max-height: 220px;
529
- overflow-y: auto;
530
- padding-right: 6px;
531
- scrollbar-gutter: stable;
532
- scrollbar-width: thin;
533
- scrollbar-color: rgba(199, 116, 98, 0.72) rgba(199, 116, 98, 0.08);
534
- }
535
-
536
- .usage-list-top-paths {
537
- max-height: 140px;
538
- gap: 6px;
539
- }
540
-
541
- .usage-card-top-paths {
542
- grid-column: 1 / -1;
543
- }
544
-
545
- .usage-list-scroll::-webkit-scrollbar {
546
- width: 10px;
547
- }
548
-
549
- .usage-list-scroll::-webkit-scrollbar-track {
550
- background: linear-gradient(180deg, rgba(199, 116, 98, 0.04), rgba(199, 116, 98, 0.1));
551
- border-radius: 999px;
552
- }
553
-
554
- .usage-list-scroll::-webkit-scrollbar-thumb {
555
- background: linear-gradient(180deg, rgba(199, 116, 98, 0.68), rgba(180, 94, 78, 0.92));
556
- border-radius: 999px;
557
- border: 2px solid rgba(248, 243, 238, 0.96);
558
- }
559
-
560
- .usage-list-scroll::-webkit-scrollbar-thumb:hover {
561
- background: linear-gradient(180deg, rgba(199, 116, 98, 0.82), rgba(180, 94, 78, 1));
562
- }
563
-
564
- .usage-list-row {
565
- display: grid;
566
- grid-template-columns: minmax(56px, 72px) minmax(0, 1fr) minmax(48px, auto);
567
- gap: 10px;
568
- align-items: center;
569
- min-width: 0;
570
- }
571
-
572
- .usage-list-label,
573
- .usage-list-value {
574
- font-size: 12px;
575
- color: var(--color-text-secondary);
576
- min-width: 0;
577
- }
578
-
579
- .usage-list-label {
580
- font-weight: 600;
581
- color: var(--color-text-primary);
582
- }
583
-
584
- .usage-list-value {
585
- word-break: break-word;
586
- overflow-wrap: anywhere;
587
- text-align: right;
588
- }
589
-
590
- .usage-list-subvalue {
591
- grid-column: 1 / -1;
592
- font-size: 11px;
593
- color: var(--color-text-tertiary, var(--color-text-secondary));
594
- line-height: 1.45;
595
- }
596
-
597
- .usage-list-row-compact {
598
- grid-template-columns: minmax(52px, 64px) minmax(0, 1fr) minmax(32px, auto);
599
- }
600
-
601
- .usage-progress {
602
- height: 8px;
603
- border-radius: 999px;
604
- background: rgba(71, 60, 52, 0.10);
605
- overflow: hidden;
606
- }
607
-
608
- .usage-progress-fill {
609
- height: 100%;
610
- border-radius: 999px;
611
- background: linear-gradient(90deg, var(--color-brand), #8b6bd6);
612
- }
613
-
614
- .usage-mini-bars {
615
- display: grid;
616
- grid-template-columns: repeat(24, minmax(0, 1fr));
617
- gap: 10px 8px;
618
- align-items: end;
619
- }
620
-
621
- .usage-mini-bar-group {
622
- display: flex;
623
- flex-direction: column;
624
- align-items: center;
625
- gap: 6px;
626
- min-width: 0;
627
- }
628
-
629
- .usage-mini-bar-track {
630
- width: 100%;
631
- min-width: 16px;
632
- max-width: 24px;
633
- height: 72px;
634
- border-radius: 10px;
635
- background: rgba(71, 60, 52, 0.08);
636
- display: flex;
637
- align-items: flex-end;
638
- overflow: hidden;
639
- }
640
-
641
- .usage-mini-bar-fill {
642
- width: 100%;
643
- min-height: 6px;
644
- border-radius: 10px 10px 4px 4px;
645
- background: linear-gradient(180deg, #8b6bd6 0%, var(--color-brand) 100%);
646
- }
647
-
648
- .usage-mini-bar-label {
649
- font-size: 10px;
650
- color: var(--color-text-secondary);
651
- }
652
-
653
- .usage-session-list {
654
- display: flex;
655
- flex-direction: column;
656
- gap: 10px;
657
- }
658
-
659
- .usage-session-item {
660
- padding: 12px;
661
- border-radius: 12px;
662
- background: var(--color-surface-alt);
663
- border: 1px solid var(--color-border-soft);
664
- min-width: 0;
665
- }
666
-
667
- .usage-session-row {
668
- display: flex;
669
- justify-content: space-between;
670
- gap: 10px;
671
- align-items: flex-start;
672
- min-width: 0;
673
- }
674
-
675
- .usage-session-title {
676
- font-size: 13px;
677
- font-weight: 600;
678
- color: var(--color-text-primary);
679
- min-width: 0;
680
- overflow: hidden;
681
- text-overflow: ellipsis;
682
- white-space: nowrap;
683
- }
684
-
685
- .usage-inline-stat {
686
- font-size: 11px;
687
- color: var(--color-brand-dark);
688
- background: var(--color-brand-light);
689
- border-radius: 999px;
690
- padding: 4px 8px;
691
- flex-shrink: 0;
692
- font-weight: 700;
693
- }
694
-
695
- .usage-session-meta {
696
- display: flex;
697
- gap: 10px;
698
- flex-wrap: wrap;
699
- font-size: 11px;
700
- color: var(--color-text-secondary);
701
- margin-top: 6px;
702
- }
703
-
704
- .usage-session-path {
705
- margin-top: 6px;
706
- font-size: 11px;
707
- color: var(--color-text-secondary);
708
- word-break: break-word;
709
- overflow-wrap: anywhere;
710
- }
711
-
712
- .usage-card-models {
713
- display: flex;
714
- flex-direction: column;
715
- gap: 12px;
716
- }
717
-
718
- .usage-model-coverage-strip {
719
- display: grid;
720
- grid-template-columns: repeat(3, minmax(0, 1fr));
721
- gap: 10px;
722
- }
723
-
724
- .usage-model-coverage-item {
725
- padding: 12px;
726
- border-radius: 12px;
727
- border: 1px solid var(--color-border-soft);
728
- background: var(--color-surface-alt);
729
- display: flex;
730
- flex-direction: column;
731
- gap: 4px;
732
- }
733
-
734
- .usage-model-coverage-item strong {
735
- font-size: 20px;
736
- color: var(--color-text-primary);
737
- }
738
-
739
- .usage-model-coverage-item span,
740
- .usage-inline-note,
741
- .usage-diagnostic-copy,
742
- .usage-diagnostic-meta {
743
- font-size: 12px;
744
- line-height: 1.5;
745
- color: var(--color-text-secondary);
746
- }
747
-
748
- .usage-diagnostic-empty {
749
- padding: 14px;
750
- border-radius: 14px;
751
- border: 1px dashed var(--color-border);
752
- background: var(--color-surface-alt);
753
- }
754
-
755
- .usage-diagnostic-title {
756
- font-size: 13px;
757
- font-weight: 700;
758
- color: var(--color-text-primary);
759
- margin-bottom: 6px;
760
- }
761
-
762
- .usage-inline-note {
763
- padding: 10px 12px;
764
- border-radius: 12px;
765
- background: rgba(255, 244, 220, 0.62);
766
- color: #7a5110;
767
- }
768
-
769
- .usage-inline-tag {
770
- display: inline-flex;
771
- align-items: center;
772
- margin: 0 6px 0 0;
773
- padding: 2px 8px;
774
- border-radius: 999px;
775
- background: rgba(122, 81, 16, 0.10);
776
- border: 1px solid rgba(122, 81, 16, 0.14);
777
- color: inherit;
778
- font-weight: 700;
779
- }
780
-
781
- .usage-diagnostic-list {
782
- display: flex;
783
- flex-direction: column;
784
- gap: 8px;
785
- }
786
-
787
- .usage-diagnostic-list-title {
788
- font-size: 12px;
789
- font-weight: 700;
790
- color: var(--color-text-primary);
791
- }
792
-
793
- .usage-diagnostic-row {
794
- display: flex;
795
- justify-content: space-between;
796
- gap: 12px;
797
- align-items: center;
798
- padding: 10px 12px;
799
- border-radius: 12px;
800
- border: 1px solid var(--color-border-soft);
801
- background: var(--color-surface-alt);
802
- }
803
-
804
- .usage-diagnostic-row-main,
805
- .usage-diagnostic-row-side {
806
- min-width: 0;
807
- }
808
-
809
- .usage-diagnostic-row-title {
810
- font-size: 12px;
811
- font-weight: 700;
812
- color: var(--color-text-primary);
813
- word-break: break-word;
814
- overflow-wrap: anywhere;
815
- }
816
-
817
- .usage-diagnostic-row-meta {
818
- display: flex;
819
- flex-wrap: wrap;
820
- gap: 8px;
821
- margin-top: 4px;
822
- font-size: 11px;
823
- color: var(--color-text-secondary);
824
- }
825
-
826
- .usage-diagnostic-row-side {
827
- display: flex;
828
- align-items: center;
829
- gap: 8px;
830
- flex-wrap: wrap;
831
- justify-content: flex-end;
832
- }
833
-
834
- .usage-model-list {
835
- display: flex;
836
- flex-wrap: wrap;
837
- gap: 10px;
838
- }
839
-
840
- .usage-model-chip {
841
- min-width: 0;
842
- max-width: 100%;
843
- padding: 10px 12px;
844
- border-radius: 12px;
845
- background: var(--color-surface-alt);
846
- border: 1px solid var(--color-border-soft);
847
- }
848
-
849
- .usage-model-name {
850
- font-size: 12px;
851
- font-weight: 700;
852
- color: var(--color-text-primary);
853
- word-break: break-word;
854
- overflow-wrap: anywhere;
855
- }
856
-
857
- .usage-model-meta {
858
- margin-top: 4px;
859
- font-size: 11px;
860
- color: var(--color-text-secondary);
861
- line-height: 1.4;
862
- }
863
-
864
- .usage-empty {
865
- padding: 24px 16px;
866
- border-radius: 16px;
867
- background: var(--color-surface-alt);
868
- border: 1px dashed var(--color-border);
869
- color: var(--color-text-secondary);
870
- }
871
-
872
- @media (max-width: 960px) {
873
- .usage-chart-grid,
874
- .usage-model-coverage-strip {
875
- grid-template-columns: 1fr;
876
- }
877
- }
878
-
879
- @media (max-width: 640px) {
880
- .usage-list-row {
881
- grid-template-columns: 1fr;
882
- gap: 6px;
883
- }
884
-
885
- .usage-list-subvalue {
886
- grid-column: auto;
887
- }
888
-
889
- .usage-list-value {
890
- text-align: left;
891
- }
892
-
893
- .usage-mini-bars {
894
- grid-template-columns: repeat(12, minmax(0, 1fr));
895
- }
896
-
897
- .usage-bar-group {
898
- flex-basis: 36px;
899
- min-width: 36px;
900
- }
901
-
902
- .usage-bar-stack {
903
- max-width: 28px;
904
- }
905
-
906
- .usage-toolbar,
907
- .usage-card-head,
908
- .usage-session-row {
909
- flex-direction: column;
910
- align-items: stretch;
911
- }
912
- }
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-current-session-bar {
48
+ display: flex;
49
+ flex-wrap: wrap;
50
+ align-items: center;
51
+ gap: 12px;
52
+ padding: 10px 12px;
53
+ margin: 0 0 14px;
54
+ border-radius: 12px;
55
+ border: 1px solid var(--color-border-soft);
56
+ background: var(--color-surface-alt);
57
+ font-size: 12px;
58
+ color: var(--color-text-secondary);
59
+ }
60
+
61
+ .usage-current-session-label {
62
+ font-weight: 700;
63
+ color: var(--color-text-primary);
64
+ }
65
+
66
+ .usage-current-session-item strong {
67
+ font-weight: 700;
68
+ color: var(--color-text-primary);
69
+ }
70
+
71
+ .usage-range-group {
72
+ display: flex;
73
+ gap: 8px;
74
+ flex-wrap: wrap;
75
+ }
76
+
77
+ .usage-range-btn {
78
+ border: 1px solid var(--color-border);
79
+ background: var(--color-surface-alt);
80
+ color: var(--color-text-secondary);
81
+ padding: 6px 12px;
82
+ border-radius: 999px;
83
+ cursor: pointer;
84
+ font-size: 12px;
85
+ font-weight: 600;
86
+ transition:
87
+ background var(--transition-fast) var(--ease-smooth),
88
+ color var(--transition-fast) var(--ease-smooth),
89
+ border-color var(--transition-fast) var(--ease-smooth),
90
+ box-shadow var(--transition-fast) var(--ease-smooth);
91
+ }
92
+
93
+ .usage-range-btn:hover {
94
+ background: var(--color-surface);
95
+ border-color: var(--color-border-strong);
96
+ color: var(--color-text-primary);
97
+ }
98
+
99
+ .usage-range-btn.active {
100
+ background: var(--color-brand-light);
101
+ color: var(--color-brand-dark);
102
+ border-color: var(--color-brand);
103
+ box-shadow: var(--shadow-subtle);
104
+ }
105
+
106
+ .usage-summary-grid {
107
+ display: grid;
108
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
109
+ gap: 12px;
110
+ margin-bottom: 16px;
111
+ }
112
+
113
+ .usage-summary-card {
114
+ display: flex;
115
+ flex-direction: column;
116
+ justify-content: flex-start;
117
+ gap: 4px;
118
+ min-height: 88px;
119
+ padding: 12px 14px;
120
+ border-radius: 12px;
121
+ background: var(--color-surface);
122
+ border: 1px solid var(--color-border);
123
+ box-shadow: none;
124
+ }
125
+
126
+ .usage-content {
127
+ position: relative;
128
+ }
129
+
130
+ .usage-content-loading {
131
+ opacity: 0.82;
132
+ }
133
+
134
+ .usage-content-overlay {
135
+ position: absolute;
136
+ inset: 0;
137
+ display: flex;
138
+ align-items: flex-start;
139
+ justify-content: flex-end;
140
+ padding: 12px 10px;
141
+ pointer-events: none;
142
+ font-size: 12px;
143
+ color: var(--color-text-secondary);
144
+ }
145
+
146
+ .usage-spinner {
147
+ width: 14px;
148
+ height: 14px;
149
+ border-radius: 999px;
150
+ border: 2px solid rgba(80, 90, 100, 0.22);
151
+ border-top-color: rgba(80, 90, 100, 0.7);
152
+ margin-right: 8px;
153
+ animation: usage-spin 0.9s linear infinite;
154
+ }
155
+
156
+ @keyframes usage-spin {
157
+ to {
158
+ transform: rotate(360deg);
159
+ }
160
+ }
161
+
162
+ .usage-copyable {
163
+ cursor: pointer;
164
+ user-select: none;
165
+ -webkit-tap-highlight-color: transparent;
166
+ }
167
+
168
+ .usage-copyable:focus-visible {
169
+ outline: 2px solid var(--color-brand);
170
+ outline-offset: 2px;
171
+ border-radius: 10px;
172
+ }
173
+
174
+ .usage-summary-card.usage-copyable:hover {
175
+ border-color: var(--color-border-strong);
176
+ background: var(--color-surface-alt);
177
+ }
178
+
179
+ .usage-loading-skeleton {
180
+ display: flex;
181
+ flex-direction: column;
182
+ gap: 16px;
183
+ }
184
+
185
+ /* When showing the "正在加载" notice above the skeleton, keep comfortable spacing. */
186
+ .session-empty + .usage-loading-skeleton {
187
+ margin-top: 14px;
188
+ }
189
+
190
+ .usage-skeleton-card {
191
+ position: relative;
192
+ overflow: hidden;
193
+ }
194
+
195
+ .usage-skeleton-block {
196
+ position: relative;
197
+ min-height: 220px;
198
+ overflow: hidden;
199
+ }
200
+
201
+ .usage-skeleton-line {
202
+ height: 10px;
203
+ border-radius: 999px;
204
+ background: linear-gradient(90deg, rgba(150, 160, 170, 0.12), rgba(150, 160, 170, 0.22), rgba(150, 160, 170, 0.12));
205
+ background-size: 200% 100%;
206
+ animation: usage-skeleton 1.2s ease-in-out infinite;
207
+ }
208
+
209
+ .usage-skeleton-line.h-lg {
210
+ height: 20px;
211
+ margin-top: 6px;
212
+ }
213
+
214
+ .usage-skeleton-line.w-40 { width: 40%; }
215
+ .usage-skeleton-line.w-55 { width: 55%; }
216
+ .usage-skeleton-line.w-70 { width: 70%; }
217
+
218
+ .usage-skeleton-card .usage-skeleton-line + .usage-skeleton-line {
219
+ margin-top: 10px;
220
+ }
221
+
222
+ .usage-skeleton-block::before,
223
+ .usage-skeleton-card::before {
224
+ content: '';
225
+ position: absolute;
226
+ inset: 0;
227
+ background: radial-gradient(circle at 25% 10%, rgba(255, 255, 255, 0.22), transparent 55%);
228
+ pointer-events: none;
229
+ }
230
+
231
+ @keyframes usage-skeleton {
232
+ 0% { background-position: 0% 0; }
233
+ 100% { background-position: 200% 0; }
234
+ }
235
+
236
+ .usage-summary-label {
237
+ min-height: 0;
238
+ font-size: 12px;
239
+ line-height: 1.4;
240
+ color: var(--color-text-secondary);
241
+ margin-bottom: 0;
242
+ }
243
+
244
+ .usage-summary-value {
245
+ min-height: 0;
246
+ display: flex;
247
+ align-items: center;
248
+ font-size: clamp(18px, 1.8vw, 22px);
249
+ line-height: 1.15;
250
+ font-weight: 700;
251
+ color: var(--color-text-primary);
252
+ word-break: break-word;
253
+ }
254
+
255
+ .usage-summary-note {
256
+ margin-top: 2px;
257
+ min-height: 0;
258
+ font-size: 12px;
259
+ color: var(--color-text-secondary);
260
+ line-height: 1.35;
261
+ }
262
+
263
+ .usage-chart-grid {
264
+ display: grid;
265
+ grid-template-columns: 1fr;
266
+ gap: 16px;
267
+ }
268
+
269
+ .usage-card {
270
+ padding: 16px;
271
+ border-radius: 12px;
272
+ background: var(--color-surface);
273
+ border: 1px solid var(--color-border);
274
+ box-shadow: none;
275
+ min-width: 0;
276
+ overflow: hidden;
277
+ }
278
+
279
+ .usage-card-head {
280
+ display: flex;
281
+ align-items: flex-start;
282
+ justify-content: space-between;
283
+ gap: 12px;
284
+ margin-bottom: 12px;
285
+ }
286
+
287
+ .usage-card-title {
288
+ font-size: 14px;
289
+ font-weight: 700;
290
+ color: var(--color-text-primary);
291
+ margin-bottom: 4px;
292
+ }
293
+
294
+ .usage-card-subtitle {
295
+ font-size: 12px;
296
+ line-height: 1.5;
297
+ color: var(--color-text-secondary);
298
+ }
299
+
300
+ .usage-card-kicker {
301
+ display: inline-flex;
302
+ align-items: center;
303
+ min-height: 30px;
304
+ padding: 0 10px;
305
+ border-radius: 999px;
306
+ border: 1px solid var(--color-border);
307
+ background: transparent;
308
+ color: var(--color-text-secondary);
309
+ font-size: 12px;
310
+ font-weight: 600;
311
+ white-space: nowrap;
312
+ }
313
+
314
+ .usage-bars {
315
+ display: flex;
316
+ align-items: flex-end;
317
+ gap: 8px;
318
+ min-height: 180px;
319
+ width: 100%;
320
+ min-width: 0;
321
+ overflow-x: auto;
322
+ overflow-y: hidden;
323
+ padding: 0 2px 10px;
324
+ scrollbar-gutter: stable both-edges;
325
+ scrollbar-width: thin;
326
+ scrollbar-color: rgba(24, 24, 27, 0.26) rgba(24, 24, 27, 0.08);
327
+ }
328
+
329
+ .usage-bars::-webkit-scrollbar {
330
+ height: 10px;
331
+ }
332
+
333
+ .usage-bars::-webkit-scrollbar-track {
334
+ background: rgba(24, 24, 27, 0.06);
335
+ border-radius: 999px;
336
+ }
337
+
338
+ .usage-bars::-webkit-scrollbar-thumb {
339
+ background: rgba(24, 24, 27, 0.26);
340
+ border-radius: 999px;
341
+ border: 2px solid rgba(255, 255, 255, 0.92);
342
+ }
343
+
344
+ .usage-bars::-webkit-scrollbar-thumb:hover {
345
+ background: rgba(24, 24, 27, 0.34);
346
+ }
347
+
348
+ .usage-bar-group {
349
+ flex: 1 0 44px;
350
+ min-width: 44px;
351
+ display: flex;
352
+ flex-direction: column;
353
+ align-items: center;
354
+ gap: 8px;
355
+ }
356
+
357
+ .usage-bar-stack {
358
+ width: 100%;
359
+ max-width: 36px;
360
+ height: 160px;
361
+ display: flex;
362
+ align-items: flex-end;
363
+ gap: 4px;
364
+ }
365
+
366
+ .usage-bar {
367
+ flex: 1;
368
+ border-radius: 10px 10px 4px 4px;
369
+ min-height: 4px;
370
+ }
371
+
372
+ .usage-bar.codex {
373
+ background: var(--color-brand);
374
+ }
375
+
376
+ /* =========================
377
+ Daily usage (token + cost)
378
+ ========================= */
379
+
380
+ .usage-card-wide {
381
+ grid-column: 1 / -1;
382
+ }
383
+
384
+ .usage-daydetail-controls {
385
+ display: inline-flex;
386
+ align-items: center;
387
+ gap: 8px;
388
+ }
389
+
390
+ .usage-daydetail-select {
391
+ min-height: 30px;
392
+ padding: 0 30px 0 10px;
393
+ border-radius: 999px;
394
+ border: 1px solid var(--color-border);
395
+ background-color: transparent;
396
+ color: var(--color-text-secondary);
397
+ font-size: 12px;
398
+ font-weight: 600;
399
+ cursor: pointer;
400
+ appearance: none;
401
+ -webkit-appearance: none;
402
+ -moz-appearance: none;
403
+ 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.6' stroke-linecap='round' stroke-linejoin='round' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");
404
+ background-repeat: no-repeat;
405
+ background-position: right 10px center;
406
+ background-size: 12px;
407
+ }
408
+
409
+ .usage-daydetail-select:hover {
410
+ background-color: var(--color-surface-alt);
411
+ }
412
+
413
+ .usage-daydetail-select:focus {
414
+ outline: none;
415
+ box-shadow: var(--shadow-input-focus);
416
+ border-color: var(--color-brand);
417
+ background-color: var(--color-surface-alt);
418
+ }
419
+
420
+ .usage-daydetail-empty {
421
+ padding: 10px 0 2px;
422
+ font-size: 12px;
423
+ color: var(--color-text-secondary);
424
+ }
425
+
426
+ .usage-daydetail-grid {
427
+ display: grid;
428
+ grid-template-columns: repeat(2, minmax(0, 1fr));
429
+ gap: 10px;
430
+ margin-top: 10px;
431
+ }
432
+
433
+ .usage-daydetail-metric {
434
+ border: 1px solid var(--color-border);
435
+ border-radius: 14px;
436
+ padding: 10px 12px;
437
+ background: var(--color-surface-alt);
438
+ }
439
+
440
+ .usage-daydetail-label {
441
+ font-size: 12px;
442
+ color: var(--color-text-tertiary);
443
+ }
444
+
445
+ .usage-daydetail-value {
446
+ margin-top: 4px;
447
+ font-size: 18px;
448
+ font-weight: 750;
449
+ color: var(--color-text-primary);
450
+ }
451
+
452
+ .usage-daydetail-sub {
453
+ margin-top: 6px;
454
+ font-size: 11px;
455
+ color: var(--color-text-tertiary);
456
+ line-height: 1.25;
457
+ }
458
+
459
+ .usage-daydetail-section {
460
+ margin-top: 12px;
461
+ }
462
+
463
+ .usage-daydetail-section-title {
464
+ font-size: 12px;
465
+ font-weight: 700;
466
+ color: var(--color-text-secondary);
467
+ margin-bottom: 8px;
468
+ }
469
+
470
+ .usage-daydetail-list {
471
+ display: grid;
472
+ gap: 8px;
473
+ }
474
+
475
+ .usage-daydetail-row {
476
+ display: flex;
477
+ align-items: center;
478
+ justify-content: space-between;
479
+ gap: 10px;
480
+ padding: 8px 10px;
481
+ border-radius: 12px;
482
+ background: rgba(24, 24, 27, 0.02);
483
+ border: 1px solid rgba(24, 24, 27, 0.08);
484
+ }
485
+
486
+ .usage-daydetail-row-title {
487
+ flex: 1;
488
+ min-width: 0;
489
+ overflow: hidden;
490
+ text-overflow: ellipsis;
491
+ white-space: nowrap;
492
+ color: var(--color-text-primary);
493
+ font-size: 12px;
494
+ }
495
+
496
+ .usage-daydetail-row-meta {
497
+ flex-shrink: 0;
498
+ color: var(--color-text-tertiary);
499
+ font-size: 12px;
500
+ }
501
+
502
+ .usage-daydetail-models {
503
+ display: flex;
504
+ flex-wrap: wrap;
505
+ gap: 6px;
506
+ }
507
+
508
+ .usage-daydetail-model {
509
+ font-size: 12px;
510
+ padding: 4px 8px;
511
+ border-radius: 999px;
512
+ background: rgba(24, 24, 27, 0.06);
513
+ color: var(--color-text-secondary);
514
+ }
515
+
516
+ @media (max-width: 900px) {
517
+ .usage-chart-grid {
518
+ grid-template-columns: 1fr;
519
+ }
520
+ }
521
+
522
+ .usage-bar.claude {
523
+ background: #8b6bd6;
524
+ }
525
+
526
+ .usage-bar-label {
527
+ font-size: 11px;
528
+ color: var(--color-text-secondary);
529
+ width: 100%;
530
+ text-align: center;
531
+ white-space: nowrap;
532
+ overflow: hidden;
533
+ text-overflow: ellipsis;
534
+ }
535
+
536
+ .usage-legend {
537
+ display: flex;
538
+ gap: 14px;
539
+ flex-wrap: wrap;
540
+ font-size: 12px;
541
+ color: var(--color-text-secondary);
542
+ margin-bottom: 10px;
543
+ }
544
+
545
+ .usage-legend-dot {
546
+ width: 10px;
547
+ height: 10px;
548
+ border-radius: 999px;
549
+ display: inline-block;
550
+ margin-right: 6px;
551
+ }
552
+
553
+ .usage-list {
554
+ display: flex;
555
+ flex-direction: column;
556
+ gap: 10px;
557
+ min-width: 0;
558
+ }
559
+
560
+ .usage-list-scroll {
561
+ max-height: 220px;
562
+ overflow-y: auto;
563
+ padding-right: 6px;
564
+ scrollbar-gutter: stable;
565
+ scrollbar-width: thin;
566
+ scrollbar-color: rgba(199, 116, 98, 0.72) rgba(199, 116, 98, 0.08);
567
+ }
568
+
569
+ .usage-list-top-paths {
570
+ max-height: 140px;
571
+ gap: 6px;
572
+ }
573
+
574
+ .usage-card-top-paths {
575
+ grid-column: 1 / -1;
576
+ }
577
+
578
+ .usage-list-scroll::-webkit-scrollbar {
579
+ width: 10px;
580
+ }
581
+
582
+ .usage-list-scroll::-webkit-scrollbar-track {
583
+ background: linear-gradient(180deg, rgba(199, 116, 98, 0.04), rgba(199, 116, 98, 0.1));
584
+ border-radius: 999px;
585
+ }
586
+
587
+ .usage-list-scroll::-webkit-scrollbar-thumb {
588
+ background: linear-gradient(180deg, rgba(199, 116, 98, 0.68), rgba(180, 94, 78, 0.92));
589
+ border-radius: 999px;
590
+ border: 2px solid rgba(248, 243, 238, 0.96);
591
+ }
592
+
593
+ .usage-list-scroll::-webkit-scrollbar-thumb:hover {
594
+ background: linear-gradient(180deg, rgba(199, 116, 98, 0.82), rgba(180, 94, 78, 1));
595
+ }
596
+
597
+ .usage-list-row {
598
+ display: grid;
599
+ grid-template-columns: minmax(56px, 72px) minmax(0, 1fr) minmax(48px, auto);
600
+ gap: 10px;
601
+ align-items: center;
602
+ min-width: 0;
603
+ }
604
+
605
+ .usage-list-label,
606
+ .usage-list-value {
607
+ font-size: 12px;
608
+ color: var(--color-text-secondary);
609
+ min-width: 0;
610
+ }
611
+
612
+ .usage-list-label {
613
+ font-weight: 600;
614
+ color: var(--color-text-primary);
615
+ }
616
+
617
+ .usage-list-value {
618
+ word-break: break-word;
619
+ overflow-wrap: anywhere;
620
+ text-align: right;
621
+ }
622
+
623
+ .usage-list-subvalue {
624
+ grid-column: 1 / -1;
625
+ font-size: 11px;
626
+ color: var(--color-text-tertiary, var(--color-text-secondary));
627
+ line-height: 1.45;
628
+ }
629
+
630
+ .usage-list-row-compact {
631
+ grid-template-columns: minmax(52px, 64px) minmax(0, 1fr) minmax(32px, auto);
632
+ }
633
+
634
+ .usage-progress {
635
+ height: 8px;
636
+ border-radius: 999px;
637
+ background: rgba(71, 60, 52, 0.10);
638
+ overflow: hidden;
639
+ }
640
+
641
+ .usage-progress-fill {
642
+ height: 100%;
643
+ border-radius: 999px;
644
+ background: linear-gradient(90deg, var(--color-brand), #8b6bd6);
645
+ }
646
+
647
+ .usage-mini-bars {
648
+ display: grid;
649
+ grid-template-columns: repeat(24, minmax(0, 1fr));
650
+ gap: 10px 8px;
651
+ align-items: end;
652
+ }
653
+
654
+ .usage-mini-bar-group {
655
+ display: flex;
656
+ flex-direction: column;
657
+ align-items: center;
658
+ gap: 6px;
659
+ min-width: 0;
660
+ }
661
+
662
+ .usage-mini-bar-track {
663
+ width: 100%;
664
+ min-width: 16px;
665
+ max-width: 24px;
666
+ height: 72px;
667
+ border-radius: 10px;
668
+ background: rgba(71, 60, 52, 0.08);
669
+ display: flex;
670
+ align-items: flex-end;
671
+ overflow: hidden;
672
+ }
673
+
674
+ .usage-mini-bar-fill {
675
+ width: 100%;
676
+ min-height: 6px;
677
+ border-radius: 10px 10px 4px 4px;
678
+ background: linear-gradient(180deg, #8b6bd6 0%, var(--color-brand) 100%);
679
+ }
680
+
681
+ .usage-mini-bar-label {
682
+ font-size: 10px;
683
+ color: var(--color-text-secondary);
684
+ }
685
+
686
+ .usage-session-list {
687
+ display: flex;
688
+ flex-direction: column;
689
+ gap: 10px;
690
+ }
691
+
692
+ .usage-session-item {
693
+ padding: 12px;
694
+ border-radius: 12px;
695
+ background: var(--color-surface-alt);
696
+ border: 1px solid var(--color-border-soft);
697
+ min-width: 0;
698
+ }
699
+
700
+ .usage-session-row {
701
+ display: flex;
702
+ justify-content: space-between;
703
+ gap: 10px;
704
+ align-items: flex-start;
705
+ min-width: 0;
706
+ }
707
+
708
+ .usage-session-title {
709
+ font-size: 13px;
710
+ font-weight: 600;
711
+ color: var(--color-text-primary);
712
+ min-width: 0;
713
+ overflow: hidden;
714
+ text-overflow: ellipsis;
715
+ white-space: nowrap;
716
+ }
717
+
718
+ .usage-inline-stat {
719
+ font-size: 11px;
720
+ color: var(--color-brand-dark);
721
+ background: var(--color-brand-light);
722
+ border-radius: 999px;
723
+ padding: 4px 8px;
724
+ flex-shrink: 0;
725
+ font-weight: 700;
726
+ }
727
+
728
+ .usage-session-meta {
729
+ display: flex;
730
+ gap: 10px;
731
+ flex-wrap: wrap;
732
+ font-size: 11px;
733
+ color: var(--color-text-secondary);
734
+ margin-top: 6px;
735
+ }
736
+
737
+ .usage-session-path {
738
+ margin-top: 6px;
739
+ font-size: 11px;
740
+ color: var(--color-text-secondary);
741
+ word-break: break-word;
742
+ overflow-wrap: anywhere;
743
+ }
744
+
745
+ .usage-card-models {
746
+ display: flex;
747
+ flex-direction: column;
748
+ gap: 12px;
749
+ }
750
+
751
+ .usage-model-coverage-strip {
752
+ display: grid;
753
+ grid-template-columns: repeat(3, minmax(0, 1fr));
754
+ gap: 10px;
755
+ }
756
+
757
+ .usage-model-coverage-item {
758
+ padding: 12px;
759
+ border-radius: 12px;
760
+ border: 1px solid var(--color-border-soft);
761
+ background: var(--color-surface-alt);
762
+ display: flex;
763
+ flex-direction: column;
764
+ gap: 4px;
765
+ }
766
+
767
+ .usage-model-coverage-item strong {
768
+ font-size: 20px;
769
+ color: var(--color-text-primary);
770
+ }
771
+
772
+ .usage-model-coverage-item span,
773
+ .usage-inline-note,
774
+ .usage-diagnostic-copy,
775
+ .usage-diagnostic-meta {
776
+ font-size: 12px;
777
+ line-height: 1.5;
778
+ color: var(--color-text-secondary);
779
+ }
780
+
781
+ .usage-diagnostic-empty {
782
+ padding: 14px;
783
+ border-radius: 14px;
784
+ border: 1px dashed var(--color-border);
785
+ background: var(--color-surface-alt);
786
+ }
787
+
788
+ .usage-diagnostic-title {
789
+ font-size: 13px;
790
+ font-weight: 700;
791
+ color: var(--color-text-primary);
792
+ margin-bottom: 6px;
793
+ }
794
+
795
+ .usage-inline-note {
796
+ padding: 10px 12px;
797
+ border-radius: 12px;
798
+ background: rgba(255, 244, 220, 0.62);
799
+ color: #7a5110;
800
+ }
801
+
802
+ .usage-inline-tag {
803
+ display: inline-flex;
804
+ align-items: center;
805
+ margin: 0 6px 0 0;
806
+ padding: 2px 8px;
807
+ border-radius: 999px;
808
+ background: rgba(122, 81, 16, 0.10);
809
+ border: 1px solid rgba(122, 81, 16, 0.14);
810
+ color: inherit;
811
+ font-weight: 700;
812
+ }
813
+
814
+ .usage-diagnostic-list {
815
+ display: flex;
816
+ flex-direction: column;
817
+ gap: 8px;
818
+ }
819
+
820
+ .usage-diagnostic-list-title {
821
+ font-size: 12px;
822
+ font-weight: 700;
823
+ color: var(--color-text-primary);
824
+ }
825
+
826
+ .usage-diagnostic-row {
827
+ display: flex;
828
+ justify-content: space-between;
829
+ gap: 12px;
830
+ align-items: center;
831
+ padding: 10px 12px;
832
+ border-radius: 12px;
833
+ border: 1px solid var(--color-border-soft);
834
+ background: var(--color-surface-alt);
835
+ }
836
+
837
+ .usage-diagnostic-row-main,
838
+ .usage-diagnostic-row-side {
839
+ min-width: 0;
840
+ }
841
+
842
+ .usage-diagnostic-row-title {
843
+ font-size: 12px;
844
+ font-weight: 700;
845
+ color: var(--color-text-primary);
846
+ word-break: break-word;
847
+ overflow-wrap: anywhere;
848
+ }
849
+
850
+ .usage-diagnostic-row-meta {
851
+ display: flex;
852
+ flex-wrap: wrap;
853
+ gap: 8px;
854
+ margin-top: 4px;
855
+ font-size: 11px;
856
+ color: var(--color-text-secondary);
857
+ }
858
+
859
+ .usage-diagnostic-row-side {
860
+ display: flex;
861
+ align-items: center;
862
+ gap: 8px;
863
+ flex-wrap: wrap;
864
+ justify-content: flex-end;
865
+ }
866
+
867
+ .usage-model-list {
868
+ display: flex;
869
+ flex-wrap: wrap;
870
+ gap: 10px;
871
+ }
872
+
873
+ .usage-model-chip {
874
+ min-width: 0;
875
+ max-width: 100%;
876
+ padding: 10px 12px;
877
+ border-radius: 12px;
878
+ background: var(--color-surface-alt);
879
+ border: 1px solid var(--color-border-soft);
880
+ }
881
+
882
+ .usage-model-name {
883
+ font-size: 12px;
884
+ font-weight: 700;
885
+ color: var(--color-text-primary);
886
+ word-break: break-word;
887
+ overflow-wrap: anywhere;
888
+ }
889
+
890
+ .usage-model-meta {
891
+ margin-top: 4px;
892
+ font-size: 11px;
893
+ color: var(--color-text-secondary);
894
+ line-height: 1.4;
895
+ }
896
+
897
+ .usage-empty {
898
+ padding: 24px 16px;
899
+ border-radius: 16px;
900
+ background: var(--color-surface-alt);
901
+ border: 1px dashed var(--color-border);
902
+ color: var(--color-text-secondary);
903
+ }
904
+
905
+ @media (max-width: 960px) {
906
+ .usage-chart-grid,
907
+ .usage-model-coverage-strip {
908
+ grid-template-columns: 1fr;
909
+ }
910
+ }
911
+
912
+ @media (max-width: 640px) {
913
+ .usage-list-row {
914
+ grid-template-columns: 1fr;
915
+ gap: 6px;
916
+ }
917
+
918
+ .usage-list-subvalue {
919
+ grid-column: auto;
920
+ }
921
+
922
+ .usage-list-value {
923
+ text-align: left;
924
+ }
925
+
926
+ .usage-mini-bars {
927
+ grid-template-columns: repeat(12, minmax(0, 1fr));
928
+ }
929
+
930
+ .usage-bar-group {
931
+ flex-basis: 36px;
932
+ min-width: 36px;
933
+ }
934
+
935
+ .usage-bar-stack {
936
+ max-width: 28px;
937
+ }
938
+
939
+ .usage-toolbar,
940
+ .usage-card-head,
941
+ .usage-session-row {
942
+ flex-direction: column;
943
+ align-items: stretch;
944
+ }
945
+ }