codexmate 0.0.20 → 0.0.22

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 (96) hide show
  1. package/README.md +289 -152
  2. package/README.zh.md +321 -0
  3. package/cli/agents-files.js +224 -0
  4. package/cli/archive-helpers.js +446 -0
  5. package/cli/auth-profiles.js +359 -0
  6. package/cli/builtin-proxy.js +1044 -0
  7. package/cli/claude-proxy.js +998 -0
  8. package/cli/config-bootstrap.js +384 -0
  9. package/cli/openai-bridge.js +950 -0
  10. package/cli/openclaw-config.js +629 -0
  11. package/cli/session-usage.concurrent.js +28 -0
  12. package/cli/session-usage.js +112 -0
  13. package/cli/session-usage.models.js +176 -0
  14. package/cli/skills.js +1141 -0
  15. package/cli/zip-commands.js +510 -0
  16. package/cli.js +9408 -9719
  17. package/lib/cli-models-utils.js +109 -1
  18. package/lib/cli-path-utils.js +69 -0
  19. package/lib/cli-sessions.js +386 -0
  20. package/lib/download-artifacts.js +77 -0
  21. package/lib/task-orchestrator.js +869 -0
  22. package/package.json +14 -10
  23. package/res/logo.png +0 -0
  24. package/res/vue.global.prod.js +13 -0
  25. package/web-ui/app.js +193 -15
  26. package/web-ui/index.html +5 -1
  27. package/web-ui/logic.agents-diff.mjs +1 -1
  28. package/web-ui/logic.claude.mjs +60 -0
  29. package/web-ui/logic.runtime.mjs +11 -7
  30. package/web-ui/logic.sessions.mjs +372 -21
  31. package/web-ui/modules/api.mjs +22 -1
  32. package/web-ui/modules/app.computed.dashboard.mjs +23 -10
  33. package/web-ui/modules/app.computed.index.mjs +4 -0
  34. package/web-ui/modules/app.computed.main-tabs.mjs +198 -0
  35. package/web-ui/modules/app.computed.session.mjs +521 -9
  36. package/web-ui/modules/app.methods.agents.mjs +62 -11
  37. package/web-ui/modules/app.methods.codex-config.mjs +189 -34
  38. package/web-ui/modules/app.methods.index.mjs +7 -1
  39. package/web-ui/modules/app.methods.install.mjs +24 -20
  40. package/web-ui/modules/app.methods.navigation.mjs +142 -1
  41. package/web-ui/modules/app.methods.openclaw-core.mjs +339 -39
  42. package/web-ui/modules/app.methods.openclaw-editing.mjs +39 -4
  43. package/web-ui/modules/app.methods.openclaw-persist.mjs +122 -4
  44. package/web-ui/modules/app.methods.providers.mjs +192 -53
  45. package/web-ui/modules/app.methods.session-actions.mjs +99 -19
  46. package/web-ui/modules/app.methods.session-browser.mjs +196 -5
  47. package/web-ui/modules/app.methods.session-timeline.mjs +22 -15
  48. package/web-ui/modules/app.methods.session-trash.mjs +3 -0
  49. package/web-ui/modules/app.methods.startup-claude.mjs +70 -71
  50. package/web-ui/modules/app.methods.task-orchestration.mjs +471 -0
  51. package/web-ui/modules/config-mode.computed.mjs +2 -0
  52. package/web-ui/modules/config-template-confirm-pref.mjs +33 -0
  53. package/web-ui/modules/i18n.mjs +1609 -0
  54. package/web-ui/modules/plugins.computed.mjs +220 -0
  55. package/web-ui/modules/plugins.methods.mjs +620 -0
  56. package/web-ui/modules/plugins.storage.mjs +37 -0
  57. package/web-ui/partials/index/layout-footer.html +1 -57
  58. package/web-ui/partials/index/layout-header.html +299 -175
  59. package/web-ui/partials/index/modal-config-template-agents.html +79 -29
  60. package/web-ui/partials/index/modal-confirm-toast.html +1 -1
  61. package/web-ui/partials/index/modal-health-check.html +14 -14
  62. package/web-ui/partials/index/modal-openclaw-config.html +47 -42
  63. package/web-ui/partials/index/modal-skills.html +130 -114
  64. package/web-ui/partials/index/modals-basic.html +71 -102
  65. package/web-ui/partials/index/panel-config-claude.html +50 -12
  66. package/web-ui/partials/index/panel-config-codex.html +34 -37
  67. package/web-ui/partials/index/panel-config-openclaw.html +10 -16
  68. package/web-ui/partials/index/panel-docs.html +147 -0
  69. package/web-ui/partials/index/panel-market.html +38 -38
  70. package/web-ui/partials/index/panel-orchestration.html +397 -0
  71. package/web-ui/partials/index/panel-plugins.html +243 -0
  72. package/web-ui/partials/index/panel-sessions.html +51 -146
  73. package/web-ui/partials/index/panel-settings.html +188 -96
  74. package/web-ui/partials/index/panel-usage.html +353 -0
  75. package/web-ui/session-helpers.mjs +221 -10
  76. package/web-ui/styles/base-theme.css +120 -229
  77. package/web-ui/styles/controls-forms.css +59 -51
  78. package/web-ui/styles/docs-panel.css +247 -0
  79. package/web-ui/styles/layout-shell.css +394 -128
  80. package/web-ui/styles/modals-core.css +18 -3
  81. package/web-ui/styles/navigation-panels.css +184 -183
  82. package/web-ui/styles/plugins-panel.css +518 -0
  83. package/web-ui/styles/responsive.css +102 -62
  84. package/web-ui/styles/sessions-list.css +13 -27
  85. package/web-ui/styles/sessions-preview.css +13 -7
  86. package/web-ui/styles/sessions-toolbar-trash.css +25 -0
  87. package/web-ui/styles/sessions-usage.css +581 -6
  88. package/web-ui/styles/settings-panel.css +166 -0
  89. package/web-ui/styles/skills-list.css +16 -11
  90. package/web-ui/styles/skills-market.css +63 -2
  91. package/web-ui/styles/task-orchestration.css +776 -0
  92. package/web-ui/styles/titles-cards.css +67 -66
  93. package/web-ui/styles.css +4 -0
  94. package/README.en.md +0 -259
  95. package/res/screenshot.png +0 -0
  96. package/res/vue.global.js +0 -18552
