analytic 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +41 -13
  3. data/Rakefile +12 -2
  4. data/app/assets/builds/analytic/application.css +810 -0
  5. data/app/assets/builds/analytic/application.js +54498 -0
  6. data/app/assets/builds/analytic/application.js.map +7 -0
  7. data/app/assets/config/analytic_manifest.js +0 -0
  8. data/app/controllers/analytic/application_controller.rb +6 -0
  9. data/app/controllers/analytic/dashboard_controller.rb +13 -0
  10. data/app/controllers/concerns/analytic/trackable.rb +38 -0
  11. data/app/helpers/analytic/application_helper.rb +6 -0
  12. data/app/jobs/analytic/application_job.rb +6 -0
  13. data/app/jobs/analytic/track_job.rb +23 -0
  14. data/app/mailers/analytic/application_mailer.rb +7 -0
  15. data/app/models/analytic/application_record.rb +7 -0
  16. data/app/models/analytic/dashboard.rb +65 -0
  17. data/app/models/analytic/view.rb +23 -0
  18. data/app/packs/analytic/application/index.ts +1 -0
  19. data/app/packs/analytic/application/initializers/fontawesome.ts +23 -0
  20. data/app/packs/analytic/application/initializers/index.ts +1 -0
  21. data/app/packs/analytic/entrypoints/application.tailwind.css +65 -0
  22. data/app/packs/analytic/entrypoints/application.ts +1 -0
  23. data/app/views/analytic/dashboard/show.html.erb +84 -0
  24. data/app/views/layouts/analytic/application.html.erb +42 -0
  25. data/bin/dev +3 -0
  26. data/bin/rails +11 -0
  27. data/config/routes.rb +7 -0
  28. data/db/migrate/20240805210911_create_analytic_views.rb +20 -0
  29. data/lib/analytic/config.rb +12 -0
  30. data/lib/analytic/engine.rb +7 -0
  31. data/lib/analytic/version.rb +3 -1
  32. data/lib/analytic.rb +15 -3
  33. metadata +36 -13
  34. data/lib/analytic/railtie.rb +0 -4
  35. data/lib/tasks/analytic_tasks.rake +0 -4
  36. /data/{MIT-LICENSE → LICENSE} +0 -0
