|
|
@@ -1,11 +1,60 @@
|
|
|
-@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
|
|
|
-.page-slide-enter-active { transition: all 0.3s ease-out; }
|
|
|
-.page-slide-leave-active { transition: all 0.3s ease-in; }
|
|
|
-.page-slide-enter-from { opacity: 0; transform: translateX(30px); }
|
|
|
-.page-slide-leave-to { opacity: 0; transform: translateX(-30px); }
|
|
|
+// vue/app/temp.styl
|
|
|
+// Глобальные стили и анимации для всего проекта
|
|
|
|
|
|
-// app/temp.styl
|
|
|
-// Глобальные стили, которые сложно сделать на Tailwind
|
|
|
+// Анимации для плавного появления элементов
|
|
|
+@keyframes fadeInUp
|
|
|
+ 0%
|
|
|
+ opacity: 0
|
|
|
+ transform: translateY(40px)
|
|
|
+ 100%
|
|
|
+ opacity: 1
|
|
|
+ transform: translateY(0)
|
|
|
+
|
|
|
+@keyframes fadeIn
|
|
|
+ from
|
|
|
+ opacity: 0
|
|
|
+ to
|
|
|
+ opacity: 1
|
|
|
+
|
|
|
+@keyframes slideIn
|
|
|
+ from
|
|
|
+ opacity: 0
|
|
|
+ transform: translateX(-100px)
|
|
|
+ to
|
|
|
+ opacity: 1
|
|
|
+ transform: translateX(0)
|
|
|
+
|
|
|
+@keyframes pulse
|
|
|
+ 0%, 100%
|
|
|
+ opacity: 1
|
|
|
+ 50%
|
|
|
+ opacity: 0.7
|
|
|
+
|
|
|
+// Глобальные классы анимаций
|
|
|
+.animate-fade-in-up
|
|
|
+ animation: fadeInUp 0.6s ease-out forwards
|
|
|
+
|
|
|
+.animate-fade-in
|
|
|
+ animation: fadeIn 0.5s ease-out forwards
|
|
|
+
|
|
|
+.animate-slide-in
|
|
|
+ animation: slideIn 0.5s ease-out forwards
|
|
|
+
|
|
|
+.animate-pulse-slow
|
|
|
+ animation: pulse 2s infinite
|
|
|
+
|
|
|
+// Задержки для анимаций
|
|
|
+.animation-delay-100
|
|
|
+ animation-delay: 100ms
|
|
|
+
|
|
|
+.animation-delay-200
|
|
|
+ animation-delay: 200ms
|
|
|
+
|
|
|
+.animation-delay-300
|
|
|
+ animation-delay: 300ms
|
|
|
+
|
|
|
+.animation-delay-400
|
|
|
+ animation-delay: 400ms
|
|
|
|
|
|
// Кастомная полоса прокрутки
|
|
|
::-webkit-scrollbar
|
|
|
@@ -24,10 +73,61 @@
|
|
|
.dark ::-webkit-scrollbar-thumb
|
|
|
background: #4b5563
|
|
|
|
|
|
-// Анимации для карточек
|
|
|
-.card-hover
|
|
|
- transition: all 0.3s ease
|
|
|
+// Глобальные утилиты
|
|
|
+.card-hover
|
|
|
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1)
|
|
|
|
|
|
- &:hover
|
|
|
+ &:hover
|
|
|
transform: translateY(-8px)
|
|
|
- box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)
|
|
|
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25)
|
|
|
+
|
|
|
+.line-clamp-2
|
|
|
+ display: -webkit-box
|
|
|
+ -webkit-line-clamp: 2
|
|
|
+ -webkit-box-orient: vertical
|
|
|
+ overflow: hidden
|
|
|
+
|
|
|
+.line-clamp-3
|
|
|
+ display: -webkit-box
|
|
|
+ -webkit-line-clamp: 3
|
|
|
+ -webkit-box-orient: vertical
|
|
|
+ overflow: hidden
|
|
|
+
|
|
|
+// Состояния загрузки
|
|
|
+.loading-skeleton
|
|
|
+ background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%)
|
|
|
+ background-size: 200% 100%
|
|
|
+ animation: loading 1.5s infinite
|
|
|
+
|
|
|
+.dark .loading-skeleton
|
|
|
+ background: linear-gradient(90deg, #374151 25%, #4b5563 50%, #374151 75%)
|
|
|
+ background-size: 200% 100%
|
|
|
+
|
|
|
+@keyframes loading
|
|
|
+ 0%
|
|
|
+ background-position: 200% 0
|
|
|
+ 100%
|
|
|
+ background-position: -200% 0
|
|
|
+
|
|
|
+// Анимации для Vue переходов
|
|
|
+.modal-fade-enter-active,
|
|
|
+.modal-fade-leave-active
|
|
|
+ transition: opacity 0.3s ease
|
|
|
+
|
|
|
+.modal-fade-enter-from,
|
|
|
+.modal-fade-leave-to
|
|
|
+ opacity: 0
|
|
|
+
|
|
|
+.page-slide-enter-active
|
|
|
+ transition: all 0.3s ease-out
|
|
|
+
|
|
|
+.page-slide-leave-active
|
|
|
+ transition: all 0.3s ease-in
|
|
|
+
|
|
|
+.page-slide-enter-from
|
|
|
+ opacity: 0
|
|
|
+ transform: translateX(30px)
|
|
|
+
|
|
|
+.page-slide-leave-to
|
|
|
+ opacity: 0
|
|
|
+ transform: translateX(-30px)
|