@@ -87,23 +87,152 @@
87
87
  }
88
88
 
89
89
  .usage-summary-card {
90
- padding: 14px 16px;
90
+ display: flex;
91
+ flex-direction: column;
92
+ justify-content: flex-start;
93
+ gap: 4px;
94
+ min-height: 88px;
95
+ padding: 12px 14px;
91
96
  border-radius: 14px;
92
97
  background: var(--color-surface-alt);
93
98
  border: 1px solid var(--color-border-soft);
94
99
  box-shadow: var(--shadow-subtle);
95
100
  }
96
101
 
102
+ .usage-content {
103
+ position: relative;
104
+ }
105
+
106
+ .usage-content-loading {
107
+ opacity: 0.82;
108
+ }
109
+
110
+ .usage-content-overlay {
111
+ position: absolute;
112
+ inset: 0;
113
+ display: flex;
114
+ align-items: flex-start;
115
+ justify-content: flex-end;
116
+ padding: 12px 10px;
117
+ pointer-events: none;
118
+ font-size: 12px;
119
+ color: var(--color-text-secondary);
120
+ }
121
+
122
+ .usage-spinner {
123
+ width: 14px;
124
+ height: 14px;
125
+ border-radius: 999px;
126
+ border: 2px solid rgba(80, 90, 100, 0.22);
127
+ border-top-color: rgba(80, 90, 100, 0.7);
128
+ margin-right: 8px;
129
+ animation: usage-spin 0.9s linear infinite;
130
+ }
131
+
132
+ @keyframes usage-spin {
133
+ to {
134
+ transform: rotate(360deg);
135
+ }
136
+ }
137
+
138
+ .usage-copyable {
139
+ cursor: pointer;
140
+ user-select: none;
141
+ -webkit-tap-highlight-color: transparent;
142
+ }
143
+
144
+ .usage-copyable:focus-visible {
145
+ outline: 2px solid var(--color-brand);
146
+ outline-offset: 2px;
147
+ border-radius: 10px;
148
+ }
149
+
150
+ .usage-summary-card.usage-copyable:hover {
151
+ border-color: var(--color-border-strong);
152
+ }
153
+
154
+ .usage-loading-skeleton {
155
+ display: flex;
156
+ flex-direction: column;
157
+ gap: 16px;
158
+ }
159
+
160
+ /* When showing the "正在加载" notice above the skeleton, keep comfortable spacing. */
161
+ .session-empty + .usage-loading-skeleton {
162
+ margin-top: 14px;
163
+ }
164
+
165
+ .usage-skeleton-card {
166
+ position: relative;
167
+ overflow: hidden;
168
+ }
169
+
170
+ .usage-skeleton-block {
171
+ position: relative;
172
+ min-height: 220px;
173
+ overflow: hidden;
174
+ }
175
+
176
+ .usage-skeleton-line {
177
+ height: 10px;
178
+ border-radius: 999px;
179
+ background: linear-gradient(90deg, rgba(150, 160, 170, 0.12), rgba(150, 160, 170, 0.22), rgba(150, 160, 170, 0.12));
180
+ background-size: 200% 100%;
181
+ animation: usage-skeleton 1.2s ease-in-out infinite;
182
+ }
183
+
184
+ .usage-skeleton-line.h-lg {
185
+ height: 20px;
186
+ margin-top: 6px;
187
+ }
188
+
189
+ .usage-skeleton-line.w-40 { width: 40%; }
190
+ .usage-skeleton-line.w-55 { width: 55%; }
191
+ .usage-skeleton-line.w-70 { width: 70%; }
192
+
193
+ .usage-skeleton-card .usage-skeleton-line + .usage-skeleton-line {
194
+ margin-top: 10px;
195
+ }
196
+
197
+ .usage-skeleton-block::before,
198
+ .usage-skeleton-card::before {
199
+ content: '';
200
+ position: absolute;
201
+ inset: 0;
202
+ background: radial-gradient(circle at 25% 10%, rgba(255, 255, 255, 0.22), transparent 55%);
203
+ pointer-events: none;
204
+ }
205
+
206
+ @keyframes usage-skeleton {
207
+ 0% { background-position: 0% 0; }
208
+ 100% { background-position: 200% 0; }
209
+ }
210
+
97
211
  .usage-summary-label {
212
+ min-height: 0;
98
213
  font-size: 12px;
214
+ line-height: 1.4;
99
215
  color: var(--color-text-secondary);
100
- margin-bottom: 6px;
216
+ margin-bottom: 0;
101
217
  }
