@linxiraos/pi-stats 1.0.4 → 1.0.6

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 (65) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/dist/client/index.css +1 -0
  3. package/dist/client/index.html +24 -0
  4. package/dist/client/index.js +257 -0
  5. package/dist/client/styles.css +1692 -0
  6. package/dist/types/aggregator.d.ts +98 -0
  7. package/dist/types/client/App.d.ts +1 -0
  8. package/dist/types/client/api.d.ts +22 -0
  9. package/dist/types/client/app/AppLayout.d.ts +16 -0
  10. package/dist/types/client/app/NavRail.d.ts +7 -0
  11. package/dist/types/client/app/RangeControl.d.ts +7 -0
  12. package/dist/types/client/app/SyncButton.d.ts +14 -0
  13. package/dist/types/client/app/ThemeToggle.d.ts +1 -0
  14. package/dist/types/client/app/TopBar.d.ts +15 -0
  15. package/dist/types/client/app/routes.d.ts +12 -0
  16. package/dist/types/client/components/AgentTokenShare.d.ts +5 -0
  17. package/dist/types/client/components/chart-shared.d.ts +173 -0
  18. package/dist/types/client/components/models-table-shared.d.ts +175 -0
  19. package/dist/types/client/components/range-meta.d.ts +21 -0
  20. package/dist/types/client/data/charts.d.ts +1 -0
  21. package/dist/types/client/data/formatters.d.ts +8 -0
  22. package/dist/types/client/data/useHashRoute.d.ts +8 -0
  23. package/dist/types/client/data/useResource.d.ts +13 -0
  24. package/dist/types/client/data/view-models.d.ts +74 -0
  25. package/dist/types/client/index.d.ts +2 -0
  26. package/dist/types/client/routes/BehaviorRoute.d.ts +7 -0
  27. package/dist/types/client/routes/CostsRoute.d.ts +7 -0
  28. package/dist/types/client/routes/ErrorsRoute.d.ts +8 -0
  29. package/dist/types/client/routes/GainRoute.d.ts +7 -0
  30. package/dist/types/client/routes/ModelsRoute.d.ts +7 -0
  31. package/dist/types/client/routes/OverviewRoute.d.ts +8 -0
  32. package/dist/types/client/routes/ProjectsRoute.d.ts +7 -0
  33. package/dist/types/client/routes/ProvidersRoute.d.ts +7 -0
  34. package/dist/types/client/routes/RequestsRoute.d.ts +8 -0
  35. package/dist/types/client/routes/ToolsRoute.d.ts +7 -0
  36. package/dist/types/client/routes/index.d.ts +10 -0
  37. package/dist/types/client/types.d.ts +63 -0
  38. package/dist/types/client/ui/AsyncBoundary.d.ts +12 -0
  39. package/dist/types/client/ui/DataTable.d.ts +17 -0
  40. package/dist/types/client/ui/EmptyState.d.ts +7 -0
  41. package/dist/types/client/ui/ErrorState.d.ts +6 -0
  42. package/dist/types/client/ui/JsonBlock.d.ts +7 -0
  43. package/dist/types/client/ui/MetricCluster.d.ts +5 -0
  44. package/dist/types/client/ui/Panel.d.ts +7 -0
  45. package/dist/types/client/ui/RequestDrawer.d.ts +5 -0
  46. package/dist/types/client/ui/SegmentedControl.d.ts +12 -0
  47. package/dist/types/client/ui/Skeleton.d.ts +8 -0
  48. package/dist/types/client/ui/StatusPill.d.ts +7 -0
  49. package/dist/types/client/ui/index.d.ts +11 -0
  50. package/dist/types/client/useSystemTheme.d.ts +11 -0
  51. package/dist/types/db.d.ts +159 -0
  52. package/dist/types/embedded-client.d.ts +18 -0
  53. package/dist/types/gain-aggregator.d.ts +26 -0
  54. package/dist/types/index.d.ts +7 -0
  55. package/dist/types/parser.d.ts +53 -0
  56. package/dist/types/port-conflict.d.ts +14 -0
  57. package/dist/types/server.d.ts +12 -0
  58. package/dist/types/shared-types.d.ts +408 -0
  59. package/dist/types/sync-worker.d.ts +31 -0
  60. package/dist/types/types.d.ts +164 -0
  61. package/dist/types/usage-windows.d.ts +45 -0
  62. package/dist/types/user-metrics.d.ts +81 -0
  63. package/package.json +94 -92
  64. package/src/embedded-client.generated.txt +1 -0
  65. package/src/index.ts +0 -0
