@oh-my-pi/omp-stats 15.1.0 → 15.1.2

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 (32) hide show
  1. package/dist/client/index.css +1 -0
  2. package/dist/client/index.html +13 -0
  3. package/dist/client/index.js +257 -0
  4. package/dist/client/styles.css +1159 -0
  5. package/dist/types/aggregator.d.ts +65 -0
  6. package/dist/types/client/App.d.ts +1 -0
  7. package/dist/types/client/api.d.ts +10 -0
  8. package/dist/types/client/components/BehaviorChart.d.ts +6 -0
  9. package/dist/types/client/components/BehaviorModelsTable.d.ts +7 -0
  10. package/dist/types/client/components/BehaviorSummary.d.ts +7 -0
  11. package/dist/types/client/components/ChartsContainer.d.ts +6 -0
  12. package/dist/types/client/components/CostChart.d.ts +6 -0
  13. package/dist/types/client/components/CostSummary.d.ts +6 -0
  14. package/dist/types/client/components/Header.d.ts +12 -0
  15. package/dist/types/client/components/ModelsTable.d.ts +7 -0
  16. package/dist/types/client/components/RequestDetail.d.ts +6 -0
  17. package/dist/types/client/components/RequestList.d.ts +8 -0
  18. package/dist/types/client/components/StatsGrid.d.ts +6 -0
  19. package/dist/types/client/components/chart-shared.d.ts +192 -0
  20. package/dist/types/client/components/models-table-shared.d.ts +195 -0
  21. package/dist/types/client/index.d.ts +1 -0
  22. package/dist/types/client/types.d.ts +62 -0
  23. package/dist/types/client/useSystemTheme.d.ts +2 -0
  24. package/dist/types/db.d.ts +93 -0
  25. package/dist/types/index.d.ts +5 -0
  26. package/dist/types/parser.d.ts +40 -0
  27. package/dist/types/server.d.ts +7 -0
  28. package/dist/types/shared-types.d.ts +192 -0
  29. package/dist/types/sync-worker.d.ts +31 -0
  30. package/dist/types/types.d.ts +120 -0
  31. package/dist/types/user-metrics.d.ts +72 -0
  32. package/package.json +12 -10