102
218
 
103
219
  .usage-summary-value {
104
- font-size: 24px;
220
+ min-height: 0;
221
+ display: flex;
222
+ align-items: center;
223
+ font-size: clamp(18px, 1.8vw, 22px);
224
+ line-height: 1.15;
105
225
  font-weight: 700;
106
226
  color: var(--color-text-primary);
227
+ word-break: break-word;
228
+ }
229
+
230
+ .usage-summary-note {
231
+ margin-top: 2px;
232
+ min-height: 0;
233
+ font-size: 12px;
234
+ color: var(--color-text-secondary);
235
+ line-height: 1.35;
107
236
  }
108
237
 
109
238
  .usage-chart-grid {
@@ -122,11 +251,39 @@
122
251
  overflow: hidden;
123
252
  }
124
253
 
254
+ .usage-card-head {
255
+ display: flex;
256
+ align-items: flex-start;
257
+ justify-content: space-between;
258
+ gap: 12px;
259
+ margin-bottom: 12px;
260
+ }
261
+
125
262
  .usage-card-title {
126
263
  font-size: 14px;
127
264
  font-weight: 700;
128
265
  color: var(--color-text-primary);
129
- margin-bottom: 12px;
266
+ margin-bottom: 4px;
267
+ }
268
+
269
+ .usage-card-subtitle {
270
+ font-size: 12px;
271
+ line-height: 1.5;
272
+ color: var(--color-text-secondary);
273
+ }
274
+
275
+ .usage-card-kicker {
276
+ display: inline-flex;
277
+ align-items: center;
278
+ min-height: 30px;
279
+ padding: 0 10px;
280
+ border-radius: 999px;
281
+ border: 1px solid var(--color-border);
282
+ background: var(--color-surface-alt);
283
+ color: var(--color-text-secondary);
284
+ font-size: 12px;
285
+ font-weight: 600;
286
+ white-space: nowrap;
130
287
  }
