@a4ui/core 0.38.1 → 0.39.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.
Files changed (129) hide show
  1. package/README.md +66 -9
  2. package/dist/{Collapse-Cr5cDqAl.js → Collapse-CrKiFD8K.js} +173 -124
  3. package/dist/charts/Sparkline.d.ts +2 -0
  4. package/dist/charts.js +8 -5
  5. package/dist/commerce.js +59 -59
  6. package/dist/elements.css +248 -151
  7. package/dist/elements.iife.js +1 -1
  8. package/dist/elements.js +1025 -1015
  9. package/dist/full.css +248 -151
  10. package/dist/index.d.ts +2 -1
  11. package/dist/index.js +4723 -4656
  12. package/dist/lib/anchored.d.ts +7 -0
  13. package/dist/lib/direction.d.ts +18 -0
  14. package/dist/styles.css +27 -11
  15. package/dist/theme.css +1559 -0
  16. package/dist/ui/DirectionProvider.d.ts +47 -0
  17. package/dist/ui/Drawer.d.ts +6 -2
  18. package/dist/ui/Sidebar.d.ts +8 -2
  19. package/dist/ui/Toast.d.ts +5 -1
  20. package/package.json +5 -3
  21. package/preset.d.ts +2 -1
  22. package/preset.js +16 -5
  23. package/src/charts/BarList.tsx +1 -1
  24. package/src/charts/Sparkline.tsx +5 -1
  25. package/src/commerce/CartLine.tsx +1 -1
  26. package/src/commerce/FacetSidebar.tsx +1 -1
  27. package/src/commerce/ProductCard.tsx +1 -1
  28. package/src/index.ts +7 -1
  29. package/src/layout/NavGroup.tsx +2 -2
  30. package/src/lib/anchored.ts +13 -0
  31. package/src/lib/direction.ts +35 -0
  32. package/src/ui/Accordion.tsx +2 -2
  33. package/src/ui/ActivityFeed.tsx +2 -2
  34. package/src/ui/AlertDialog.tsx +2 -1
  35. package/src/ui/Anchor.tsx +1 -1
  36. package/src/ui/AnnouncementBar.tsx +3 -3
  37. package/src/ui/ArtifactPanel.tsx +1 -1
  38. package/src/ui/AvailabilityPicker.tsx +2 -2
  39. package/src/ui/AvatarGroup.tsx +2 -2
  40. package/src/ui/BackToTop.tsx +1 -1
  41. package/src/ui/Badge.tsx +1 -1
  42. package/src/ui/BlockEditor.tsx +1 -1
  43. package/src/ui/ButtonGroup.tsx +1 -1
  44. package/src/ui/Callout.tsx +1 -1
  45. package/src/ui/Carousel.tsx +17 -9
  46. package/src/ui/Cascader.tsx +2 -2
  47. package/src/ui/CategoryStrip.tsx +4 -1
  48. package/src/ui/CodeEditor.tsx +5 -5
  49. package/src/ui/CodeTabs.tsx +1 -1
  50. package/src/ui/Combobox.tsx +2 -1
  51. package/src/ui/Command.tsx +3 -2
  52. package/src/ui/Comment.tsx +1 -1
  53. package/src/ui/Configurator.tsx +2 -2
  54. package/src/ui/ContextMenu.tsx +2 -1
  55. package/src/ui/DateField.tsx +4 -4
  56. package/src/ui/DateRangePicker.tsx +4 -4
  57. package/src/ui/DiffViewer.tsx +4 -3
  58. package/src/ui/DirectionProvider.tsx +82 -0
  59. package/src/ui/Drawer.tsx +23 -5
  60. package/src/ui/Dropdown.tsx +2 -1
  61. package/src/ui/EmojiPicker.tsx +5 -2
  62. package/src/ui/Expandable.tsx +2 -2
  63. package/src/ui/Faq.tsx +1 -1
  64. package/src/ui/Field.tsx +1 -1
  65. package/src/ui/FloatingActionButton.tsx +2 -2
  66. package/src/ui/FollowingPointer.tsx +2 -2
  67. package/src/ui/Hero.tsx +2 -2
  68. package/src/ui/HoldToConfirm.tsx +2 -2
  69. package/src/ui/HoverCard.tsx +2 -1
  70. package/src/ui/Image.tsx +3 -2
  71. package/src/ui/InlineSelect.tsx +1 -1
  72. package/src/ui/InputGroup.tsx +2 -2
  73. package/src/ui/Item.tsx +1 -1
  74. package/src/ui/JsonViewer.tsx +2 -2
  75. package/src/ui/Kanban.tsx +1 -1
  76. package/src/ui/KpiBlock.tsx +1 -1
  77. package/src/ui/Lightbox.tsx +9 -6
  78. package/src/ui/MasterDetail.tsx +1 -1
  79. package/src/ui/Mentions.tsx +1 -1
  80. package/src/ui/Menubar.tsx +9 -8
  81. package/src/ui/Modal.tsx +3 -2
  82. package/src/ui/ModelPicker.tsx +2 -1
  83. package/src/ui/MultiSelect.tsx +5 -5
  84. package/src/ui/NativeSelect.tsx +2 -2
  85. package/src/ui/NavigationMenu.tsx +5 -4
  86. package/src/ui/NotificationCenter.tsx +1 -1
  87. package/src/ui/NotificationStack.tsx +1 -1
  88. package/src/ui/NumberInput.tsx +2 -2
  89. package/src/ui/OnboardingChecklist.tsx +2 -2
  90. package/src/ui/Pagination.tsx +2 -2
  91. package/src/ui/PillSearch.tsx +3 -3
  92. package/src/ui/PivotTable.tsx +0 -0
  93. package/src/ui/Popover.tsx +2 -1
  94. package/src/ui/Portal.tsx +3 -1
  95. package/src/ui/PresenceAvatars.tsx +4 -4
  96. package/src/ui/PricingTable.tsx +1 -1
  97. package/src/ui/Prose.tsx +3 -3
  98. package/src/ui/QueryBuilder.tsx +4 -4
  99. package/src/ui/Rating.tsx +6 -2
  100. package/src/ui/ReasoningTrace.tsx +1 -1
  101. package/src/ui/ScrollArea.tsx +1 -1
  102. package/src/ui/ScrollProgress.tsx +2 -2
  103. package/src/ui/SideRail.tsx +3 -3
  104. package/src/ui/Sidebar.tsx +43 -23
  105. package/src/ui/SlashMenu.tsx +1 -1
  106. package/src/ui/Snippet.tsx +6 -3
  107. package/src/ui/Sortable.tsx +1 -1
  108. package/src/ui/SpecSheet.tsx +1 -1
  109. package/src/ui/SpeedDial.tsx +1 -1
  110. package/src/ui/Splitter.tsx +8 -3
  111. package/src/ui/SpreadsheetGrid.tsx +4 -4
  112. package/src/ui/Stepper.tsx +1 -1
  113. package/src/ui/SuggestionChips.tsx +1 -1
  114. package/src/ui/Switch.tsx +1 -1
  115. package/src/ui/Table.tsx +5 -2
  116. package/src/ui/TimeField.tsx +8 -8
  117. package/src/ui/Timeline.tsx +2 -2
  118. package/src/ui/Toast.tsx +9 -3
  119. package/src/ui/ToolCallTimeline.tsx +2 -2
  120. package/src/ui/Tooltip.tsx +2 -1
  121. package/src/ui/Tour.tsx +1 -1
  122. package/src/ui/TransactionFeed.tsx +1 -1
  123. package/src/ui/Transfer.tsx +2 -2
  124. package/src/ui/Tree.tsx +2 -2
  125. package/src/ui/TreeSelect.tsx +2 -2
  126. package/src/ui/TreeTable.tsx +4 -4
  127. package/src/ui/UsageMeter.tsx +1 -1
  128. package/src/ui/VideoPlayerShell.tsx +2 -2
  129. package/src/ui/internal/CalendarCore.tsx +6 -6