@@ -0,0 +1,1159 @@
1
+ /*! tailwindcss v4.3.0 | 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
+ --color-white: #fff;
11
+ --spacing: 0.25rem;
12
+ --text-xs: 0.75rem;
13
+ --text-xs--line-height: calc(1 / 0.75);
14
+ --text-sm: 0.875rem;
15
+ --text-sm--line-height: calc(1.25 / 0.875);
16
+ --text-lg: 1.125rem;
17
+ --text-lg--line-height: calc(1.75 / 1.125);
18
+ --text-xl: 1.25rem;
19
+ --text-xl--line-height: calc(1.75 / 1.25);
20
+ --text-2xl: 1.5rem;
21
+ --text-2xl--line-height: calc(2 / 1.5);
22
+ --font-weight-medium: 500;
23
+ --font-weight-semibold: 600;
24
+ --font-weight-bold: 700;
25
+ --tracking-wide: 0.025em;
26
+ --tracking-wider: 0.05em;
27
+ --radius-sm: 0.25rem;
28
+ --radius-md: 0.375rem;
29
+ --radius-lg: 0.5rem;
30
+ --blur-sm: 8px;
31
+ --default-transition-duration: 150ms;
32
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
33
+ --default-font-family: var(--font-sans);
34
+ --default-mono-font-family: var(--font-mono);
35
+ }
36
+ }
37
+ @layer base {
38
+ *, ::after, ::before, ::backdrop, ::file-selector-button {
39
+ box-sizing: border-box;
40
+ margin: 0;
41
+ padding: 0;
42
+ border: 0 solid;
43
+ }
44
+ html, :host {
45
+ line-height: 1.5;
46
+ -webkit-text-size-adjust: 100%;
47
+ tab-size: 4;
48
+ 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");
49
+ font-feature-settings: var(--default-font-feature-settings, normal);
50
+ font-variation-settings: var(--default-font-variation-settings, normal);
51
+ -webkit-tap-highlight-color: transparent;
52
+ }
53
+ hr {
54
+ height: 0;
55
+ color: inherit;
56
+ border-top-width: 1px;
57
+ }
58
+ abbr:where([title]) {
59
+ -webkit-text-decoration: underline dotted;
60
+ text-decoration: underline dotted;
61
+ }
62
+ h1, h2, h3, h4, h5, h6 {
63
+ font-size: inherit;
64
+ font-weight: inherit;
65
+ }
66
+ a {
67
+ color: inherit;
68
+ -webkit-text-decoration: inherit;
69
+ text-decoration: inherit;
70
+ }
71
+ b, strong {
72
+ font-weight: bolder;
73
+ }
74
+ code, kbd, samp, pre {
75
+ font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
76
+ font-feature-settings: var(--default-mono-font-feature-settings, normal);
77
+ font-variation-settings: var(--default-mono-font-variation-settings, normal);
78
+ font-size: 1em;
79
+ }
80
+ small {
81
+ font-size: 80%;
82
+ }
83
+ sub, sup {
84
+ font-size: 75%;
85
+ line-height: 0;
86
+ position: relative;
87
+ vertical-align: baseline;
88
+ }
89
+ sub {
90
+ bottom: -0.25em;
91
+ }
92
+ sup {
93
+ top: -0.5em;
94
+ }
95
+ table {
96
+ text-indent: 0;
97
+ border-color: inherit;
98
+ border-collapse: collapse;
99
+ }
100
+ :-moz-focusring {
101
+ outline: auto;
102
+ }
103
+ progress {
104
+ vertical-align: baseline;
105
+ }
106
+ summary {
107
+ display: list-item;
108
+ }
109
+ ol, ul, menu {
110
+ list-style: none;
111
+ }
112
+ img, svg, video, canvas, audio, iframe, embed, object {
113
+ display: block;
114
+ vertical-align: middle;
115
+ }
116
+ img, video {
117
+ max-width: 100%;
118
+ height: auto;
119
+ }
120
+ button, input, select, optgroup, textarea, ::file-selector-button {
121
+ font: inherit;
122
+ font-feature-settings: inherit;
123
+ font-variation-settings: inherit;
124
+ letter-spacing: inherit;
125
+ color: inherit;
126
+ border-radius: 0;
127
+ background-color: transparent;
128
+ opacity: 1;
129
+ }
130
+ :where(select:is([multiple], [size])) optgroup {
131
+ font-weight: bolder;
132
+ }
133
+ :where(select:is([multiple], [size])) optgroup option {
134
+ padding-inline-start: 20px;
135
+ }
136
+ ::file-selector-button {
137
+ margin-inline-end: 4px;
138
+ }
139
+ ::placeholder {
140
+ opacity: 1;
141
+ }
142
+ @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
143
+ ::placeholder {
144
+ color: currentcolor;
145
+ @supports (color: color-mix(in lab, red, red)) {
146
+ color: color-mix(in oklab, currentcolor 50%, transparent);
147
+ }
148
+ }
149
+ }
150
+ textarea {
151
+ resize: vertical;
152
+ }
153
+ ::-webkit-search-decoration {
154
+ -webkit-appearance: none;
155
+ }
156
+ ::-webkit-date-and-time-value {
157
+ min-height: 1lh;
158
+ text-align: inherit;
159
+ }
160
+ ::-webkit-datetime-edit {
161
+ display: inline-flex;
162
+ }
163
+ ::-webkit-datetime-edit-fields-wrapper {
164
+ padding: 0;
165
+ }
166
+ ::-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 {
167
+ padding-block: 0;
168
+ }
169
+ ::-webkit-calendar-picker-indicator {
170
+ line-height: 1;
171
+ }
172
+ :-moz-ui-invalid {
173
+ box-shadow: none;
174
+ }
175
+ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
176
+ appearance: button;
177
+ }
178
+ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
179
+ height: auto;
180
+ }
181
+ [hidden]:where(:not([hidden="until-found"])) {
182
+ display: none !important;
183
+ }
184
+ }
185
+ @layer utilities {
186
+ .fixed {
187
+ position: fixed;
188
+ }
189
+ .sticky {
190
+ position: sticky;
191
+ }
192
+ .inset-0 {
193
+ inset: calc(var(--spacing) * 0);
194
+ }
195
+ .top-0 {
196
+ top: calc(var(--spacing) * 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
+ .mt-0\.5 {
208
+ margin-top: calc(var(--spacing) * 0.5);
209
+ }
210
+ .mt-1 {
211
+ margin-top: calc(var(--spacing) * 1);
212
+ }
213
+ .mb-1 {
214
+ margin-bottom: calc(var(--spacing) * 1);
215
+ }
216
+ .mb-2 {
217
+ margin-bottom: calc(var(--spacing) * 2);
218
+ }
219
+ .mb-3 {
220
+ margin-bottom: calc(var(--spacing) * 3);
221
+ }
222
+ .mb-4 {
223
+ margin-bottom: calc(var(--spacing) * 4);
224
+ }
225
+ .mb-8 {
226
+ margin-bottom: calc(var(--spacing) * 8);
227
+ }
228
+ .flex {
229
+ display: flex;
230
+ }
231
+ .grid {
232
+ display: grid;
233
+ }
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);
242
+ }
243
+ .h-10 {
244
+ height: calc(var(--spacing) * 10);
245
+ }
246
+ .h-\[200px\] {
247
+ height: 200px;
248
+ }
249
+ .h-\[280px\] {
250
+ height: 280px;
251
+ }
252
+ .h-\[calc\(100vh-140px\)\] {
253
+ height: calc(100vh - 140px);
254
+ }
255
+ .h-full {
256
+ height: 100%;
257
+ }
258
+ .max-h-\[calc\(100vh-300px\)\] {
259
+ max-height: calc(100vh - 300px);
260
+ }
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;
281
+ }
282
+ .w-full {
283
+ width: 100%;
284
+ }
285
+ .max-w-\[1600px\] {
286
+ max-width: 1600px;
287
+ }
288
+ .max-w-full {
289
+ max-width: 100%;
290
+ }
291
+ .flex-1 {
292
+ flex: 1;
293
+ }
294
+ .cursor-pointer {
295
+ cursor: pointer;
296
+ }
297
+ .grid-cols-1 {
298
+ grid-template-columns: repeat(1, minmax(0, 1fr));
299
+ }
300
+ .grid-cols-2 {
301
+ grid-template-columns: repeat(2, minmax(0, 1fr));
302
+ }
303
+ .flex-col {
304
+ flex-direction: column;
305
+ }
306
+ .flex-wrap {
307
+ flex-wrap: wrap;
308
+ }
309
+ .items-center {
310
+ align-items: center;
311
+ }
312
+ .justify-between {
313
+ justify-content: space-between;
314
+ }
315
+ .justify-center {
316
+ justify-content: center;
317
+ }
318
+ .justify-end {
319
+ justify-content: flex-end;
320
+ }
321
+ .gap-2 {
322
+ gap: calc(var(--spacing) * 2);
323
+ }
324
+ .gap-3 {
325
+ gap: calc(var(--spacing) * 3);
326
+ }
327
+ .gap-4 {
328
+ gap: calc(var(--spacing) * 4);
329
+ }
330
+ .gap-6 {
331
+ gap: calc(var(--spacing) * 6);
332
+ }
333
+ .space-y-1 {
334
+ :where(& > :not(:last-child)) {
335
+ --tw-space-y-reverse: 0;
336
+ margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));
337
+ margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)));
338
+ }
339
+ }
340
+ .space-y-4 {
341
+ :where(& > :not(:last-child)) {
342
+ --tw-space-y-reverse: 0;
343
+ margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));
344
+ margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
345
+ }
346
+ }
347
+ .space-y-6 {
348
+ :where(& > :not(:last-child)) {
349
+ --tw-space-y-reverse: 0;
350
+ margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));
351
+ margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
352
+ }
353
+ }
354
+ .truncate {
355
+ overflow: hidden;
356
+ text-overflow: ellipsis;
357
+ white-space: nowrap;
358
+ }
359
+ .overflow-auto {
360
+ overflow: auto;
361
+ }
362
+ .overflow-hidden {
363
+ overflow: hidden;
364
+ }
365
+ .overflow-x-auto {
366
+ overflow-x: auto;
367
+ }
368
+ .overflow-y-auto {
369
+ overflow-y: auto;
370
+ }
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;
387
+ }
388
+ .border-t {
389
+ border-top-style: var(--tw-border-style);
390
+ border-top-width: 1px;
391
+ }
392
+ .border-b {
393
+ border-bottom-style: var(--tw-border-style);
394
+ border-bottom-width: 1px;
395
+ }
396
+ .border-l {
397
+ border-left-style: var(--tw-border-style);
398
+ border-left-width: 1px;
399
+ }
400
+ .border-none {
401
+ --tw-border-style: none;
402
+ border-style: none;
403
+ }
404
+ .border-\[var\(--border-default\)\] {
405
+ border-color: var(--border-default);
406
+ }
407
+ .border-\[var\(--border-subtle\)\] {
408
+ border-color: var(--border-subtle);
409
+ }
410
+ .border-t-\[var\(--accent-cyan\)\] {
411
+ border-top-color: var(--accent-cyan);
412
+ }
413
+ .bg-\[var\(--bg-elevated\)\] {
414
+ background-color: var(--bg-elevated);
415
+ }
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
+ .bg-transparent {
432
+ background-color: transparent;
433
+ }
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: calc(var(--spacing) * 1);
465
+ }
466
+ .p-2 {
467
+ padding: calc(var(--spacing) * 2);
468
+ }
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
+ .px-4 {
479
+ padding-inline: calc(var(--spacing) * 4);
480
+ }
481
+ .px-5 {
482
+ padding-inline: calc(var(--spacing) * 5);
483
+ }
484
+ .px-6 {
485
+ padding-inline: calc(var(--spacing) * 6);
486
+ }
487
+ .px-8 {
488
+ padding-inline: calc(var(--spacing) * 8);
489
+ }
490
+ .py-3 {
491
+ padding-block: calc(var(--spacing) * 3);
492
+ }
493
+ .py-4 {
494
+ padding-block: calc(var(--spacing) * 4);
495
+ }
496
+ .py-6 {
497
+ padding-block: calc(var(--spacing) * 6);
498
+ }
499
+ .py-8 {
500
+ padding-block: calc(var(--spacing) * 8);
501
+ }
502
+ .py-12 {
503
+ padding-block: calc(var(--spacing) * 12);
504
+ }
505
+ .pb-6 {
506
+ padding-bottom: calc(var(--spacing) * 6);
507
+ }
508
+ .text-center {
509
+ text-align: center;
510
+ }
511
+ .text-left {
512
+ text-align: left;
513
+ }
514
+ .text-right {
515
+ text-align: right;
516
+ }
517
+ .font-mono {
518
+ font-family: var(--font-mono);
519
+ }
520
+ .text-2xl {
521
+ font-size: var(--text-2xl);
522
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
523
+ }
524
+ .text-lg {
525
+ font-size: var(--text-lg);
526
+ line-height: var(--tw-leading, var(--text-lg--line-height));
527
+ }
528
+ .text-sm {
529
+ font-size: var(--text-sm);
530
+ line-height: var(--tw-leading, var(--text-sm--line-height));
531
+ }
532
+ .text-xl {
533
+ font-size: var(--text-xl);
534
+ line-height: var(--tw-leading, var(--text-xl--line-height));
535
+ }
536
+ .text-xs {
537
+ font-size: var(--text-xs);
538
+ line-height: var(--tw-leading, var(--text-xs--line-height));
539
+ }
540
+ .font-bold {
541
+ --tw-font-weight: var(--font-weight-bold);
542
+ font-weight: var(--font-weight-bold);
543
+ }
544
+ .font-medium {
545
+ --tw-font-weight: var(--font-weight-medium);
546
+ font-weight: var(--font-weight-medium);
547
+ }
548
+ .font-semibold {
549
+ --tw-font-weight: var(--font-weight-semibold);
550
+ font-weight: var(--font-weight-semibold);
551
+ }
552
+ .tracking-wide {
553
+ --tw-tracking: var(--tracking-wide);
554
+ letter-spacing: var(--tracking-wide);
555
+ }
556
+ .tracking-wider {
557
+ --tw-tracking: var(--tracking-wider);
558
+ letter-spacing: var(--tracking-wider);
559
+ }
560
+ .text-\[var\(--accent-cyan\)\] {
561
+ color: var(--accent-cyan);
562
+ }
563
+ .text-\[var\(--accent-green\)\] {
564
+ color: var(--accent-green);
565
+ }
566
+ .text-\[var\(--accent-red\)\] {
567
+ color: var(--accent-red);
568
+ }
569
+ .text-\[var\(--text-muted\)\] {
570
+ color: var(--text-muted);
571
+ }
572
+ .text-\[var\(--text-primary\)\] {
573
+ color: var(--text-primary);
574
+ }
575
+ .text-\[var\(--text-secondary\)\] {
576
+ color: var(--text-secondary);
577
+ }
578
+ .text-white {
579
+ color: var(--color-white);
580
+ }
581
+ .uppercase {
582
+ text-transform: uppercase;
583
+ }
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
+ .transition-colors {
599
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
600
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
601
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
602
+ }
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
+ .hover\:bg-\[var\(--bg-hover\)\] {
625
+ &:hover {
626
+ @media (hover: hover) {
627
+ background-color: var(--bg-hover);
628
+ }
629
+ }
630
+ }
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) {
640
+ grid-template-columns: repeat(3, minmax(0, 1fr));
641
+ }
642
+ }
643
+ .sm\:grid-cols-6 {
644
+ @media (width >= 40rem) {
645
+ grid-template-columns: repeat(6, minmax(0, 1fr));
646
+ }
647
+ }
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 {
659
+ @media (width >= 64rem) {
660
+ grid-template-columns: repeat(2, minmax(0, 1fr));
661
+ }
662
+ }
663
+ .lg\:grid-cols-3 {
664
+ @media (width >= 64rem) {
665
+ grid-template-columns: repeat(3, minmax(0, 1fr));
666
+ }
667
+ }
668
+ .xl\:grid-cols-9 {
669
+ @media (width >= 80rem) {
670
+ grid-template-columns: repeat(9, minmax(0, 1fr));
671
+ }
672
+ }
673
+ }
674
+ :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);
721
+ }
722
+ }
723
+ @layer base {
724
+ * {
725
+ box-sizing: border-box;
726
+ }
727
+ html {
728
+ -webkit-font-smoothing: antialiased;
729
+ -moz-osx-font-smoothing: grayscale;
730
+ }
731
+ 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);
735
+ margin: 0;
736
+ min-height: 100vh;
737
+ }
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);
751
+ }
752
+ }
753
+ @layer components {
754
+ .surface {
755
+ background: var(--bg-surface);
756
+ border: 1px solid var(--border-subtle);
757
+ border-radius: var(--radius-lg);
758
+ }
759
+ .surface-elevated {
760
+ background: var(--bg-elevated);
761
+ border: 1px solid var(--border-default);
762
+ border-radius: var(--radius-lg);
763
+ }
764
+ .btn {
765
+ display: inline-flex;
766
+ align-items: center;
767
+ 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
+ }
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);
842
+ }
843
+ .badge-error {
844
+ background: rgba(248, 113, 113, 0.15);
845
+ color: var(--accent-red);
846
+ }
847
+ .badge-info {
848
+ background: rgba(34, 211, 238, 0.15);
849
+ color: var(--accent-cyan);
850
+ }
851
+ .badge-warning {
852
+ background: rgba(251, 191, 36, 0.15);
853
+ color: var(--accent-amber);
854
+ }
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);
861
+ }
862
+ .table-row {
863
+ transition: background 0.15s ease;
864
+ }
865
+ .table-row:hover {
866
+ background: var(--bg-hover);
867
+ }
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;
873
+ }
874
+ .gradient-border {
875
+ position: relative;
876
+ }
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;
889
+ }
890
+ .glow-pink {
891
+ box-shadow: 0 0 30px var(--accent-pink-glow);
892
+ }
893
+ .glow-cyan {
894
+ box-shadow: 0 0 30px var(--accent-cyan-glow);
895
+ }
896
+ }
897
+ @layer utilities {
898
+ .text-balance {
899
+ text-wrap: balance;
900
+ }
901
+ .animate-fade-in {
902
+ animation: fadeIn 0.3s ease-out;
903
+ }
904
+ .animate-slide-up {
905
+ animation: slideUp 0.3s ease-out;
906
+ }
907
+ @keyframes fadeIn {
908
+ from {
909
+ opacity: 0;
910
+ }
911
+ to {
912
+ opacity: 1;
913
+ }
914
+ }
915
+ @keyframes slideUp {
916
+ from {
917
+ opacity: 0;
918
+ transform: translateY(10px);
919
+ }
920
+ to {
921
+ opacity: 1;
922
+ transform: translateY(0);
923
+ }
924
+ }
925
+ .spin {
926
+ animation: spin 1s linear infinite;
927
+ }
928
+ @keyframes spin {
929
+ to {
930
+ transform: rotate(360deg);
931
+ }
932
+ }
933
+ }
934
+ @property --tw-space-y-reverse {
935
+ syntax: "*";
936
+ inherits: false;
937
+ initial-value: 0;
938
+ }
939
+ @property --tw-border-style {
940
+ syntax: "*";
941
+ inherits: false;
942
+ initial-value: solid;
943
+ }
944
+ @property --tw-gradient-position {
945
+ syntax: "*";
946
+ inherits: false;
947
+ }
948
+ @property --tw-gradient-from {
949
+ syntax: "<color>";
950
+ inherits: false;
951
+ initial-value: #0000;
952
+ }
953
+ @property --tw-gradient-via {
954
+ syntax: "<color>";
955
+ inherits: false;
956
+ initial-value: #0000;
957
+ }
958
+ @property --tw-gradient-to {
959
+ syntax: "<color>";
960
+ inherits: false;
961
+ initial-value: #0000;
962
+ }
963
+ @property --tw-gradient-stops {
964
+ syntax: "*";
965
+ inherits: false;
966
+ }
967
+ @property --tw-gradient-via-stops {
968
+ syntax: "*";
969
+ inherits: false;
970
+ }
971
+ @property --tw-gradient-from-position {
972
+ syntax: "<length-percentage>";
973
+ inherits: false;
974
+ initial-value: 0%;
975
+ }
976
+ @property --tw-gradient-via-position {
977
+ syntax: "<length-percentage>";
978
+ inherits: false;
979
+ initial-value: 50%;
980
+ }
981
+ @property --tw-gradient-to-position {
982
+ syntax: "<length-percentage>";
983
+ inherits: false;
984
+ initial-value: 100%;
985
+ }
986
+ @property --tw-font-weight {
987
+ syntax: "*";
988
+ inherits: false;
989
+ }
990
+ @property --tw-tracking {
991
+ syntax: "*";
992
+ inherits: false;
993
+ }
994
+ @property --tw-shadow {
995
+ syntax: "*";
996
+ inherits: false;
997
+ initial-value: 0 0 #0000;
998
+ }
999
+ @property --tw-shadow-color {
1000
+ syntax: "*";
1001
+ inherits: false;
1002
+ }
1003
+ @property --tw-shadow-alpha {
1004
+ syntax: "<percentage>";
1005
+ inherits: false;
1006
+ initial-value: 100%;
1007
+ }
1008
+ @property --tw-inset-shadow {
1009
+ syntax: "*";
1010
+ inherits: false;
1011
+ initial-value: 0 0 #0000;
1012
+ }
1013
+ @property --tw-inset-shadow-color {
1014
+ syntax: "*";
1015
+ inherits: false;
1016
+ }
1017
+ @property --tw-inset-shadow-alpha {
1018
+ syntax: "<percentage>";
1019
+ inherits: false;
1020
+ initial-value: 100%;
1021
+ }
1022
+ @property --tw-ring-color {
1023
+ syntax: "*";
1024
+ inherits: false;
1025
+ }
1026
+ @property --tw-ring-shadow {
1027
+ syntax: "*";
1028
+ inherits: false;
1029
+ initial-value: 0 0 #0000;
1030
+ }
1031
+ @property --tw-inset-ring-color {
1032
+ syntax: "*";
1033
+ inherits: false;
1034
+ }
1035
+ @property --tw-inset-ring-shadow {
1036
+ syntax: "*";
1037
+ inherits: false;
1038
+ initial-value: 0 0 #0000;
1039
+ }
1040
+ @property --tw-ring-inset {
1041
+ syntax: "*";
1042
+ inherits: false;
1043
+ }
1044
+ @property --tw-ring-offset-width {
1045
+ syntax: "<length>";
1046
+ inherits: false;
1047
+ initial-value: 0px;
1048
+ }
1049
+ @property --tw-ring-offset-color {
1050
+ syntax: "*";
1051
+ inherits: false;
1052
+ initial-value: #fff;
1053
+ }
1054
+ @property --tw-ring-offset-shadow {
1055
+ syntax: "*";
1056
+ inherits: false;
1057
+ initial-value: 0 0 #0000;
1058
+ }
1059
+ @property --tw-backdrop-blur {
1060
+ syntax: "*";
1061
+ inherits: false;
1062
+ }
1063
+ @property --tw-backdrop-brightness {
1064
+ syntax: "*";
1065
+ inherits: false;
1066
+ }
1067
+ @property --tw-backdrop-contrast {
1068
+ syntax: "*";
1069
+ inherits: false;
1070
+ }
1071
+ @property --tw-backdrop-grayscale {
1072
+ syntax: "*";
1073
+ inherits: false;
1074
+ }
1075
+ @property --tw-backdrop-hue-rotate {
1076
+ syntax: "*";
1077
+ inherits: false;
1078
+ }
1079
+ @property --tw-backdrop-invert {
1080
+ syntax: "*";
1081
+ inherits: false;
1082
+ }
1083
+ @property --tw-backdrop-opacity {
1084
+ syntax: "*";
1085
+ inherits: false;
1086
+ }
1087
+ @property --tw-backdrop-saturate {
1088
+ syntax: "*";
1089
+ inherits: false;
1090
+ }
1091
+ @property --tw-backdrop-sepia {
1092
+ syntax: "*";
1093
+ inherits: false;
1094
+ }
1095
+ @property --tw-scale-x {
1096
+ syntax: "*";
1097
+ inherits: false;
1098
+ initial-value: 1;
1099
+ }
1100
+ @property --tw-scale-y {
1101
+ syntax: "*";
1102
+ inherits: false;
1103
+ initial-value: 1;
1104
+ }
1105
+ @property --tw-scale-z {
1106
+ syntax: "*";
1107
+ inherits: false;
1108
+ initial-value: 1;
1109
+ }
1110
+ @keyframes spin {
1111
+ to {
1112
+ transform: rotate(360deg);
1113
+ }
1114
+ }
1115
+ @layer properties {
1116
+ @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
1117
+ *, ::before, ::after, ::backdrop {
1118
+ --tw-space-y-reverse: 0;
1119
+ --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
+ --tw-font-weight: initial;
1130
+ --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
+ }
1158
+ }
1159
+ }