@@ -0,0 +1,1692 @@
1
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
+ @layer properties;
3
+ @layer theme, base, components, utilities;
4
+ @layer theme {
5
+ :root, :host {
6
+ --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue",
7
+ "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
8
+ "Segoe UI Symbol", "Noto Color Emoji";
9
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
10
+ "Courier New", monospace;
11
+ --spacing: 0.25rem;
12
+ --text-xs: 0.75rem;
13
+ --text-xs--line-height: calc(1 / 0.75);
14
+ --text-sm: 0.875rem;
15
+ --text-sm--line-height: calc(1.25 / 0.875);
16
+ --text-lg: 1.125rem;
17
+ --text-lg--line-height: calc(1.75 / 1.125);
18
+ --text-2xl: 1.5rem;
19
+ --text-2xl--line-height: calc(2 / 1.5);
20
+ --font-weight-medium: 500;
21
+ --font-weight-semibold: 600;
22
+ --font-weight-bold: 700;
23
+ --tracking-wider: 0.05em;
24
+ --radius-sm: 0.25rem;
25
+ --radius-md: 0.375rem;
26
+ --radius-lg: 0.5rem;
27
+ --default-transition-duration: 150ms;
28
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
29
+ --default-font-family: var(--font-sans);
30
+ --default-mono-font-family: var(--font-mono);
31
+ }
32
+ }
33
+ @layer base {
34
+ *, ::after, ::before, ::backdrop, ::file-selector-button {
35
+ box-sizing: border-box;
36
+ margin: 0;
37
+ padding: 0;
38
+ border: 0 solid;
39
+ }
40
+ html, :host {
41
+ line-height: 1.5;
42
+ -webkit-text-size-adjust: 100%;
43
+ tab-size: 4;
44
+ font-family: var(--default-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
45
+ font-feature-settings: var(--default-font-feature-settings, normal);
46
+ font-variation-settings: var(--default-font-variation-settings, normal);
47
+ -webkit-tap-highlight-color: transparent;
48
+ }
49
+ hr {
50
+ height: 0;
51
+ color: inherit;
52
+ border-top-width: 1px;
53
+ }
54
+ abbr:where([title]) {
55
+ -webkit-text-decoration: underline dotted;
56
+ text-decoration: underline dotted;
57
+ }
58
+ h1, h2, h3, h4, h5, h6 {
59
+ font-size: inherit;
60
+ font-weight: inherit;
61
+ }
62
+ a {
63
+ color: inherit;
64
+ -webkit-text-decoration: inherit;
65
+ text-decoration: inherit;
66
+ }
67
+ b, strong {
68
+ font-weight: bolder;
69
+ }
70
+ code, kbd, samp, pre {
71
+ font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
72
+ font-feature-settings: var(--default-mono-font-feature-settings, normal);
73
+ font-variation-settings: var(--default-mono-font-variation-settings, normal);
74
+ font-size: 1em;
75
+ }
76
+ small {
77
+ font-size: 80%;
78
+ }
79
+ sub, sup {
80
+ font-size: 75%;
81
+ line-height: 0;
82
+ position: relative;
83
+ vertical-align: baseline;
84
+ }
85
+ sub {
86
+ bottom: -0.25em;
87
+ }
88
+ sup {
89
+ top: -0.5em;
90
+ }
91
+ table {
92
+ text-indent: 0;
93
+ border-color: inherit;
94
+ border-collapse: collapse;
95
+ }
96
+ :-moz-focusring:where(:not(iframe)) {
97
+ outline: auto;
98
+ }
99
+ progress {
100
+ vertical-align: baseline;
101
+ }
102
+ summary {
103
+ display: list-item;
104
+ }
105
+ ol, ul, menu {
106
+ list-style: none;
107
+ }
108
+ img, svg, video, canvas, audio, iframe, embed, object {
109
+ display: block;
110
+ vertical-align: middle;
111
+ }
112
+ img, video {
113
+ max-width: 100%;
114
+ height: auto;
115
+ }
116
+ button, input, select, optgroup, textarea, ::file-selector-button {
117
+ font: inherit;
118
+ font-feature-settings: inherit;
119
+ font-variation-settings: inherit;
120
+ letter-spacing: inherit;
121
+ color: inherit;
122
+ border-radius: 0;
123
+ background-color: transparent;
124
+ opacity: 1;
125
+ }
126
+ :where(select:is([multiple], [size])) optgroup {
127
+ font-weight: bolder;
128
+ }
129
+ :where(select:is([multiple], [size])) optgroup option {
130
+ padding-inline-start: 20px;
131
+ }
132
+ ::file-selector-button {
133
+ margin-inline-end: 4px;
134
+ }
135
+ ::placeholder {
136
+ opacity: 1;
137
+ }
138
+ @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
139
+ ::placeholder {
140
+ color: currentcolor;
141
+ @supports (color: color-mix(in lab, red, red)) {
142
+ color: color-mix(in oklab, currentcolor 50%, transparent);
143
+ }
144
+ }
145
+ }
146
+ textarea {
147
+ resize: vertical;
148
+ }
149
+ ::-webkit-search-decoration {
150
+ -webkit-appearance: none;
151
+ }
152
+ ::-webkit-date-and-time-value {
153
+ min-height: 1lh;
154
+ text-align: inherit;
155
+ }
156
+ ::-webkit-datetime-edit {
157
+ display: inline-flex;
158
+ }
159
+ ::-webkit-datetime-edit-fields-wrapper {
160
+ padding: 0;
161
+ }
162
+ ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
163
+ padding-block: 0;
164
+ }
165
+ ::-webkit-calendar-picker-indicator {
166
+ line-height: 1;
167
+ }
168
+ :-moz-ui-invalid {
169
+ box-shadow: none;
170
+ }
171
+ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
172
+ appearance: button;
173
+ }
174
+ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
175
+ height: auto;
176
+ }
177
+ [hidden]:where(:not([hidden="until-found"])) {
178
+ display: none !important;
179
+ }
180
+ }
181
+ @layer utilities {
182
+ .mt-0\.5 {
183
+ margin-top: calc(var(--spacing) * 0.5);
184
+ }
185
+ .mt-1 {
186
+ margin-top: var(--spacing);
187
+ }
188
+ .mt-2 {
189
+ margin-top: calc(var(--spacing) * 2);
190
+ }
191
+ .mb-1 {
192
+ margin-bottom: var(--spacing);
193
+ }
194
+ .mb-2 {
195
+ margin-bottom: calc(var(--spacing) * 2);
196
+ }
197
+ .mb-4 {
198
+ margin-bottom: calc(var(--spacing) * 4);
199
+ }
200
+ .ml-auto {
201
+ margin-left: auto;
202
+ }
203
+ .flex {
204
+ display: flex;
205
+ }
206
+ .grid {
207
+ display: grid;
208
+ }
209
+ .h-1 {
210
+ height: var(--spacing);
211
+ }
212
+ .h-2\.5 {
213
+ height: calc(var(--spacing) * 2.5);
214
+ }
215
+ .h-3 {
216
+ height: calc(var(--spacing) * 3);
217
+ }
218
+ .h-10 {
219
+ height: calc(var(--spacing) * 10);
220
+ }
221
+ .h-\[200px\] {
222
+ height: 200px;
223
+ }
224
+ .h-\[260px\] {
225
+ height: 260px;
226
+ }
227
+ .h-\[280px\] {
228
+ height: 280px;
229
+ }
230
+ .h-\[300px\] {
231
+ height: 300px;
232
+ }
233
+ .h-full {
234
+ height: 100%;
235
+ }
236
+ .max-h-\[280px\] {
237
+ max-height: 280px;
238
+ }
239
+ .max-h-\[calc\(100vh-300px\)\] {
240
+ max-height: calc(100vh - 300px);
241
+ }
242
+ .w-2\.5 {
243
+ width: calc(var(--spacing) * 2.5);
244
+ }
245
+ .w-24 {
246
+ width: calc(var(--spacing) * 24);
247
+ }
248
+ .w-full {
249
+ width: 100%;
250
+ }
251
+ .max-w-\[280px\] {
252
+ max-width: 280px;
253
+ }
254
+ .max-w-\[440px\] {
255
+ max-width: 440px;
256
+ }
257
+ .min-w-0 {
258
+ min-width: 0px;
259
+ }
260
+ .flex-1 {
261
+ flex: 1;
262
+ }
263
+ .flex-shrink-0 {
264
+ flex-shrink: 0;
265
+ }
266
+ .cursor-pointer {
267
+ cursor: pointer;
268
+ }
269
+ .grid-cols-1 {
270
+ grid-template-columns: repeat(1, minmax(0, 1fr));
271
+ }
272
+ .grid-cols-2 {
273
+ grid-template-columns: repeat(2, minmax(0, 1fr));
274
+ }
275
+ .flex-wrap {
276
+ flex-wrap: wrap;
277
+ }
278
+ .items-baseline {
279
+ align-items: baseline;
280
+ }
281
+ .items-center {
282
+ align-items: center;
283
+ }
284
+ .items-start {
285
+ align-items: flex-start;
286
+ }
287
+ .justify-between {
288
+ justify-content: space-between;
289
+ }
290
+ .justify-center {
291
+ justify-content: center;
292
+ }
293
+ .gap-2 {
294
+ gap: calc(var(--spacing) * 2);
295
+ }
296
+ .gap-3 {
297
+ gap: calc(var(--spacing) * 3);
298
+ }
299
+ .gap-4 {
300
+ gap: calc(var(--spacing) * 4);
301
+ }
302
+ .gap-6 {
303
+ gap: calc(var(--spacing) * 6);
304
+ }
305
+ :where(.space-y-0\.5 > :not(:last-child)) {
306
+ --tw-space-y-reverse: 0;
307
+ margin-block-start: calc(calc(var(--spacing) * 0.5) * var(--tw-space-y-reverse));
308
+ margin-block-end: calc(calc(var(--spacing) * 0.5) * calc(1 - var(--tw-space-y-reverse)));
309
+ }
310
+ :where(.space-y-1 > :not(:last-child)) {
311
+ --tw-space-y-reverse: 0;
312
+ margin-block-start: calc(var(--spacing) * var(--tw-space-y-reverse));
313
+ margin-block-end: calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)));
314
+ }
315
+ :where(.space-y-2 > :not(:last-child)) {
316
+ --tw-space-y-reverse: 0;
317
+ margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));
318
+ margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
319
+ }
320
+ :where(.space-y-4 > :not(:last-child)) {
321
+ --tw-space-y-reverse: 0;
322
+ margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));
323
+ margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
324
+ }
325
+ :where(.space-y-6 > :not(:last-child)) {
326
+ --tw-space-y-reverse: 0;
327
+ margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));
328
+ margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
329
+ }
330
+ .truncate {
331
+ overflow: hidden;
332
+ text-overflow: ellipsis;
333
+ white-space: nowrap;
334
+ }
335
+ .overflow-hidden {
336
+ overflow: hidden;
337
+ }
338
+ .overflow-x-auto {
339
+ overflow-x: auto;
340
+ }
341
+ .overflow-y-auto {
342
+ overflow-y: auto;
343
+ }
344
+ .rounded {
345
+ border-radius: 0.25rem;
346
+ }
347
+ .rounded-full {
348
+ border-radius: calc(infinity * 1px);
349
+ }
350
+ .border-t {
351
+ border-top-style: var(--tw-border-style);
352
+ border-top-width: 1px;
353
+ }
354
+ .border-b {
355
+ border-bottom-style: var(--tw-border-style);
356
+ border-bottom-width: 1px;
357
+ }
358
+ .border-none {
359
+ --tw-border-style: none;
360
+ border-style: none;
361
+ }
362
+ .border-\[var\(--border-subtle\)\] {
363
+ border-color: var(--border-subtle);
364
+ }
365
+ .bg-\[var\(--bg-elevated\)\] {
366
+ background-color: var(--bg-elevated);
367
+ }
368
+ .bg-transparent {
369
+ background-color: transparent;
370
+ }
371
+ .p-2 {
372
+ padding: calc(var(--spacing) * 2);
373
+ }
374
+ .px-4 {
375
+ padding-inline: calc(var(--spacing) * 4);
376
+ }
377
+ .px-5 {
378
+ padding-inline: calc(var(--spacing) * 5);
379
+ }
380
+ .py-3 {
381
+ padding-block: calc(var(--spacing) * 3);
382
+ }
383
+ .py-4 {
384
+ padding-block: calc(var(--spacing) * 4);
385
+ }
386
+ .py-8 {
387
+ padding-block: calc(var(--spacing) * 8);
388
+ }
389
+ .pr-2 {
390
+ padding-right: calc(var(--spacing) * 2);
391
+ }
392
+ .text-center {
393
+ text-align: center;
394
+ }
395
+ .text-left {
396
+ text-align: left;
397
+ }
398
+ .text-right {
399
+ text-align: right;
400
+ }
401
+ .font-mono {
402
+ font-family: var(--font-mono);
403
+ }
404
+ .text-2xl {
405
+ font-size: var(--text-2xl);
406
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
407
+ }
408
+ .text-lg {
409
+ font-size: var(--text-lg);
410
+ line-height: var(--tw-leading, var(--text-lg--line-height));
411
+ }
412
+ .text-sm {
413
+ font-size: var(--text-sm);
414
+ line-height: var(--tw-leading, var(--text-sm--line-height));
415
+ }
416
+ .text-xs {
417
+ font-size: var(--text-xs);
418
+ line-height: var(--tw-leading, var(--text-xs--line-height));
419
+ }
420
+ .font-bold {
421
+ --tw-font-weight: var(--font-weight-bold);
422
+ font-weight: var(--font-weight-bold);
423
+ }
424
+ .font-medium {
425
+ --tw-font-weight: var(--font-weight-medium);
426
+ font-weight: var(--font-weight-medium);
427
+ }
428
+ .font-semibold {
429
+ --tw-font-weight: var(--font-weight-semibold);
430
+ font-weight: var(--font-weight-semibold);
431
+ }
432
+ .tracking-wider {
433
+ --tw-tracking: var(--tracking-wider);
434
+ letter-spacing: var(--tracking-wider);
435
+ }
436
+ .whitespace-nowrap {
437
+ white-space: nowrap;
438
+ }
439
+ .text-\[var\(--text-muted\)\] {
440
+ color: var(--text-muted);
441
+ }
442
+ .text-\[var\(--text-primary\)\] {
443
+ color: var(--text-primary);
444
+ }
445
+ .text-\[var\(--text-secondary\)\] {
446
+ color: var(--text-secondary);
447
+ }
448
+ .uppercase {
449
+ text-transform: uppercase;
450
+ }
451
+ .tabular-nums {
452
+ --tw-numeric-spacing: tabular-nums;
453
+ font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
454
+ }
455
+ .transition-colors {
456
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
457
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
458
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
459
+ }
460
+ @media (hover: hover) {
461
+ .hover\:bg-\[var\(--bg-hover\)\]:hover {
462
+ background-color: var(--bg-hover);
463
+ }
464
+ }
465
+ @media (width >= 48rem) {
466
+ .md\:grid-cols-3 {
467
+ grid-template-columns: repeat(3, minmax(0, 1fr));
468
+ }
469
+ .md\:grid-cols-6 {
470
+ grid-template-columns: repeat(6, minmax(0, 1fr));
471
+ }
472
+ }
473
+ @media (width >= 64rem) {
474
+ .lg\:col-span-2 {
475
+ grid-column: span 2 / span 2;
476
+ }
477
+ .lg\:grid-cols-3 {
478
+ grid-template-columns: repeat(3, minmax(0, 1fr));
479
+ }
480
+ }
481
+ }
482
+ :root {
483
+ color-scheme: dark;
484
+ --bg: #1a1a1a;
485
+ --bg-panel: #242424;
486
+ --bg-hover: #2e2e2e;
487
+ --bg-selected: #383838;
488
+ --bg-subtle: rgba(255,255,255,0.04);
489
+ --border: #3a3a3a;
490
+ --border-strong: rgba(255,255,255,0.13);
491
+ --text: #e8e8e8;
492
+ --text-muted: #9ca3af;
493
+ --text-dim: #6b7280;
494
+ --accent: #60a5fa;
495
+ --accent-hover: #93c5fd;
496
+ --accent-fg: #0f172a;
497
+ --accent-muted: rgba(96,165,250,0.18);
498
+ --link: #60a5fa;
499
+ --success: #22c55e;
500
+ --danger: #ef4444;
501
+ --warning: #f59e0b;
502
+ --page: var(--bg);
503
+ --surface: var(--bg-panel);
504
+ --surface-2: var(--bg-hover);
505
+ --muted: var(--text-muted);
506
+ --dim: var(--text-dim);
507
+ --text-primary: var(--text);
508
+ --text-secondary: var(--text-muted);
509
+ --border-subtle: var(--border);
510
+ --accent-red: var(--danger);
511
+ --accent-green: var(--success);
512
+ --accent-cyan: var(--link);
513
+ --bg-elevated: var(--bg-hover);
514
+ --radius-sm: 3px;
515
+ --radius-md: 6px;
516
+ --radius-lg: 8px;
517
+ }
518
+ @media (prefers-color-scheme: light) {
519
+ :root:not([data-theme]) {
520
+ color-scheme: light;
521
+ --bg: #ffffff;
522
+ --bg-panel: #f5f5f5;
523
+ --bg-hover: #eeeeee;
524
+ --bg-selected: #e8e8e8;
525
+ --bg-subtle: rgba(0,0,0,0.03);
526
+ --border: #e0e0e0;
527
+ --border-strong: rgba(0,0,0,0.15);
528
+ --text: #1a1a1a;
529
+ --text-muted: #6b7280;
530
+ --text-dim: #9ca3af;
531
+ --accent: #2563eb;
532
+ --accent-hover: #1d4ed8;
533
+ --accent-fg: #ffffff;
534
+ --accent-muted: rgba(37,99,235,0.14);
535
+ --link: #2563eb;
536
+ --success: #16a34a;
537
+ --danger: #dc2626;
538
+ --warning: #d97706;
539
+ --page: var(--bg);
540
+ --surface: var(--bg-panel);
541
+ --surface-2: var(--bg-hover);
542
+ --muted: var(--text-muted);
543
+ --dim: var(--text-dim);
544
+ }
545
+ }
546
+ [data-theme="light"] {
547
+ color-scheme: light;
548
+ --bg: #ffffff;
549
+ --bg-panel: #f5f5f5;
550
+ --bg-hover: #eeeeee;
551
+ --bg-selected: #e8e8e8;
552
+ --bg-subtle: rgba(0,0,0,0.03);
553
+ --border: #e0e0e0;
554
+ --border-strong: rgba(0,0,0,0.15);
555
+ --text: #1a1a1a;
556
+ --text-muted: #6b7280;
557
+ --text-dim: #9ca3af;
558
+ --accent: #2563eb;
559
+ --accent-hover: #1d4ed8;
560
+ --accent-fg: #ffffff;
561
+ --accent-muted: rgba(37,99,235,0.14);
562
+ --link: #2563eb;
563
+ --success: #16a34a;
564
+ --danger: #dc2626;
565
+ --warning: #d97706;
566
+ --page: var(--bg);
567
+ --surface: var(--bg-panel);
568
+ --surface-2: var(--bg-hover);
569
+ --muted: var(--text-muted);
570
+ --dim: var(--text-dim);
571
+ }
572
+ [data-theme="starfield"] {
573
+ color-scheme: dark;
574
+ --bg: #08090d;
575
+ --bg-panel: #0d1117;
576
+ --bg-hover: #161d2e;
577
+ --bg-selected: #1a2540;
578
+ --bg-subtle: rgba(217,155,38,0.05);
579
+ --border: #1e2d45;
580
+ --border-strong: rgba(217,155,38,0.2);
581
+ --text: #e8eeff;
582
+ --text-muted: #8fa3c0;
583
+ --text-dim: #3d5070;
584
+ --accent: #d99b26;
585
+ --accent-hover: #f0b840;
586
+ --accent-fg: #0f172a;
587
+ --accent-muted: rgba(217,155,38,0.18);
588
+ --link: #d99b26;
589
+ --success: #22c55e;
590
+ --danger: #c81d25;
591
+ --warning: #e05a2b;
592
+ --page: var(--bg);
593
+ --surface: var(--bg-panel);
594
+ --surface-2: var(--bg-hover);
595
+ --muted: var(--text-muted);
596
+ --dim: var(--text-dim);
597
+ }
598
+ @layer base {
599
+ * {
600
+ box-sizing: border-box;
601
+ }
602
+ html {
603
+ -webkit-font-smoothing: antialiased;
604
+ -moz-osx-font-smoothing: grayscale;
605
+ }
606
+ body {
607
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
608
+ background: var(--page);
609
+ color: var(--text);
610
+ margin: 0;
611
+ min-height: 100vh;
612
+ }
613
+ button:focus-visible, a:focus-visible, [tabindex]:focus-visible {
614
+ outline: 2px solid var(--link);
615
+ outline-offset: 2px;
616
+ }
617
+ }
618
+ .stats-app-container {
619
+ display: flex;
620
+ min-height: 100vh;
621
+ background: var(--page);
622
+ color: var(--text);
623
+ }
624
+ .stats-nav-rail {
625
+ width: 240px;
626
+ background: var(--surface);
627
+ border-right: 1px solid var(--border);
628
+ display: flex;
629
+ flex-direction: column;
630
+ flex-shrink: 0;
631
+ }
632
+ .stats-desktop-nav {
633
+ display: flex;
634
+ }
635
+ @media (max-width: 1023px) {
636
+ .stats-desktop-nav {
637
+ display: none;
638
+ }
639
+ }
640
+ .stats-nav-rail-header {
641
+ padding: 20px 24px;
642
+ border-bottom: 1px solid var(--border);
643
+ height: 56px;
644
+ display: flex;
645
+ align-items: center;
646
+ }
647
+ .stats-logo-container {
648
+ display: flex;
649
+ flex-direction: column;
650
+ }
651
+ .stats-logo-text {
652
+ font-size: 14px;
653
+ font-weight: 700;
654
+ letter-spacing: 0.1em;
655
+ color: var(--text);
656
+ }
657
+ .stats-logo-subtext {
658
+ font-size: 10px;
659
+ text-transform: uppercase;
660
+ letter-spacing: 0.05em;
661
+ color: var(--muted);
662
+ }
663
+ .stats-nav-rail-menu {
664
+ flex: 1;
665
+ padding: 16px 12px;
666
+ display: flex;
667
+ flex-direction: column;
668
+ gap: 4px;
669
+ }
670
+ .stats-nav-rail-item {
671
+ display: flex;
672
+ align-items: center;
673
+ gap: 12px;
674
+ padding: 10px 16px;
675
+ font-size: 13px;
676
+ font-weight: 500;
677
+ color: var(--muted);
678
+ background: transparent;
679
+ border: none;
680
+ border-radius: var(--radius-md);
681
+ cursor: pointer;
682
+ text-align: left;
683
+ transition: all 0.15s ease;
684
+ }
685
+ .stats-nav-rail-item:hover {
686
+ color: var(--text);
687
+ background: var(--surface-2);
688
+ }
689
+ .stats-nav-rail-item[data-active="true"] {
690
+ color: var(--accent);
691
+ background: var(--accent-muted);
692
+ position: relative;
693
+ }
694
+ .stats-nav-rail-item[data-active="true"]::before {
695
+ content: "";
696
+ position: absolute;
697
+ left: 0;
698
+ top: 50%;
699
+ height: 18px;
700
+ width: 3px;
701
+ border-radius: 0 3px 3px 0;
702
+ background: var(--accent);
703
+ transform: translateY(-50%);
704
+ }
705
+ .stats-nav-rail-item-icon {
706
+ flex-shrink: 0;
707
+ }
708
+ .stats-nav-rail-footer {
709
+ padding: 16px 24px;
710
+ border-top: 1px solid var(--border);
711
+ }
712
+ .stats-version-tag {
713
+ font-size: 11px;
714
+ color: var(--dim);
715
+ }
716
+ .stats-main-pane {
717
+ flex: 1;
718
+ display: flex;
719
+ flex-direction: column;
720
+ min-width: 0;
721
+ }
722
+ .stats-top-bar {
723
+ height: 56px;
724
+ background: var(--surface);
725
+ border-bottom: 1px solid var(--border);
726
+ display: flex;
727
+ align-items: center;
728
+ justify-content: space-between;
729
+ padding: 0 24px;
730
+ }
731
+ @media (max-width: 767px) {
732
+ .stats-top-bar {
733
+ padding: 0 16px;
734
+ flex-wrap: wrap;
735
+ height: auto;
736
+ min-height: 56px;
737
+ padding-top: 8px;
738
+ padding-bottom: 8px;
739
+ gap: 12px;
740
+ }
741
+ }
742
+ .stats-top-bar-left {
743
+ display: flex;
744
+ align-items: center;
745
+ gap: 12px;
746
+ }
747
+ .stats-mobile-menu-btn {
748
+ display: none;
749
+ background: transparent;
750
+ border: none;
751
+ color: var(--text);
752
+ padding: 4px;
753
+ cursor: pointer;
754
+ }
755
+ @media (max-width: 1023px) {
756
+ .stats-mobile-menu-btn {
757
+ display: inline-flex;
758
+ align-items: center;
759
+ justify-content: center;
760
+ }
761
+ }
762
+ .stats-page-title {
763
+ font-size: 16px;
764
+ font-weight: 600;
765
+ color: var(--text);
766
+ margin: 0;
767
+ }
768
+ .stats-top-bar-right {
769
+ display: flex;
770
+ align-items: center;
771
+ gap: 16px;
772
+ }
773
+ @media (max-width: 767px) {
774
+ .stats-top-bar-right {
775
+ width: 100%;
776
+ justify-content: space-between;
777
+ gap: 8px;
778
+ }
779
+ }
780
+ .stats-top-bar-meta {
781
+ display: flex;
782
+ align-items: center;
783
+ }
784
+ .stats-last-updated {
785
+ font-size: 11px;
786
+ color: var(--dim);
787
+ font-variant-numeric: tabular-nums;
788
+ }
789
+ .stats-content-area {
790
+ flex: 1;
791
+ overflow-y: auto;
792
+ }
793
+ .stats-content-inner {
794
+ max-width: 1560px;
795
+ margin: 0 auto;
796
+ padding: 24px;
797
+ display: flex;
798
+ flex-direction: column;
799
+ gap: 24px;
800
+ }
801
+ @media (max-width: 767px) {
802
+ .stats-content-inner {
803
+ padding: 16px;
804
+ gap: 16px;
805
+ }
806
+ }
807
+ .stats-mobile-drawer-overlay {
808
+ position: fixed;
809
+ inset: 0;
810
+ background: rgba(0, 0, 0, 0.4);
811
+ backdrop-filter: none;
812
+ z-index: 100;
813
+ }
814
+ .stats-mobile-drawer {
815
+ position: absolute;
816
+ left: 0;
817
+ top: 0;
818
+ bottom: 0;
819
+ width: 260px;
820
+ background: var(--surface);
821
+ border-right: 1px solid var(--border);
822
+ display: flex;
823
+ flex-direction: column;
824
+ z-index: 101;
825
+ animation: slideIn 0.2s ease-out;
826
+ }
827
+ @keyframes slideIn {
828
+ from {
829
+ transform: translateX(-100%);
830
+ }
831
+ to {
832
+ transform: translateX(0);
833
+ }
834
+ }
835
+ .stats-mobile-drawer-header {
836
+ height: 56px;
837
+ display: flex;
838
+ align-items: center;
839
+ justify-content: space-between;
840
+ padding: 0 16px 0 24px;
841
+ border-bottom: 1px solid var(--border);
842
+ }
843
+ .stats-mobile-nav {
844
+ display: flex;
845
+ height: calc(100% - 56px);
846
+ }
847
+ .stats-button {
848
+ display: inline-flex;
849
+ align-items: center;
850
+ justify-content: center;
851
+ gap: 8px;
852
+ padding: 8px 14px;
853
+ font-size: 13px;
854
+ font-weight: 500;
855
+ border-radius: var(--radius-md);
856
+ border: 1px solid transparent;
857
+ cursor: pointer;
858
+ transition: all 0.15s ease;
859
+ font-family: inherit;
860
+ }
861
+ .stats-button:active:not(:disabled) {
862
+ transform: translateY(1px);
863
+ }
864
+ .stats-button-primary {
865
+ background: var(--accent);
866
+ color: var(--accent-fg);
867
+ }
868
+ .stats-button-primary:hover:not(:disabled) {
869
+ opacity: 0.9;
870
+ }
871
+ .stats-button-primary:disabled {
872
+ opacity: 0.5;
873
+ cursor: not-allowed;
874
+ }
875
+ .stats-button-secondary {
876
+ background: var(--surface-2);
877
+ color: var(--text);
878
+ border-color: var(--border);
879
+ }
880
+ .stats-button-secondary:hover:not(:disabled) {
881
+ background: var(--border);
882
+ }
883
+ .stats-button-secondary:disabled {
884
+ opacity: 0.5;
885
+ cursor: not-allowed;
886
+ }
887
+ .stats-range-control {
888
+ display: flex;
889
+ background: var(--surface-2);
890
+ border: 1px solid var(--border);
891
+ border-radius: var(--radius-md);
892
+ padding: 2px;
893
+ }
894
+ .stats-range-control-btn {
895
+ padding: 4px 10px;
896
+ font-size: 12px;
897
+ font-weight: 500;
898
+ color: var(--muted);
899
+ background: transparent;
900
+ border: none;
901
+ border-radius: var(--radius-sm);
902
+ cursor: pointer;
903
+ transition: all 0.1s ease;
904
+ }
905
+ .stats-range-control-btn:hover {
906
+ color: var(--text);
907
+ }
908
+ .stats-range-control-btn[data-active="true"] {
909
+ color: var(--text);
910
+ background: var(--surface);
911
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.18);
912
+ }
913
+ .stats-sync-container {
914
+ display: flex;
915
+ align-items: center;
916
+ gap: 12px;
917
+ }
918
+ .stats-sync-status-msg {
919
+ font-size: 11px;
920
+ font-variant-numeric: tabular-nums;
921
+ max-width: 200px;
922
+ white-space: nowrap;
923
+ overflow: hidden;
924
+ text-overflow: ellipsis;
925
+ }
926
+ .stats-sync-status-msg[data-type="success"] {
927
+ color: var(--success);
928
+ }
929
+ .stats-sync-status-msg[data-type="error"] {
930
+ color: var(--danger);
931
+ }
932
+ .stats-sync-icon {
933
+ flex-shrink: 0;
934
+ }
935
+ .stats-spin {
936
+ animation: spin 1s linear infinite;
937
+ }
938
+ @keyframes spin {
939
+ to {
940
+ transform: rotate(360deg);
941
+ }
942
+ }
943
+ .stats-panel {
944
+ background: var(--surface);
945
+ border: 1px solid var(--border);
946
+ border-radius: var(--radius-lg);
947
+ display: flex;
948
+ flex-direction: column;
949
+ }
950
+ .stats-panel-header {
951
+ padding: 16px 20px;
952
+ border-bottom: 1px solid var(--border);
953
+ display: flex;
954
+ align-items: center;
955
+ justify-content: space-between;
956
+ gap: 16px;
957
+ }
958
+ @media (max-width: 480px) {
959
+ .stats-panel-header {
960
+ flex-direction: column;
961
+ align-items: flex-start;
962
+ gap: 8px;
963
+ }
964
+ }
965
+ .stats-panel-header-titles {
966
+ display: flex;
967
+ flex-direction: column;
968
+ }
969
+ .stats-panel-title {
970
+ font-size: 14px;
971
+ font-weight: 600;
972
+ color: var(--text);
973
+ margin: 0;
974
+ }
975
+ .stats-panel-subtitle {
976
+ font-size: 12px;
977
+ color: var(--muted);
978
+ margin: 2px 0 0 0;
979
+ }
980
+ .stats-panel-actions {
981
+ display: flex;
982
+ align-items: center;
983
+ gap: 12px;
984
+ }
985
+ .stats-panel-body {
986
+ padding: 20px;
987
+ }
988
+ .stats-metric-cluster {
989
+ display: flex;
990
+ flex-direction: column;
991
+ gap: 16px;
992
+ }
993
+ .stats-metric-primary-grid {
994
+ display: grid;
995
+ grid-template-columns: repeat(5, minmax(0, 1fr));
996
+ gap: 16px;
997
+ }
998
+ @media (max-width: 1023px) {
999
+ .stats-metric-primary-grid {
1000
+ grid-template-columns: repeat(2, 1fr);
1001
+ }
1002
+ }
1003
+ @media (max-width: 480px) {
1004
+ .stats-metric-primary-grid {
1005
+ grid-template-columns: 1fr;
1006
+ }
1007
+ }
1008
+ .stats-metric-secondary-grid {
1009
+ display: grid;
1010
+ grid-template-columns: repeat(8, 1fr);
1011
+ gap: 12px;
1012
+ }
1013
+ @media (max-width: 1279px) {
1014
+ .stats-metric-secondary-grid {
1015
+ grid-template-columns: repeat(4, 1fr);
1016
+ }
1017
+ }
1018
+ @media (max-width: 767px) {
1019
+ .stats-metric-secondary-grid {
1020
+ grid-template-columns: repeat(2, 1fr);
1021
+ }
1022
+ }
1023
+ .stats-metric-card {
1024
+ background: var(--surface);
1025
+ border: 1px solid var(--border);
1026
+ border-radius: var(--radius-lg);
1027
+ padding: 16px;
1028
+ display: flex;
1029
+ flex-direction: column;
1030
+ justify-content: space-between;
1031
+ }
1032
+ .stats-metric-card.primary {
1033
+ padding: 20px 18px;
1034
+ }
1035
+ .stats-metric-card.primary .stats-metric-label {
1036
+ color: var(--accent);
1037
+ }
1038
+ .stats-metric-card.secondary {
1039
+ padding: 12px 14px;
1040
+ }
1041
+ .stats-metric-label {
1042
+ font-size: 11px;
1043
+ font-weight: 600;
1044
+ text-transform: uppercase;
1045
+ letter-spacing: 0.05em;
1046
+ color: var(--muted);
1047
+ margin-bottom: 8px;
1048
+ }
1049
+ .stats-metric-value {
1050
+ font-size: 20px;
1051
+ font-weight: 700;
1052
+ color: var(--text);
1053
+ font-variant-numeric: tabular-nums;
1054
+ }
1055
+ .stats-metric-card.secondary .stats-metric-value {
1056
+ font-size: 15px;
1057
+ font-weight: 600;
1058
+ }
1059
+ .stats-table-wrapper {
1060
+ width: 100%;
1061
+ }
1062
+ .stats-table-container {
1063
+ width: 100%;
1064
+ overflow-x: auto;
1065
+ }
1066
+ .stats-table {
1067
+ width: 100%;
1068
+ border-collapse: collapse;
1069
+ font-size: 13px;
1070
+ font-variant-numeric: tabular-nums;
1071
+ }
1072
+ .stats-table-th {
1073
+ font-size: 11px;
1074
+ font-weight: 600;
1075
+ text-transform: uppercase;
1076
+ letter-spacing: 0.05em;
1077
+ color: var(--muted);
1078
+ padding: 12px 16px;
1079
+ border-bottom: 2px solid var(--border);
1080
+ }
1081
+ .stats-table-td {
1082
+ padding: 10px 16px;
1083
+ border-bottom: 1px solid var(--border);
1084
+ color: var(--text);
1085
+ }
1086
+ .stats-table-tr {
1087
+ background: transparent;
1088
+ }
1089
+ .stats-table-tr-clickable {
1090
+ cursor: pointer;
1091
+ transition: background 0.12s ease, box-shadow 0.12s ease;
1092
+ }
1093
+ .stats-table-tr-clickable:hover {
1094
+ background: var(--surface-2);
1095
+ box-shadow: inset 2px 0 0 var(--accent);
1096
+ }
1097
+ .stats-text-left {
1098
+ text-align: left;
1099
+ }
1100
+ .stats-text-right {
1101
+ text-align: right;
1102
+ }
1103
+ .stats-table-empty {
1104
+ padding: 40px;
1105
+ text-align: center;
1106
+ color: var(--muted);
1107
+ font-size: 13px;
1108
+ border: 1px dashed var(--border);
1109
+ border-radius: var(--radius-lg);
1110
+ }
1111
+ .stats-progress-bar-track {
1112
+ background: var(--surface-2);
1113
+ border-radius: 999px;
1114
+ overflow: hidden;
1115
+ }
1116
+ .stats-progress-bar-fill {
1117
+ height: 100%;
1118
+ border-radius: inherit;
1119
+ transition: width 0.18s ease;
1120
+ }
1121
+ .stats-progress-bar-fill[data-variant="link"] {
1122
+ background: var(--link);
1123
+ }
1124
+ .stats-progress-bar-fill[data-variant="success"] {
1125
+ background: var(--success);
1126
+ }
1127
+ .stats-table-mobile-only {
1128
+ display: none;
1129
+ }
1130
+ .stats-table-desktop-only {
1131
+ width: 100%;
1132
+ overflow-x: auto;
1133
+ }
1134
+ @media (max-width: 767px) {
1135
+ .stats-table-desktop-only {
1136
+ display: none;
1137
+ }
1138
+ .stats-table-mobile-only {
1139
+ display: block;
1140
+ }
1141
+ }
1142
+ .stats-table-mobile-list {
1143
+ display: flex;
1144
+ flex-direction: column;
1145
+ gap: 12px;
1146
+ }
1147
+ .stats-table-mobile-card-wrapper {
1148
+ background: var(--surface);
1149
+ border: 1px solid var(--border);
1150
+ border-radius: var(--radius-lg);
1151
+ padding: 14px;
1152
+ }
1153
+ .stats-status-pill {
1154
+ display: inline-flex;
1155
+ align-items: center;
1156
+ justify-content: center;
1157
+ padding: 2px 8px;
1158
+ font-size: 11px;
1159
+ font-weight: 600;
1160
+ border-radius: 100px;
1161
+ line-height: 1.2;
1162
+ }
1163
+ .stats-status-pill[data-variant="success"] {
1164
+ background: var(--success);
1165
+ @supports (color: color-mix(in lab, red, red)) {
1166
+ background: color-mix(in srgb, var(--success) 18%, transparent);
1167
+ }
1168
+ color: var(--success);
1169
+ }
1170
+ .stats-status-pill[data-variant="danger"] {
1171
+ background: var(--danger);
1172
+ @supports (color: color-mix(in lab, red, red)) {
1173
+ background: color-mix(in srgb, var(--danger) 18%, transparent);
1174
+ }
1175
+ color: var(--danger);
1176
+ }
1177
+ .stats-status-pill[data-variant="warning"] {
1178
+ background: var(--warning);
1179
+ @supports (color: color-mix(in lab, red, red)) {
1180
+ background: color-mix(in srgb, var(--warning) 18%, transparent);
1181
+ }
1182
+ color: var(--warning);
1183
+ }
1184
+ .stats-status-pill[data-variant="info"] {
1185
+ background: var(--link);
1186
+ @supports (color: color-mix(in lab, red, red)) {
1187
+ background: color-mix(in srgb, var(--link) 18%, transparent);
1188
+ }
1189
+ color: var(--link);
1190
+ }
1191
+ .stats-status-pill[data-variant="default"] {
1192
+ background: var(--surface-2);
1193
+ color: var(--muted);
1194
+ }
1195
+ .stats-segmented-control {
1196
+ display: flex;
1197
+ background: var(--surface-2);
1198
+ border: 1px solid var(--border);
1199
+ border-radius: var(--radius-md);
1200
+ padding: 2px;
1201
+ gap: 2px;
1202
+ }
1203
+ .stats-segmented-control-btn {
1204
+ padding: 6px 12px;
1205
+ font-size: 12px;
1206
+ font-weight: 500;
1207
+ color: var(--muted);
1208
+ background: transparent;
1209
+ border: none;
1210
+ border-radius: var(--radius-sm);
1211
+ cursor: pointer;
1212
+ transition: all 0.1s ease;
1213
+ white-space: nowrap;
1214
+ }
1215
+ .stats-segmented-control-btn:hover {
1216
+ color: var(--text);
1217
+ }
1218
+ .stats-segmented-control-btn[data-active="true"] {
1219
+ color: var(--text);
1220
+ background: var(--surface);
1221
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.18);
1222
+ }
1223
+ .stats-drawer-overlay {
1224
+ position: fixed;
1225
+ inset: 0;
1226
+ background: rgba(0, 0, 0, 0.5);
1227
+ z-index: 100;
1228
+ display: flex;
1229
+ justify-content: flex-end;
1230
+ }
1231
+ .stats-drawer {
1232
+ width: 600px;
1233
+ max-width: 100%;
1234
+ height: 100%;
1235
+ background: var(--surface);
1236
+ border-left: 1px solid var(--border);
1237
+ display: flex;
1238
+ flex-direction: column;
1239
+ animation: drawerSlide 0.25s cubic-bezier(0.16, 1, 0.3, 1);
1240
+ box-shadow: -4px 0 24px rgba(0, 0, 0, 0.25);
1241
+ }
1242
+ @keyframes drawerSlide {
1243
+ from {
1244
+ transform: translateX(100%);
1245
+ }
1246
+ to {
1247
+ transform: translateX(0);
1248
+ }
1249
+ }
1250
+ .stats-drawer-header {
1251
+ height: 56px;
1252
+ border-bottom: 1px solid var(--border);
1253
+ padding: 0 24px;
1254
+ display: flex;
1255
+ align-items: center;
1256
+ justify-content: space-between;
1257
+ background: var(--surface);
1258
+ flex-shrink: 0;
1259
+ }
1260
+ .stats-drawer-header-left {
1261
+ display: flex;
1262
+ align-items: baseline;
1263
+ gap: 12px;
1264
+ }
1265
+ .stats-drawer-title {
1266
+ font-size: 15px;
1267
+ font-weight: 600;
1268
+ color: var(--text);
1269
+ margin: 0;
1270
+ }
1271
+ .stats-drawer-id {
1272
+ font-size: 11px;
1273
+ color: var(--muted);
1274
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1275
+ }
1276
+ .stats-drawer-close-btn {
1277
+ background: transparent;
1278
+ border: none;
1279
+ color: var(--muted);
1280
+ cursor: pointer;
1281
+ padding: 4px;
1282
+ display: inline-flex;
1283
+ align-items: center;
1284
+ justify-content: center;
1285
+ border-radius: var(--radius-sm);
1286
+ transition: all 0.1s ease;
1287
+ }
1288
+ .stats-drawer-close-btn:hover {
1289
+ color: var(--text);
1290
+ background: var(--surface-2);
1291
+ }
1292
+ .stats-drawer-body {
1293
+ flex: 1;
1294
+ overflow-y: auto;
1295
+ padding: 24px;
1296
+ }
1297
+ .stats-drawer-content {
1298
+ display: flex;
1299
+ flex-direction: column;
1300
+ gap: 24px;
1301
+ }
1302
+ .stats-drawer-status-card {
1303
+ background: var(--surface-2);
1304
+ border: 1px solid var(--border);
1305
+ border-radius: var(--radius-lg);
1306
+ padding: 16px;
1307
+ }
1308
+ .stats-drawer-status-row {
1309
+ display: flex;
1310
+ justify-content: space-between;
1311
+ align-items: flex-start;
1312
+ gap: 16px;
1313
+ }
1314
+ .stats-drawer-model {
1315
+ font-size: 16px;
1316
+ font-weight: 700;
1317
+ color: var(--text);
1318
+ }
1319
+ .stats-drawer-provider {
1320
+ font-size: 12px;
1321
+ color: var(--muted);
1322
+ margin-top: 2px;
1323
+ }
1324
+ .stats-drawer-error-block {
1325
+ margin-top: 14px;
1326
+ border-top: 1px solid var(--border);
1327
+ padding-top: 12px;
1328
+ }
1329
+ .stats-drawer-error-label {
1330
+ font-size: 11px;
1331
+ font-weight: 600;
1332
+ text-transform: uppercase;
1333
+ letter-spacing: 0.05em;
1334
+ color: var(--danger);
1335
+ margin-bottom: 4px;
1336
+ }
1337
+ .stats-drawer-error-text {
1338
+ font-size: 12px;
1339
+ color: var(--text);
1340
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1341
+ white-space: pre-wrap;
1342
+ word-break: break-all;
1343
+ }
1344
+ .stats-drawer-metrics-grid {
1345
+ display: grid;
1346
+ grid-template-columns: repeat(2, 1fr);
1347
+ gap: 12px;
1348
+ }
1349
+ .stats-drawer-metric-card {
1350
+ background: var(--surface);
1351
+ border: 1px solid var(--border);
1352
+ border-radius: var(--radius-lg);
1353
+ padding: 14px;
1354
+ display: flex;
1355
+ flex-direction: column;
1356
+ justify-content: center;
1357
+ }
1358
+ .stats-drawer-metric-label {
1359
+ display: flex;
1360
+ align-items: center;
1361
+ gap: 6px;
1362
+ font-size: 11px;
1363
+ font-weight: 600;
1364
+ text-transform: uppercase;
1365
+ letter-spacing: 0.05em;
1366
+ color: var(--muted);
1367
+ margin-bottom: 6px;
1368
+ }
1369
+ .stats-drawer-metric-icon {
1370
+ color: var(--dim);
1371
+ }
1372
+ .stats-drawer-metric-value {
1373
+ font-size: 16px;
1374
+ font-weight: 700;
1375
+ color: var(--text);
1376
+ font-variant-numeric: tabular-nums;
1377
+ }
1378
+ .stats-drawer-metric-sub {
1379
+ font-size: 11px;
1380
+ color: var(--muted);
1381
+ margin-top: 2px;
1382
+ font-variant-numeric: tabular-nums;
1383
+ }
1384
+ .stats-drawer-json-blocks {
1385
+ display: flex;
1386
+ flex-direction: column;
1387
+ gap: 16px;
1388
+ }
1389
+ .stats-json-block {
1390
+ border: 1px solid var(--border);
1391
+ border-radius: var(--radius-lg);
1392
+ background: var(--surface);
1393
+ overflow: hidden;
1394
+ }
1395
+ .stats-json-block-header {
1396
+ padding: 10px 16px;
1397
+ background: var(--surface-2);
1398
+ border-bottom: 1px solid var(--border);
1399
+ display: flex;
1400
+ justify-content: space-between;
1401
+ align-items: center;
1402
+ cursor: pointer;
1403
+ user-select: none;
1404
+ font-size: 12px;
1405
+ font-weight: 600;
1406
+ }
1407
+ .stats-json-block-header:hover {
1408
+ background: var(--border);
1409
+ }
1410
+ .stats-json-block-title {
1411
+ color: var(--text);
1412
+ }
1413
+ .stats-json-block-toggle-indicator {
1414
+ color: var(--muted);
1415
+ }
1416
+ .stats-json-block-content-wrapper {
1417
+ padding: 16px;
1418
+ background: var(--page);
1419
+ overflow-x: auto;
1420
+ }
1421
+ .stats-json-block-content {
1422
+ margin: 0;
1423
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1424
+ font-size: 12px;
1425
+ color: var(--text);
1426
+ line-height: 1.5;
1427
+ }
1428
+ .stats-skeleton {
1429
+ background: var(--surface-2);
1430
+ position: relative;
1431
+ overflow: hidden;
1432
+ border-radius: var(--radius-sm);
1433
+ }
1434
+ .stats-skeleton[data-variant="text"] {
1435
+ height: 14px;
1436
+ margin-top: 4px;
1437
+ margin-bottom: 4px;
1438
+ }
1439
+ .stats-skeleton[data-variant="circle"] {
1440
+ border-radius: 50%;
1441
+ }
1442
+ .stats-skeleton::after {
1443
+ content: "";
1444
+ position: absolute;
1445
+ inset: 0;
1446
+ transform: translateX(-100%);
1447
+ background: linear-gradient( 90deg, transparent 0%, rgba(255, 255, 255, 0.05) 50%, transparent 100% );
1448
+ animation: shimmer 1.5s infinite;
1449
+ }
1450
+ @media (prefers-color-scheme: light) {
1451
+ .stats-skeleton::after {
1452
+ background: linear-gradient( 90deg, transparent 0%, rgba(0, 0, 0, 0.03) 50%, transparent 100% );
1453
+ }
1454
+ }
1455
+ @keyframes shimmer {
1456
+ 100% {
1457
+ transform: translateX(100%);
1458
+ }
1459
+ }
1460
+ @media (prefers-reduced-motion: reduce) {
1461
+ .stats-skeleton::after {
1462
+ animation: none;
1463
+ }
1464
+ }
1465
+ .stats-boundary-skeleton {
1466
+ padding: 20px;
1467
+ border: 1px solid var(--border);
1468
+ border-radius: var(--radius-lg);
1469
+ background: var(--surface);
1470
+ }
1471
+ .stats-empty-state, .stats-error-state {
1472
+ padding: 48px 24px;
1473
+ display: flex;
1474
+ flex-direction: column;
1475
+ align-items: center;
1476
+ justify-content: center;
1477
+ text-align: center;
1478
+ background: var(--surface);
1479
+ border: 1px dashed var(--border);
1480
+ border-radius: var(--radius-lg);
1481
+ }
1482
+ .stats-empty-state-message {
1483
+ font-size: 13px;
1484
+ color: var(--muted);
1485
+ margin: 0;
1486
+ }
1487
+ .stats-error-state-content {
1488
+ max-width: 360px;
1489
+ }
1490
+ .stats-error-state-title {
1491
+ font-size: 14px;
1492
+ font-weight: 600;
1493
+ color: var(--text);
1494
+ margin: 0 0 8px 0;
1495
+ }
1496
+ .stats-error-state-message {
1497
+ font-size: 12px;
1498
+ color: var(--danger);
1499
+ margin: 0 0 16px 0;
1500
+ word-break: break-word;
1501
+ }
1502
+ .stats-error-state-btn {
1503
+ margin: 0 auto;
1504
+ }
1505
+ .stats-text-primary {
1506
+ color: var(--text);
1507
+ }
1508
+ .stats-text-secondary {
1509
+ color: var(--muted);
1510
+ }
1511
+ .stats-text-muted {
1512
+ color: var(--dim);
1513
+ }
1514
+ .stats-text-warning {
1515
+ color: var(--warning);
1516
+ }
1517
+ .stats-text-xs {
1518
+ font-size: 12px;
1519
+ }
1520
+ .stats-font-medium {
1521
+ font-weight: 500;
1522
+ }
1523
+ .stats-font-semibold {
1524
+ font-weight: 600;
1525
+ }
1526
+ * {
1527
+ scrollbar-width: thin;
1528
+ scrollbar-color: var(--border-strong) transparent;
1529
+ }
1530
+ *::-webkit-scrollbar {
1531
+ width: 10px;
1532
+ height: 10px;
1533
+ }
1534
+ *::-webkit-scrollbar-track {
1535
+ background: transparent;
1536
+ }
1537
+ *::-webkit-scrollbar-thumb {
1538
+ background: var(--border-strong);
1539
+ border: 2px solid transparent;
1540
+ background-clip: padding-box;
1541
+ border-radius: 999px;
1542
+ }
1543
+ *::-webkit-scrollbar-thumb:hover {
1544
+ background: var(--dim);
1545
+ border: 2px solid transparent;
1546
+ background-clip: padding-box;
1547
+ }
1548
+ *::-webkit-scrollbar-corner {
1549
+ background: transparent;
1550
+ }
1551
+ @media (prefers-reduced-motion: reduce) {
1552
+ .stats-button, .stats-table-tr-clickable, .stats-nav-rail-item, .stats-range-control-btn, .stats-segmented-control-btn {
1553
+ transition: none;
1554
+ }
1555
+ .stats-button:active:not(:disabled) {
1556
+ transform: none;
1557
+ }
1558
+ .stats-mobile-drawer, .stats-drawer {
1559
+ animation: none;
1560
+ }
1561
+ }
1562
+ .stats-logo-container {
1563
+ display: grid;
1564
+ grid-template-columns: auto 1fr;
1565
+ align-items: center;
1566
+ column-gap: 10px;
1567
+ }
1568
+ .stats-logo-container::before {
1569
+ content: "";
1570
+ grid-row: 1 / 3;
1571
+ width: 16px;
1572
+ height: 16px;
1573
+ border-radius: 4px;
1574
+ background: linear-gradient(135deg, #1d4ed8 0%, #2563eb 50%, #60a5fa 100%);
1575
+ }
1576
+ .stats-logo-text, .stats-logo-subtext {
1577
+ grid-column: 2;
1578
+ }
1579
+ .stats-json-actions {
1580
+ display: flex;
1581
+ align-items: center;
1582
+ gap: 12px;
1583
+ }
1584
+ .stats-json-copy-btn {
1585
+ display: inline-flex;
1586
+ align-items: center;
1587
+ gap: 5px;
1588
+ font-size: 11px;
1589
+ font-weight: 600;
1590
+ color: var(--muted);
1591
+ background: transparent;
1592
+ border: 1px solid var(--border);
1593
+ border-radius: var(--radius-sm);
1594
+ padding: 3px 8px;
1595
+ cursor: pointer;
1596
+ font-family: inherit;
1597
+ transition: color 0.12s ease, background 0.12s ease;
1598
+ }
1599
+ .stats-json-copy-btn:hover {
1600
+ color: var(--text);
1601
+ background: var(--surface-2);
1602
+ }
1603
+ .stats-empty-state-icon {
1604
+ color: var(--dim);
1605
+ margin-bottom: 12px;
1606
+ }
1607
+ @media (prefers-reduced-motion: reduce) {
1608
+ .stats-json-copy-btn {
1609
+ transition: none;
1610
+ }
1611
+ }
1612
+ .stats-theme-toggle {
1613
+ display: inline-flex;
1614
+ align-items: center;
1615
+ justify-content: center;
1616
+ width: 32px;
1617
+ height: 32px;
1618
+ flex-shrink: 0;
1619
+ border: 1px solid var(--border);
1620
+ border-radius: var(--radius-md);
1621
+ background: var(--surface);
1622
+ color: var(--muted);
1623
+ cursor: pointer;
1624
+ transition: color 0.14s ease, background 0.14s ease, border-color 0.14s ease;
1625
+ }
1626
+ .stats-theme-toggle:hover {
1627
+ color: var(--text);
1628
+ border-color: var(--border-strong);
1629
+ }
1630
+ @media (prefers-reduced-motion: reduce) {
1631
+ .stats-theme-toggle {
1632
+ transition: none;
1633
+ }
1634
+ }
1635
+ @property --tw-space-y-reverse {
1636
+ syntax: "*";
1637
+ inherits: false;
1638
+ initial-value: 0;
1639
+ }
1640
+ @property --tw-border-style {
1641
+ syntax: "*";
1642
+ inherits: false;
1643
+ initial-value: solid;
1644
+ }
1645
+ @property --tw-font-weight {
1646
+ syntax: "*";
1647
+ inherits: false;
1648
+ }
1649
+ @property --tw-tracking {
1650
+ syntax: "*";
1651
+ inherits: false;
1652
+ }
1653
+ @property --tw-ordinal {
1654
+ syntax: "*";
1655
+ inherits: false;
1656
+ }
1657
+ @property --tw-slashed-zero {
1658
+ syntax: "*";
1659
+ inherits: false;
1660
+ }
1661
+ @property --tw-numeric-figure {
1662
+ syntax: "*";
1663
+ inherits: false;
1664
+ }
1665
+ @property --tw-numeric-spacing {
1666
+ syntax: "*";
1667
+ inherits: false;
1668
+ }
1669
+ @property --tw-numeric-fraction {
1670
+ syntax: "*";
1671
+ inherits: false;
1672
+ }
1673
+ @keyframes spin {
1674
+ to {
1675
+ transform: rotate(360deg);
1676
+ }
1677
+ }
1678
+ @layer properties {
1679
+ @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
1680
+ *, ::before, ::after, ::backdrop {
1681
+ --tw-space-y-reverse: 0;
1682
+ --tw-border-style: solid;
1683
+ --tw-font-weight: initial;
1684
+ --tw-tracking: initial;
1685
+ --tw-ordinal: initial;
1686
+ --tw-slashed-zero: initial;
1687
+ --tw-numeric-figure: initial;
1688
+ --tw-numeric-spacing: initial;
1689
+ --tw-numeric-fraction: initial;
1690
+ }
1691
+ }
1692
+ }