viewfx 0.0.5

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.
package/src/index.css ADDED
@@ -0,0 +1,815 @@
1
+ /**
2
+ * viewfx
3
+ * Tailwind CSS v4 entry — View Transitions theme effects.
4
+ * Tailwind v3 uses `src/plugin.cjs` (`require('viewfx')`).
5
+ * Keep `@utility` blocks in sync with `src/effects.cjs`.
6
+ */
7
+
8
+ @import './masks.css';
9
+ @plugin './compound.cjs';
10
+
11
+ /* ============================================
12
+ Theme Configuration
13
+ ============================================ */
14
+
15
+ @theme inline {
16
+ --fx-duration-none: 0ms;
17
+ --fx-duration-slower: 500ms;
18
+ --fx-duration-slow: 400ms;
19
+ --fx-duration-normal: 300ms;
20
+ --fx-duration-fast: 200ms;
21
+ --fx-duration-faster: 100ms;
22
+ --fx-duration-0: 0ms;
23
+ --fx-duration-100: 100ms;
24
+ --fx-duration-150: 150ms;
25
+ --fx-duration-200: 200ms;
26
+ --fx-duration-250: 250ms;
27
+ --fx-duration-300: 300ms;
28
+ --fx-duration-400: 400ms;
29
+ --fx-duration-500: 500ms;
30
+ --fx-duration-700: 700ms;
31
+ --fx-duration-800: 800ms;
32
+ --fx-duration-900: 900ms;
33
+ --fx-duration-1000: 1000ms;
34
+
35
+ --fx-delay-none: 0ms;
36
+ --fx-delay-0: 0ms;
37
+ --fx-delay-100: 100ms;
38
+ --fx-delay-150: 150ms;
39
+ --fx-delay-200: 200ms;
40
+ --fx-delay-250: 250ms;
41
+ --fx-delay-300: 300ms;
42
+ --fx-delay-400: 400ms;
43
+ --fx-delay-500: 500ms;
44
+ --fx-delay-700: 700ms;
45
+ --fx-delay-800: 800ms;
46
+ --fx-delay-900: 900ms;
47
+ --fx-delay-1000: 1000ms;
48
+
49
+ --fx-steps-none: 0;
50
+ --fx-steps-retro: 8;
51
+ --fx-steps-normal: 16;
52
+ --fx-steps-modern: 24;
53
+
54
+ --ease-expo-out: var(--expo-out);
55
+ --ease-expo-in: var(--expo-in);
56
+ }
57
+
58
+ /* ============================================
59
+ Engine
60
+ Custom properties inherit into the view-transition
61
+ pseudo tree from the document element.
62
+ ============================================ */
63
+
64
+ :root {
65
+ --expo-out: linear(
66
+ 0 0%,
67
+ 0.1684 2.66%,
68
+ 0.3165 5.49%,
69
+ 0.446 8.52%,
70
+ 0.5581 11.78%,
71
+ 0.6535 15.29%,
72
+ 0.7341 19.11%,
73
+ 0.8011 23.3%,
74
+ 0.8557 27.93%,
75
+ 0.8962 32.68%,
76
+ 0.9283 38.01%,
77
+ 0.9529 44.08%,
78
+ 0.9711 51.14%,
79
+ 0.9833 59.06%,
80
+ 0.9915 68.74%,
81
+ 1 100%
82
+ );
83
+ --expo-in: linear(
84
+ 0 0%,
85
+ 0.0085 31.26%,
86
+ 0.0167 40.94%,
87
+ 0.0289 48.86%,
88
+ 0.0471 55.92%,
89
+ 0.0717 61.99%,
90
+ 0.1038 67.32%,
91
+ 0.1443 72.07%,
92
+ 0.1989 76.7%,
93
+ 0.2659 80.89%,
94
+ 0.3465 84.71%,
95
+ 0.4419 88.22%,
96
+ 0.554 91.48%,
97
+ 0.6835 94.51%,
98
+ 0.8316 97.34%,
99
+ 1 100%
100
+ );
101
+ }
102
+
103
+ :root::view-transition-group(root) {
104
+ animation-duration: var(--fx-duration-override, var(--fx-duration, 0.5s));
105
+ animation-timing-function: var(--fx-ease-override, var(--fx-ease, var(--expo-out)));
106
+ animation-delay: var(--fx-delay, 0s);
107
+ }
108
+
109
+ :root::view-transition-old(root) {
110
+ animation: var(--fx-anim-old, fx-fade-out)
111
+ var(--fx-duration-override, var(--fx-duration, 0.5s))
112
+ var(--fx-ease-override, var(--fx-ease, var(--expo-out)))
113
+ var(--fx-delay, 0s) both;
114
+ z-index: var(--fx-old-z, auto);
115
+ mix-blend-mode: normal;
116
+ }
117
+
118
+ :root::view-transition-new(root) {
119
+ mask: var(--fx-mask, none) var(--fx-mask-position, center) / 0 no-repeat;
120
+ mask-origin: content-box;
121
+ animation: var(--fx-anim, fx-fade-in)
122
+ var(--fx-duration-override, var(--fx-duration, 0.5s))
123
+ var(--fx-ease-override, var(--fx-ease, var(--expo-out)))
124
+ var(--fx-delay, 0s) both;
125
+ mix-blend-mode: normal;
126
+ }
127
+
128
+ @media (prefers-reduced-motion: reduce) {
129
+ ::view-transition-group(root),
130
+ ::view-transition-old(root),
131
+ ::view-transition-new(root) {
132
+ animation: none !important;
133
+ }
134
+ }
135
+
136
+ /* ============================================
137
+ Keyframes
138
+ ============================================ */
139
+
140
+ @property --fx-mosaic {
141
+ syntax: '<number>';
142
+ inherits: false;
143
+ initial-value: 1;
144
+ }
145
+
146
+ :root.mosaic::view-transition-new(root),
147
+ :root[class*='mosaic-duration']::view-transition-new(root) {
148
+ mask: none;
149
+ -webkit-mask-image:
150
+ repeating-linear-gradient(
151
+ #0000 0,
152
+ #0000 calc(6.25% - var(--fx-mosaic) * 8%),
153
+ #fff calc(6.25% - var(--fx-mosaic) * 6.6%),
154
+ #fff calc(6.25% + var(--fx-mosaic) * 6.6%),
155
+ #0000 calc(6.25% + var(--fx-mosaic) * 8%),
156
+ #0000 12.5%
157
+ ),
158
+ repeating-linear-gradient(
159
+ 90deg,
160
+ #0000 0,
161
+ #0000 calc(6.25% - var(--fx-mosaic) * 8%),
162
+ #fff calc(6.25% - var(--fx-mosaic) * 6.6%),
163
+ #fff calc(6.25% + var(--fx-mosaic) * 6.6%),
164
+ #0000 calc(6.25% + var(--fx-mosaic) * 8%),
165
+ #0000 12.5%
166
+ );
167
+ mask-image:
168
+ repeating-linear-gradient(
169
+ #0000 0,
170
+ #0000 calc(6.25% - var(--fx-mosaic) * 8%),
171
+ #fff calc(6.25% - var(--fx-mosaic) * 6.6%),
172
+ #fff calc(6.25% + var(--fx-mosaic) * 6.6%),
173
+ #0000 calc(6.25% + var(--fx-mosaic) * 8%),
174
+ #0000 12.5%
175
+ ),
176
+ repeating-linear-gradient(
177
+ 90deg,
178
+ #0000 0,
179
+ #0000 calc(6.25% - var(--fx-mosaic) * 8%),
180
+ #fff calc(6.25% - var(--fx-mosaic) * 6.6%),
181
+ #fff calc(6.25% + var(--fx-mosaic) * 6.6%),
182
+ #0000 calc(6.25% + var(--fx-mosaic) * 8%),
183
+ #0000 12.5%
184
+ );
185
+ -webkit-mask-size: 100% 100%;
186
+ mask-size: 100% 100%;
187
+ -webkit-mask-repeat: no-repeat;
188
+ mask-repeat: no-repeat;
189
+ -webkit-mask-composite: source-in;
190
+ mask-composite: intersect;
191
+ }
192
+
193
+ @keyframes fx-mosaic {
194
+ from {
195
+ --fx-mosaic: 0;
196
+ }
197
+ to {
198
+ --fx-mosaic: 1;
199
+ }
200
+ }
201
+
202
+ @keyframes fx-mask-grow {
203
+ to {
204
+ mask-size: var(--fx-mask-size);
205
+ }
206
+ }
207
+
208
+ @keyframes fx-spiral {
209
+ to {
210
+ mask-size: var(--fx-mask-size);
211
+ mask-image: conic-gradient(from 0deg, #fff 0%, #fff 100%);
212
+ }
213
+ }
214
+
215
+ @keyframes fx-reveal-light {
216
+ from {
217
+ clip-path: polygon(171% 50%, 50% 171%, 50% 171%, 171% 50%);
218
+ }
219
+ to {
220
+ clip-path: polygon(171% 50%, 50% 171%, -50% 71%, 50% -71%);
221
+ }
222
+ }
223
+
224
+ @keyframes fx-reveal-dark {
225
+ from {
226
+ clip-path: polygon(50% -71%, -50% 71%, -50% 71%, 50% -71%);
227
+ }
228
+ to {
229
+ clip-path: polygon(50% -71%, -50% 71%, 50% 171%, 171% 50%);
230
+ }
231
+ }
232
+
233
+ @keyframes fx-wipe-in-h {
234
+ from {
235
+ clip-path: inset(0 100% 0 0);
236
+ }
237
+ to {
238
+ clip-path: inset(0 0 0 0);
239
+ }
240
+ }
241
+
242
+ @keyframes fx-wipe-out-h {
243
+ from {
244
+ clip-path: inset(0 0 0 0);
245
+ }
246
+ to {
247
+ clip-path: inset(0 0 0 100%);
248
+ }
249
+ }
250
+
251
+ @keyframes fx-wipe-in-left {
252
+ from {
253
+ clip-path: inset(0 0 0 100%);
254
+ }
255
+ to {
256
+ clip-path: inset(0 0 0 0);
257
+ }
258
+ }
259
+
260
+ @keyframes fx-wipe-out-left {
261
+ from {
262
+ clip-path: inset(0 0 0 0);
263
+ }
264
+ to {
265
+ clip-path: inset(0 100% 0 0);
266
+ }
267
+ }
268
+
269
+ @keyframes fx-wipe-in-down {
270
+ from {
271
+ clip-path: inset(0 0 100% 0);
272
+ }
273
+ to {
274
+ clip-path: inset(0 0 0 0);
275
+ }
276
+ }
277
+
278
+ @keyframes fx-wipe-out-down {
279
+ from {
280
+ clip-path: inset(0 0 0 0);
281
+ }
282
+ to {
283
+ clip-path: inset(100% 0 0 0);
284
+ }
285
+ }
286
+
287
+ @keyframes fx-wipe-in-up {
288
+ from {
289
+ clip-path: inset(100% 0 0 0);
290
+ }
291
+ to {
292
+ clip-path: inset(0 0 0 0);
293
+ }
294
+ }
295
+
296
+ @keyframes fx-wipe-out-up {
297
+ from {
298
+ clip-path: inset(0 0 0 0);
299
+ }
300
+ to {
301
+ clip-path: inset(0 0 100% 0);
302
+ }
303
+ }
304
+
305
+ @keyframes fx-venetian-out {
306
+ from {
307
+ clip-path: inset(0 0 0 0);
308
+ }
309
+ to {
310
+ clip-path: inset(100% 0 0 0);
311
+ }
312
+ }
313
+
314
+ @keyframes fx-expand-in {
315
+ from {
316
+ clip-path: inset(50%);
317
+ }
318
+ to {
319
+ clip-path: inset(0);
320
+ }
321
+ }
322
+
323
+ @keyframes fx-split-in {
324
+ from {
325
+ clip-path: inset(0 50%);
326
+ }
327
+ to {
328
+ clip-path: inset(0);
329
+ }
330
+ }
331
+
332
+ @keyframes fx-shutter-in {
333
+ from {
334
+ clip-path: inset(50% 0);
335
+ }
336
+ to {
337
+ clip-path: inset(0);
338
+ }
339
+ }
340
+
341
+ @keyframes fx-glitch-in {
342
+ 0% {
343
+ clip-path: inset(16% 0 6% 0);
344
+ transform: translateX(-3.2%) skewX(-1.5deg);
345
+ }
346
+ 14% {
347
+ clip-path: inset(3% 0 20% 10%);
348
+ transform: translateX(3.6%) skewX(2deg);
349
+ }
350
+ 28% {
351
+ clip-path: inset(0 14% 8% 0);
352
+ transform: translateX(-2.8%) skewX(-0.8deg);
353
+ }
354
+ 42% {
355
+ clip-path: inset(18% 0 4% 0);
356
+ transform: translateX(4%) skewX(1.2deg);
357
+ }
358
+ 56% {
359
+ clip-path: inset(5% 8% 14% 0);
360
+ transform: translateX(-3%) skewX(-1deg);
361
+ }
362
+ 70% {
363
+ clip-path: inset(0);
364
+ transform: translateX(0) skewX(0);
365
+ }
366
+ 84% {
367
+ clip-path: inset(10% 0 4% 8%);
368
+ transform: translateX(2.4%) skewX(0.8deg);
369
+ }
370
+ 100% {
371
+ clip-path: inset(0);
372
+ transform: translateX(0) skewX(0);
373
+ }
374
+ }
375
+
376
+ @keyframes fx-glitch-out {
377
+ 0% {
378
+ clip-path: inset(0);
379
+ transform: translateX(0) skewX(0);
380
+ opacity: 1;
381
+ }
382
+ 16% {
383
+ clip-path: inset(0 0 16% 6%);
384
+ transform: translateX(3%) skewX(1.2deg);
385
+ }
386
+ 32% {
387
+ clip-path: inset(14% 10% 4% 0);
388
+ transform: translateX(-3.4%) skewX(-1.5deg);
389
+ }
390
+ 48% {
391
+ clip-path: inset(4% 0 18% 0);
392
+ transform: translateX(2.6%) skewX(0.6deg);
393
+ }
394
+ 64% {
395
+ clip-path: inset(12% 6% 6% 0);
396
+ transform: translateX(-2.2%) skewX(-1deg);
397
+ }
398
+ 80% {
399
+ clip-path: inset(6% 0 12% 8%);
400
+ transform: translateX(2%) skewX(0.8deg);
401
+ opacity: 0.85;
402
+ }
403
+ 100% {
404
+ clip-path: inset(20% 0 16% 0);
405
+ transform: translateX(-1.5%) skewX(0);
406
+ opacity: 0;
407
+ }
408
+ }
409
+
410
+ @keyframes fx-slide-in {
411
+ from {
412
+ transform: translateX(100%);
413
+ }
414
+ to {
415
+ transform: translateX(0);
416
+ }
417
+ }
418
+
419
+ @keyframes fx-slide-out {
420
+ from {
421
+ transform: translateX(0);
422
+ opacity: 1;
423
+ }
424
+ to {
425
+ transform: translateX(-50%);
426
+ opacity: 0.3;
427
+ }
428
+ }
429
+
430
+ @keyframes fx-lift-in {
431
+ from {
432
+ opacity: 0;
433
+ transform: translateY(18%);
434
+ }
435
+ to {
436
+ opacity: 1;
437
+ transform: translateY(0);
438
+ }
439
+ }
440
+
441
+ @keyframes fx-lift-out {
442
+ from {
443
+ opacity: 1;
444
+ transform: translateY(0);
445
+ }
446
+ to {
447
+ opacity: 0;
448
+ transform: translateY(-10%);
449
+ }
450
+ }
451
+
452
+ @keyframes fx-zoom-in {
453
+ from {
454
+ opacity: 0;
455
+ transform: scale(0.85);
456
+ }
457
+ to {
458
+ opacity: 1;
459
+ transform: scale(1);
460
+ }
461
+ }
462
+
463
+ @keyframes fx-zoom-out {
464
+ from {
465
+ opacity: 1;
466
+ transform: scale(1);
467
+ }
468
+ to {
469
+ opacity: 0;
470
+ transform: scale(1.15);
471
+ }
472
+ }
473
+
474
+ @keyframes fx-rotate-in {
475
+ from {
476
+ opacity: 0;
477
+ transform: rotate(-6deg) scale(0.9);
478
+ }
479
+ to {
480
+ opacity: 1;
481
+ transform: rotate(0) scale(1);
482
+ }
483
+ }
484
+
485
+ @keyframes fx-rotate-out {
486
+ from {
487
+ opacity: 1;
488
+ transform: rotate(0) scale(1);
489
+ }
490
+ to {
491
+ opacity: 0;
492
+ transform: rotate(6deg) scale(0.9);
493
+ }
494
+ }
495
+
496
+ @keyframes fx-fade-in {
497
+ from {
498
+ opacity: 0;
499
+ }
500
+ to {
501
+ opacity: 1;
502
+ }
503
+ }
504
+
505
+ @keyframes fx-fade-out {
506
+ from {
507
+ opacity: 1;
508
+ }
509
+ to {
510
+ opacity: 0;
511
+ }
512
+ }
513
+
514
+ @keyframes fx-blur-in {
515
+ from {
516
+ opacity: 0;
517
+ filter: blur(18px);
518
+ }
519
+ to {
520
+ opacity: 1;
521
+ filter: blur(0);
522
+ }
523
+ }
524
+
525
+ @keyframes fx-blur-out {
526
+ from {
527
+ opacity: 1;
528
+ filter: blur(0);
529
+ }
530
+ to {
531
+ opacity: 0;
532
+ filter: blur(14px);
533
+ }
534
+ }
535
+
536
+ /* ============================================
537
+ Effect utilities — put on <html>
538
+ ============================================ */
539
+
540
+ @utility circle {
541
+ --fx-anim: fx-mask-grow;
542
+ --fx-anim-old: none;
543
+ --fx-old-z: -1;
544
+ --fx-mask: var(--mask-circle);
545
+ --fx-mask-size: 200vmax;
546
+ --fx-duration: 1s;
547
+ }
548
+
549
+ @utility circle-blur {
550
+ --fx-anim: fx-mask-grow;
551
+ --fx-anim-old: none;
552
+ --fx-old-z: -1;
553
+ --fx-mask: var(--mask-circle-blur);
554
+ --fx-mask-size: 200vmax;
555
+ --fx-duration: 1s;
556
+ }
557
+
558
+ @utility corner-tl {
559
+ --fx-anim: fx-mask-grow;
560
+ --fx-anim-old: none;
561
+ --fx-old-z: -1;
562
+ --fx-mask: var(--mask-corner-tl);
563
+ --fx-mask-position: top left;
564
+ --fx-mask-size: 200vmax;
565
+ --fx-duration: 1.6s;
566
+ --fx-ease: ease-in-out;
567
+ }
568
+
569
+ @utility corner-tr {
570
+ --fx-anim: fx-mask-grow;
571
+ --fx-anim-old: none;
572
+ --fx-old-z: -1;
573
+ --fx-mask: var(--mask-corner-tr);
574
+ --fx-mask-position: top right;
575
+ --fx-mask-size: 200vmax;
576
+ --fx-duration: 1.6s;
577
+ --fx-ease: ease-in-out;
578
+ }
579
+
580
+ @utility corner-bl {
581
+ --fx-anim: fx-mask-grow;
582
+ --fx-anim-old: none;
583
+ --fx-old-z: -1;
584
+ --fx-mask: var(--mask-corner-bl);
585
+ --fx-mask-position: bottom left;
586
+ --fx-mask-size: 200vmax;
587
+ --fx-duration: 1.6s;
588
+ --fx-ease: ease-in-out;
589
+ }
590
+
591
+ @utility corner-br {
592
+ --fx-anim: fx-mask-grow;
593
+ --fx-anim-old: none;
594
+ --fx-old-z: -1;
595
+ --fx-mask: var(--mask-corner-br);
596
+ --fx-mask-position: bottom right;
597
+ --fx-mask-size: 200vmax;
598
+ --fx-duration: 1.6s;
599
+ --fx-ease: ease-in-out;
600
+ }
601
+
602
+ @utility iris {
603
+ --fx-anim: fx-mask-grow;
604
+ --fx-anim-old: none;
605
+ --fx-old-z: -1;
606
+ --fx-mask: var(--mask-star);
607
+ --fx-mask-size: 320vmax;
608
+ --fx-duration: 1.6s;
609
+ --fx-ease: ease-in-out;
610
+ }
611
+
612
+ @utility diamond {
613
+ --fx-anim: fx-mask-grow;
614
+ --fx-anim-old: none;
615
+ --fx-old-z: -1;
616
+ --fx-mask: var(--mask-diamond);
617
+ --fx-mask-size: 300vmax;
618
+ --fx-duration: 1.6s;
619
+ --fx-ease: ease-in-out;
620
+ }
621
+
622
+ @utility hexagon {
623
+ --fx-anim: fx-mask-grow;
624
+ --fx-anim-old: none;
625
+ --fx-old-z: -1;
626
+ --fx-mask: var(--mask-hexagon);
627
+ --fx-mask-size: 320vmax;
628
+ --fx-duration: 1.6s;
629
+ --fx-ease: ease-in-out;
630
+ }
631
+
632
+ @utility square {
633
+ --fx-anim: fx-mask-grow;
634
+ --fx-anim-old: none;
635
+ --fx-old-z: -1;
636
+ --fx-mask: var(--mask-square);
637
+ --fx-mask-size: 280vmax;
638
+ --fx-duration: 1.6s;
639
+ --fx-ease: ease-in-out;
640
+ }
641
+
642
+ @utility mosaic {
643
+ --fx-anim: fx-mosaic;
644
+ --fx-anim-old: none;
645
+ --fx-old-z: -1;
646
+ --fx-duration: 1.2s;
647
+ --fx-ease: cubic-bezier(0.4, 0, 0.15, 1);
648
+ }
649
+
650
+ @utility soft {
651
+ --fx-anim: fx-mask-grow;
652
+ --fx-anim-old: none;
653
+ --fx-old-z: -1;
654
+ --fx-mask: var(--mask-soft);
655
+ --fx-mask-size: 300vmax;
656
+ --fx-duration: 1.6s;
657
+ --fx-ease: ease-in-out;
658
+ }
659
+
660
+ @utility heart {
661
+ --fx-anim: fx-mask-grow;
662
+ --fx-anim-old: none;
663
+ --fx-old-z: -1;
664
+ --fx-mask: var(--mask-heart);
665
+ --fx-mask-size: 300vmax;
666
+ --fx-duration: 1.6s;
667
+ --fx-ease: ease-in-out;
668
+ }
669
+
670
+ @utility expand {
671
+ --fx-anim: fx-expand-in;
672
+ --fx-anim-old: none;
673
+ --fx-old-z: -1;
674
+ --fx-duration: 0.6s;
675
+ }
676
+
677
+ @utility split {
678
+ --fx-anim: fx-split-in;
679
+ --fx-anim-old: none;
680
+ --fx-old-z: -1;
681
+ --fx-duration: 0.7s;
682
+ }
683
+
684
+ @utility shutter {
685
+ --fx-anim: fx-shutter-in;
686
+ --fx-anim-old: none;
687
+ --fx-old-z: -1;
688
+ --fx-duration: 0.7s;
689
+ }
690
+
691
+ @utility ink {
692
+ --fx-anim: fx-mask-grow;
693
+ --fx-anim-old: none;
694
+ --fx-old-z: -1;
695
+ --fx-mask: var(--mask-ink);
696
+ --fx-mask-size: 280vmax;
697
+ --fx-duration: 1.8s;
698
+ --fx-ease: ease-in-out;
699
+ }
700
+
701
+ @utility spiral {
702
+ --fx-anim: fx-spiral;
703
+ --fx-anim-old: none;
704
+ --fx-old-z: -1;
705
+ --fx-mask: conic-gradient(from 0deg, #fff 0%, transparent 0%);
706
+ --fx-mask-size: 280vmax;
707
+ --fx-duration: 1.8s;
708
+ --fx-ease: ease-in-out;
709
+ }
710
+
711
+ @utility polygon {
712
+ --fx-anim: fx-reveal-light;
713
+ --fx-anim-old: none;
714
+ --fx-old-z: -1;
715
+ --fx-duration: 0.7s;
716
+ }
717
+
718
+ .dark.polygon {
719
+ --fx-anim: fx-reveal-dark;
720
+ }
721
+
722
+ .dark[class*='polygon-duration'] {
723
+ --fx-anim: fx-reveal-dark;
724
+ }
725
+
726
+ @utility slide-right {
727
+ --fx-anim: fx-wipe-in-h;
728
+ --fx-anim-old: fx-wipe-out-h;
729
+ --fx-duration: 0.6s;
730
+ }
731
+
732
+ @utility slide-left {
733
+ --fx-anim: fx-wipe-in-left;
734
+ --fx-anim-old: fx-wipe-out-left;
735
+ --fx-duration: 0.6s;
736
+ }
737
+
738
+ @utility slide-up {
739
+ --fx-anim: fx-wipe-in-up;
740
+ --fx-anim-old: fx-wipe-out-up;
741
+ --fx-duration: 0.6s;
742
+ }
743
+
744
+ @utility slide-down {
745
+ --fx-anim: fx-wipe-in-down;
746
+ --fx-anim-old: fx-wipe-out-down;
747
+ --fx-duration: 0.6s;
748
+ }
749
+
750
+ @utility venetian {
751
+ --fx-anim: fx-wipe-in-down;
752
+ --fx-anim-old: fx-venetian-out;
753
+ --fx-duration: 0.8s;
754
+ }
755
+
756
+ @utility glitch {
757
+ --fx-anim: fx-glitch-in;
758
+ --fx-anim-old: fx-glitch-out;
759
+ --fx-duration: 1s;
760
+ --fx-ease: step-end;
761
+ }
762
+
763
+ @utility slide {
764
+ --fx-anim: fx-slide-in;
765
+ --fx-anim-old: fx-slide-out;
766
+ --fx-duration: 0.6s;
767
+ }
768
+
769
+ @utility lift {
770
+ --fx-anim: fx-lift-in;
771
+ --fx-anim-old: fx-lift-out;
772
+ --fx-duration: 0.7s;
773
+ }
774
+
775
+ @utility zoom {
776
+ --fx-anim: fx-zoom-in;
777
+ --fx-anim-old: fx-zoom-out;
778
+ --fx-duration: 0.7s;
779
+ }
780
+
781
+ @utility rotate {
782
+ --fx-anim: fx-rotate-in;
783
+ --fx-anim-old: fx-rotate-out;
784
+ --fx-duration: 0.7s;
785
+ }
786
+
787
+ @utility fade {
788
+ --fx-anim: fx-fade-in;
789
+ --fx-anim-old: fx-fade-out;
790
+ --fx-duration: 0.5s;
791
+ --fx-ease: ease-in-out;
792
+ }
793
+
794
+ @utility dissolve {
795
+ --fx-anim: fx-blur-in;
796
+ --fx-anim-old: fx-blur-out;
797
+ --fx-duration: 0.7s;
798
+ --fx-ease: ease-in-out;
799
+ }
800
+
801
+ /* ============================================
802
+ Timing utilities
803
+ ============================================ */
804
+
805
+ @utility fx-duration-* {
806
+ --fx-duration-override: --value(--fx-duration-*, [*]);
807
+ }
808
+
809
+ @utility fx-delay-* {
810
+ --fx-delay: --value(--fx-delay-*, [*]);
811
+ }
812
+
813
+ @utility fx-steps-* {
814
+ --fx-ease-override: steps(--value(--fx-steps-*, integer, [integer]));
815
+ }