276 lines
4.0 KiB
CSS
276 lines
4.0 KiB
CSS
/* Animations */
|
|
|
|
@keyframes fadeIn {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes fadeOut {
|
|
from {
|
|
opacity: 1;
|
|
}
|
|
to {
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
@keyframes slideInLeft {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(-30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes slideInRight {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes slideInDown {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(-30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes slideInUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes pulse {
|
|
0%, 100% {
|
|
opacity: 1;
|
|
}
|
|
50% {
|
|
opacity: 0.5;
|
|
}
|
|
}
|
|
|
|
@keyframes bounce {
|
|
0%, 100% {
|
|
transform: translateY(0);
|
|
}
|
|
50% {
|
|
transform: translateY(-10px);
|
|
}
|
|
}
|
|
|
|
@keyframes spin {
|
|
from {
|
|
transform: rotate(0deg);
|
|
}
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
@keyframes shimmer {
|
|
0% {
|
|
background-position: -1000px 0;
|
|
}
|
|
100% {
|
|
background-position: 1000px 0;
|
|
}
|
|
}
|
|
|
|
@keyframes float {
|
|
0%, 100% {
|
|
transform: translateY(0px);
|
|
}
|
|
50% {
|
|
transform: translateY(-20px);
|
|
}
|
|
}
|
|
|
|
/* Animation classes */
|
|
|
|
.animate-fade-in {
|
|
animation: fadeIn 0.3s ease-in;
|
|
}
|
|
|
|
.animate-fade-out {
|
|
animation: fadeOut 0.3s ease-out;
|
|
}
|
|
|
|
.animate-slide-in-left {
|
|
animation: slideInLeft 0.3s ease-out;
|
|
}
|
|
|
|
.animate-slide-in-right {
|
|
animation: slideInRight 0.3s ease-out;
|
|
}
|
|
|
|
.animate-slide-in-down {
|
|
animation: slideInDown 0.3s ease-out;
|
|
}
|
|
|
|
.animate-slide-in-up {
|
|
animation: slideInUp 0.3s ease-out;
|
|
}
|
|
|
|
.animate-pulse {
|
|
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
|
}
|
|
|
|
.animate-bounce {
|
|
animation: bounce 1s infinite;
|
|
}
|
|
|
|
.animate-spin {
|
|
animation: spin 1s linear infinite;
|
|
}
|
|
|
|
.animate-shimmer {
|
|
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
|
|
background-size: 1000px 100%;
|
|
animation: shimmer 2s infinite;
|
|
}
|
|
|
|
.animate-float {
|
|
animation: float 3s ease-in-out infinite;
|
|
}
|
|
|
|
/* Transition classes */
|
|
|
|
.transition-all {
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.transition-colors {
|
|
transition: color 0.3s ease, background-color 0.3s ease, border-color 0.3s ease;
|
|
}
|
|
|
|
.transition-transform {
|
|
transition: transform 0.3s ease;
|
|
}
|
|
|
|
.transition-opacity {
|
|
transition: opacity 0.3s ease;
|
|
}
|
|
|
|
.transition-fast {
|
|
transition: all 0.15s ease;
|
|
}
|
|
|
|
.transition-slow {
|
|
transition: all 0.5s ease;
|
|
}
|
|
|
|
/* Hover effects */
|
|
|
|
.hover-lift {
|
|
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
|
}
|
|
|
|
.hover-lift:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.hover-scale:hover {
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
.hover-brighten:hover {
|
|
filter: brightness(1.1);
|
|
}
|
|
|
|
/* Transform utilities */
|
|
|
|
.scale-95 {
|
|
transform: scale(0.95);
|
|
}
|
|
|
|
.scale-100 {
|
|
transform: scale(1);
|
|
}
|
|
|
|
.scale-105 {
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
.scale-110 {
|
|
transform: scale(1.1);
|
|
}
|
|
|
|
/* Opacity utilities */
|
|
|
|
.opacity-0 {
|
|
opacity: 0;
|
|
}
|
|
|
|
.opacity-50 {
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.opacity-75 {
|
|
opacity: 0.75;
|
|
}
|
|
|
|
.opacity-100 {
|
|
opacity: 1;
|
|
}
|
|
|
|
/* Loading skeleton */
|
|
|
|
.skeleton {
|
|
background: linear-gradient(90deg, #e0e0e0 25%, #f0f0f0 50%, #e0e0e0 75%);
|
|
background-size: 200% 100%;
|
|
animation: loading 1.5s infinite;
|
|
}
|
|
|
|
.dark .skeleton {
|
|
background: linear-gradient(90deg, #333 25%, #444 50%, #333 75%);
|
|
background-size: 200% 100%;
|
|
}
|
|
|
|
@keyframes loading {
|
|
0% {
|
|
background-position: 200% 0;
|
|
}
|
|
100% {
|
|
background-position: -200% 0;
|
|
}
|
|
}
|
|
|
|
.skeleton-text {
|
|
height: 1rem;
|
|
border-radius: 0.25rem;
|
|
}
|
|
|
|
.skeleton-circle {
|
|
border-radius: 50%;
|
|
height: 2.5rem;
|
|
width: 2.5rem;
|
|
}
|
|
|
|
.skeleton-card {
|
|
border-radius: 0.75rem;
|
|
height: 100%;
|
|
}
|