@@ -0,0 +1,810 @@
1
+ /*
2
+ ! tailwindcss v3.4.7 | MIT License | https://tailwindcss.com
3
+ */
4
+
5
+ /*
6
+ 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
7
+ 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
8
+ */
9
+
10
+ *,
11
+ ::before,
12
+ ::after {
13
+ box-sizing: border-box;
14
+ /* 1 */
15
+ border-width: 0;
16
+ /* 2 */
17
+ border-style: solid;
18
+ /* 2 */
19
+ border-color: #e5e7eb;
20
+ /* 2 */
21
+ }
22
+
23
+ ::before,
24
+ ::after {
25
+ --tw-content: '';
26
+ }
27
+
28
+ /*
29
+ 1. Use a consistent sensible line-height in all browsers.
30
+ 2. Prevent adjustments of font size after orientation changes in iOS.
31
+ 3. Use a more readable tab size.
32
+ 4. Use the user's configured `sans` font-family by default.
33
+ 5. Use the user's configured `sans` font-feature-settings by default.
34
+ 6. Use the user's configured `sans` font-variation-settings by default.
35
+ 7. Disable tap highlights on iOS
36
+ */
37
+
38
+ html,
39
+ :host {
40
+ line-height: 1.5;
41
+ /* 1 */
42
+ -webkit-text-size-adjust: 100%;
43
+ /* 2 */
44
+ -moz-tab-size: 4;
45
+ /* 3 */
46
+ -o-tab-size: 4;
47
+ tab-size: 4;
48
+ /* 3 */
49
+ font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
50
+ /* 4 */
51
+ font-feature-settings: normal;
52
+ /* 5 */
53
+ font-variation-settings: normal;
54
+ /* 6 */
55
+ -webkit-tap-highlight-color: transparent;
56
+ /* 7 */
57
+ }
58
+
59
+ /*
60
+ 1. Remove the margin in all browsers.
61
+ 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
62
+ */
63
+
64
+ body {
65
+ margin: 0;
66
+ /* 1 */
67
+ line-height: inherit;
68
+ /* 2 */
69
+ }
70
+
71
+ /*
72
+ 1. Add the correct height in Firefox.
73
+ 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
74
+ 3. Ensure horizontal rules are visible by default.
75
+ */
76
+
77
+ hr {
78
+ height: 0;
79
+ /* 1 */
80
+ color: inherit;
81
+ /* 2 */
82
+ border-top-width: 1px;
83
+ /* 3 */
84
+ }
85
+
86
+ /*
87
+ Add the correct text decoration in Chrome, Edge, and Safari.
88
+ */
89
+
90
+ abbr:where([title]) {
91
+ -webkit-text-decoration: underline dotted;
92
+ text-decoration: underline dotted;
93
+ }
94
+
95
+ /*
96
+ Remove the default font size and weight for headings.
97
+ */
98
+
99
+ h1,
100
+ h2,
101
+ h3,
102
+ h4,
103
+ h5,
104
+ h6 {
105
+ font-size: inherit;
106
+ font-weight: inherit;
107
+ }
108
+
109
+ /*
110
+ Reset links to optimize for opt-in styling instead of opt-out.
111
+ */
112
+
113
+ a {
114
+ color: inherit;
115
+ text-decoration: inherit;
116
+ }
117
+
118
+ /*
119
+ Add the correct font weight in Edge and Safari.
120
+ */
121
+
122
+ b,
123
+ strong {
124
+ font-weight: bolder;
125
+ }
126
+
127
+ /*
128
+ 1. Use the user's configured `mono` font-family by default.
129
+ 2. Use the user's configured `mono` font-feature-settings by default.
130
+ 3. Use the user's configured `mono` font-variation-settings by default.
131
+ 4. Correct the odd `em` font sizing in all browsers.
132
+ */
133
+
134
+ code,
135
+ kbd,
136
+ samp,
137
+ pre {
138
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
139
+ /* 1 */
140
+ font-feature-settings: normal;
141
+ /* 2 */
142
+ font-variation-settings: normal;
143
+ /* 3 */
144
+ font-size: 1em;
145
+ /* 4 */
146
+ }
147
+
148
+ /*
149
+ Add the correct font size in all browsers.
150
+ */
151
+
152
+ small {
153
+ font-size: 80%;
154
+ }
155
+
156
+ /*
157
+ Prevent `sub` and `sup` elements from affecting the line height in all browsers.
158
+ */
159
+
160
+ sub,
161
+ sup {
162
+ font-size: 75%;
163
+ line-height: 0;
164
+ position: relative;
165
+ vertical-align: baseline;
166
+ }
167
+
168
+ sub {
169
+ bottom: -0.25em;
170
+ }
171
+
172
+ sup {
173
+ top: -0.5em;
174
+ }
175
+
176
+ /*
177
+ 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)
178
+ 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)
179
+ 3. Remove gaps between table borders by default.
180
+ */
181
+
182
+ table {
183
+ text-indent: 0;
184
+ /* 1 */
185
+ border-color: inherit;
186
+ /* 2 */
187
+ border-collapse: collapse;
188
+ /* 3 */
189
+ }
190
+
191
+ /*
192
+ 1. Change the font styles in all browsers.
193
+ 2. Remove the margin in Firefox and Safari.
194
+ 3. Remove default padding in all browsers.
195
+ */
196
+
197
+ button,
198
+ input,
199
+ optgroup,
200
+ select,
201
+ textarea {
202
+ font-family: inherit;
203
+ /* 1 */
204
+ font-feature-settings: inherit;
205
+ /* 1 */
206
+ font-variation-settings: inherit;
207
+ /* 1 */
208
+ font-size: 100%;
209
+ /* 1 */
210
+ font-weight: inherit;
211
+ /* 1 */
212
+ line-height: inherit;
213
+ /* 1 */
214
+ letter-spacing: inherit;
215
+ /* 1 */
216
+ color: inherit;
217
+ /* 1 */
218
+ margin: 0;
219
+ /* 2 */
220
+ padding: 0;
221
+ /* 3 */
222
+ }
223
+
224
+ /*
225
+ Remove the inheritance of text transform in Edge and Firefox.
226
+ */
227
+
228
+ button,
229
+ select {
230
+ text-transform: none;
231
+ }
232
+
233
+ /*
234
+ 1. Correct the inability to style clickable types in iOS and Safari.
235
+ 2. Remove default button styles.
236
+ */
237
+
238
+ button,
239
+ input:where([type='button']),
240
+ input:where([type='reset']),
241
+ input:where([type='submit']) {
242
+ -webkit-appearance: button;
243
+ /* 1 */
244
+ background-color: transparent;
245
+ /* 2 */
246
+ background-image: none;
247
+ /* 2 */
248
+ }
249
+
250
+ /*
251
+ Use the modern Firefox focus style for all focusable elements.
252
+ */
253
+
254
+ :-moz-focusring {
255
+ outline: auto;
256
+ }
257
+
258
+ /*
259
+ Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
260
+ */
261
+
262
+ :-moz-ui-invalid {
263
+ box-shadow: none;
264
+ }
265
+
266
+ /*
267
+ Add the correct vertical alignment in Chrome and Firefox.
268
+ */
269
+
270
+ progress {
271
+ vertical-align: baseline;
272
+ }
273
+
274
+ /*
275
+ Correct the cursor style of increment and decrement buttons in Safari.
276
+ */
277
+
278
+ ::-webkit-inner-spin-button,
279
+ ::-webkit-outer-spin-button {
280
+ height: auto;
281
+ }
282
+
283
+ /*
284
+ 1. Correct the odd appearance in Chrome and Safari.
285
+ 2. Correct the outline style in Safari.
286
+ */
287
+
288
+ [type='search'] {
289
+ -webkit-appearance: textfield;
290
+ /* 1 */
291
+ outline-offset: -2px;
292
+ /* 2 */
293
+ }
294
+
295
+ /*
296
+ Remove the inner padding in Chrome and Safari on macOS.
297
+ */
298
+
299
+ ::-webkit-search-decoration {
300
+ -webkit-appearance: none;
301
+ }
302
+
303
+ /*
304
+ 1. Correct the inability to style clickable types in iOS and Safari.
305
+ 2. Change font properties to `inherit` in Safari.
306
+ */
307
+
308
+ ::-webkit-file-upload-button {
309
+ -webkit-appearance: button;
310
+ /* 1 */
311
+ font: inherit;
312
+ /* 2 */
313
+ }
314
+
315
+ /*
316
+ Add the correct display in Chrome and Safari.
317
+ */
318
+
319
+ summary {
320
+ display: list-item;
321
+ }
322
+
323
+ /*
324
+ Removes the default spacing and border for appropriate elements.
325
+ */
326
+
327
+ blockquote,
328
+ dl,
329
+ dd,
330
+ h1,
331
+ h2,
332
+ h3,
333
+ h4,
334
+ h5,
335
+ h6,
336
+ hr,
337
+ figure,
338
+ p,
339
+ pre {
340
+ margin: 0;
341
+ }
342
+
343
+ fieldset {
344
+ margin: 0;
345
+ padding: 0;
346
+ }
347
+
348
+ legend {
349
+ padding: 0;
350
+ }
351
+
352
+ ol,
353
+ ul,
354
+ menu {
355
+ list-style: none;
356
+ margin: 0;
357
+ padding: 0;
358
+ }
359
+
360
+ /*
361
+ Reset default styling for dialogs.
362
+ */
363
+
364
+ dialog {
365
+ padding: 0;
366
+ }
367
+
368
+ /*
369
+ Prevent resizing textareas horizontally by default.
370
+ */
371
+
372
+ textarea {
373
+ resize: vertical;
374
+ }
375
+
376
+ /*
377
+ 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
378
+ 2. Set the default placeholder color to the user's configured gray 400 color.
379
+ */
380
+
381
+ input::-moz-placeholder, textarea::-moz-placeholder {
382
+ opacity: 1;
383
+ /* 1 */
384
+ color: #9ca3af;
385
+ /* 2 */
386
+ }
387
+
388
+ input::placeholder,
389
+ textarea::placeholder {
390
+ opacity: 1;
391
+ /* 1 */
392
+ color: #9ca3af;
393
+ /* 2 */
394
+ }
395
+
396
+ /*
397
+ Set the default cursor for buttons.
398
+ */
399
+
400
+ button,
401
+ [role="button"] {
402
+ cursor: pointer;
403
+ }
404
+
405
+ /*
406
+ Make sure disabled buttons don't get the pointer cursor.
407
+ */
408
+
409
+ :disabled {
410
+ cursor: default;
411
+ }
412
+
413
+ /*
414
+ 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
415
+ 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
416
+ This can trigger a poorly considered lint error in some tools but is included by design.
417
+ */
418
+
419
+ img,
420
+ svg,
421
+ video,
422
+ canvas,
423
+ audio,
424
+ iframe,
425
+ embed,
426
+ object {
427
+ display: block;
428
+ /* 1 */
429
+ vertical-align: middle;
430
+ /* 2 */
431
+ }
432
+
433
+ /*
434
+ Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
435
+ */
436
+
437
+ img,
438
+ video {
439
+ max-width: 100%;
440
+ height: auto;
441
+ }
442
+
443
+ /* Make elements with the HTML hidden attribute stay hidden by default */
444
+
445
+ [hidden] {
446
+ display: none;
447
+ }
448
+
449
+ *, ::before, ::after {
450
+ --tw-border-spacing-x: 0;
451
+ --tw-border-spacing-y: 0;
452
+ --tw-translate-x: 0;
453
+ --tw-translate-y: 0;
454
+ --tw-rotate: 0;
455
+ --tw-skew-x: 0;
456
+ --tw-skew-y: 0;
457
+ --tw-scale-x: 1;
458
+ --tw-scale-y: 1;
459
+ --tw-pan-x: ;
460
+ --tw-pan-y: ;
461
+ --tw-pinch-zoom: ;
462
+ --tw-scroll-snap-strictness: proximity;
463
+ --tw-gradient-from-position: ;
464
+ --tw-gradient-via-position: ;
465
+ --tw-gradient-to-position: ;
466
+ --tw-ordinal: ;
467
+ --tw-slashed-zero: ;
468
+ --tw-numeric-figure: ;
469
+ --tw-numeric-spacing: ;
470
+ --tw-numeric-fraction: ;
471
+ --tw-ring-inset: ;
472
+ --tw-ring-offset-width: 0px;
473
+ --tw-ring-offset-color: #fff;
474
+ --tw-ring-color: rgb(59 130 246 / 0.5);
475
+ --tw-ring-offset-shadow: 0 0 #0000;
476
+ --tw-ring-shadow: 0 0 #0000;
477
+ --tw-shadow: 0 0 #0000;
478
+ --tw-shadow-colored: 0 0 #0000;
479
+ --tw-blur: ;
480
+ --tw-brightness: ;
481
+ --tw-contrast: ;
482
+ --tw-grayscale: ;
483
+ --tw-hue-rotate: ;
484
+ --tw-invert: ;
485
+ --tw-saturate: ;
486
+ --tw-sepia: ;
487
+ --tw-drop-shadow: ;
488
+ --tw-backdrop-blur: ;
489
+ --tw-backdrop-brightness: ;
490
+ --tw-backdrop-contrast: ;
491
+ --tw-backdrop-grayscale: ;
492
+ --tw-backdrop-hue-rotate: ;
493
+ --tw-backdrop-invert: ;
494
+ --tw-backdrop-opacity: ;
495
+ --tw-backdrop-saturate: ;
496
+ --tw-backdrop-sepia: ;
497
+ --tw-contain-size: ;
498
+ --tw-contain-layout: ;
499
+ --tw-contain-paint: ;
500
+ --tw-contain-style: ;
501
+ }
502
+
503
+ ::backdrop {
504
+ --tw-border-spacing-x: 0;
505
+ --tw-border-spacing-y: 0;
506
+ --tw-translate-x: 0;
507
+ --tw-translate-y: 0;
508
+ --tw-rotate: 0;
509
+ --tw-skew-x: 0;
510
+ --tw-skew-y: 0;
511
+ --tw-scale-x: 1;
512
+ --tw-scale-y: 1;
513
+ --tw-pan-x: ;
514
+ --tw-pan-y: ;
515
+ --tw-pinch-zoom: ;
516
+ --tw-scroll-snap-strictness: proximity;
517
+ --tw-gradient-from-position: ;
518
+ --tw-gradient-via-position: ;
519
+ --tw-gradient-to-position: ;
520
+ --tw-ordinal: ;
521
+ --tw-slashed-zero: ;
522
+ --tw-numeric-figure: ;
523
+ --tw-numeric-spacing: ;
524
+ --tw-numeric-fraction: ;
525
+ --tw-ring-inset: ;
526
+ --tw-ring-offset-width: 0px;
527
+ --tw-ring-offset-color: #fff;
528
+ --tw-ring-color: rgb(59 130 246 / 0.5);
529
+ --tw-ring-offset-shadow: 0 0 #0000;
530
+ --tw-ring-shadow: 0 0 #0000;
531
+ --tw-shadow: 0 0 #0000;
532
+ --tw-shadow-colored: 0 0 #0000;
533
+ --tw-blur: ;
534
+ --tw-brightness: ;
535
+ --tw-contrast: ;
536
+ --tw-grayscale: ;
537
+ --tw-hue-rotate: ;
538
+ --tw-invert: ;
539
+ --tw-saturate: ;
540
+ --tw-sepia: ;
541
+ --tw-drop-shadow: ;
542
+ --tw-backdrop-blur: ;
543
+ --tw-backdrop-brightness: ;
544
+ --tw-backdrop-contrast: ;
545
+ --tw-backdrop-grayscale: ;
546
+ --tw-backdrop-hue-rotate: ;
547
+ --tw-backdrop-invert: ;
548
+ --tw-backdrop-opacity: ;
549
+ --tw-backdrop-saturate: ;
550
+ --tw-backdrop-sepia: ;
551
+ --tw-contain-size: ;
552
+ --tw-contain-layout: ;
553
+ --tw-contain-paint: ;
554
+ --tw-contain-style: ;
555
+ }
556
+
557
+ .container {
558
+ width: 100%;
559
+ }
560
+
561
+ @media (min-width: 640px) {
562
+ .container {
563
+ max-width: 640px;
564
+ }
565
+ }
566
+
567
+ @media (min-width: 768px) {
568
+ .container {
569
+ max-width: 768px;
570
+ }
571
+ }
572
+
573
+ @media (min-width: 1024px) {
574
+ .container {
575
+ max-width: 1024px;
576
+ }
577
+ }
578
+
579
+ @media (min-width: 1280px) {
580
+ .container {
581
+ max-width: 1280px;
582
+ }
583
+ }
584
+
585
+ @media (min-width: 1536px) {
586
+ .container {
587
+ max-width: 1536px;
588
+ }
589
+ }
590
+
591
+ .pill {
592
+ border-radius: 9999px;
593
+ --tw-bg-opacity: 1;
594
+ background-color: rgb(226 232 240 / var(--tw-bg-opacity));
595
+ padding-left: 0.75rem;
596
+ padding-right: 0.75rem;
597
+ padding-top: 0.5rem;
598
+ padding-bottom: 0.5rem;
599
+ --tw-text-opacity: 1;
600
+ color: rgb(30 41 59 / var(--tw-text-opacity));
601
+ }
602
+
603
+ .pill:hover {
604
+ --tw-bg-opacity: 1;
605
+ background-color: rgb(79 70 229 / var(--tw-bg-opacity));
606
+ --tw-text-opacity: 1;
607
+ color: rgb(255 255 255 / var(--tw-text-opacity));
608
+ }
609
+
610
+ .card {
611
+ border-radius: 0.25rem;
612
+ --tw-bg-opacity: 1;
613
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
614
+ --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
615
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
616
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
617
+ }
618
+
619
+ .card__header {
620
+ border-bottom-width: 1px;
621
+ --tw-border-opacity: 1;
622
+ border-color: rgb(226 232 240 / var(--tw-border-opacity));
623
+ padding-left: 1.25rem;
624
+ padding-right: 1.25rem;
625
+ padding-top: 1rem;
626
+ padding-bottom: 1rem;
627
+ }
628
+
629
+ .card__content {
630
+ padding-left: 1.25rem;
631
+ padding-right: 1.25rem;
632
+ padding-top: 1rem;
633
+ padding-bottom: 1rem;
634
+ }
635
+
636
+ .card__title {
637
+ display: flex;
638
+ align-items: center;
639
+ gap: 0.5rem;
640
+ font-size: 0.875rem;
641
+ line-height: 1.25rem;
642
+ font-weight: 600;
643
+ text-transform: uppercase;
644
+ --tw-text-opacity: 1;
645
+ color: rgb(71 85 105 / var(--tw-text-opacity));
646
+ }
647
+
648
+ .card__value {
649
+ font-size: 1.125rem;
650
+ line-height: 1.75rem;
651
+ font-weight: 800;
652
+ text-transform: uppercase;
653
+ --tw-text-opacity: 1;
654
+ color: rgb(30 41 59 / var(--tw-text-opacity));
655
+ }
656
+
657
+ .table {
658
+ width: 100%;
659
+ }
660
+
661
+ .table > :not([hidden]) ~ :not([hidden]) {
662
+ --tw-divide-y-reverse: 0;
663
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
664
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
665
+ --tw-divide-opacity: 1;
666
+ border-color: rgb(226 232 240 / var(--tw-divide-opacity));
667
+ }
668
+
669
+ .table tbody > :not([hidden]) ~ :not([hidden]) {
670
+ --tw-divide-y-reverse: 0;
671
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
672
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
673
+ --tw-divide-opacity: 1;
674
+ border-color: rgb(226 232 240 / var(--tw-divide-opacity));
675
+ }
676
+
677
+ .table td {
678
+ padding-left: 0.75rem;
679
+ padding-right: 0.75rem;
680
+ padding-top: 0.5rem;
681
+ padding-bottom: 0.5rem;
682
+ text-align: left;
683
+ }
684
+
685
+ .table th {
686
+ padding-left: 0.75rem;
687
+ padding-right: 0.75rem;
688
+ padding-top: 0.5rem;
689
+ padding-bottom: 0.5rem;
690
+ text-align: left;
691
+ }
692
+
693
+ .table td:first-child {
694
+ padding-left: 0px;
695
+ }
696
+
697
+ .table td:last-child {
698
+ padding-right: 0px;
699
+ }
700
+
701
+ .table th:first-child {
702
+ padding-left: 0px;
703
+ }
704
+
705
+ .table th:last-child {
706
+ padding-right: 0px;
707
+ }
708
+
709
+ .mx-auto {
710
+ margin-left: auto;
711
+ margin-right: auto;
712
+ }
713
+
714
+ .flex {
715
+ display: flex;
716
+ }
717
+
718
+ .table {
719
+ display: table;
720
+ }
721
+
722
+ .grid {
723
+ display: grid;
724
+ }
725
+
726
+ .grid-flow-col {
727
+ grid-auto-flow: column;
728
+ }
729
+
730
+ .items-center {
731
+ align-items: center;
732
+ }
733
+
734
+ .justify-center {
735
+ justify-content: center;
736
+ }
737
+
738
+ .justify-between {
739
+ justify-content: space-between;
740
+ }
741
+
742
+ .justify-stretch {
743
+ justify-content: stretch;
744
+ }
745
+
746
+ .gap-2 {
747
+ gap: 0.5rem;
748
+ }
749
+
750
+ .gap-4 {
751
+ gap: 1rem;
752
+ }
753
+
754
+ .space-y-4 > :not([hidden]) ~ :not([hidden]) {
755
+ --tw-space-y-reverse: 0;
756
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
757
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse));
758
+ }
759
+
760
+ .rounded {
761
+ border-radius: 0.25rem;
762
+ }
763
+
764
+ .bg-indigo-600 {
765
+ --tw-bg-opacity: 1;
766
+ background-color: rgb(79 70 229 / var(--tw-bg-opacity));
767
+ }
768
+
769
+ .bg-slate-50 {
770
+ --tw-bg-opacity: 1;
771
+ background-color: rgb(248 250 252 / var(--tw-bg-opacity));
772
+ }
773
+
774
+ .px-3 {
775
+ padding-left: 0.75rem;
776
+ padding-right: 0.75rem;
777
+ }
778
+
779
+ .px-4 {
780
+ padding-left: 1rem;
781
+ padding-right: 1rem;
782
+ }
783
+
784
+ .py-2 {
785
+ padding-top: 0.5rem;
786
+ padding-bottom: 0.5rem;
787
+ }
788
+
789
+ .py-8 {
790
+ padding-top: 2rem;
791
+ padding-bottom: 2rem;
792
+ }
793
+
794
+ .text-center {
795
+ text-align: center;
796
+ }
797
+
798
+ .font-semibold {
799
+ font-weight: 600;
800
+ }
801
+
802
+ .text-white {
803
+ --tw-text-opacity: 1;
804
+ color: rgb(255 255 255 / var(--tw-text-opacity));
805
+ }
806
+
807
+ .hover\:bg-indigo-800:hover {
808
+ --tw-bg-opacity: 1;
809
+ background-color: rgb(55 48 163 / var(--tw-bg-opacity));
810
+ }