@a4ui/core 0.6.0 → 0.8.0

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.
@@ -0,0 +1,2903 @@
1
+ /* @a4ui/core/elements.css — precompiled styles for the Web Components bundle. */
2
+ /* A4ui — Spatial Glass design tokens + motion.
3
+ *
4
+ * Pure CSS (no @tailwind / @apply) so it can be imported directly by any
5
+ * consumer: `import 'a4ui/styles.css'`. Dark "night" theme is the default;
6
+ * `data-theme="light"` on the root opts into the light palette.
7
+ *
8
+ * Extracted verbatim from the source project
9
+ * (sonora precision/alfredorust/solid/src/index.css) — keep in sync until that
10
+ * app consumes this package instead. */
11
+
12
+ :root {
13
+ --background: 222 47% 7%;
14
+ --foreground: 213 31% 91%;
15
+ --card: 222 40% 11%;
16
+ --card-foreground: 213 31% 91%;
17
+ --muted: 217 33% 17%;
18
+ /* 75% (not 65%) for WCAG AA contrast on glass/dark surfaces (pa11y/axe). */
19
+ --muted-foreground: 215 25% 75%;
20
+ --border: 217 30% 22%;
21
+ --input: 217 30% 22%;
22
+ --primary: 217 91% 52%;
23
+ --primary-foreground: 0 0% 100%;
24
+ --accent: 199 89% 55%;
25
+ --accent-foreground: 0 0% 100%;
26
+ --ring: 217 91% 52%;
27
+ --destructive: 0 72% 52%;
28
+ --destructive-foreground: 0 0% 100%;
29
+
30
+ /* Semantic data colors (financial direction) — constant across themes. */
31
+ --data-emit: 160 84% 39%;
32
+ --data-received: 347 89% 61%;
33
+ --data-net: 199 89% 48%;
34
+
35
+ --font-sans: 'IBM Plex Sans', ui-sans-serif, system-ui, sans-serif;
36
+ --font-mono: 'IBM Plex Mono', ui-monospace, monospace;
37
+ --sidebar-w: 248px;
38
+ --sidebar-w-collapsed: 68px;
39
+
40
+ /* Shadow color for glass surfaces (consumed by the glass plugin in preset.js).
41
+ Undefined in the source project, so its .card box-shadow silently dropped —
42
+ defined here so the intended elevation renders. Low alpha in use, so one
43
+ dark value covers both themes. */
44
+ --shadow: 222 47% 4%;
45
+ --radius-xl: 1rem;
46
+ }
47
+
48
+ :root[data-theme='light'] {
49
+ --background: 214 32% 95%;
50
+ --foreground: 222 47% 11%;
51
+ --card: 0 0% 100%;
52
+ --card-foreground: 222 47% 11%;
53
+ --muted: 214 30% 92%;
54
+ /* 38% (not 47%) for WCAG AA contrast on light/glass surfaces (pa11y/axe). */
55
+ --muted-foreground: 215 22% 38%;
56
+ --border: 214 24% 84%;
57
+ --input: 214 32% 91%;
58
+ --primary: 217 91% 52%;
59
+ --primary-foreground: 0 0% 100%;
60
+ --accent: 199 89% 48%;
61
+ --accent-foreground: 0 0% 100%;
62
+ --ring: 217 91% 52%;
63
+ --destructive: 0 72% 50%;
64
+ --destructive-foreground: 0 0% 100%;
65
+ }
66
+
67
+ body {
68
+ background: hsl(var(--background));
69
+ color: hsl(var(--foreground));
70
+ font-family: var(--font-sans);
71
+ -webkit-font-smoothing: antialiased;
72
+ font-feature-settings: 'cv02', 'cv03', 'cv04';
73
+ }
74
+
75
+ /* ---- Motion (transform/opacity only, short & functional) --------------- */
76
+
77
+ /* Route/page cross-fade (AppShell wraps routed content in a <Transition>). */
78
+ .page-enter-active,
79
+ .page-exit-active {
80
+ transition: opacity 0.16s ease-out;
81
+ }
82
+ .page-enter,
83
+ .page-exit-to {
84
+ opacity: 0;
85
+ }
86
+
87
+ /* Modal — MUST be @keyframes (Kobalte Dialog presence listens for
88
+ animationend, not transitionend, or the exit never resolves). */
89
+ @keyframes modal-overlay-in {
90
+ from {
91
+ opacity: 0;
92
+ }
93
+ to {
94
+ opacity: 1;
95
+ }
96
+ }
97
+ @keyframes modal-overlay-out {
98
+ from {
99
+ opacity: 1;
100
+ }
101
+ to {
102
+ opacity: 0;
103
+ }
104
+ }
105
+ @keyframes modal-content-in {
106
+ from {
107
+ opacity: 0;
108
+ transform: scale(0.96) translateY(4px);
109
+ }
110
+ to {
111
+ opacity: 1;
112
+ transform: scale(1) translateY(0);
113
+ }
114
+ }
115
+ @keyframes modal-content-out {
116
+ from {
117
+ opacity: 1;
118
+ transform: scale(1) translateY(0);
119
+ }
120
+ to {
121
+ opacity: 0;
122
+ transform: scale(0.96) translateY(4px);
123
+ }
124
+ }
125
+ .modal-overlay[data-expanded] {
126
+ animation: modal-overlay-in 0.15s ease-out;
127
+ }
128
+ .modal-overlay[data-closed] {
129
+ animation: modal-overlay-out 0.15s ease-in;
130
+ }
131
+ .modal-content[data-expanded] {
132
+ animation: modal-content-in 0.18s ease-out;
133
+ }
134
+ .modal-content[data-closed] {
135
+ animation: modal-content-out 0.15s ease-in;
136
+ }
137
+
138
+ /* Toast — same animationend-only presence mechanism as Dialog. */
139
+ @keyframes toast-in {
140
+ from {
141
+ opacity: 0;
142
+ transform: translateX(16px);
143
+ }
144
+ to {
145
+ opacity: 1;
146
+ transform: translateX(0);
147
+ }
148
+ }
149
+ @keyframes toast-out {
150
+ from {
151
+ opacity: 1;
152
+ transform: translateX(0);
153
+ }
154
+ to {
155
+ opacity: 0;
156
+ transform: translateX(16px);
157
+ }
158
+ }
159
+ .toast-item[data-opened] {
160
+ animation: toast-in 0.2s ease-out;
161
+ }
162
+ .toast-item[data-closed] {
163
+ animation: toast-out 0.18s ease-in;
164
+ }
165
+
166
+ /* Table row enter/exit fade. */
167
+ .row-enter-active,
168
+ .row-exit-active {
169
+ transition: opacity 0.15s ease-out;
170
+ }
171
+ .row-enter,
172
+ .row-exit-to {
173
+ opacity: 0;
174
+ }
175
+
176
+ /* Drawer / Modal drawer-variant slide-over (Kobalte Dialog presence →
177
+ animationend keyframes, keyed off data-expanded/data-closed like Modal). */
178
+ @keyframes drawer-in {
179
+ from {
180
+ transform: translateX(100%);
181
+ }
182
+ to {
183
+ transform: translateX(0);
184
+ }
185
+ }
186
+ @keyframes drawer-out {
187
+ from {
188
+ transform: translateX(0);
189
+ }
190
+ to {
191
+ transform: translateX(100%);
192
+ }
193
+ }
194
+ .drawer-content[data-expanded] {
195
+ animation: drawer-in 0.28s cubic-bezier(0.16, 1, 0.3, 1);
196
+ }
197
+ .drawer-content[data-closed] {
198
+ animation: drawer-out 0.2s ease-in;
199
+ }
200
+
201
+ /* Reduced motion: resolve near-instantly rather than removing outright, so
202
+ libraries that gate DOM unmount on transitionend/animationend (Kobalte
203
+ Dialog/Toast, solid-transition-group) still fire the event. Add
204
+ `force-motion` to <html> to opt back in (the ⚡ / effects toggle). */
205
+ @media (prefers-reduced-motion: reduce) {
206
+ html:not(.force-motion) *,
207
+ html:not(.force-motion) *::before,
208
+ html:not(.force-motion) *::after {
209
+ animation-duration: 0.001ms !important;
210
+ animation-iteration-count: 1 !important;
211
+ transition-duration: 0.001ms !important;
212
+ scroll-behavior: auto !important;
213
+ }
214
+ }
215
+
216
+ /* A4ui — starfield backdrop styles for <SpaceBackground/>.
217
+ *
218
+ * Extracted from the source project's space-theme.css. Mount SpaceBackground as
219
+ * a single fixed full-viewport layer BEHIND all content (z-index 0), with app
220
+ * content at z-index >= 10 (AppShell already does this). Bundled into
221
+ * `a4ui/styles.css` after the component surfaces. */
222
+
223
+ #space {
224
+ position: fixed;
225
+ inset: 0;
226
+ z-index: 0;
227
+ pointer-events: none;
228
+ overflow: hidden;
229
+ }
230
+
231
+ /* Nebula tinted from the active theme (--primary / --accent / --destructive), so
232
+ switching palettes recolors the whole backdrop. Space's tokens keep it blue. */
233
+ #space .sky {
234
+ position: absolute;
235
+ inset: 0;
236
+ background:
237
+ radial-gradient(1200px 700px at 82% -8%, hsl(var(--primary) / 0.34), transparent 60%),
238
+ radial-gradient(900px 600px at 8% 12%, hsl(var(--accent) / 0.28), transparent 60%),
239
+ radial-gradient(1000px 800px at 50% 120%, hsl(var(--accent) / 0.22), transparent 55%),
240
+ radial-gradient(700px 500px at 30% 55%, hsl(var(--destructive) / 0.12), transparent 60%),
241
+ hsl(var(--background));
242
+ }
243
+ [data-theme='light'] #space .sky {
244
+ background:
245
+ radial-gradient(1100px 680px at 84% -10%, hsl(var(--primary) / 0.22), transparent 60%),
246
+ radial-gradient(900px 600px at 6% 8%, hsl(var(--accent) / 0.2), transparent 60%),
247
+ radial-gradient(1000px 820px at 50% 120%, hsl(var(--accent) / 0.16), transparent 55%),
248
+ radial-gradient(700px 500px at 30% 55%, hsl(var(--destructive) / 0.1), transparent 60%),
249
+ hsl(var(--background));
250
+ }
251
+ @keyframes nebulaShift {
252
+ 0%,
253
+ 100% {
254
+ filter: hue-rotate(0deg);
255
+ }
256
+ 50% {
257
+ filter: hue-rotate(18deg);
258
+ }
259
+ }
260
+
261
+ /* Aurora — dark theme only */
262
+ #space .aurora {
263
+ position: absolute;
264
+ top: -10%;
265
+ left: -10%;
266
+ right: -10%;
267
+ height: 46%;
268
+ background: linear-gradient(
269
+ 180deg,
270
+ hsl(var(--accent) / 0.16),
271
+ hsl(var(--primary) / 0.1) 45%,
272
+ transparent 80%
273
+ );
274
+ filter: blur(40px);
275
+ opacity: 0.55;
276
+ mix-blend-mode: screen;
277
+ }
278
+ [data-theme='light'] #space .aurora {
279
+ display: none;
280
+ }
281
+ @keyframes auroraSway {
282
+ 0%,
283
+ 100% {
284
+ transform: translateX(-2%) scaleY(1);
285
+ opacity: 0.5;
286
+ }
287
+ 50% {
288
+ transform: translateX(3%) scaleY(1.08);
289
+ opacity: 0.68;
290
+ }
291
+ }
292
+
293
+ /* Randomized starfield — each star is generated in SpaceBackground.tsx with a
294
+ random position/size/brightness/bloom, so there's no visible tiling pattern.
295
+ Static (no drift): moving the field behind the frosted cards re-blurs every
296
+ frame and felt laggy; a subset twinkles for life instead. */
297
+ #space #starfield {
298
+ position: absolute;
299
+ inset: 0;
300
+ }
301
+ [data-theme='light'] #space #starfield {
302
+ opacity: 0.85;
303
+ }
304
+ /* A few stars drift smoothly like the satellite: each is a tiny element moving
305
+ via its own transform (GPU-composited, cheap), NOT the whole field. Uses
306
+ `alternate` so it eases out and back with no loop jump. Per-star --dx/--dy. */
307
+ @keyframes starDrift {
308
+ from {
309
+ transform: translate(0, 0);
310
+ }
311
+ to {
312
+ transform: translate(var(--dx, 0), var(--dy, 0));
313
+ }
314
+ }
315
+
316
+ /* Rocket exhaust flame (custom SVG rocket in SpaceBackground.tsx) — flickers. */
317
+ .rk-flame {
318
+ transform-box: fill-box;
319
+ transform-origin: 50% 0%;
320
+ animation: rocketFlame 0.12s ease-in-out infinite alternate;
321
+ }
322
+ @keyframes rocketFlame {
323
+ from {
324
+ transform: scaleY(0.8);
325
+ opacity: 0.85;
326
+ }
327
+ to {
328
+ transform: scaleY(1.06);
329
+ opacity: 1;
330
+ }
331
+ }
332
+
333
+ /* Legacy tiled star layers (kept for parity; the current SpaceBackground scatters
334
+ individual stars into #starfield instead). Sized generously: small dots nearly
335
+ vanish under backdrop-filter blur, so keep them >= 2.5px. */
336
+ #space .stars {
337
+ position: absolute;
338
+ inset: -50%;
339
+ background-repeat: repeat;
340
+ background-image:
341
+ radial-gradient(4px 4px at 20px 30px, hsl(var(--foreground)), transparent),
342
+ radial-gradient(3.6px 3.6px at 120px 90px, hsl(var(--foreground)), transparent),
343
+ radial-gradient(3.2px 3.2px at 210px 160px, hsl(217 91% 78%), transparent),
344
+ radial-gradient(4.8px 4.8px at 300px 60px, hsl(199 89% 82%), transparent),
345
+ radial-gradient(3.4px 3.4px at 380px 220px, hsl(330 80% 84%), transparent),
346
+ radial-gradient(3px 3px at 90px 190px, hsl(var(--foreground)), transparent),
347
+ radial-gradient(2.8px 2.8px at 260px 250px, hsl(48 90% 82%), transparent);
348
+ background-size: 420px 300px;
349
+ opacity: 1;
350
+ animation: drift 140s linear infinite;
351
+ }
352
+ [data-theme='light'] #space .stars {
353
+ background-image:
354
+ radial-gradient(4px 4px at 20px 30px, hsl(38 92% 50%), transparent),
355
+ radial-gradient(3.6px 3.6px at 120px 90px, hsl(42 90% 52%), transparent),
356
+ radial-gradient(3.2px 3.2px at 210px 160px, hsl(32 88% 48%), transparent),
357
+ radial-gradient(4.8px 4.8px at 300px 60px, hsl(45 95% 55%), transparent),
358
+ radial-gradient(3.4px 3.4px at 380px 220px, hsl(28 85% 50%), transparent),
359
+ radial-gradient(3px 3px at 90px 190px, hsl(40 90% 50%), transparent),
360
+ radial-gradient(2.8px 2.8px at 260px 250px, hsl(48 90% 52%), transparent);
361
+ }
362
+ #space .stars.s2 {
363
+ background-size: 640px 480px;
364
+ opacity: 0.85;
365
+ animation-duration: 200s;
366
+ }
367
+ #space .stars.s3 {
368
+ background-size: 260px 190px;
369
+ opacity: 1;
370
+ animation-duration: 95s;
371
+ background-image:
372
+ radial-gradient(6px 6px at 40px 50px, hsl(var(--foreground)), transparent),
373
+ radial-gradient(5.6px 5.6px at 160px 130px, hsl(199 89% 85%), transparent),
374
+ radial-gradient(5.8px 5.8px at 250px 40px, hsl(275 80% 86%), transparent),
375
+ radial-gradient(5px 5px at 90px 20px, hsl(330 85% 85%), transparent);
376
+ }
377
+ [data-theme='light'] #space .stars.s3 {
378
+ opacity: 0.8;
379
+ background-image:
380
+ radial-gradient(6px 6px at 40px 50px, hsl(38 92% 50%), transparent),
381
+ radial-gradient(5.6px 5.6px at 160px 130px, hsl(45 95% 54%), transparent),
382
+ radial-gradient(5.8px 5.8px at 250px 40px, hsl(30 88% 48%), transparent),
383
+ radial-gradient(5px 5px at 90px 20px, hsl(50 92% 55%), transparent);
384
+ }
385
+ @keyframes drift {
386
+ from {
387
+ transform: translate3d(0, 0, 0);
388
+ }
389
+ to {
390
+ transform: translate3d(-420px, -300px, 0);
391
+ }
392
+ }
393
+
394
+ /* Individually-placed twinkling stars */
395
+ .twinkle {
396
+ position: absolute;
397
+ width: 5px;
398
+ height: 5px;
399
+ border-radius: 50%;
400
+ background: hsl(var(--foreground));
401
+ box-shadow: 0 0 14px 3px hsl(var(--foreground) / 0.9);
402
+ animation: twinkle 3.2s ease-in-out infinite;
403
+ }
404
+ [data-theme='light'] .twinkle {
405
+ background: hsl(40 92% 50%);
406
+ box-shadow: 0 0 14px 3px hsl(40 92% 50% / 0.85);
407
+ }
408
+ @keyframes twinkle {
409
+ 0%,
410
+ 100% {
411
+ opacity: 0.25;
412
+ transform: scale(0.6);
413
+ }
414
+ 50% {
415
+ opacity: 1;
416
+ transform: scale(1.15);
417
+ }
418
+ }
419
+
420
+ /* Constellations — thin line art connecting a handful of stars */
421
+ #space .constellation {
422
+ position: absolute;
423
+ opacity: 1;
424
+ }
425
+ [data-theme='light'] #space .constellation {
426
+ opacity: 0.6;
427
+ }
428
+ [data-theme='light'] #space .constellation .cline {
429
+ stroke: hsl(38 92% 50%) !important;
430
+ }
431
+ [data-theme='light'] #space .constellation .cdot {
432
+ fill: hsl(222 47% 20%) !important;
433
+ }
434
+
435
+ /* Planets / moons — decorative, corner-anchored, gentle float */
436
+ .planet {
437
+ border-radius: 50%;
438
+ }
439
+ .planet::after {
440
+ content: '';
441
+ position: absolute;
442
+ inset: -34% -55%;
443
+ border-radius: 50%;
444
+ border: 3px solid hsl(var(--foreground) / 0.18);
445
+ transform: rotate(-24deg);
446
+ }
447
+ .planet-glow {
448
+ border-radius: 50%;
449
+ filter: blur(2px);
450
+ }
451
+ @keyframes floaty {
452
+ 0%,
453
+ 100% {
454
+ transform: translateY(0) rotate(0deg);
455
+ }
456
+ 50% {
457
+ transform: translateY(-14px) rotate(4deg);
458
+ }
459
+ }
460
+ .floaty {
461
+ animation: floaty 12s ease-in-out infinite;
462
+ }
463
+ .floaty.slow {
464
+ animation-duration: 18s;
465
+ }
466
+
467
+ /* Asteroid belt (small drifting rocks) */
468
+ .asteroid {
469
+ border-radius: 40% 55% 50% 45%;
470
+ background: hsl(var(--foreground) / 0.35);
471
+ }
472
+ @keyframes asteroidDrift {
473
+ 0%,
474
+ 100% {
475
+ transform: translate(0, 0) rotate(0deg);
476
+ }
477
+ 50% {
478
+ transform: translate(-8px, 6px) rotate(25deg);
479
+ }
480
+ }
481
+
482
+ /* Shooting star — bright core + tapered glowing trail */
483
+ .shooter {
484
+ position: absolute;
485
+ height: 2.5px;
486
+ border-radius: 999px;
487
+ transform-origin: left center;
488
+ background: linear-gradient(
489
+ 90deg,
490
+ hsla(0, 0%, 100%, 0) 0%,
491
+ hsla(199, 90%, 85%, 0.55) 55%,
492
+ hsla(0, 0%, 100%, 0.98) 100%
493
+ );
494
+ filter: blur(0.2px) drop-shadow(0 0 3px hsla(199, 90%, 80%, 0.5));
495
+ }
496
+ .shooter::before {
497
+ content: '';
498
+ position: absolute;
499
+ right: -2px;
500
+ top: 50%;
501
+ width: 6px;
502
+ height: 6px;
503
+ border-radius: 50%;
504
+ transform: translateY(-50%);
505
+ background: radial-gradient(circle, #fff 0%, hsla(199, 95%, 88%, 0.95) 50%, transparent 75%);
506
+ box-shadow:
507
+ 0 0 8px 2px #fff,
508
+ 0 0 20px 7px hsla(199, 90%, 75%, 0.85),
509
+ 0 0 38px 14px hsla(199, 90%, 60%, 0.4);
510
+ }
511
+ .shooter::after {
512
+ content: '';
513
+ position: absolute;
514
+ left: 0;
515
+ top: 50%;
516
+ width: 55%;
517
+ height: 1px;
518
+ transform: translateY(-50%);
519
+ background: hsla(199, 85%, 92%, 0.65);
520
+ filter: blur(2px);
521
+ }
522
+
523
+ /* Satellite (drifting glyph, e.g. a lucide "satellite" icon) */
524
+ @keyframes satelliteDrift {
525
+ from {
526
+ transform: translate(0, 0) rotate(-18deg);
527
+ }
528
+ to {
529
+ transform: translate(126vw, 34vh) rotate(-18deg);
530
+ }
531
+ }
532
+ #satellite {
533
+ animation: satelliteDrift 46s linear infinite;
534
+ }
535
+
536
+ /* Cursor-following ambient glow (nebula that trails the pointer) */
537
+ #cursorGlow {
538
+ border-radius: 50%;
539
+ transform: translate(-50%, -50%);
540
+ background: radial-gradient(circle, hsl(217 91% 60% / 0.1), transparent 70%);
541
+ opacity: 0;
542
+ transition: opacity 0.4s ease;
543
+ }
544
+
545
+ @media (prefers-reduced-motion: reduce) {
546
+ html:not(.force-motion) #space .stars,
547
+ html:not(.force-motion) .twinkle,
548
+ html:not(.force-motion) .floaty,
549
+ html:not(.force-motion) .shooter,
550
+ html:not(.force-motion) #satellite,
551
+ html:not(.force-motion) .asteroid {
552
+ animation: none !important;
553
+ }
554
+ html:not(.force-motion) #cursorGlow {
555
+ display: none !important;
556
+ }
557
+ html:not(.force-motion) #space .sky,
558
+ html:not(.force-motion) #space .aurora {
559
+ animation: none !important;
560
+ }
561
+ .card.glow-edge::before {
562
+ display: none;
563
+ }
564
+ }
565
+
566
+ /* ---- Generic themed scenery (non-space themes) --------------------------
567
+ A themed nebula (same token-tinted gradients as the starfield) plus a field
568
+ of slowly floating motif glyphs — <ThemedScenery motifs={[...]} />. Lighter
569
+ than the bespoke SpaceBackground so every extra theme costs almost nothing. */
570
+ #scenery {
571
+ position: fixed;
572
+ inset: 0;
573
+ z-index: 0;
574
+ pointer-events: none;
575
+ overflow: hidden;
576
+ }
577
+ #scenery .themed-sky {
578
+ position: absolute;
579
+ inset: 0;
580
+ animation: sceneryPulse 16s ease-in-out infinite;
581
+ background:
582
+ radial-gradient(1200px 700px at 82% -8%, hsl(var(--primary) / 0.34), transparent 60%),
583
+ radial-gradient(900px 600px at 8% 12%, hsl(var(--accent) / 0.28), transparent 60%),
584
+ radial-gradient(1000px 800px at 50% 120%, hsl(var(--accent) / 0.22), transparent 55%),
585
+ radial-gradient(700px 500px at 30% 55%, hsl(var(--destructive) / 0.12), transparent 60%),
586
+ hsl(var(--background));
587
+ }
588
+ [data-theme='light'] #scenery .themed-sky {
589
+ background:
590
+ radial-gradient(1100px 680px at 84% -10%, hsl(var(--primary) / 0.22), transparent 60%),
591
+ radial-gradient(900px 600px at 6% 8%, hsl(var(--accent) / 0.2), transparent 60%),
592
+ radial-gradient(1000px 820px at 50% 120%, hsl(var(--accent) / 0.16), transparent 55%),
593
+ radial-gradient(700px 500px at 30% 55%, hsl(var(--destructive) / 0.1), transparent 60%),
594
+ hsl(var(--background));
595
+ }
596
+ #scenery .motif {
597
+ position: absolute;
598
+ user-select: none;
599
+ will-change: transform;
600
+ animation: motifFloat var(--dur, 9s) ease-in-out var(--delay, 0s) infinite;
601
+ }
602
+ @keyframes motifFloat {
603
+ 0%,
604
+ 100% {
605
+ transform: translateY(0) rotate(var(--r, 0deg));
606
+ }
607
+ 50% {
608
+ transform: translateY(-16px) rotate(calc(var(--r, 0deg) + 5deg));
609
+ }
610
+ }
611
+ /* Subtle nebula "breathing" so the themed backdrop isn't static. */
612
+ @keyframes sceneryPulse {
613
+ 0%,
614
+ 100% {
615
+ filter: brightness(1);
616
+ }
617
+ 50% {
618
+ filter: brightness(1.06);
619
+ }
620
+ }
621
+ @media (prefers-reduced-motion: reduce) {
622
+ html:not(.force-motion) #scenery .motif,
623
+ html:not(.force-motion) #scenery .themed-sky {
624
+ animation: none !important;
625
+ }
626
+ }
627
+
628
+ /* ---- Snow scenery (the "snow" theme) ------------------------------------ */
629
+ #snow,
630
+ #xmas {
631
+ position: fixed;
632
+ inset: 0;
633
+ z-index: 0;
634
+ pointer-events: none;
635
+ overflow: hidden;
636
+ }
637
+ #snow .snow-sky {
638
+ position: absolute;
639
+ inset: 0;
640
+ background:
641
+ radial-gradient(1200px 800px at 50% -12%, hsl(var(--primary) / 0.18), transparent 60%),
642
+ radial-gradient(900px 700px at 82% 8%, hsl(var(--accent) / 0.14), transparent 60%), hsl(var(--background));
643
+ }
644
+ /* Snowflakes (shared by snow + christmas). Each drifts down with a sideways sway. */
645
+ #snow .flake,
646
+ #xmas .flake {
647
+ position: absolute;
648
+ top: -12px;
649
+ border-radius: 50%;
650
+ background: #fff;
651
+ box-shadow: 0 0 4px rgba(255, 255, 255, 0.6);
652
+ will-change: transform;
653
+ }
654
+ [data-theme='light'] #snow .flake,
655
+ [data-theme='light'] #xmas .flake {
656
+ background: hsl(205 45% 82%);
657
+ box-shadow: 0 0 3px hsl(205 45% 72% / 0.6);
658
+ }
659
+ @keyframes snowFall {
660
+ 0% {
661
+ transform: translate(0, -12px);
662
+ }
663
+ 100% {
664
+ transform: translate(var(--sway, 12px), 112vh);
665
+ }
666
+ }
667
+ /* Snow settling at the bottom + a frosted cap on cards (snow theme only). */
668
+ #snow .snow-bank {
669
+ position: absolute;
670
+ inset: auto 0 0 0;
671
+ height: 9vh;
672
+ background: linear-gradient(to top, hsl(0 0% 100% / 0.5), transparent);
673
+ filter: blur(2px);
674
+ }
675
+ [data-theme='light'] #snow .snow-bank {
676
+ background: linear-gradient(to top, hsl(0 0% 100% / 0.95), transparent);
677
+ }
678
+ [data-scene='snow'] .card::after {
679
+ content: '';
680
+ position: absolute;
681
+ top: -3px;
682
+ left: 10px;
683
+ right: 10px;
684
+ height: 5px;
685
+ border-radius: 9999px;
686
+ background: hsl(0 0% 100% / 0.8);
687
+ filter: blur(1.5px);
688
+ pointer-events: none;
689
+ }
690
+
691
+ /* ---- Christmas scenery (the "christmas" theme) -------------------------- */
692
+ #xmas .xmas-sky {
693
+ position: absolute;
694
+ inset: 0;
695
+ background:
696
+ radial-gradient(1000px 700px at 50% -12%, hsl(var(--primary) / 0.14), transparent 55%),
697
+ radial-gradient(900px 600px at 15% 16%, hsl(var(--accent) / 0.16), transparent 60%),
698
+ hsl(var(--background));
699
+ }
700
+ #xmas .light {
701
+ position: absolute;
702
+ top: 10px;
703
+ width: 9px;
704
+ height: 9px;
705
+ border-radius: 50%;
706
+ animation: twinkleLight 2.2s ease-in-out infinite;
707
+ }
708
+ @keyframes twinkleLight {
709
+ 0%,
710
+ 100% {
711
+ opacity: 1;
712
+ box-shadow: 0 0 9px currentColor;
713
+ }
714
+ 50% {
715
+ opacity: 0.35;
716
+ box-shadow: 0 0 3px currentColor;
717
+ }
718
+ }
719
+ @media (prefers-reduced-motion: reduce) {
720
+ html:not(.force-motion) #snow .flake,
721
+ html:not(.force-motion) #xmas .flake,
722
+ html:not(.force-motion) #xmas .light {
723
+ animation: none !important;
724
+ }
725
+ }
726
+
727
+ *, ::before, ::after {
728
+ --tw-border-spacing-x: 0;
729
+ --tw-border-spacing-y: 0;
730
+ --tw-translate-x: 0;
731
+ --tw-translate-y: 0;
732
+ --tw-rotate: 0;
733
+ --tw-skew-x: 0;
734
+ --tw-skew-y: 0;
735
+ --tw-scale-x: 1;
736
+ --tw-scale-y: 1;
737
+ --tw-pan-x: ;
738
+ --tw-pan-y: ;
739
+ --tw-pinch-zoom: ;
740
+ --tw-scroll-snap-strictness: proximity;
741
+ --tw-gradient-from-position: ;
742
+ --tw-gradient-via-position: ;
743
+ --tw-gradient-to-position: ;
744
+ --tw-ordinal: ;
745
+ --tw-slashed-zero: ;
746
+ --tw-numeric-figure: ;
747
+ --tw-numeric-spacing: ;
748
+ --tw-numeric-fraction: ;
749
+ --tw-ring-inset: ;
750
+ --tw-ring-offset-width: 0px;
751
+ --tw-ring-offset-color: #fff;
752
+ --tw-ring-color: rgb(59 130 246 / 0.5);
753
+ --tw-ring-offset-shadow: 0 0 #0000;
754
+ --tw-ring-shadow: 0 0 #0000;
755
+ --tw-shadow: 0 0 #0000;
756
+ --tw-shadow-colored: 0 0 #0000;
757
+ --tw-blur: ;
758
+ --tw-brightness: ;
759
+ --tw-contrast: ;
760
+ --tw-grayscale: ;
761
+ --tw-hue-rotate: ;
762
+ --tw-invert: ;
763
+ --tw-saturate: ;
764
+ --tw-sepia: ;
765
+ --tw-drop-shadow: ;
766
+ --tw-backdrop-blur: ;
767
+ --tw-backdrop-brightness: ;
768
+ --tw-backdrop-contrast: ;
769
+ --tw-backdrop-grayscale: ;
770
+ --tw-backdrop-hue-rotate: ;
771
+ --tw-backdrop-invert: ;
772
+ --tw-backdrop-opacity: ;
773
+ --tw-backdrop-saturate: ;
774
+ --tw-backdrop-sepia: ;
775
+ --tw-contain-size: ;
776
+ --tw-contain-layout: ;
777
+ --tw-contain-paint: ;
778
+ --tw-contain-style: ;
779
+ }
780
+
781
+ ::backdrop {
782
+ --tw-border-spacing-x: 0;
783
+ --tw-border-spacing-y: 0;
784
+ --tw-translate-x: 0;
785
+ --tw-translate-y: 0;
786
+ --tw-rotate: 0;
787
+ --tw-skew-x: 0;
788
+ --tw-skew-y: 0;
789
+ --tw-scale-x: 1;
790
+ --tw-scale-y: 1;
791
+ --tw-pan-x: ;
792
+ --tw-pan-y: ;
793
+ --tw-pinch-zoom: ;
794
+ --tw-scroll-snap-strictness: proximity;
795
+ --tw-gradient-from-position: ;
796
+ --tw-gradient-via-position: ;
797
+ --tw-gradient-to-position: ;
798
+ --tw-ordinal: ;
799
+ --tw-slashed-zero: ;
800
+ --tw-numeric-figure: ;
801
+ --tw-numeric-spacing: ;
802
+ --tw-numeric-fraction: ;
803
+ --tw-ring-inset: ;
804
+ --tw-ring-offset-width: 0px;
805
+ --tw-ring-offset-color: #fff;
806
+ --tw-ring-color: rgb(59 130 246 / 0.5);
807
+ --tw-ring-offset-shadow: 0 0 #0000;
808
+ --tw-ring-shadow: 0 0 #0000;
809
+ --tw-shadow: 0 0 #0000;
810
+ --tw-shadow-colored: 0 0 #0000;
811
+ --tw-blur: ;
812
+ --tw-brightness: ;
813
+ --tw-contrast: ;
814
+ --tw-grayscale: ;
815
+ --tw-hue-rotate: ;
816
+ --tw-invert: ;
817
+ --tw-saturate: ;
818
+ --tw-sepia: ;
819
+ --tw-drop-shadow: ;
820
+ --tw-backdrop-blur: ;
821
+ --tw-backdrop-brightness: ;
822
+ --tw-backdrop-contrast: ;
823
+ --tw-backdrop-grayscale: ;
824
+ --tw-backdrop-hue-rotate: ;
825
+ --tw-backdrop-invert: ;
826
+ --tw-backdrop-opacity: ;
827
+ --tw-backdrop-saturate: ;
828
+ --tw-backdrop-sepia: ;
829
+ --tw-contain-size: ;
830
+ --tw-contain-layout: ;
831
+ --tw-contain-paint: ;
832
+ --tw-contain-style: ;
833
+ }/*
834
+ ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
835
+ *//*
836
+ 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
837
+ 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
838
+ */
839
+
840
+ *,
841
+ ::before,
842
+ ::after {
843
+ box-sizing: border-box; /* 1 */
844
+ border-width: 0; /* 2 */
845
+ border-style: solid; /* 2 */
846
+ border-color: #e5e7eb; /* 2 */
847
+ }
848
+
849
+ ::before,
850
+ ::after {
851
+ --tw-content: '';
852
+ }
853
+
854
+ /*
855
+ 1. Use a consistent sensible line-height in all browsers.
856
+ 2. Prevent adjustments of font size after orientation changes in iOS.
857
+ 3. Use a more readable tab size.
858
+ 4. Use the user's configured `sans` font-family by default.
859
+ 5. Use the user's configured `sans` font-feature-settings by default.
860
+ 6. Use the user's configured `sans` font-variation-settings by default.
861
+ 7. Disable tap highlights on iOS
862
+ */
863
+
864
+ html,
865
+ :host {
866
+ line-height: 1.5; /* 1 */
867
+ -webkit-text-size-adjust: 100%; /* 2 */
868
+ -moz-tab-size: 4; /* 3 */
869
+ tab-size: 4; /* 3 */
870
+ font-family: "IBM Plex Sans", ui-sans-serif, system-ui, sans-serif; /* 4 */
871
+ font-feature-settings: normal; /* 5 */
872
+ font-variation-settings: normal; /* 6 */
873
+ -webkit-tap-highlight-color: transparent; /* 7 */
874
+ }
875
+
876
+ /*
877
+ 1. Remove the margin in all browsers.
878
+ 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
879
+ */
880
+
881
+ body {
882
+ margin: 0; /* 1 */
883
+ line-height: inherit; /* 2 */
884
+ }
885
+
886
+ /*
887
+ 1. Add the correct height in Firefox.
888
+ 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
889
+ 3. Ensure horizontal rules are visible by default.
890
+ */
891
+
892
+ hr {
893
+ height: 0; /* 1 */
894
+ color: inherit; /* 2 */
895
+ border-top-width: 1px; /* 3 */
896
+ }
897
+
898
+ /*
899
+ Add the correct text decoration in Chrome, Edge, and Safari.
900
+ */
901
+
902
+ abbr:where([title]) {
903
+ text-decoration: underline dotted;
904
+ }
905
+
906
+ /*
907
+ Remove the default font size and weight for headings.
908
+ */
909
+
910
+ h1,
911
+ h2,
912
+ h3,
913
+ h4,
914
+ h5,
915
+ h6 {
916
+ font-size: inherit;
917
+ font-weight: inherit;
918
+ }
919
+
920
+ /*
921
+ Reset links to optimize for opt-in styling instead of opt-out.
922
+ */
923
+
924
+ a {
925
+ color: inherit;
926
+ text-decoration: inherit;
927
+ }
928
+
929
+ /*
930
+ Add the correct font weight in Edge and Safari.
931
+ */
932
+
933
+ b,
934
+ strong {
935
+ font-weight: bolder;
936
+ }
937
+
938
+ /*
939
+ 1. Use the user's configured `mono` font-family by default.
940
+ 2. Use the user's configured `mono` font-feature-settings by default.
941
+ 3. Use the user's configured `mono` font-variation-settings by default.
942
+ 4. Correct the odd `em` font sizing in all browsers.
943
+ */
944
+
945
+ code,
946
+ kbd,
947
+ samp,
948
+ pre {
949
+ font-family: "IBM Plex Mono", ui-monospace, monospace; /* 1 */
950
+ font-feature-settings: normal; /* 2 */
951
+ font-variation-settings: normal; /* 3 */
952
+ font-size: 1em; /* 4 */
953
+ }
954
+
955
+ /*
956
+ Add the correct font size in all browsers.
957
+ */
958
+
959
+ small {
960
+ font-size: 80%;
961
+ }
962
+
963
+ /*
964
+ Prevent `sub` and `sup` elements from affecting the line height in all browsers.
965
+ */
966
+
967
+ sub,
968
+ sup {
969
+ font-size: 75%;
970
+ line-height: 0;
971
+ position: relative;
972
+ vertical-align: baseline;
973
+ }
974
+
975
+ sub {
976
+ bottom: -0.25em;
977
+ }
978
+
979
+ sup {
980
+ top: -0.5em;
981
+ }
982
+
983
+ /*
984
+ 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)
985
+ 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)
986
+ 3. Remove gaps between table borders by default.
987
+ */
988
+
989
+ table {
990
+ text-indent: 0; /* 1 */
991
+ border-color: inherit; /* 2 */
992
+ border-collapse: collapse; /* 3 */
993
+ }
994
+
995
+ /*
996
+ 1. Change the font styles in all browsers.
997
+ 2. Remove the margin in Firefox and Safari.
998
+ 3. Remove default padding in all browsers.
999
+ */
1000
+
1001
+ button,
1002
+ input,
1003
+ optgroup,
1004
+ select,
1005
+ textarea {
1006
+ font-family: inherit; /* 1 */
1007
+ font-feature-settings: inherit; /* 1 */
1008
+ font-variation-settings: inherit; /* 1 */
1009
+ font-size: 100%; /* 1 */
1010
+ font-weight: inherit; /* 1 */
1011
+ line-height: inherit; /* 1 */
1012
+ letter-spacing: inherit; /* 1 */
1013
+ color: inherit; /* 1 */
1014
+ margin: 0; /* 2 */
1015
+ padding: 0; /* 3 */
1016
+ }
1017
+
1018
+ /*
1019
+ Remove the inheritance of text transform in Edge and Firefox.
1020
+ */
1021
+
1022
+ button,
1023
+ select {
1024
+ text-transform: none;
1025
+ }
1026
+
1027
+ /*
1028
+ 1. Correct the inability to style clickable types in iOS and Safari.
1029
+ 2. Remove default button styles.
1030
+ */
1031
+
1032
+ button,
1033
+ input:where([type='button']),
1034
+ input:where([type='reset']),
1035
+ input:where([type='submit']) {
1036
+ -webkit-appearance: button; /* 1 */
1037
+ background-color: transparent; /* 2 */
1038
+ background-image: none; /* 2 */
1039
+ }
1040
+
1041
+ /*
1042
+ Use the modern Firefox focus style for all focusable elements.
1043
+ */
1044
+
1045
+ :-moz-focusring {
1046
+ outline: auto;
1047
+ }
1048
+
1049
+ /*
1050
+ Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
1051
+ */
1052
+
1053
+ :-moz-ui-invalid {
1054
+ box-shadow: none;
1055
+ }
1056
+
1057
+ /*
1058
+ Add the correct vertical alignment in Chrome and Firefox.
1059
+ */
1060
+
1061
+ progress {
1062
+ vertical-align: baseline;
1063
+ }
1064
+
1065
+ /*
1066
+ Correct the cursor style of increment and decrement buttons in Safari.
1067
+ */
1068
+
1069
+ ::-webkit-inner-spin-button,
1070
+ ::-webkit-outer-spin-button {
1071
+ height: auto;
1072
+ }
1073
+
1074
+ /*
1075
+ 1. Correct the odd appearance in Chrome and Safari.
1076
+ 2. Correct the outline style in Safari.
1077
+ */
1078
+
1079
+ [type='search'] {
1080
+ -webkit-appearance: textfield; /* 1 */
1081
+ outline-offset: -2px; /* 2 */
1082
+ }
1083
+
1084
+ /*
1085
+ Remove the inner padding in Chrome and Safari on macOS.
1086
+ */
1087
+
1088
+ ::-webkit-search-decoration {
1089
+ -webkit-appearance: none;
1090
+ }
1091
+
1092
+ /*
1093
+ 1. Correct the inability to style clickable types in iOS and Safari.
1094
+ 2. Change font properties to `inherit` in Safari.
1095
+ */
1096
+
1097
+ ::-webkit-file-upload-button {
1098
+ -webkit-appearance: button; /* 1 */
1099
+ font: inherit; /* 2 */
1100
+ }
1101
+
1102
+ /*
1103
+ Add the correct display in Chrome and Safari.
1104
+ */
1105
+
1106
+ summary {
1107
+ display: list-item;
1108
+ }
1109
+
1110
+ /*
1111
+ Removes the default spacing and border for appropriate elements.
1112
+ */
1113
+
1114
+ blockquote,
1115
+ dl,
1116
+ dd,
1117
+ h1,
1118
+ h2,
1119
+ h3,
1120
+ h4,
1121
+ h5,
1122
+ h6,
1123
+ hr,
1124
+ figure,
1125
+ p,
1126
+ pre {
1127
+ margin: 0;
1128
+ }
1129
+
1130
+ fieldset {
1131
+ margin: 0;
1132
+ padding: 0;
1133
+ }
1134
+
1135
+ legend {
1136
+ padding: 0;
1137
+ }
1138
+
1139
+ ol,
1140
+ ul,
1141
+ menu {
1142
+ list-style: none;
1143
+ margin: 0;
1144
+ padding: 0;
1145
+ }
1146
+
1147
+ /*
1148
+ Reset default styling for dialogs.
1149
+ */
1150
+ dialog {
1151
+ padding: 0;
1152
+ }
1153
+
1154
+ /*
1155
+ Prevent resizing textareas horizontally by default.
1156
+ */
1157
+
1158
+ textarea {
1159
+ resize: vertical;
1160
+ }
1161
+
1162
+ /*
1163
+ 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
1164
+ 2. Set the default placeholder color to the user's configured gray 400 color.
1165
+ */
1166
+
1167
+ input::placeholder,
1168
+ textarea::placeholder {
1169
+ opacity: 1; /* 1 */
1170
+ color: #9ca3af; /* 2 */
1171
+ }
1172
+
1173
+ /*
1174
+ Set the default cursor for buttons.
1175
+ */
1176
+
1177
+ button,
1178
+ [role="button"] {
1179
+ cursor: pointer;
1180
+ }
1181
+
1182
+ /*
1183
+ Make sure disabled buttons don't get the pointer cursor.
1184
+ */
1185
+ :disabled {
1186
+ cursor: default;
1187
+ }
1188
+
1189
+ /*
1190
+ 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
1191
+ 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
1192
+ This can trigger a poorly considered lint error in some tools but is included by design.
1193
+ */
1194
+
1195
+ img,
1196
+ svg,
1197
+ video,
1198
+ canvas,
1199
+ audio,
1200
+ iframe,
1201
+ embed,
1202
+ object {
1203
+ display: block; /* 1 */
1204
+ vertical-align: middle; /* 2 */
1205
+ }
1206
+
1207
+ /*
1208
+ Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
1209
+ */
1210
+
1211
+ img,
1212
+ video {
1213
+ max-width: 100%;
1214
+ height: auto;
1215
+ }
1216
+
1217
+ /* Make elements with the HTML hidden attribute stay hidden by default */
1218
+ [hidden]:where(:not([hidden="until-found"])) {
1219
+ display: none;
1220
+ }
1221
+ .\!container {
1222
+ width: 100% !important;
1223
+ }
1224
+ .container {
1225
+ width: 100%;
1226
+ }
1227
+ @media (min-width: 640px) {
1228
+
1229
+ .\!container {
1230
+ max-width: 640px !important;
1231
+ }
1232
+
1233
+ .container {
1234
+ max-width: 640px;
1235
+ }
1236
+ }
1237
+ @media (min-width: 768px) {
1238
+
1239
+ .\!container {
1240
+ max-width: 768px !important;
1241
+ }
1242
+
1243
+ .container {
1244
+ max-width: 768px;
1245
+ }
1246
+ }
1247
+ @media (min-width: 1024px) {
1248
+
1249
+ .\!container {
1250
+ max-width: 1024px !important;
1251
+ }
1252
+
1253
+ .container {
1254
+ max-width: 1024px;
1255
+ }
1256
+ }
1257
+ @media (min-width: 1280px) {
1258
+
1259
+ .\!container {
1260
+ max-width: 1280px !important;
1261
+ }
1262
+
1263
+ .container {
1264
+ max-width: 1280px;
1265
+ }
1266
+ }
1267
+ @media (min-width: 1536px) {
1268
+
1269
+ .\!container {
1270
+ max-width: 1536px !important;
1271
+ }
1272
+
1273
+ .container {
1274
+ max-width: 1536px;
1275
+ }
1276
+ }
1277
+ .card {
1278
+ position: relative;
1279
+ background: hsl(var(--card) / 0.55);
1280
+ backdrop-filter: blur(8px) saturate(150%);
1281
+ -webkit-backdrop-filter: blur(8px) saturate(150%);
1282
+ border: 1px solid hsl(var(--foreground) / 0.16);
1283
+ border-radius: var(--radius-xl, 1rem);
1284
+ box-shadow: 0 1px 2px hsl(var(--shadow) / 0.05), 0 4px 12px hsl(var(--shadow) / 0.1);
1285
+ transition: transform .25s cubic-bezier(.16,1,.3,1), box-shadow .25s ease, border-color .2s ease;
1286
+ }
1287
+ [data-theme='light'] .card {
1288
+ background: hsl(var(--card) / 0.72);
1289
+ border: 1px solid hsl(var(--border));
1290
+ }
1291
+ .card.glow-edge::before {
1292
+ content: '';
1293
+ position: absolute;
1294
+ inset: 0;
1295
+ border-radius: inherit;
1296
+ padding: 1px;
1297
+ background: radial-gradient(220px circle at var(--mx, 50%) var(--my, 50%), hsl(var(--primary) / .9), hsl(var(--accent) / .25) 45%, transparent 70%);
1298
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1299
+ -webkit-mask-composite: xor;
1300
+ mask-composite: exclude;
1301
+ opacity: 0;
1302
+ transition: opacity .35s ease;
1303
+ pointer-events: none;
1304
+ }
1305
+ .card.glow-edge:hover::before {
1306
+ opacity: 1;
1307
+ }
1308
+ @media (prefers-reduced-motion: reduce) {
1309
+
1310
+ .card.glow-edge::before {
1311
+ display: none;
1312
+ }
1313
+ }
1314
+ [data-theme='light'] .card.glow-edge::before {
1315
+ padding: 1.5px;
1316
+ background: radial-gradient(240px circle at var(--mx, 50%) var(--my, 50%), hsl(var(--primary) / 1), hsl(var(--accent) / 0.55) 42%, transparent 72%);
1317
+ }
1318
+ .bg-glass {
1319
+ background: hsl(var(--card) / 0.72);
1320
+ backdrop-filter: blur(14px) saturate(160%);
1321
+ -webkit-backdrop-filter: blur(14px) saturate(160%);
1322
+ border: 1px solid hsl(var(--foreground) / 0.14);
1323
+ }
1324
+ [data-theme='light'] .bg-glass {
1325
+ background: hsl(var(--card) / 0.85);
1326
+ border: 1px solid hsl(var(--border));
1327
+ }
1328
+ html.calm .glow-edge::before {
1329
+ display: none !important;
1330
+ }
1331
+ html.calm .badge {
1332
+ background-color: hsl(var(--muted)) !important;
1333
+ color: hsl(var(--foreground)) !important;
1334
+ --tw-ring-color: hsl(var(--border)) !important;
1335
+ }
1336
+ html.calm .card, html.calm .bg-glass {
1337
+ background: hsl(var(--card));
1338
+ backdrop-filter: none;
1339
+ -webkit-backdrop-filter: none;
1340
+ }
1341
+ html.calm .tile-glass {
1342
+ background: hsl(var(--muted));
1343
+ border-color: hsl(var(--border));
1344
+ }
1345
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
1346
+
1347
+ .card {
1348
+ background: hsl(var(--card) / 0.92);
1349
+ }
1350
+
1351
+ [data-theme='light'] .card {
1352
+ background: hsl(var(--card) / 0.96);
1353
+ }
1354
+
1355
+ .bg-glass {
1356
+ background: hsl(var(--card) / 0.95);
1357
+ }
1358
+
1359
+ [data-theme='light'] .bg-glass {
1360
+ background: hsl(var(--card) / 0.97);
1361
+ }
1362
+ }
1363
+ @media (prefers-reduced-transparency: reduce) {
1364
+
1365
+ .card {
1366
+ background: hsl(var(--card) / 0.92);
1367
+ }
1368
+
1369
+ [data-theme='light'] .card {
1370
+ background: hsl(var(--card) / 0.96);
1371
+ }
1372
+
1373
+ .bg-glass {
1374
+ background: hsl(var(--card) / 0.95);
1375
+ }
1376
+
1377
+ [data-theme='light'] .bg-glass {
1378
+ background: hsl(var(--card) / 0.97);
1379
+ }
1380
+ }
1381
+ .pointer-events-none {
1382
+ pointer-events: none;
1383
+ }
1384
+ .visible {
1385
+ visibility: visible;
1386
+ }
1387
+ .invisible {
1388
+ visibility: hidden;
1389
+ }
1390
+ .collapse {
1391
+ visibility: collapse;
1392
+ }
1393
+ .static {
1394
+ position: static;
1395
+ }
1396
+ .fixed {
1397
+ position: fixed;
1398
+ }
1399
+ .absolute {
1400
+ position: absolute;
1401
+ }
1402
+ .relative {
1403
+ position: relative;
1404
+ }
1405
+ .sticky {
1406
+ position: sticky;
1407
+ }
1408
+ .inset-0 {
1409
+ inset: 0px;
1410
+ }
1411
+ .inset-x-0 {
1412
+ left: 0px;
1413
+ right: 0px;
1414
+ }
1415
+ .-bottom-6 {
1416
+ bottom: -1.5rem;
1417
+ }
1418
+ .-right-1 {
1419
+ right: -0.25rem;
1420
+ }
1421
+ .-top-1 {
1422
+ top: -0.25rem;
1423
+ }
1424
+ .-top-1\.5 {
1425
+ top: -0.375rem;
1426
+ }
1427
+ .bottom-0 {
1428
+ bottom: 0px;
1429
+ }
1430
+ .bottom-4 {
1431
+ bottom: 1rem;
1432
+ }
1433
+ .bottom-6 {
1434
+ bottom: 1.5rem;
1435
+ }
1436
+ .left-2 {
1437
+ left: 0.5rem;
1438
+ }
1439
+ .left-6 {
1440
+ left: 1.5rem;
1441
+ }
1442
+ .left-\[calc\(0\.5rem\+0\.375rem\)\] {
1443
+ left: calc(0.5rem + 0.375rem);
1444
+ }
1445
+ .right-2 {
1446
+ right: 0.5rem;
1447
+ }
1448
+ .right-4 {
1449
+ right: 1rem;
1450
+ }
1451
+ .right-6 {
1452
+ right: 1.5rem;
1453
+ }
1454
+ .top-0 {
1455
+ top: 0px;
1456
+ }
1457
+ .top-1\/2 {
1458
+ top: 50%;
1459
+ }
1460
+ .top-2 {
1461
+ top: 0.5rem;
1462
+ }
1463
+ .top-3 {
1464
+ top: 0.75rem;
1465
+ }
1466
+ .top-\[14vh\] {
1467
+ top: 14vh;
1468
+ }
1469
+ .isolate {
1470
+ isolation: isolate;
1471
+ }
1472
+ .z-0 {
1473
+ z-index: 0;
1474
+ }
1475
+ .z-10 {
1476
+ z-index: 10;
1477
+ }
1478
+ .z-40 {
1479
+ z-index: 40;
1480
+ }
1481
+ .z-50 {
1482
+ z-index: 50;
1483
+ }
1484
+ .z-\[100\] {
1485
+ z-index: 100;
1486
+ }
1487
+ .z-\[101\] {
1488
+ z-index: 101;
1489
+ }
1490
+ .z-\[1\] {
1491
+ z-index: 1;
1492
+ }
1493
+ .m-0 {
1494
+ margin: 0px;
1495
+ }
1496
+ .mx-2 {
1497
+ margin-left: 0.5rem;
1498
+ margin-right: 0.5rem;
1499
+ }
1500
+ .mx-4 {
1501
+ margin-left: 1rem;
1502
+ margin-right: 1rem;
1503
+ }
1504
+ .mx-auto {
1505
+ margin-left: auto;
1506
+ margin-right: auto;
1507
+ }
1508
+ .-ml-2 {
1509
+ margin-left: -0.5rem;
1510
+ }
1511
+ .-mt-1 {
1512
+ margin-top: -0.25rem;
1513
+ }
1514
+ .mb-1 {
1515
+ margin-bottom: 0.25rem;
1516
+ }
1517
+ .mb-2 {
1518
+ margin-bottom: 0.5rem;
1519
+ }
1520
+ .ml-4 {
1521
+ margin-left: 1rem;
1522
+ }
1523
+ .mt-0\.5 {
1524
+ margin-top: 0.125rem;
1525
+ }
1526
+ .mt-1 {
1527
+ margin-top: 0.25rem;
1528
+ }
1529
+ .mt-2 {
1530
+ margin-top: 0.5rem;
1531
+ }
1532
+ .mt-3 {
1533
+ margin-top: 0.75rem;
1534
+ }
1535
+ .mt-4 {
1536
+ margin-top: 1rem;
1537
+ }
1538
+ .mt-6 {
1539
+ margin-top: 1.5rem;
1540
+ }
1541
+ .block {
1542
+ display: block;
1543
+ }
1544
+ .inline-block {
1545
+ display: inline-block;
1546
+ }
1547
+ .inline {
1548
+ display: inline;
1549
+ }
1550
+ .flex {
1551
+ display: flex;
1552
+ }
1553
+ .inline-flex {
1554
+ display: inline-flex;
1555
+ }
1556
+ .table {
1557
+ display: table;
1558
+ }
1559
+ .grid {
1560
+ display: grid;
1561
+ }
1562
+ .inline-grid {
1563
+ display: inline-grid;
1564
+ }
1565
+ .contents {
1566
+ display: contents;
1567
+ }
1568
+ .hidden {
1569
+ display: none;
1570
+ }
1571
+ .size-3 {
1572
+ width: 0.75rem;
1573
+ height: 0.75rem;
1574
+ }
1575
+ .h-0\.5 {
1576
+ height: 0.125rem;
1577
+ }
1578
+ .h-1 {
1579
+ height: 0.25rem;
1580
+ }
1581
+ .h-1\.5 {
1582
+ height: 0.375rem;
1583
+ }
1584
+ .h-10 {
1585
+ height: 2.5rem;
1586
+ }
1587
+ .h-11 {
1588
+ height: 2.75rem;
1589
+ }
1590
+ .h-12 {
1591
+ height: 3rem;
1592
+ }
1593
+ .h-14 {
1594
+ height: 3.5rem;
1595
+ }
1596
+ .h-16 {
1597
+ height: 4rem;
1598
+ }
1599
+ .h-2 {
1600
+ height: 0.5rem;
1601
+ }
1602
+ .h-3 {
1603
+ height: 0.75rem;
1604
+ }
1605
+ .h-3\.5 {
1606
+ height: 0.875rem;
1607
+ }
1608
+ .h-4 {
1609
+ height: 1rem;
1610
+ }
1611
+ .h-5 {
1612
+ height: 1.25rem;
1613
+ }
1614
+ .h-6 {
1615
+ height: 1.5rem;
1616
+ }
1617
+ .h-64 {
1618
+ height: 16rem;
1619
+ }
1620
+ .h-8 {
1621
+ height: 2rem;
1622
+ }
1623
+ .h-9 {
1624
+ height: 2.25rem;
1625
+ }
1626
+ .h-\[18px\] {
1627
+ height: 18px;
1628
+ }
1629
+ .h-\[1em\] {
1630
+ height: 1em;
1631
+ }
1632
+ .h-\[65vh\] {
1633
+ height: 65vh;
1634
+ }
1635
+ .h-full {
1636
+ height: 100%;
1637
+ }
1638
+ .h-px {
1639
+ height: 1px;
1640
+ }
1641
+ .max-h-48 {
1642
+ max-height: 12rem;
1643
+ }
1644
+ .max-h-60 {
1645
+ max-height: 15rem;
1646
+ }
1647
+ .max-h-64 {
1648
+ max-height: 16rem;
1649
+ }
1650
+ .max-h-80 {
1651
+ max-height: 20rem;
1652
+ }
1653
+ .max-h-96 {
1654
+ max-height: 24rem;
1655
+ }
1656
+ .max-h-\[85vh\] {
1657
+ max-height: 85vh;
1658
+ }
1659
+ .min-h-4 {
1660
+ min-height: 1rem;
1661
+ }
1662
+ .min-h-\[80px\] {
1663
+ min-height: 80px;
1664
+ }
1665
+ .min-h-screen {
1666
+ min-height: 100vh;
1667
+ }
1668
+ .w-0\.5 {
1669
+ width: 0.125rem;
1670
+ }
1671
+ .w-1 {
1672
+ width: 0.25rem;
1673
+ }
1674
+ .w-1\.5 {
1675
+ width: 0.375rem;
1676
+ }
1677
+ .w-11 {
1678
+ width: 2.75rem;
1679
+ }
1680
+ .w-12 {
1681
+ width: 3rem;
1682
+ }
1683
+ .w-14 {
1684
+ width: 3.5rem;
1685
+ }
1686
+ .w-16 {
1687
+ width: 4rem;
1688
+ }
1689
+ .w-2 {
1690
+ width: 0.5rem;
1691
+ }
1692
+ .w-3 {
1693
+ width: 0.75rem;
1694
+ }
1695
+ .w-3\.5 {
1696
+ width: 0.875rem;
1697
+ }
1698
+ .w-32 {
1699
+ width: 8rem;
1700
+ }
1701
+ .w-4 {
1702
+ width: 1rem;
1703
+ }
1704
+ .w-48 {
1705
+ width: 12rem;
1706
+ }
1707
+ .w-5 {
1708
+ width: 1.25rem;
1709
+ }
1710
+ .w-56 {
1711
+ width: 14rem;
1712
+ }
1713
+ .w-6 {
1714
+ width: 1.5rem;
1715
+ }
1716
+ .w-72 {
1717
+ width: 18rem;
1718
+ }
1719
+ .w-8 {
1720
+ width: 2rem;
1721
+ }
1722
+ .w-80 {
1723
+ width: 20rem;
1724
+ }
1725
+ .w-9 {
1726
+ width: 2.25rem;
1727
+ }
1728
+ .w-\[0\.62em\] {
1729
+ width: 0.62em;
1730
+ }
1731
+ .w-\[18px\] {
1732
+ width: 18px;
1733
+ }
1734
+ .w-full {
1735
+ width: 100%;
1736
+ }
1737
+ .w-max {
1738
+ width: max-content;
1739
+ }
1740
+ .w-px {
1741
+ width: 1px;
1742
+ }
1743
+ .min-w-0 {
1744
+ min-width: 0px;
1745
+ }
1746
+ .min-w-4 {
1747
+ min-width: 1rem;
1748
+ }
1749
+ .min-w-\[1\.5rem\] {
1750
+ min-width: 1.5rem;
1751
+ }
1752
+ .min-w-\[10rem\] {
1753
+ min-width: 10rem;
1754
+ }
1755
+ .max-w-\[520px\] {
1756
+ max-width: 520px;
1757
+ }
1758
+ .max-w-\[90vw\] {
1759
+ max-width: 90vw;
1760
+ }
1761
+ .max-w-lg {
1762
+ max-width: 32rem;
1763
+ }
1764
+ .max-w-md {
1765
+ max-width: 28rem;
1766
+ }
1767
+ .max-w-sm {
1768
+ max-width: 24rem;
1769
+ }
1770
+ .max-w-xs {
1771
+ max-width: 20rem;
1772
+ }
1773
+ .flex-1 {
1774
+ flex: 1 1 0%;
1775
+ }
1776
+ .shrink-0 {
1777
+ flex-shrink: 0;
1778
+ }
1779
+ .border-collapse {
1780
+ border-collapse: collapse;
1781
+ }
1782
+ .-translate-x-1\/2 {
1783
+ --tw-translate-x: -50%;
1784
+ 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));
1785
+ }
1786
+ .-translate-y-1\/2 {
1787
+ --tw-translate-y: -50%;
1788
+ 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));
1789
+ }
1790
+ .translate-y-0 {
1791
+ --tw-translate-y: 0px;
1792
+ 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));
1793
+ }
1794
+ .-rotate-90 {
1795
+ --tw-rotate: -90deg;
1796
+ 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));
1797
+ }
1798
+ .rotate-180 {
1799
+ --tw-rotate: 180deg;
1800
+ 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));
1801
+ }
1802
+ .rotate-45 {
1803
+ --tw-rotate: 45deg;
1804
+ 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));
1805
+ }
1806
+ .rotate-90 {
1807
+ --tw-rotate: 90deg;
1808
+ 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));
1809
+ }
1810
+ .transform {
1811
+ 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));
1812
+ }
1813
+ @keyframes pulse {
1814
+
1815
+ 50% {
1816
+ opacity: .5;
1817
+ }
1818
+ }
1819
+ .animate-pulse {
1820
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
1821
+ }
1822
+ @keyframes spin {
1823
+
1824
+ to {
1825
+ transform: rotate(360deg);
1826
+ }
1827
+ }
1828
+ .animate-spin {
1829
+ animation: spin 1s linear infinite;
1830
+ }
1831
+ .cursor-col-resize {
1832
+ cursor: col-resize;
1833
+ }
1834
+ .cursor-grab {
1835
+ cursor: grab;
1836
+ }
1837
+ .cursor-not-allowed {
1838
+ cursor: not-allowed;
1839
+ }
1840
+ .cursor-pointer {
1841
+ cursor: pointer;
1842
+ }
1843
+ .cursor-row-resize {
1844
+ cursor: row-resize;
1845
+ }
1846
+ .cursor-zoom-in {
1847
+ cursor: zoom-in;
1848
+ }
1849
+ .select-none {
1850
+ user-select: none;
1851
+ }
1852
+ .resize-y {
1853
+ resize: vertical;
1854
+ }
1855
+ .resize {
1856
+ resize: both;
1857
+ }
1858
+ .list-none {
1859
+ list-style-type: none;
1860
+ }
1861
+ .grid-cols-1 {
1862
+ grid-template-columns: repeat(1, minmax(0, 1fr));
1863
+ }
1864
+ .grid-cols-7 {
1865
+ grid-template-columns: repeat(7, minmax(0, 1fr));
1866
+ }
1867
+ .flex-row {
1868
+ flex-direction: row;
1869
+ }
1870
+ .flex-col {
1871
+ flex-direction: column;
1872
+ }
1873
+ .flex-wrap {
1874
+ flex-wrap: wrap;
1875
+ }
1876
+ .place-items-center {
1877
+ place-items: center;
1878
+ }
1879
+ .items-start {
1880
+ align-items: flex-start;
1881
+ }
1882
+ .items-center {
1883
+ align-items: center;
1884
+ }
1885
+ .items-baseline {
1886
+ align-items: baseline;
1887
+ }
1888
+ .items-stretch {
1889
+ align-items: stretch;
1890
+ }
1891
+ .justify-end {
1892
+ justify-content: flex-end;
1893
+ }
1894
+ .justify-center {
1895
+ justify-content: center;
1896
+ }
1897
+ .justify-between {
1898
+ justify-content: space-between;
1899
+ }
1900
+ .gap-0\.5 {
1901
+ gap: 0.125rem;
1902
+ }
1903
+ .gap-1 {
1904
+ gap: 0.25rem;
1905
+ }
1906
+ .gap-1\.5 {
1907
+ gap: 0.375rem;
1908
+ }
1909
+ .gap-2 {
1910
+ gap: 0.5rem;
1911
+ }
1912
+ .gap-3 {
1913
+ gap: 0.75rem;
1914
+ }
1915
+ .gap-4 {
1916
+ gap: 1rem;
1917
+ }
1918
+ .gap-6 {
1919
+ gap: 1.5rem;
1920
+ }
1921
+ .gap-x-6 {
1922
+ column-gap: 1.5rem;
1923
+ }
1924
+ .space-y-0\.5 > :not([hidden]) ~ :not([hidden]) {
1925
+ --tw-space-y-reverse: 0;
1926
+ margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));
1927
+ margin-bottom: calc(0.125rem * var(--tw-space-y-reverse));
1928
+ }
1929
+ .space-y-1\.5 > :not([hidden]) ~ :not([hidden]) {
1930
+ --tw-space-y-reverse: 0;
1931
+ margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));
1932
+ margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));
1933
+ }
1934
+ .space-y-4 > :not([hidden]) ~ :not([hidden]) {
1935
+ --tw-space-y-reverse: 0;
1936
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
1937
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse));
1938
+ }
1939
+ .divide-y > :not([hidden]) ~ :not([hidden]) {
1940
+ --tw-divide-y-reverse: 0;
1941
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
1942
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
1943
+ }
1944
+ .divide-border > :not([hidden]) ~ :not([hidden]) {
1945
+ --tw-divide-opacity: 1;
1946
+ border-color: hsl(var(--border) / var(--tw-divide-opacity, 1));
1947
+ }
1948
+ .self-stretch {
1949
+ align-self: stretch;
1950
+ }
1951
+ .overflow-auto {
1952
+ overflow: auto;
1953
+ }
1954
+ .overflow-hidden {
1955
+ overflow: hidden;
1956
+ }
1957
+ .overflow-x-auto {
1958
+ overflow-x: auto;
1959
+ }
1960
+ .overflow-y-auto {
1961
+ overflow-y: auto;
1962
+ }
1963
+ .truncate {
1964
+ overflow: hidden;
1965
+ text-overflow: ellipsis;
1966
+ white-space: nowrap;
1967
+ }
1968
+ .whitespace-nowrap {
1969
+ white-space: nowrap;
1970
+ }
1971
+ .break-words {
1972
+ overflow-wrap: break-word;
1973
+ }
1974
+ .rounded {
1975
+ border-radius: 0.25rem;
1976
+ }
1977
+ .rounded-full {
1978
+ border-radius: 9999px;
1979
+ }
1980
+ .rounded-lg {
1981
+ border-radius: 0.5rem;
1982
+ }
1983
+ .rounded-md {
1984
+ border-radius: 0.375rem;
1985
+ }
1986
+ .rounded-sm {
1987
+ border-radius: 0.125rem;
1988
+ }
1989
+ .rounded-xl {
1990
+ border-radius: 1rem;
1991
+ }
1992
+ .rounded-l-md {
1993
+ border-top-left-radius: 0.375rem;
1994
+ border-bottom-left-radius: 0.375rem;
1995
+ }
1996
+ .rounded-r-md {
1997
+ border-top-right-radius: 0.375rem;
1998
+ border-bottom-right-radius: 0.375rem;
1999
+ }
2000
+ .border {
2001
+ border-width: 1px;
2002
+ }
2003
+ .border-0 {
2004
+ border-width: 0px;
2005
+ }
2006
+ .border-2 {
2007
+ border-width: 2px;
2008
+ }
2009
+ .border-y {
2010
+ border-top-width: 1px;
2011
+ border-bottom-width: 1px;
2012
+ }
2013
+ .border-b {
2014
+ border-bottom-width: 1px;
2015
+ }
2016
+ .border-l {
2017
+ border-left-width: 1px;
2018
+ }
2019
+ .border-l-2 {
2020
+ border-left-width: 2px;
2021
+ }
2022
+ .border-r {
2023
+ border-right-width: 1px;
2024
+ }
2025
+ .border-t {
2026
+ border-top-width: 1px;
2027
+ }
2028
+ .border-dashed {
2029
+ border-style: dashed;
2030
+ }
2031
+ .border-amber-500\/30 {
2032
+ border-color: rgb(245 158 11 / 0.3);
2033
+ }
2034
+ .border-border {
2035
+ --tw-border-opacity: 1;
2036
+ border-color: hsl(var(--border) / var(--tw-border-opacity, 1));
2037
+ }
2038
+ .border-destructive\/30 {
2039
+ border-color: hsl(var(--destructive) / 0.3);
2040
+ }
2041
+ .border-emerald-500\/30 {
2042
+ border-color: rgb(16 185 129 / 0.3);
2043
+ }
2044
+ .border-input {
2045
+ --tw-border-opacity: 1;
2046
+ border-color: hsl(var(--input) / var(--tw-border-opacity, 1));
2047
+ }
2048
+ .border-primary {
2049
+ --tw-border-opacity: 1;
2050
+ border-color: hsl(var(--primary) / var(--tw-border-opacity, 1));
2051
+ }
2052
+ .border-primary\/40 {
2053
+ border-color: hsl(var(--primary) / 0.4);
2054
+ }
2055
+ .border-ring {
2056
+ --tw-border-opacity: 1;
2057
+ border-color: hsl(var(--ring) / var(--tw-border-opacity, 1));
2058
+ }
2059
+ .border-ring\/60 {
2060
+ border-color: hsl(var(--ring) / 0.6);
2061
+ }
2062
+ .border-rose-500\/30 {
2063
+ border-color: rgb(244 63 94 / 0.3);
2064
+ }
2065
+ .border-sky-500\/30 {
2066
+ border-color: rgb(14 165 233 / 0.3);
2067
+ }
2068
+ .bg-accent {
2069
+ --tw-bg-opacity: 1;
2070
+ background-color: hsl(var(--accent) / var(--tw-bg-opacity, 1));
2071
+ }
2072
+ .bg-amber-500\/10 {
2073
+ background-color: rgb(245 158 11 / 0.1);
2074
+ }
2075
+ .bg-amber-500\/15 {
2076
+ background-color: rgb(245 158 11 / 0.15);
2077
+ }
2078
+ .bg-background {
2079
+ --tw-bg-opacity: 1;
2080
+ background-color: hsl(var(--background) / var(--tw-bg-opacity, 1));
2081
+ }
2082
+ .bg-background\/70 {
2083
+ background-color: hsl(var(--background) / 0.7);
2084
+ }
2085
+ .bg-background\/80 {
2086
+ background-color: hsl(var(--background) / 0.8);
2087
+ }
2088
+ .bg-background\/85 {
2089
+ background-color: hsl(var(--background) / 0.85);
2090
+ }
2091
+ .bg-background\/90 {
2092
+ background-color: hsl(var(--background) / 0.9);
2093
+ }
2094
+ .bg-black\/50 {
2095
+ background-color: rgb(0 0 0 / 0.5);
2096
+ }
2097
+ .bg-border {
2098
+ --tw-bg-opacity: 1;
2099
+ background-color: hsl(var(--border) / var(--tw-bg-opacity, 1));
2100
+ }
2101
+ .bg-card {
2102
+ --tw-bg-opacity: 1;
2103
+ background-color: hsl(var(--card) / var(--tw-bg-opacity, 1));
2104
+ }
2105
+ .bg-destructive {
2106
+ --tw-bg-opacity: 1;
2107
+ background-color: hsl(var(--destructive) / var(--tw-bg-opacity, 1));
2108
+ }
2109
+ .bg-destructive\/10 {
2110
+ background-color: hsl(var(--destructive) / 0.1);
2111
+ }
2112
+ .bg-emerald-500 {
2113
+ --tw-bg-opacity: 1;
2114
+ background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));
2115
+ }
2116
+ .bg-emerald-500\/10 {
2117
+ background-color: rgb(16 185 129 / 0.1);
2118
+ }
2119
+ .bg-emerald-500\/15 {
2120
+ background-color: rgb(16 185 129 / 0.15);
2121
+ }
2122
+ .bg-input {
2123
+ --tw-bg-opacity: 1;
2124
+ background-color: hsl(var(--input) / var(--tw-bg-opacity, 1));
2125
+ }
2126
+ .bg-muted {
2127
+ --tw-bg-opacity: 1;
2128
+ background-color: hsl(var(--muted) / var(--tw-bg-opacity, 1));
2129
+ }
2130
+ .bg-primary {
2131
+ --tw-bg-opacity: 1;
2132
+ background-color: hsl(var(--primary) / var(--tw-bg-opacity, 1));
2133
+ }
2134
+ .bg-primary\/10 {
2135
+ background-color: hsl(var(--primary) / 0.1);
2136
+ }
2137
+ .bg-primary\/15 {
2138
+ background-color: hsl(var(--primary) / 0.15);
2139
+ }
2140
+ .bg-primary\/25 {
2141
+ background-color: hsl(var(--primary) / 0.25);
2142
+ }
2143
+ .bg-primary\/30 {
2144
+ background-color: hsl(var(--primary) / 0.3);
2145
+ }
2146
+ .bg-primary\/45 {
2147
+ background-color: hsl(var(--primary) / 0.45);
2148
+ }
2149
+ .bg-primary\/5 {
2150
+ background-color: hsl(var(--primary) / 0.05);
2151
+ }
2152
+ .bg-primary\/70 {
2153
+ background-color: hsl(var(--primary) / 0.7);
2154
+ }
2155
+ .bg-rose-500\/10 {
2156
+ background-color: rgb(244 63 94 / 0.1);
2157
+ }
2158
+ .bg-rose-500\/15 {
2159
+ background-color: rgb(244 63 94 / 0.15);
2160
+ }
2161
+ .bg-sky-500\/10 {
2162
+ background-color: rgb(14 165 233 / 0.1);
2163
+ }
2164
+ .bg-sky-500\/15 {
2165
+ background-color: rgb(14 165 233 / 0.15);
2166
+ }
2167
+ .bg-transparent {
2168
+ background-color: transparent;
2169
+ }
2170
+ .bg-white {
2171
+ --tw-bg-opacity: 1;
2172
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
2173
+ }
2174
+ .fill-primary {
2175
+ fill: hsl(var(--primary) / 1);
2176
+ }
2177
+ .fill-transparent {
2178
+ fill: transparent;
2179
+ }
2180
+ .object-contain {
2181
+ object-fit: contain;
2182
+ }
2183
+ .object-cover {
2184
+ object-fit: cover;
2185
+ }
2186
+ .p-0 {
2187
+ padding: 0px;
2188
+ }
2189
+ .p-1 {
2190
+ padding: 0.25rem;
2191
+ }
2192
+ .p-2 {
2193
+ padding: 0.5rem;
2194
+ }
2195
+ .p-3 {
2196
+ padding: 0.75rem;
2197
+ }
2198
+ .p-4 {
2199
+ padding: 1rem;
2200
+ }
2201
+ .p-5 {
2202
+ padding: 1.25rem;
2203
+ }
2204
+ .p-6 {
2205
+ padding: 1.5rem;
2206
+ }
2207
+ .px-0\.5 {
2208
+ padding-left: 0.125rem;
2209
+ padding-right: 0.125rem;
2210
+ }
2211
+ .px-1 {
2212
+ padding-left: 0.25rem;
2213
+ padding-right: 0.25rem;
2214
+ }
2215
+ .px-1\.5 {
2216
+ padding-left: 0.375rem;
2217
+ padding-right: 0.375rem;
2218
+ }
2219
+ .px-2 {
2220
+ padding-left: 0.5rem;
2221
+ padding-right: 0.5rem;
2222
+ }
2223
+ .px-2\.5 {
2224
+ padding-left: 0.625rem;
2225
+ padding-right: 0.625rem;
2226
+ }
2227
+ .px-3 {
2228
+ padding-left: 0.75rem;
2229
+ padding-right: 0.75rem;
2230
+ }
2231
+ .px-4 {
2232
+ padding-left: 1rem;
2233
+ padding-right: 1rem;
2234
+ }
2235
+ .px-5 {
2236
+ padding-left: 1.25rem;
2237
+ padding-right: 1.25rem;
2238
+ }
2239
+ .px-6 {
2240
+ padding-left: 1.5rem;
2241
+ padding-right: 1.5rem;
2242
+ }
2243
+ .py-0\.5 {
2244
+ padding-top: 0.125rem;
2245
+ padding-bottom: 0.125rem;
2246
+ }
2247
+ .py-1 {
2248
+ padding-top: 0.25rem;
2249
+ padding-bottom: 0.25rem;
2250
+ }
2251
+ .py-1\.5 {
2252
+ padding-top: 0.375rem;
2253
+ padding-bottom: 0.375rem;
2254
+ }
2255
+ .py-10 {
2256
+ padding-top: 2.5rem;
2257
+ padding-bottom: 2.5rem;
2258
+ }
2259
+ .py-12 {
2260
+ padding-top: 3rem;
2261
+ padding-bottom: 3rem;
2262
+ }
2263
+ .py-2 {
2264
+ padding-top: 0.5rem;
2265
+ padding-bottom: 0.5rem;
2266
+ }
2267
+ .py-20 {
2268
+ padding-top: 5rem;
2269
+ padding-bottom: 5rem;
2270
+ }
2271
+ .py-24 {
2272
+ padding-top: 6rem;
2273
+ padding-bottom: 6rem;
2274
+ }
2275
+ .py-3 {
2276
+ padding-top: 0.75rem;
2277
+ padding-bottom: 0.75rem;
2278
+ }
2279
+ .py-4 {
2280
+ padding-top: 1rem;
2281
+ padding-bottom: 1rem;
2282
+ }
2283
+ .py-6 {
2284
+ padding-top: 1.5rem;
2285
+ padding-bottom: 1.5rem;
2286
+ }
2287
+ .py-8 {
2288
+ padding-top: 2rem;
2289
+ padding-bottom: 2rem;
2290
+ }
2291
+ .pb-1 {
2292
+ padding-bottom: 0.25rem;
2293
+ }
2294
+ .pb-3 {
2295
+ padding-bottom: 0.75rem;
2296
+ }
2297
+ .pb-4 {
2298
+ padding-bottom: 1rem;
2299
+ }
2300
+ .pl-2 {
2301
+ padding-left: 0.5rem;
2302
+ }
2303
+ .pl-4 {
2304
+ padding-left: 1rem;
2305
+ }
2306
+ .pr-1 {
2307
+ padding-right: 0.25rem;
2308
+ }
2309
+ .pt-0 {
2310
+ padding-top: 0px;
2311
+ }
2312
+ .pt-1 {
2313
+ padding-top: 0.25rem;
2314
+ }
2315
+ .pt-2 {
2316
+ padding-top: 0.5rem;
2317
+ }
2318
+ .pt-4 {
2319
+ padding-top: 1rem;
2320
+ }
2321
+ .text-left {
2322
+ text-align: left;
2323
+ }
2324
+ .text-center {
2325
+ text-align: center;
2326
+ }
2327
+ .text-right {
2328
+ text-align: right;
2329
+ }
2330
+ .align-top {
2331
+ vertical-align: top;
2332
+ }
2333
+ .align-middle {
2334
+ vertical-align: middle;
2335
+ }
2336
+ .font-mono {
2337
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
2338
+ }
2339
+ .text-2xl {
2340
+ font-size: 1.5rem;
2341
+ line-height: 2rem;
2342
+ }
2343
+ .text-4xl {
2344
+ font-size: 2.25rem;
2345
+ line-height: 2.5rem;
2346
+ }
2347
+ .text-5xl {
2348
+ font-size: 3rem;
2349
+ line-height: 1;
2350
+ }
2351
+ .text-\[10px\] {
2352
+ font-size: 10px;
2353
+ }
2354
+ .text-\[11px\] {
2355
+ font-size: 11px;
2356
+ }
2357
+ .text-\[12px\] {
2358
+ font-size: 12px;
2359
+ }
2360
+ .text-\[13px\] {
2361
+ font-size: 13px;
2362
+ }
2363
+ .text-\[16px\] {
2364
+ font-size: 16px;
2365
+ }
2366
+ .text-\[9px\] {
2367
+ font-size: 9px;
2368
+ }
2369
+ .text-base {
2370
+ font-size: 1rem;
2371
+ line-height: 1.5rem;
2372
+ }
2373
+ .text-lg {
2374
+ font-size: 1.125rem;
2375
+ line-height: 1.75rem;
2376
+ }
2377
+ .text-sm {
2378
+ font-size: 0.875rem;
2379
+ line-height: 1.25rem;
2380
+ }
2381
+ .text-xl {
2382
+ font-size: 1.25rem;
2383
+ line-height: 1.75rem;
2384
+ }
2385
+ .text-xs {
2386
+ font-size: 0.75rem;
2387
+ line-height: 1rem;
2388
+ }
2389
+ .font-bold {
2390
+ font-weight: 700;
2391
+ }
2392
+ .font-medium {
2393
+ font-weight: 500;
2394
+ }
2395
+ .font-normal {
2396
+ font-weight: 400;
2397
+ }
2398
+ .font-semibold {
2399
+ font-weight: 600;
2400
+ }
2401
+ .uppercase {
2402
+ text-transform: uppercase;
2403
+ }
2404
+ .capitalize {
2405
+ text-transform: capitalize;
2406
+ }
2407
+ .tabular-nums {
2408
+ --tw-numeric-spacing: tabular-nums;
2409
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
2410
+ }
2411
+ .leading-none {
2412
+ line-height: 1;
2413
+ }
2414
+ .leading-tight {
2415
+ line-height: 1.25;
2416
+ }
2417
+ .tracking-tight {
2418
+ letter-spacing: -0.025em;
2419
+ }
2420
+ .tracking-wide {
2421
+ letter-spacing: 0.025em;
2422
+ }
2423
+ .text-accent-foreground {
2424
+ --tw-text-opacity: 1;
2425
+ color: hsl(var(--accent-foreground) / var(--tw-text-opacity, 1));
2426
+ }
2427
+ .text-amber-500 {
2428
+ --tw-text-opacity: 1;
2429
+ color: rgb(245 158 11 / var(--tw-text-opacity, 1));
2430
+ }
2431
+ .text-amber-600 {
2432
+ --tw-text-opacity: 1;
2433
+ color: rgb(217 119 6 / var(--tw-text-opacity, 1));
2434
+ }
2435
+ .text-card-foreground {
2436
+ --tw-text-opacity: 1;
2437
+ color: hsl(var(--card-foreground) / var(--tw-text-opacity, 1));
2438
+ }
2439
+ .text-destructive {
2440
+ --tw-text-opacity: 1;
2441
+ color: hsl(var(--destructive) / var(--tw-text-opacity, 1));
2442
+ }
2443
+ .text-emerald-500 {
2444
+ --tw-text-opacity: 1;
2445
+ color: rgb(16 185 129 / var(--tw-text-opacity, 1));
2446
+ }
2447
+ .text-emerald-600 {
2448
+ --tw-text-opacity: 1;
2449
+ color: rgb(5 150 105 / var(--tw-text-opacity, 1));
2450
+ }
2451
+ .text-foreground {
2452
+ --tw-text-opacity: 1;
2453
+ color: hsl(var(--foreground) / var(--tw-text-opacity, 1));
2454
+ }
2455
+ .text-muted-foreground {
2456
+ --tw-text-opacity: 1;
2457
+ color: hsl(var(--muted-foreground) / var(--tw-text-opacity, 1));
2458
+ }
2459
+ .text-muted-foreground\/50 {
2460
+ color: hsl(var(--muted-foreground) / 0.5);
2461
+ }
2462
+ .text-muted-foreground\/60 {
2463
+ color: hsl(var(--muted-foreground) / 0.6);
2464
+ }
2465
+ .text-primary {
2466
+ --tw-text-opacity: 1;
2467
+ color: hsl(var(--primary) / var(--tw-text-opacity, 1));
2468
+ }
2469
+ .text-primary-foreground {
2470
+ --tw-text-opacity: 1;
2471
+ color: hsl(var(--primary-foreground) / var(--tw-text-opacity, 1));
2472
+ }
2473
+ .text-red-500 {
2474
+ --tw-text-opacity: 1;
2475
+ color: rgb(239 68 68 / var(--tw-text-opacity, 1));
2476
+ }
2477
+ .text-rose-500 {
2478
+ --tw-text-opacity: 1;
2479
+ color: rgb(244 63 94 / var(--tw-text-opacity, 1));
2480
+ }
2481
+ .text-rose-600 {
2482
+ --tw-text-opacity: 1;
2483
+ color: rgb(225 29 72 / var(--tw-text-opacity, 1));
2484
+ }
2485
+ .text-sky-500 {
2486
+ --tw-text-opacity: 1;
2487
+ color: rgb(14 165 233 / var(--tw-text-opacity, 1));
2488
+ }
2489
+ .text-sky-600 {
2490
+ --tw-text-opacity: 1;
2491
+ color: rgb(2 132 199 / var(--tw-text-opacity, 1));
2492
+ }
2493
+ .accent-foreground {
2494
+ accent-color: hsl(var(--foreground) / 1);
2495
+ }
2496
+ .accent-primary {
2497
+ accent-color: hsl(var(--primary) / 1);
2498
+ }
2499
+ .opacity-100 {
2500
+ opacity: 1;
2501
+ }
2502
+ .opacity-25 {
2503
+ opacity: 0.25;
2504
+ }
2505
+ .opacity-50 {
2506
+ opacity: 0.5;
2507
+ }
2508
+ .opacity-60 {
2509
+ opacity: 0.6;
2510
+ }
2511
+ .opacity-75 {
2512
+ opacity: 0.75;
2513
+ }
2514
+ .shadow {
2515
+ --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
2516
+ --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
2517
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
2518
+ }
2519
+ .shadow-2xl {
2520
+ --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
2521
+ --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);
2522
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
2523
+ }
2524
+ .shadow-lg {
2525
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
2526
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
2527
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
2528
+ }
2529
+ .shadow-md {
2530
+ --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
2531
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
2532
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
2533
+ }
2534
+ .shadow-sm {
2535
+ --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
2536
+ --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
2537
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
2538
+ }
2539
+ .outline-none {
2540
+ outline: 2px solid transparent;
2541
+ outline-offset: 2px;
2542
+ }
2543
+ .outline {
2544
+ outline-style: solid;
2545
+ }
2546
+ .ring {
2547
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2548
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
2549
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
2550
+ }
2551
+ .ring-1 {
2552
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2553
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
2554
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
2555
+ }
2556
+ .ring-2 {
2557
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2558
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
2559
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
2560
+ }
2561
+ .ring-inset {
2562
+ --tw-ring-inset: inset;
2563
+ }
2564
+ .ring-amber-500\/30 {
2565
+ --tw-ring-color: rgb(245 158 11 / 0.3);
2566
+ }
2567
+ .ring-background {
2568
+ --tw-ring-opacity: 1;
2569
+ --tw-ring-color: hsl(var(--background) / var(--tw-ring-opacity, 1));
2570
+ }
2571
+ .ring-border {
2572
+ --tw-ring-opacity: 1;
2573
+ --tw-ring-color: hsl(var(--border) / var(--tw-ring-opacity, 1));
2574
+ }
2575
+ .ring-emerald-500\/30 {
2576
+ --tw-ring-color: rgb(16 185 129 / 0.3);
2577
+ }
2578
+ .ring-primary {
2579
+ --tw-ring-opacity: 1;
2580
+ --tw-ring-color: hsl(var(--primary) / var(--tw-ring-opacity, 1));
2581
+ }
2582
+ .ring-primary\/40 {
2583
+ --tw-ring-color: hsl(var(--primary) / 0.4);
2584
+ }
2585
+ .ring-ring {
2586
+ --tw-ring-opacity: 1;
2587
+ --tw-ring-color: hsl(var(--ring) / var(--tw-ring-opacity, 1));
2588
+ }
2589
+ .ring-rose-500\/30 {
2590
+ --tw-ring-color: rgb(244 63 94 / 0.3);
2591
+ }
2592
+ .ring-sky-500\/30 {
2593
+ --tw-ring-color: rgb(14 165 233 / 0.3);
2594
+ }
2595
+ .ring-offset-1 {
2596
+ --tw-ring-offset-width: 1px;
2597
+ }
2598
+ .ring-offset-background {
2599
+ --tw-ring-offset-color: hsl(var(--background) / 1);
2600
+ }
2601
+ .blur {
2602
+ --tw-blur: blur(8px);
2603
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
2604
+ }
2605
+ .brightness-110 {
2606
+ --tw-brightness: brightness(1.1);
2607
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
2608
+ }
2609
+ .drop-shadow {
2610
+ --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));
2611
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
2612
+ }
2613
+ .filter {
2614
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
2615
+ }
2616
+ .backdrop-blur {
2617
+ --tw-backdrop-blur: blur(8px);
2618
+ -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);
2619
+ 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);
2620
+ }
2621
+ .backdrop-blur-\[2px\] {
2622
+ --tw-backdrop-blur: blur(2px);
2623
+ -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);
2624
+ 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);
2625
+ }
2626
+ .backdrop-blur-sm {
2627
+ --tw-backdrop-blur: blur(4px);
2628
+ -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);
2629
+ 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);
2630
+ }
2631
+ .backdrop-filter {
2632
+ -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);
2633
+ 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);
2634
+ }
2635
+ .transition {
2636
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
2637
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2638
+ transition-duration: 150ms;
2639
+ }
2640
+ .transition-\[color\2c background-color\2c transform\] {
2641
+ transition-property: color,background-color,transform;
2642
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2643
+ transition-duration: 150ms;
2644
+ }
2645
+ .transition-\[opacity\2c transform\] {
2646
+ transition-property: opacity,transform;
2647
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2648
+ transition-duration: 150ms;
2649
+ }
2650
+ .transition-all {
2651
+ transition-property: all;
2652
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2653
+ transition-duration: 150ms;
2654
+ }
2655
+ .transition-colors {
2656
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
2657
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2658
+ transition-duration: 150ms;
2659
+ }
2660
+ .transition-opacity {
2661
+ transition-property: opacity;
2662
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2663
+ transition-duration: 150ms;
2664
+ }
2665
+ .transition-transform {
2666
+ transition-property: transform;
2667
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2668
+ transition-duration: 150ms;
2669
+ }
2670
+ .duration-150 {
2671
+ transition-duration: 150ms;
2672
+ }
2673
+ .duration-200 {
2674
+ transition-duration: 200ms;
2675
+ }
2676
+ .duration-500 {
2677
+ transition-duration: 500ms;
2678
+ }
2679
+ .ease-in-out {
2680
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2681
+ }
2682
+ .ease-out {
2683
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
2684
+ }
2685
+ .placeholder\:text-muted-foreground::placeholder {
2686
+ --tw-text-opacity: 1;
2687
+ color: hsl(var(--muted-foreground) / var(--tw-text-opacity, 1));
2688
+ }
2689
+ .last\:flex-none:last-child {
2690
+ flex: none;
2691
+ }
2692
+ .last\:border-0:last-child {
2693
+ border-width: 0px;
2694
+ }
2695
+ .last\:border-r-0:last-child {
2696
+ border-right-width: 0px;
2697
+ }
2698
+ .focus-within\:border-ring:focus-within {
2699
+ --tw-border-opacity: 1;
2700
+ border-color: hsl(var(--ring) / var(--tw-border-opacity, 1));
2701
+ }
2702
+ .focus-within\:ring-2:focus-within {
2703
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2704
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
2705
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
2706
+ }
2707
+ .focus-within\:ring-ring\/30:focus-within {
2708
+ --tw-ring-color: hsl(var(--ring) / 0.3);
2709
+ }
2710
+ .hover\:border-ring\/60:hover {
2711
+ border-color: hsl(var(--ring) / 0.6);
2712
+ }
2713
+ .hover\:bg-muted:hover {
2714
+ --tw-bg-opacity: 1;
2715
+ background-color: hsl(var(--muted) / var(--tw-bg-opacity, 1));
2716
+ }
2717
+ .hover\:bg-muted\/40:hover {
2718
+ background-color: hsl(var(--muted) / 0.4);
2719
+ }
2720
+ .hover\:bg-muted\/70:hover {
2721
+ background-color: hsl(var(--muted) / 0.7);
2722
+ }
2723
+ .hover\:bg-primary\/50:hover {
2724
+ background-color: hsl(var(--primary) / 0.5);
2725
+ }
2726
+ .hover\:bg-primary\/90:hover {
2727
+ background-color: hsl(var(--primary) / 0.9);
2728
+ }
2729
+ .hover\:text-foreground:hover {
2730
+ --tw-text-opacity: 1;
2731
+ color: hsl(var(--foreground) / var(--tw-text-opacity, 1));
2732
+ }
2733
+ .hover\:underline:hover {
2734
+ text-decoration-line: underline;
2735
+ }
2736
+ .hover\:opacity-90:hover {
2737
+ opacity: 0.9;
2738
+ }
2739
+ .hover\:brightness-110:hover {
2740
+ --tw-brightness: brightness(1.1);
2741
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
2742
+ }
2743
+ .hover\:\[animation-play-state\:paused\]:hover {
2744
+ animation-play-state: paused;
2745
+ }
2746
+ .focus\:border-ring:focus {
2747
+ --tw-border-opacity: 1;
2748
+ border-color: hsl(var(--ring) / var(--tw-border-opacity, 1));
2749
+ }
2750
+ .focus\:outline-none:focus {
2751
+ outline: 2px solid transparent;
2752
+ outline-offset: 2px;
2753
+ }
2754
+ .focus\:ring-2:focus {
2755
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2756
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
2757
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
2758
+ }
2759
+ .focus\:ring-ring:focus {
2760
+ --tw-ring-opacity: 1;
2761
+ --tw-ring-color: hsl(var(--ring) / var(--tw-ring-opacity, 1));
2762
+ }
2763
+ .focus\:ring-ring\/30:focus {
2764
+ --tw-ring-color: hsl(var(--ring) / 0.3);
2765
+ }
2766
+ .focus\:ring-ring\/40:focus {
2767
+ --tw-ring-color: hsl(var(--ring) / 0.4);
2768
+ }
2769
+ .focus-visible\:bg-primary\/50:focus-visible {
2770
+ background-color: hsl(var(--primary) / 0.5);
2771
+ }
2772
+ .focus-visible\:outline-none:focus-visible {
2773
+ outline: 2px solid transparent;
2774
+ outline-offset: 2px;
2775
+ }
2776
+ .focus-visible\:ring-2:focus-visible {
2777
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2778
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
2779
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
2780
+ }
2781
+ .focus-visible\:ring-primary:focus-visible {
2782
+ --tw-ring-opacity: 1;
2783
+ --tw-ring-color: hsl(var(--primary) / var(--tw-ring-opacity, 1));
2784
+ }
2785
+ .focus-visible\:ring-ring\/40:focus-visible {
2786
+ --tw-ring-color: hsl(var(--ring) / 0.4);
2787
+ }
2788
+ .active\:scale-90:active {
2789
+ --tw-scale-x: .9;
2790
+ --tw-scale-y: .9;
2791
+ 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));
2792
+ }
2793
+ .active\:scale-\[0\.97\]:active {
2794
+ --tw-scale-x: 0.97;
2795
+ --tw-scale-y: 0.97;
2796
+ 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));
2797
+ }
2798
+ .active\:cursor-grabbing:active {
2799
+ cursor: grabbing;
2800
+ }
2801
+ .disabled\:pointer-events-none:disabled {
2802
+ pointer-events: none;
2803
+ }
2804
+ .disabled\:cursor-not-allowed:disabled {
2805
+ cursor: not-allowed;
2806
+ }
2807
+ .disabled\:opacity-40:disabled {
2808
+ opacity: 0.4;
2809
+ }
2810
+ .disabled\:opacity-50:disabled {
2811
+ opacity: 0.5;
2812
+ }
2813
+ .group[open] .group-\[\[open\]\]\:rotate-90 {
2814
+ --tw-rotate: 90deg;
2815
+ 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));
2816
+ }
2817
+ .aria-pressed\:text-primary[aria-pressed="true"] {
2818
+ --tw-text-opacity: 1;
2819
+ color: hsl(var(--primary) / var(--tw-text-opacity, 1));
2820
+ }
2821
+ .data-\[disabled\]\:pointer-events-none[data-disabled] {
2822
+ pointer-events: none;
2823
+ }
2824
+ .data-\[checked\]\:translate-x-4[data-checked] {
2825
+ --tw-translate-x: 1rem;
2826
+ 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));
2827
+ }
2828
+ .data-\[disabled\]\:cursor-not-allowed[data-disabled] {
2829
+ cursor: not-allowed;
2830
+ }
2831
+ .data-\[checked\]\:border-primary[data-checked] {
2832
+ --tw-border-opacity: 1;
2833
+ border-color: hsl(var(--primary) / var(--tw-border-opacity, 1));
2834
+ }
2835
+ .data-\[pressed\]\:border-primary[data-pressed] {
2836
+ --tw-border-opacity: 1;
2837
+ border-color: hsl(var(--primary) / var(--tw-border-opacity, 1));
2838
+ }
2839
+ .data-\[checked\]\:bg-primary[data-checked] {
2840
+ --tw-bg-opacity: 1;
2841
+ background-color: hsl(var(--primary) / var(--tw-bg-opacity, 1));
2842
+ }
2843
+ .data-\[highlighted\]\:bg-muted[data-highlighted] {
2844
+ --tw-bg-opacity: 1;
2845
+ background-color: hsl(var(--muted) / var(--tw-bg-opacity, 1));
2846
+ }
2847
+ .data-\[pressed\]\:bg-primary[data-pressed] {
2848
+ --tw-bg-opacity: 1;
2849
+ background-color: hsl(var(--primary) / var(--tw-bg-opacity, 1));
2850
+ }
2851
+ .data-\[pressed\]\:text-primary-foreground[data-pressed] {
2852
+ --tw-text-opacity: 1;
2853
+ color: hsl(var(--primary-foreground) / var(--tw-text-opacity, 1));
2854
+ }
2855
+ .data-\[selected\]\:text-foreground[data-selected] {
2856
+ --tw-text-opacity: 1;
2857
+ color: hsl(var(--foreground) / var(--tw-text-opacity, 1));
2858
+ }
2859
+ .data-\[selected\]\:text-primary-foreground[data-selected] {
2860
+ --tw-text-opacity: 1;
2861
+ color: hsl(var(--primary-foreground) / var(--tw-text-opacity, 1));
2862
+ }
2863
+ .data-\[disabled\]\:opacity-50[data-disabled] {
2864
+ opacity: 0.5;
2865
+ }
2866
+ @media (min-width: 640px) {
2867
+
2868
+ .sm\:grid-cols-2 {
2869
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2870
+ }
2871
+
2872
+ .sm\:grid-cols-3 {
2873
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2874
+ }
2875
+
2876
+ .sm\:flex-row {
2877
+ flex-direction: row;
2878
+ }
2879
+
2880
+ .sm\:items-end {
2881
+ align-items: flex-end;
2882
+ }
2883
+
2884
+ .sm\:items-center {
2885
+ align-items: center;
2886
+ }
2887
+
2888
+ .sm\:justify-between {
2889
+ justify-content: space-between;
2890
+ }
2891
+
2892
+ .sm\:px-6 {
2893
+ padding-left: 1.5rem;
2894
+ padding-right: 1.5rem;
2895
+ }
2896
+ }
2897
+ .\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker {
2898
+ display: none;
2899
+ }
2900
+ .\[\&\[data-expanded\]\>svg\]\:rotate-90[data-expanded]>svg {
2901
+ --tw-rotate: 90deg;
2902
+ 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));
2903
+ }