131
288
 
132
289
  .usage-bars {
@@ -138,7 +295,29 @@
138
295
  min-width: 0;
139
296
  overflow-x: auto;
140
297
  overflow-y: hidden;
141
- padding-bottom: 4px;
298
+ padding: 0 2px 10px;
299
+ scrollbar-gutter: stable both-edges;
300
+ scrollbar-width: thin;
301
+ scrollbar-color: rgba(199, 116, 98, 0.72) rgba(199, 116, 98, 0.08);
302
+ }
303
+
304
+ .usage-bars::-webkit-scrollbar {
305
+ height: 10px;
306
+ }
307
+
308
+ .usage-bars::-webkit-scrollbar-track {
309
+ background: linear-gradient(90deg, rgba(199, 116, 98, 0.04), rgba(199, 116, 98, 0.1));
310
+ border-radius: 999px;
311
+ }
312
+
313
+ .usage-bars::-webkit-scrollbar-thumb {
314
+ background: linear-gradient(90deg, rgba(199, 116, 98, 0.68), rgba(180, 94, 78, 0.92));
315
+ border-radius: 999px;
316
+ border: 2px solid rgba(248, 243, 238, 0.96);
317
+ }
318
+
319
+ .usage-bars::-webkit-scrollbar-thumb:hover {
320
+ background: linear-gradient(90deg, rgba(199, 116, 98, 0.82), rgba(180, 94, 78, 1));
142
321
  }
143
322
 
144
323
  .usage-bar-group {
@@ -169,6 +348,120 @@
169
348
  background: var(--color-brand);
170
349
  }
171
350
 
