veilkit 0.0.0-stage → 0.1.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 (64) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/LICENSE +21 -0
  3. package/README.md +245 -2
  4. package/dist/angular/index.cjs +394 -0
  5. package/dist/angular/index.cjs.map +1 -0
  6. package/dist/angular/index.d.cts +78 -0
  7. package/dist/angular/index.d.ts +78 -0
  8. package/dist/angular/index.js +394 -0
  9. package/dist/angular/index.js.map +1 -0
  10. package/dist/cli/index.cjs +25 -0
  11. package/dist/cli/index.cjs.map +1 -0
  12. package/dist/cli/index.d.cts +1 -0
  13. package/dist/cli/index.d.ts +1 -0
  14. package/dist/cli/index.js +25 -0
  15. package/dist/cli/index.js.map +1 -0
  16. package/dist/controller-5OzP0U8X.d.cts +193 -0
  17. package/dist/controller-Co5bvnaB.d.ts +193 -0
  18. package/dist/element/index.cjs +395 -0
  19. package/dist/element/index.cjs.map +1 -0
  20. package/dist/element/index.d.cts +42 -0
  21. package/dist/element/index.d.ts +42 -0
  22. package/dist/element/index.js +395 -0
  23. package/dist/element/index.js.map +1 -0
  24. package/dist/index.cjs +394 -0
  25. package/dist/index.cjs.map +1 -0
  26. package/dist/index.d.cts +209 -0
  27. package/dist/index.d.ts +209 -0
  28. package/dist/index.js +394 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/native/index.cjs +2 -0
  31. package/dist/native/index.cjs.map +1 -0
  32. package/dist/native/index.d.cts +48 -0
  33. package/dist/native/index.d.ts +48 -0
  34. package/dist/native/index.js +2 -0
  35. package/dist/native/index.js.map +1 -0
  36. package/dist/react/index.cjs +394 -0
  37. package/dist/react/index.cjs.map +1 -0
  38. package/dist/react/index.d.cts +99 -0
  39. package/dist/react/index.d.ts +99 -0
  40. package/dist/react/index.js +394 -0
  41. package/dist/react/index.js.map +1 -0
  42. package/dist/styles.css +377 -0
  43. package/dist/svelte/index.cjs +394 -0
  44. package/dist/svelte/index.cjs.map +1 -0
  45. package/dist/svelte/index.d.cts +41 -0
  46. package/dist/svelte/index.d.ts +41 -0
  47. package/dist/svelte/index.js +394 -0
  48. package/dist/svelte/index.js.map +1 -0
  49. package/dist/themes/index.cjs +2 -0
  50. package/dist/themes/index.cjs.map +1 -0
  51. package/dist/themes/index.d.cts +18 -0
  52. package/dist/themes/index.d.ts +18 -0
  53. package/dist/themes/index.js +2 -0
  54. package/dist/themes/index.js.map +1 -0
  55. package/dist/types-Ciu5e5xt.d.cts +159 -0
  56. package/dist/types-Ciu5e5xt.d.ts +159 -0
  57. package/dist/veilkit.min.js +393 -0
  58. package/dist/vue/index.cjs +394 -0
  59. package/dist/vue/index.cjs.map +1 -0
  60. package/dist/vue/index.d.cts +366 -0
  61. package/dist/vue/index.d.ts +366 -0
  62. package/dist/vue/index.js +394 -0
  63. package/dist/vue/index.js.map +1 -0
  64. package/package.json +238 -4