package/dist/theme.css ADDED
@@ -0,0 +1,1559 @@
1
+ /* @a4ui/core/theme.css: Tailwind 4 entry. Generated by scripts/build-theme-css.mjs; do not edit. */
2
+ @source './index.js';
3
+ @source './commerce.js';
4
+ @source './charts.js';
5
+ @source './Collapse-CrKiFD8K.js';
6
+ @source './motion-CTIBwMCA.js';
7
+ @custom-variant light ([data-theme='light'] &);
8
+ @custom-variant hover (&:hover);
9
+
10
+ @theme inline {
11
+ --color-black: #000;
12
+ --color-white: #fff;
13
+ --color-slate-50: #f8fafc;
14
+ --color-slate-100: #f1f5f9;
15
+ --color-slate-200: #e2e8f0;
16
+ --color-slate-300: #cbd5e1;
17
+ --color-slate-400: #94a3b8;
18
+ --color-slate-500: #64748b;
19
+ --color-slate-600: #475569;
20
+ --color-slate-700: #334155;
21
+ --color-slate-800: #1e293b;
22
+ --color-slate-900: #0f172a;
23
+ --color-slate-950: #020617;
24
+ --color-gray-50: #f9fafb;
25
+ --color-gray-100: #f3f4f6;
26
+ --color-gray-200: #e5e7eb;
27
+ --color-gray-300: #d1d5db;
28
+ --color-gray-400: #9ca3af;
29
+ --color-gray-500: #6b7280;
30
+ --color-gray-600: #4b5563;
31
+ --color-gray-700: #374151;
32
+ --color-gray-800: #1f2937;
33
+ --color-gray-900: #111827;
34
+ --color-gray-950: #030712;
35
+ --color-zinc-50: #fafafa;
36
+ --color-zinc-100: #f4f4f5;
37
+ --color-zinc-200: #e4e4e7;
38
+ --color-zinc-300: #d4d4d8;
39
+ --color-zinc-400: #a1a1aa;
40
+ --color-zinc-500: #71717a;
41
+ --color-zinc-600: #52525b;
42
+ --color-zinc-700: #3f3f46;
43
+ --color-zinc-800: #27272a;
44
+ --color-zinc-900: #18181b;
45
+ --color-zinc-950: #09090b;
46
+ --color-neutral-50: #fafafa;
47
+ --color-neutral-100: #f5f5f5;
48
+ --color-neutral-200: #e5e5e5;
49
+ --color-neutral-300: #d4d4d4;
50
+ --color-neutral-400: #a3a3a3;
51
+ --color-neutral-500: #737373;
52
+ --color-neutral-600: #525252;
53
+ --color-neutral-700: #404040;
54
+ --color-neutral-800: #262626;
55
+ --color-neutral-900: #171717;
56
+ --color-neutral-950: #0a0a0a;
57
+ --color-stone-50: #fafaf9;
58
+ --color-stone-100: #f5f5f4;
59
+ --color-stone-200: #e7e5e4;
60
+ --color-stone-300: #d6d3d1;
61
+ --color-stone-400: #a8a29e;
62
+ --color-stone-500: #78716c;
63
+ --color-stone-600: #57534e;
64
+ --color-stone-700: #44403c;
65
+ --color-stone-800: #292524;
66
+ --color-stone-900: #1c1917;
67
+ --color-stone-950: #0c0a09;
68
+ --color-red-50: #fef2f2;
69
+ --color-red-100: #fee2e2;
70
+ --color-red-200: #fecaca;
71
+ --color-red-300: #fca5a5;
72
+ --color-red-400: #f87171;
73
+ --color-red-500: #ef4444;
74
+ --color-red-600: #dc2626;
75
+ --color-red-700: #b91c1c;
76
+ --color-red-800: #991b1b;
77
+ --color-red-900: #7f1d1d;
78
+ --color-red-950: #450a0a;
79
+ --color-orange-50: #fff7ed;
80
+ --color-orange-100: #ffedd5;
81
+ --color-orange-200: #fed7aa;
82
+ --color-orange-300: #fdba74;
83
+ --color-orange-400: #fb923c;
84
+ --color-orange-500: #f97316;
85
+ --color-orange-600: #ea580c;
86
+ --color-orange-700: #c2410c;
87
+ --color-orange-800: #9a3412;
88
+ --color-orange-900: #7c2d12;
89
+ --color-orange-950: #431407;
90
+ --color-amber-50: #fffbeb;
91
+ --color-amber-100: #fef3c7;
92
+ --color-amber-200: #fde68a;
93
+ --color-amber-300: #fcd34d;
94
+ --color-amber-400: #fbbf24;
95
+ --color-amber-500: #f59e0b;
96
+ --color-amber-600: #d97706;
97
+ --color-amber-700: #b45309;
98
+ --color-amber-800: #92400e;
99
+ --color-amber-900: #78350f;
100
+ --color-amber-950: #451a03;
101
+ --color-yellow-50: #fefce8;
102
+ --color-yellow-100: #fef9c3;
103
+ --color-yellow-200: #fef08a;
104
+ --color-yellow-300: #fde047;
105
+ --color-yellow-400: #facc15;
106
+ --color-yellow-500: #eab308;
107
+ --color-yellow-600: #ca8a04;
108
+ --color-yellow-700: #a16207;
109
+ --color-yellow-800: #854d0e;
110
+ --color-yellow-900: #713f12;
111
+ --color-yellow-950: #422006;
112
+ --color-lime-50: #f7fee7;
113
+ --color-lime-100: #ecfccb;
114
+ --color-lime-200: #d9f99d;
115
+ --color-lime-300: #bef264;
116
+ --color-lime-400: #a3e635;
117
+ --color-lime-500: #84cc16;
118
+ --color-lime-600: #65a30d;
119
+ --color-lime-700: #4d7c0f;
120
+ --color-lime-800: #3f6212;
121
+ --color-lime-900: #365314;
122
+ --color-lime-950: #1a2e05;
123
+ --color-green-50: #f0fdf4;
124
+ --color-green-100: #dcfce7;
125
+ --color-green-200: #bbf7d0;
126
+ --color-green-300: #86efac;
127
+ --color-green-400: #4ade80;
128
+ --color-green-500: #22c55e;
129
+ --color-green-600: #16a34a;
130
+ --color-green-700: #15803d;
131
+ --color-green-800: #166534;
132
+ --color-green-900: #14532d;
133
+ --color-green-950: #052e16;
134
+ --color-emerald-50: #ecfdf5;
135
+ --color-emerald-100: #d1fae5;
136
+ --color-emerald-200: #a7f3d0;
137
+ --color-emerald-300: #6ee7b7;
138
+ --color-emerald-400: #34d399;
139
+ --color-emerald-500: #10b981;
140
+ --color-emerald-600: #059669;
141
+ --color-emerald-700: #047857;
142
+ --color-emerald-800: #065f46;
143
+ --color-emerald-900: #064e3b;
144
+ --color-emerald-950: #022c22;
145
+ --color-teal-50: #f0fdfa;
146
+ --color-teal-100: #ccfbf1;
147
+ --color-teal-200: #99f6e4;
148
+ --color-teal-300: #5eead4;
149
+ --color-teal-400: #2dd4bf;
150
+ --color-teal-500: #14b8a6;
151
+ --color-teal-600: #0d9488;
152
+ --color-teal-700: #0f766e;
153
+ --color-teal-800: #115e59;
154
+ --color-teal-900: #134e4a;
155
+ --color-teal-950: #042f2e;
156
+ --color-cyan-50: #ecfeff;
157
+ --color-cyan-100: #cffafe;
158
+ --color-cyan-200: #a5f3fc;
159
+ --color-cyan-300: #67e8f9;
160
+ --color-cyan-400: #22d3ee;
161
+ --color-cyan-500: #06b6d4;
162
+ --color-cyan-600: #0891b2;
163
+ --color-cyan-700: #0e7490;
164
+ --color-cyan-800: #155e75;
165
+ --color-cyan-900: #164e63;
166
+ --color-cyan-950: #083344;
167
+ --color-sky-50: #f0f9ff;
168
+ --color-sky-100: #e0f2fe;
169
+ --color-sky-200: #bae6fd;
170
+ --color-sky-300: #7dd3fc;
171
+ --color-sky-400: #38bdf8;
172
+ --color-sky-500: #0ea5e9;
173
+ --color-sky-600: #0284c7;
174
+ --color-sky-700: #0369a1;
175
+ --color-sky-800: #075985;
176
+ --color-sky-900: #0c4a6e;
177
+ --color-sky-950: #082f49;
178
+ --color-blue-50: #eff6ff;
179
+ --color-blue-100: #dbeafe;
180
+ --color-blue-200: #bfdbfe;
181
+ --color-blue-300: #93c5fd;
182
+ --color-blue-400: #60a5fa;
183
+ --color-blue-500: #3b82f6;
184
+ --color-blue-600: #2563eb;
185
+ --color-blue-700: #1d4ed8;
186
+ --color-blue-800: #1e40af;
187
+ --color-blue-900: #1e3a8a;
188
+ --color-blue-950: #172554;
189
+ --color-indigo-50: #eef2ff;
190
+ --color-indigo-100: #e0e7ff;
191
+ --color-indigo-200: #c7d2fe;
192
+ --color-indigo-300: #a5b4fc;
193
+ --color-indigo-400: #818cf8;
194
+ --color-indigo-500: #6366f1;
195
+ --color-indigo-600: #4f46e5;
196
+ --color-indigo-700: #4338ca;
197
+ --color-indigo-800: #3730a3;
198
+ --color-indigo-900: #312e81;
199
+ --color-indigo-950: #1e1b4b;
200
+ --color-violet-50: #f5f3ff;
201
+ --color-violet-100: #ede9fe;
202
+ --color-violet-200: #ddd6fe;
203
+ --color-violet-300: #c4b5fd;
204
+ --color-violet-400: #a78bfa;
205
+ --color-violet-500: #8b5cf6;
206
+ --color-violet-600: #7c3aed;
207
+ --color-violet-700: #6d28d9;
208
+ --color-violet-800: #5b21b6;
209
+ --color-violet-900: #4c1d95;
210
+ --color-violet-950: #2e1065;
211
+ --color-purple-50: #faf5ff;
212
+ --color-purple-100: #f3e8ff;
213
+ --color-purple-200: #e9d5ff;
214
+ --color-purple-300: #d8b4fe;
215
+ --color-purple-400: #c084fc;
216
+ --color-purple-500: #a855f7;
217
+ --color-purple-600: #9333ea;
218
+ --color-purple-700: #7e22ce;
219
+ --color-purple-800: #6b21a8;
220
+ --color-purple-900: #581c87;
221
+ --color-purple-950: #3b0764;
222
+ --color-fuchsia-50: #fdf4ff;
223
+ --color-fuchsia-100: #fae8ff;
224
+ --color-fuchsia-200: #f5d0fe;
225
+ --color-fuchsia-300: #f0abfc;
226
+ --color-fuchsia-400: #e879f9;
227
+ --color-fuchsia-500: #d946ef;
228
+ --color-fuchsia-600: #c026d3;
229
+ --color-fuchsia-700: #a21caf;
230
+ --color-fuchsia-800: #86198f;
231
+ --color-fuchsia-900: #701a75;
232
+ --color-fuchsia-950: #4a044e;
233
+ --color-pink-50: #fdf2f8;
234
+ --color-pink-100: #fce7f3;
235
+ --color-pink-200: #fbcfe8;
236
+ --color-pink-300: #f9a8d4;
237
+ --color-pink-400: #f472b6;
238
+ --color-pink-500: #ec4899;
239
+ --color-pink-600: #db2777;
240
+ --color-pink-700: #be185d;
241
+ --color-pink-800: #9d174d;
242
+ --color-pink-900: #831843;
243
+ --color-pink-950: #500724;
244
+ --color-rose-50: #fff1f2;
245
+ --color-rose-100: #ffe4e6;
246
+ --color-rose-200: #fecdd3;
247
+ --color-rose-300: #fda4af;
248
+ --color-rose-400: #fb7185;
249
+ --color-rose-500: #f43f5e;
250
+ --color-rose-600: #e11d48;
251
+ --color-rose-700: #be123c;
252
+ --color-rose-800: #9f1239;
253
+ --color-rose-900: #881337;
254
+ --color-rose-950: #4c0519;
255
+ --color-background: hsl(var(--background));
256
+ --color-foreground: hsl(var(--foreground));
257
+ --color-card: hsl(var(--card));
258
+ --color-card-foreground: hsl(var(--card-foreground));
259
+ --color-muted: hsl(var(--muted));
260
+ --color-muted-foreground: hsl(var(--muted-foreground));
261
+ --color-border: hsl(var(--border));
262
+ --color-input: hsl(var(--input));
263
+ --color-primary: hsl(var(--primary));
264
+ --color-primary-foreground: hsl(var(--primary-foreground));
265
+ --color-accent: hsl(var(--accent));
266
+ --color-accent-foreground: hsl(var(--accent-foreground));
267
+ --color-ring: hsl(var(--ring));
268
+ --color-destructive: hsl(var(--destructive));
269
+ --color-destructive-foreground: hsl(var(--destructive-foreground));
270
+ --color-data-emit: hsl(var(--data-emit));
271
+ --color-data-received: hsl(var(--data-received));
272
+ --color-data-net: hsl(var(--data-net));
273
+ --font-sans: "IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;
274
+ --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
275
+ --font-mono: "IBM Plex Mono", ui-monospace, monospace;
276
+ --radius-sm: 0.125rem;
277
+ --radius: 0.25rem;
278
+ --radius-md: 0.375rem;
279
+ --radius-lg: 0.5rem;
280
+ --radius-xl: 1rem;
281
+ --radius-2xl: 1rem;
282
+ --radius-3xl: 1.5rem;
283
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
284
+ --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
285
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
286
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
287
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
288
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
289
+ --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
290
+ --blur-sm: 4px;
291
+ --blur: 8px;
292
+ --blur-md: 12px;
293
+ --blur-lg: 16px;
294
+ --blur-xl: 24px;
295
+ --blur-2xl: 40px;
296
+ --blur-3xl: 64px;
297
+ --drop-shadow-sm: 0 1px 1px rgb(0 0 0 / 0.05);
298
+ --drop-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 1px 1px rgb(0 0 0 / 0.06);
299
+ --drop-shadow-md: 0 4px 3px rgb(0 0 0 / 0.07), 0 2px 2px rgb(0 0 0 / 0.06);
300
+ --drop-shadow-lg: 0 10px 8px rgb(0 0 0 / 0.04), 0 4px 3px rgb(0 0 0 / 0.1);
301
+ --drop-shadow-xl: 0 20px 13px rgb(0 0 0 / 0.03), 0 8px 5px rgb(0 0 0 / 0.08);
302
+ --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);
303
+ --text-xs: 0.75rem;
304
+ --text-xs--line-height: 1rem;
305
+ --text-sm: 0.875rem;
306
+ --text-sm--line-height: 1.25rem;
307
+ --text-base: 1rem;
308
+ --text-base--line-height: 1.5rem;
309
+ --text-lg: 1.125rem;
310
+ --text-lg--line-height: 1.75rem;
311
+ --text-xl: 1.25rem;
312
+ --text-xl--line-height: 1.75rem;
313
+ --text-2xl: 1.5rem;
314
+ --text-2xl--line-height: 2rem;
315
+ --text-3xl: 1.875rem;
316
+ --text-3xl--line-height: 2.25rem;
317
+ --text-4xl: 2.25rem;
318
+ --text-4xl--line-height: 2.5rem;
319
+ --text-5xl: 3rem;
320
+ --text-5xl--line-height: 1;
321
+ --text-6xl: 3.75rem;
322
+ --text-6xl--line-height: 1;
323
+ --text-7xl: 4.5rem;
324
+ --text-7xl--line-height: 1;
325
+ --text-8xl: 6rem;
326
+ --text-8xl--line-height: 1;
327
+ --text-9xl: 8rem;
328
+ --text-9xl--line-height: 1;
329
+ --breakpoint-sm: 640px;
330
+ --breakpoint-md: 768px;
331
+ --breakpoint-lg: 1024px;
332
+ --breakpoint-xl: 1280px;
333
+ --breakpoint-2xl: 1536px;
334
+ --default-ring-width: 3px;
335
+ --default-ring-color: rgb(59 130 246 / 0.5);
336
+ --default-outline-width: 3px;
337
+ }
338
+
339
+ @layer base {
340
+ *,
341
+ ::before,
342
+ ::after,
343
+ ::backdrop,
344
+ ::file-selector-button {
345
+ border-color: #e5e7eb;
346
+ }
347
+ input::placeholder,
348
+ textarea::placeholder {
349
+ opacity: 1;
350
+ color: #9ca3af;
351
+ }
352
+ button,
353
+ [role='button'] {
354
+ cursor: pointer;
355
+ }
356
+ :disabled {
357
+ cursor: default;
358
+ }
359
+ /* Tailwind 4 also strips these from form controls; Tailwind 3 did it for buttons only. */
360
+ input:where(:not([type='button'], [type='reset'], [type='submit'])),
361
+ select,
362
+ optgroup,
363
+ textarea {
364
+ background-color: revert-layer;
365
+ border-radius: revert-layer;
366
+ }
367
+ /* Tailwind 4 zeroes margin and padding on everything; Tailwind 3 listed the elements. */
368
+ td,
369
+ th,
370
+ option {
371
+ padding: revert-layer;
372
+ }
373
+ dialog,
374
+ [popover] {
375
+ margin: revert-layer;
376
+ }
377
+ body {
378
+ background: hsl(var(--background));
379
+ color: hsl(var(--foreground));
380
+ font-family: var(--font-sans);
381
+ -webkit-font-smoothing: antialiased;
382
+ font-feature-settings: 'cv02', 'cv03', 'cv04';
383
+ }
384
+ }
385
+
386
+ @layer components {
387
+ .page-enter-active,
388
+ .page-exit-active {
389
+ transition: opacity 0.16s ease-out;
390
+ }
391
+ .page-enter,
392
+ .page-exit-to {
393
+ opacity: 0;
394
+ }
395
+ .skeleton-shimmer {
396
+ position: relative;
397
+ overflow: hidden;
398
+ }
399
+ .skeleton-shimmer::after {
400
+ content: '';
401
+ position: absolute;
402
+ inset: 0;
403
+ transform: translateX(calc(-100% * var(--dir-x, 1)));
404
+ background: linear-gradient(
405
+ calc(90deg * var(--dir-x, 1)),
406
+ transparent,
407
+ hsl(var(--foreground) / 0.08),
408
+ transparent
409
+ );
410
+ animation: skeleton-shimmer 1.5s ease-in-out infinite;
411
+ }
412
+ .accordion-content {
413
+ overflow: hidden;
414
+ }
415
+ .list-row-stagger {
416
+ animation: list-row-in 0.35s both ease-out;
417
+ }
418
+ .aurora-drift {
419
+ animation: aurora-drift 18s ease-in-out infinite;
420
+ }
421
+ .row-enter-active,
422
+ .row-exit-active {
423
+ transition: opacity 0.15s ease-out;
424
+ }
425
+ .row-enter,
426
+ .row-exit-to {
427
+ opacity: 0;
428
+ }
429
+ @media (prefers-reduced-motion: reduce) {
430
+ html:not(.force-motion) *::before,
431
+ html:not(.force-motion) *::after {
432
+ animation-duration: 0.001ms !important;
433
+ animation-iteration-count: 1 !important;
434
+ transition-duration: 0.001ms !important;
435
+ scroll-behavior: auto !important;
436
+ }
437
+ }
438
+ .rk-flame {
439
+ transform-box: fill-box;
440
+ transform-origin: 50% 0%;
441
+ animation: rocketFlame 0.12s ease-in-out infinite alternate;
442
+ }
443
+ .twinkle {
444
+ position: absolute;
445
+ width: 5px;
446
+ height: 5px;
447
+ border-radius: 50%;
448
+ background: hsl(var(--foreground));
449
+ box-shadow: 0 0 14px 3px hsl(var(--foreground) / 0.9);
450
+ animation: twinkle 3.2s ease-in-out infinite;
451
+ }
452
+ .planet {
453
+ border-radius: 50%;
454
+ }
455
+ .planet::after {
456
+ content: '';
457
+ position: absolute;
458
+ inset: -34% -55%;
459
+ border-radius: 50%;
460
+ border: 3px solid hsl(var(--foreground) / 0.18);
461
+ transform: rotate(-24deg);
462
+ }
463
+ .planet-glow {
464
+ border-radius: 50%;
465
+ filter: blur(2px);
466
+ }
467
+ .floaty {
468
+ animation: floaty 12s ease-in-out infinite;
469
+ }
470
+ .asteroid {
471
+ border-radius: 40% 55% 50% 45%;
472
+ background: hsl(var(--foreground) / 0.35);
473
+ }
474
+ .shooter {
475
+ position: absolute;
476
+ height: 2.5px;
477
+ border-radius: 999px;
478
+ transform-origin: left center;
479
+ background: linear-gradient(
480
+ 90deg,
481
+ hsla(0, 0%, 100%, 0) 0%,
482
+ hsla(199, 90%, 85%, 0.55) 55%,
483
+ hsla(0, 0%, 100%, 0.98) 100%
484
+ );
485
+ filter: blur(0.2px) drop-shadow(0 0 3px hsla(199, 90%, 80%, 0.5));
486
+ }
487
+ .shooter::before {
488
+ content: '';
489
+ position: absolute;
490
+ right: -2px;
491
+ top: 50%;
492
+ width: 6px;
493
+ height: 6px;
494
+ border-radius: 50%;
495
+ transform: translateY(-50%);
496
+ background: radial-gradient(circle, #fff 0%, hsla(199, 95%, 88%, 0.95) 50%, transparent 75%);
497
+ box-shadow:
498
+ 0 0 8px 2px #fff,
499
+ 0 0 20px 7px hsla(199, 90%, 75%, 0.85),
500
+ 0 0 38px 14px hsla(199, 90%, 60%, 0.4);
501
+ }
502
+ .shooter::after {
503
+ content: '';
504
+ position: absolute;
505
+ left: 0;
506
+ top: 50%;
507
+ width: 55%;
508
+ height: 1px;
509
+ transform: translateY(-50%);
510
+ background: hsla(199, 85%, 92%, 0.65);
511
+ filter: blur(2px);
512
+ }
513
+ .elevation-1 {
514
+ box-shadow: 0 1px 2px hsl(var(--shadow) / 0.06), 0 1px 3px hsl(var(--shadow) / 0.1);
515
+ }
516
+ .elevation-2 {
517
+ box-shadow: 0 2px 4px hsl(var(--shadow) / 0.06), 0 4px 12px hsl(var(--shadow) / 0.12);
518
+ }
519
+ .elevation-3 {
520
+ box-shadow: 0 2px 6px hsl(var(--shadow) / 0.08), 0 8px 24px hsl(var(--shadow) / 0.14);
521
+ }
522
+ .elevation-4 {
523
+ box-shadow: 0 4px 12px hsl(var(--shadow) / 0.1), 0 16px 40px hsl(var(--shadow) / 0.18);
524
+ }
525
+ .pressed {
526
+ box-shadow: inset 0 1px 2px hsl(var(--shadow) / 0.18);
527
+ }
528
+ .glass-refractive {
529
+ -webkit-backdrop-filter: blur(14px) saturate(180%);
530
+ position: relative;
531
+ overflow: hidden;
532
+ background: hsl(var(--card) / 0.5);
533
+ backdrop-filter: blur(14px) saturate(180%);
534
+ border: 1px solid hsl(var(--foreground) / 0.14);
535
+ border-radius: var(--radius-xl, 1rem);
536
+ box-shadow: 0 1px 2px hsl(var(--shadow) / 0.06), 0 8px 24px hsl(var(--shadow) / 0.14), inset 0 1px 0 hsl(0 0% 100% / 0.18);
537
+ }
538
+ .glass-refractive::before {
539
+ content: "";
540
+ position: absolute;
541
+ inset: 0;
542
+ border-radius: inherit;
543
+ background: linear-gradient(150deg, hsl(0 0% 100% / 0.16), transparent 42%);
544
+ pointer-events: none;
545
+ }
546
+ .card {
547
+ -webkit-backdrop-filter: blur(8px) saturate(150%);
548
+ position: relative;
549
+ background: hsl(var(--card) / 0.55);
550
+ backdrop-filter: blur(8px) saturate(150%);
551
+ border: 1px solid hsl(var(--foreground) / 0.16);
552
+ border-radius: var(--radius-xl, 1rem);
553
+ box-shadow: 0 1px 2px hsl(var(--shadow) / 0.05), 0 4px 12px hsl(var(--shadow) / 0.1);
554
+ transition: transform .25s cubic-bezier(.16,1,.3,1), box-shadow .25s ease, border-color .2s ease;
555
+ }
556
+ .a4-field {
557
+ transition: box-shadow .16s ease, border-color .16s ease;
558
+ }
559
+ .bg-glass {
560
+ -webkit-backdrop-filter: blur(14px) saturate(160%);
561
+ background: hsl(var(--card) / 0.72);
562
+ backdrop-filter: blur(14px) saturate(160%);
563
+ border: 1px solid hsl(var(--foreground) / 0.14);
564
+ }
565
+ .tile-glass {
566
+ background: hsl(var(--foreground) / 0.055);
567
+ border: 1px solid hsl(var(--foreground) / 0.09);
568
+ }
569
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
570
+ .card {
571
+ background: hsl(var(--card) / 0.92);
572
+ }
573
+ }
574
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
575
+ .bg-glass {
576
+ background: hsl(var(--card) / 0.95);
577
+ }
578
+ }
579
+ @media (prefers-reduced-transparency: reduce) {
580
+ .card {
581
+ background: hsl(var(--card) / 0.92);
582
+ }
583
+ }
584
+ @media (prefers-reduced-transparency: reduce) {
585
+ .bg-glass {
586
+ background: hsl(var(--card) / 0.95);
587
+ }
588
+ }
589
+ }
590
+
591
+ @layer utilities {
592
+ :where(.space-y-0\.5 > :not(:last-child)) {
593
+ margin-block-end: 0;
594
+ }
595
+ .space-y-0\.5 > :not([hidden]) ~ :not([hidden]) {
596
+ --tw-space-y-reverse: 0;
597
+ margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));
598
+ margin-bottom: calc(0.125rem * var(--tw-space-y-reverse))
599
+ }
600
+ :where(.space-y-1 > :not(:last-child)) {
601
+ margin-block-end: 0;
602
+ }
603
+ .space-y-1 > :not([hidden]) ~ :not([hidden]) {
604
+ --tw-space-y-reverse: 0;
605
+ margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
606
+ margin-bottom: calc(0.25rem * var(--tw-space-y-reverse))
607
+ }
608
+ :where(.space-y-1\.5 > :not(:last-child)) {
609
+ margin-block-end: 0;
610
+ }
611
+ .space-y-1\.5 > :not([hidden]) ~ :not([hidden]) {
612
+ --tw-space-y-reverse: 0;
613
+ margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));
614
+ margin-bottom: calc(0.375rem * var(--tw-space-y-reverse))
615
+ }
616
+ :where(.space-y-2 > :not(:last-child)) {
617
+ margin-block-end: 0;
618
+ }
619
+ .space-y-2 > :not([hidden]) ~ :not([hidden]) {
620
+ --tw-space-y-reverse: 0;
621
+ margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
622
+ margin-bottom: calc(0.5rem * var(--tw-space-y-reverse))
623
+ }
624
+ :where(.space-y-4 > :not(:last-child)) {
625
+ margin-block-end: 0;
626
+ }
627
+ .space-y-4 > :not([hidden]) ~ :not([hidden]) {
628
+ --tw-space-y-reverse: 0;
629
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
630
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse))
631
+ }
632
+ :where(.space-y-5 > :not(:last-child)) {
633
+ margin-block-end: 0;
634
+ }
635
+ .space-y-5 > :not([hidden]) ~ :not([hidden]) {
636
+ --tw-space-y-reverse: 0;
637
+ margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));
638
+ margin-bottom: calc(1.25rem * var(--tw-space-y-reverse))
639
+ }
640
+ :where(.space-y-6 > :not(:last-child)) {
641
+ margin-block-end: 0;
642
+ }
643
+ .space-y-6 > :not([hidden]) ~ :not([hidden]) {
644
+ --tw-space-y-reverse: 0;
645
+ margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
646
+ margin-bottom: calc(1.5rem * var(--tw-space-y-reverse))
647
+ }
648
+ :where(.divide-x > :not(:last-child)) {
649
+ border-inline-end-width: 0;
650
+ }
651
+ .divide-x > :not([hidden]) ~ :not([hidden]) {
652
+ --tw-divide-x-reverse: 0;
653
+ border-right-width: calc(1px * var(--tw-divide-x-reverse));
654
+ border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)))
655
+ }
656
+ :where(.divide-y > :not(:last-child)) {
657
+ border-bottom-width: 0;
658
+ }
659
+ .divide-y > :not([hidden]) ~ :not([hidden]) {
660
+ --tw-divide-y-reverse: 0;
661
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
662
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse))
663
+ }
664
+ :where(.divide-border > :not(:last-child)) {
665
+ border-color: #e5e7eb;
666
+ }
667
+ .divide-border > :not([hidden]) ~ :not([hidden]) {
668
+ --tw-divide-opacity: 1;
669
+ border-color: hsl(var(--border) / var(--tw-divide-opacity, 1))
670
+ }
671
+ :where(.divide-border\/60 > :not(:last-child)) {
672
+ border-color: #e5e7eb;
673
+ }
674
+ .divide-border\/60 > :not([hidden]) ~ :not([hidden]) {
675
+ border-color: hsl(var(--border) / 0.6)
676
+ }
677
+ .bg-gradient-to-b {
678
+ --tw-gradient-position: to bottom;
679
+ }
680
+
681
+ .bg-gradient-to-br {
682
+ --tw-gradient-position: to bottom right;
683
+ }
684
+
685
+ .bg-gradient-to-r {
686
+ --tw-gradient-position: to right;
687
+ }
688
+
689
+ .bg-gradient-to-t {
690
+ --tw-gradient-position: to top;
691
+ }
692
+
693
+ .from-black\/70 {
694
+ --tw-gradient-from: rgb(0 0 0 / 0.7);
695
+ }
696
+
697
+ .from-black\/80 {
698
+ --tw-gradient-from: rgb(0 0 0 / 0.8);
699
+ }
700
+
701
+ .from-primary\/25 {
702
+ --tw-gradient-from: hsl(var(--primary) / 0.25);
703
+ }
704
+
705
+ .from-primary\/30 {
706
+ --tw-gradient-from: hsl(var(--primary) / 0.3);
707
+ }
708
+
709
+ .from-primary\/40 {
710
+ --tw-gradient-from: hsl(var(--primary) / 0.4);
711
+ }
712
+
713
+ .via-black\/40 {
714
+ --tw-gradient-via: rgb(0 0 0 / 0.4);
715
+ }
716
+
717
+ .via-black\/55 {
718
+ --tw-gradient-via: rgb(0 0 0 / 0.55);
719
+ }
720
+
721
+ .via-foreground\/25 {
722
+ --tw-gradient-via: hsl(var(--foreground) / 0.25);
723
+ }
724
+
725
+ .to-accent\/20 {
726
+ --tw-gradient-to: hsl(var(--accent) / 0.2);
727
+ }
728
+
729
+ .to-black\/75 {
730
+ --tw-gradient-to: rgb(0 0 0 / 0.75);
731
+ }
732
+
733
+ .outline-none {
734
+ outline: 2px solid transparent;
735
+ outline-offset: 2px
736
+ }
737
+ .before\:bg-gradient-to-r::before {
738
+ --tw-gradient-position: to right;
739
+ }
740
+
741
+ .before\:from-foreground\/60::before {
742
+ --tw-gradient-from: hsl(var(--foreground) / 0.6);
743
+ }
744
+
745
+ .hover\:from-primary\/40:hover {
746
+ --tw-gradient-from: hsl(var(--primary) / 0.4);
747
+ }
748
+
749
+ .focus\:outline-none:focus {
750
+ outline: 2px solid transparent;
751
+ outline-offset: 2px
752
+ }
753
+ .focus-visible\:outline-none:focus-visible {
754
+ outline: 2px solid transparent;
755
+ outline-offset: 2px
756
+ }
757
+ @media (min-width: 640px) {
758
+ :where(.sm\:divide-y-0 > :not(:last-child)) {
759
+ border-bottom-width: 0;
760
+ }
761
+ .sm\:divide-y-0 > :not([hidden]) ~ :not([hidden]) {
762
+ --tw-divide-y-reverse: 0;
763
+ border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));
764
+ border-bottom-width: calc(0px * var(--tw-divide-y-reverse))
765
+ }
766
+ }
767
+ :where(.rtl\:divide-x-reverse:where([dir="rtl"], [dir="rtl"] *) > :not(:last-child)) {
768
+ border-color: #e5e7eb;
769
+ }
770
+ .rtl\:divide-x-reverse:where([dir="rtl"], [dir="rtl"] *) > :not([hidden]) ~ :not([hidden]) {
771
+ --tw-divide-x-reverse: 1
772
+ }
773
+ :where(.modal-overlay)[data-expanded] {
774
+ animation: modal-overlay-in 0.15s ease-out;
775
+ }
776
+ :where(.modal-overlay)[data-closed] {
777
+ animation: modal-overlay-out 0.15s ease-in;
778
+ }
779
+ :where(.modal-content)[data-expanded] {
780
+ animation: modal-content-in 0.18s ease-out;
781
+ }
782
+ :where(.modal-content)[data-closed] {
783
+ animation: modal-content-out 0.15s ease-in;
784
+ }
785
+ :where(.toast-item)[data-opened] {
786
+ animation: toast-in 0.2s ease-out;
787
+ }
788
+ :where(.toast-item)[data-closed] {
789
+ animation: toast-out 0.18s ease-in;
790
+ }
791
+ :where(.accordion-content)[data-expanded] {
792
+ animation: accordion-down 0.2s ease-out;
793
+ }
794
+ :where(.accordion-content)[data-closed] {
795
+ animation: accordion-up 0.2s ease-out;
796
+ }
797
+ :where(.drawer-content)[data-expanded] {
798
+ animation: drawer-in 0.28s cubic-bezier(0.16, 1, 0.3, 1);
799
+ }
800
+ :where(.drawer-content)[data-closed] {
801
+ animation: drawer-out 0.2s ease-in;
802
+ }
803
+ @media (prefers-reduced-motion: reduce) {
804
+ :where(html):not(.force-motion) * {
805
+ animation-duration: 0.001ms !important;
806
+ animation-iteration-count: 1 !important;
807
+ transition-duration: 0.001ms !important;
808
+ scroll-behavior: auto !important;
809
+ }
810
+ }
811
+ :where(.navmenu-viewport)[data-expanded] {
812
+ animation: navmenu-viewport-in 0.2s ease-out;
813
+ }
814
+ :where(.navmenu-viewport)[data-closed] {
815
+ animation: navmenu-viewport-out 0.15s ease-in;
816
+ }
817
+ :where(.navmenu-content)[data-motion='from-start'] {
818
+ animation: navmenu-from-start 0.25s ease-out;
819
+ }
820
+ :where(.navmenu-content)[data-motion='from-end'] {
821
+ animation: navmenu-from-end 0.25s ease-out;
822
+ }
823
+ :where(.navmenu-content)[data-motion='to-start'] {
824
+ animation: navmenu-to-start 0.25s ease-in forwards;
825
+ }
826
+ :where(.navmenu-content)[data-motion='to-end'] {
827
+ animation: navmenu-to-end 0.25s ease-in forwards;
828
+ }
829
+ #space {
830
+ position: fixed;
831
+ inset: 0;
832
+ z-index: 0;
833
+ pointer-events: none;
834
+ overflow: hidden;
835
+ }
836
+ #space .sky {
837
+ position: absolute;
838
+ inset: 0;
839
+ background:
840
+ radial-gradient(1200px 700px at 82% -8%, hsl(var(--primary) / 0.34), transparent 60%),
841
+ radial-gradient(900px 600px at 8% 12%, hsl(var(--accent) / 0.28), transparent 60%),
842
+ radial-gradient(1000px 800px at 50% 120%, hsl(var(--accent) / 0.22), transparent 55%),
843
+ radial-gradient(700px 500px at 30% 55%, hsl(var(--destructive) / 0.12), transparent 60%),
844
+ hsl(var(--background));
845
+ }
846
+ [data-theme='light'] #space .sky {
847
+ background:
848
+ radial-gradient(1100px 680px at 84% -10%, hsl(var(--primary) / 0.22), transparent 60%),
849
+ radial-gradient(900px 600px at 6% 8%, hsl(var(--accent) / 0.2), transparent 60%),
850
+ radial-gradient(1000px 820px at 50% 120%, hsl(var(--accent) / 0.16), transparent 55%),
851
+ radial-gradient(700px 500px at 30% 55%, hsl(var(--destructive) / 0.1), transparent 60%),
852
+ hsl(var(--background));
853
+ }
854
+ #space .aurora {
855
+ position: absolute;
856
+ top: -10%;
857
+ left: -10%;
858
+ right: -10%;
859
+ height: 46%;
860
+ background: linear-gradient(
861
+ 180deg,
862
+ hsl(var(--accent) / 0.16),
863
+ hsl(var(--primary) / 0.1) 45%,
864
+ transparent 80%
865
+ );
866
+ filter: blur(40px);
867
+ opacity: 0.55;
868
+ mix-blend-mode: screen;
869
+ }
870
+ [data-theme='light'] #space .aurora {
871
+ display: none;
872
+ }
873
+ #space #starfield {
874
+ position: absolute;
875
+ inset: 0;
876
+ }
877
+ [data-theme='light'] #space #starfield {
878
+ opacity: 0.85;
879
+ }
880
+ #space .stars {
881
+ position: absolute;
882
+ inset: -50%;
883
+ background-repeat: repeat;
884
+ background-image:
885
+ radial-gradient(4px 4px at 20px 30px, hsl(var(--foreground)), transparent),
886
+ radial-gradient(3.6px 3.6px at 120px 90px, hsl(var(--foreground)), transparent),
887
+ radial-gradient(3.2px 3.2px at 210px 160px, hsl(217 91% 78%), transparent),
888
+ radial-gradient(4.8px 4.8px at 300px 60px, hsl(199 89% 82%), transparent),
889
+ radial-gradient(3.4px 3.4px at 380px 220px, hsl(330 80% 84%), transparent),
890
+ radial-gradient(3px 3px at 90px 190px, hsl(var(--foreground)), transparent),
891
+ radial-gradient(2.8px 2.8px at 260px 250px, hsl(48 90% 82%), transparent);
892
+ background-size: 420px 300px;
893
+ opacity: 1;
894
+ animation: drift 140s linear infinite;
895
+ }
896
+ [data-theme='light'] #space .stars {
897
+ background-image:
898
+ radial-gradient(4px 4px at 20px 30px, hsl(38 92% 50%), transparent),
899
+ radial-gradient(3.6px 3.6px at 120px 90px, hsl(42 90% 52%), transparent),
900
+ radial-gradient(3.2px 3.2px at 210px 160px, hsl(32 88% 48%), transparent),
901
+ radial-gradient(4.8px 4.8px at 300px 60px, hsl(45 95% 55%), transparent),
902
+ radial-gradient(3.4px 3.4px at 380px 220px, hsl(28 85% 50%), transparent),
903
+ radial-gradient(3px 3px at 90px 190px, hsl(40 90% 50%), transparent),
904
+ radial-gradient(2.8px 2.8px at 260px 250px, hsl(48 90% 52%), transparent);
905
+ }
906
+ #space .stars.s2 {
907
+ background-size: 640px 480px;
908
+ opacity: 0.85;
909
+ animation-duration: 200s;
910
+ }
911
+ #space .stars.s3 {
912
+ background-size: 260px 190px;
913
+ opacity: 1;
914
+ animation-duration: 95s;
915
+ background-image:
916
+ radial-gradient(6px 6px at 40px 50px, hsl(var(--foreground)), transparent),
917
+ radial-gradient(5.6px 5.6px at 160px 130px, hsl(199 89% 85%), transparent),
918
+ radial-gradient(5.8px 5.8px at 250px 40px, hsl(275 80% 86%), transparent),
919
+ radial-gradient(5px 5px at 90px 20px, hsl(330 85% 85%), transparent);
920
+ }
921
+ [data-theme='light'] #space .stars.s3 {
922
+ opacity: 0.8;
923
+ background-image:
924
+ radial-gradient(6px 6px at 40px 50px, hsl(38 92% 50%), transparent),
925
+ radial-gradient(5.6px 5.6px at 160px 130px, hsl(45 95% 54%), transparent),
926
+ radial-gradient(5.8px 5.8px at 250px 40px, hsl(30 88% 48%), transparent),
927
+ radial-gradient(5px 5px at 90px 20px, hsl(50 92% 55%), transparent);
928
+ }
929
+ :where([data-theme='light']) .twinkle {
930
+ background: hsl(40 92% 50%);
931
+ box-shadow: 0 0 14px 3px hsl(40 92% 50% / 0.85);
932
+ }
933
+ #space .constellation {
934
+ position: absolute;
935
+ opacity: 1;
936
+ }
937
+ [data-theme='light'] #space .constellation {
938
+ opacity: 0.6;
939
+ }
940
+ [data-theme='light'] #space .constellation .cline {
941
+ stroke: hsl(38 92% 50%) !important;
942
+ }
943
+ [data-theme='light'] #space .constellation .cdot {
944
+ fill: hsl(222 47% 20%) !important;
945
+ }
946
+ :where(.floaty).slow {
947
+ animation-duration: 18s;
948
+ }
949
+ #satellite {
950
+ animation: satelliteDrift 46s linear infinite;
951
+ }
952
+ #cursorGlow {
953
+ border-radius: 50%;
954
+ transform: translate(-50%, -50%);
955
+ background: radial-gradient(circle, hsl(217 91% 60% / 0.1), transparent 70%);
956
+ opacity: 0;
957
+ transition: opacity 0.4s ease;
958
+ }
959
+ @media (prefers-reduced-motion: reduce) {
960
+ html:not(.force-motion) #space .stars,
961
+ :where(html):not(.force-motion) .twinkle,
962
+ :where(html):not(.force-motion) .floaty,
963
+ :where(html):not(.force-motion) .shooter,
964
+ html:not(.force-motion) #satellite,
965
+ :where(html):not(.force-motion) .asteroid {
966
+ animation: none !important;
967
+ }
968
+ }
969
+ @media (prefers-reduced-motion: reduce) {
970
+ html:not(.force-motion) #cursorGlow {
971
+ display: none !important;
972
+ }
973
+ }
974
+ @media (prefers-reduced-motion: reduce) {
975
+ html:not(.force-motion) #space .sky,
976
+ html:not(.force-motion) #space .aurora {
977
+ animation: none !important;
978
+ }
979
+ }
980
+ @media (prefers-reduced-motion: reduce) {
981
+ :where(.card).glow-edge::before {
982
+ display: none;
983
+ }
984
+ }
985
+ #scenery {
986
+ position: fixed;
987
+ inset: 0;
988
+ z-index: 0;
989
+ pointer-events: none;
990
+ overflow: hidden;
991
+ }
992
+ #scenery .themed-sky {
993
+ position: absolute;
994
+ inset: 0;
995
+ animation: sceneryPulse 16s ease-in-out infinite;
996
+ background:
997
+ radial-gradient(1200px 700px at 82% -8%, hsl(var(--primary) / 0.34), transparent 60%),
998
+ radial-gradient(900px 600px at 8% 12%, hsl(var(--accent) / 0.28), transparent 60%),
999
+ radial-gradient(1000px 800px at 50% 120%, hsl(var(--accent) / 0.22), transparent 55%),
1000
+ radial-gradient(700px 500px at 30% 55%, hsl(var(--destructive) / 0.12), transparent 60%),
1001
+ hsl(var(--background));
1002
+ }
1003
+ [data-theme='light'] #scenery .themed-sky {
1004
+ background:
1005
+ radial-gradient(1100px 680px at 84% -10%, hsl(var(--primary) / 0.22), transparent 60%),
1006
+ radial-gradient(900px 600px at 6% 8%, hsl(var(--accent) / 0.2), transparent 60%),
1007
+ radial-gradient(1000px 820px at 50% 120%, hsl(var(--accent) / 0.16), transparent 55%),
1008
+ radial-gradient(700px 500px at 30% 55%, hsl(var(--destructive) / 0.1), transparent 60%),
1009
+ hsl(var(--background));
1010
+ }
1011
+ #scenery .motif {
1012
+ position: absolute;
1013
+ user-select: none;
1014
+ will-change: transform;
1015
+ animation: motifFloat var(--dur, 9s) ease-in-out var(--delay, 0s) infinite;
1016
+ }
1017
+ @media (prefers-reduced-motion: reduce) {
1018
+ html:not(.force-motion) #scenery .motif,
1019
+ html:not(.force-motion) #scenery .themed-sky {
1020
+ animation: none !important;
1021
+ }
1022
+ }
1023
+ #snow,
1024
+ #xmas {
1025
+ position: fixed;
1026
+ inset: 0;
1027
+ z-index: 0;
1028
+ pointer-events: none;
1029
+ overflow: hidden;
1030
+ }
1031
+ #snow .snow-sky {
1032
+ position: absolute;
1033
+ inset: 0;
1034
+ background:
1035
+ radial-gradient(1200px 800px at 50% -12%, hsl(var(--primary) / 0.18), transparent 60%),
1036
+ radial-gradient(900px 700px at 82% 8%, hsl(var(--accent) / 0.14), transparent 60%), hsl(var(--background));
1037
+ }
1038
+ #snow .flake,
1039
+ #xmas .flake {
1040
+ position: absolute;
1041
+ top: -12px;
1042
+ border-radius: 50%;
1043
+ background: #fff;
1044
+ box-shadow: 0 0 4px rgba(255, 255, 255, 0.6);
1045
+ will-change: transform;
1046
+ }
1047
+ [data-theme='light'] #snow .flake,
1048
+ [data-theme='light'] #xmas .flake {
1049
+ background: hsl(205 45% 82%);
1050
+ box-shadow: 0 0 3px hsl(205 45% 72% / 0.6);
1051
+ }
1052
+ #snow .snow-bank {
1053
+ position: absolute;
1054
+ inset: auto 0 0 0;
1055
+ height: 9vh;
1056
+ background: linear-gradient(to top, hsl(0 0% 100% / 0.5), transparent);
1057
+ filter: blur(2px);
1058
+ }
1059
+ [data-theme='light'] #snow .snow-bank {
1060
+ background: linear-gradient(to top, hsl(0 0% 100% / 0.95), transparent);
1061
+ }
1062
+ :where([data-scene='snow']) .card::after {
1063
+ content: '';
1064
+ position: absolute;
1065
+ top: -3px;
1066
+ left: 10px;
1067
+ right: 10px;
1068
+ height: 5px;
1069
+ border-radius: 9999px;
1070
+ background: hsl(0 0% 100% / 0.8);
1071
+ filter: blur(1.5px);
1072
+ pointer-events: none;
1073
+ }
1074
+ #xmas .xmas-sky {
1075
+ position: absolute;
1076
+ inset: 0;
1077
+ background:
1078
+ radial-gradient(1000px 700px at 50% -12%, hsl(var(--primary) / 0.14), transparent 55%),
1079
+ radial-gradient(900px 600px at 15% 16%, hsl(var(--accent) / 0.16), transparent 60%),
1080
+ hsl(var(--background));
1081
+ }
1082
+ #xmas .light {
1083
+ position: absolute;
1084
+ top: 10px;
1085
+ width: 9px;
1086
+ height: 9px;
1087
+ border-radius: 50%;
1088
+ animation: twinkleLight 2.2s ease-in-out infinite;
1089
+ }
1090
+ @media (prefers-reduced-motion: reduce) {
1091
+ html:not(.force-motion) #snow .flake,
1092
+ html:not(.force-motion) #xmas .flake,
1093
+ html:not(.force-motion) #xmas .light {
1094
+ animation: none !important;
1095
+ }
1096
+ }
1097
+ :where([data-theme='light']) .card {
1098
+ background: hsl(var(--card) / 0.6);
1099
+ border: 1px solid hsl(var(--border));
1100
+ }
1101
+ :where(.card).glow-edge::before {
1102
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1103
+ -webkit-mask-composite: xor;
1104
+ mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1105
+ content: '';
1106
+ position: absolute;
1107
+ inset: 0;
1108
+ border-radius: inherit;
1109
+ padding: 1px;
1110
+ background: radial-gradient(220px circle at var(--mx, 50%) var(--my, 50%), hsl(var(--primary) / .9), hsl(var(--accent) / .25) 45%, transparent 70%);
1111
+ mask-composite: exclude;
1112
+ opacity: 0;
1113
+ transition: opacity .35s ease;
1114
+ pointer-events: none;
1115
+ }
1116
+ :where(.card).glow-edge:hover::before {
1117
+ opacity: 1;
1118
+ }
1119
+ @media (prefers-reduced-motion: reduce) {
1120
+ :where(.card).glow-edge::before {
1121
+ display: none;
1122
+ }
1123
+ }
1124
+ :where([data-theme='light']) .card.glow-edge::before {
1125
+ padding: 1.5px;
1126
+ background: radial-gradient(240px circle at var(--mx, 50%) var(--my, 50%), hsl(var(--primary) / 1), hsl(var(--accent) / 0.55) 42%, transparent 72%);
1127
+ }
1128
+ :where(.a4-field):focus,
1129
+ :where(.a4-field):focus-within {
1130
+ outline: none;
1131
+ border-color: hsl(var(--ring));
1132
+ box-shadow: 0 0 0 3px hsl(var(--ring) / 0.22), 0 0 16px -2px hsl(var(--ring) / 0.55);
1133
+ }
1134
+ :where(.a4-field)[aria-invalid="true"],
1135
+ :where(.a4-field)[data-invalid] {
1136
+ border-color: hsl(var(--destructive));
1137
+ box-shadow: 0 0 0 2px hsl(var(--destructive) / 0.18);
1138
+ }
1139
+ :where(.a4-field)[aria-invalid="true"]:focus,
1140
+ :where(.a4-field)[data-invalid]:focus {
1141
+ outline: none;
1142
+ box-shadow: 0 0 0 3px hsl(var(--destructive) / 0.3), 0 0 16px -2px hsl(var(--destructive) / 0.6);
1143
+ }
1144
+ :where([data-theme='light']) .a4-field:focus,
1145
+ :where([data-theme='light']) .a4-field:focus-within {
1146
+ box-shadow: 0 0 0 3px hsl(var(--ring) / 0.3), 0 0 18px -2px hsl(var(--ring) / 0.65);
1147
+ }
1148
+ :where([data-theme='light']) .bg-glass {
1149
+ background: hsl(var(--card) / 0.85);
1150
+ border: 1px solid hsl(var(--border));
1151
+ }
1152
+ :where([data-theme='light']) .tile-glass {
1153
+ background: hsl(var(--foreground) / 0.035);
1154
+ border-color: hsl(var(--foreground) / 0.09);
1155
+ }
1156
+ :where(html).calm .glow-edge::before {
1157
+ display: none !important;
1158
+ }
1159
+ :where(html).calm .badge {
1160
+ background-color: hsl(var(--muted)) !important;
1161
+ color: hsl(var(--foreground)) !important;
1162
+ --tw-ring-color: hsl(var(--border)) !important;
1163
+ }
1164
+ :where(html).calm .card,
1165
+ :where(html).calm .bg-glass {
1166
+ -webkit-backdrop-filter: none;
1167
+ background: hsl(var(--card));
1168
+ backdrop-filter: none;
1169
+ }
1170
+ :where(html).calm .tile-glass {
1171
+ background: hsl(var(--muted));
1172
+ border-color: hsl(var(--border));
1173
+ }
1174
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
1175
+ :where([data-theme='light']) .card {
1176
+ background: hsl(var(--card) / 0.96);
1177
+ }
1178
+ }
1179
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
1180
+ :where([data-theme='light']) .bg-glass {
1181
+ background: hsl(var(--card) / 0.97);
1182
+ }
1183
+ }
1184
+ @media (prefers-reduced-transparency: reduce) {
1185
+ :where([data-theme='light']) .card {
1186
+ background: hsl(var(--card) / 0.96);
1187
+ }
1188
+ }
1189
+ @media (prefers-reduced-transparency: reduce) {
1190
+ :where([data-theme='light']) .bg-glass {
1191
+ background: hsl(var(--card) / 0.97);
1192
+ }
1193
+ }
1194
+ }
1195
+
1196
+ :root {
1197
+ --background: 222 47% 7%;
1198
+ --foreground: 213 31% 91%;
1199
+ --card: 222 40% 11%;
1200
+ --card-foreground: 213 31% 91%;
1201
+ --muted: 217 33% 17%;
1202
+ --muted-foreground: 215 25% 75%;
1203
+ --border: 217 30% 22%;
1204
+ --input: 217 30% 22%;
1205
+ --primary: 217 91% 52%;
1206
+ --primary-foreground: 0 0% 100%;
1207
+ --accent: 199 89% 55%;
1208
+ --accent-foreground: 199 45% 12%;
1209
+ --ring: 217 91% 52%;
1210
+ --destructive: 0 72% 52%;
1211
+ --destructive-foreground: 0 0% 100%;
1212
+ --data-emit: 160 84% 39%;
1213
+ --data-received: 347 89% 61%;
1214
+ --data-net: 199 89% 48%;
1215
+ --font-sans: 'IBM Plex Sans', ui-sans-serif, system-ui, sans-serif;
1216
+ --font-mono: 'IBM Plex Mono', ui-monospace, monospace;
1217
+ --sidebar-w: 248px;
1218
+ --sidebar-w-collapsed: 68px;
1219
+ --shadow: 222 47% 4%;
1220
+ --radius-xl: 1rem;
1221
+ }
1222
+ :root[data-theme='light'] {
1223
+ --background: 214 32% 95%;
1224
+ --foreground: 222 47% 11%;
1225
+ --card: 0 0% 100%;
1226
+ --card-foreground: 222 47% 11%;
1227
+ --muted: 214 30% 92%;
1228
+ --muted-foreground: 215 22% 38%;
1229
+ --border: 214 24% 84%;
1230
+ --input: 214 32% 91%;
1231
+ --primary: 217 91% 52%;
1232
+ --primary-foreground: 0 0% 100%;
1233
+ --accent: 199 89% 48%;
1234
+ --accent-foreground: 199 45% 12%;
1235
+ --ring: 217 91% 52%;
1236
+ --destructive: 0 72% 50%;
1237
+ --destructive-foreground: 0 0% 100%;
1238
+ }
1239
+ :root,
1240
+ [dir='ltr'] {
1241
+ --dir-x: 1;
1242
+ }
1243
+ [dir='rtl'] {
1244
+ --dir-x: -1;
1245
+ }
1246
+ @keyframes modal-overlay-in {
1247
+ from {
1248
+ opacity: 0;
1249
+ }
1250
+ to {
1251
+ opacity: 1;
1252
+ }
1253
+ }
1254
+ @keyframes modal-overlay-out {
1255
+ from {
1256
+ opacity: 1;
1257
+ }
1258
+ to {
1259
+ opacity: 0;
1260
+ }
1261
+ }
1262
+ @keyframes modal-content-in {
1263
+ from {
1264
+ opacity: 0;
1265
+ transform: scale(0.96) translateY(4px);
1266
+ }
1267
+ to {
1268
+ opacity: 1;
1269
+ transform: scale(1) translateY(0);
1270
+ }
1271
+ }
1272
+ @keyframes modal-content-out {
1273
+ from {
1274
+ opacity: 1;
1275
+ transform: scale(1) translateY(0);
1276
+ }
1277
+ to {
1278
+ opacity: 0;
1279
+ transform: scale(0.96) translateY(4px);
1280
+ }
1281
+ }
1282
+ @keyframes toast-in {
1283
+ from {
1284
+ opacity: 0;
1285
+ transform: translateX(calc(16px * var(--dir-x, 1)));
1286
+ }
1287
+ to {
1288
+ opacity: 1;
1289
+ transform: translateX(0);
1290
+ }
1291
+ }
1292
+ @keyframes toast-out {
1293
+ from {
1294
+ opacity: 1;
1295
+ transform: translateX(0);
1296
+ }
1297
+ to {
1298
+ opacity: 0;
1299
+ transform: translateX(calc(16px * var(--dir-x, 1)));
1300
+ }
1301
+ }
1302
+ @keyframes skeleton-shimmer {
1303
+ 100% {
1304
+ transform: translateX(calc(100% * var(--dir-x, 1)));
1305
+ }
1306
+ }
1307
+ @keyframes accordion-down {
1308
+ from {
1309
+ height: 0;
1310
+ }
1311
+ to {
1312
+ height: var(--kb-accordion-content-height);
1313
+ }
1314
+ }
1315
+ @keyframes accordion-up {
1316
+ from {
1317
+ height: var(--kb-accordion-content-height);
1318
+ }
1319
+ to {
1320
+ height: 0;
1321
+ }
1322
+ }
1323
+ @keyframes list-row-in {
1324
+ from {
1325
+ opacity: 0;
1326
+ transform: translateY(6px);
1327
+ }
1328
+ to {
1329
+ opacity: 1;
1330
+ transform: none;
1331
+ }
1332
+ }
1333
+ @keyframes aurora-drift {
1334
+ 0%,
1335
+ 100% {
1336
+ transform: translate3d(0, 0, 0) scale(1);
1337
+ }
1338
+ 50% {
1339
+ transform: translate3d(3%, -3%, 0) scale(1.08);
1340
+ }
1341
+ }
1342
+ @keyframes drawer-in {
1343
+ from {
1344
+ transform: var(--drawer-offscreen, translateX(100%));
1345
+ }
1346
+ to {
1347
+ transform: translateX(0);
1348
+ }
1349
+ }
1350
+ @keyframes drawer-out {
1351
+ from {
1352
+ transform: translateX(0);
1353
+ }
1354
+ to {
1355
+ transform: var(--drawer-offscreen, translateX(100%));
1356
+ }
1357
+ }
1358
+ @keyframes questionnaire-step-in {
1359
+ from {
1360
+ opacity: 0;
1361
+ transform: translateX(calc(16px * var(--dir-x, 1)));
1362
+ }
1363
+ to {
1364
+ opacity: 1;
1365
+ transform: none;
1366
+ }
1367
+ }
1368
+ @keyframes questionnaire-step-in-back {
1369
+ from {
1370
+ opacity: 0;
1371
+ transform: translateX(calc(-16px * var(--dir-x, 1)));
1372
+ }
1373
+ to {
1374
+ opacity: 1;
1375
+ transform: none;
1376
+ }
1377
+ }
1378
+ @keyframes navmenu-viewport-in {
1379
+ from {
1380
+ opacity: 0;
1381
+ transform: translateY(-6px) scale(0.97);
1382
+ }
1383
+ to {
1384
+ opacity: 1;
1385
+ transform: none;
1386
+ }
1387
+ }
1388
+ @keyframes navmenu-viewport-out {
1389
+ from {
1390
+ opacity: 1;
1391
+ transform: none;
1392
+ }
1393
+ to {
1394
+ opacity: 0;
1395
+ transform: translateY(-6px) scale(0.97);
1396
+ }
1397
+ }
1398
+ @keyframes navmenu-from-start {
1399
+ from {
1400
+ opacity: 0;
1401
+ transform: translateX(calc(-2.5rem * var(--dir-x, 1)));
1402
+ }
1403
+ to {
1404
+ opacity: 1;
1405
+ transform: none;
1406
+ }
1407
+ }
1408
+ @keyframes navmenu-from-end {
1409
+ from {
1410
+ opacity: 0;
1411
+ transform: translateX(calc(2.5rem * var(--dir-x, 1)));
1412
+ }
1413
+ to {
1414
+ opacity: 1;
1415
+ transform: none;
1416
+ }
1417
+ }
1418
+ @keyframes navmenu-to-start {
1419
+ from {
1420
+ opacity: 1;
1421
+ visibility: visible;
1422
+ }
1423
+ to {
1424
+ opacity: 0;
1425
+ visibility: hidden;
1426
+ transform: translateX(calc(-2.5rem * var(--dir-x, 1)));
1427
+ }
1428
+ }
1429
+ @keyframes navmenu-to-end {
1430
+ from {
1431
+ opacity: 1;
1432
+ visibility: visible;
1433
+ }
1434
+ to {
1435
+ opacity: 0;
1436
+ visibility: hidden;
1437
+ transform: translateX(calc(2.5rem * var(--dir-x, 1)));
1438
+ }
1439
+ }
1440
+ @keyframes nebulaShift {
1441
+ 0%,
1442
+ 100% {
1443
+ filter: hue-rotate(0deg);
1444
+ }
1445
+ 50% {
1446
+ filter: hue-rotate(18deg);
1447
+ }
1448
+ }
1449
+ @keyframes auroraSway {
1450
+ 0%,
1451
+ 100% {
1452
+ transform: translateX(-2%) scaleY(1);
1453
+ opacity: 0.5;
1454
+ }
1455
+ 50% {
1456
+ transform: translateX(3%) scaleY(1.08);
1457
+ opacity: 0.68;
1458
+ }
1459
+ }
1460
+ @keyframes starDrift {
1461
+ from {
1462
+ transform: translate(0, 0);
1463
+ }
1464
+ to {
1465
+ transform: translate(var(--dx, 0), var(--dy, 0));
1466
+ }
1467
+ }
1468
+ @keyframes rocketFlame {
1469
+ from {
1470
+ transform: scaleY(0.8);
1471
+ opacity: 0.85;
1472
+ }
1473
+ to {
1474
+ transform: scaleY(1.06);
1475
+ opacity: 1;
1476
+ }
1477
+ }
1478
+ @keyframes drift {
1479
+ from {
1480
+ transform: translate3d(0, 0, 0);
1481
+ }
1482
+ to {
1483
+ transform: translate3d(-420px, -300px, 0);
1484
+ }
1485
+ }
1486
+ @keyframes twinkle {
1487
+ 0%,
1488
+ 100% {
1489
+ opacity: 0.25;
1490
+ transform: scale(0.6);
1491
+ }
1492
+ 50% {
1493
+ opacity: 1;
1494
+ transform: scale(1.15);
1495
+ }
1496
+ }
1497
+ @keyframes floaty {
1498
+ 0%,
1499
+ 100% {
1500
+ transform: translateY(0) rotate(0deg);
1501
+ }
1502
+ 50% {
1503
+ transform: translateY(-14px) rotate(4deg);
1504
+ }
1505
+ }
1506
+ @keyframes asteroidDrift {
1507
+ 0%,
1508
+ 100% {
1509
+ transform: translate(0, 0) rotate(0deg);
1510
+ }
1511
+ 50% {
1512
+ transform: translate(-8px, 6px) rotate(25deg);
1513
+ }
1514
+ }
1515
+ @keyframes satelliteDrift {
1516
+ from {
1517
+ transform: translate(0, 0) rotate(-18deg);
1518
+ }
1519
+ to {
1520
+ transform: translate(126vw, 34vh) rotate(-18deg);
1521
+ }
1522
+ }
1523
+ @keyframes motifFloat {
1524
+ 0%,
1525
+ 100% {
1526
+ transform: translateY(0) rotate(var(--r, 0deg));
1527
+ }
1528
+ 50% {
1529
+ transform: translateY(-16px) rotate(calc(var(--r, 0deg) + 5deg));
1530
+ }
1531
+ }
1532
+ @keyframes sceneryPulse {
1533
+ 0%,
1534
+ 100% {
1535
+ filter: brightness(1);
1536
+ }
1537
+ 50% {
1538
+ filter: brightness(1.06);
1539
+ }
1540
+ }
1541
+ @keyframes snowFall {
1542
+ 0% {
1543
+ transform: translate(0, -12px);
1544
+ }
1545
+ 100% {
1546
+ transform: translate(var(--sway, 12px), 112vh);
1547
+ }
1548
+ }
1549
+ @keyframes twinkleLight {
1550
+ 0%,
1551
+ 100% {
1552
+ opacity: 1;
1553
+ box-shadow: 0 0 9px currentColor;
1554
+ }
1555
+ 50% {
1556
+ opacity: 0.35;
1557
+ box-shadow: 0 0 3px currentColor;
1558
+ }
1559
+ }