351
+ /* =========================
352
+ Daily usage (token + cost)
353
+ ========================= */
354
+
355
+ .usage-card-wide {
356
+ grid-column: 1 / -1;
357
+ }
358
+
359
+ .usage-daily-legend {
360
+ display: flex;
361
+ flex-wrap: wrap;
362
+ align-items: center;
363
+ gap: 12px;
364
+ margin: 0 0 10px;
365
+ font-size: 12px;
366
+ color: var(--color-text-secondary);
367
+ }
368
+
369
+ .usage-daily-dot {
370
+ width: 10px;
371
+ height: 10px;
372
+ border-radius: 999px;
373
+ }
374
+
375
+ .usage-daily-dot-tokens {
376
+ background: var(--color-brand);
377
+ }
378
+
379
+ .usage-daily-dot-cost {
380
+ background: linear-gradient(135deg, rgba(139, 107, 214, 0.95), rgba(199, 116, 98, 0.95));
381
+ }
382
+
383
+ .usage-daily-bar-stack {
384
+ width: 100%;
385
+ max-width: 40px;
386
+ height: 160px;
387
+ display: flex;
388
+ align-items: flex-end;
389
+ justify-content: center;
390
+ gap: 4px;
391
+ }
392
+
393
+ .usage-daily-bar {
394
+ flex: 1;
395
+ min-height: 4px;
396
+ border-radius: 10px 10px 4px 4px;
397
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.28);
398
+ }
399
+
400
+ .usage-daily-bar-tokens {
401
+ background: linear-gradient(180deg, rgba(199, 116, 98, 1) 0%, rgba(180, 94, 78, 1) 100%);
402
+ }
403
+
404
+ .usage-daily-bar-cost {
405
+ background: linear-gradient(180deg, rgba(139, 107, 214, 0.92) 0%, rgba(95, 72, 170, 0.98) 100%);
406
+ }
407
+
408
+ .usage-daily-table-wrap {
409
+ margin-top: 12px;
410
+ border-radius: 14px;
411
+ border: 1px solid var(--color-border-soft);
412
+ background: var(--color-surface-alt);
413
+ overflow: auto;
414
+ }
415
+
416
+ .usage-daily-table {
417
+ width: 100%;
418
+ border-collapse: collapse;
419
+ min-width: 560px;
420
+ }
421
+
422
+ .usage-daily-table th,
423
+ .usage-daily-table td {
424
+ padding: 10px 12px;
425
+ border-bottom: 1px solid rgba(216, 201, 184, 0.22);
426
+ font-size: 12px;
427
+ color: var(--color-text-secondary);
428
+ white-space: nowrap;
429
+ }
430
+
431
+ .usage-daily-table thead th {
432
+ position: sticky;
433
+ top: 0;
434
+ background: rgba(248, 243, 238, 0.92);
435
+ backdrop-filter: blur(6px);
436
+ font-weight: 700;
437
+ color: var(--color-text-primary);
438
+ z-index: 1;
439
+ }
440
+
441
+ .usage-daily-table tr:last-child td {
442
+ border-bottom: none;
443
+ }
444
+
445
+ .usage-daily-table .right {
446
+ text-align: right;
447
+ }
448
+
449
+ .usage-daily-table .mono {
450
+ font-family: var(--font-family-mono);
451
+ letter-spacing: -0.01em;
452
+ }
453
+
454
+ .usage-daily-note {
455
+ margin-top: 10px;
456
+ padding: 10px 12px;
457
+ border-radius: 12px;
458
+ background: rgba(255, 244, 220, 0.58);
459
+ border: 1px solid rgba(216, 201, 184, 0.22);
460
+ color: #7a5110;
461
+ font-size: 12px;
462
+ line-height: 1.45;
463
+ }
464
+
172
465
  .usage-bar.claude {
173
466
  background: #8b6bd6;
174
467
  }
@@ -222,12 +515,28 @@
222
515
  min-width: 0;
223
516
  }
224
517
 
518
+ .usage-list-label {
519
+ font-weight: 600;
520
+ color: var(--color-text-primary);
521
+ }
522
+
225
523
  .usage-list-value {
226
524
  word-break: break-word;
227
525
  overflow-wrap: anywhere;
228
526
  text-align: right;
229
527
  }
230
528
 
