@knadh/oat
Version:
71 lines (61 loc) • 1.77 kB
CSS
@layer animations {
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms ;
animation-iteration-count: 1 ;
transition-duration: 0.01ms ;
scroll-behavior: auto ;
}
}
/* Pop-in animation for modals/overlays - swings from above */
.animate-pop-in {
opacity: 1;
transform: perspective(1000px) rotateX(0deg) translateZ(0);
transition:
opacity 150ms cubic-bezier(0.4, 0, 0.2, 1),
transform 150ms cubic-bezier(0.4, 0, 0.2, 1),
overlay 150ms cubic-bezier(0.4, 0, 0.2, 1) allow-discrete,
display 150ms cubic-bezier(0.4, 0, 0.2, 1) allow-discrete;
/* Entry - where to animate FROM */
@starting-style {
opacity: 0;
transform: perspective(1000px) rotateX(-15deg) translateZ(-80px);
}
/* Exit - where to animate TO when closing */
&[data-state="closing"] {
opacity: 0;
transform: perspective(1000px) rotateX(-15deg) translateZ(-80px);
}
&[data-state="closing"]::backdrop {
opacity: 0;
}
}
/* Backdrop animation for dialogs */
dialog::backdrop {
opacity: 1;
transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
@starting-style {
opacity: 0;
}
}
/* Slide-in animation for toasts */
.animate-slide-in {
opacity: 1;
transform: translateX(0);
transition:
opacity 150ms cubic-bezier(0.16, 1, 0.3, 1),
transform 150ms cubic-bezier(0.16, 1, 0.3, 1);
/* Entry - slide in from right */
@starting-style {
opacity: 0;
transform: translateX(100%);
}
/* Exit - slide out to right */
&[data-state="closing"] {
opacity: 0;
transform: translateX(100%);
}
}
}