solid_queue_dashboard 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +1 -1
  4. data/Procfile.dev +2 -0
  5. data/README.md +72 -21
  6. data/app/assets/javascripts/solid_queue_dashboard/alpine.js +5 -0
  7. data/app/assets/javascripts/solid_queue_dashboard/application.js +46 -0
  8. data/app/assets/stylesheets/solid_queue_dashboard/application.css +2062 -0
  9. data/app/assets/stylesheets/solid_queue_dashboard/tailwind.css +554 -0
  10. data/app/controllers/solid_queue_dashboard/appearance_controller.rb +8 -0
  11. data/app/controllers/solid_queue_dashboard/application_controller.rb +7 -0
  12. data/app/controllers/solid_queue_dashboard/dashboard_controller.rb +8 -0
  13. data/app/controllers/solid_queue_dashboard/jobs_controller.rb +42 -0
  14. data/app/controllers/solid_queue_dashboard/processes_controller.rb +28 -0
  15. data/app/controllers/solid_queue_dashboard/recurring_tasks_controller.rb +30 -0
  16. data/app/helpers/solid_queue_dashboard/appearance_helper.rb +7 -0
  17. data/app/helpers/solid_queue_dashboard/application_helper.rb +7 -0
  18. data/app/helpers/solid_queue_dashboard/icons_helper.rb +231 -0
  19. data/app/helpers/solid_queue_dashboard/jobs_helper.rb +51 -0
  20. data/app/helpers/solid_queue_dashboard/pagination_helper.rb +38 -0
  21. data/app/helpers/solid_queue_dashboard/processes_helper.rb +35 -0
  22. data/app/helpers/solid_queue_dashboard/recurring_tasks_helper.rb +33 -0
  23. data/app/views/layouts/solid_queue_dashboard/application.html.erb +21 -0
  24. data/app/views/solid_queue_dashboard/application/_flash_messages.html.erb +38 -0
  25. data/app/views/solid_queue_dashboard/application/_footer.html.erb +11 -0
  26. data/app/views/solid_queue_dashboard/application/_navbar.html.erb +50 -0
  27. data/app/views/solid_queue_dashboard/application/_pagination.html.erb +19 -0
  28. data/app/views/solid_queue_dashboard/dashboard/index.html.erb +41 -0
  29. data/app/views/solid_queue_dashboard/jobs/_filters.html.erb +87 -0
  30. data/app/views/solid_queue_dashboard/jobs/_table.html.erb +19 -0
  31. data/app/views/solid_queue_dashboard/jobs/_table_row.html.erb +82 -0
  32. data/app/views/solid_queue_dashboard/jobs/index.html.erb +57 -0
  33. data/app/views/solid_queue_dashboard/jobs/show.html.erb +192 -0
  34. data/app/views/solid_queue_dashboard/processes/_filters.html.erb +64 -0
  35. data/app/views/solid_queue_dashboard/processes/_table.html.erb +18 -0
  36. data/app/views/solid_queue_dashboard/processes/_table_row.html.erb +32 -0
  37. data/app/views/solid_queue_dashboard/processes/index.html.erb +27 -0
  38. data/app/views/solid_queue_dashboard/processes/show.html.erb +79 -0
  39. data/app/views/solid_queue_dashboard/recurring_tasks/_filters.html.erb +26 -0
  40. data/app/views/solid_queue_dashboard/recurring_tasks/_table.html.erb +19 -0
  41. data/app/views/solid_queue_dashboard/recurring_tasks/_table_row.html.erb +31 -0
  42. data/app/views/solid_queue_dashboard/recurring_tasks/index.html.erb +21 -0
  43. data/app/views/solid_queue_dashboard/recurring_tasks/show.html.erb +129 -0
  44. data/bun.lockb +0 -0
  45. data/config/routes.rb +18 -0
  46. data/lib/solid_queue_dashboard/configuration.rb +17 -0
  47. data/lib/solid_queue_dashboard/decorators/job_decorator.rb +63 -0
  48. data/lib/solid_queue_dashboard/decorators/jobs_decorator.rb +74 -0
  49. data/lib/solid_queue_dashboard/decorators/process_decorator.rb +13 -0
  50. data/lib/solid_queue_dashboard/decorators/processes_decorator.rb +15 -0
  51. data/lib/solid_queue_dashboard/decorators/recurring_task_decorator.rb +22 -0
  52. data/lib/solid_queue_dashboard/decorators/recurring_tasks_decorator.rb +26 -0
  53. data/lib/solid_queue_dashboard/engine.rb +13 -0
  54. data/lib/solid_queue_dashboard/job.rb +26 -0
  55. data/lib/solid_queue_dashboard/process.rb +24 -0
  56. data/lib/solid_queue_dashboard/recurring_task.rb +14 -0
  57. data/lib/solid_queue_dashboard/version.rb +1 -1
  58. data/lib/solid_queue_dashboard.rb +39 -1
  59. data/package.json +13 -0
  60. data/tailwind.config.js +83 -0
  61. metadata +72 -3
