272 lines
5.0 KiB
CSS
272 lines
5.0 KiB
CSS
@tailwind base;
|
||
@tailwind components;
|
||
@tailwind utilities;
|
||
|
||
/* ===== МОБИЛЬНАЯ АДАПТАЦИЯ ===== */
|
||
|
||
/* Улучшенный перенос слов для мобильных устройств */
|
||
@media (max-width: 768px) {
|
||
.prose {
|
||
word-wrap: break-word;
|
||
overflow-wrap: break-word;
|
||
hyphens: auto;
|
||
}
|
||
|
||
.prose p, .prose li {
|
||
word-wrap: break-word;
|
||
overflow-wrap: break-word;
|
||
}
|
||
|
||
/* Предотвращение горизонтальной прокрутки */
|
||
body {
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
/* Адаптация длинных слов в интерфейсе */
|
||
.break-word-mobile {
|
||
word-break: break-word;
|
||
hyphens: auto;
|
||
}
|
||
|
||
/* Усечение текста с троеточием на мобильных */
|
||
.truncate-mobile {
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
}
|
||
}
|
||
|
||
/* Line clamp utilities для совместимости */
|
||
.line-clamp-1 {
|
||
overflow: hidden;
|
||
display: -webkit-box;
|
||
-webkit-box-orient: vertical;
|
||
-webkit-line-clamp: 1;
|
||
}
|
||
|
||
.line-clamp-2 {
|
||
overflow: hidden;
|
||
display: -webkit-box;
|
||
-webkit-box-orient: vertical;
|
||
-webkit-line-clamp: 2;
|
||
}
|
||
|
||
.line-clamp-3 {
|
||
overflow: hidden;
|
||
display: -webkit-box;
|
||
-webkit-box-orient: vertical;
|
||
-webkit-line-clamp: 3;
|
||
}
|
||
|
||
/* ===== ГЛОБАЛЬНЫЕ АНИМАЦИИ ===== */
|
||
|
||
/* Fade in снизу */
|
||
@keyframes fade-in-up {
|
||
from {
|
||
opacity: 0;
|
||
transform: translateY(30px);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: translateY(0);
|
||
}
|
||
}
|
||
|
||
/* Fade in сверху */
|
||
@keyframes fade-in-down {
|
||
from {
|
||
opacity: 0;
|
||
transform: translateY(-30px);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: translateY(0);
|
||
}
|
||
}
|
||
|
||
/* Fade in слева */
|
||
@keyframes fade-in-left {
|
||
from {
|
||
opacity: 0;
|
||
transform: translateX(-30px);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: translateX(0);
|
||
}
|
||
}
|
||
|
||
/* Fade in справа */
|
||
@keyframes fade-in-right {
|
||
from {
|
||
opacity: 0;
|
||
transform: translateX(30px);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: translateX(0);
|
||
}
|
||
}
|
||
|
||
/* Scale in */
|
||
@keyframes scale-in {
|
||
from {
|
||
opacity: 0;
|
||
transform: scale(0.9);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: scale(1);
|
||
}
|
||
}
|
||
|
||
/* Bounce subtle */
|
||
@keyframes bounce-subtle {
|
||
0%, 100% {
|
||
transform: translateY(0);
|
||
}
|
||
50% {
|
||
transform: translateY(-5px);
|
||
}
|
||
}
|
||
|
||
/* Float */
|
||
@keyframes float {
|
||
0%, 100% {
|
||
transform: translateY(0);
|
||
}
|
||
50% {
|
||
transform: translateY(-10px);
|
||
}
|
||
}
|
||
|
||
/* Pulse glow */
|
||
@keyframes pulse-glow {
|
||
0%, 100% {
|
||
box-shadow: 0 0 5px rgba(59, 130, 246, 0.5);
|
||
}
|
||
50% {
|
||
box-shadow: 0 0 20px rgba(59, 130, 246, 0.8);
|
||
}
|
||
}
|
||
|
||
/* Slide in from bottom for cards */
|
||
@keyframes slide-up {
|
||
from {
|
||
opacity: 0;
|
||
transform: translateY(50px);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: translateY(0);
|
||
}
|
||
}
|
||
|
||
/* Классы анимаций */
|
||
.animate-fade-in-up {
|
||
animation: fade-in-up 0.6s ease-out forwards;
|
||
}
|
||
|
||
.animate-fade-in-down {
|
||
animation: fade-in-down 0.6s ease-out forwards;
|
||
}
|
||
|
||
.animate-fade-in-left {
|
||
animation: fade-in-left 0.6s ease-out forwards;
|
||
}
|
||
|
||
.animate-fade-in-right {
|
||
animation: fade-in-right 0.6s ease-out forwards;
|
||
}
|
||
|
||
.animate-scale-in {
|
||
animation: scale-in 0.5s ease-out forwards;
|
||
}
|
||
|
||
.animate-bounce-subtle {
|
||
animation: bounce-subtle 2s ease-in-out infinite;
|
||
}
|
||
|
||
.animate-float {
|
||
animation: float 3s ease-in-out infinite;
|
||
}
|
||
|
||
.animate-pulse-glow {
|
||
animation: pulse-glow 2s ease-in-out infinite;
|
||
}
|
||
|
||
.animate-slide-up {
|
||
animation: slide-up 0.6s ease-out forwards;
|
||
}
|
||
|
||
/* Задержки анимаций */
|
||
.animation-delay-100 { animation-delay: 0.1s; }
|
||
.animation-delay-200 { animation-delay: 0.2s; }
|
||
.animation-delay-300 { animation-delay: 0.3s; }
|
||
.animation-delay-400 { animation-delay: 0.4s; }
|
||
.animation-delay-500 { animation-delay: 0.5s; }
|
||
.animation-delay-600 { animation-delay: 0.6s; }
|
||
.animation-delay-700 { animation-delay: 0.7s; }
|
||
.animation-delay-800 { animation-delay: 0.8s; }
|
||
|
||
/* Начальное состояние для анимируемых элементов */
|
||
.animate-on-scroll {
|
||
opacity: 0;
|
||
}
|
||
|
||
/* Hover эффекты для карточек */
|
||
.card-hover {
|
||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
|
||
.card-hover:hover {
|
||
transform: translateY(-8px);
|
||
box-shadow: 0 20px 40px -15px rgba(0, 0, 0, 0.2);
|
||
}
|
||
|
||
/* Hover эффект для кнопок */
|
||
.btn-hover {
|
||
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
|
||
.btn-hover:hover {
|
||
transform: translateY(-2px);
|
||
box-shadow: 0 10px 20px -10px rgba(0, 0, 0, 0.3);
|
||
}
|
||
|
||
.btn-hover:active {
|
||
transform: translateY(0);
|
||
}
|
||
|
||
/* ===== СУЩЕСТВУЮЩИЕ АНИМАЦИИ ===== */
|
||
|
||
/* Анимации для модальных окон и уведомлений */
|
||
@keyframes modal-enter {
|
||
from {
|
||
opacity: 0;
|
||
transform: scale(0.95) translateY(-10px);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: scale(1) translateY(0);
|
||
}
|
||
}
|
||
|
||
@keyframes toast-enter {
|
||
from {
|
||
opacity: 0;
|
||
transform: translateX(100%);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: translateX(0);
|
||
}
|
||
}
|
||
|
||
.animate-modal-enter {
|
||
animation: modal-enter 0.2s ease-out;
|
||
}
|
||
|
||
.animate-toast-enter {
|
||
animation: toast-enter 0.3s ease-out;
|
||
} |