@@ -0,0 +1,377 @@
1
+ /* === VEILKIT CORE STYLES === */
2
+ :root {
3
+ --veil-base: #e5e7eb;
4
+ --veil-highlight: rgba(255, 255, 255, 0.7);
5
+ --veil-radius: 6px;
6
+ --veil-duration: 1.5s;
7
+ --veil-easing: cubic-bezier(0.4, 0, 0.2, 1);
8
+ --veil-direction: ltr;
9
+ --veil-border: none;
10
+ --veil-blur: none;
11
+ --veil-glow: none;
12
+ --veil-contrast: #374151;
13
+
14
+ --veil-auto-base: #e5e7eb;
15
+ --veil-auto-highlight: rgba(255, 255, 255, 0.7);
16
+ --veil-auto-contrast: #374151;
17
+ }
18
+
19
+ @media (prefers-color-scheme: dark) {
20
+ :root {
21
+ --veil-auto-base: #1f2937;
22
+ --veil-auto-highlight: rgba(255, 255, 255, 0.12);
23
+ --veil-auto-contrast: #f3f4f6;
24
+ }
25
+ }
26
+
27
+ /* === DARK THEME SELECTORS === */
28
+ [data-theme="dark"], .dark, [data-theme="dark"] .veil-skeleton {
29
+ --veil-base: #1f2937;
30
+ --veil-highlight: rgba(255, 255, 255, 0.12);
31
+ --veil-contrast: #f3f4f6;
32
+ }
33
+
34
+ /* === THEME ATTRIBUTE CLASSES === */
35
+ [data-veil-theme="light"]{--veil-base:#e5e7eb;--veil-highlight:rgba(255, 255, 255, 0.7);--veil-radius:6px;--veil-duration:1.5s;--veil-easing:cubic-bezier(0.4, 0, 0.2, 1);--veil-border:none;--veil-contrast:#374151;}[data-veil-theme="dark"]{--veil-base:#1f2937;--veil-highlight:rgba(255, 255, 255, 0.12);--veil-radius:6px;--veil-duration:1.5s;--veil-easing:cubic-bezier(0.4, 0, 0.2, 1);--veil-border:none;--veil-contrast:#f3f4f6;}[data-veil-theme="auto"]{--veil-base:var(--veil-auto-base, #e5e7eb);--veil-highlight:var(--veil-auto-highlight, rgba(255, 255, 255, 0.7));--veil-radius:6px;--veil-duration:1.5s;--veil-easing:cubic-bezier(0.4, 0, 0.2, 1);--veil-border:none;--veil-contrast:var(--veil-auto-contrast, #374151);}[data-veil-theme="glass"]{--veil-base:rgba(255, 255, 255, 0.08);--veil-highlight:rgba(255, 255, 255, 0.25);--veil-radius:12px;--veil-duration:1.8s;--veil-easing:cubic-bezier(0.25, 1, 0.5, 1);--veil-border:1px solid rgba(255, 255, 255, 0.15);--veil-blur:12px;--veil-glow:inset 0 1px 1px 0 rgba(255, 255, 255, 0.25), 0 4px 16px 0 rgba(0, 0, 0, 0.12);--veil-contrast:#ffffff;}[data-veil-theme="ios"]{--veil-base:rgba(120, 120, 128, 0.18);--veil-highlight:rgba(255, 255, 255, 0.45);--veil-radius:10px;--veil-duration:1.4s;--veil-easing:cubic-bezier(0.32, 0.72, 0, 1);--veil-border:none;--veil-contrast:#1c1c1e;}[data-veil-theme="material"]{--veil-base:#e7e0ec;--veil-highlight:#f7f2fa;--veil-radius:12px;--veil-duration:1.6s;--veil-easing:cubic-bezier(0.2, 0, 0, 1);--veil-border:none;--veil-contrast:#1d1b20;}[data-veil-theme="minimal"]{--veil-base:#f1f3f5;--veil-highlight:#ffffff;--veil-radius:4px;--veil-duration:1.4s;--veil-easing:ease-in-out;--veil-border:none;--veil-contrast:#212529;}[data-veil-theme="mono"]{--veil-base:#e0e0e0;--veil-highlight:#ffffff;--veil-radius:0px;--veil-duration:1.2s;--veil-easing:linear;--veil-border:1px solid #cccccc;--veil-contrast:#000000;}[data-veil-theme="neon"]{--veil-base:#0c0b16;--veil-highlight:rgba(0, 240, 255, 0.5);--veil-radius:8px;--veil-duration:1.6s;--veil-easing:cubic-bezier(0.4, 0, 0.2, 1);--veil-border:1px solid rgba(0, 240, 255, 0.3);--veil-glow:0 0 12px rgba(0, 240, 255, 0.35);--veil-contrast:#00f0ff;}[data-veil-theme="sunset"]{--veil-base:#fed7aa;--veil-highlight:#fff7ed;--veil-radius:8px;--veil-duration:1.7s;--veil-easing:cubic-bezier(0.4, 0, 0.2, 1);--veil-border:none;--veil-glow:0 0 8px rgba(251, 146, 60, 0.25);--veil-contrast:#7c2d12;}[data-veil-theme="ocean"]{--veil-base:#0f2937;--veil-highlight:rgba(56, 189, 248, 0.45);--veil-radius:8px;--veil-duration:1.7s;--veil-easing:cubic-bezier(0.4, 0, 0.2, 1);--veil-border:1px solid rgba(56, 189, 248, 0.2);--veil-glow:0 0 10px rgba(56, 189, 248, 0.25);--veil-contrast:#38bdf8;}
36
+
37
+ /* === BASE SKELETON ELEMENT === */
38
+ .veil-skeleton {
39
+ position: relative;
40
+ display: block;
41
+ box-sizing: border-box;
42
+ background-color: var(--veil-base, #e5e7eb);
43
+ border-radius: var(--veil-radius, 6px);
44
+ border: var(--veil-border, none);
45
+ box-shadow: var(--veil-glow, none);
46
+ overflow: hidden;
47
+ pointer-events: none;
48
+ user-select: none;
49
+ min-height: 12px;
50
+ }
51
+
52
+ [data-veil-theme="glass"] .veil-skeleton,
53
+ .veil-skeleton[data-veil-theme="glass"] {
54
+ backdrop-filter: blur(var(--veil-blur, 12px));
55
+ -webkit-backdrop-filter: blur(var(--veil-blur, 12px));
56
+ }
57
+
58
+ /* === SHIMMER / ANIMATION OVERLAY === */
59
+ .veil-skeleton::after {
60
+ content: "";
61
+ position: absolute;
62
+ top: 0;
63
+ left: 0;
64
+ right: 0;
65
+ bottom: 0;
66
+ pointer-events: none;
67
+ will-change: transform, opacity;
68
+ background: linear-gradient(
69
+ 90deg,
70
+ transparent 0%,
71
+ var(--veil-highlight, rgba(255, 255, 255, 0.7)) 50%,
72
+ transparent 100%
73
+ );
74
+ animation-duration: var(--veil-duration, 1.5s);
75
+ animation-timing-function: var(--veil-easing, cubic-bezier(0.4, 0, 0.2, 1));
76
+ animation-iteration-count: infinite;
77
+ animation-delay: var(--veil-sync-delay, 0s);
78
+ animation-play-state: var(--veil-play-state, running);
79
+ }
80
+
81
+ /* Animation name mapping */
82
+ .veil-skeleton[data-veil-anim="shimmer"]::after,
83
+ .veil-skeleton:not([data-veil-anim])::after {
84
+ animation-name: veil-shimmer-ltr;
85
+ }
86
+ .veil-skeleton[data-veil-dir="rtl"]::after,
87
+ [dir="rtl"] .veil-skeleton[data-veil-anim="shimmer"]::after {
88
+ animation-name: veil-shimmer-rtl;
89
+ }
90
+ .veil-skeleton[data-veil-dir="ttb"]::after {
91
+ animation-name: veil-shimmer-ttb;
92
+ background: linear-gradient(180deg, transparent 0%, var(--veil-highlight, rgba(255,255,255,0.7)) 50%, transparent 100%);
93
+ }
94
+ .veil-skeleton[data-veil-dir="btt"]::after {
95
+ animation-name: veil-shimmer-btt;
96
+ background: linear-gradient(0deg, transparent 0%, var(--veil-highlight, rgba(255,255,255,0.7)) 50%, transparent 100%);
97
+ }
98
+
99
+ .veil-skeleton[data-veil-anim="wave"]::after {
100
+ animation-name: veil-wave;
101
+ }
102
+
103
+ .veil-skeleton[data-veil-anim="pulse"]::after {
104
+ background: none;
105
+ }
106
+ .veil-skeleton[data-veil-anim="pulse"] {
107
+ animation: veil-pulse var(--veil-duration, 1.5s) var(--veil-easing, ease-in-out) infinite;
108
+ animation-delay: var(--veil-sync-delay, 0s);
109
+ animation-play-state: var(--veil-play-state, running);
110
+ }
111
+
112
+ .veil-skeleton[data-veil-anim="blink"]::after {
113
+ background: none;
114
+ }
115
+ .veil-skeleton[data-veil-anim="blink"] {
116
+ animation: veil-blink var(--veil-duration, 1.2s) steps(2, start) infinite;
117
+ animation-delay: var(--veil-sync-delay, 0s);
118
+ animation-play-state: var(--veil-play-state, running);
119
+ }
120
+
121
+ .veil-skeleton[data-veil-anim="breathe"]::after {
122
+ background: none;
123
+ }
124
+ .veil-skeleton[data-veil-anim="breathe"] {
125
+ animation: veil-breathe var(--veil-duration, 2.2s) var(--veil-easing, ease-in-out) infinite;
126
+ animation-delay: var(--veil-sync-delay, 0s);
127
+ animation-play-state: var(--veil-play-state, running);
128
+ }
129
+
130
+ .veil-skeleton[data-veil-anim="glass-shine"]::after {
131
+ animation-name: veil-glass-shine;
132
+ background: linear-gradient(
133
+ 115deg,
134
+ transparent 20%,
135
+ var(--veil-highlight, rgba(255, 255, 255, 0.4)) 50%,
136
+ transparent 80%
137
+ );
138
+ }
139
+
140
+ .veil-skeleton[data-veil-anim="gradient-flow"]::after {
141
+ width: 300%;
142
+ animation-name: veil-gradient-flow;
143
+ background: linear-gradient(
144
+ 90deg,
145
+ var(--veil-base, #e5e7eb) 0%,
146
+ var(--veil-highlight, rgba(255, 255, 255, 0.8)) 30%,
147
+ var(--veil-base, #e5e7eb) 60%,
148
+ var(--veil-highlight, rgba(255, 255, 255, 0.8)) 100%
149
+ );
150
+ }
151
+
152
+ .veil-skeleton[data-veil-anim="aurora"]::after {
153
+ width: 160%;
154
+ height: 160%;
155
+ animation-name: veil-aurora;
156
+ background: radial-gradient(
157
+ circle at 50% 50%,
158
+ rgba(56, 189, 248, 0.3) 0%,
159
+ rgba(168, 85, 247, 0.25) 45%,
160
+ rgba(236, 72, 153, 0.2) 75%,
161
+ transparent 100%
162
+ );
163
+ }
164
+
165
+ .veil-skeleton[data-veil-anim="scan-line"]::after {
166
+ height: 30%;
167
+ animation-name: veil-scan-line;
168
+ background: linear-gradient(180deg, transparent, var(--veil-highlight, rgba(0, 240, 255, 0.8)), transparent);
169
+ }
170
+
171
+ .veil-skeleton[data-veil-anim="sparkle"]::after {
172
+ animation-name: veil-sparkle;
173
+ }
174
+
175
+ .veil-skeleton[data-veil-anim="neon-glow"] {
176
+ animation: veil-neon-glow var(--veil-duration, 1.6s) ease-in-out infinite;
177
+ animation-delay: var(--veil-sync-delay, 0s);
178
+ }
179
+
180
+ .veil-skeleton[data-veil-anim="none"]::after {
181
+ display: none !important;
182
+ }
183
+
184
+ /* === PRIMITIVE VARIANTS === */
185
+ .veil-skeleton[data-veil-shape="line"] {
186
+ height: 1em;
187
+ margin: 0.35em 0;
188
+ border-radius: var(--veil-radius, 4px);
189
+ }
190
+ .veil-skeleton[data-veil-shape="circle"] {
191
+ border-radius: 50% !important;
192
+ aspect-ratio: 1 / 1;
193
+ }
194
+ .veil-skeleton[data-veil-shape="heading"] {
195
+ height: 1.8em;
196
+ margin: 0.5em 0;
197
+ border-radius: var(--veil-radius, 6px);
198
+ }
199
+ .veil-skeleton[data-veil-shape="button"] {
200
+ height: 2.5rem;
201
+ border-radius: var(--veil-radius, 8px);
202
+ }
203
+ .veil-skeleton[data-veil-shape="badge"] {
204
+ height: 1.35rem;
205
+ border-radius: 9999px;
206
+ display: inline-block;
207
+ }
208
+ .veil-skeleton[data-veil-shape="icon"] {
209
+ width: 1.5rem;
210
+ height: 1.5rem;
211
+ border-radius: var(--veil-radius, 6px);
212
+ display: inline-block;
213
+ }
214
+ .veil-skeleton[data-veil-shape="input"] {
215
+ height: 2.6rem;
216
+ border-radius: var(--veil-radius, 8px);
217
+ }
218
+ .veil-skeleton[data-veil-shape="divider"] {
219
+ height: 1px;
220
+ width: 100%;
221
+ margin: 1rem 0;
222
+ min-height: 1px;
223
+ }
224
+
225
+ /* Natural randomized last-line widths */
226
+ .veil-lines-group > .veil-skeleton:last-child {
227
+ width: var(--veil-last-width, 68%);
228
+ }
229
+
230
+ /* === ACCESSIBILITY === */
231
+ .veil-sr-only {
232
+ position: absolute !important;
233
+ width: 1px !important;
234
+ height: 1px !important;
235
+ padding: 0 !important;
236
+ margin: -1px !important;
237
+ overflow: hidden !important;
238
+ clip: rect(0, 0, 0, 0) !important;
239
+ white-space: nowrap !important;
240
+ border-width: 0 !important;
241
+ }
242
+
243
+ /* prefers-reduced-motion */
244
+ @media (prefers-reduced-motion: reduce) {
245
+ .veil-skeleton::after {
246
+ animation: none !important;
247
+ display: none !important;
248
+ }
249
+ .veil-skeleton {
250
+ animation: veil-pulse 3s ease-in-out infinite !important;
251
+ transform: none !important;
252
+ }
253
+ }
254
+
255
+ /* forced-colors */
256
+ @media (forced-colors: active) {
257
+ .veil-skeleton {
258
+ forced-color-adjust: none;
259
+ background-color: ButtonFace !important;
260
+ outline: 1px solid Highlight !important;
261
+ }
262
+ .veil-skeleton::after {
263
+ display: none !important;
264
+ }
265
+ }
266
+
267
+ /* Offscreen & Tab Hidden Pausing */
268
+ [data-veil-tab-hidden="true"] .veil-skeleton,
269
+ [data-veil-tab-hidden="true"] .veil-skeleton::after,
270
+ [data-veil-offscreen="true"],
271
+ [data-veil-offscreen="true"]::after {
272
+ animation-play-state: paused !important;
273
+ }
274
+
275
+ /* === REVEAL TRANSITIONS === */
276
+ .veil-revealing {
277
+ position: relative;
278
+ }
279
+ .veil-reveal-fade {
280
+ animation: veil-reveal-fade 350ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
281
+ }
282
+ .veil-reveal-blur-in {
283
+ animation: veil-reveal-blur 400ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
284
+ }
285
+ .veil-reveal-slide-up {
286
+ animation: veil-reveal-slide 400ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
287
+ }
288
+ .veil-reveal-scale {
289
+ animation: veil-reveal-scale 350ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
290
+ }
291
+
292
+ @keyframes veil-reveal-fade {
293
+ 0% { opacity: 0; }
294
+ 100% { opacity: 1; }
295
+ }
296
+ @keyframes veil-reveal-blur {
297
+ 0% { opacity: 0; filter: blur(8px); }
298
+ 100% { opacity: 1; filter: blur(0px); }
299
+ }
300
+ @keyframes veil-reveal-slide {
301
+ 0% { opacity: 0; transform: translateY(12px); }
302
+ 100% { opacity: 1; transform: translateY(0); }
303
+ }
304
+ @keyframes veil-reveal-scale {
305
+ 0% { opacity: 0; transform: scale(0.96); }
306
+ 100% { opacity: 1; transform: scale(1); }
307
+ }
308
+
309
+ /* === SPINNERS, PROGRESS, OVERLAY, BUTTON, LAZY IMAGE === */
310
+ .veil-spinner {
311
+ display: inline-block;
312
+ box-sizing: border-box;
313
+ vertical-align: middle;
314
+ }
315
+ .veil-overlay {
316
+ position: absolute;
317
+ inset: 0;
318
+ display: flex;
319
+ flex-direction: column;
320
+ align-items: center;
321
+ justify-content: center;
322
+ gap: 12px;
323
+ background-color: var(--veil-overlay-bg, rgba(255, 255, 255, 0.75));
324
+ backdrop-filter: blur(var(--veil-overlay-blur, 6px));
325
+ -webkit-backdrop-filter: blur(var(--veil-overlay-blur, 6px));
326
+ z-index: 100;
327
+ transition: opacity 250ms ease;
328
+ }
329
+ .veil-overlay-fullscreen {
330
+ position: fixed !important;
331
+ z-index: 999999 !important;
332
+ }
333
+ .veil-progress-bar {
334
+ position: fixed;
335
+ top: 0;
336
+ left: 0;
337
+ right: 0;
338
+ height: 3px;
339
+ z-index: 999999;
340
+ background: transparent;
341
+ pointer-events: none;
342
+ }
343
+ .veil-progress-inner {
344
+ height: 100%;
345
+ background: var(--veil-progress-color, #3b82f6);
346
+ box-shadow: 0 0 10px var(--veil-progress-color, #3b82f6), 0 0 5px var(--veil-progress-color, #3b82f6);
347
+ transition: width 200ms ease, opacity 350ms ease;
348
+ }
349
+ .veil-btn-loading {
350
+ position: relative;
351
+ pointer-events: none;
352
+ cursor: default;
353
+ }
354
+ .veil-btn-spinner-wrap {
355
+ display: inline-flex;
356
+ align-items: center;
357
+ justify-content: center;
358
+ margin-right: 8px;
359
+ }
360
+ .veil-lazy-img-wrap {
361
+ position: relative;
362
+ overflow: hidden;
363
+ display: inline-block;
364
+ }
365
+ .veil-lazy-img {
366
+ transition: opacity 350ms ease, filter 350ms ease;
367
+ }
368
+ .veil-lazy-img-loading {
369
+ opacity: 0;
370
+ filter: blur(10px);
371
+ }
372
+ .veil-lazy-img-loaded {
373
+ opacity: 1;
374
+ filter: blur(0px);
375
+ }
376
+
377
+ @keyframes veil-shimmer-ltr{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes veil-shimmer-rtl{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes veil-shimmer-ttb{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes veil-shimmer-btt{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}@keyframes veil-wave{0%{transform:translateX(-120%) scaleX(0.8);opacity:0.3}50%{opacity:0.95}100%{transform:translateX(120%) scaleX(1.2);opacity:0.3}}@keyframes veil-pulse{0%,100%{opacity:1}50%{opacity:0.38}}@keyframes veil-blink{0%,49%{opacity:1}50%,99%{opacity:0.2}100%{opacity:1}}@keyframes veil-breathe{0%,100%{opacity:0.65;transform:scale(0.995)}50%{opacity:1;transform:scale(1.005)}}@keyframes veil-glass-shine{0%{transform:translate3d(-150%,-150%,0) rotate(35deg);opacity:0.1}40%,60%{opacity:0.85}100%{transform:translate3d(200%,200%,0) rotate(35deg);opacity:0.1}}@keyframes veil-gradient-flow{0%{transform:translateX(-66.6%)}100%{transform:translateX(0%)}}@keyframes veil-aurora{0%{transform:translate3d(-20%,-15%,0) rotate(0deg) scale(1);opacity:0.5}50%{transform:translate3d(25%,20%,0) rotate(180deg) scale(1.25);opacity:0.85}100%{transform:translate3d(-20%,-15%,0) rotate(360deg) scale(1);opacity:0.5}}@keyframes veil-scan-line{0%{transform:translateY(-100%);opacity:0.2}50%{opacity:1}100%{transform:translateY(300%);opacity:0.2}}@keyframes veil-sparkle{0%,100%{opacity:0.2;transform:scale(0.98)}25%{opacity:0.8;transform:scale(1.02)}50%{opacity:0.3;transform:scale(0.99)}75%{opacity:0.95;transform:scale(1.01)}}@keyframes veil-neon-glow{0%,100%{opacity:0.45;transform:scale(0.998)}50%{opacity:1;transform:scale(1.002)}}[data-veil-anim="stagger"]>*{animation-delay:calc(var(--veil-stagger-idx,0)*120ms)!important}