kuinetic 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 (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +99 -0
  3. package/dist/esm/chunk-LWS4OSLX.mjs +730 -0
  4. package/dist/esm/chunk-QZIJ7WZI.mjs +3312 -0
  5. package/dist/esm/chunk-R3TGDJKA.mjs +1264 -0
  6. package/dist/esm/core/index.mjs +34 -0
  7. package/dist/esm/effects/index.mjs +27 -0
  8. package/dist/esm/index.mjs +52 -0
  9. package/dist/kuinetic.all.js +5291 -0
  10. package/dist/kuinetic.css +2338 -0
  11. package/dist/kuinetic.js +5281 -0
  12. package/dist/types/core/activation.d.ts +21 -0
  13. package/dist/types/core/animator.d.ts +216 -0
  14. package/dist/types/core/attrs.d.ts +15 -0
  15. package/dist/types/core/capabilities.d.ts +19 -0
  16. package/dist/types/core/channels.d.ts +25 -0
  17. package/dist/types/core/compile.d.ts +49 -0
  18. package/dist/types/core/dom-watcher.d.ts +35 -0
  19. package/dist/types/core/effect-context.d.ts +49 -0
  20. package/dist/types/core/element-config.d.ts +52 -0
  21. package/dist/types/core/flip.d.ts +80 -0
  22. package/dist/types/core/gesture.d.ts +99 -0
  23. package/dist/types/core/index.d.ts +14 -0
  24. package/dist/types/core/instances.d.ts +98 -0
  25. package/dist/types/core/js-effect-preparer.d.ts +46 -0
  26. package/dist/types/core/js-params.d.ts +124 -0
  27. package/dist/types/core/owned-styles.d.ts +44 -0
  28. package/dist/types/core/params.d.ts +65 -0
  29. package/dist/types/core/parse.d.ts +22 -0
  30. package/dist/types/core/path-morph.d.ts +83 -0
  31. package/dist/types/core/play.d.ts +48 -0
  32. package/dist/types/core/registry.d.ts +38 -0
  33. package/dist/types/core/reporter.d.ts +35 -0
  34. package/dist/types/core/scroll-scheduler.d.ts +153 -0
  35. package/dist/types/core/spring.d.ts +83 -0
  36. package/dist/types/core/stagger.d.ts +19 -0
  37. package/dist/types/core/style-plan.d.ts +56 -0
  38. package/dist/types/core/types.d.ts +239 -0
  39. package/dist/types/effects/catalog/ambient.d.ts +18 -0
  40. package/dist/types/effects/catalog/core.d.ts +19 -0
  41. package/dist/types/effects/catalog/feedback.d.ts +21 -0
  42. package/dist/types/effects/catalog/index.d.ts +21 -0
  43. package/dist/types/effects/catalog/interaction-shared.d.ts +56 -0
  44. package/dist/types/effects/catalog/interaction.d.ts +22 -0
  45. package/dist/types/effects/catalog/media.d.ts +13 -0
  46. package/dist/types/effects/catalog/numbers-shared.d.ts +103 -0
  47. package/dist/types/effects/catalog/numbers.d.ts +31 -0
  48. package/dist/types/effects/catalog/shared.d.ts +3 -0
  49. package/dist/types/effects/catalog/text-shared.d.ts +180 -0
  50. package/dist/types/effects/catalog/text.d.ts +17 -0
  51. package/dist/types/effects/forms/index.d.ts +14 -0
  52. package/dist/types/effects/forms/primitives.d.ts +32 -0
  53. package/dist/types/effects/gestures/index.d.ts +19 -0
  54. package/dist/types/effects/gestures/primitives.d.ts +2 -0
  55. package/dist/types/effects/index.d.ts +19 -0
  56. package/dist/types/effects/layout/index.d.ts +12 -0
  57. package/dist/types/effects/layout/presets.d.ts +9 -0
  58. package/dist/types/effects/layout/primitives.d.ts +2 -0
  59. package/dist/types/effects/navigation/index.d.ts +30 -0
  60. package/dist/types/effects/scroll-mechanics/index.d.ts +14 -0
  61. package/dist/types/effects/scroll-mechanics/presets.d.ts +6 -0
  62. package/dist/types/effects/scroll-mechanics/primitives.d.ts +2 -0
  63. package/dist/types/effects/scroll-mechanics/tracker.d.ts +55 -0
  64. package/dist/types/effects/shared.d.ts +26 -0
  65. package/dist/types/effects/svg/index.d.ts +13 -0
  66. package/dist/types/effects/three-d/index.d.ts +20 -0
  67. package/dist/types/index.d.ts +16 -0
  68. package/package.json +78 -0
@@ -0,0 +1,2338 @@
1
+ /* src/css/base.css */
2
+ @layer kui.tokens, kui.presets, kui.effects, kui.policy;
3
+ @layer kui.tokens {
4
+ :root {
5
+ --kui-ease-expo-in: cubic-bezier(0.7, 0, 0.84, 0);
6
+ --kui-ease-expo-out: cubic-bezier(0.16, 1, 0.3, 1);
7
+ --kui-ease-expo-in-out: cubic-bezier(0.87, 0, 0.13, 1);
8
+ --kui-ease-back-in: cubic-bezier(0.36, 0, 0.66, -0.56);
9
+ --kui-ease-back-out: cubic-bezier(0.34, 1.56, 0.64, 1);
10
+ --kui-ease-back-in-out: cubic-bezier(0.68, -0.6, 0.32, 1.6);
11
+ --kui-ease-quart-out: cubic-bezier(0.25, 1, 0.5, 1);
12
+ --kui-ease-circ-out: cubic-bezier(0, 0.55, 0.45, 1);
13
+ --kui-ease-spring: linear(0, 0.4 12%, 0.9 25%, 1.06 38%, 1.01 62%, 1);
14
+ }
15
+ [data-kui-fx] {
16
+ --kui-dir: 1;
17
+ }
18
+ :dir(rtl) [data-kui-fx] {
19
+ --kui-dir: -1;
20
+ }
21
+ }
22
+ @layer kui.policy {
23
+ html[data-kui-cloak] [data-kui][data-kui-reveal]:not([data-kui-state]) {
24
+ opacity: 0 !important;
25
+ }
26
+ @media (prefers-reduced-motion: reduce) {
27
+ [data-kui-rm],
28
+ [data-kui-rm]::before,
29
+ [data-kui-rm]::after,
30
+ [data-kui-rm] .kui-odometer-strip,
31
+ [data-kui-rm][data-kui-fx~=label-float] ~ label,
32
+ [data-kui-rm][data-kui-fx~=input-underline-grow] ~ .kui-underline,
33
+ [data-kui-rm][data-kui-fx~=toggle-morph] ~ .kui-track,
34
+ [data-kui-rm][data-kui-fx~=toggle-morph] ~ .kui-track .kui-thumb,
35
+ [data-kui-rm][data-kui-fx~=checkbox-draw] ~ svg path,
36
+ [data-kui-rm][data-kui-fx~=radio-fill] ~ .kui-dot,
37
+ [data-kui-rm][data-kui-fx~=strength-meter] ~ .kui-meter > * {
38
+ transition-duration: 1ms !important;
39
+ transition-delay: 0ms !important;
40
+ }
41
+ [data-kui-rm=shorten],
42
+ [data-kui-rm=shorten]::before,
43
+ [data-kui-rm=shorten]::after {
44
+ animation-duration: 1ms !important;
45
+ animation-delay: 0ms !important;
46
+ }
47
+ [data-kui-rm=crossfade] {
48
+ animation-name: kui-in !important;
49
+ animation-duration: 200ms !important;
50
+ }
51
+ [data-kui-rm=disable] {
52
+ animation: none !important;
53
+ opacity: 1 !important;
54
+ translate: none !important;
55
+ scale: none !important;
56
+ rotate: none !important;
57
+ filter: none !important;
58
+ }
59
+ }
60
+ @media print {
61
+ [data-kui-fx],
62
+ [data-kui-reveal] {
63
+ animation: none !important;
64
+ opacity: 1 !important;
65
+ translate: none !important;
66
+ scale: none !important;
67
+ rotate: none !important;
68
+ filter: none !important;
69
+ }
70
+ }
71
+ }
72
+
73
+ /* src/css/presets.generated.css */
74
+ @layer kui.presets {
75
+ [data-kui-fx~=back-in-down] {
76
+ --kui-distance: 120px;
77
+ --kui-reveal-ease: expo-out;
78
+ }
79
+ [data-kui-fx~=back-in-up] {
80
+ --kui-distance: 120px;
81
+ --kui-reveal-ease: expo-out;
82
+ }
83
+ [data-kui-fx~=blob-morph] {
84
+ --kui-path-morph-duration: 800ms;
85
+ }
86
+ [data-kui-fx~=bob] {
87
+ --kui-ambient-float-duration: 2s;
88
+ --kui-distance: 8px;
89
+ }
90
+ [data-kui-fx~=book-page-turn] {
91
+ --kui-from-angle: -160deg;
92
+ --kui-flip-face-duration: 900ms;
93
+ }
94
+ [data-kui-fx~=bounce-in] {
95
+ --kui-from-scale: 0.3;
96
+ --kui-scale-ease: back-out;
97
+ }
98
+ [data-kui-fx~=bounce-in-down] {
99
+ --kui-distance: 60px;
100
+ --kui-reveal-ease: back-out;
101
+ }
102
+ [data-kui-fx~=bounce-in-up] {
103
+ --kui-distance: 60px;
104
+ --kui-reveal-ease: back-out;
105
+ }
106
+ [data-kui-fx~=confetti-burst] {
107
+ --kui-feedback-burst-duration: 900ms;
108
+ }
109
+ [data-kui-fx~=count-bump] {
110
+ --kui-feedback-pop-duration: 280ms;
111
+ }
112
+ [data-kui-fx~=count-compact] {
113
+ --kui-from: 0;
114
+ --kui-to: 128400;
115
+ --kui-format: compact;
116
+ }
117
+ [data-kui-fx~=count-currency] {
118
+ --kui-from: 0;
119
+ --kui-to: 4820;
120
+ --kui-format: currency;
121
+ --kui-decimals: 0;
122
+ }
123
+ [data-kui-fx~=count-down] {
124
+ --kui-from: 100;
125
+ --kui-to: 0;
126
+ }
127
+ [data-kui-fx~=count-percent] {
128
+ --kui-from: 0;
129
+ --kui-to: 0.82;
130
+ --kui-format: percent;
131
+ --kui-decimals: 0;
132
+ }
133
+ [data-kui-fx~=count-up] {
134
+ --kui-from: 0;
135
+ --kui-to: 100;
136
+ }
137
+ [data-kui-fx~=cube-rotate] {
138
+ --kui-from-angle: 90deg;
139
+ }
140
+ [data-kui-fx~=cursor-follow] {
141
+ --kui-stiffness: 300;
142
+ --kui-damping: 30;
143
+ }
144
+ [data-kui-fx~=cursor-invert] {
145
+ --kui-stiffness: 260;
146
+ --kui-damping: 26;
147
+ }
148
+ [data-kui-fx~=cursor-label] {
149
+ --kui-stiffness: 260;
150
+ --kui-damping: 26;
151
+ }
152
+ [data-kui-fx~=cursor-lag] {
153
+ --kui-stiffness: 80;
154
+ --kui-damping: 14;
155
+ }
156
+ [data-kui-fx~=curtain-wipe] {
157
+ --kui-wipe-duration: 800ms;
158
+ }
159
+ [data-kui-fx~=decode] {
160
+ --kui-charset: binary;
161
+ }
162
+ [data-kui-fx~=depth-layer] {
163
+ --kui-distance: 200px;
164
+ }
165
+ [data-kui-fx~=dot-grid-drift] {
166
+ --kui-ambient-gradient-duration: 16s;
167
+ --kui-ambient-gradient-ease: linear;
168
+ }
169
+ [data-kui-fx~=drag-inertia] {
170
+ --kui-inertia: true;
171
+ }
172
+ [data-kui-fx~=drag-x] {
173
+ --kui-axis: x;
174
+ }
175
+ [data-kui-fx~=drag-y] {
176
+ --kui-axis: y;
177
+ }
178
+ [data-kui-fx~=elastic-pull] {
179
+ --kui-return: true;
180
+ --kui-bounds: 80;
181
+ }
182
+ [data-kui-fx~=expand-to-modal] {
183
+ --kui-flip-scale: true;
184
+ --kui-flip-container-duration: 500ms;
185
+ }
186
+ [data-kui-fx~=floating-shapes] {
187
+ --kui-ambient-float-duration: 6s;
188
+ --kui-distance: 10px;
189
+ }
190
+ [data-kui-fx~=fold-panel] {
191
+ --kui-from-angle: -90deg;
192
+ }
193
+ [data-kui-fx~=glitch] {
194
+ --kui-charset: symbols;
195
+ }
196
+ [data-kui-fx~=gradient-rotate-border] {
197
+ --kui-ambient-gradient-duration: 6s;
198
+ --kui-ambient-gradient-ease: linear;
199
+ }
200
+ [data-kui-fx~=grid-to-list] {
201
+ --kui-flip-scale: true;
202
+ }
203
+ [data-kui-fx~=heart-burst] {
204
+ --kui-feedback-burst-duration: 700ms;
205
+ }
206
+ [data-kui-fx~=line-grid-drift] {
207
+ --kui-ambient-gradient-duration: 16s;
208
+ --kui-ambient-gradient-ease: linear;
209
+ }
210
+ [data-kui-fx~=magnetic-snap] {
211
+ --kui-strength: 0.6;
212
+ --kui-radius: 160;
213
+ }
214
+ [data-kui-fx~=mega-menu-drop] {
215
+ --kui-panel-reveal-duration: 550ms;
216
+ }
217
+ [data-kui-fx~=noise-overlay] {
218
+ --kui-ambient-gradient-duration: 650ms;
219
+ --kui-ambient-gradient-ease: steps(6);
220
+ }
221
+ [data-kui-fx~=odometer-roll] {
222
+ --kui-from: 0;
223
+ --kui-to: 4820;
224
+ }
225
+ [data-kui-fx~=pin-section] {
226
+ --kui-distance: 100vh;
227
+ --kui-spacer: true;
228
+ }
229
+ [data-kui-fx~=pin-spacer] {
230
+ --kui-spacer: true;
231
+ }
232
+ [data-kui-fx~=pin-until] {
233
+ --kui-spacer: false;
234
+ }
235
+ [data-kui-fx~=pop-in] {
236
+ --kui-from-scale: 0.6;
237
+ --kui-scale-ease: back-out;
238
+ }
239
+ [data-kui-fx~=pop-out] {
240
+ --kui-from-scale: 0.6;
241
+ --kui-scale-ease: back-in;
242
+ }
243
+ [data-kui-fx~=pull-to-refresh] {
244
+ --kui-feedback-pull-duration: 900ms;
245
+ --kui-feedback-pull-ease: ease-out;
246
+ }
247
+ [data-kui-fx~=rotate-in-left] {
248
+ --kui-from-angle: -45deg;
249
+ }
250
+ [data-kui-fx~=rotate-in-right] {
251
+ --kui-from-angle: 45deg;
252
+ }
253
+ [data-kui-fx~=rubber-band] {
254
+ --kui-return: true;
255
+ --kui-bounds: 120;
256
+ }
257
+ [data-kui-fx~=scanline] {
258
+ --kui-ambient-gradient-duration: 3.5s;
259
+ --kui-ambient-gradient-ease: linear;
260
+ }
261
+ [data-kui-fx~=scramble] {
262
+ --kui-charset: upper;
263
+ }
264
+ [data-kui-fx~=scroll-snap-x] {
265
+ --kui-axis: x;
266
+ }
267
+ [data-kui-fx~=scroll-snap-y] {
268
+ --kui-axis: y;
269
+ }
270
+ [data-kui-fx~=scrollytelling-step] {
271
+ --kui-steps: 4;
272
+ }
273
+ [data-kui-fx~=slide-block-end] {
274
+ --kui-distance: 100px;
275
+ --kui-from-opacity: 1;
276
+ }
277
+ [data-kui-fx~=slide-block-start] {
278
+ --kui-distance: 100px;
279
+ --kui-from-opacity: 1;
280
+ }
281
+ [data-kui-fx~=slide-down] {
282
+ --kui-distance: 100px;
283
+ --kui-from-opacity: 1;
284
+ }
285
+ [data-kui-fx~=slide-inline-end] {
286
+ --kui-distance: 100px;
287
+ --kui-from-opacity: 1;
288
+ }
289
+ [data-kui-fx~=slide-inline-start] {
290
+ --kui-distance: 100px;
291
+ --kui-from-opacity: 1;
292
+ }
293
+ [data-kui-fx~=slide-left] {
294
+ --kui-distance: 100px;
295
+ --kui-from-opacity: 1;
296
+ }
297
+ [data-kui-fx~=slide-out-down] {
298
+ --kui-distance: 100px;
299
+ --kui-from-opacity: 1;
300
+ }
301
+ [data-kui-fx~=slide-out-left] {
302
+ --kui-distance: 100px;
303
+ --kui-from-opacity: 1;
304
+ }
305
+ [data-kui-fx~=slide-out-right] {
306
+ --kui-distance: 100px;
307
+ --kui-from-opacity: 1;
308
+ }
309
+ [data-kui-fx~=slide-out-up] {
310
+ --kui-distance: 100px;
311
+ --kui-from-opacity: 1;
312
+ }
313
+ [data-kui-fx~=slide-right] {
314
+ --kui-distance: 100px;
315
+ --kui-from-opacity: 1;
316
+ }
317
+ [data-kui-fx~=slide-up] {
318
+ --kui-distance: 100px;
319
+ --kui-from-opacity: 1;
320
+ }
321
+ [data-kui-fx~=snap-back] {
322
+ --kui-return: true;
323
+ --kui-stiffness: 260;
324
+ }
325
+ [data-kui-fx~=split-chars] {
326
+ --kui-unit: chars;
327
+ --kui-direction: fade;
328
+ }
329
+ [data-kui-fx~=split-lines] {
330
+ --kui-unit: lines;
331
+ --kui-direction: fade;
332
+ }
333
+ [data-kui-fx~=split-words] {
334
+ --kui-unit: words;
335
+ --kui-direction: fade;
336
+ }
337
+ [data-kui-fx~=spotlight-follow] {
338
+ --kui-ambient-gradient-duration: 9s;
339
+ }
340
+ [data-kui-fx~=stacking-cards] {
341
+ --kui-spacer: false;
342
+ }
343
+ [data-kui-fx~=starfield] {
344
+ --kui-ambient-gradient-duration: 40s;
345
+ --kui-ambient-gradient-ease: linear;
346
+ }
347
+ [data-kui-fx~=swing-in] {
348
+ --kui-from-angle: -15deg;
349
+ --kui-rotate-ease: back-out;
350
+ }
351
+ [data-kui-fx~=swipe-x] {
352
+ --kui-axis: x;
353
+ }
354
+ [data-kui-fx~=tab-indicator-slide] {
355
+ --kui-flip-indicator-duration: 300ms;
356
+ }
357
+ [data-kui-fx~=text-jitter] {
358
+ --kui-motion: jitter;
359
+ }
360
+ [data-kui-fx~=text-reveal-down] {
361
+ --kui-unit: words;
362
+ --kui-direction: down;
363
+ }
364
+ [data-kui-fx~=text-reveal-mask] {
365
+ --kui-unit: lines;
366
+ --kui-direction: mask;
367
+ }
368
+ [data-kui-fx~=text-reveal-up] {
369
+ --kui-unit: words;
370
+ --kui-direction: up;
371
+ }
372
+ [data-kui-fx~=text-wave] {
373
+ --kui-motion: wave;
374
+ }
375
+ [data-kui-fx~=throwable] {
376
+ --kui-inertia: true;
377
+ --kui-damping: 18;
378
+ }
379
+ [data-kui-fx~=toast-slide-out] {
380
+ --kui-feedback-toast-ease: ease-in;
381
+ }
382
+ [data-kui-fx~=typewriter] {
383
+ --kui-loop: false;
384
+ }
385
+ [data-kui-fx~=typewriter-loop] {
386
+ --kui-loop: true;
387
+ }
388
+ [data-kui-fx~=wave-blob] {
389
+ --kui-ambient-gradient-duration: 12s;
390
+ }
391
+ [data-kui-fx~=wobble] {
392
+ --kui-feedback-wobble-duration: 600ms;
393
+ --kui-feedback-wobble-ease: ease-in-out;
394
+ }
395
+ }
396
+
397
+ /* src/css/entrance.css */
398
+ @layer kui.effects {
399
+ @keyframes kui-in {
400
+ from {
401
+ opacity: var(--kui-from-opacity, 0);
402
+ }
403
+ }
404
+ @keyframes kui-out {
405
+ to {
406
+ opacity: 0;
407
+ }
408
+ }
409
+ @keyframes kui-in-up {
410
+ from {
411
+ opacity: var(--kui-from-opacity, 0);
412
+ translate: 0 var(--kui-distance, 24px);
413
+ }
414
+ }
415
+ @keyframes kui-in-down {
416
+ from {
417
+ opacity: var(--kui-from-opacity, 0);
418
+ translate: 0 calc(var(--kui-distance, 24px) * -1);
419
+ }
420
+ }
421
+ @keyframes kui-in-left {
422
+ from {
423
+ opacity: var(--kui-from-opacity, 0);
424
+ translate: var(--kui-distance, 24px) 0;
425
+ }
426
+ }
427
+ @keyframes kui-in-right {
428
+ from {
429
+ opacity: var(--kui-from-opacity, 0);
430
+ translate: calc(var(--kui-distance, 24px) * -1) 0;
431
+ }
432
+ }
433
+ @keyframes kui-out-up {
434
+ to {
435
+ opacity: 0;
436
+ translate: 0 calc(var(--kui-distance, 24px) * -1);
437
+ }
438
+ }
439
+ @keyframes kui-out-down {
440
+ to {
441
+ opacity: 0;
442
+ translate: 0 var(--kui-distance, 24px);
443
+ }
444
+ }
445
+ @keyframes kui-out-left {
446
+ to {
447
+ opacity: 0;
448
+ translate: calc(var(--kui-distance, 24px) * -1) 0;
449
+ }
450
+ }
451
+ @keyframes kui-out-right {
452
+ to {
453
+ opacity: 0;
454
+ translate: var(--kui-distance, 24px) 0;
455
+ }
456
+ }
457
+ @keyframes kui-in-inline-start {
458
+ from {
459
+ opacity: var(--kui-from-opacity, 0);
460
+ translate: calc(var(--kui-distance, 24px) * var(--kui-dir, 1) * -1) 0;
461
+ }
462
+ }
463
+ @keyframes kui-in-inline-end {
464
+ from {
465
+ opacity: var(--kui-from-opacity, 0);
466
+ translate: calc(var(--kui-distance, 24px) * var(--kui-dir, 1)) 0;
467
+ }
468
+ }
469
+ @keyframes kui-zoom-in {
470
+ from {
471
+ scale: var(--kui-from-scale, 0.92);
472
+ }
473
+ }
474
+ @keyframes kui-zoom-out {
475
+ to {
476
+ scale: var(--kui-from-scale, 0.92);
477
+ }
478
+ }
479
+ @keyframes kui-zoom-in-up {
480
+ from {
481
+ scale: var(--kui-from-scale, 0.92);
482
+ translate: 0 var(--kui-distance, 24px);
483
+ }
484
+ }
485
+ @keyframes kui-zoom-in-down {
486
+ from {
487
+ scale: var(--kui-from-scale, 0.92);
488
+ translate: 0 calc(var(--kui-distance, 24px) * -1);
489
+ }
490
+ }
491
+ @keyframes kui-flip-in-x {
492
+ from {
493
+ rotate: x var(--kui-from-angle, 90deg);
494
+ }
495
+ }
496
+ @keyframes kui-flip-in-y {
497
+ from {
498
+ rotate: y var(--kui-from-angle, 90deg);
499
+ }
500
+ }
501
+ @keyframes kui-flip-out-x {
502
+ to {
503
+ rotate: x var(--kui-from-angle, 90deg);
504
+ }
505
+ }
506
+ @keyframes kui-flip-out-y {
507
+ to {
508
+ rotate: y var(--kui-from-angle, 90deg);
509
+ }
510
+ }
511
+ @keyframes kui-rotate-in {
512
+ from {
513
+ rotate: var(--kui-from-angle, -8deg);
514
+ }
515
+ }
516
+ @keyframes kui-rotate-out {
517
+ to {
518
+ rotate: var(--kui-from-angle, -8deg);
519
+ }
520
+ }
521
+ @keyframes kui-swing-in {
522
+ from {
523
+ rotate: var(--kui-from-angle, -15deg);
524
+ }
525
+ }
526
+ @keyframes kui-roll-in {
527
+ from {
528
+ rotate: var(--kui-from-angle, -120deg);
529
+ translate: calc(var(--kui-distance, 24px) * -1) 0;
530
+ }
531
+ }
532
+ @keyframes kui-roll-out {
533
+ to {
534
+ rotate: var(--kui-from-angle, -120deg);
535
+ translate: var(--kui-distance, 24px) 0;
536
+ }
537
+ }
538
+ @keyframes kui-blur-in {
539
+ from {
540
+ filter: blur(var(--kui-blur, 12px));
541
+ }
542
+ }
543
+ @keyframes kui-blur-out {
544
+ to {
545
+ filter: blur(var(--kui-blur, 12px));
546
+ }
547
+ }
548
+ @keyframes kui-fade-blur-up {
549
+ from {
550
+ opacity: var(--kui-from-opacity, 0);
551
+ translate: 0 var(--kui-distance, 24px);
552
+ filter: blur(var(--kui-blur, 12px));
553
+ }
554
+ }
555
+ @keyframes kui-fade-blur-in {
556
+ from {
557
+ opacity: var(--kui-from-opacity, 0);
558
+ filter: blur(var(--kui-blur, 12px));
559
+ }
560
+ }
561
+ [data-kui-fx*=flip-] {
562
+ transform-style: preserve-3d;
563
+ }
564
+ }
565
+
566
+ /* src/css/scroll.css */
567
+ @layer kui.effects {
568
+ @keyframes kui-parallax-y {
569
+ from {
570
+ translate: 0 calc(var(--kui-distance, 100px) * -1);
571
+ }
572
+ to {
573
+ translate: 0 var(--kui-distance, 100px);
574
+ }
575
+ }
576
+ @keyframes kui-parallax-x {
577
+ from {
578
+ translate: calc(var(--kui-distance, 100px) * -1) 0;
579
+ }
580
+ to {
581
+ translate: var(--kui-distance, 100px) 0;
582
+ }
583
+ }
584
+ @keyframes kui-parallax-scale {
585
+ from {
586
+ scale: 1;
587
+ }
588
+ to {
589
+ scale: var(--kui-to-scale, 1.2);
590
+ }
591
+ }
592
+ @keyframes kui-parallax-rotate {
593
+ from {
594
+ rotate: 0deg;
595
+ }
596
+ to {
597
+ rotate: var(--kui-to-angle, 12deg);
598
+ }
599
+ }
600
+ @keyframes kui-scroll-fade {
601
+ from {
602
+ opacity: var(--kui-from-opacity, 0);
603
+ }
604
+ to {
605
+ opacity: 1;
606
+ }
607
+ }
608
+ @keyframes kui-progress-x {
609
+ from {
610
+ scale: 0 1;
611
+ }
612
+ to {
613
+ scale: 1 1;
614
+ }
615
+ }
616
+ @keyframes kui-progress-ring {
617
+ from {
618
+ stroke-dashoffset: var(--kui-path-length, 100);
619
+ }
620
+ to {
621
+ stroke-dashoffset: 0;
622
+ }
623
+ }
624
+ [data-kui-fx~=scroll-progress-bar] {
625
+ transform-origin: left center;
626
+ }
627
+ [data-kui-fx~=scroll-progress-ring] {
628
+ stroke-dasharray: var(--kui-path-length, 100);
629
+ }
630
+ @supports (animation-timeline: view()) {
631
+ [data-kui-timeline] {
632
+ animation-range: var(--kui-range, entry 0% cover 60%);
633
+ }
634
+ }
635
+ }
636
+
637
+ /* src/css/three-d.css */
638
+ @layer kui.effects {
639
+ @keyframes kui-card-flip-y {
640
+ to {
641
+ rotate: y var(--kui-from-angle, 180deg);
642
+ }
643
+ }
644
+ @keyframes kui-card-flip-x {
645
+ to {
646
+ rotate: x var(--kui-from-angle, 180deg);
647
+ }
648
+ }
649
+ @keyframes kui-cube-rotate {
650
+ to {
651
+ rotate: y var(--kui-from-angle, 90deg);
652
+ }
653
+ }
654
+ @keyframes kui-book-page-turn {
655
+ to {
656
+ rotate: y var(--kui-from-angle, -160deg);
657
+ }
658
+ }
659
+ @keyframes kui-fold-panel {
660
+ from {
661
+ rotate: x var(--kui-from-angle, -90deg);
662
+ }
663
+ }
664
+ [data-kui-fx~=card-flip-x],
665
+ [data-kui-fx~=card-flip-y],
666
+ [data-kui-fx~=cube-rotate],
667
+ [data-kui-fx~=book-page-turn],
668
+ [data-kui-fx~=fold-panel] {
669
+ transform-style: preserve-3d;
670
+ perspective: var(--kui-perspective, 1200px);
671
+ }
672
+ [data-kui-fx~=book-page-turn] {
673
+ transform-origin: left center;
674
+ }
675
+ [data-kui-fx~=fold-panel] {
676
+ transform-origin: top center;
677
+ }
678
+ @keyframes kui-page-fade {
679
+ from {
680
+ opacity: 0;
681
+ }
682
+ }
683
+ @keyframes kui-page-slide {
684
+ from {
685
+ opacity: 0;
686
+ translate: 0 var(--kui-distance, 40px);
687
+ }
688
+ }
689
+ @keyframes kui-curtain-wipe {
690
+ from {
691
+ clip-path: inset(0 0 100% 0);
692
+ }
693
+ }
694
+ @keyframes kui-loading-bar {
695
+ from {
696
+ scale: 0 1;
697
+ }
698
+ }
699
+ [data-kui-fx~=loading-bar] {
700
+ transform-origin: left center;
701
+ }
702
+ }
703
+
704
+ /* src/css/media.css */
705
+ @layer kui.effects {
706
+ @keyframes kui-wipe-up {
707
+ from {
708
+ clip-path: inset(100% 0 0);
709
+ }
710
+ }
711
+ @keyframes kui-wipe-down {
712
+ from {
713
+ clip-path: inset(0 0 100%);
714
+ }
715
+ }
716
+ @keyframes kui-wipe-left {
717
+ from {
718
+ clip-path: inset(0 100% 0 0);
719
+ }
720
+ }
721
+ @keyframes kui-wipe-right {
722
+ from {
723
+ clip-path: inset(0 0 0 100%);
724
+ }
725
+ }
726
+ @keyframes kui-wipe-circle {
727
+ from {
728
+ clip-path: circle(0 at 50% 50%);
729
+ }
730
+ }
731
+ @keyframes kui-wipe-diagonal {
732
+ from {
733
+ clip-path: polygon(0 0, 0 0, 0 0);
734
+ }
735
+ to {
736
+ clip-path: polygon(0 0, 200% 0, 0 200%);
737
+ }
738
+ }
739
+ @keyframes kui-curtain-reveal {
740
+ from {
741
+ clip-path: inset(0 50%);
742
+ }
743
+ }
744
+ @keyframes kui-before-after-wipe {
745
+ from {
746
+ clip-path: inset(0 100% 0 0);
747
+ }
748
+ }
749
+ @keyframes kui-mask-reveal {
750
+ from {
751
+ mask-position: 100% 0;
752
+ }
753
+ to {
754
+ mask-position: 0 0;
755
+ }
756
+ }
757
+ [data-kui-fx~=mask-reveal] {
758
+ mask-image:
759
+ linear-gradient(
760
+ 90deg,
761
+ #000 0 45%,
762
+ transparent 55% 100%);
763
+ mask-size: 220% 100%;
764
+ }
765
+ @keyframes kui-ken-burns {
766
+ from {
767
+ scale: 1;
768
+ translate: 0 0;
769
+ }
770
+ to {
771
+ scale: var(--kui-to-scale, 1.12);
772
+ translate: var(--kui-distance, 24px) calc(var(--kui-distance, 24px) * -0.5);
773
+ }
774
+ }
775
+ @keyframes kui-ken-burns-out {
776
+ from {
777
+ scale: var(--kui-to-scale, 1.12);
778
+ translate: calc(var(--kui-distance, 24px) * -1) 0;
779
+ }
780
+ to {
781
+ scale: 1;
782
+ translate: 0 0;
783
+ }
784
+ }
785
+ @keyframes kui-blur-up {
786
+ from {
787
+ translate: 0 var(--kui-distance, 24px);
788
+ filter: blur(16px);
789
+ }
790
+ to {
791
+ translate: 0 0;
792
+ filter: blur(0);
793
+ }
794
+ }
795
+ @keyframes kui-duotone-hover {
796
+ from {
797
+ filter: grayscale(1) sepia(0.7) hue-rotate(330deg) saturate(2);
798
+ }
799
+ to {
800
+ filter: none;
801
+ }
802
+ }
803
+ @keyframes kui-grayscale-hover {
804
+ from {
805
+ filter: grayscale(1);
806
+ }
807
+ to {
808
+ filter: grayscale(0);
809
+ }
810
+ }
811
+ @keyframes kui-saturate-hover {
812
+ from {
813
+ filter: saturate(0.45);
814
+ }
815
+ to {
816
+ filter: saturate(1.35);
817
+ }
818
+ }
819
+ @keyframes kui-image-parallax-frame {
820
+ from {
821
+ translate: 0 calc(var(--kui-distance, 24px) * -1);
822
+ }
823
+ to {
824
+ translate: 0 var(--kui-distance, 24px);
825
+ }
826
+ }
827
+ @keyframes kui-lightbox-open {
828
+ from {
829
+ opacity: 0;
830
+ scale: 0.92;
831
+ }
832
+ to {
833
+ opacity: 1;
834
+ scale: 1;
835
+ }
836
+ }
837
+ @media (pointer: coarse) {
838
+ [data-kui-fx~=duotone-hover]:active,
839
+ [data-kui-fx~=grayscale-hover]:active,
840
+ [data-kui-fx~=saturate-hover]:active {
841
+ filter: none;
842
+ }
843
+ }
844
+ }
845
+
846
+ /* src/css/text.css */
847
+ @layer kui.effects {
848
+ .kui-sr-only {
849
+ position: absolute;
850
+ width: 1px;
851
+ height: 1px;
852
+ padding: 0;
853
+ margin: -1px;
854
+ overflow: hidden;
855
+ clip-path: inset(50%);
856
+ white-space: nowrap;
857
+ border: 0;
858
+ }
859
+ .kui-split-decorative {
860
+ display: inline;
861
+ }
862
+ .kui-split-item {
863
+ display: inline-block;
864
+ animation-duration: var(--kui-duration, 500ms);
865
+ animation-delay: calc(var(--kui-delay, 0ms) + var(--kui-i, 0) * var(--kui-stagger, 30ms));
866
+ animation-timing-function: var(--kui-ease, ease-out);
867
+ animation-fill-mode: both;
868
+ }
869
+ .kui-split-line {
870
+ display: block;
871
+ }
872
+ [data-kui-split-fx=fade] .kui-split-item {
873
+ animation-name: kui-split-reveal-fade;
874
+ }
875
+ [data-kui-split-fx=up] .kui-split-item {
876
+ animation-name: kui-split-reveal-up;
877
+ }
878
+ [data-kui-split-fx=down] .kui-split-item {
879
+ animation-name: kui-split-reveal-down;
880
+ }
881
+ [data-kui-split-fx=mask] .kui-split-item {
882
+ animation-name: kui-split-reveal-mask;
883
+ }
884
+ @keyframes kui-split-reveal-fade {
885
+ from {
886
+ opacity: 0;
887
+ }
888
+ }
889
+ @keyframes kui-split-reveal-up {
890
+ from {
891
+ opacity: 0;
892
+ translate: 0 0.6em;
893
+ }
894
+ }
895
+ @keyframes kui-split-reveal-down {
896
+ from {
897
+ opacity: 0;
898
+ translate: 0 -0.6em;
899
+ }
900
+ }
901
+ @keyframes kui-split-reveal-mask {
902
+ from {
903
+ opacity: 0;
904
+ clip-path: inset(0 0 100% 0);
905
+ }
906
+ }
907
+ [data-kui-split-fx=wave] .kui-split-item {
908
+ animation-name: kui-split-wave;
909
+ animation-duration: 1400ms;
910
+ animation-iteration-count: infinite;
911
+ animation-timing-function: ease-in-out;
912
+ }
913
+ [data-kui-split-fx=jitter] .kui-split-item {
914
+ animation-name: kui-split-jitter;
915
+ animation-duration: 220ms;
916
+ animation-iteration-count: infinite;
917
+ animation-timing-function: ease-in-out;
918
+ animation-direction: alternate;
919
+ }
920
+ @keyframes kui-split-wave {
921
+ 0%, 100% {
922
+ translate: 0 0;
923
+ }
924
+ 50% {
925
+ translate: 0 -0.35em;
926
+ }
927
+ }
928
+ @keyframes kui-split-jitter {
929
+ from {
930
+ translate: 0 0;
931
+ rotate: 0deg;
932
+ }
933
+ to {
934
+ translate: 0 0.08em;
935
+ rotate: 3deg;
936
+ }
937
+ }
938
+ .kui-typewriter::after {
939
+ content: "";
940
+ display: inline-block;
941
+ width: 0.08em;
942
+ margin-inline-start: 0.05em;
943
+ height: 1em;
944
+ vertical-align: -0.15em;
945
+ background: currentColor;
946
+ animation: kui-caret-blink 1s steps(1) infinite;
947
+ }
948
+ @keyframes kui-caret-blink {
949
+ 50% {
950
+ opacity: 0;
951
+ }
952
+ }
953
+ .kui-scramble {
954
+ font-variant-numeric: tabular-nums;
955
+ }
956
+ [data-kui-fx~=word-cycler] {
957
+ display: inline-block;
958
+ transition: opacity 150ms ease-out;
959
+ }
960
+ [data-kui-fx~=word-cycler].kui-word-cycler-swap {
961
+ opacity: 0;
962
+ }
963
+ [data-kui-fx~=gradient-shimmer] {
964
+ background-image:
965
+ linear-gradient(
966
+ 100deg,
967
+ currentColor 40%,
968
+ color-mix(in srgb, currentColor 35%, transparent) 50%,
969
+ currentColor 60%);
970
+ background-size: 220% 100%;
971
+ -webkit-background-clip: text;
972
+ background-clip: text;
973
+ -webkit-text-fill-color: transparent;
974
+ --kui-fx-gradient-shimmer-iterations: infinite;
975
+ }
976
+ @keyframes kui-gradient-shimmer {
977
+ from {
978
+ background-position: 200% 0;
979
+ }
980
+ to {
981
+ background-position: -200% 0;
982
+ }
983
+ }
984
+ [data-kui-fx~=gradient-sweep] {
985
+ background-image:
986
+ linear-gradient(
987
+ 100deg,
988
+ transparent 30%,
989
+ color-mix(in srgb, currentColor 70%, transparent) 50%,
990
+ transparent 70%);
991
+ background-size: 260% 100%;
992
+ -webkit-background-clip: text;
993
+ background-clip: text;
994
+ -webkit-text-fill-color: transparent;
995
+ }
996
+ @keyframes kui-gradient-sweep {
997
+ from {
998
+ background-position: 220% 0;
999
+ }
1000
+ to {
1001
+ background-position: -60% 0;
1002
+ }
1003
+ }
1004
+ [data-kui-fx~=highlight-sweep] {
1005
+ background-image: linear-gradient(90deg, color-mix(in srgb, gold 55%, transparent) 0 100%);
1006
+ background-repeat: no-repeat;
1007
+ background-size: 0% 100%;
1008
+ padding: 0 0.05em;
1009
+ }
1010
+ @keyframes kui-highlight-sweep {
1011
+ to {
1012
+ background-size: 100% 100%;
1013
+ }
1014
+ }
1015
+ [data-kui-fx~=underline-draw] {
1016
+ background-image: linear-gradient(currentColor, currentColor);
1017
+ background-repeat: no-repeat;
1018
+ background-position: 0 100%;
1019
+ background-size: 0% 2px;
1020
+ padding-bottom: 0.15em;
1021
+ }
1022
+ @keyframes kui-underline-draw {
1023
+ to {
1024
+ background-size: 100% 2px;
1025
+ }
1026
+ }
1027
+ [data-kui-fx~=text-outline-fill] {
1028
+ -webkit-text-stroke: 1px currentColor;
1029
+ color: transparent;
1030
+ }
1031
+ @keyframes kui-text-outline-fill {
1032
+ to {
1033
+ color: currentColor;
1034
+ }
1035
+ }
1036
+ @keyframes kui-var-weight {
1037
+ from {
1038
+ font-weight: var(--kui-from-weight, 100);
1039
+ }
1040
+ to {
1041
+ font-weight: var(--kui-to-weight, 800);
1042
+ }
1043
+ }
1044
+ @keyframes kui-var-width {
1045
+ from {
1046
+ font-stretch: var(--kui-from-width, 75%);
1047
+ }
1048
+ to {
1049
+ font-stretch: var(--kui-to-width, 125%);
1050
+ }
1051
+ }
1052
+ @keyframes kui-var-slant {
1053
+ from {
1054
+ font-style: oblique var(--kui-from-slant, 0deg);
1055
+ }
1056
+ to {
1057
+ font-style: oblique var(--kui-to-slant, -10deg);
1058
+ }
1059
+ }
1060
+ [data-kui-fx~=marquee],
1061
+ [data-kui-fx~=marquee-scroll-linked] {
1062
+ display: flex;
1063
+ width: max-content;
1064
+ will-change: translate;
1065
+ }
1066
+ [data-kui-fx~=marquee] {
1067
+ --kui-fx-marquee-iterations: infinite;
1068
+ }
1069
+ @keyframes kui-marquee {
1070
+ to {
1071
+ translate: -50% 0;
1072
+ }
1073
+ }
1074
+ [data-kui-fx~=redaction-reveal] {
1075
+ position: relative;
1076
+ display: inline-block;
1077
+ }
1078
+ [data-kui-fx~=redaction-reveal]::before {
1079
+ content: "";
1080
+ position: absolute;
1081
+ inset: 0;
1082
+ background: #111;
1083
+ clip-path: inset(0 0 0 0);
1084
+ }
1085
+ @keyframes kui-redaction-reveal {
1086
+ to {
1087
+ clip-path: inset(0 0 0 100%);
1088
+ }
1089
+ }
1090
+ [data-kui-fx~=text-3d-extrude] {
1091
+ display: inline-block;
1092
+ text-shadow:
1093
+ 1px 1px 0 color-mix(in srgb, currentColor 70%, transparent),
1094
+ 2px 2px 0 color-mix(in srgb, currentColor 60%, transparent),
1095
+ 3px 3px 0 color-mix(in srgb, currentColor 50%, transparent),
1096
+ 4px 4px 0 color-mix(in srgb, currentColor 40%, transparent),
1097
+ 5px 5px 0 color-mix(in srgb, currentColor 30%, transparent),
1098
+ 6px 6px 8px rgb(0 0 0 / 0.35);
1099
+ }
1100
+ @keyframes kui-text-3d-extrude {
1101
+ from {
1102
+ rotate: -6deg;
1103
+ translate: 0 12px;
1104
+ }
1105
+ to {
1106
+ rotate: 0deg;
1107
+ translate: 0 0;
1108
+ }
1109
+ }
1110
+ }
1111
+
1112
+ /* src/css/navigation.css */
1113
+ @layer kui.effects {
1114
+ @keyframes kui-nav-reveal {
1115
+ from {
1116
+ opacity: 0;
1117
+ translate: 0 var(--kui-distance, 16px);
1118
+ }
1119
+ }
1120
+ @keyframes kui-menu-fullscreen {
1121
+ from {
1122
+ opacity: 0;
1123
+ clip-path: circle(0% at var(--kui-origin, 100% 0%));
1124
+ }
1125
+ to {
1126
+ opacity: 1;
1127
+ clip-path: circle(150% at var(--kui-origin, 100% 0%));
1128
+ }
1129
+ }
1130
+ @keyframes kui-panel-reveal {
1131
+ from {
1132
+ opacity: 0;
1133
+ translate: 0 calc(var(--kui-distance, 10px) * -1);
1134
+ }
1135
+ }
1136
+ @keyframes kui-drawer-slide-right {
1137
+ from {
1138
+ translate: 100% 0;
1139
+ }
1140
+ }
1141
+ [data-kui-fx~=header-shrink] {
1142
+ --kui-shrink: 0;
1143
+ padding-block: calc(1.4rem - 0.7rem * var(--kui-shrink, 0));
1144
+ font-size: calc(1rem - 0.15rem * var(--kui-shrink, 0));
1145
+ transition:
1146
+ padding-block 200ms ease-out,
1147
+ font-size 200ms ease-out,
1148
+ box-shadow 200ms ease-out;
1149
+ }
1150
+ [data-kui-fx~=header-shrink][data-kui-shrunk=true] {
1151
+ box-shadow: 0 2px 10px rgb(0 0 0 / 0.12);
1152
+ }
1153
+ [data-kui-fx~=header-hide-on-scroll] {
1154
+ transition: translate 220ms ease-out;
1155
+ }
1156
+ [data-kui-fx~=header-hide-on-scroll][data-kui-hidden=true] {
1157
+ translate: 0 -100%;
1158
+ }
1159
+ [data-kui-fx~=back-to-top-fade] {
1160
+ opacity: 0;
1161
+ translate: 0 12px;
1162
+ pointer-events: none;
1163
+ transition: opacity 200ms ease-out, translate 200ms ease-out;
1164
+ }
1165
+ [data-kui-fx~=back-to-top-fade][data-kui-visible=true] {
1166
+ opacity: 1;
1167
+ translate: 0 0;
1168
+ pointer-events: auto;
1169
+ }
1170
+ }
1171
+
1172
+ /* src/css/forms.css */
1173
+ @layer kui.effects {
1174
+ [data-kui-fx~=label-float] ~ label {
1175
+ transition: translate 180ms ease-out, scale 180ms ease-out;
1176
+ transform-origin: left center;
1177
+ }
1178
+ [data-kui-fx~=label-float]:focus ~ label,
1179
+ [data-kui-fx~=label-float]:not(:placeholder-shown) ~ label {
1180
+ translate: 0 -1.35rem;
1181
+ scale: 0.82;
1182
+ }
1183
+ [data-kui-fx~=input-underline-grow] ~ .kui-underline {
1184
+ display: block;
1185
+ height: 2px;
1186
+ background: currentColor;
1187
+ scale: 0 1;
1188
+ transform-origin: left center;
1189
+ transition: scale 220ms ease-out;
1190
+ }
1191
+ [data-kui-fx~=input-underline-grow]:focus ~ .kui-underline {
1192
+ scale: 1 1;
1193
+ }
1194
+ @keyframes kui-focus-ring-grow {
1195
+ from {
1196
+ box-shadow: 0 0 0 0 var(--kui-ring-color, rgb(210 105 30 / 0.55));
1197
+ }
1198
+ to {
1199
+ box-shadow: 0 0 0 5px var(--kui-ring-color, rgb(210 105 30 / 0.55));
1200
+ }
1201
+ }
1202
+ @keyframes kui-validate-shake {
1203
+ 10%, 90% {
1204
+ translate: -1px 0;
1205
+ }
1206
+ 20%, 80% {
1207
+ translate: 2px 0;
1208
+ }
1209
+ 30%, 50%, 70% {
1210
+ translate: -4px 0;
1211
+ }
1212
+ 40%, 60% {
1213
+ translate: 4px 0;
1214
+ }
1215
+ }
1216
+ [data-kui-fx~=validate-check] {
1217
+ stroke-dasharray: 24;
1218
+ stroke-dashoffset: 24;
1219
+ }
1220
+ @keyframes kui-validate-check {
1221
+ to {
1222
+ stroke-dashoffset: 0;
1223
+ }
1224
+ }
1225
+ [data-kui-fx~=strength-meter] ~ .kui-meter > * {
1226
+ background: var(--kui-meter-off, currentColor);
1227
+ opacity: 0.2;
1228
+ transition: opacity 200ms ease-out, background-color 200ms ease-out;
1229
+ }
1230
+ [data-kui-fx~=strength-meter][data-kui-strength-level="1"] ~ .kui-meter > *:nth-child(-n+1),
1231
+ [data-kui-fx~=strength-meter][data-kui-strength-level="2"] ~ .kui-meter > *:nth-child(-n+2),
1232
+ [data-kui-fx~=strength-meter][data-kui-strength-level="3"] ~ .kui-meter > *:nth-child(-n+3),
1233
+ [data-kui-fx~=strength-meter][data-kui-strength-level="4"] ~ .kui-meter > *:nth-child(-n+4) {
1234
+ opacity: 1;
1235
+ background: var(--kui-meter-on, #2e9e5b);
1236
+ }
1237
+ [data-kui-fx~=toggle-morph] ~ .kui-track {
1238
+ display: inline-block;
1239
+ width: 40px;
1240
+ height: 22px;
1241
+ border-radius: 999px;
1242
+ background: var(--dim, #9a8d80);
1243
+ transition: background-color 200ms ease-out;
1244
+ position: relative;
1245
+ }
1246
+ [data-kui-fx~=toggle-morph] ~ .kui-track .kui-thumb {
1247
+ position: absolute;
1248
+ top: 2px;
1249
+ left: 2px;
1250
+ width: 18px;
1251
+ height: 18px;
1252
+ border-radius: 50%;
1253
+ background: #fff;
1254
+ translate: 0 0;
1255
+ transition: translate 200ms ease-out;
1256
+ }
1257
+ [data-kui-fx~=toggle-morph]:checked ~ .kui-track {
1258
+ background: var(--accent, #d2691e);
1259
+ }
1260
+ [data-kui-fx~=toggle-morph]:checked ~ .kui-track .kui-thumb {
1261
+ translate: 18px 0;
1262
+ }
1263
+ [data-kui-fx~=checkbox-draw] ~ svg path {
1264
+ stroke-dasharray: 24;
1265
+ stroke-dashoffset: 24;
1266
+ transition: stroke-dashoffset 220ms ease-out;
1267
+ }
1268
+ [data-kui-fx~=checkbox-draw]:checked ~ svg path {
1269
+ stroke-dashoffset: 0;
1270
+ }
1271
+ [data-kui-fx~=radio-fill] ~ .kui-dot {
1272
+ display: inline-block;
1273
+ width: 10px;
1274
+ height: 10px;
1275
+ border-radius: 50%;
1276
+ background: var(--accent, #d2691e);
1277
+ scale: 0;
1278
+ transition: scale 180ms ease-out;
1279
+ }
1280
+ [data-kui-fx~=radio-fill]:checked ~ .kui-dot {
1281
+ scale: 1;
1282
+ }
1283
+ [data-kui-fx~=range-fill] {
1284
+ --kui-fill: 0%;
1285
+ accent-color: var(--accent, #d2691e);
1286
+ background:
1287
+ linear-gradient(
1288
+ to right,
1289
+ var(--accent, #d2691e) var(--kui-fill, 0%),
1290
+ var(--line, #2a2422) var(--kui-fill, 0%));
1291
+ height: 4px;
1292
+ border-radius: 999px;
1293
+ appearance: none;
1294
+ outline: none;
1295
+ }
1296
+ [data-kui-fx~=submit-to-spinner-to-check] .kui-stage-idle,
1297
+ [data-kui-fx~=submit-to-spinner-to-check] .kui-stage-loading,
1298
+ [data-kui-fx~=submit-to-spinner-to-check] .kui-stage-done {
1299
+ display: none;
1300
+ }
1301
+ [data-kui-fx~=submit-to-spinner-to-check][data-kui-stage=idle] .kui-stage-idle,
1302
+ [data-kui-fx~=submit-to-spinner-to-check][data-kui-stage=loading] .kui-stage-loading,
1303
+ [data-kui-fx~=submit-to-spinner-to-check][data-kui-stage=done] .kui-stage-done {
1304
+ display: inline-flex;
1305
+ }
1306
+ [data-kui-fx~=submit-to-spinner-to-check] .kui-spinner {
1307
+ width: 1em;
1308
+ height: 1em;
1309
+ border-radius: 50%;
1310
+ border: 2px solid currentColor;
1311
+ border-top-color: transparent;
1312
+ animation: kui-spin 700ms linear infinite;
1313
+ }
1314
+ @keyframes kui-spin {
1315
+ to {
1316
+ rotate: 360deg;
1317
+ }
1318
+ }
1319
+ [data-kui-fx~=step-progress] {
1320
+ cursor: pointer;
1321
+ }
1322
+ [data-kui-fx~=step-progress] > * {
1323
+ background: var(--dim, #9a8d80);
1324
+ opacity: 0.35;
1325
+ transition: opacity 200ms ease-out, background-color 200ms ease-out;
1326
+ }
1327
+ [data-kui-fx~=step-progress][data-kui-step="0"] > *:nth-child(-n+1),
1328
+ [data-kui-fx~=step-progress][data-kui-step="1"] > *:nth-child(-n+2),
1329
+ [data-kui-fx~=step-progress][data-kui-step="2"] > *:nth-child(-n+3),
1330
+ [data-kui-fx~=step-progress][data-kui-step="3"] > *:nth-child(-n+4),
1331
+ [data-kui-fx~=step-progress][data-kui-step="4"] > *:nth-child(-n+5),
1332
+ [data-kui-fx~=step-progress][data-kui-step="5"] > *:nth-child(-n+6) {
1333
+ opacity: 1;
1334
+ background: var(--accent, #d2691e);
1335
+ }
1336
+ }
1337
+
1338
+ /* src/css/ambient.css */
1339
+ @layer kui.effects {
1340
+ [data-kui-fx~=gradient-mesh] {
1341
+ background-image:
1342
+ radial-gradient(
1343
+ at 15% 20%,
1344
+ color-mix(in srgb, var(--kui-c1, #7c3aed) 55%, transparent),
1345
+ transparent 55%),
1346
+ radial-gradient(
1347
+ at 85% 15%,
1348
+ color-mix(in srgb, var(--kui-c2, #06b6d4) 50%, transparent),
1349
+ transparent 55%),
1350
+ radial-gradient(
1351
+ at 50% 85%,
1352
+ color-mix(in srgb, var(--kui-c3, #f97316) 45%, transparent),
1353
+ transparent 55%);
1354
+ background-size: 200% 200%;
1355
+ --kui-fx-gradient-mesh-iterations: infinite;
1356
+ }
1357
+ @keyframes kui-gradient-mesh {
1358
+ 0%, 100% {
1359
+ background-position:
1360
+ 0% 0%,
1361
+ 100% 0%,
1362
+ 50% 100%;
1363
+ }
1364
+ 50% {
1365
+ background-position:
1366
+ 25% 35%,
1367
+ 75% 30%,
1368
+ 35% 70%;
1369
+ }
1370
+ }
1371
+ [data-kui-fx~=aurora] {
1372
+ background-image:
1373
+ linear-gradient(
1374
+ 120deg,
1375
+ color-mix(in srgb, var(--kui-c1, #34d399) 45%, transparent),
1376
+ transparent 45%),
1377
+ linear-gradient(
1378
+ 240deg,
1379
+ color-mix(in srgb, var(--kui-c2, #60a5fa) 45%, transparent),
1380
+ transparent 45%),
1381
+ linear-gradient(
1382
+ 0deg,
1383
+ color-mix(in srgb, var(--kui-c3, #c084fc) 40%, transparent),
1384
+ transparent 50%);
1385
+ background-size: 260% 260%;
1386
+ --kui-fx-aurora-iterations: infinite;
1387
+ }
1388
+ @keyframes kui-aurora {
1389
+ 0%, 100% {
1390
+ background-position:
1391
+ 0% 50%,
1392
+ 100% 50%,
1393
+ 50% 0%;
1394
+ }
1395
+ 50% {
1396
+ background-position:
1397
+ 60% 30%,
1398
+ 40% 70%,
1399
+ 55% 60%;
1400
+ }
1401
+ }
1402
+ [data-kui-fx~=wave-blob] {
1403
+ background-image:
1404
+ radial-gradient(
1405
+ circle,
1406
+ color-mix(in srgb, var(--kui-c1, #22d3ee) 50%, transparent),
1407
+ transparent 60%);
1408
+ background-size: 140% 140%;
1409
+ background-repeat: no-repeat;
1410
+ --kui-fx-wave-blob-iterations: infinite;
1411
+ }
1412
+ @keyframes kui-wave-blob {
1413
+ 0%, 100% {
1414
+ background-position: 20% 30%;
1415
+ background-size: 140% 140%;
1416
+ }
1417
+ 33% {
1418
+ background-position: 70% 20%;
1419
+ background-size: 160% 160%;
1420
+ }
1421
+ 66% {
1422
+ background-position: 50% 75%;
1423
+ background-size: 120% 120%;
1424
+ }
1425
+ }
1426
+ [data-kui-fx~=spotlight-follow] {
1427
+ background-image:
1428
+ radial-gradient(
1429
+ circle,
1430
+ color-mix(in srgb, var(--kui-c1, #fde68a) 65%, transparent),
1431
+ transparent 65%);
1432
+ background-size: 55% 55%;
1433
+ background-repeat: no-repeat;
1434
+ --kui-fx-spotlight-follow-iterations: infinite;
1435
+ }
1436
+ @keyframes kui-spotlight-follow {
1437
+ 0%, 100% {
1438
+ background-position: 10% 15%;
1439
+ }
1440
+ 25% {
1441
+ background-position: 85% 20%;
1442
+ }
1443
+ 50% {
1444
+ background-position: 80% 80%;
1445
+ }
1446
+ 75% {
1447
+ background-position: 15% 75%;
1448
+ }
1449
+ }
1450
+ [data-kui-fx~=gradient-rotate-border] {
1451
+ position: relative;
1452
+ background-image:
1453
+ linear-gradient(
1454
+ 90deg,
1455
+ var(--kui-c1, #f472b6),
1456
+ var(--kui-c2, #60a5fa),
1457
+ var(--kui-c3, #34d399),
1458
+ var(--kui-c4, #fbbf24),
1459
+ var(--kui-c1, #f472b6));
1460
+ background-size: 300% 100%;
1461
+ padding: 3px;
1462
+ mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1463
+ mask-composite: exclude;
1464
+ -webkit-mask-composite: xor;
1465
+ --kui-fx-gradient-rotate-border-iterations: infinite;
1466
+ }
1467
+ @keyframes kui-gradient-rotate-border {
1468
+ from {
1469
+ background-position: 0% 50%;
1470
+ }
1471
+ to {
1472
+ background-position: 300% 50%;
1473
+ }
1474
+ }
1475
+ [data-kui-fx~=noise-overlay] {
1476
+ background-image:
1477
+ repeating-radial-gradient(
1478
+ circle at 0 0,
1479
+ color-mix(in srgb, var(--kui-c1, currentColor) 30%, transparent) 0,
1480
+ transparent 1.4px,
1481
+ transparent 3px);
1482
+ background-size: 5px 5px;
1483
+ --kui-fx-noise-overlay-iterations: infinite;
1484
+ }
1485
+ @keyframes kui-noise-overlay {
1486
+ 0% {
1487
+ background-position: 0 0;
1488
+ }
1489
+ 20% {
1490
+ background-position: -3px 1px;
1491
+ }
1492
+ 40% {
1493
+ background-position: 2px -2px;
1494
+ }
1495
+ 60% {
1496
+ background-position: -1px 3px;
1497
+ }
1498
+ 80% {
1499
+ background-position: 3px 2px;
1500
+ }
1501
+ 100% {
1502
+ background-position: 0 0;
1503
+ }
1504
+ }
1505
+ [data-kui-fx~=scanline] {
1506
+ background-image:
1507
+ linear-gradient(
1508
+ to bottom,
1509
+ transparent,
1510
+ color-mix(in srgb, var(--kui-c1, currentColor) 35%, transparent) 50%,
1511
+ transparent);
1512
+ background-size: 100% 220%;
1513
+ background-repeat: no-repeat;
1514
+ --kui-fx-scanline-iterations: infinite;
1515
+ }
1516
+ @keyframes kui-scanline {
1517
+ from {
1518
+ background-position: 0 -120%;
1519
+ }
1520
+ to {
1521
+ background-position: 0 120%;
1522
+ }
1523
+ }
1524
+ [data-kui-fx~=dot-grid-drift] {
1525
+ background-image:
1526
+ radial-gradient(
1527
+ circle,
1528
+ color-mix(in srgb, var(--kui-c1, currentColor) 45%, transparent) 1.5px,
1529
+ transparent 1.5px);
1530
+ background-size: 22px 22px;
1531
+ --kui-fx-dot-grid-drift-iterations: infinite;
1532
+ }
1533
+ @keyframes kui-dot-grid-drift {
1534
+ from {
1535
+ background-position: 0 0;
1536
+ }
1537
+ to {
1538
+ background-position: 22px 22px;
1539
+ }
1540
+ }
1541
+ [data-kui-fx~=line-grid-drift] {
1542
+ background-image:
1543
+ repeating-linear-gradient(
1544
+ 0deg,
1545
+ color-mix(in srgb, var(--kui-c1, currentColor) 30%, transparent) 0 1px,
1546
+ transparent 1px 26px),
1547
+ repeating-linear-gradient(
1548
+ 90deg,
1549
+ color-mix(in srgb, var(--kui-c1, currentColor) 30%, transparent) 0 1px,
1550
+ transparent 1px 26px);
1551
+ --kui-fx-line-grid-drift-iterations: infinite;
1552
+ }
1553
+ @keyframes kui-line-grid-drift {
1554
+ from {
1555
+ background-position: 0 0, 0 0;
1556
+ }
1557
+ to {
1558
+ background-position: 0 26px, 26px 0;
1559
+ }
1560
+ }
1561
+ [data-kui-fx~=starfield] {
1562
+ background-image:
1563
+ radial-gradient(
1564
+ 1px 1px at 10% 20%,
1565
+ color-mix(in srgb, var(--kui-c1, #ffffff) 90%, transparent),
1566
+ transparent),
1567
+ radial-gradient(
1568
+ 1px 1px at 70% 60%,
1569
+ color-mix(in srgb, var(--kui-c1, #ffffff) 70%, transparent),
1570
+ transparent),
1571
+ radial-gradient(
1572
+ 1.5px 1.5px at 40% 80%,
1573
+ color-mix(in srgb, var(--kui-c1, #ffffff) 85%, transparent),
1574
+ transparent),
1575
+ radial-gradient(
1576
+ 1px 1px at 90% 30%,
1577
+ color-mix(in srgb, var(--kui-c1, #ffffff) 60%, transparent),
1578
+ transparent),
1579
+ radial-gradient(
1580
+ 1.5px 1.5px at 25% 55%,
1581
+ color-mix(in srgb, var(--kui-c1, #ffffff) 80%, transparent),
1582
+ transparent);
1583
+ background-size: 220px 220px;
1584
+ background-repeat: repeat;
1585
+ --kui-fx-starfield-iterations: infinite;
1586
+ }
1587
+ @keyframes kui-starfield {
1588
+ from {
1589
+ background-position:
1590
+ 0 0,
1591
+ 0 0,
1592
+ 0 0,
1593
+ 0 0,
1594
+ 0 0;
1595
+ }
1596
+ to {
1597
+ background-position:
1598
+ 220px 90px,
1599
+ -160px 220px,
1600
+ 90px -140px,
1601
+ -220px -90px,
1602
+ 140px 160px;
1603
+ }
1604
+ }
1605
+ [data-kui-fx~=float] {
1606
+ --kui-fx-float-iterations: infinite;
1607
+ }
1608
+ @keyframes kui-float {
1609
+ 0%, 100% {
1610
+ translate: 0 0;
1611
+ }
1612
+ 50% {
1613
+ translate: 0 calc(var(--kui-distance, 14px) * -1);
1614
+ }
1615
+ }
1616
+ [data-kui-fx~=bob] {
1617
+ --kui-fx-bob-iterations: infinite;
1618
+ }
1619
+ @keyframes kui-bob {
1620
+ 0%, 100% {
1621
+ translate: 0 0;
1622
+ }
1623
+ 50% {
1624
+ translate: 0 calc(var(--kui-distance, 8px) * -1);
1625
+ }
1626
+ }
1627
+ [data-kui-fx~=floating-shapes] {
1628
+ --kui-fx-floating-shapes-iterations: infinite;
1629
+ }
1630
+ @keyframes kui-floating-shapes {
1631
+ 0%, 100% {
1632
+ translate: 0 0;
1633
+ }
1634
+ 33% {
1635
+ translate: calc(var(--kui-distance, 10px) * 0.6) calc(var(--kui-distance, 10px) * -1);
1636
+ }
1637
+ 66% {
1638
+ translate: calc(var(--kui-distance, 10px) * -0.6) calc(var(--kui-distance, 10px) * -0.4);
1639
+ }
1640
+ }
1641
+ [data-kui-fx~=glow-pulse] {
1642
+ --kui-fx-glow-pulse-iterations: infinite;
1643
+ }
1644
+ @keyframes kui-glow-pulse {
1645
+ 0%, 100% {
1646
+ scale: 1;
1647
+ opacity: 0.6;
1648
+ }
1649
+ 50% {
1650
+ scale: 1.15;
1651
+ opacity: 1;
1652
+ }
1653
+ }
1654
+ }
1655
+
1656
+ /* src/css/feedback.css */
1657
+ @layer kui.effects {
1658
+ [data-kui-fx~=skeleton-shimmer] {
1659
+ background-color: var(--kui-skeleton-base, #2a2422);
1660
+ background-image:
1661
+ linear-gradient(
1662
+ 100deg,
1663
+ transparent 30%,
1664
+ color-mix(in srgb, var(--kui-skeleton-highlight, #ffffff) 18%, transparent) 50%,
1665
+ transparent 70%);
1666
+ background-size: 200% 100%;
1667
+ --kui-fx-skeleton-shimmer-iterations: infinite;
1668
+ }
1669
+ @keyframes kui-skeleton-shimmer {
1670
+ from {
1671
+ background-position: 150% 0;
1672
+ }
1673
+ to {
1674
+ background-position: -50% 0;
1675
+ }
1676
+ }
1677
+ @keyframes kui-skeleton-to-content {
1678
+ from {
1679
+ opacity: 0;
1680
+ }
1681
+ }
1682
+ [data-kui-fx~=spinner] {
1683
+ display: inline-block;
1684
+ width: var(--kui-spinner-size, 28px);
1685
+ height: var(--kui-spinner-size, 28px);
1686
+ border-radius: 50%;
1687
+ border: 3px solid color-mix(in srgb, currentColor 20%, transparent);
1688
+ border-top-color: currentColor;
1689
+ --kui-fx-spinner-iterations: infinite;
1690
+ }
1691
+ @keyframes kui-spinner-spin {
1692
+ to {
1693
+ rotate: 360deg;
1694
+ }
1695
+ }
1696
+ [data-kui-fx~=spinner-ring] {
1697
+ display: inline-block;
1698
+ width: var(--kui-spinner-size, 28px);
1699
+ height: var(--kui-spinner-size, 28px);
1700
+ border-radius: 50%;
1701
+ border: 3px dashed color-mix(in srgb, currentColor 55%, transparent);
1702
+ --kui-fx-spinner-ring-iterations: infinite;
1703
+ }
1704
+ @keyframes kui-spinner-ring-spin {
1705
+ to {
1706
+ rotate: 360deg;
1707
+ }
1708
+ }
1709
+ [data-kui-fx~=spinner-dots] {
1710
+ display: inline-block;
1711
+ width: 8px;
1712
+ height: 8px;
1713
+ border-radius: 50%;
1714
+ background: currentColor;
1715
+ box-shadow: -16px 0 currentColor, 16px 0 currentColor;
1716
+ --kui-fx-spinner-dots-iterations: infinite;
1717
+ }
1718
+ @keyframes kui-spinner-dots {
1719
+ 0%, 80%, 100% {
1720
+ scale: 0.7;
1721
+ opacity: 0.5;
1722
+ }
1723
+ 40% {
1724
+ scale: 1.15;
1725
+ opacity: 1;
1726
+ }
1727
+ }
1728
+ [data-kui-fx~=progress-indeterminate] {
1729
+ transform-origin: 0% 50%;
1730
+ background: currentColor;
1731
+ border-radius: inherit;
1732
+ --kui-fx-progress-indeterminate-iterations: infinite;
1733
+ }
1734
+ @keyframes kui-progress-indeterminate {
1735
+ 0% {
1736
+ translate: -100% 0;
1737
+ scale: 0.4 1;
1738
+ }
1739
+ 50% {
1740
+ scale: 1 1;
1741
+ }
1742
+ 100% {
1743
+ translate: 100% 0;
1744
+ scale: 0.4 1;
1745
+ }
1746
+ }
1747
+ @keyframes kui-toast-slide-in {
1748
+ from {
1749
+ opacity: 0;
1750
+ translate: 0 var(--kui-distance, 24px);
1751
+ }
1752
+ to {
1753
+ opacity: 1;
1754
+ translate: 0 0;
1755
+ }
1756
+ }
1757
+ @keyframes kui-toast-slide-out {
1758
+ from {
1759
+ opacity: 1;
1760
+ translate: 0 0;
1761
+ }
1762
+ to {
1763
+ opacity: 0;
1764
+ translate: 0 var(--kui-distance, 24px);
1765
+ }
1766
+ }
1767
+ @keyframes kui-shake-error {
1768
+ 10%, 90% {
1769
+ translate: -1px 0;
1770
+ }
1771
+ 20%, 80% {
1772
+ translate: 2px 0;
1773
+ }
1774
+ 30%, 50%, 70% {
1775
+ translate: -4px 0;
1776
+ }
1777
+ 40%, 60% {
1778
+ translate: 4px 0;
1779
+ }
1780
+ }
1781
+ @keyframes kui-wobble {
1782
+ 0% {
1783
+ translate: 0 0;
1784
+ rotate: 0deg;
1785
+ }
1786
+ 15% {
1787
+ translate: -6px 0;
1788
+ rotate: -6deg;
1789
+ }
1790
+ 30% {
1791
+ translate: 4px 0;
1792
+ rotate: 4deg;
1793
+ }
1794
+ 45% {
1795
+ translate: -3px 0;
1796
+ rotate: -3deg;
1797
+ }
1798
+ 60% {
1799
+ translate: 2px 0;
1800
+ rotate: 2deg;
1801
+ }
1802
+ 75% {
1803
+ translate: -1px 0;
1804
+ rotate: -1deg;
1805
+ }
1806
+ 100% {
1807
+ translate: 0 0;
1808
+ rotate: 0deg;
1809
+ }
1810
+ }
1811
+ [data-kui-fx~=ripple] {
1812
+ border-radius: 50%;
1813
+ background: currentColor;
1814
+ transform-origin: center;
1815
+ }
1816
+ @keyframes kui-ripple {
1817
+ from {
1818
+ scale: 0.2;
1819
+ opacity: 0.6;
1820
+ }
1821
+ to {
1822
+ scale: var(--kui-ripple-scale, 4);
1823
+ opacity: 0;
1824
+ }
1825
+ }
1826
+ @keyframes kui-badge-pop {
1827
+ 0% {
1828
+ scale: 0.4;
1829
+ }
1830
+ 60% {
1831
+ scale: 1.18;
1832
+ }
1833
+ 100% {
1834
+ scale: 1;
1835
+ }
1836
+ }
1837
+ @keyframes kui-count-bump {
1838
+ 0%, 100% {
1839
+ scale: 1;
1840
+ }
1841
+ 50% {
1842
+ scale: 1.3;
1843
+ }
1844
+ }
1845
+ [data-kui-fx~=heart-burst] {
1846
+ color: var(--kui-heart-color, #f43f5e);
1847
+ }
1848
+ @keyframes kui-heart-burst {
1849
+ 0% {
1850
+ scale: 1;
1851
+ }
1852
+ 30% {
1853
+ scale: 1.4;
1854
+ }
1855
+ 55% {
1856
+ scale: 0.9;
1857
+ }
1858
+ 100% {
1859
+ scale: 1;
1860
+ }
1861
+ }
1862
+ [data-kui-fx~=confetti-burst] {
1863
+ background-image:
1864
+ radial-gradient(
1865
+ circle at 20% 20%,
1866
+ #f43f5e 0 3px,
1867
+ transparent 3px),
1868
+ radial-gradient(
1869
+ circle at 75% 15%,
1870
+ #fbbf24 0 3px,
1871
+ transparent 3px),
1872
+ radial-gradient(
1873
+ circle at 50% 75%,
1874
+ #34d399 0 3px,
1875
+ transparent 3px),
1876
+ radial-gradient(
1877
+ circle at 85% 65%,
1878
+ #60a5fa 0 3px,
1879
+ transparent 3px),
1880
+ radial-gradient(
1881
+ circle at 15% 65%,
1882
+ #c084fc 0 3px,
1883
+ transparent 3px);
1884
+ background-repeat: no-repeat;
1885
+ }
1886
+ @keyframes kui-confetti-burst {
1887
+ 0% {
1888
+ scale: 0.6;
1889
+ opacity: 0;
1890
+ }
1891
+ 40% {
1892
+ scale: 1.15;
1893
+ opacity: 1;
1894
+ }
1895
+ 100% {
1896
+ scale: 1;
1897
+ opacity: 1;
1898
+ }
1899
+ }
1900
+ @keyframes kui-copy-confirm {
1901
+ 0% {
1902
+ opacity: 0;
1903
+ }
1904
+ 15% {
1905
+ opacity: 1;
1906
+ }
1907
+ 85% {
1908
+ opacity: 1;
1909
+ }
1910
+ 100% {
1911
+ opacity: 0;
1912
+ }
1913
+ }
1914
+ @keyframes kui-pull-to-refresh {
1915
+ 0% {
1916
+ translate: 0 0;
1917
+ }
1918
+ 45% {
1919
+ translate: 0 36px;
1920
+ }
1921
+ 100% {
1922
+ translate: 0 0;
1923
+ }
1924
+ }
1925
+ }
1926
+
1927
+ /* src/css/numbers.css */
1928
+ @layer kui.effects {
1929
+ @keyframes kui-progress-ring {
1930
+ from {
1931
+ stroke-dashoffset: var(--kui-path-length, 100);
1932
+ }
1933
+ to {
1934
+ stroke-dashoffset: 0;
1935
+ }
1936
+ }
1937
+ @keyframes kui-gauge-sweep {
1938
+ from {
1939
+ stroke-dashoffset: var(--kui-path-length, 100);
1940
+ }
1941
+ to {
1942
+ stroke-dashoffset: 0;
1943
+ }
1944
+ }
1945
+ @keyframes kui-donut-sweep {
1946
+ from {
1947
+ stroke-dashoffset: var(--kui-path-length, 100);
1948
+ }
1949
+ to {
1950
+ stroke-dashoffset: 0;
1951
+ }
1952
+ }
1953
+ @keyframes kui-sparkline-draw {
1954
+ from {
1955
+ stroke-dashoffset: var(--kui-path-length, 1000);
1956
+ }
1957
+ to {
1958
+ stroke-dashoffset: 0;
1959
+ }
1960
+ }
1961
+ [data-kui-fx~=progress-ring],
1962
+ [data-kui-fx~=gauge-sweep],
1963
+ [data-kui-fx~=donut-sweep],
1964
+ [data-kui-fx~=sparkline-draw] {
1965
+ stroke-dasharray: var(--kui-path-length, 100);
1966
+ fill: none;
1967
+ }
1968
+ @keyframes kui-progress-bar {
1969
+ from {
1970
+ scale: 0 1;
1971
+ }
1972
+ to {
1973
+ scale: 1 1;
1974
+ }
1975
+ }
1976
+ [data-kui-fx~=progress-bar] {
1977
+ transform-origin: left center;
1978
+ }
1979
+ @keyframes kui-progress-segments {
1980
+ from {
1981
+ opacity: 0.18;
1982
+ }
1983
+ to {
1984
+ opacity: 1;
1985
+ }
1986
+ }
1987
+ @keyframes kui-star-rating-fill {
1988
+ from {
1989
+ clip-path: inset(0 100% 0 0);
1990
+ }
1991
+ to {
1992
+ clip-path: inset(0 calc(100% - var(--kui-fill, 100%)) 0 0);
1993
+ }
1994
+ }
1995
+ .kui-count-decorative {
1996
+ display: inline-flex;
1997
+ align-items: baseline;
1998
+ }
1999
+ .kui-odometer-col {
2000
+ display: inline-block;
2001
+ overflow: hidden;
2002
+ height: 1em;
2003
+ line-height: 1;
2004
+ vertical-align: baseline;
2005
+ }
2006
+ .kui-odometer-strip {
2007
+ display: flex;
2008
+ flex-direction: column;
2009
+ translate: 0 calc(var(--kui-o, 0) * -1em);
2010
+ transition: translate 220ms ease-out;
2011
+ }
2012
+ .kui-odometer-strip > span {
2013
+ height: 1em;
2014
+ line-height: 1;
2015
+ }
2016
+ }
2017
+
2018
+ /* src/css/interaction.css */
2019
+ @layer kui.effects {
2020
+ @property --kui-border-angle { syntax: "<angle>"; inherits: false; initial-value: 0deg; }
2021
+ @property --kui-border-pct { syntax: "<percentage>"; inherits: false; initial-value: 0%; }
2022
+ [data-kui-fx~=lift] {
2023
+ transition: translate var(--kui-lift-duration, 220ms) var(--kui-lift-ease, ease-out);
2024
+ }
2025
+ [data-kui-fx~=lift]:focus-visible {
2026
+ translate: 0 -6px;
2027
+ }
2028
+ [data-kui-fx~=lift-shadow] {
2029
+ transition: translate var(--kui-lift-shadow-duration, 220ms) var(--kui-lift-shadow-ease, ease-out), box-shadow var(--kui-lift-shadow-duration, 220ms) var(--kui-lift-shadow-ease, ease-out);
2030
+ }
2031
+ [data-kui-fx~=lift-shadow]:focus-visible {
2032
+ translate: 0 -6px;
2033
+ box-shadow: 0 14px 28px -12px rgb(0 0 0 / 0.45);
2034
+ }
2035
+ [data-kui-fx~=shine-sweep] {
2036
+ position: relative;
2037
+ overflow: hidden;
2038
+ }
2039
+ [data-kui-fx~=shine-sweep]::after {
2040
+ content: "";
2041
+ position: absolute;
2042
+ inset: 0;
2043
+ background:
2044
+ linear-gradient(
2045
+ 115deg,
2046
+ transparent 40%,
2047
+ rgb(255 255 255 / 0.35) 50%,
2048
+ transparent 60%);
2049
+ background-size: 220% 100%;
2050
+ background-position: 120% 0;
2051
+ pointer-events: none;
2052
+ }
2053
+ [data-kui-fx~=shine-sweep]:focus-visible::after {
2054
+ animation: kui-shine-sweep var(--kui-shine-sweep-duration, 700ms) var(--kui-shine-sweep-ease, ease-out);
2055
+ }
2056
+ @keyframes kui-shine-sweep {
2057
+ from {
2058
+ background-position: 120% 0;
2059
+ }
2060
+ to {
2061
+ background-position: -20% 0;
2062
+ }
2063
+ }
2064
+ [data-kui-fx~=split-flap] {
2065
+ display: inline-block;
2066
+ perspective: 600px;
2067
+ backface-visibility: hidden;
2068
+ }
2069
+ [data-kui-fx~=split-flap]:focus-visible {
2070
+ animation: kui-split-flap var(--kui-split-flap-duration, 600ms) var(--kui-split-flap-ease, ease-in-out);
2071
+ }
2072
+ @keyframes kui-split-flap {
2073
+ from {
2074
+ rotate: x 0deg;
2075
+ }
2076
+ to {
2077
+ rotate: x 360deg;
2078
+ }
2079
+ }
2080
+ [data-kui-fx~=border-draw] {
2081
+ border: 2px solid transparent;
2082
+ border-image-slice: 1;
2083
+ border-image-source:
2084
+ conic-gradient(
2085
+ from -90deg,
2086
+ var(--kui-border-draw-color, var(--accent, #d2691e)) 0 var(--kui-border-pct, 0%),
2087
+ transparent 0);
2088
+ transition: --kui-border-pct var(--kui-border-draw-duration, 500ms) var(--kui-border-draw-ease, ease-out);
2089
+ }
2090
+ [data-kui-fx~=border-draw]:focus-visible {
2091
+ --kui-border-pct: 100%;
2092
+ }
2093
+ [data-kui-fx~=border-glow] {
2094
+ transition: box-shadow var(--kui-border-glow-duration, 260ms) var(--kui-border-glow-ease, ease-out);
2095
+ }
2096
+ [data-kui-fx~=border-glow]:focus-visible {
2097
+ box-shadow: 0 0 0 3px var(--kui-border-glow-color, var(--accent, #d2691e));
2098
+ }
2099
+ [data-kui-fx~=beam-border],
2100
+ [data-kui-fx~=beam-border-auto] {
2101
+ position: relative;
2102
+ }
2103
+ [data-kui-fx~=beam-border]::before,
2104
+ [data-kui-fx~=beam-border-auto]::before {
2105
+ content: "";
2106
+ position: absolute;
2107
+ inset: 0;
2108
+ border-radius: inherit;
2109
+ padding: var(--kui-beam-border-width, 3px);
2110
+ background:
2111
+ conic-gradient(
2112
+ from var(--kui-border-angle, 0deg),
2113
+ transparent 0deg,
2114
+ transparent 260deg,
2115
+ var(--kui-beam-border-c1, #ff5f6d) 282deg,
2116
+ var(--kui-beam-border-c2, #ffc371) 306deg,
2117
+ var(--kui-beam-border-c3, #4facfe) 330deg,
2118
+ var(--kui-beam-border-c4, #a855f7) 354deg,
2119
+ transparent 360deg);
2120
+ -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
2121
+ -webkit-mask-composite: xor;
2122
+ mask-composite: exclude;
2123
+ opacity: 0;
2124
+ pointer-events: none;
2125
+ transition: opacity var(--kui-beam-border-fade-duration, 200ms) ease-out;
2126
+ }
2127
+ [data-kui-fx~=beam-border]:focus-visible::before {
2128
+ opacity: 1;
2129
+ animation: kui-beam-rotate var(--kui-beam-border-duration, 4260ms) linear infinite;
2130
+ }
2131
+ [data-kui-fx~=beam-border-auto]::before {
2132
+ opacity: 1;
2133
+ animation: kui-beam-rotate var(--kui-beam-border-duration, 4260ms) linear infinite;
2134
+ }
2135
+ @keyframes kui-beam-rotate {
2136
+ to {
2137
+ --kui-border-angle: 360deg;
2138
+ }
2139
+ }
2140
+ @media (prefers-reduced-motion: reduce) {
2141
+ [data-kui-fx~=beam-border]:focus-visible::before,
2142
+ [data-kui-fx~=beam-border-auto]::before {
2143
+ animation: none;
2144
+ --kui-border-angle: 45deg;
2145
+ }
2146
+ }
2147
+ [data-kui-fx~=underline-slide] {
2148
+ position: relative;
2149
+ text-decoration: none;
2150
+ }
2151
+ [data-kui-fx~=underline-slide]::after {
2152
+ content: "";
2153
+ position: absolute;
2154
+ left: 0;
2155
+ right: 0;
2156
+ bottom: -0.15em;
2157
+ height: 0.08em;
2158
+ background: currentcolor;
2159
+ scale: 0 1;
2160
+ transform-origin: left center;
2161
+ transition: scale var(--kui-underline-slide-duration, 260ms) var(--kui-underline-slide-ease, ease-out);
2162
+ }
2163
+ [data-kui-fx~=underline-slide]:focus-visible::after {
2164
+ scale: 1 1;
2165
+ }
2166
+ [data-kui-fx~=underline-center] {
2167
+ position: relative;
2168
+ text-decoration: none;
2169
+ }
2170
+ [data-kui-fx~=underline-center]::after {
2171
+ content: "";
2172
+ position: absolute;
2173
+ left: 0;
2174
+ right: 0;
2175
+ bottom: -0.15em;
2176
+ height: 0.08em;
2177
+ background: currentcolor;
2178
+ scale: 0 1;
2179
+ transform-origin: center;
2180
+ transition: scale var(--kui-underline-center-duration, 260ms) var(--kui-underline-center-ease, ease-out);
2181
+ }
2182
+ [data-kui-fx~=underline-center]:focus-visible::after {
2183
+ scale: 1 1;
2184
+ }
2185
+ [data-kui-fx~=icon-wiggle]:focus-visible {
2186
+ animation: kui-icon-wiggle var(--kui-icon-wiggle-duration, 500ms) var(--kui-icon-wiggle-ease, ease-in-out);
2187
+ }
2188
+ @keyframes kui-icon-wiggle {
2189
+ 0%, 100% {
2190
+ rotate: 0deg;
2191
+ }
2192
+ 20% {
2193
+ rotate: -12deg;
2194
+ }
2195
+ 40% {
2196
+ rotate: 10deg;
2197
+ }
2198
+ 60% {
2199
+ rotate: -6deg;
2200
+ }
2201
+ 80% {
2202
+ rotate: 4deg;
2203
+ }
2204
+ }
2205
+ [data-kui-fx~=icon-spin]:focus-visible {
2206
+ animation: kui-icon-spin var(--kui-icon-spin-duration, 700ms) linear;
2207
+ }
2208
+ @keyframes kui-icon-spin {
2209
+ from {
2210
+ rotate: 0deg;
2211
+ }
2212
+ to {
2213
+ rotate: 360deg;
2214
+ }
2215
+ }
2216
+ [data-kui-fx~=icon-bounce]:focus-visible {
2217
+ animation: kui-icon-bounce var(--kui-icon-bounce-duration, 500ms) var(--kui-icon-bounce-ease, ease-out);
2218
+ }
2219
+ @keyframes kui-icon-bounce {
2220
+ 0%, 100% {
2221
+ translate: 0 0;
2222
+ }
2223
+ 30% {
2224
+ translate: 0 -7px;
2225
+ }
2226
+ 55% {
2227
+ translate: 0 1px;
2228
+ }
2229
+ 75% {
2230
+ translate: 0 -3px;
2231
+ }
2232
+ }
2233
+ @media (hover: hover) and (pointer: fine) {
2234
+ [data-kui-fx~=lift]:hover {
2235
+ translate: 0 -6px;
2236
+ }
2237
+ [data-kui-fx~=lift-shadow]:hover {
2238
+ translate: 0 -6px;
2239
+ box-shadow: 0 14px 28px -12px rgb(0 0 0 / 0.45);
2240
+ }
2241
+ [data-kui-fx~=shine-sweep]:hover::after {
2242
+ animation: kui-shine-sweep var(--kui-shine-sweep-duration, 700ms) var(--kui-shine-sweep-ease, ease-out);
2243
+ }
2244
+ [data-kui-fx~=split-flap]:hover {
2245
+ animation: kui-split-flap var(--kui-split-flap-duration, 600ms) var(--kui-split-flap-ease, ease-in-out);
2246
+ }
2247
+ [data-kui-fx~=border-draw]:hover {
2248
+ --kui-border-pct: 100%;
2249
+ }
2250
+ [data-kui-fx~=border-glow]:hover {
2251
+ box-shadow: 0 0 0 3px var(--kui-border-glow-color, var(--accent, #d2691e));
2252
+ }
2253
+ [data-kui-fx~=beam-border]:hover::before {
2254
+ opacity: 1;
2255
+ animation: kui-beam-rotate var(--kui-beam-border-duration, 4260ms) linear infinite;
2256
+ }
2257
+ [data-kui-fx~=underline-slide]:hover::after {
2258
+ scale: 1 1;
2259
+ }
2260
+ [data-kui-fx~=underline-center]:hover::after {
2261
+ scale: 1 1;
2262
+ }
2263
+ [data-kui-fx~=icon-wiggle]:hover {
2264
+ animation: kui-icon-wiggle var(--kui-icon-wiggle-duration, 500ms) var(--kui-icon-wiggle-ease, ease-in-out);
2265
+ }
2266
+ [data-kui-fx~=icon-spin]:hover {
2267
+ animation: kui-icon-spin var(--kui-icon-spin-duration, 700ms) linear;
2268
+ }
2269
+ [data-kui-fx~=icon-bounce]:hover {
2270
+ animation: kui-icon-bounce var(--kui-icon-bounce-duration, 500ms) var(--kui-icon-bounce-ease, ease-out);
2271
+ }
2272
+ }
2273
+ [data-kui-fx~=tilt-3d],
2274
+ [data-kui-fx~=tilt-parallax] {
2275
+ transform-style: preserve-3d;
2276
+ }
2277
+ [data-kui-fx~=cursor-spotlight]::before {
2278
+ content: "";
2279
+ position: absolute;
2280
+ inset: 0;
2281
+ border-radius: inherit;
2282
+ pointer-events: none;
2283
+ opacity: var(--kui-spotlight-opacity, 0);
2284
+ transition: opacity 200ms ease-out;
2285
+ background:
2286
+ radial-gradient(
2287
+ circle 160px at var(--kui-x, 50%) var(--kui-y, 50%),
2288
+ color-mix(in srgb, var(--accent, #d2691e) 30%, transparent),
2289
+ transparent 70%);
2290
+ }
2291
+ .kui-cursor-dot {
2292
+ position: fixed;
2293
+ top: 0;
2294
+ left: 0;
2295
+ z-index: 9999;
2296
+ display: grid;
2297
+ place-items: center;
2298
+ pointer-events: none;
2299
+ opacity: 0;
2300
+ transition: opacity 160ms ease-out;
2301
+ }
2302
+ .kui-cursor-dot-active {
2303
+ opacity: 1;
2304
+ }
2305
+ .kui-cursor-dot-follow,
2306
+ .kui-cursor-dot-lag,
2307
+ .kui-cursor-dot-invert {
2308
+ width: 14px;
2309
+ height: 14px;
2310
+ margin: -7px 0 0 -7px;
2311
+ border-radius: 50%;
2312
+ background: var(--accent, #d2691e);
2313
+ }
2314
+ .kui-cursor-dot-invert {
2315
+ background: #fff;
2316
+ mix-blend-mode: difference;
2317
+ }
2318
+ .kui-cursor-dot-label {
2319
+ margin: -1.4em 0 0 -1.4em;
2320
+ padding: 0.4em 0.8em;
2321
+ border-radius: 999px;
2322
+ background: var(--accent, #d2691e);
2323
+ color: #fff;
2324
+ font-size: 0.75rem;
2325
+ font-family:
2326
+ ui-monospace,
2327
+ Menlo,
2328
+ monospace;
2329
+ white-space: nowrap;
2330
+ }
2331
+ @media (pointer: coarse) {
2332
+ .kui-cursor-dot {
2333
+ display: none;
2334
+ }
2335
+ }
2336
+ }
2337
+
2338
+ /* src/css/index.css */