@@ -0,0 +1,2062 @@
1
+ *, ::before, ::after {
2
+ --tw-border-spacing-x: 0;
3
+ --tw-border-spacing-y: 0;
4
+ --tw-translate-x: 0;
5
+ --tw-translate-y: 0;
6
+ --tw-rotate: 0;
7
+ --tw-skew-x: 0;
8
+ --tw-skew-y: 0;
9
+ --tw-scale-x: 1;
10
+ --tw-scale-y: 1;
11
+ --tw-pan-x: ;
12
+ --tw-pan-y: ;
13
+ --tw-pinch-zoom: ;
14
+ --tw-scroll-snap-strictness: proximity;
15
+ --tw-gradient-from-position: ;
16
+ --tw-gradient-via-position: ;
17
+ --tw-gradient-to-position: ;
18
+ --tw-ordinal: ;
19
+ --tw-slashed-zero: ;
20
+ --tw-numeric-figure: ;
21
+ --tw-numeric-spacing: ;
22
+ --tw-numeric-fraction: ;
23
+ --tw-ring-inset: ;
24
+ --tw-ring-offset-width: 0px;
25
+ --tw-ring-offset-color: #fff;
26
+ --tw-ring-color: rgb(59 130 246 / 0.5);
27
+ --tw-ring-offset-shadow: 0 0 #0000;
28
+ --tw-ring-shadow: 0 0 #0000;
29
+ --tw-shadow: 0 0 #0000;
30
+ --tw-shadow-colored: 0 0 #0000;
31
+ --tw-blur: ;
32
+ --tw-brightness: ;
33
+ --tw-contrast: ;
34
+ --tw-grayscale: ;
35
+ --tw-hue-rotate: ;
36
+ --tw-invert: ;
37
+ --tw-saturate: ;
38
+ --tw-sepia: ;
39
+ --tw-drop-shadow: ;
40
+ --tw-backdrop-blur: ;
41
+ --tw-backdrop-brightness: ;
42
+ --tw-backdrop-contrast: ;
43
+ --tw-backdrop-grayscale: ;
44
+ --tw-backdrop-hue-rotate: ;
45
+ --tw-backdrop-invert: ;
46
+ --tw-backdrop-opacity: ;
47
+ --tw-backdrop-saturate: ;
48
+ --tw-backdrop-sepia: ;
49
+ --tw-contain-size: ;
50
+ --tw-contain-layout: ;
51
+ --tw-contain-paint: ;
52
+ --tw-contain-style: ;
53
+ }
54
+
55
+ ::backdrop {
56
+ --tw-border-spacing-x: 0;
57
+ --tw-border-spacing-y: 0;
58
+ --tw-translate-x: 0;
59
+ --tw-translate-y: 0;
60
+ --tw-rotate: 0;
61
+ --tw-skew-x: 0;
62
+ --tw-skew-y: 0;
63
+ --tw-scale-x: 1;
64
+ --tw-scale-y: 1;
65
+ --tw-pan-x: ;
66
+ --tw-pan-y: ;
67
+ --tw-pinch-zoom: ;
68
+ --tw-scroll-snap-strictness: proximity;
69
+ --tw-gradient-from-position: ;
70
+ --tw-gradient-via-position: ;
71
+ --tw-gradient-to-position: ;
72
+ --tw-ordinal: ;
73
+ --tw-slashed-zero: ;
74
+ --tw-numeric-figure: ;
75
+ --tw-numeric-spacing: ;
76
+ --tw-numeric-fraction: ;
77
+ --tw-ring-inset: ;
78
+ --tw-ring-offset-width: 0px;
79
+ --tw-ring-offset-color: #fff;
80
+ --tw-ring-color: rgb(59 130 246 / 0.5);
81
+ --tw-ring-offset-shadow: 0 0 #0000;
82
+ --tw-ring-shadow: 0 0 #0000;
83
+ --tw-shadow: 0 0 #0000;
84
+ --tw-shadow-colored: 0 0 #0000;
85
+ --tw-blur: ;
86
+ --tw-brightness: ;
87
+ --tw-contrast: ;
88
+ --tw-grayscale: ;
89
+ --tw-hue-rotate: ;
90
+ --tw-invert: ;
91
+ --tw-saturate: ;
92
+ --tw-sepia: ;
93
+ --tw-drop-shadow: ;
94
+ --tw-backdrop-blur: ;
95
+ --tw-backdrop-brightness: ;
96
+ --tw-backdrop-contrast: ;
97
+ --tw-backdrop-grayscale: ;
98
+ --tw-backdrop-hue-rotate: ;
99
+ --tw-backdrop-invert: ;
100
+ --tw-backdrop-opacity: ;
101
+ --tw-backdrop-saturate: ;
102
+ --tw-backdrop-sepia: ;
103
+ --tw-contain-size: ;
104
+ --tw-contain-layout: ;
105
+ --tw-contain-paint: ;
106
+ --tw-contain-style: ;
107
+ }
108
+
109
+ /*
110
+ ! tailwindcss v3.4.13 | MIT License | https://tailwindcss.com
111
+ */
112
+
113
+ /*
114
+ 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
115
+ 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
116
+ */
117
+
118
+ *,
119
+ ::before,
120
+ ::after {
121
+ box-sizing: border-box;
122
+ /* 1 */
123
+ border-width: 0;
124
+ /* 2 */
125
+ border-style: solid;
126
+ /* 2 */
127
+ border-color: #e5e7eb;
128
+ /* 2 */
129
+ }
130
+
131
+ ::before,
132
+ ::after {
133
+ --tw-content: '';
134
+ }
135
+
136
+ /*
137
+ 1. Use a consistent sensible line-height in all browsers.
138
+ 2. Prevent adjustments of font size after orientation changes in iOS.
139
+ 3. Use a more readable tab size.
140
+ 4. Use the user's configured `sans` font-family by default.
141
+ 5. Use the user's configured `sans` font-feature-settings by default.
142
+ 6. Use the user's configured `sans` font-variation-settings by default.
143
+ 7. Disable tap highlights on iOS
144
+ */
145
+
146
+ html,
147
+ :host {
148
+ line-height: 1.5;
149
+ /* 1 */
150
+ -webkit-text-size-adjust: 100%;
151
+ /* 2 */
152
+ -moz-tab-size: 4;
153
+ /* 3 */
154
+ -o-tab-size: 4;
155
+ tab-size: 4;
156
+ /* 3 */
157
+ font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
158
+ /* 4 */
159
+ font-feature-settings: normal;
160
+ /* 5 */
161
+ font-variation-settings: normal;
162
+ /* 6 */
163
+ -webkit-tap-highlight-color: transparent;
164
+ /* 7 */
165
+ }
166
+
167
+ /*
168
+ 1. Remove the margin in all browsers.
169
+ 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
170
+ */
171
+
172
+ body {
173
+ margin: 0;
174
+ /* 1 */
175
+ line-height: inherit;
176
+ /* 2 */
177
+ }
178
+
179
+ /*
180
+ 1. Add the correct height in Firefox.
181
+ 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
182
+ 3. Ensure horizontal rules are visible by default.
183
+ */
184
+
185
+ hr {
186
+ height: 0;
187
+ /* 1 */
188
+ color: inherit;
189
+ /* 2 */
190
+ border-top-width: 1px;
191
+ /* 3 */
192
+ }
193
+
194
+ /*
195
+ Add the correct text decoration in Chrome, Edge, and Safari.
196
+ */
197
+
198
+ abbr:where([title]) {
199
+ -webkit-text-decoration: underline dotted;
200
+ text-decoration: underline dotted;
201
+ }
202
+
203
+ /*
204
+ Remove the default font size and weight for headings.
205
+ */
206
+
207
+ h1,
208
+ h2,
209
+ h3,
210
+ h4,
211
+ h5,
212
+ h6 {
213
+ font-size: inherit;
214
+ font-weight: inherit;
215
+ }
216
+
217
+ /*
218
+ Reset links to optimize for opt-in styling instead of opt-out.
219
+ */
220
+
221
+ a {
222
+ color: inherit;
223
+ text-decoration: inherit;
224
+ }
225
+
226
+ /*
227
+ Add the correct font weight in Edge and Safari.
228
+ */
229
+
230
+ b,
231
+ strong {
232
+ font-weight: bolder;
233
+ }
234
+
235
+ /*
236
+ 1. Use the user's configured `mono` font-family by default.
237
+ 2. Use the user's configured `mono` font-feature-settings by default.
238
+ 3. Use the user's configured `mono` font-variation-settings by default.
239
+ 4. Correct the odd `em` font sizing in all browsers.
240
+ */
241
+
242
+ code,
243
+ kbd,
244
+ samp,
245
+ pre {
246
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
247
+ /* 1 */
248
+ font-feature-settings: normal;
249
+ /* 2 */
250
+ font-variation-settings: normal;
251
+ /* 3 */
252
+ font-size: 1em;
253
+ /* 4 */
254
+ }
255
+
256
+ /*
257
+ Add the correct font size in all browsers.
258
+ */
259
+
260
+ small {
261
+ font-size: 80%;
262
+ }
263
+
264
+ /*
265
+ Prevent `sub` and `sup` elements from affecting the line height in all browsers.
266
+ */
267
+
268
+ sub,
269
+ sup {
270
+ font-size: 75%;
271
+ line-height: 0;
272
+ position: relative;
273
+ vertical-align: baseline;
274
+ }
275
+
276
+ sub {
277
+ bottom: -0.25em;
278
+ }
279
+
280
+ sup {
281
+ top: -0.5em;
282
+ }
283
+
284
+ /*
285
+ 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
286
+ 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
287
+ 3. Remove gaps between table borders by default.
288
+ */
289
+
290
+ table {
291
+ text-indent: 0;
292
+ /* 1 */
293
+ border-color: inherit;
294
+ /* 2 */
295
+ border-collapse: collapse;
296
+ /* 3 */
297
+ }
298
+
299
+ /*
300
+ 1. Change the font styles in all browsers.
301
+ 2. Remove the margin in Firefox and Safari.
302
+ 3. Remove default padding in all browsers.
303
+ */
304
+
305
+ button,
306
+ input,
307
+ optgroup,
308
+ select,
309
+ textarea {
310
+ font-family: inherit;
311
+ /* 1 */
312
+ font-feature-settings: inherit;
313
+ /* 1 */
314
+ font-variation-settings: inherit;
315
+ /* 1 */
316
+ font-size: 100%;
317
+ /* 1 */
318
+ font-weight: inherit;
319
+ /* 1 */
320
+ line-height: inherit;
321
+ /* 1 */
322
+ letter-spacing: inherit;
323
+ /* 1 */
324
+ color: inherit;
325
+ /* 1 */
326
+ margin: 0;
327
+ /* 2 */
328
+ padding: 0;
329
+ /* 3 */
330
+ }
331
+
332
+ /*
333
+ Remove the inheritance of text transform in Edge and Firefox.
334
+ */
335
+
336
+ button,
337
+ select {
338
+ text-transform: none;
339
+ }
340
+
341
+ /*
342
+ 1. Correct the inability to style clickable types in iOS and Safari.
343
+ 2. Remove default button styles.
344
+ */
345
+
346
+ button,
347
+ input:where([type='button']),
348
+ input:where([type='reset']),
349
+ input:where([type='submit']) {
350
+ -webkit-appearance: button;
351
+ /* 1 */
352
+ background-color: transparent;
353
+ /* 2 */
354
+ background-image: none;
355
+ /* 2 */
356
+ }
357
+
358
+ /*
359
+ Use the modern Firefox focus style for all focusable elements.
360
+ */
361
+
362
+ :-moz-focusring {
363
+ outline: auto;
364
+ }
365
+
366
+ /*
367
+ Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
368
+ */
369
+
370
+ :-moz-ui-invalid {
371
+ box-shadow: none;
372
+ }
373
+
374
+ /*
375
+ Add the correct vertical alignment in Chrome and Firefox.
376
+ */
377
+
378
+ progress {
379
+ vertical-align: baseline;
380
+ }
381
+
382
+ /*
383
+ Correct the cursor style of increment and decrement buttons in Safari.
384
+ */
385
+
386
+ ::-webkit-inner-spin-button,
387
+ ::-webkit-outer-spin-button {
388
+ height: auto;
389
+ }
390
+
391
+ /*
392
+ 1. Correct the odd appearance in Chrome and Safari.
393
+ 2. Correct the outline style in Safari.
394
+ */
395
+
396
+ [type='search'] {
397
+ -webkit-appearance: textfield;
398
+ /* 1 */
399
+ outline-offset: -2px;
400
+ /* 2 */
401
+ }
402
+
403
+ /*
404
+ Remove the inner padding in Chrome and Safari on macOS.
405
+ */
406
+
407
+ ::-webkit-search-decoration {
408
+ -webkit-appearance: none;
409
+ }
410
+
411
+ /*
412
+ 1. Correct the inability to style clickable types in iOS and Safari.
413
+ 2. Change font properties to `inherit` in Safari.
414
+ */
415
+
416
+ ::-webkit-file-upload-button {
417
+ -webkit-appearance: button;
418
+ /* 1 */
419
+ font: inherit;
420
+ /* 2 */
421
+ }
422
+
423
+ /*
424
+ Add the correct display in Chrome and Safari.
425
+ */
426
+
427
+ summary {
428
+ display: list-item;
429
+ }
430
+
431
+ /*
432
+ Removes the default spacing and border for appropriate elements.
433
+ */
434
+
435
+ blockquote,
436
+ dl,
437
+ dd,
438
+ h1,
439
+ h2,
440
+ h3,
441
+ h4,
442
+ h5,
443
+ h6,
444
+ hr,
445
+ figure,
446
+ p,
447
+ pre {
448
+ margin: 0;
449
+ }
450
+
451
+ fieldset {
452
+ margin: 0;
453
+ padding: 0;
454
+ }
455
+
456
+ legend {
457
+ padding: 0;
458
+ }
459
+
460
+ ol,
461
+ ul,
462
+ menu {
463
+ list-style: none;
464
+ margin: 0;
465
+ padding: 0;
466
+ }
467
+
468
+ /*
469
+ Reset default styling for dialogs.
470
+ */
471
+
472
+ dialog {
473
+ padding: 0;
474
+ }
475
+
476
+ /*
477
+ Prevent resizing textareas horizontally by default.
478
+ */
479
+
480
+ textarea {
481
+ resize: vertical;
482
+ }
483
+
484
+ /*
485
+ 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
486
+ 2. Set the default placeholder color to the user's configured gray 400 color.
487
+ */
488
+
489
+ input::-moz-placeholder, textarea::-moz-placeholder {
490
+ opacity: 1;
491
+ /* 1 */
492
+ color: #9ca3af;
493
+ /* 2 */
494
+ }
495
+
496
+ input::placeholder,
497
+ textarea::placeholder {
498
+ opacity: 1;
499
+ /* 1 */
500
+ color: #9ca3af;
501
+ /* 2 */
502
+ }
503
+
504
+ /*
505
+ Set the default cursor for buttons.
506
+ */
507
+
508
+ button,
509
+ [role="button"] {
510
+ cursor: pointer;
511
+ }
512
+
513
+ /*
514
+ Make sure disabled buttons don't get the pointer cursor.
515
+ */
516
+
517
+ :disabled {
518
+ cursor: default;
519
+ }
520
+
521
+ /*
522
+ 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
523
+ 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
524
+ This can trigger a poorly considered lint error in some tools but is included by design.
525
+ */
526
+
527
+ img,
528
+ svg,
529
+ video,
530
+ canvas,
531
+ audio,
532
+ iframe,
533
+ embed,
534
+ object {
535
+ display: block;
536
+ /* 1 */
537
+ vertical-align: middle;
538
+ /* 2 */
539
+ }
540
+
541
+ /*
542
+ Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
543
+ */
544
+
545
+ img,
546
+ video {
547
+ max-width: 100%;
548
+ height: auto;
549
+ }
550
+
551
+ /* Make elements with the HTML hidden attribute stay hidden by default */
552
+
553
+ [hidden] {
554
+ display: none;
555
+ }
556
+
557
+ :root {
558
+ --background: 0 0% 98%;
559
+ --foreground: 240 10% 3.9%;
560
+ --card: 0 0% 100%;
561
+ --card-foreground: 240 10% 3.9%;
562
+ --popover: 0 0% 100%;
563
+ --popover-foreground: 240 10% 3.9%;
564
+ --primary: 240 5.9% 10%;
565
+ --primary-foreground: 0 0% 98%;
566
+ --secondary: 240 4.8% 95.9%;
567
+ --secondary-foreground: 240 5.9% 10%;
568
+ --muted: 240 4.8% 95.9%;
569
+ --muted-foreground: 240 3.8% 46.1%;
570
+ --accent: 240 4.8% 93.8%;
571
+ --accent-foreground: 240 5.9% 10%;
572
+ --destructive: 0 84.2% 60.2%;
573
+ --destructive-foreground: 0 0% 98%;
574
+ --border: 240 5.9% 90%;
575
+ --input: 240 5.9% 90%;
576
+ --ring: 240 5.9% 10%;
577
+ --radius: 0.65rem;
578
+ --chart-1: 12 76% 61%;
579
+ --chart-2: 173 58% 39%;
580
+ --chart-3: 197 37% 24%;
581
+ --chart-4: 43 74% 66%;
582
+ --chart-5: 27 87% 67%;
583
+ }
584
+
585
+ .dark {
586
+ --background: 240 10% 5.4%;
587
+ --foreground: 0 0% 98%;
588
+ --card: 240 10% 3.9%;
589
+ --card-foreground: 0 0% 98%;
590
+ --popover: 240 10% 3.9%;
591
+ --popover-foreground: 0 0% 98%;
592
+ --primary: 0 0% 98%;
593
+ --primary-foreground: 240 5.9% 10%;
594
+ --secondary: 240 3.7% 15.9%;
595
+ --secondary-foreground: 0 0% 98%;
596
+ --muted: 240 3.7% 15.9%;
597
+ --muted-foreground: 240 5% 64.9%;
598
+ --accent: 240 3.7% 15.9%;
599
+ --accent-foreground: 0 0% 98%;
600
+ --destructive: 0 62.8% 30.6%;
601
+ --destructive-foreground: 0 0% 98%;
602
+ --border: 240 3.7% 11%;
603
+ --input: 240 3.7% 15.9%;
604
+ --ring: 240 4.9% 83.9%;
605
+ --chart-1: 220 70% 50%;
606
+ --chart-2: 160 60% 45%;
607
+ --chart-3: 30 80% 55%;
608
+ --chart-4: 280 65% 60%;
609
+ --chart-5: 340 75% 55%;
610
+ }
611
+
612
+ * {
613
+ border-color: hsl(var(--border));
614
+ }
615
+
616
+ body {
617
+ background-color: hsl(var(--background));
618
+ color: hsl(var(--foreground));
619
+ font-feature-settings: "rlig" 1, "calt" 1;
620
+ }
621
+
622
+ [data-href] {
623
+ cursor: pointer;
624
+ }
625
+
626
+ .link {
627
+ text-decoration-line: underline;
628
+ }
629
+
630
+ .link:hover {
631
+ opacity: 0.75;
632
+ }
633
+
634
+ /*
635
+ Label
636
+ */
637
+
638
+ .label {
639
+ font-size: 0.875rem;
640
+ line-height: 1.25rem;
641
+ font-weight: 500;
642
+ line-height: 1;
643
+ }
644
+
645
+ .peer:disabled ~ .label {
646
+ cursor: not-allowed;
647
+ opacity: 0.7;
648
+ }
649
+
650
+ /*
651
+ Select
652
+ */
653
+
654
+ .select {
655
+ -webkit-appearance: none;
656
+ -moz-appearance: none;
657
+ appearance: none;
658
+ background-color: #fff;
659
+ border-color: #6b7280;
660
+ border-width: 1px;
661
+ border-radius: 0px;
662
+ padding-top: 0.5rem;
663
+ padding-right: 0.75rem;
664
+ padding-bottom: 0.5rem;
665
+ padding-left: 0.75rem;
666
+ font-size: 1rem;
667
+ line-height: 1.5rem;
668
+ --tw-shadow: 0 0 #0000;
669
+ }
670
+
671
+ .select:focus {
672
+ outline: 2px solid transparent;
673
+ outline-offset: 2px;
674
+ --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
675
+ --tw-ring-offset-width: 0px;
676
+ --tw-ring-offset-color: #fff;
677
+ --tw-ring-color: #2563eb;
678
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
679
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
680
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
681
+ border-color: #2563eb;
682
+ }
683
+
684
+ .select {
685
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
686
+ background-position: right 0.5rem center;
687
+ background-repeat: no-repeat;
688
+ background-size: 1.5em 1.5em;
689
+ padding-right: 2.5rem;
690
+ -webkit-print-color-adjust: exact;
691
+ print-color-adjust: exact;
692
+ }
693
+
694
+ .select:where([size]:not([size="1"])) {
695
+ background-image: initial;
696
+ background-position: initial;
697
+ background-repeat: unset;
698
+ background-size: initial;
699
+ padding-right: 0.75rem;
700
+ -webkit-print-color-adjust: unset;
701
+ print-color-adjust: unset;
702
+ }
703
+
704
+ .select {
705
+ height: 2.5rem;
706
+ width: 12rem;
707
+ border-radius: calc(var(--radius) - 2px);
708
+ border-width: 1px;
709
+ border-color: hsl(var(--input));
710
+ --tw-bg-opacity: 1;
711
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
712
+ padding-left: 0.75rem;
713
+ padding-right: 0.75rem;
714
+ font-size: 0.875rem;
715
+ line-height: 1.25rem;
716
+ color: hsl(var(--foreground));
717
+ --tw-ring-offset-color: hsl(var(--background));
718
+ }
719
+
720
+ .select::file-selector-button {
721
+ border-width: 0px;
722
+ background-color: transparent;
723
+ font-size: 0.875rem;
724
+ line-height: 1.25rem;
725
+ font-weight: 500;
726
+ }
727
+
728
+ .select::-moz-placeholder {
729
+ color: hsl(var(--muted-foreground));
730
+ }
731
+
732
+ .select::placeholder {
733
+ color: hsl(var(--muted-foreground));
734
+ }
735
+
736
+ .select:focus-visible {
737
+ outline: 2px solid transparent;
738
+ outline-offset: 2px;
739
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
740
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
741
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
742
+ --tw-ring-color: hsl(var(--ring));
743
+ --tw-ring-offset-width: 2px;
744
+ }
745
+
746
+ .select:disabled {
747
+ cursor: not-allowed;
748
+ opacity: 0.5;
749
+ }
750
+
751
+ .select:is(.dark *) {
752
+ --tw-bg-opacity: 1;
753
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity));
754
+ }
755
+
756
+ /*
757
+ Badge
758
+ */
759
+
760
+ .badge {
761
+ display: inline-flex;
762
+ align-items: center;
763
+ -moz-column-gap: 0.375rem;
764
+ column-gap: 0.375rem;
765
+ border-radius: calc(var(--radius) - 2px);
766
+ border-width: 1px;
767
+ padding-left: 0.375rem;
768
+ padding-right: 0.375rem;
769
+ padding-top: 0.125rem;
770
+ padding-bottom: 0.125rem;
771
+ font-size: 0.875rem;
772
+ line-height: 1.25rem;
773
+ font-weight: 500;
774
+ }
775
+
776
+ @media (min-width: 640px) {
777
+ .badge {
778
+ font-size: 0.75rem;
779
+ line-height: 1.25rem;
780
+ }
781
+ }
782
+
783
+ @media (forced-colors: active) {
784
+ .badge {
785
+ outline-style: solid;
786
+ }
787
+ }
788
+
789
+ .badge-primary {
790
+ border-color: transparent;
791
+ background-color: hsl(var(--primary));
792
+ color: hsl(var(--primary-foreground));
793
+ }
794
+
795
+ .badge-primary:hover {
796
+ background-color: hsl(var(--primary) / 0.8);
797
+ }
798
+
799
+ .badge-destructive {
800
+ border-color: transparent;
801
+ background-color: hsl(var(--destructive) / 0.15);
802
+ color: hsl(var(--destructive));
803
+ }
804
+
805
+ .badge-destructive:is(.dark *) {
806
+ background-color: hsl(var(--destructive) / 0.1);
807
+ color: hsl(var(--destructive-foreground));
808
+ }
809
+
810
+ .badge-outline {
811
+ color: hsl(var(--foreground));
812
+ }
813
+
814
+ .badge-red {
815
+ border-color: transparent;
816
+ background-color: rgb(239 68 68 / 0.15);
817
+ --tw-text-opacity: 1;
818
+ color: rgb(185 28 28 / var(--tw-text-opacity));
819
+ }
820
+
821
+ .badge-red:is(.dark *) {
822
+ background-color: rgb(239 68 68 / 0.1);
823
+ --tw-text-opacity: 1;
824
+ color: rgb(248 113 113 / var(--tw-text-opacity));
825
+ }
826
+
827
+ .badge-amber {
828
+ border-color: transparent;
829
+ background-color: rgb(251 191 36 / 0.2);
830
+ --tw-text-opacity: 1;
831
+ color: rgb(180 83 9 / var(--tw-text-opacity));
832
+ }
833
+
834
+ .badge-amber:is(.dark *) {
835
+ background-color: rgb(251 191 36 / 0.1);
836
+ --tw-text-opacity: 1;
837
+ color: rgb(251 191 36 / var(--tw-text-opacity));
838
+ }
839
+
840
+ .badge-yellow {
841
+ border-color: transparent;
842
+ background-color: rgb(250 204 21 / 0.2);
843
+ --tw-text-opacity: 1;
844
+ color: rgb(161 98 7 / var(--tw-text-opacity));
845
+ }
846
+
847
+ .badge-yellow:is(.dark *) {
848
+ background-color: rgb(250 204 21 / 0.1);
849
+ --tw-text-opacity: 1;
850
+ color: rgb(253 224 71 / var(--tw-text-opacity));
851
+ }
852
+
853
+ .badge-green {
854
+ border-color: transparent;
855
+ background-color: rgb(34 197 94 / 0.15);
856
+ --tw-text-opacity: 1;
857
+ color: rgb(21 128 61 / var(--tw-text-opacity));
858
+ }
859
+
860
+ .badge-green:is(.dark *) {
861
+ background-color: rgb(34 197 94 / 0.1);
862
+ --tw-text-opacity: 1;
863
+ color: rgb(74 222 128 / var(--tw-text-opacity));
864
+ }
865
+
866
+ .badge-emerald {
867
+ border-color: transparent;
868
+ background-color: rgb(16 185 129 / 0.15);
869
+ --tw-text-opacity: 1;
870
+ color: rgb(4 120 87 / var(--tw-text-opacity));
871
+ }
872
+
873
+ .badge-emerald:is(.dark *) {
874
+ background-color: rgb(16 185 129 / 0.1);
875
+ --tw-text-opacity: 1;
876
+ color: rgb(52 211 153 / var(--tw-text-opacity));
877
+ }
878
+
879
+ .badge-sky {
880
+ border-color: transparent;
881
+ background-color: rgb(14 165 233 / 0.15);
882
+ --tw-text-opacity: 1;
883
+ color: rgb(3 105 161 / var(--tw-text-opacity));
884
+ }
885
+
886
+ .badge-sky:is(.dark *) {
887
+ background-color: rgb(14 165 233 / 0.1);
888
+ --tw-text-opacity: 1;
889
+ color: rgb(125 211 252 / var(--tw-text-opacity));
890
+ }
891
+
892
+ .badge-blue {
893
+ border-color: transparent;
894
+ background-color: rgb(59 130 246 / 0.15);
895
+ --tw-text-opacity: 1;
896
+ color: rgb(29 78 216 / var(--tw-text-opacity));
897
+ }
898
+
899
+ .badge-blue:is(.dark *) {
900
+ --tw-text-opacity: 1;
901
+ color: rgb(96 165 250 / var(--tw-text-opacity));
902
+ }
903
+
904
+ .badge-purple {
905
+ border-color: transparent;
906
+ background-color: rgb(168 85 247 / 0.15);
907
+ --tw-text-opacity: 1;
908
+ color: rgb(126 34 206 / var(--tw-text-opacity));
909
+ }
910
+
911
+ .badge-purple:is(.dark *) {
912
+ --tw-text-opacity: 1;
913
+ color: rgb(192 132 252 / var(--tw-text-opacity));
914
+ }
915
+
916
+ .badge-zinc {
917
+ border-color: transparent;
918
+ background-color: rgb(82 82 91 / 0.1);
919
+ --tw-text-opacity: 1;
920
+ color: rgb(63 63 70 / var(--tw-text-opacity));
921
+ }
922
+
923
+ .badge-zinc:is(.dark *) {
924
+ background-color: rgb(255 255 255 / 0.05);
925
+ --tw-text-opacity: 1;
926
+ color: rgb(161 161 170 / var(--tw-text-opacity));
927
+ }
928
+
929
+ /*
930
+ Circle
931
+ */
932
+
933
+ .circle {
934
+ display: inline-flex;
935
+ width: 0.5rem;
936
+ height: 0.5rem;
937
+ align-items: center;
938
+ justify-content: center;
939
+ border-radius: 9999px;
940
+ }
941
+
942
+ .circle-red {
943
+ --tw-bg-opacity: 1;
944
+ background-color: rgb(239 68 68 / var(--tw-bg-opacity));
945
+ }
946
+
947
+ .circle-amber {
948
+ --tw-bg-opacity: 1;
949
+ background-color: rgb(251 191 36 / var(--tw-bg-opacity));
950
+ }
951
+
952
+ .circle-yellow {
953
+ --tw-bg-opacity: 1;
954
+ background-color: rgb(250 204 21 / var(--tw-bg-opacity));
955
+ }
956
+
957
+ .circle-green {
958
+ --tw-bg-opacity: 1;
959
+ background-color: rgb(34 197 94 / var(--tw-bg-opacity));
960
+ }
961
+
962
+ .circle-sky {
963
+ --tw-bg-opacity: 1;
964
+ background-color: rgb(14 165 233 / var(--tw-bg-opacity));
965
+ }
966
+
967
+ .circle-blue {
968
+ --tw-bg-opacity: 1;
969
+ background-color: rgb(59 130 246 / var(--tw-bg-opacity));
970
+ }
971
+
972
+ .circle-purple {
973
+ --tw-bg-opacity: 1;
974
+ background-color: rgb(168 85 247 / var(--tw-bg-opacity));
975
+ }
976
+
977
+ .circle-zinc {
978
+ --tw-bg-opacity: 1;
979
+ background-color: rgb(82 82 91 / var(--tw-bg-opacity));
980
+ }
981
+
982
+ /*
983
+ Alert
984
+ */
985
+
986
+ .alert {
987
+ position: relative;
988
+ width: 100%;
989
+ border-radius: var(--radius);
990
+ border-width: 1px;
991
+ padding: 1rem;
992
+ }
993
+
994
+ .alert>svg+div {
995
+ --tw-translate-y: -3px;
996
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
997
+ }
998
+
999
+ .alert>svg {
1000
+ position: absolute;
1001
+ left: 1rem;
1002
+ top: 1rem;
1003
+ color: hsl(var(--foreground));
1004
+ }
1005
+
1006
+ .alert>svg~* {
1007
+ padding-left: 1.75rem;
1008
+ }
1009
+
1010
+ .alert-default {
1011
+ background-color: hsl(var(--background));
1012
+ color: hsl(var(--foreground));
1013
+ }
1014
+
1015
+ .alert-red {
1016
+ border-color: rgb(239 68 68 / 0.5);
1017
+ --tw-text-opacity: 1;
1018
+ color: rgb(185 28 28 / var(--tw-text-opacity));
1019
+ }
1020
+
1021
+ .alert-red:is(.dark *) {
1022
+ --tw-border-opacity: 1;
1023
+ border-color: rgb(239 68 68 / var(--tw-border-opacity));
1024
+ --tw-text-opacity: 1;
1025
+ color: rgb(252 165 165 / var(--tw-text-opacity));
1026
+ }
1027
+
1028
+ .alert-red>svg {
1029
+ --tw-text-opacity: 1;
1030
+ color: rgb(239 68 68 / var(--tw-text-opacity));
1031
+ }
1032
+
1033
+ .alert-green {
1034
+ border-color: rgb(34 197 94 / 0.5);
1035
+ --tw-text-opacity: 1;
1036
+ color: rgb(21 128 61 / var(--tw-text-opacity));
1037
+ }
1038
+
1039
+ .alert-green:is(.dark *) {
1040
+ --tw-border-opacity: 1;
1041
+ border-color: rgb(34 197 94 / var(--tw-border-opacity));
1042
+ --tw-text-opacity: 1;
1043
+ color: rgb(134 239 172 / var(--tw-text-opacity));
1044
+ }
1045
+
1046
+ .alert-green>svg {
1047
+ --tw-text-opacity: 1;
1048
+ color: rgb(34 197 94 / var(--tw-text-opacity));
1049
+ }
1050
+
1051
+ .alert-yellow {
1052
+ border-color: rgb(234 179 8 / 0.5);
1053
+ --tw-text-opacity: 1;
1054
+ color: rgb(161 98 7 / var(--tw-text-opacity));
1055
+ }
1056
+
1057
+ .alert-yellow:is(.dark *) {
1058
+ --tw-border-opacity: 1;
1059
+ border-color: rgb(234 179 8 / var(--tw-border-opacity));
1060
+ --tw-text-opacity: 1;
1061
+ color: rgb(253 224 71 / var(--tw-text-opacity));
1062
+ }
1063
+
1064
+ .alert-yellow>svg {
1065
+ --tw-text-opacity: 1;
1066
+ color: rgb(234 179 8 / var(--tw-text-opacity));
1067
+ }
1068
+
1069
+ .alert-blue {
1070
+ border-color: rgb(59 130 246 / 0.5);
1071
+ --tw-text-opacity: 1;
1072
+ color: rgb(29 78 216 / var(--tw-text-opacity));
1073
+ }
1074
+
1075
+ .alert-blue:is(.dark *) {
1076
+ --tw-border-opacity: 1;
1077
+ border-color: rgb(59 130 246 / var(--tw-border-opacity));
1078
+ --tw-text-opacity: 1;
1079
+ color: rgb(147 197 253 / var(--tw-text-opacity));
1080
+ }
1081
+
1082
+ .alert-blue>svg {
1083
+ --tw-text-opacity: 1;
1084
+ color: rgb(59 130 246 / var(--tw-text-opacity));
1085
+ }
1086
+
1087
+ .alert-title {
1088
+ margin-bottom: 0.25rem;
1089
+ font-weight: 500;
1090
+ line-height: 1;
1091
+ letter-spacing: -0.025em;
1092
+ }
1093
+
1094
+ .alert-description {
1095
+ font-size: 0.875rem;
1096
+ line-height: 1.25rem;
1097
+ }
1098
+
1099
+ .alert-description p {
1100
+ line-height: 1.625;
1101
+ }
1102
+
1103
+ /*
1104
+ Button
1105
+ */
1106
+
1107
+ .btn {
1108
+ display: inline-flex;
1109
+ align-items: center;
1110
+ justify-content: center;
1111
+ border-radius: calc(var(--radius) - 2px);
1112
+ font-size: 0.875rem;
1113
+ line-height: 1.25rem;
1114
+ font-weight: 500;
1115
+ --tw-ring-offset-color: hsl(var(--background));
1116
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
1117
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1118
+ transition-duration: 150ms;
1119
+ }
1120
+
1121
+ .btn:focus-visible {
1122
+ outline: 2px solid transparent;
1123
+ outline-offset: 2px;
1124
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1125
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1126
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1127
+ --tw-ring-color: hsl(var(--ring));
1128
+ --tw-ring-offset-width: 2px;
1129
+ }
1130
+
1131
+ .btn:disabled {
1132
+ pointer-events: none;
1133
+ opacity: 0.5;
1134
+ }
1135
+
1136
+ .btn-outline {
1137
+ border-width: 1px;
1138
+ border-color: hsl(var(--input));
1139
+ background-color: hsl(var(--background));
1140
+ }
1141
+
1142
+ .btn-outline:hover {
1143
+ background-color: hsl(var(--accent));
1144
+ color: hsl(var(--accent-foreground));
1145
+ }
1146
+
1147
+ .btn-secondary {
1148
+ background-color: hsl(var(--secondary));
1149
+ color: hsl(var(--secondary-foreground));
1150
+ }
1151
+
1152
+ .btn-secondary:hover {
1153
+ background-color: hsl(var(--secondary) / 0.8);
1154
+ }
1155
+
1156
+ .btn-xs {
1157
+ height: 1.75rem;
1158
+ gap: 0.25rem;
1159
+ border-radius: calc(var(--radius) - 2px);
1160
+ padding-left: 0.5rem;
1161
+ padding-right: 0.5rem;
1162
+ }
1163
+
1164
+ .btn-sm {
1165
+ height: 2.25rem;
1166
+ gap: 0.375rem;
1167
+ border-radius: calc(var(--radius) - 2px);
1168
+ padding-left: 0.75rem;
1169
+ padding-right: 0.75rem;
1170
+ }
1171
+
1172
+ .btn-md {
1173
+ height: 2.5rem;
1174
+ gap: 0.375rem;
1175
+ padding-left: 1rem;
1176
+ padding-right: 1rem;
1177
+ padding-top: 0.5rem;
1178
+ padding-bottom: 0.5rem;
1179
+ }
1180
+
1181
+ .btn-icon {
1182
+ height: 2.5rem;
1183
+ width: 2.5rem;
1184
+ }
1185
+
1186
+ /*
1187
+ Info Line
1188
+ */
1189
+
1190
+ .info-line {
1191
+ display: flex;
1192
+ align-items: center;
1193
+ gap: 1rem;
1194
+ }
1195
+
1196
+ .info-line-label {
1197
+ white-space: nowrap;
1198
+ --tw-text-opacity: 1;
1199
+ color: rgb(113 113 122 / var(--tw-text-opacity));
1200
+ }
1201
+
1202
+ .info-line-separator {
1203
+ height: 1px;
1204
+ flex: 1 1 0%;
1205
+ --tw-translate-y: 1px;
1206
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1207
+ background-color: rgb(9 9 11 / 0.1);
1208
+ }
1209
+
1210
+ .info-line-separator:is(.dark *) {
1211
+ border-color: rgb(255 255 255 / 0.1);
1212
+ }
1213
+
1214
+ .info-line-value {
1215
+ text-align: right;
1216
+ font-weight: 500;
1217
+ --tw-text-opacity: 1;
1218
+ color: rgb(9 9 11 / var(--tw-text-opacity));
1219
+ }
1220
+
1221
+ .info-line-value:is(.dark *) {
1222
+ --tw-text-opacity: 1;
1223
+ color: rgb(255 255 255 / var(--tw-text-opacity));
1224
+ }
1225
+
1226
+ /*
1227
+ Card
1228
+ */
1229
+
1230
+ .card {
1231
+ border-radius: var(--radius);
1232
+ border-width: 1px;
1233
+ background-color: hsl(var(--card));
1234
+ color: hsl(var(--card-foreground));
1235
+ --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
1236
+ --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
1237
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1238
+ }
1239
+
1240
+ .card-header {
1241
+ display: flex;
1242
+ flex-direction: column;
1243
+ }
1244
+
1245
+ .card-header > :not([hidden]) ~ :not([hidden]) {
1246
+ --tw-space-y-reverse: 0;
1247
+ margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));
1248
+ margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));
1249
+ }
1250
+
1251
+ .card-header {
1252
+ padding: 1.5rem;
1253
+ }
1254
+
1255
+ .card-title {
1256
+ font-size: 1.5rem;
1257
+ line-height: 2rem;
1258
+ font-weight: 600;
1259
+ line-height: 1;
1260
+ letter-spacing: -0.025em;
1261
+ }
1262
+
1263
+ .card-description {
1264
+ font-size: 0.875rem;
1265
+ line-height: 1.25rem;
1266
+ color: hsl(var(--muted-foreground));
1267
+ }
1268
+
1269
+ .card-content {
1270
+ padding: 1.5rem;
1271
+ padding-top: 0px;
1272
+ }
1273
+
1274
+ .card-footer {
1275
+ display: flex;
1276
+ align-items: center;
1277
+ padding: 1.5rem;
1278
+ padding-top: 0px;
1279
+ }
1280
+
1281
+ /*
1282
+ Navbar
1283
+ */
1284
+
1285
+ .navbar {
1286
+ display: flex;
1287
+ align-items: center;
1288
+ gap: 1rem;
1289
+ background-color: hsl(var(--background));
1290
+ padding-top: 1rem;
1291
+ padding-bottom: 1rem;
1292
+ }
1293
+
1294
+ .navbar-section {
1295
+ display: flex;
1296
+ gap: 0.375rem;
1297
+ }
1298
+
1299
+ .navbar-item {
1300
+ display: inline-flex;
1301
+ align-items: center;
1302
+ justify-content: center;
1303
+ border-radius: calc(var(--radius) - 2px);
1304
+ padding-left: 0.75rem;
1305
+ padding-right: 0.75rem;
1306
+ padding-top: 0.5rem;
1307
+ padding-bottom: 0.5rem;
1308
+ font-size: 0.875rem;
1309
+ line-height: 1.25rem;
1310
+ font-weight: 500;
1311
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
1312
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1313
+ transition-duration: 150ms;
1314
+ }
1315
+
1316
+ .navbar-item:focus-visible {
1317
+ outline: 2px solid transparent;
1318
+ outline-offset: 2px;
1319
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1320
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1321
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1322
+ --tw-ring-color: hsl(var(--ring));
1323
+ --tw-ring-offset-width: 2px;
1324
+ }
1325
+
1326
+ .navbar-item-default {
1327
+ color: hsl(var(--foreground));
1328
+ }
1329
+
1330
+ .navbar-item-default:hover {
1331
+ background-color: hsl(var(--accent));
1332
+ color: hsl(var(--accent-foreground));
1333
+ }
1334
+
1335
+ .navbar-item-current {
1336
+ background-color: hsl(var(--primary));
1337
+ color: hsl(var(--primary-foreground));
1338
+ }
1339
+
1340
+ /*
1341
+ Table
1342
+ */
1343
+
1344
+ .table-wrapper {
1345
+ position: relative;
1346
+ width: 100%;
1347
+ overflow: auto;
1348
+ }
1349
+
1350
+ .table {
1351
+ width: 100%;
1352
+ caption-side: bottom;
1353
+ font-size: 0.875rem;
1354
+ line-height: 1.25rem;
1355
+ }
1356
+
1357
+ .table-header tr {
1358
+ border-bottom-width: 1px;
1359
+ }
1360
+
1361
+ .table-body tr:last-child {
1362
+ border-width: 0px;
1363
+ }
1364
+
1365
+ .table-row {
1366
+ border-bottom-width: 1px;
1367
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
1368
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1369
+ transition-duration: 150ms;
1370
+ }
1371
+
1372
+ .table-row:hover {
1373
+ background-color: hsl(var(--muted) / 0.5);
1374
+ }
1375
+
1376
+ .table-row[data-state="selected"] {
1377
+ background-color: hsl(var(--muted));
1378
+ }
1379
+
1380
+ .table-head {
1381
+ height: 3rem;
1382
+ white-space: nowrap;
1383
+ padding-left: 1rem;
1384
+ padding-right: 1rem;
1385
+ text-align: left;
1386
+ vertical-align: middle;
1387
+ font-weight: 500;
1388
+ color: hsl(var(--muted-foreground));
1389
+ }
1390
+
1391
+ .table-head:has([role=checkbox]) {
1392
+ padding-right: 0px;
1393
+ }
1394
+
1395
+ .table-cell {
1396
+ padding: 1rem;
1397
+ vertical-align: middle;
1398
+ }
1399
+
1400
+ .table-cell:has([role=checkbox]) {
1401
+ padding-right: 0px;
1402
+ }
1403
+
1404
+ /*
1405
+ Pagination
1406
+ */
1407
+
1408
+ .pagination {
1409
+ display: flex;
1410
+ justify-content: center;
1411
+ }
1412
+
1413
+ .pagination-content {
1414
+ display: flex;
1415
+ flex-direction: row;
1416
+ align-items: center;
1417
+ gap: 0.25rem;
1418
+ }
1419
+
1420
+ .pagination-item {
1421
+ display: inline-block;
1422
+ }
1423
+
1424
+ .pagination-link {
1425
+ display: inline-flex;
1426
+ align-items: center;
1427
+ justify-content: center;
1428
+ border-radius: calc(var(--radius) - 2px);
1429
+ font-size: 0.875rem;
1430
+ line-height: 1.25rem;
1431
+ font-weight: 500;
1432
+ --tw-ring-offset-color: hsl(var(--background));
1433
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
1434
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1435
+ transition-duration: 150ms;
1436
+ }
1437
+
1438
+ .pagination-link:focus-visible {
1439
+ outline: 2px solid transparent;
1440
+ outline-offset: 2px;
1441
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1442
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1443
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1444
+ --tw-ring-color: hsl(var(--ring));
1445
+ --tw-ring-offset-width: 2px;
1446
+ }
1447
+
1448
+ .pagination-link:disabled {
1449
+ pointer-events: none;
1450
+ opacity: 0.5;
1451
+ }
1452
+
1453
+ .pagination-link-active {
1454
+ border-width: 1px;
1455
+ border-color: hsl(var(--input));
1456
+ background-color: hsl(var(--background));
1457
+ }
1458
+
1459
+ .pagination-link-active:hover {
1460
+ background-color: hsl(var(--accent));
1461
+ color: hsl(var(--accent-foreground));
1462
+ }
1463
+
1464
+ .pagination-link-inactive:hover {
1465
+ background-color: hsl(var(--accent));
1466
+ color: hsl(var(--accent-foreground));
1467
+ }
1468
+
1469
+ .pagination-link-default {
1470
+ height: 2.5rem;
1471
+ padding-left: 1rem;
1472
+ padding-right: 1rem;
1473
+ padding-top: 0.5rem;
1474
+ padding-bottom: 0.5rem;
1475
+ }
1476
+
1477
+ .pagination-previous,
1478
+ .pagination-next {
1479
+ height: 2.5rem;
1480
+ gap: 0.25rem;
1481
+ padding-left: 1rem;
1482
+ padding-right: 1rem;
1483
+ padding-top: 0.5rem;
1484
+ padding-bottom: 0.5rem;
1485
+ }
1486
+
1487
+ .pagination-previous {
1488
+ padding-left: 0.625rem;
1489
+ }
1490
+
1491
+ .pagination-next {
1492
+ padding-right: 0.625rem;
1493
+ }
1494
+
1495
+ .pagination-ellipsis {
1496
+ display: flex;
1497
+ height: 2.25rem;
1498
+ width: 2.25rem;
1499
+ align-items: center;
1500
+ justify-content: center;
1501
+ }
1502
+
1503
+ .static {
1504
+ position: static;
1505
+ }
1506
+
1507
+ .mx-auto {
1508
+ margin-left: auto;
1509
+ margin-right: auto;
1510
+ }
1511
+
1512
+ .\!mt-4 {
1513
+ margin-top: 1rem !important;
1514
+ }
1515
+
1516
+ .-ml-0\.5 {
1517
+ margin-left: -0.125rem;
1518
+ }
1519
+
1520
+ .mb-6 {
1521
+ margin-bottom: 1.5rem;
1522
+ }
1523
+
1524
+ .mb-8 {
1525
+ margin-bottom: 2rem;
1526
+ }
1527
+
1528
+ .ml-0\.5 {
1529
+ margin-left: 0.125rem;
1530
+ }
1531
+
1532
+ .ml-1\.5 {
1533
+ margin-left: 0.375rem;
1534
+ }
1535
+
1536
+ .ml-2 {
1537
+ margin-left: 0.5rem;
1538
+ }
1539
+
1540
+ .ml-4 {
1541
+ margin-left: 1rem;
1542
+ }
1543
+
1544
+ .ml-8 {
1545
+ margin-left: 2rem;
1546
+ }
1547
+
1548
+ .ml-auto {
1549
+ margin-left: auto;
1550
+ }
1551
+
1552
+ .mr-0\.5 {
1553
+ margin-right: 0.125rem;
1554
+ }
1555
+
1556
+ .mr-1 {
1557
+ margin-right: 0.25rem;
1558
+ }
1559
+
1560
+ .mr-1\.5 {
1561
+ margin-right: 0.375rem;
1562
+ }
1563
+
1564
+ .mt-1 {
1565
+ margin-top: 0.25rem;
1566
+ }
1567
+
1568
+ .mt-2 {
1569
+ margin-top: 0.5rem;
1570
+ }
1571
+
1572
+ .mt-4 {
1573
+ margin-top: 1rem;
1574
+ }
1575
+
1576
+ .mt-6 {
1577
+ margin-top: 1.5rem;
1578
+ }
1579
+
1580
+ .mt-8 {
1581
+ margin-top: 2rem;
1582
+ }
1583
+
1584
+ .mt-0\.5 {
1585
+ margin-top: 0.125rem;
1586
+ }
1587
+
1588
+ .inline-block {
1589
+ display: inline-block;
1590
+ }
1591
+
1592
+ .flex {
1593
+ display: flex;
1594
+ }
1595
+
1596
+ .inline-flex {
1597
+ display: inline-flex;
1598
+ }
1599
+
1600
+ .table {
1601
+ display: table;
1602
+ }
1603
+
1604
+ .table-cell {
1605
+ display: table-cell;
1606
+ }
1607
+
1608
+ .table-row {
1609
+ display: table-row;
1610
+ }
1611
+
1612
+ .grid {
1613
+ display: grid;
1614
+ }
1615
+
1616
+ .\!size-4 {
1617
+ width: 1rem !important;
1618
+ height: 1rem !important;
1619
+ }
1620
+
1621
+ .size-3 {
1622
+ width: 0.75rem;
1623
+ height: 0.75rem;
1624
+ }
1625
+
1626
+ .size-3\.5 {
1627
+ width: 0.875rem;
1628
+ height: 0.875rem;
1629
+ }
1630
+
1631
+ .size-4 {
1632
+ width: 1rem;
1633
+ height: 1rem;
1634
+ }
1635
+
1636
+ .h-5 {
1637
+ height: 1.25rem;
1638
+ }
1639
+
1640
+ .w-24 {
1641
+ width: 6rem;
1642
+ }
1643
+
1644
+ .w-5 {
1645
+ width: 1.25rem;
1646
+ }
1647
+
1648
+ .max-w-\[1920px\] {
1649
+ max-width: 1920px;
1650
+ }
1651
+
1652
+ .-translate-y-px {
1653
+ --tw-translate-y: -1px;
1654
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1655
+ }
1656
+
1657
+ .translate-y-px {
1658
+ --tw-translate-y: 1px;
1659
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1660
+ }
1661
+
1662
+ .list-decimal {
1663
+ list-style-type: decimal;
1664
+ }
1665
+
1666
+ .grid-cols-1 {
1667
+ grid-template-columns: repeat(1, minmax(0, 1fr));
1668
+ }
1669
+
1670
+ .grid-cols-5 {
1671
+ grid-template-columns: repeat(5, minmax(0, 1fr));
1672
+ }
1673
+
1674
+ .\!flex-row {
1675
+ flex-direction: row !important;
1676
+ }
1677
+
1678
+ .flex-row {
1679
+ flex-direction: row;
1680
+ }
1681
+
1682
+ .flex-wrap {
1683
+ flex-wrap: wrap;
1684
+ }
1685
+
1686
+ .items-center {
1687
+ align-items: center;
1688
+ }
1689
+
1690
+ .justify-center {
1691
+ justify-content: center;
1692
+ }
1693
+
1694
+ .justify-between {
1695
+ justify-content: space-between;
1696
+ }
1697
+
1698
+ .gap-0\.5 {
1699
+ gap: 0.125rem;
1700
+ }
1701
+
1702
+ .gap-1 {
1703
+ gap: 0.25rem;
1704
+ }
1705
+
1706
+ .gap-2 {
1707
+ gap: 0.5rem;
1708
+ }
1709
+
1710
+ .gap-4 {
1711
+ gap: 1rem;
1712
+ }
1713
+
1714
+ .space-y-1 > :not([hidden]) ~ :not([hidden]) {
1715
+ --tw-space-y-reverse: 0;
1716
+ margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
1717
+ margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));
1718
+ }
1719
+
1720
+ .space-y-1\.5 > :not([hidden]) ~ :not([hidden]) {
1721
+ --tw-space-y-reverse: 0;
1722
+ margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));
1723
+ margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));
1724
+ }
1725
+
1726
+ .space-y-3 > :not([hidden]) ~ :not([hidden]) {
1727
+ --tw-space-y-reverse: 0;
1728
+ margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
1729
+ margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
1730
+ }
1731
+
1732
+ .space-y-4 > :not([hidden]) ~ :not([hidden]) {
1733
+ --tw-space-y-reverse: 0;
1734
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
1735
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse));
1736
+ }
1737
+
1738
+ .overflow-hidden {
1739
+ overflow: hidden;
1740
+ }
1741
+
1742
+ .truncate {
1743
+ overflow: hidden;
1744
+ text-overflow: ellipsis;
1745
+ white-space: nowrap;
1746
+ }
1747
+
1748
+ .whitespace-nowrap {
1749
+ white-space: nowrap;
1750
+ }
1751
+
1752
+ .text-balance {
1753
+ text-wrap: balance;
1754
+ }
1755
+
1756
+ .border-b {
1757
+ border-bottom-width: 1px;
1758
+ }
1759
+
1760
+ .border-t {
1761
+ border-top-width: 1px;
1762
+ }
1763
+
1764
+ .border-t-4 {
1765
+ border-top-width: 4px;
1766
+ }
1767
+
1768
+ .border-t-amber-500 {
1769
+ --tw-border-opacity: 1;
1770
+ border-top-color: rgb(245 158 11 / var(--tw-border-opacity));
1771
+ }
1772
+
1773
+ .border-t-blue-500 {
1774
+ --tw-border-opacity: 1;
1775
+ border-top-color: rgb(59 130 246 / var(--tw-border-opacity));
1776
+ }
1777
+
1778
+ .border-t-purple-500 {
1779
+ --tw-border-opacity: 1;
1780
+ border-top-color: rgb(168 85 247 / var(--tw-border-opacity));
1781
+ }
1782
+
1783
+ .border-t-red-500 {
1784
+ --tw-border-opacity: 1;
1785
+ border-top-color: rgb(239 68 68 / var(--tw-border-opacity));
1786
+ }
1787
+
1788
+ .border-t-zinc-500 {
1789
+ --tw-border-opacity: 1;
1790
+ border-top-color: rgb(113 113 122 / var(--tw-border-opacity));
1791
+ }
1792
+
1793
+ .bg-primary\/7\.5 {
1794
+ background-color: hsl(var(--primary) / 0.075);
1795
+ }
1796
+
1797
+ .\!p-0 {
1798
+ padding: 0px !important;
1799
+ }
1800
+
1801
+ .px-2 {
1802
+ padding-left: 0.5rem;
1803
+ padding-right: 0.5rem;
1804
+ }
1805
+
1806
+ .px-4 {
1807
+ padding-left: 1rem;
1808
+ padding-right: 1rem;
1809
+ }
1810
+
1811
+ .px-6 {
1812
+ padding-left: 1.5rem;
1813
+ padding-right: 1.5rem;
1814
+ }
1815
+
1816
+ .py-12 {
1817
+ padding-top: 3rem;
1818
+ padding-bottom: 3rem;
1819
+ }
1820
+
1821
+ .pb-\[15vh\] {
1822
+ padding-bottom: 15vh;
1823
+ }
1824
+
1825
+ .pl-6 {
1826
+ padding-left: 1.5rem;
1827
+ }
1828
+
1829
+ .pt-5 {
1830
+ padding-top: 1.25rem;
1831
+ }
1832
+
1833
+ .pt-6 {
1834
+ padding-top: 1.5rem;
1835
+ }
1836
+
1837
+ .text-center {
1838
+ text-align: center;
1839
+ }
1840
+
1841
+ .font-mono {
1842
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
1843
+ }
1844
+
1845
+ .text-4xl {
1846
+ font-size: 2.25rem;
1847
+ line-height: 2.5rem;
1848
+ }
1849
+
1850
+ .text-lg {
1851
+ font-size: 1.125rem;
1852
+ line-height: 1.75rem;
1853
+ }
1854
+
1855
+ .text-sm {
1856
+ font-size: 0.875rem;
1857
+ line-height: 1.25rem;
1858
+ }
1859
+
1860
+ .text-xl {
1861
+ font-size: 1.25rem;
1862
+ line-height: 1.75rem;
1863
+ }
1864
+
1865
+ .text-xs {
1866
+ font-size: 0.75rem;
1867
+ line-height: 1rem;
1868
+ }
1869
+
1870
+ .text-base {
1871
+ font-size: 1rem;
1872
+ line-height: 1.5rem;
1873
+ }
1874
+
1875
+ .text-\[15px\] {
1876
+ font-size: 15px;
1877
+ }
1878
+
1879
+ .text-\[14px\] {
1880
+ font-size: 14px;
1881
+ }
1882
+
1883
+ .font-bold {
1884
+ font-weight: 700;
1885
+ }
1886
+
1887
+ .font-medium {
1888
+ font-weight: 500;
1889
+ }
1890
+
1891
+ .font-normal {
1892
+ font-weight: 400;
1893
+ }
1894
+
1895
+ .capitalize {
1896
+ text-transform: capitalize;
1897
+ }
1898
+
1899
+ .tracking-tight {
1900
+ letter-spacing: -0.025em;
1901
+ }
1902
+
1903
+ .tracking-tighter {
1904
+ letter-spacing: -0.05em;
1905
+ }
1906
+
1907
+ .text-amber-500 {
1908
+ --tw-text-opacity: 1;
1909
+ color: rgb(245 158 11 / var(--tw-text-opacity));
1910
+ }
1911
+
1912
+ .text-amber-600 {
1913
+ --tw-text-opacity: 1;
1914
+ color: rgb(217 119 6 / var(--tw-text-opacity));
1915
+ }
1916
+
1917
+ .text-black {
1918
+ --tw-text-opacity: 1;
1919
+ color: rgb(0 0 0 / var(--tw-text-opacity));
1920
+ }
1921
+
1922
+ .text-foreground {
1923
+ color: hsl(var(--foreground));
1924
+ }
1925
+
1926
+ .text-muted-foreground {
1927
+ color: hsl(var(--muted-foreground));
1928
+ }
1929
+
1930
+ .text-muted-foreground\/30 {
1931
+ color: hsl(var(--muted-foreground) / 0.3);
1932
+ }
1933
+
1934
+ .text-red-500 {
1935
+ --tw-text-opacity: 1;
1936
+ color: rgb(239 68 68 / var(--tw-text-opacity));
1937
+ }
1938
+
1939
+ .text-red-600 {
1940
+ --tw-text-opacity: 1;
1941
+ color: rgb(220 38 38 / var(--tw-text-opacity));
1942
+ }
1943
+
1944
+ .text-zinc-900 {
1945
+ --tw-text-opacity: 1;
1946
+ color: rgb(24 24 27 / var(--tw-text-opacity));
1947
+ }
1948
+
1949
+ .opacity-50 {
1950
+ opacity: 0.5;
1951
+ }
1952
+
1953
+ @keyframes enter {
1954
+ from {
1955
+ opacity: var(--tw-enter-opacity, 1);
1956
+ transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));
1957
+ }
1958
+ }
1959
+
1960
+ @keyframes exit {
1961
+ to {
1962
+ opacity: var(--tw-exit-opacity, 1);
1963
+ transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));
1964
+ }
1965
+ }
1966
+
1967
+ .marker\:text-sm *::marker {
1968
+ font-size: 0.875rem;
1969
+ line-height: 1.25rem;
1970
+ }
1971
+
1972
+ .marker\:text-muted-foreground *::marker {
1973
+ color: hsl(var(--muted-foreground));
1974
+ }
1975
+
1976
+ .marker\:text-sm::marker {
1977
+ font-size: 0.875rem;
1978
+ line-height: 1.25rem;
1979
+ }
1980
+
1981
+ .marker\:text-muted-foreground::marker {
1982
+ color: hsl(var(--muted-foreground));
1983
+ }
1984
+
1985
+ .hover\:bg-primary\/10:hover {
1986
+ background-color: hsl(var(--primary) / 0.1);
1987
+ }
1988
+
1989
+ .hover\:text-foreground:hover {
1990
+ color: hsl(var(--foreground));
1991
+ }
1992
+
1993
+ .hover\:underline:hover {
1994
+ text-decoration-line: underline;
1995
+ }
1996
+
1997
+ .dark\:border-t-amber-600:is(.dark *) {
1998
+ --tw-border-opacity: 1;
1999
+ border-top-color: rgb(217 119 6 / var(--tw-border-opacity));
2000
+ }
2001
+
2002
+ .dark\:border-t-blue-600:is(.dark *) {
2003
+ --tw-border-opacity: 1;
2004
+ border-top-color: rgb(37 99 235 / var(--tw-border-opacity));
2005
+ }
2006
+
2007
+ .dark\:border-t-purple-600:is(.dark *) {
2008
+ --tw-border-opacity: 1;
2009
+ border-top-color: rgb(147 51 234 / var(--tw-border-opacity));
2010
+ }
2011
+
2012
+ .dark\:border-t-zinc-600:is(.dark *) {
2013
+ --tw-border-opacity: 1;
2014
+ border-top-color: rgb(82 82 91 / var(--tw-border-opacity));
2015
+ }
2016
+
2017
+ .dark\:text-red-500:is(.dark *) {
2018
+ --tw-text-opacity: 1;
2019
+ color: rgb(239 68 68 / var(--tw-text-opacity));
2020
+ }
2021
+
2022
+ .dark\:text-white:is(.dark *) {
2023
+ --tw-text-opacity: 1;
2024
+ color: rgb(255 255 255 / var(--tw-text-opacity));
2025
+ }
2026
+
2027
+ .dark\:text-zinc-100:is(.dark *) {
2028
+ --tw-text-opacity: 1;
2029
+ color: rgb(244 244 245 / var(--tw-text-opacity));
2030
+ }
2031
+
2032
+ @media (min-width: 640px) {
2033
+ .sm\:grid-cols-2 {
2034
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2035
+ }
2036
+
2037
+ .sm\:gap-16 {
2038
+ gap: 4rem;
2039
+ }
2040
+
2041
+ .sm\:px-6 {
2042
+ padding-left: 1.5rem;
2043
+ padding-right: 1.5rem;
2044
+ }
2045
+
2046
+ .sm\:pb-\[25vh\] {
2047
+ padding-bottom: 25vh;
2048
+ }
2049
+ }
2050
+
2051
+ @media (min-width: 768px) {
2052
+ .md\:gap-20 {
2053
+ gap: 5rem;
2054
+ }
2055
+ }
2056
+
2057
+ @media (min-width: 1024px) {
2058
+ .lg\:px-8 {
2059
+ padding-left: 2rem;
2060
+ padding-right: 2rem;
2061
+ }
2062
+ }