/
bytevalue
/
optimal
Обзор
Документация
Войти
/
bytevalue
/
optimal
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/resources/static/css/base.css
432 строки
9 KB
bytevalue
Simple ml solution + trend difference
11 дек 2025, 16:23
11 дек 2025, 16:23
3ef7958
Код
Авторство
О чём код?
/* ===== ОСНОВНЫЕ ПЕРЕМЕННЫЕ ===== */ :root { /* Цветовая палитра темной темы */ --bg-primary: #0a0a0f; --bg-secondary: #121218; --bg-tertiary: #1a1a24; --bg-card: rgba(30, 30, 40, 0.8); /* Градиенты */ --gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%); --gradient-secondary: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); --gradient-accent: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); /* Цвета текста */ --text-primary: #ffffff; --text-secondary: #a0a0c0; --text-muted: #6c6c8c; /* Акцентные цвета */ --accent-primary: #667eea; --accent-secondary: #764ba2; --accent-success: #10b981; --accent-warning: #f59e0b; --accent-danger: #ef4444; --accent-info: #3b82f6; /* Эффекты стекла (glassmorphism) */ --glass-bg: rgba(255, 255, 255, 0.08); --glass-border: rgba(255, 255, 255, 0.12); --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.36); --glass-blur: blur(12px); /* Тени */ --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.2); --shadow-md: 0 8px 32px rgba(0, 0, 0, 0.36); --shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.48); /* Скругления */ --radius-sm: 8px; --radius-md: 12px; --radius-lg: 20px; --radius-xl: 24px; --radius-full: 9999px; /* Отступы */ --spacing-xs: 4px; --spacing-sm: 8px; --spacing-md: 16px; --spacing-lg: 24px; --spacing-xl: 32px; --spacing-xxl: 48px; /* Анимации */ --transition-fast: 150ms ease; --transition-normal: 300ms ease; --transition-slow: 500ms ease; --transition-bounce: 500ms cubic-bezier(0.68, -0.55, 0.265, 1.55); /* Цвета для графиков (добавлены) */ --chart-primary: #3b82f6; --chart-secondary: #8b5cf6; --chart-accent: #06b6d4; --chart-success: #10b981; --chart-warning: #f59e0b; --chart-danger: #ef4444; --chart-predicted: #ef4444; /* Адаптивные размеры графиков */ --chart-min-height: 300px; --chart-max-height: 600px; --chart-mobile-height: 280px; --chart-tablet-height: 400px; --chart-desktop-height: 500px; /* Градиенты для графиков */ --gradient-chart-bar: linear-gradient(135deg, #3b82f6 0%, #06b6d4 100%); --gradient-chart-line: linear-gradient(135deg, #8b5cf6 0%, #3b82f6 100%); /* Эффекты стекла для графиков */ --glass-chart-bg: rgba(30, 33, 46, 0.85); --glass-chart-border: rgba(255, 255, 255, 0.1); /* Тени для графиков */ --chart-shadow: 0 12px 40px rgba(0, 0, 0, 0.35), 0 4px 16px rgba(0, 0, 0, 0.25); --chart-shadow-hover: 0 16px 48px rgba(0, 0, 0, 0.4), 0 6px 20px rgba(0, 0, 0, 0.3); } /* ===== СБРОС СТИЛЕЙ ===== */ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } html { font-size: 16px; scroll-behavior: smooth; } body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; font-size: 14px; line-height: 1.6; color: var(--text-primary); background: var(--bg-primary); overflow-x: hidden; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* ===== АНИМАЦИИ ===== */ @keyframes float { 0%, 100% { transform: translateY(0) scale(1); } 50% { transform: translateY(-20px) scale(1.05); } } @keyframes pulse { 0% { transform: scale(1); opacity: 0.4; } 50% { transform: scale(1.5); opacity: 0.1; } 100% { transform: scale(1); opacity: 0.4; } } @keyframes messageAppear { to { opacity: 1; transform: translateY(0); } } @keyframes bubbleExpand { from { transform: scale(0.95); } to { transform: scale(1); } } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes typingBounce { 0%, 80%, 100% { transform: scale(0); opacity: 0.5; } 40% { transform: scale(1); opacity: 1; } } @keyframes spin { to { transform: rotate(360deg); } } @keyframes structuredAppear { from { opacity: 0; transform: translateY(15px) scale(0.98); } to { opacity: 1; transform: translateY(0) scale(1); } } @keyframes pieSliceAppear { 0% { opacity: 0; transform: scale(0) rotate(-180deg); } 100% { opacity: 1; transform: scale(1) rotate(0deg); } } @keyframes lineDraw { from { stroke-dasharray: 1000; stroke-dashoffset: 1000; } to { stroke-dasharray: 1000; stroke-dashoffset: 0; } } @keyframes lineDrawPredicted { from { stroke-dasharray: 1000; stroke-dashoffset: 1000; } to { stroke-dasharray: 1000; stroke-dashoffset: 0; } } @keyframes barRise { from { transform: scaleY(0); opacity: 0; } to { transform: scaleY(1); opacity: 1; } } @keyframes chartLoading { 0% { transform: scale(0.95); opacity: 0; } 50% { transform: scale(1); opacity: 1; } 100% { transform: scale(0.95); opacity: 0; } } /* НОВЫЕ АНИМАЦИИ ДЛЯ СОРТИРОВКИ ТАБЛИЦ */ @keyframes rowAppear { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } @keyframes sortButtonBounce { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.2); } } @keyframes columnHighlight { 0% { background-color: rgba(59, 130, 246, 0); } 50% { background-color: rgba(59, 130, 246, 0.1); } 100% { background-color: rgba(59, 130, 246, 0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideInRight { from { transform: translateX(10px); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* ===== ГРАДИЕНТНЫЙ ФОН ===== */ .gradient-bg { position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: -1; overflow: hidden; } .gradient-circle { position: absolute; border-radius: 50%; filter: blur(80px); opacity: 0.15; animation: float 20s infinite ease-in-out; } .gradient-1 { width: 600px; height: 600px; background: var(--gradient-primary); top: -300px; left: -200px; animation-delay: 0s; } .gradient-2 { width: 500px; height: 500px; background: var(--gradient-secondary); bottom: -250px; right: -150px; animation-delay: -5s; } .gradient-3 { width: 400px; height: 400px; background: var(--gradient-accent); top: 50%; left: 70%; animation-delay: -10s; } /* ===== GLASSMORPHISM ЭФФЕКТ ===== */ .glass { background: var(--glass-bg); backdrop-filter: var(--glass-blur); -webkit-backdrop-filter: var(--glass-blur); border: 1px solid var(--glass-border); box-shadow: var(--glass-shadow); } /* ===== СКРОЛЛБАР ===== */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.03); border-radius: 4px; } ::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.1); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.2); } /* ===== УТИЛИТЫ ===== */ .hidden { display: none !important; } .visible { display: flex !important; } .fade-in { animation: fadeIn 0.3s ease; } .slide-in-up { animation: slideUp 0.3s ease; } .glow { box-shadow: 0 0 20px rgba(102, 126, 234, 0.3); } .gradient-text { background: var(--gradient-primary); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* ===== ОСОБЫЕ СТИЛИ ДЛЯ ГРАФИКОВ ===== */ .chart-performance-optimized { will-change: transform, opacity; transform: translateZ(0); backface-visibility: hidden; -webkit-font-smoothing: subpixel-antialiased; } /* Для плавного скролла в графиках */ .chart-scroll-container { scroll-behavior: smooth; } /* Адаптивные медиа-запросы */ @media (hover: none) and (pointer: coarse) { .chart-bar:hover, .pie-slice:hover, .data-point:hover, .line-point:hover, .line-point-predicted:hover { transform: none !important; } .chart-tooltip { display: none !important; } } /* Поддержка темной темы с высоким контрастом */ @media (prefers-contrast: high) { .chart-grid { stroke: rgba(255, 255, 255, 0.15); } .chart-axis { stroke: rgba(255, 255, 255, 0.3); } .line-path-predicted { stroke: #ff0000; } .line-point-predicted { stroke: #ffffff; fill: #ff0000; } } /* Поддержка редукции движения */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } .pie-slice, .line-path, .line-path-predicted, .chart-bar { animation: none !important; } } * { -webkit-tap-highlight-color: transparent; /* Убираем синее подсвечивание при тапе на мобильных */ }