@oh-my-pi-zen/omp-stats 16.3.6-zen.1

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