@oh-my-pi/omp-stats 16.0.4 → 16.0.5

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