@casoon/atlas-styles 0.0.7 → 0.0.9

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,848 @@
1
+ /**
2
+ * Atlas Components - Micro-Interactions CSS
3
+ *
4
+ * Premium animations and transitions for Atlas UI components.
5
+ * These are the "tiny moments that make a product feel alive."
6
+ */
7
+
8
+ /* ==========================================================================
9
+ CSS Custom Properties
10
+ ========================================================================== */
11
+
12
+ :root {
13
+ /* Animation Durations */
14
+ --atlas-duration-instant: 0ms;
15
+ --atlas-duration-fast: 150ms;
16
+ --atlas-duration-normal: 250ms;
17
+ --atlas-duration-slow: 400ms;
18
+
19
+ /* Easing Functions */
20
+ --atlas-ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
21
+ --atlas-ease-decelerate: cubic-bezier(0, 0, 0.2, 1);
22
+ --atlas-ease-accelerate: cubic-bezier(0.4, 0, 1, 1);
23
+ --atlas-ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
24
+ --atlas-ease-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275);
25
+
26
+ /* Colors (can be overridden) */
27
+ --atlas-primary: #3b82f6;
28
+ --atlas-primary-rgb: 59, 130, 246;
29
+ --atlas-success: #22c55e;
30
+ --atlas-error: #ef4444;
31
+ --atlas-gray-100: #f3f4f6;
32
+ --atlas-gray-200: #e5e7eb;
33
+ --atlas-gray-400: #9ca3af;
34
+ }
35
+
36
+ /* ==========================================================================
37
+ Keyframe Animations
38
+ ========================================================================== */
39
+
40
+ /* Button Ripple Effect */
41
+ @keyframes atlas-ripple {
42
+ from {
43
+ transform: scale(0);
44
+ opacity: 0.4;
45
+ }
46
+ to {
47
+ transform: scale(1);
48
+ opacity: 0;
49
+ }
50
+ }
51
+
52
+ /* Button Spinner */
53
+ @keyframes atlas-spin {
54
+ from {
55
+ transform: rotate(0deg);
56
+ }
57
+ to {
58
+ transform: rotate(360deg);
59
+ }
60
+ }
61
+
62
+ /* Button Checkmark Draw Animation */
63
+ @keyframes atlas-checkmark-draw {
64
+ from {
65
+ stroke-dashoffset: 24;
66
+ }
67
+ to {
68
+ stroke-dashoffset: 0;
69
+ }
70
+ }
71
+
72
+ /* Button X Draw Animation (Error state) */
73
+ @keyframes atlas-x-draw {
74
+ from {
75
+ stroke-dashoffset: 17;
76
+ }
77
+ to {
78
+ stroke-dashoffset: 0;
79
+ }
80
+ }
81
+
82
+ /* Skeleton Shimmer */
83
+ @keyframes atlas-skeleton-shimmer {
84
+ 0% {
85
+ transform: translateX(-100%);
86
+ }
87
+ 100% {
88
+ transform: translateX(100%);
89
+ }
90
+ }
91
+
92
+ /* Skeleton Pulse */
93
+ @keyframes atlas-skeleton-pulse {
94
+ 0%,
95
+ 100% {
96
+ opacity: 0.3;
97
+ }
98
+ 50% {
99
+ opacity: 0.6;
100
+ }
101
+ }
102
+
103
+ /* Skeleton Wave */
104
+ @keyframes atlas-skeleton-wave {
105
+ 0% {
106
+ background-position: -200% 0;
107
+ }
108
+ 100% {
109
+ background-position: 200% 0;
110
+ }
111
+ }
112
+
113
+ /* General Shimmer (for progress bars, etc.) */
114
+ @keyframes atlas-shimmer {
115
+ 0% {
116
+ transform: translateX(-100%);
117
+ }
118
+ 100% {
119
+ transform: translateX(100%);
120
+ }
121
+ }
122
+
123
+ /* Progress Indeterminate */
124
+ @keyframes atlas-progress-indeterminate {
125
+ 0% {
126
+ left: -30%;
127
+ right: 100%;
128
+ }
129
+ 50% {
130
+ left: 100%;
131
+ right: -30%;
132
+ }
133
+ 100% {
134
+ left: 100%;
135
+ right: -30%;
136
+ }
137
+ }
138
+
139
+ /* Toast Progress Bar */
140
+ @keyframes atlas-toast-progress {
141
+ from {
142
+ transform: scaleX(1);
143
+ }
144
+ to {
145
+ transform: scaleX(0);
146
+ }
147
+ }
148
+
149
+ /* Modal/Drawer Backdrop Fade */
150
+ @keyframes atlas-backdrop-in {
151
+ from {
152
+ background-color: rgba(0, 0, 0, 0);
153
+ backdrop-filter: blur(0px);
154
+ }
155
+ to {
156
+ background-color: rgba(0, 0, 0, 0.5);
157
+ backdrop-filter: blur(4px);
158
+ }
159
+ }
160
+
161
+ @keyframes atlas-backdrop-out {
162
+ from {
163
+ background-color: rgba(0, 0, 0, 0.5);
164
+ backdrop-filter: blur(4px);
165
+ }
166
+ to {
167
+ background-color: rgba(0, 0, 0, 0);
168
+ backdrop-filter: blur(0px);
169
+ }
170
+ }
171
+
172
+ /* Modal Scale In/Out */
173
+ @keyframes atlas-modal-in {
174
+ from {
175
+ opacity: 0;
176
+ transform: scale(0.95);
177
+ }
178
+ to {
179
+ opacity: 1;
180
+ transform: scale(1);
181
+ }
182
+ }
183
+
184
+ @keyframes atlas-modal-out {
185
+ from {
186
+ opacity: 1;
187
+ transform: scale(1);
188
+ }
189
+ to {
190
+ opacity: 0;
191
+ transform: scale(0.95);
192
+ }
193
+ }
194
+
195
+ /* Drawer Slide Variants */
196
+ @keyframes atlas-drawer-left-in {
197
+ from {
198
+ transform: translateX(-100%);
199
+ }
200
+ to {
201
+ transform: translateX(0);
202
+ }
203
+ }
204
+
205
+ @keyframes atlas-drawer-right-in {
206
+ from {
207
+ transform: translateX(100%);
208
+ }
209
+ to {
210
+ transform: translateX(0);
211
+ }
212
+ }
213
+
214
+ @keyframes atlas-drawer-top-in {
215
+ from {
216
+ transform: translateY(-100%);
217
+ }
218
+ to {
219
+ transform: translateY(0);
220
+ }
221
+ }
222
+
223
+ @keyframes atlas-drawer-bottom-in {
224
+ from {
225
+ transform: translateY(100%);
226
+ }
227
+ to {
228
+ transform: translateY(0);
229
+ }
230
+ }
231
+
232
+ @keyframes atlas-drawer-left-out {
233
+ from {
234
+ transform: translateX(0);
235
+ }
236
+ to {
237
+ transform: translateX(-100%);
238
+ }
239
+ }
240
+
241
+ @keyframes atlas-drawer-right-out {
242
+ from {
243
+ transform: translateX(0);
244
+ }
245
+ to {
246
+ transform: translateX(100%);
247
+ }
248
+ }
249
+
250
+ @keyframes atlas-drawer-top-out {
251
+ from {
252
+ transform: translateY(0);
253
+ }
254
+ to {
255
+ transform: translateY(-100%);
256
+ }
257
+ }
258
+
259
+ @keyframes atlas-drawer-bottom-out {
260
+ from {
261
+ transform: translateY(0);
262
+ }
263
+ to {
264
+ transform: translateY(100%);
265
+ }
266
+ }
267
+
268
+ /* Dropdown Scale In/Out */
269
+ @keyframes atlas-dropdown-in {
270
+ from {
271
+ opacity: 0;
272
+ transform: scale(0.95);
273
+ }
274
+ to {
275
+ opacity: 1;
276
+ transform: scale(1);
277
+ }
278
+ }
279
+
280
+ @keyframes atlas-dropdown-out {
281
+ from {
282
+ opacity: 1;
283
+ transform: scale(1);
284
+ }
285
+ to {
286
+ opacity: 0;
287
+ transform: scale(0.95);
288
+ }
289
+ }
290
+
291
+ /* Toast Slide In/Out */
292
+ @keyframes atlas-toast-in-bottom {
293
+ from {
294
+ opacity: 0;
295
+ transform: translateY(100%);
296
+ }
297
+ to {
298
+ opacity: 1;
299
+ transform: translateY(0);
300
+ }
301
+ }
302
+
303
+ @keyframes atlas-toast-in-top {
304
+ from {
305
+ opacity: 0;
306
+ transform: translateY(-100%);
307
+ }
308
+ to {
309
+ opacity: 1;
310
+ transform: translateY(0);
311
+ }
312
+ }
313
+
314
+ @keyframes atlas-toast-out {
315
+ from {
316
+ opacity: 1;
317
+ transform: translateX(0);
318
+ }
319
+ to {
320
+ opacity: 0;
321
+ transform: translateX(100%);
322
+ }
323
+ }
324
+
325
+ /* Gentle Pulse (for focus indicators, breathing effect) */
326
+ @keyframes atlas-pulse {
327
+ 0%,
328
+ 100% {
329
+ box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.4);
330
+ }
331
+ 50% {
332
+ box-shadow: 0 0 0 4px rgba(59, 130, 246, 0);
333
+ }
334
+ }
335
+
336
+ /* Breathing animation (subtle scale pulse) */
337
+ @keyframes atlas-breathing {
338
+ 0%,
339
+ 100% {
340
+ transform: scale(1);
341
+ filter: brightness(1);
342
+ }
343
+ 50% {
344
+ transform: scale(1.02);
345
+ filter: brightness(1.05);
346
+ }
347
+ }
348
+
349
+ /* Shake (for error states) */
350
+ @keyframes atlas-shake {
351
+ 0%,
352
+ 100% {
353
+ transform: translateX(0);
354
+ }
355
+ 10%,
356
+ 30%,
357
+ 50%,
358
+ 70%,
359
+ 90% {
360
+ transform: translateX(-4px);
361
+ }
362
+ 20%,
363
+ 40%,
364
+ 60%,
365
+ 80% {
366
+ transform: translateX(4px);
367
+ }
368
+ }
369
+
370
+ /* Bounce (for success states) */
371
+ @keyframes atlas-bounce {
372
+ 0%,
373
+ 100% {
374
+ transform: scale(1);
375
+ }
376
+ 50% {
377
+ transform: scale(1.05);
378
+ }
379
+ }
380
+
381
+ /* Fade In/Out */
382
+ @keyframes atlas-fade-in {
383
+ from {
384
+ opacity: 0;
385
+ }
386
+ to {
387
+ opacity: 1;
388
+ }
389
+ }
390
+
391
+ @keyframes atlas-fade-out {
392
+ from {
393
+ opacity: 1;
394
+ }
395
+ to {
396
+ opacity: 0;
397
+ }
398
+ }
399
+
400
+ /* Slide animations for stagger */
401
+ @keyframes atlas-slide-up {
402
+ from {
403
+ opacity: 0;
404
+ transform: translateY(20px);
405
+ }
406
+ to {
407
+ opacity: 1;
408
+ transform: translateY(0);
409
+ }
410
+ }
411
+
412
+ @keyframes atlas-slide-down {
413
+ from {
414
+ opacity: 0;
415
+ transform: translateY(-20px);
416
+ }
417
+ to {
418
+ opacity: 1;
419
+ transform: translateY(0);
420
+ }
421
+ }
422
+
423
+ @keyframes atlas-slide-left {
424
+ from {
425
+ opacity: 0;
426
+ transform: translateX(20px);
427
+ }
428
+ to {
429
+ opacity: 1;
430
+ transform: translateX(0);
431
+ }
432
+ }
433
+
434
+ @keyframes atlas-slide-right {
435
+ from {
436
+ opacity: 0;
437
+ transform: translateX(-20px);
438
+ }
439
+ to {
440
+ opacity: 1;
441
+ transform: translateX(0);
442
+ }
443
+ }
444
+
445
+ /* Scale animations for stagger */
446
+ @keyframes atlas-scale-in {
447
+ from {
448
+ opacity: 0;
449
+ transform: scale(0.8);
450
+ }
451
+ to {
452
+ opacity: 1;
453
+ transform: scale(1);
454
+ }
455
+ }
456
+
457
+ @keyframes atlas-scale-up {
458
+ from {
459
+ opacity: 0;
460
+ transform: scale(0.8) translateY(20px);
461
+ }
462
+ to {
463
+ opacity: 1;
464
+ transform: scale(1) translateY(0);
465
+ }
466
+ }
467
+
468
+ /* Flip animation */
469
+ @keyframes atlas-flip-in {
470
+ from {
471
+ opacity: 0;
472
+ transform: perspective(400px) rotateX(-90deg);
473
+ }
474
+ to {
475
+ opacity: 1;
476
+ transform: perspective(400px) rotateX(0);
477
+ }
478
+ }
479
+
480
+ /* Zoom animation */
481
+ @keyframes atlas-zoom-in {
482
+ from {
483
+ opacity: 0;
484
+ transform: scale(0);
485
+ }
486
+ to {
487
+ opacity: 1;
488
+ transform: scale(1);
489
+ }
490
+ }
491
+
492
+ /* ==========================================================================
493
+ Component Base Styles
494
+ ========================================================================== */
495
+
496
+ /* Button States */
497
+ .atlas-button {
498
+ position: relative;
499
+ overflow: hidden;
500
+ transition:
501
+ transform var(--atlas-duration-fast) var(--atlas-ease-bounce),
502
+ filter var(--atlas-duration-fast) var(--atlas-ease-standard),
503
+ box-shadow var(--atlas-duration-fast) var(--atlas-ease-standard);
504
+ transform-origin: center center;
505
+ }
506
+
507
+ .atlas-button:active:not(:disabled) {
508
+ transform: scale(0.97);
509
+ filter: brightness(0.95);
510
+ }
511
+
512
+ .atlas-button:disabled {
513
+ opacity: 0.5;
514
+ cursor: not-allowed;
515
+ }
516
+
517
+ .atlas-button-ripple {
518
+ position: absolute;
519
+ border-radius: 50%;
520
+ background-color: currentColor;
521
+ opacity: 0.2;
522
+ transform: scale(0);
523
+ pointer-events: none;
524
+ animation: atlas-ripple var(--atlas-duration-normal) var(--atlas-ease-decelerate) forwards;
525
+ }
526
+
527
+ .atlas-button-spinner {
528
+ display: inline-block;
529
+ width: 1em;
530
+ height: 1em;
531
+ border: 2px solid currentColor;
532
+ border-top-color: transparent;
533
+ border-radius: 50%;
534
+ animation: atlas-spin 600ms linear infinite;
535
+ }
536
+
537
+ /* Card */
538
+ .atlas-card {
539
+ transition:
540
+ transform var(--atlas-duration-normal) var(--atlas-ease-spring),
541
+ box-shadow var(--atlas-duration-normal) var(--atlas-ease-standard);
542
+ transform-style: preserve-3d;
543
+ }
544
+
545
+ .atlas-card-shine {
546
+ position: absolute;
547
+ inset: 0;
548
+ pointer-events: none;
549
+ background: linear-gradient(
550
+ 105deg,
551
+ transparent 40%,
552
+ rgba(255, 255, 255, 0.1) 45%,
553
+ rgba(255, 255, 255, 0.3) 50%,
554
+ rgba(255, 255, 255, 0.1) 55%,
555
+ transparent 60%
556
+ );
557
+ background-size: 200% 200%;
558
+ background-position: 100% 0%;
559
+ opacity: 0;
560
+ transition: opacity var(--atlas-duration-fast) var(--atlas-ease-standard);
561
+ border-radius: inherit;
562
+ }
563
+
564
+ .atlas-card:hover .atlas-card-shine {
565
+ opacity: 1;
566
+ }
567
+
568
+ /* Modal */
569
+ .atlas-modal-backdrop {
570
+ position: fixed;
571
+ inset: 0;
572
+ display: flex;
573
+ align-items: center;
574
+ justify-content: center;
575
+ background-color: rgba(0, 0, 0, 0.5);
576
+ backdrop-filter: blur(4px);
577
+ }
578
+
579
+ .atlas-modal {
580
+ animation: atlas-modal-in var(--atlas-duration-normal) var(--atlas-ease-spring) forwards;
581
+ }
582
+
583
+ .atlas-modal-closing {
584
+ animation: atlas-modal-out var(--atlas-duration-fast) var(--atlas-ease-accelerate) forwards;
585
+ }
586
+
587
+ /* Drawer */
588
+ .atlas-drawer-backdrop {
589
+ position: fixed;
590
+ inset: 0;
591
+ background-color: rgba(0, 0, 0, 0.5);
592
+ backdrop-filter: blur(4px);
593
+ }
594
+
595
+ .atlas-drawer[data-side='left'] {
596
+ animation: atlas-drawer-left-in var(--atlas-duration-normal) var(--atlas-ease-spring) forwards;
597
+ }
598
+
599
+ .atlas-drawer[data-side='right'] {
600
+ animation: atlas-drawer-right-in var(--atlas-duration-normal) var(--atlas-ease-spring) forwards;
601
+ }
602
+
603
+ .atlas-drawer[data-side='top'] {
604
+ animation: atlas-drawer-top-in var(--atlas-duration-normal) var(--atlas-ease-spring) forwards;
605
+ }
606
+
607
+ .atlas-drawer[data-side='bottom'] {
608
+ animation: atlas-drawer-bottom-in var(--atlas-duration-normal) var(--atlas-ease-spring) forwards;
609
+ }
610
+
611
+ /* Dropdown */
612
+ .atlas-dropdown-menu {
613
+ animation: atlas-dropdown-in var(--atlas-duration-fast) var(--atlas-ease-spring) forwards;
614
+ }
615
+
616
+ .atlas-dropdown-item {
617
+ transition: background-color var(--atlas-duration-fast) var(--atlas-ease-standard);
618
+ }
619
+
620
+ .atlas-dropdown-item:hover,
621
+ .atlas-dropdown-focused {
622
+ background-color: rgba(0, 0, 0, 0.05);
623
+ }
624
+
625
+ .atlas-dropdown-item:active {
626
+ background-color: rgba(0, 0, 0, 0.1);
627
+ }
628
+
629
+ /* Toast */
630
+ .atlas-toast-container {
631
+ position: fixed;
632
+ z-index: 500;
633
+ display: flex;
634
+ gap: 12px;
635
+ pointer-events: none;
636
+ }
637
+
638
+ .atlas-toast {
639
+ pointer-events: auto;
640
+ animation: atlas-toast-in-bottom var(--atlas-duration-normal) var(--atlas-ease-spring) forwards;
641
+ }
642
+
643
+ .atlas-toast-container[data-position^='top'] .atlas-toast {
644
+ animation-name: atlas-toast-in-top;
645
+ }
646
+
647
+ .atlas-toast-icon svg {
648
+ display: block;
649
+ }
650
+
651
+ .atlas-toast-checkmark {
652
+ stroke-dasharray: 20;
653
+ stroke-dashoffset: 20;
654
+ animation: atlas-checkmark-draw 300ms var(--atlas-ease-decelerate) 100ms forwards;
655
+ }
656
+
657
+ .atlas-toast-progress {
658
+ transform-origin: left;
659
+ }
660
+
661
+ .atlas-toast-action:hover {
662
+ background-color: rgba(0, 0, 0, 0.05);
663
+ }
664
+
665
+ .atlas-toast-dismiss:hover {
666
+ opacity: 1;
667
+ }
668
+
669
+ /* Progress */
670
+ .atlas-progress {
671
+ position: relative;
672
+ overflow: hidden;
673
+ }
674
+
675
+ .atlas-progress-bar {
676
+ position: absolute;
677
+ top: 0;
678
+ left: 0;
679
+ height: 100%;
680
+ transition: width var(--atlas-duration-normal) var(--atlas-ease-decelerate);
681
+ }
682
+
683
+ .atlas-progress-shimmer {
684
+ position: absolute;
685
+ inset: 0;
686
+ background: linear-gradient(
687
+ 90deg,
688
+ transparent 0%,
689
+ rgba(255, 255, 255, 0.3) 50%,
690
+ transparent 100%
691
+ );
692
+ animation: atlas-shimmer 1.5s infinite;
693
+ }
694
+
695
+ .atlas-progress-indeterminate .atlas-progress-bar {
696
+ animation: atlas-progress-indeterminate 1.5s ease-in-out infinite;
697
+ }
698
+
699
+ /* Step Progress */
700
+ .atlas-step-circle {
701
+ transition: all var(--atlas-duration-normal) var(--atlas-ease-spring);
702
+ }
703
+
704
+ .atlas-step-connector {
705
+ transition: background var(--atlas-duration-normal) var(--atlas-ease-standard);
706
+ }
707
+
708
+ /* Skeleton */
709
+ .atlas-skeleton {
710
+ background-color: var(--atlas-gray-200);
711
+ position: relative;
712
+ overflow: hidden;
713
+ }
714
+
715
+ .atlas-skeleton-animation {
716
+ position: absolute;
717
+ inset: 0;
718
+ }
719
+
720
+ .atlas-skeleton[data-animation='shimmer'] .atlas-skeleton-animation {
721
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.5), transparent);
722
+ animation: atlas-skeleton-shimmer 1.5s var(--atlas-ease-standard) infinite;
723
+ }
724
+
725
+ .atlas-skeleton[data-animation='pulse'] .atlas-skeleton-animation {
726
+ animation: atlas-skeleton-pulse 1.5s var(--atlas-ease-standard) infinite;
727
+ background-color: rgba(255, 255, 255, 0.3);
728
+ }
729
+
730
+ .atlas-skeleton[data-animation='wave'] {
731
+ background: linear-gradient(
732
+ 90deg,
733
+ var(--atlas-gray-200) 25%,
734
+ var(--atlas-gray-100) 50%,
735
+ var(--atlas-gray-200) 75%
736
+ );
737
+ background-size: 200% 100%;
738
+ animation: atlas-skeleton-wave 1.5s var(--atlas-ease-standard) infinite;
739
+ }
740
+
741
+ /* ==========================================================================
742
+ Hover States (Desktop)
743
+ ========================================================================== */
744
+
745
+ @media (hover: hover) {
746
+ /* Gentle lift on hover */
747
+ .atlas-hover-lift {
748
+ transition:
749
+ transform var(--atlas-duration-fast) var(--atlas-ease-standard),
750
+ box-shadow var(--atlas-duration-fast) var(--atlas-ease-standard);
751
+ }
752
+
753
+ .atlas-hover-lift:hover {
754
+ transform: translateY(-2px);
755
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
756
+ }
757
+
758
+ /* Subtle glow on hover */
759
+ .atlas-hover-glow {
760
+ transition:
761
+ box-shadow var(--atlas-duration-normal) var(--atlas-ease-standard),
762
+ filter var(--atlas-duration-normal) var(--atlas-ease-standard);
763
+ }
764
+
765
+ .atlas-hover-glow:hover {
766
+ box-shadow: 0 0 20px rgba(var(--atlas-primary-rgb), 0.4);
767
+ filter: brightness(1.05);
768
+ }
769
+
770
+ /* Scale on hover */
771
+ .atlas-hover-scale {
772
+ transition: transform var(--atlas-duration-fast) var(--atlas-ease-spring);
773
+ }
774
+
775
+ .atlas-hover-scale:hover {
776
+ transform: scale(1.02);
777
+ }
778
+
779
+ /* Breathing animation on hover */
780
+ .atlas-hover-breathing:hover {
781
+ animation: atlas-breathing 2s ease-in-out infinite;
782
+ }
783
+ }
784
+
785
+ /* ==========================================================================
786
+ Focus States (Accessibility)
787
+ ========================================================================== */
788
+
789
+ /* Only show focus ring for keyboard navigation */
790
+ .atlas-focus-visible:focus-visible {
791
+ outline: 2px solid var(--atlas-primary);
792
+ outline-offset: 2px;
793
+ }
794
+
795
+ /* Animated focus ring */
796
+ .atlas-focus-pulse:focus-visible {
797
+ animation: atlas-pulse 1.5s var(--atlas-ease-standard) infinite;
798
+ }
799
+
800
+ /* ==========================================================================
801
+ Stagger Animation Utilities
802
+ ========================================================================== */
803
+
804
+ .atlas-stagger-item {
805
+ opacity: 0;
806
+ }
807
+
808
+ .atlas-stagger-fade-up {
809
+ animation: atlas-slide-up var(--atlas-duration-normal) var(--atlas-ease-spring) forwards;
810
+ }
811
+
812
+ .atlas-stagger-fade-down {
813
+ animation: atlas-slide-down var(--atlas-duration-normal) var(--atlas-ease-spring) forwards;
814
+ }
815
+
816
+ .atlas-stagger-fade-left {
817
+ animation: atlas-slide-left var(--atlas-duration-normal) var(--atlas-ease-spring) forwards;
818
+ }
819
+
820
+ .atlas-stagger-fade-right {
821
+ animation: atlas-slide-right var(--atlas-duration-normal) var(--atlas-ease-spring) forwards;
822
+ }
823
+
824
+ .atlas-stagger-scale {
825
+ animation: atlas-scale-in var(--atlas-duration-normal) var(--atlas-ease-spring) forwards;
826
+ }
827
+
828
+ .atlas-stagger-flip {
829
+ animation: atlas-flip-in var(--atlas-duration-normal) var(--atlas-ease-spring) forwards;
830
+ }
831
+
832
+ .atlas-stagger-zoom {
833
+ animation: atlas-zoom-in var(--atlas-duration-normal) var(--atlas-ease-bounce) forwards;
834
+ }
835
+
836
+ /* ==========================================================================
837
+ Reduced Motion
838
+ ========================================================================== */
839
+
840
+ @media (prefers-reduced-motion: reduce) {
841
+ *,
842
+ *::before,
843
+ *::after {
844
+ animation-duration: 0.01ms !important;
845
+ animation-iteration-count: 1 !important;
846
+ transition-duration: 0.01ms !important;
847
+ }
848
+ }