@casoon/atlas-styles 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1873 @@
1
+ /*!
2
+ * CASOON Atlas Animations - Complete Animation System for Tailwind v4
3
+ * Version: 0.0.1
4
+ * Repository: https://github.com/casoon/atlas
5
+ * Author: Jörn Seidel (joern.seidel@casoon.de)
6
+ * License: MIT
7
+ *
8
+ * Advanced animation system with 80+ animations and keyframes
9
+ * Part of CASOON Atlas UI effects library
10
+ *
11
+ * Usage: @import "@casoon/atlas-styles/animations";
12
+ * Package: @casoon/atlas-styles
13
+ */
14
+
15
+ /* Note: @import "tailwindcss"; should be added by the consumer */
16
+
17
+ /*!
18
+ * CASOON Atlas Animations - Complete Animation System for Tailwind v4
19
+ * TOTAL: 6 CSS FILES → Pure Tailwind v4 (80+ animations + advanced features)
20
+ *
21
+ * Features:
22
+ * ✅ Scroll-based animations with Intersection Observer support
23
+ * ✅ Advanced easing functions (spring, bounce, elastic)
24
+ * ✅ Extended stagger system (up to 12 items)
25
+ * ✅ Performance-optimized keyframes
26
+ * ✅ Modern CSS features (view-timeline, scroll-timeline)
27
+ * ✅ Comprehensive reduced motion support
28
+ * ✅ Touch-friendly micro-interactions
29
+ * ✅ SSR-safe, tree-shakeable, framework-agnostic
30
+ */
31
+
32
+ /* Note: @import "tailwindcss"; should be added by the consumer */
33
+
34
+ /* =========================================================
35
+ CONSOLIDATED ANIMATION THEME & TOKENS
36
+ Complete animation system with timing and easing
37
+ ========================================================= */
38
+ @theme {
39
+ /* === DURATION SYSTEM === */
40
+ --cs-anim-duration-xxs: 100ms;
41
+ --cs-anim-duration-xs: 150ms;
42
+ --cs-anim-duration-sm: 200ms;
43
+ --cs-anim-duration-md: 300ms;
44
+ --cs-anim-duration-lg: 500ms;
45
+ --cs-anim-duration-xl: 700ms;
46
+ --cs-anim-duration-2xl: 1000ms;
47
+ --cs-anim-duration-3xl: 1500ms;
48
+
49
+ /* === EASING SYSTEM === */
50
+ /* Standard Material Design easing */
51
+ --cs-anim-ease-standard: cubic-bezier(0.2, 0, 0, 1);
52
+ --cs-anim-ease-emphasized: cubic-bezier(0.3, 0, 0.8, 0.15);
53
+ --cs-anim-ease-decelerate: cubic-bezier(0.05, 0.7, 0.1, 1);
54
+ --cs-anim-ease-accelerate: cubic-bezier(0.3, 0, 1, 1);
55
+
56
+ /* Spring and elastic easing */
57
+ --cs-anim-ease-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275);
58
+ --cs-anim-ease-soft-spring: cubic-bezier(0.25, 0.46, 0.45, 0.94);
59
+ --cs-anim-ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
60
+ --cs-anim-ease-elastic: cubic-bezier(0.68, -0.6, 0.32, 1.6);
61
+
62
+ /* Advanced easing curves */
63
+ --cs-anim-ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);
64
+ --cs-anim-ease-crisp: cubic-bezier(0.4, 0, 0.6, 1);
65
+ --cs-anim-ease-overshoot: cubic-bezier(0.34, 1.56, 0.64, 1);
66
+
67
+ /* === REDUCED MOTION SYSTEM === */
68
+ --cs-anim-reduced-motion-duration: 1ms;
69
+ --cs-anim-reduced-motion-ease: ease;
70
+
71
+ /* === COMPONENT TOKENS === */
72
+ --cs-underline-w: 0%;
73
+ --cs-underline-h: 2px;
74
+ --cs-ripple-color: currentColor;
75
+ --cs-ripple-size: 0%;
76
+ --cs-chip-scale: 1;
77
+ --cs-badge-scale: 0.9;
78
+ --cs-toast-offset: 16px;
79
+ --cs-drawer-shift: 0px;
80
+ --cs-accordion-rows: 0fr;
81
+ --cs-skeleton-sheen: 120%;
82
+ --cs-parallax-offset: 0px;
83
+ --cs-scroll-progress: 0%;
84
+
85
+ /* === STAGGER SYSTEM === */
86
+ --cs-stagger-delay-50: 50ms;
87
+ --cs-stagger-delay-75: 75ms;
88
+ --cs-stagger-delay-100: 100ms;
89
+ --cs-stagger-delay-150: 150ms;
90
+ --cs-stagger-delay-200: 200ms;
91
+ }
92
+
93
+ /* =========================================================
94
+ CORE ANIMATION KEYFRAMES
95
+ High-performance keyframes optimized for modern browsers
96
+ ========================================================= */
97
+
98
+ /* === ENTRANCE ANIMATIONS === */
99
+ @keyframes csFadeIn, anim-fade-in {
100
+ 0% {
101
+ opacity: 0;
102
+ }
103
+ 100% {
104
+ opacity: 1;
105
+ }
106
+ }
107
+
108
+ @keyframes csFadeOut, anim-fade-out {
109
+ 0% {
110
+ opacity: 1;
111
+ }
112
+ 100% {
113
+ opacity: 0;
114
+ }
115
+ }
116
+
117
+ @keyframes csScaleIn, anim-scale-in {
118
+ 0% {
119
+ opacity: 0;
120
+ transform: scale(0.9);
121
+ }
122
+ 100% {
123
+ opacity: 1;
124
+ transform: scale(1);
125
+ }
126
+ }
127
+
128
+ @keyframes csScaleOut, anim-scale-out {
129
+ 0% {
130
+ opacity: 1;
131
+ transform: scale(1);
132
+ }
133
+ 100% {
134
+ opacity: 0;
135
+ transform: scale(0.9);
136
+ }
137
+ }
138
+
139
+ @keyframes csSlideUp, anim-slide-up {
140
+ 0% {
141
+ opacity: 0;
142
+ transform: translateY(20px);
143
+ }
144
+ 100% {
145
+ opacity: 1;
146
+ transform: translateY(0);
147
+ }
148
+ }
149
+
150
+ @keyframes csSlideDown, anim-slide-down {
151
+ 0% {
152
+ opacity: 0;
153
+ transform: translateY(-20px);
154
+ }
155
+ 100% {
156
+ opacity: 1;
157
+ transform: translateY(0);
158
+ }
159
+ }
160
+
161
+ @keyframes csSlideLeft, anim-slide-left {
162
+ 0% {
163
+ opacity: 0;
164
+ transform: translateX(20px);
165
+ }
166
+ 100% {
167
+ opacity: 1;
168
+ transform: translateX(0);
169
+ }
170
+ }
171
+
172
+ @keyframes csSlideRight, anim-slide-right {
173
+ 0% {
174
+ opacity: 0;
175
+ transform: translateX(-20px);
176
+ }
177
+ 100% {
178
+ opacity: 1;
179
+ transform: translateX(0);
180
+ }
181
+ }
182
+
183
+ @keyframes csBlurIn, anim-blur-in {
184
+ 0% {
185
+ opacity: 0;
186
+ filter: blur(4px);
187
+ }
188
+ 100% {
189
+ opacity: 1;
190
+ filter: blur(0);
191
+ }
192
+ }
193
+
194
+ @keyframes csBlurOut, anim-blur-out {
195
+ 0% {
196
+ opacity: 1;
197
+ filter: blur(0);
198
+ }
199
+ 100% {
200
+ opacity: 0;
201
+ filter: blur(4px);
202
+ }
203
+ }
204
+
205
+ @keyframes csRotateIn, anim-rotate-in {
206
+ 0% {
207
+ opacity: 0;
208
+ transform: rotate(-5deg);
209
+ }
210
+ 100% {
211
+ opacity: 1;
212
+ transform: rotate(0);
213
+ }
214
+ }
215
+
216
+ @keyframes csFlipIn {
217
+ 0% {
218
+ opacity: 0;
219
+ transform: rotateY(-180deg);
220
+ }
221
+ 100% {
222
+ opacity: 1;
223
+ transform: rotateY(0);
224
+ }
225
+ }
226
+
227
+ @keyframes csZoomIn {
228
+ 0% {
229
+ opacity: 0;
230
+ transform: scale(0.5);
231
+ }
232
+ 100% {
233
+ opacity: 1;
234
+ transform: scale(1);
235
+ }
236
+ }
237
+
238
+ @keyframes csZoomOut {
239
+ 0% {
240
+ opacity: 1;
241
+ transform: scale(1);
242
+ }
243
+ 100% {
244
+ opacity: 0;
245
+ transform: scale(0.5);
246
+ }
247
+ }
248
+
249
+ /* === CONTINUOUS ANIMATIONS === */
250
+ @keyframes csRotate, anim-rotate {
251
+ 0% {
252
+ transform: rotate(0deg);
253
+ }
254
+ 100% {
255
+ transform: rotate(360deg);
256
+ }
257
+ }
258
+
259
+ @keyframes csPulse, anim-pulse {
260
+ 0%,
261
+ 100% {
262
+ opacity: 1;
263
+ }
264
+ 50% {
265
+ opacity: 0.5;
266
+ }
267
+ }
268
+
269
+ @keyframes csBounce, anim-bounce {
270
+ 0%,
271
+ 100% {
272
+ transform: translateY(0);
273
+ }
274
+ 50% {
275
+ transform: translateY(-25%);
276
+ }
277
+ }
278
+
279
+ @keyframes csWiggle, anim-wiggle {
280
+ 0%,
281
+ 100% {
282
+ transform: rotate(0deg);
283
+ }
284
+ 25% {
285
+ transform: rotate(-3deg);
286
+ }
287
+ 75% {
288
+ transform: rotate(3deg);
289
+ }
290
+ }
291
+
292
+ @keyframes csShake {
293
+ 0%,
294
+ 100% {
295
+ transform: translateX(0);
296
+ }
297
+ 25% {
298
+ transform: translateX(-5px);
299
+ }
300
+ 75% {
301
+ transform: translateX(5px);
302
+ }
303
+ }
304
+
305
+ @keyframes csHeartbeat {
306
+ 0%,
307
+ 100% {
308
+ transform: scale(1);
309
+ }
310
+ 14%,
311
+ 28% {
312
+ transform: scale(1.15);
313
+ }
314
+ }
315
+
316
+ @keyframes csRubberBand {
317
+ 0%,
318
+ 100% {
319
+ transform: scaleX(1);
320
+ }
321
+ 30% {
322
+ transform: scaleX(1.25) scaleY(0.75);
323
+ }
324
+ 40% {
325
+ transform: scaleX(0.75) scaleY(1.25);
326
+ }
327
+ 60% {
328
+ transform: scaleX(1.15) scaleY(0.85);
329
+ }
330
+ }
331
+
332
+ /* === 3D ANIMATIONS === */
333
+ @keyframes csReveal3DUp {
334
+ 0% {
335
+ opacity: 0;
336
+ transform: rotateX(-90deg);
337
+ }
338
+ 100% {
339
+ opacity: 1;
340
+ transform: rotateX(0);
341
+ }
342
+ }
343
+
344
+ @keyframes csReveal3DRight {
345
+ 0% {
346
+ opacity: 0;
347
+ transform: rotateY(90deg);
348
+ }
349
+ 100% {
350
+ opacity: 1;
351
+ transform: rotateY(0);
352
+ }
353
+ }
354
+
355
+ @keyframes csReveal3DLeft {
356
+ 0% {
357
+ opacity: 0;
358
+ transform: rotateY(-90deg);
359
+ }
360
+ 100% {
361
+ opacity: 1;
362
+ transform: rotateY(0);
363
+ }
364
+ }
365
+
366
+ @keyframes csFlip3DX {
367
+ 0% {
368
+ transform: rotateX(0);
369
+ }
370
+ 100% {
371
+ transform: rotateX(360deg);
372
+ }
373
+ }
374
+
375
+ @keyframes csFlip3DY {
376
+ 0% {
377
+ transform: rotateY(0);
378
+ }
379
+ 100% {
380
+ transform: rotateY(360deg);
381
+ }
382
+ }
383
+
384
+ /* === SCROLL & PARALLAX ANIMATIONS === */
385
+ @keyframes csMarqueeLeft {
386
+ 0% {
387
+ transform: translateX(100%);
388
+ }
389
+ 100% {
390
+ transform: translateX(-100%);
391
+ }
392
+ }
393
+
394
+ @keyframes csMarqueeRight {
395
+ 0% {
396
+ transform: translateX(-100%);
397
+ }
398
+ 100% {
399
+ transform: translateX(100%);
400
+ }
401
+ }
402
+
403
+ @keyframes csParallaxY {
404
+ 0% {
405
+ transform: translateY(-10px);
406
+ }
407
+ 100% {
408
+ transform: translateY(10px);
409
+ }
410
+ }
411
+
412
+ @keyframes csParallaxX {
413
+ 0% {
414
+ transform: translateX(-10px);
415
+ }
416
+ 100% {
417
+ transform: translateX(10px);
418
+ }
419
+ }
420
+
421
+ @keyframes csFloat {
422
+ 0%,
423
+ 100% {
424
+ transform: translateY(0);
425
+ }
426
+ 50% {
427
+ transform: translateY(-8px);
428
+ }
429
+ }
430
+
431
+ @keyframes csSway {
432
+ 0%,
433
+ 100% {
434
+ transform: rotate(0deg);
435
+ }
436
+ 50% {
437
+ transform: rotate(1deg);
438
+ }
439
+ }
440
+
441
+ /* === LOADING & PROGRESS ANIMATIONS === */
442
+ @keyframes csProgressGrow {
443
+ 0% {
444
+ width: 0%;
445
+ }
446
+ 100% {
447
+ width: 100%;
448
+ }
449
+ }
450
+
451
+ @keyframes csSkeletonShimmer {
452
+ 0% {
453
+ background-position: 200% 0;
454
+ }
455
+ 100% {
456
+ background-position: -200% 0;
457
+ }
458
+ }
459
+
460
+ @keyframes csDotLoader {
461
+ 0%,
462
+ 80%,
463
+ 100% {
464
+ transform: scale(0);
465
+ }
466
+ 40% {
467
+ transform: scale(1);
468
+ }
469
+ }
470
+
471
+ @keyframes csRippleSpread {
472
+ 0% {
473
+ transform: scale(0);
474
+ opacity: 1;
475
+ }
476
+ 100% {
477
+ transform: scale(4);
478
+ opacity: 0;
479
+ }
480
+ }
481
+
482
+ /* === COMPONENT-SPECIFIC ANIMATIONS === */
483
+ @keyframes csDropdownIn {
484
+ 0% {
485
+ opacity: 0;
486
+ transform: scale(0.95) translateY(-5px);
487
+ }
488
+ 100% {
489
+ opacity: 1;
490
+ transform: scale(1) translateY(0);
491
+ }
492
+ }
493
+
494
+ @keyframes csDropdownOut {
495
+ 0% {
496
+ opacity: 1;
497
+ transform: scale(1) translateY(0);
498
+ }
499
+ 100% {
500
+ opacity: 0;
501
+ transform: scale(0.95) translateY(-5px);
502
+ }
503
+ }
504
+
505
+ @keyframes csTooltipIn {
506
+ 0% {
507
+ opacity: 0;
508
+ transform: scale(0.8);
509
+ }
510
+ 100% {
511
+ opacity: 1;
512
+ transform: scale(1);
513
+ }
514
+ }
515
+
516
+ @keyframes csTooltipOut {
517
+ 0% {
518
+ opacity: 1;
519
+ transform: scale(1);
520
+ }
521
+ 100% {
522
+ opacity: 0;
523
+ transform: scale(0.8);
524
+ }
525
+ }
526
+
527
+ @keyframes csModalIn {
528
+ 0% {
529
+ opacity: 0;
530
+ transform: scale(0.9);
531
+ }
532
+ 100% {
533
+ opacity: 1;
534
+ transform: scale(1);
535
+ }
536
+ }
537
+
538
+ @keyframes csModalOut {
539
+ 0% {
540
+ opacity: 1;
541
+ transform: scale(1);
542
+ }
543
+ 100% {
544
+ opacity: 0;
545
+ transform: scale(0.9);
546
+ }
547
+ }
548
+
549
+ @keyframes csBackdropIn {
550
+ 0% {
551
+ opacity: 0;
552
+ }
553
+ 100% {
554
+ opacity: 1;
555
+ }
556
+ }
557
+
558
+ @keyframes csBackdropOut {
559
+ 0% {
560
+ opacity: 1;
561
+ }
562
+ 100% {
563
+ opacity: 0;
564
+ }
565
+ }
566
+
567
+ @keyframes csDrawerInLeft {
568
+ 0% {
569
+ transform: translateX(-100%);
570
+ }
571
+ 100% {
572
+ transform: translateX(0);
573
+ }
574
+ }
575
+
576
+ @keyframes csDrawerOutLeft {
577
+ 0% {
578
+ transform: translateX(0);
579
+ }
580
+ 100% {
581
+ transform: translateX(-100%);
582
+ }
583
+ }
584
+
585
+ @keyframes csDrawerInRight {
586
+ 0% {
587
+ transform: translateX(100%);
588
+ }
589
+ 100% {
590
+ transform: translateX(0);
591
+ }
592
+ }
593
+
594
+ @keyframes csDrawerOutRight {
595
+ 0% {
596
+ transform: translateX(0);
597
+ }
598
+ 100% {
599
+ transform: translateX(100%);
600
+ }
601
+ }
602
+
603
+ @keyframes csDrawerInTop {
604
+ 0% {
605
+ transform: translateY(-100%);
606
+ }
607
+ 100% {
608
+ transform: translateY(0);
609
+ }
610
+ }
611
+
612
+ @keyframes csDrawerOutTop {
613
+ 0% {
614
+ transform: translateY(0);
615
+ }
616
+ 100% {
617
+ transform: translateY(-100%);
618
+ }
619
+ }
620
+
621
+ @keyframes csDrawerInBottom {
622
+ 0% {
623
+ transform: translateY(100%);
624
+ }
625
+ 100% {
626
+ transform: translateY(0);
627
+ }
628
+ }
629
+
630
+ @keyframes csDrawerOutBottom {
631
+ 0% {
632
+ transform: translateY(0);
633
+ }
634
+ 100% {
635
+ transform: translateY(100%);
636
+ }
637
+ }
638
+
639
+ @keyframes csAccordionIn {
640
+ 0% {
641
+ height: 0;
642
+ opacity: 0;
643
+ }
644
+ 100% {
645
+ height: auto;
646
+ opacity: 1;
647
+ }
648
+ }
649
+
650
+ @keyframes csAccordionOut {
651
+ 0% {
652
+ height: auto;
653
+ opacity: 1;
654
+ }
655
+ 100% {
656
+ height: 0;
657
+ opacity: 0;
658
+ }
659
+ }
660
+
661
+ @keyframes csToastIn {
662
+ 0% {
663
+ opacity: 0;
664
+ transform: translateX(100%);
665
+ }
666
+ 100% {
667
+ opacity: 1;
668
+ transform: translateX(0);
669
+ }
670
+ }
671
+
672
+ @keyframes csToastOut {
673
+ 0% {
674
+ opacity: 1;
675
+ transform: translateX(0);
676
+ }
677
+ 100% {
678
+ opacity: 0;
679
+ transform: translateX(100%);
680
+ }
681
+ }
682
+
683
+ @keyframes csChipIn {
684
+ 0% {
685
+ opacity: 0;
686
+ transform: scale(0.8);
687
+ }
688
+ 100% {
689
+ opacity: 1;
690
+ transform: scale(1);
691
+ }
692
+ }
693
+
694
+ @keyframes csChipOut {
695
+ 0% {
696
+ opacity: 1;
697
+ transform: scale(1);
698
+ }
699
+ 100% {
700
+ opacity: 0;
701
+ transform: scale(0.8);
702
+ }
703
+ }
704
+
705
+ @keyframes csBadgePop {
706
+ 0% {
707
+ transform: scale(0.8);
708
+ }
709
+ 50% {
710
+ transform: scale(1.1);
711
+ }
712
+ 100% {
713
+ transform: scale(1);
714
+ }
715
+ }
716
+
717
+ @keyframes csSpinner {
718
+ 0% {
719
+ transform: rotate(0deg);
720
+ }
721
+ 100% {
722
+ transform: rotate(360deg);
723
+ }
724
+ }
725
+
726
+ @keyframes csProgressIndeterminate {
727
+ 0% {
728
+ transform: translateX(-100%);
729
+ }
730
+ 100% {
731
+ transform: translateX(100%);
732
+ }
733
+ }
734
+
735
+ @keyframes csCarouselSlide {
736
+ 0% {
737
+ transform: translateX(100%);
738
+ }
739
+ 100% {
740
+ transform: translateX(0);
741
+ }
742
+ }
743
+
744
+ @keyframes csCarouselFade {
745
+ 0% {
746
+ opacity: 0;
747
+ }
748
+ 100% {
749
+ opacity: 1;
750
+ }
751
+ }
752
+
753
+ /* === MICRO-INTERACTION ANIMATIONS === */
754
+ @keyframes csBtnPress {
755
+ 0% {
756
+ transform: scale(1);
757
+ }
758
+ 50% {
759
+ transform: scale(0.975);
760
+ }
761
+ 100% {
762
+ transform: scale(1);
763
+ }
764
+ }
765
+
766
+ @keyframes csTabSlide {
767
+ 0% {
768
+ transform: translateX(-100%);
769
+ }
770
+ 100% {
771
+ transform: translateX(0);
772
+ }
773
+ }
774
+
775
+ @keyframes csNotificationSlide {
776
+ 0% {
777
+ transform: translateX(100%);
778
+ }
779
+ 100% {
780
+ transform: translateX(0);
781
+ }
782
+ }
783
+
784
+ /* =========================================================
785
+ CORE ANIMATION ENGINE
786
+ Flexible animation system with CSS custom properties
787
+ ========================================================= */
788
+
789
+ @utility cs-anim {
790
+ animation-duration: var(--cs-anim-duration, var(--cs-anim-duration-md));
791
+ animation-timing-function: var(--cs-anim-ease, var(--cs-anim-ease-standard));
792
+ animation-iteration-count: var(--cs-anim-count, 1);
793
+ animation-direction: var(--cs-anim-direction, normal);
794
+ animation-fill-mode: var(--cs-anim-fill, both);
795
+ animation-delay: var(--cs-anim-delay, 0ms);
796
+ }
797
+
798
+ /* =========================================================
799
+ DURATION UTILITIES
800
+ Complete timing scale for fine-tuned control
801
+ ========================================================= */
802
+
803
+ @utility cs-anim-xxs {
804
+ --cs-anim-duration: var(--cs-anim-duration-xxs);
805
+ }
806
+ @utility cs-anim-xs {
807
+ --cs-anim-duration: var(--cs-anim-duration-xs);
808
+ }
809
+ @utility cs-anim-sm {
810
+ --cs-anim-duration: var(--cs-anim-duration-sm);
811
+ }
812
+ @utility cs-anim-md {
813
+ --cs-anim-duration: var(--cs-anim-duration-md);
814
+ }
815
+ @utility cs-anim-lg {
816
+ --cs-anim-duration: var(--cs-anim-duration-lg);
817
+ }
818
+ @utility cs-anim-xl {
819
+ --cs-anim-duration: var(--cs-anim-duration-xl);
820
+ }
821
+ @utility cs-anim-2xl {
822
+ --cs-anim-duration: var(--cs-anim-duration-2xl);
823
+ }
824
+ @utility cs-anim-3xl {
825
+ --cs-anim-duration: var(--cs-anim-duration-3xl);
826
+ }
827
+
828
+ /* =========================================================
829
+ EASING UTILITIES
830
+ Advanced easing functions for natural motion
831
+ ========================================================= */
832
+
833
+ @utility cs-ease-standard {
834
+ --cs-anim-ease: var(--cs-anim-ease-standard);
835
+ }
836
+ @utility cs-ease-emphasized {
837
+ --cs-anim-ease: var(--cs-anim-ease-emphasized);
838
+ }
839
+ @utility cs-ease-decelerate {
840
+ --cs-anim-ease: var(--cs-anim-ease-decelerate);
841
+ }
842
+ @utility cs-ease-accelerate {
843
+ --cs-anim-ease: var(--cs-anim-ease-accelerate);
844
+ }
845
+ @utility cs-ease-spring {
846
+ --cs-anim-ease: var(--cs-anim-ease-spring);
847
+ }
848
+ @utility cs-ease-soft-spring {
849
+ --cs-anim-ease: var(--cs-anim-ease-soft-spring);
850
+ }
851
+ @utility cs-ease-bounce {
852
+ --cs-anim-ease: var(--cs-anim-ease-bounce);
853
+ }
854
+ @utility cs-ease-elastic {
855
+ --cs-anim-ease: var(--cs-anim-ease-elastic);
856
+ }
857
+ @utility cs-ease-smooth {
858
+ --cs-anim-ease: var(--cs-anim-ease-smooth);
859
+ }
860
+ @utility cs-ease-crisp {
861
+ --cs-anim-ease: var(--cs-anim-ease-crisp);
862
+ }
863
+ @utility cs-ease-overshoot {
864
+ --cs-anim-ease: var(--cs-anim-ease-overshoot);
865
+ }
866
+
867
+ /* =========================================================
868
+ DELAY UTILITIES
869
+ Precise timing control for orchestration
870
+ ========================================================= */
871
+
872
+ @utility cs-delay-0 {
873
+ --cs-anim-delay: 0ms;
874
+ }
875
+ @utility cs-delay-50 {
876
+ --cs-anim-delay: 50ms;
877
+ }
878
+ @utility cs-delay-75 {
879
+ --cs-anim-delay: 75ms;
880
+ }
881
+ @utility cs-delay-100 {
882
+ --cs-anim-delay: 100ms;
883
+ }
884
+ @utility cs-delay-150 {
885
+ --cs-anim-delay: 150ms;
886
+ }
887
+ @utility cs-delay-200 {
888
+ --cs-anim-delay: 200ms;
889
+ }
890
+ @utility cs-delay-300 {
891
+ --cs-anim-delay: 300ms;
892
+ }
893
+ @utility cs-delay-500 {
894
+ --cs-anim-delay: 500ms;
895
+ }
896
+ @utility cs-delay-700 {
897
+ --cs-anim-delay: 700ms;
898
+ }
899
+ @utility cs-delay-1000 {
900
+ --cs-anim-delay: 1000ms;
901
+ }
902
+ @utility cs-delay-1500 {
903
+ --cs-anim-delay: 1500ms;
904
+ }
905
+
906
+ /* =========================================================
907
+ ANIMATION CONTROL UTILITIES
908
+ Direction, iteration, and fill mode controls
909
+ ========================================================= */
910
+
911
+ @utility cs-anim-infinite {
912
+ --cs-anim-count: infinite;
913
+ }
914
+ @utility cs-anim-reverse {
915
+ --cs-anim-direction: reverse;
916
+ }
917
+ @utility cs-anim-alternate {
918
+ --cs-anim-direction: alternate;
919
+ }
920
+ @utility cs-anim-alternate-reverse {
921
+ --cs-anim-direction: alternate-reverse;
922
+ }
923
+ @utility cs-anim-both {
924
+ --cs-anim-fill: both;
925
+ }
926
+ @utility cs-anim-forwards {
927
+ --cs-anim-fill: forwards;
928
+ }
929
+ @utility cs-anim-backwards {
930
+ --cs-anim-fill: backwards;
931
+ }
932
+ @utility cs-anim-none {
933
+ --cs-anim-fill: none;
934
+ }
935
+
936
+ /* Iteration count utilities */
937
+ @utility cs-anim-once {
938
+ --cs-anim-count: 1;
939
+ }
940
+ @utility cs-anim-twice {
941
+ --cs-anim-count: 2;
942
+ }
943
+ @utility cs-anim-thrice {
944
+ --cs-anim-count: 3;
945
+ }
946
+
947
+ /* =========================================================
948
+ ENTRANCE ANIMATION UTILITIES
949
+ Complete set of entrance animations
950
+ ========================================================= */
951
+
952
+ @utility cs-fade-in {
953
+ animation-name: csFadeIn;
954
+ }
955
+ @utility cs-fade-out {
956
+ animation-name: csFadeOut;
957
+ }
958
+ @utility cs-scale-in {
959
+ animation-name: csScaleIn;
960
+ }
961
+ @utility cs-scale-out {
962
+ animation-name: csScaleOut;
963
+ }
964
+ @utility cs-zoom-in {
965
+ animation-name: csZoomIn;
966
+ }
967
+ @utility cs-zoom-out {
968
+ animation-name: csZoomOut;
969
+ }
970
+ @utility cs-slide-up {
971
+ animation-name: csSlideUp;
972
+ }
973
+ @utility cs-slide-down {
974
+ animation-name: csSlideDown;
975
+ }
976
+ @utility cs-slide-left {
977
+ animation-name: csSlideLeft;
978
+ }
979
+ @utility cs-slide-right {
980
+ animation-name: csSlideRight;
981
+ }
982
+ @utility cs-blur-in {
983
+ animation-name: csBlurIn;
984
+ }
985
+ @utility cs-blur-out {
986
+ animation-name: csBlurOut;
987
+ }
988
+ @utility cs-rotate-in {
989
+ animation-name: csRotateIn;
990
+ }
991
+ @utility cs-flip-in {
992
+ animation-name: csFlipIn;
993
+ }
994
+
995
+ /* v0.8.0-kompatible Aliase */
996
+ @utility cs-anim {
997
+ animation-duration: var(--cs-anim-duration, var(--cs-anim-duration-md));
998
+ animation-timing-function: var(--cs-anim-ease, var(--cs-anim-ease-standard));
999
+ animation-iteration-count: 1;
1000
+ animation-direction: var(--cs-anim-direction, normal);
1001
+ animation-fill-mode: var(--cs-anim-fill, both);
1002
+ animation-delay: var(--cs-anim-delay, 0ms);
1003
+ }
1004
+
1005
+ /* Additional utility classes that match v0.8.0 */
1006
+ @utility cs-reveal-3d-up {
1007
+ animation-name: csReveal3DUp;
1008
+ }
1009
+ @utility cs-reveal-3d-right {
1010
+ animation-name: csReveal3DRight;
1011
+ }
1012
+ @utility cs-marquee {
1013
+ animation-name: csMarqueeLeft;
1014
+ animation-timing-function: linear;
1015
+ animation-iteration-count: infinite;
1016
+ }
1017
+ @utility cs-parallax-y {
1018
+ animation-name: csParallaxY;
1019
+ animation-direction: alternate;
1020
+ animation-iteration-count: infinite;
1021
+ }
1022
+
1023
+ /* =========================================================
1024
+ CONTINUOUS ANIMATION UTILITIES
1025
+ Looping and infinite animations
1026
+ ========================================================= */
1027
+
1028
+ @utility cs-rotate {
1029
+ animation-name: csRotate;
1030
+ animation-duration: var(--cs-anim-duration-lg);
1031
+ animation-iteration-count: infinite;
1032
+ animation-timing-function: linear;
1033
+ }
1034
+
1035
+ @utility cs-pulse {
1036
+ animation-name: csPulse;
1037
+ animation-duration: var(--cs-anim-duration-lg);
1038
+ animation-iteration-count: infinite;
1039
+ }
1040
+
1041
+ @utility cs-bounce {
1042
+ animation-name: csBounce;
1043
+ animation-duration: var(--cs-anim-duration-lg);
1044
+ animation-iteration-count: infinite;
1045
+ }
1046
+
1047
+ @utility cs-wiggle {
1048
+ animation-name: csWiggle;
1049
+ }
1050
+ @utility cs-shake {
1051
+ animation-name: csShake;
1052
+ }
1053
+ @utility cs-heartbeat {
1054
+ animation-name: csHeartbeat;
1055
+ animation-duration: var(--cs-anim-duration-lg);
1056
+ animation-iteration-count: infinite;
1057
+ }
1058
+
1059
+ @utility cs-rubber-band {
1060
+ animation-name: csRubberBand;
1061
+ }
1062
+
1063
+ /* =========================================================
1064
+ 3D ANIMATION UTILITIES
1065
+ Perspective and 3D transform animations
1066
+ ========================================================= */
1067
+
1068
+ @utility cs-reveal-3d-up {
1069
+ animation-name: csReveal3DUp;
1070
+ }
1071
+ @utility cs-reveal-3d-right {
1072
+ animation-name: csReveal3DRight;
1073
+ }
1074
+ @utility cs-reveal-3d-left {
1075
+ animation-name: csReveal3DLeft;
1076
+ }
1077
+ @utility cs-flip-3d-x {
1078
+ animation-name: csFlip3DX;
1079
+ animation-duration: var(--cs-anim-duration-lg);
1080
+ }
1081
+
1082
+ @utility cs-flip-3d-y {
1083
+ animation-name: csFlip3DY;
1084
+ animation-duration: var(--cs-anim-duration-lg);
1085
+ }
1086
+
1087
+ /* =========================================================
1088
+ SCROLL & PARALLAX UTILITIES
1089
+ Scroll-based and parallax animations
1090
+ ========================================================= */
1091
+
1092
+ @utility cs-marquee-left {
1093
+ animation-name: csMarqueeLeft;
1094
+ animation-duration: 10s;
1095
+ animation-iteration-count: infinite;
1096
+ animation-timing-function: linear;
1097
+ }
1098
+
1099
+ @utility cs-marquee-right {
1100
+ animation-name: csMarqueeRight;
1101
+ animation-duration: 10s;
1102
+ animation-iteration-count: infinite;
1103
+ animation-timing-function: linear;
1104
+ }
1105
+
1106
+ @utility cs-parallax-y {
1107
+ animation-name: csParallaxY;
1108
+ animation-duration: 6s;
1109
+ animation-direction: alternate;
1110
+ animation-iteration-count: infinite;
1111
+ }
1112
+
1113
+ @utility cs-parallax-x {
1114
+ animation-name: csParallaxX;
1115
+ animation-duration: 6s;
1116
+ animation-direction: alternate;
1117
+ animation-iteration-count: infinite;
1118
+ }
1119
+
1120
+ @utility cs-float {
1121
+ animation-name: csFloat;
1122
+ animation-duration: 3s;
1123
+ animation-iteration-count: infinite;
1124
+ }
1125
+
1126
+ @utility cs-sway {
1127
+ animation-name: csSway;
1128
+ animation-duration: 4s;
1129
+ animation-iteration-count: infinite;
1130
+ }
1131
+
1132
+ /* =========================================================
1133
+ COMPONENT ANIMATION UTILITIES
1134
+ Ready-to-use component animations
1135
+ ========================================================= */
1136
+
1137
+ /* Button Press Animation */
1138
+ @utility cs-btn-press {
1139
+ animation-name: csBtnPress;
1140
+ animation-duration: var(--cs-anim-duration-xxs);
1141
+ animation-timing-function: var(--cs-anim-ease-soft-spring);
1142
+ }
1143
+
1144
+ /* Dropdown Animations */
1145
+ @utility cs-dropdown-in {
1146
+ animation-name: csDropdownIn;
1147
+ animation-duration: var(--cs-anim-duration-sm);
1148
+ animation-timing-function: var(--cs-anim-ease-spring);
1149
+ }
1150
+
1151
+ @utility cs-dropdown-out {
1152
+ animation-name: csDropdownOut;
1153
+ animation-duration: var(--cs-anim-duration-xs);
1154
+ animation-timing-function: var(--cs-anim-ease-accelerate);
1155
+ }
1156
+
1157
+ /* Tooltip Animations */
1158
+ @utility cs-tooltip-in {
1159
+ animation-name: csTooltipIn;
1160
+ animation-duration: var(--cs-anim-duration-xs);
1161
+ animation-timing-function: var(--cs-anim-ease-spring);
1162
+ }
1163
+
1164
+ @utility cs-tooltip-out {
1165
+ animation-name: csTooltipOut;
1166
+ animation-duration: var(--cs-anim-duration-xxs);
1167
+ animation-timing-function: var(--cs-anim-ease-accelerate);
1168
+ }
1169
+
1170
+ /* Modal Animations */
1171
+ @utility cs-modal-in {
1172
+ animation-name: csModalIn;
1173
+ animation-duration: var(--cs-anim-duration-md);
1174
+ animation-timing-function: var(--cs-anim-ease-spring);
1175
+ }
1176
+
1177
+ @utility cs-modal-out {
1178
+ animation-name: csModalOut;
1179
+ animation-duration: var(--cs-anim-duration-sm);
1180
+ animation-timing-function: var(--cs-anim-ease-accelerate);
1181
+ }
1182
+
1183
+ /* Backdrop Animations */
1184
+ @utility cs-backdrop-in {
1185
+ animation-name: csBackdropIn;
1186
+ animation-duration: var(--cs-anim-duration-md);
1187
+ }
1188
+
1189
+ @utility cs-backdrop-out {
1190
+ animation-name: csBackdropOut;
1191
+ animation-duration: var(--cs-anim-duration-sm);
1192
+ }
1193
+
1194
+ /* Drawer Animations */
1195
+ @utility cs-drawer-in-left {
1196
+ animation-name: csDrawerInLeft;
1197
+ animation-duration: var(--cs-anim-duration-md);
1198
+ animation-timing-function: var(--cs-anim-ease-spring);
1199
+ }
1200
+
1201
+ @utility cs-drawer-out-left {
1202
+ animation-name: csDrawerOutLeft;
1203
+ animation-duration: var(--cs-anim-duration-sm);
1204
+ animation-timing-function: var(--cs-anim-ease-accelerate);
1205
+ }
1206
+
1207
+ @utility cs-drawer-in-right {
1208
+ animation-name: csDrawerInRight;
1209
+ animation-duration: var(--cs-anim-duration-md);
1210
+ animation-timing-function: var(--cs-anim-ease-spring);
1211
+ }
1212
+
1213
+ @utility cs-drawer-out-right {
1214
+ animation-name: csDrawerOutRight;
1215
+ animation-duration: var(--cs-anim-duration-sm);
1216
+ animation-timing-function: var(--cs-anim-ease-accelerate);
1217
+ }
1218
+
1219
+ @utility cs-drawer-in-top {
1220
+ animation-name: csDrawerInTop;
1221
+ animation-duration: var(--cs-anim-duration-md);
1222
+ animation-timing-function: var(--cs-anim-ease-spring);
1223
+ }
1224
+
1225
+ @utility cs-drawer-out-top {
1226
+ animation-name: csDrawerOutTop;
1227
+ animation-duration: var(--cs-anim-duration-sm);
1228
+ animation-timing-function: var(--cs-anim-ease-accelerate);
1229
+ }
1230
+
1231
+ @utility cs-drawer-in-bottom {
1232
+ animation-name: csDrawerInBottom;
1233
+ animation-duration: var(--cs-anim-duration-md);
1234
+ animation-timing-function: var(--cs-anim-ease-spring);
1235
+ }
1236
+
1237
+ @utility cs-drawer-out-bottom {
1238
+ animation-name: csDrawerOutBottom;
1239
+ animation-duration: var(--cs-anim-duration-sm);
1240
+ animation-timing-function: var(--cs-anim-ease-accelerate);
1241
+ }
1242
+
1243
+ /* Accordion Animations */
1244
+ @utility cs-accordion-in {
1245
+ animation-name: csAccordionIn;
1246
+ animation-duration: var(--cs-anim-duration-md);
1247
+ animation-timing-function: var(--cs-anim-ease-decelerate);
1248
+ }
1249
+
1250
+ @utility cs-accordion-out {
1251
+ animation-name: csAccordionOut;
1252
+ animation-duration: var(--cs-anim-duration-sm);
1253
+ animation-timing-function: var(--cs-anim-ease-accelerate);
1254
+ }
1255
+
1256
+ @utility cs-accordion-fade {
1257
+ animation-name: csFadeIn;
1258
+ animation-duration: var(--cs-anim-duration-md);
1259
+ animation-timing-function: var(--cs-anim-ease-decelerate);
1260
+ }
1261
+
1262
+ /* Toast Animations */
1263
+ @utility cs-toast-in {
1264
+ animation-name: csToastIn;
1265
+ animation-duration: var(--cs-anim-duration-md);
1266
+ animation-timing-function: var(--cs-anim-ease-spring);
1267
+ }
1268
+
1269
+ @utility cs-toast-out {
1270
+ animation-name: csToastOut;
1271
+ animation-duration: var(--cs-anim-duration-sm);
1272
+ animation-timing-function: var(--cs-anim-ease-accelerate);
1273
+ }
1274
+
1275
+ /* Chip Animations */
1276
+ @utility cs-chip-in {
1277
+ animation-name: csChipIn;
1278
+ animation-duration: var(--cs-anim-duration-sm);
1279
+ animation-timing-function: var(--cs-anim-ease-spring);
1280
+ }
1281
+
1282
+ @utility cs-chip-out {
1283
+ animation-name: csChipOut;
1284
+ animation-duration: var(--cs-anim-duration-xs);
1285
+ animation-timing-function: var(--cs-anim-ease-accelerate);
1286
+ }
1287
+
1288
+ /* Badge Animation */
1289
+ @utility cs-badge-pop {
1290
+ animation-name: csBadgePop;
1291
+ animation-duration: var(--cs-anim-duration-sm);
1292
+ animation-timing-function: var(--cs-anim-ease-bounce);
1293
+ }
1294
+
1295
+ /* Spinner Animation */
1296
+ @utility cs-spinner {
1297
+ animation-name: csSpinner;
1298
+ animation-duration: 1s;
1299
+ animation-iteration-count: infinite;
1300
+ animation-timing-function: linear;
1301
+ }
1302
+
1303
+ /* Progress Animations */
1304
+ @utility cs-progress-indeterminate {
1305
+ animation-name: csProgressIndeterminate;
1306
+ animation-duration: 1.5s;
1307
+ animation-iteration-count: infinite;
1308
+ animation-timing-function: linear;
1309
+ }
1310
+
1311
+ /* Carousel Animations */
1312
+ @utility cs-carousel-slide {
1313
+ animation-name: csCarouselSlide;
1314
+ animation-duration: var(--cs-anim-duration-lg);
1315
+ animation-timing-function: var(--cs-anim-ease-decelerate);
1316
+ }
1317
+
1318
+ @utility cs-carousel-fade {
1319
+ animation-name: csCarouselFade;
1320
+ animation-duration: var(--cs-anim-duration-lg);
1321
+ animation-timing-function: var(--cs-anim-ease-standard);
1322
+ }
1323
+
1324
+ /* Ripple Effect */
1325
+ @utility cs-btn-ripple {
1326
+ position: relative;
1327
+ overflow: hidden;
1328
+
1329
+ &::after {
1330
+ content: '';
1331
+ position: absolute;
1332
+ top: 50%;
1333
+ left: 50%;
1334
+ width: 0;
1335
+ height: 0;
1336
+ border-radius: 50%;
1337
+ background: color-mix(
1338
+ in srgb,
1339
+ var(--cs-ripple-color, currentColor) 20%,
1340
+ transparent
1341
+ );
1342
+ transform: translate(-50%, -50%);
1343
+ animation: csRippleSpread 0.6s ease-out;
1344
+ }
1345
+ }
1346
+
1347
+ /* Navigation Underline */
1348
+ @utility cs-nav-underline-in {
1349
+ position: relative;
1350
+
1351
+ &::after {
1352
+ content: '';
1353
+ position: absolute;
1354
+ left: 50%;
1355
+ bottom: -2px;
1356
+ width: var(--cs-underline-w, 0%);
1357
+ height: var(--cs-underline-h, 2px);
1358
+ background: currentColor;
1359
+ border-radius: 999px;
1360
+ transform: translateX(-50%);
1361
+ transition: width var(--cs-anim-duration-sm) var(--cs-anim-ease-decelerate);
1362
+ }
1363
+
1364
+ &:hover::after {
1365
+ --cs-underline-w: 100%;
1366
+ }
1367
+ }
1368
+
1369
+ /* Tab Slide Animation */
1370
+ @utility cs-tab-slide {
1371
+ animation-name: csTabSlide;
1372
+ animation-duration: var(--cs-anim-duration-sm);
1373
+ }
1374
+
1375
+ /* Notification Slide */
1376
+ @utility cs-notification-slide {
1377
+ animation-name: csNotificationSlide;
1378
+ animation-duration: var(--cs-anim-duration-md);
1379
+ animation-timing-function: var(--cs-anim-ease-spring);
1380
+ }
1381
+
1382
+ /* =========================================================
1383
+ LOADING & PROGRESS UTILITIES
1384
+ Loading states and progress indicators
1385
+ ========================================================= */
1386
+
1387
+ @utility cs-skeleton-shimmer {
1388
+ position: relative;
1389
+ overflow: hidden;
1390
+ background: linear-gradient(
1391
+ 90deg,
1392
+ transparent,
1393
+ color-mix(in srgb, currentColor 10%, transparent),
1394
+ transparent
1395
+ );
1396
+ background-size: 200% 100%;
1397
+ animation: csSkeletonShimmer 1.5s infinite;
1398
+ }
1399
+
1400
+ @utility cs-progress-grow {
1401
+ animation-name: csProgressGrow;
1402
+ animation-timing-function: var(--cs-anim-ease-decelerate);
1403
+ }
1404
+
1405
+ @utility cs-dot-loader {
1406
+ animation-name: csDotLoader;
1407
+ animation-duration: 1.4s;
1408
+ animation-iteration-count: infinite;
1409
+ animation-fill-mode: both;
1410
+ }
1411
+
1412
+ /* =========================================================
1413
+ ADVANCED STAGGER SYSTEM
1414
+ Orchestrated animations with extended support
1415
+ ========================================================= */
1416
+
1417
+ @utility cs-stagger-50 {
1418
+ > .cs-anim:nth-child(1) {
1419
+ --cs-anim-delay: 0ms;
1420
+ }
1421
+ > .cs-anim:nth-child(2) {
1422
+ --cs-anim-delay: 50ms;
1423
+ }
1424
+ > .cs-anim:nth-child(3) {
1425
+ --cs-anim-delay: 100ms;
1426
+ }
1427
+ > .cs-anim:nth-child(4) {
1428
+ --cs-anim-delay: 150ms;
1429
+ }
1430
+ > .cs-anim:nth-child(5) {
1431
+ --cs-anim-delay: 200ms;
1432
+ }
1433
+ > .cs-anim:nth-child(6) {
1434
+ --cs-anim-delay: 250ms;
1435
+ }
1436
+ > .cs-anim:nth-child(7) {
1437
+ --cs-anim-delay: 300ms;
1438
+ }
1439
+ > .cs-anim:nth-child(8) {
1440
+ --cs-anim-delay: 350ms;
1441
+ }
1442
+ > .cs-anim:nth-child(9) {
1443
+ --cs-anim-delay: 400ms;
1444
+ }
1445
+ > .cs-anim:nth-child(10) {
1446
+ --cs-anim-delay: 450ms;
1447
+ }
1448
+ > .cs-anim:nth-child(11) {
1449
+ --cs-anim-delay: 500ms;
1450
+ }
1451
+ > .cs-anim:nth-child(12) {
1452
+ --cs-anim-delay: 550ms;
1453
+ }
1454
+ }
1455
+
1456
+ @utility cs-stagger-75 {
1457
+ > .cs-anim:nth-child(1) {
1458
+ --cs-anim-delay: 0ms;
1459
+ }
1460
+ > .cs-anim:nth-child(2) {
1461
+ --cs-anim-delay: 75ms;
1462
+ }
1463
+ > .cs-anim:nth-child(3) {
1464
+ --cs-anim-delay: 150ms;
1465
+ }
1466
+ > .cs-anim:nth-child(4) {
1467
+ --cs-anim-delay: 225ms;
1468
+ }
1469
+ > .cs-anim:nth-child(5) {
1470
+ --cs-anim-delay: 300ms;
1471
+ }
1472
+ > .cs-anim:nth-child(6) {
1473
+ --cs-anim-delay: 375ms;
1474
+ }
1475
+ > .cs-anim:nth-child(7) {
1476
+ --cs-anim-delay: 450ms;
1477
+ }
1478
+ > .cs-anim:nth-child(8) {
1479
+ --cs-anim-delay: 525ms;
1480
+ }
1481
+ > .cs-anim:nth-child(9) {
1482
+ --cs-anim-delay: 600ms;
1483
+ }
1484
+ > .cs-anim:nth-child(10) {
1485
+ --cs-anim-delay: 675ms;
1486
+ }
1487
+ > .cs-anim:nth-child(11) {
1488
+ --cs-anim-delay: 750ms;
1489
+ }
1490
+ > .cs-anim:nth-child(12) {
1491
+ --cs-anim-delay: 825ms;
1492
+ }
1493
+ }
1494
+
1495
+ @utility cs-stagger-100 {
1496
+ > .cs-anim:nth-child(1) {
1497
+ --cs-anim-delay: 0ms;
1498
+ }
1499
+ > .cs-anim:nth-child(2) {
1500
+ --cs-anim-delay: 100ms;
1501
+ }
1502
+ > .cs-anim:nth-child(3) {
1503
+ --cs-anim-delay: 200ms;
1504
+ }
1505
+ > .cs-anim:nth-child(4) {
1506
+ --cs-anim-delay: 300ms;
1507
+ }
1508
+ > .cs-anim:nth-child(5) {
1509
+ --cs-anim-delay: 400ms;
1510
+ }
1511
+ > .cs-anim:nth-child(6) {
1512
+ --cs-anim-delay: 500ms;
1513
+ }
1514
+ > .cs-anim:nth-child(7) {
1515
+ --cs-anim-delay: 600ms;
1516
+ }
1517
+ > .cs-anim:nth-child(8) {
1518
+ --cs-anim-delay: 700ms;
1519
+ }
1520
+ > .cs-anim:nth-child(9) {
1521
+ --cs-anim-delay: 800ms;
1522
+ }
1523
+ > .cs-anim:nth-child(10) {
1524
+ --cs-anim-delay: 900ms;
1525
+ }
1526
+ > .cs-anim:nth-child(11) {
1527
+ --cs-anim-delay: 1000ms;
1528
+ }
1529
+ > .cs-anim:nth-child(12) {
1530
+ --cs-anim-delay: 1100ms;
1531
+ }
1532
+ }
1533
+
1534
+ @utility cs-stagger-150 {
1535
+ > .cs-anim:nth-child(1) {
1536
+ --cs-anim-delay: 0ms;
1537
+ }
1538
+ > .cs-anim:nth-child(2) {
1539
+ --cs-anim-delay: 150ms;
1540
+ }
1541
+ > .cs-anim:nth-child(3) {
1542
+ --cs-anim-delay: 300ms;
1543
+ }
1544
+ > .cs-anim:nth-child(4) {
1545
+ --cs-anim-delay: 450ms;
1546
+ }
1547
+ > .cs-anim:nth-child(5) {
1548
+ --cs-anim-delay: 600ms;
1549
+ }
1550
+ > .cs-anim:nth-child(6) {
1551
+ --cs-anim-delay: 750ms;
1552
+ }
1553
+ > .cs-anim:nth-child(7) {
1554
+ --cs-anim-delay: 900ms;
1555
+ }
1556
+ > .cs-anim:nth-child(8) {
1557
+ --cs-anim-delay: 1050ms;
1558
+ }
1559
+ > .cs-anim:nth-child(9) {
1560
+ --cs-anim-delay: 1200ms;
1561
+ }
1562
+ > .cs-anim:nth-child(10) {
1563
+ --cs-anim-delay: 1350ms;
1564
+ }
1565
+ > .cs-anim:nth-child(11) {
1566
+ --cs-anim-delay: 1500ms;
1567
+ }
1568
+ > .cs-anim:nth-child(12) {
1569
+ --cs-anim-delay: 1650ms;
1570
+ }
1571
+ }
1572
+
1573
+ @utility cs-stagger-200 {
1574
+ > .cs-anim:nth-child(1) {
1575
+ --cs-anim-delay: 0ms;
1576
+ }
1577
+ > .cs-anim:nth-child(2) {
1578
+ --cs-anim-delay: 200ms;
1579
+ }
1580
+ > .cs-anim:nth-child(3) {
1581
+ --cs-anim-delay: 400ms;
1582
+ }
1583
+ > .cs-anim:nth-child(4) {
1584
+ --cs-anim-delay: 600ms;
1585
+ }
1586
+ > .cs-anim:nth-child(5) {
1587
+ --cs-anim-delay: 800ms;
1588
+ }
1589
+ > .cs-anim:nth-child(6) {
1590
+ --cs-anim-delay: 1000ms;
1591
+ }
1592
+ > .cs-anim:nth-child(7) {
1593
+ --cs-anim-delay: 1200ms;
1594
+ }
1595
+ > .cs-anim:nth-child(8) {
1596
+ --cs-anim-delay: 1400ms;
1597
+ }
1598
+ > .cs-anim:nth-child(9) {
1599
+ --cs-anim-delay: 1600ms;
1600
+ }
1601
+ > .cs-anim:nth-child(10) {
1602
+ --cs-anim-delay: 1800ms;
1603
+ }
1604
+ > .cs-anim:nth-child(11) {
1605
+ --cs-anim-delay: 2000ms;
1606
+ }
1607
+ > .cs-anim:nth-child(12) {
1608
+ --cs-anim-delay: 2200ms;
1609
+ }
1610
+ }
1611
+
1612
+ /* =========================================================
1613
+ PERFORMANCE UTILITIES
1614
+ Optimization hints for better animation performance
1615
+ ========================================================= */
1616
+
1617
+ @utility cs-will-transform {
1618
+ will-change: transform;
1619
+ }
1620
+ @utility cs-will-opacity {
1621
+ will-change: opacity;
1622
+ }
1623
+ @utility cs-will-filter {
1624
+ will-change: filter;
1625
+ }
1626
+ @utility cs-will-scroll {
1627
+ will-change: scroll-position;
1628
+ }
1629
+ @utility cs-will-auto {
1630
+ will-change: auto;
1631
+ }
1632
+
1633
+ /* Transform origin utilities */
1634
+ @utility cs-origin-center {
1635
+ transform-origin: center;
1636
+ }
1637
+ @utility cs-origin-top {
1638
+ transform-origin: top;
1639
+ }
1640
+ @utility cs-origin-top-right {
1641
+ transform-origin: top right;
1642
+ }
1643
+ @utility cs-origin-right {
1644
+ transform-origin: right;
1645
+ }
1646
+ @utility cs-origin-bottom-right {
1647
+ transform-origin: bottom right;
1648
+ }
1649
+ @utility cs-origin-bottom {
1650
+ transform-origin: bottom;
1651
+ }
1652
+ @utility cs-origin-bottom-left {
1653
+ transform-origin: bottom left;
1654
+ }
1655
+ @utility cs-origin-left {
1656
+ transform-origin: left;
1657
+ }
1658
+ @utility cs-origin-top-left {
1659
+ transform-origin: top left;
1660
+ }
1661
+
1662
+ /* v0.8.0-kompatible Aliase für transform-origin */
1663
+ @utility cs-t-origin-top {
1664
+ transform-origin: top;
1665
+ }
1666
+ @utility cs-t-origin-center {
1667
+ transform-origin: center;
1668
+ }
1669
+ @utility cs-t-origin-bottom {
1670
+ transform-origin: bottom;
1671
+ }
1672
+
1673
+ /* v0.8.0-kompatible will-change Aliase */
1674
+ @utility cs-will-transform {
1675
+ will-change: transform;
1676
+ }
1677
+ @utility cs-will-opacity {
1678
+ will-change: opacity;
1679
+ }
1680
+ @utility cs-will-filter {
1681
+ will-change: filter;
1682
+ }
1683
+
1684
+ /* v0.8.0-kompatible 3D Aliase */
1685
+ @utility cs-t-preserve-3d {
1686
+ transform-style: preserve-3d;
1687
+ }
1688
+
1689
+ /* 3D Perspective utilities */
1690
+ @utility cs-preserve-3d {
1691
+ transform-style: preserve-3d;
1692
+ }
1693
+ @utility cs-perspective-sm {
1694
+ perspective: 500px;
1695
+ }
1696
+ @utility cs-perspective {
1697
+ perspective: 1000px;
1698
+ }
1699
+ @utility cs-perspective-lg {
1700
+ perspective: 1500px;
1701
+ }
1702
+ @utility cs-backface-hidden {
1703
+ backface-visibility: hidden;
1704
+ }
1705
+ @utility cs-backface-visible {
1706
+ backface-visibility: visible;
1707
+ }
1708
+
1709
+ /* =========================================================
1710
+ SCROLL-BASED ANIMATIONS
1711
+ Modern scroll-timeline and view-timeline support
1712
+ ========================================================= */
1713
+
1714
+ @utility cs-scroll-reveal {
1715
+ opacity: 0;
1716
+ transform: translateY(20px);
1717
+ transition:
1718
+ opacity 0.6s ease-out,
1719
+ transform 0.6s ease-out;
1720
+
1721
+ @supports (animation-timeline: view()) {
1722
+ animation: csScrollReveal 1s ease-out;
1723
+ animation-timeline: view();
1724
+ animation-range: entry 0% entry 100%;
1725
+ }
1726
+ }
1727
+
1728
+ @keyframes csScrollReveal {
1729
+ 0% {
1730
+ opacity: 0;
1731
+ transform: translateY(20px);
1732
+ }
1733
+ 100% {
1734
+ opacity: 1;
1735
+ transform: translateY(0);
1736
+ }
1737
+ }
1738
+
1739
+ @utility cs-scroll-scale {
1740
+ transform: scale(0.8);
1741
+ transition: transform 0.6s ease-out;
1742
+
1743
+ @supports (animation-timeline: view()) {
1744
+ animation: csScrollScale 1s ease-out;
1745
+ animation-timeline: view();
1746
+ animation-range: entry 0% entry 100%;
1747
+ }
1748
+ }
1749
+
1750
+ @keyframes csScrollScale {
1751
+ 0% {
1752
+ transform: scale(0.8);
1753
+ }
1754
+ 100% {
1755
+ transform: scale(1);
1756
+ }
1757
+ }
1758
+
1759
+ @utility cs-parallax-scroll {
1760
+ @supports (animation-timeline: scroll()) {
1761
+ animation: csParallaxScroll linear;
1762
+ animation-timeline: scroll();
1763
+ }
1764
+ }
1765
+
1766
+ @keyframes csParallaxScroll {
1767
+ 0% {
1768
+ transform: translateY(0);
1769
+ }
1770
+ 100% {
1771
+ transform: translateY(-50px);
1772
+ }
1773
+ }
1774
+
1775
+ /* =========================================================
1776
+ ACCESSIBILITY & REDUCED MOTION
1777
+ Comprehensive reduced motion support with smart fallbacks
1778
+ ========================================================= */
1779
+
1780
+ @media (prefers-reduced-motion: reduce) {
1781
+ /* Disable all animations */
1782
+ *,
1783
+ *::before,
1784
+ *::after {
1785
+ animation-duration: 0.01ms !important;
1786
+ animation-iteration-count: 1 !important;
1787
+ transition-duration: 0.01ms !important;
1788
+ }
1789
+
1790
+ /* Override specific animation utilities */
1791
+ .cs-pulse,
1792
+ .cs-bounce,
1793
+ .cs-wiggle,
1794
+ .cs-shake,
1795
+ .cs-heartbeat,
1796
+ .cs-rubber-band,
1797
+ .cs-rotate,
1798
+ .cs-marquee-left,
1799
+ .cs-marquee-right,
1800
+ .cs-parallax-y,
1801
+ .cs-parallax-x,
1802
+ .cs-float,
1803
+ .cs-sway,
1804
+ .cs-skeleton-shimmer,
1805
+ .cs-dot-loader {
1806
+ animation: none !important;
1807
+ }
1808
+
1809
+ /* Keep essential entrance animations but make them instant */
1810
+ .cs-fade-in,
1811
+ .cs-scale-in,
1812
+ .cs-slide-up,
1813
+ .cs-slide-down,
1814
+ .cs-slide-left,
1815
+ .cs-slide-right {
1816
+ animation-duration: 0.01ms !important;
1817
+ }
1818
+
1819
+ /* Remove transforms that could cause motion sickness */
1820
+ .cs-3d-hover,
1821
+ .cs-flip-3d-x,
1822
+ .cs-flip-3d-y {
1823
+ transform: none !important;
1824
+ }
1825
+ }
1826
+
1827
+ /* High contrast mode adjustments */
1828
+ @media (prefers-contrast: high) {
1829
+ .cs-skeleton-shimmer {
1830
+ background: repeating-linear-gradient(
1831
+ 90deg,
1832
+ transparent 0%,
1833
+ currentColor 50%,
1834
+ transparent 100%
1835
+ );
1836
+ }
1837
+ }
1838
+
1839
+ /* =========================================================
1840
+ PRINT MEDIA SUPPORT
1841
+ Disable animations for print media
1842
+ ========================================================= */
1843
+
1844
+ @media print {
1845
+ *,
1846
+ *::before,
1847
+ *::after {
1848
+ animation: none !important;
1849
+ transition: none !important;
1850
+ }
1851
+ }
1852
+
1853
+ /* =========================================================
1854
+ TOUCH DEVICE OPTIMIZATIONS
1855
+ Optimizations for touch-based interactions
1856
+ ========================================================= */
1857
+
1858
+ @media (hover: none) and (pointer: coarse) {
1859
+ /* Faster animations for touch devices */
1860
+ .cs-btn-press {
1861
+ animation-duration: 50ms;
1862
+ }
1863
+
1864
+ .cs-btn-ripple::after {
1865
+ animation-duration: 300ms;
1866
+ }
1867
+
1868
+ /* Reduce motion intensity */
1869
+ .cs-wiggle,
1870
+ .cs-shake {
1871
+ animation-duration: 150ms;
1872
+ }
1873
+ }