529
+ .usage-list-subvalue {
530
+ grid-column: 1 / -1;
531
+ font-size: 11px;
532
+ color: var(--color-text-tertiary, var(--color-text-secondary));
533
+ line-height: 1.45;
534
+ }
535
+
536
+ .usage-list-row-compact {
537
+ grid-template-columns: minmax(52px, 64px) minmax(0, 1fr) minmax(32px, auto);
538
+ }
539
+
231
540
  .usage-progress {
232
541
  height: 8px;
233
542
  border-radius: 999px;
@@ -241,6 +550,256 @@
241
550
  background: linear-gradient(90deg, var(--color-brand), #8b6bd6);
242
551
  }
243
552
 
553
+ .usage-mini-bars {
554
+ display: grid;
555
+ grid-template-columns: repeat(24, minmax(0, 1fr));
556
+ gap: 10px 8px;
557
+ align-items: end;
558
+ }
559
+
560
+ .usage-mini-bar-group {
561
+ display: flex;
562
+ flex-direction: column;
563
+ align-items: center;
564
+ gap: 6px;
565
+ min-width: 0;
566
+ }
567
+
568
+ .usage-mini-bar-track {
569
+ width: 100%;
570
+ min-width: 16px;
571
+ max-width: 24px;
572
+ height: 72px;
573
+ border-radius: 10px;
574
+ background: rgba(71, 60, 52, 0.08);
575
+ display: flex;
576
+ align-items: flex-end;
577
+ overflow: hidden;
578
+ }
579
+
580
+ .usage-mini-bar-fill {
581
+ width: 100%;
582
+ min-height: 6px;
583
+ border-radius: 10px 10px 4px 4px;
584
+ background: linear-gradient(180deg, #8b6bd6 0%, var(--color-brand) 100%);
585
+ }
586
+
587
+ .usage-mini-bar-label {
588
+ font-size: 10px;
589
+ color: var(--color-text-secondary);
590
+ }
591
+
592
+ .usage-session-list {
593
+ display: flex;
594
+ flex-direction: column;
595
+ gap: 10px;
596
+ }
597
+
598
+ .usage-session-item {
599
+ padding: 12px;
600
+ border-radius: 12px;
601
+ background: var(--color-surface-alt);
602
+ border: 1px solid var(--color-border-soft);
603
+ min-width: 0;
604
+ }
605
+
606
+ .usage-session-row {
607
+ display: flex;
608
+ justify-content: space-between;
609
+ gap: 10px;
610
+ align-items: flex-start;
611
+ min-width: 0;
612
+ }
613
+
614
+ .usage-session-title {
615
+ font-size: 13px;
616
+ font-weight: 600;
617
+ color: var(--color-text-primary);
618
+ min-width: 0;
619
+ overflow: hidden;
620
+ text-overflow: ellipsis;
621
+ white-space: nowrap;
622
+ }
623
+
624
+ .usage-inline-stat {
625
+ font-size: 11px;
626
+ color: var(--color-brand-dark);
627
+ background: var(--color-brand-light);
628
+ border-radius: 999px;
629
+ padding: 4px 8px;
630
+ flex-shrink: 0;
631
+ font-weight: 700;
632
+ }
633
+
634
+ .usage-session-meta {
635
+ display: flex;
636
+ gap: 10px;
637
+ flex-wrap: wrap;
638
+ font-size: 11px;
639
+ color: var(--color-text-secondary);
640
+ margin-top: 6px;
641
+ }
642
+
643
+ .usage-session-path {
644
+ margin-top: 6px;
645
+ font-size: 11px;
646
+ color: var(--color-text-secondary);
647
+ word-break: break-word;
648
+ overflow-wrap: anywhere;
649
+ }
650
+
651
+ .usage-card-models {
652
+ display: flex;
653
+ flex-direction: column;
654
+ gap: 12px;
655
+ }
656
+
657
+ .usage-model-coverage-strip {
658
+ display: grid;
659
+ grid-template-columns: repeat(3, minmax(0, 1fr));
660
+ gap: 10px;
661
+ }
662
+
663
+ .usage-model-coverage-item {
664
+ padding: 12px;
665
+ border-radius: 12px;
666
+ border: 1px solid var(--color-border-soft);
667
+ background: var(--color-surface-alt);
668
+ display: flex;
669
+ flex-direction: column;
670
+ gap: 4px;
671
+ }
672
+
673
+ .usage-model-coverage-item strong {
674
+ font-size: 20px;
675
+ color: var(--color-text-primary);
676
+ }
677
+
678
+ .usage-model-coverage-item span,
679
+ .usage-inline-note,
680
+ .usage-diagnostic-copy,
681
+ .usage-diagnostic-meta {
682
+ font-size: 12px;
683
+ line-height: 1.5;
684
+ color: var(--color-text-secondary);
685
+ }
686
+
687
+ .usage-diagnostic-empty {
688
+ padding: 14px;
689
+ border-radius: 14px;
690
+ border: 1px dashed var(--color-border);
691
+ background: var(--color-surface-alt);
692
+ }
693
+
694
+ .usage-diagnostic-title {
695
+ font-size: 13px;
696
+ font-weight: 700;
697
+ color: var(--color-text-primary);
698
+ margin-bottom: 6px;
699
+ }
700
+
701
+ .usage-inline-note {
702
+ padding: 10px 12px;
703
+ border-radius: 12px;
704
+ background: rgba(255, 244, 220, 0.62);
705
+ color: #7a5110;
706
+ }
707
+
708
+ .usage-inline-tag {
709
+ display: inline-flex;
710
+ align-items: center;
711
+ margin: 0 6px 0 0;
712
+ padding: 2px 8px;
713
+ border-radius: 999px;
714
+ background: rgba(122, 81, 16, 0.10);
715
+ border: 1px solid rgba(122, 81, 16, 0.14);
716
+ color: inherit;
717
+ font-weight: 700;
718
+ }
719
+
720
+ .usage-diagnostic-list {
721
+ display: flex;
722
+ flex-direction: column;
723
+ gap: 8px;
724
+ }
725
+
726
+ .usage-diagnostic-list-title {
727
+ font-size: 12px;
728
+ font-weight: 700;
729
+ color: var(--color-text-primary);
730
+ }
731
+
732
+ .usage-diagnostic-row {
733
+ display: flex;
734
+ justify-content: space-between;
735
+ gap: 12px;
736
+ align-items: center;
737
+ padding: 10px 12px;
738
+ border-radius: 12px;
739
+ border: 1px solid var(--color-border-soft);
740
+ background: var(--color-surface-alt);
741
+ }
742
+
743
+ .usage-diagnostic-row-main,
744
+ .usage-diagnostic-row-side {
745
+ min-width: 0;
746
+ }
747
+
748
+ .usage-diagnostic-row-title {
749
+ font-size: 12px;
750
+ font-weight: 700;
751
+ color: var(--color-text-primary);
752
+ word-break: break-word;
753
+ overflow-wrap: anywhere;
754
+ }
755
+
756
+ .usage-diagnostic-row-meta {
757
+ display: flex;
758
+ flex-wrap: wrap;
759
+ gap: 8px;
760
+ margin-top: 4px;
761
+ font-size: 11px;
762
+ color: var(--color-text-secondary);
763
+ }
764
+
765
+ .usage-diagnostic-row-side {
766
+ display: flex;
767
+ align-items: center;
768
+ gap: 8px;
769
+ flex-wrap: wrap;
770
+ justify-content: flex-end;
771
+ }
772
+
773
+ .usage-model-list {
774
+ display: flex;
775
+ flex-wrap: wrap;
776
+ gap: 10px;
777
+ }
778
+
779
+ .usage-model-chip {
780
+ min-width: 0;
781
+ max-width: 100%;
782
+ padding: 10px 12px;
783
+ border-radius: 12px;
784
+ background: var(--color-surface-alt);
785
+ border: 1px solid var(--color-border-soft);
786
+ }
787
+
788
+ .usage-model-name {
789
+ font-size: 12px;
790
+ font-weight: 700;
791
+ color: var(--color-text-primary);
792
+ word-break: break-word;
793
+ overflow-wrap: anywhere;
794
+ }
795
+
796
+ .usage-model-meta {
797
+ margin-top: 4px;
798
+ font-size: 11px;
799
+ color: var(--color-text-secondary);
800
+ line-height: 1.4;
801
+ }
802
+
244
803
  .usage-empty {
245
804
  padding: 24px 16px;
246
805
  border-radius: 16px;
@@ -250,7 +809,8 @@
250
809
  }
251
810
 
252
811
  @media (max-width: 960px) {
253
- .usage-chart-grid {
812
+ .usage-chart-grid,
813
+ .usage-model-coverage-strip {
254
814
  grid-template-columns: 1fr;
255
815
  }
256
816
  }
@@ -261,10 +821,18 @@
261
821
  gap: 6px;
262
822
  }
263
823
 
824
+ .usage-list-subvalue {
825
+ grid-column: auto;
826
+ }
827
+
264
828
  .usage-list-value {
265
829
  text-align: left;
266
830
  }
267
831
 
832
+ .usage-mini-bars {
833
+ grid-template-columns: repeat(12, minmax(0, 1fr));
834
+ }
835
+
268
836
  .usage-bar-group {
269
837
  flex-basis: 36px;
270
838
  min-width: 36px;
@@ -273,4 +841,11 @@
273
841
  .usage-bar-stack {
274
842
  max-width: 28px;
275
843
  }
844
+
845
+ .usage-toolbar,
846
+ .usage-card-head,
847
+ .usage-session-row {
848
+ flex-direction: column;
849
+ align-items: stretch;
850
+ }
276
851
  }