| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- // vue/app/temp.styl
- .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)
- // Глобальные стили и анимации для всего проекта
- // Анимации для плавного появления элементов
- @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
- width: 8px
- ::-webkit-scrollbar-track
- background: #f1f1f1
- .dark ::-webkit-scrollbar-track
- background: #374151
- ::-webkit-scrollbar-thumb
- background: #cbd5e0
- border-radius: 4px
- .dark ::-webkit-scrollbar-thumb
- background: #4b5563
- // Глобальные утилиты
- .card-hover
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1)
-
- &:hover
- transform: translateY(-8px)
- 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)
|