/** * UI Enhancements V2 - Modern Improvements * Advanced visual effects, micro-interactions, and polish */ /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🎨 GLASSMORPHISM EFFECTS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ .glass-card { background: rgba(255, 255, 255, 0.7); backdrop-filter: blur(20px) saturate(180%); -webkit-backdrop-filter: blur(20px) saturate(180%); border: 1px solid rgba(20, 184, 166, 0.18); box-shadow: 0 8px 32px rgba(13, 115, 119, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.5); } .glass-card-dark { background: rgba(19, 46, 42, 0.7); backdrop-filter: blur(20px) saturate(180%); -webkit-backdrop-filter: blur(20px) saturate(180%); border: 1px solid rgba(45, 212, 191, 0.25); } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✨ GRADIENT ANIMATIONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ .gradient-animated { background: linear-gradient( 135deg, var(--teal-light), var(--cyan), var(--teal), var(--cyan-light) ); background-size: 300% 300%; animation: gradientShift 8s ease infinite; } @keyframes gradientShift { 0%, 100% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } } .gradient-border { position: relative; background: var(--bg-card); border-radius: var(--radius-lg); } .gradient-border::before { content: ''; position: absolute; inset: -2px; background: linear-gradient(135deg, var(--teal-light), var(--cyan), var(--teal)); border-radius: inherit; z-index: -1; opacity: 0; transition: opacity 0.3s; } .gradient-border:hover::before { opacity: 1; } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🎯 MICRO-INTERACTIONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ .hover-lift { transition: transform 0.2s ease, box-shadow 0.2s ease; } .hover-lift:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); } .hover-scale { transition: transform 0.2s ease; } .hover-scale:hover { transform: scale(1.05); } .hover-glow { position: relative; transition: all 0.3s ease; } .hover-glow::after { content: ''; position: absolute; inset: -4px; background: radial-gradient(circle, rgba(20, 184, 166, 0.3), transparent 70%); border-radius: inherit; opacity: 0; z-index: -1; transition: opacity 0.3s; } .hover-glow:hover::after { opacity: 1; } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📊 ENHANCED STATS CARDS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ .stat-card-enhanced { position: relative; padding: var(--space-4); background: var(--bg-card); border: 1px solid var(--border-light); border-radius: var(--radius-lg); overflow: hidden; transition: all 0.3s ease; } .stat-card-enhanced::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--gradient-primary); transform: scaleX(0); transform-origin: left; transition: transform 0.3s ease; } .stat-card-enhanced:hover::before { transform: scaleX(1); } .stat-card-enhanced:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); border-color: var(--teal-light); } .stat-icon-wrapper { width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, rgba(45, 212, 191, 0.1), rgba(34, 211, 238, 0.1)); border-radius: var(--radius-md); margin-bottom: var(--space-3); } .stat-value-animated { font-size: var(--text-3xl); font-weight: 700; background: var(--gradient-primary); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔘 ENHANCED BUTTONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ .btn-gradient { position: relative; background: var(--gradient-primary); color: white; border: none; padding: var(--space-3) var(--space-5); border-radius: var(--radius-md); font-weight: 600; overflow: hidden; transition: all 0.3s ease; } .btn-gradient::before { content: ''; position: absolute; inset: 0; background: linear-gradient(135deg, var(--cyan-light), var(--teal-light)); opacity: 0; transition: opacity 0.3s; } .btn-gradient:hover::before { opacity: 1; } .btn-gradient:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(20, 184, 166, 0.3); } .btn-gradient span { position: relative; z-index: 1; } .btn-outline-gradient { position: relative; background: transparent; color: var(--teal); border: 2px solid transparent; padding: var(--space-2) var(--space-4); border-radius: var(--radius-md); font-weight: 600; background-clip: padding-box; transition: all 0.3s ease; } .btn-outline-gradient::before { content: ''; position: absolute; inset: -2px; background: var(--gradient-primary); border-radius: inherit; z-index: -1; } .btn-outline-gradient:hover { color: white; background: var(--gradient-primary); } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📈 ANIMATED CHARTS & GRAPHS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ .chart-container { position: relative; background: var(--bg-card); border: 1px solid var(--border-light); border-radius: var(--radius-lg); padding: var(--space-4); overflow: hidden; } .chart-container::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 100%; background: linear-gradient( 180deg, rgba(45, 212, 191, 0.03) 0%, transparent 100% ); pointer-events: none; } .sparkline { display: inline-block; width: 60px; height: 24px; } .sparkline path { stroke: var(--teal); stroke-width: 2; fill: none; stroke-linecap: round; stroke-linejoin: round; animation: drawLine 1s ease-out; } @keyframes drawLine { from { stroke-dasharray: 1000; stroke-dashoffset: 1000; } to { stroke-dasharray: 1000; stroke-dashoffset: 0; } } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🎭 LOADING STATES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ .skeleton-enhanced { background: linear-gradient( 90deg, var(--mint) 0%, var(--aqua-light) 50%, var(--mint) 100% ); background-size: 200% 100%; animation: shimmerEnhanced 1.5s ease-in-out infinite; border-radius: var(--radius-sm); } @keyframes shimmerEnhanced { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } .pulse-dot { width: 8px; height: 8px; background: var(--teal); border-radius: 50%; animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.5; transform: scale(1.2); } } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🏷️ ENHANCED BADGES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ .badge-gradient { background: var(--gradient-primary); color: white; padding: 4px 12px; border-radius: var(--radius-full); font-size: var(--text-xs); font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; box-shadow: 0 2px 8px rgba(20, 184, 166, 0.3); } .badge-pulse { position: relative; animation: badgePulse 2s ease-in-out infinite; } @keyframes badgePulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(20, 184, 166, 0.7); } 50% { box-shadow: 0 0 0 8px rgba(20, 184, 166, 0); } } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📱 MOBILE OPTIMIZATIONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ @media (max-width: 768px) { .glass-card { backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); } .hover-lift:hover { transform: none; } .stat-card-enhanced:hover { transform: none; } } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🌙 DARK MODE ENHANCEMENTS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ [data-theme="dark"] .glass-card { background: rgba(19, 46, 42, 0.7); border-color: rgba(45, 212, 191, 0.25); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(45, 212, 191, 0.1); } [data-theme="dark"] .stat-icon-wrapper { background: linear-gradient(135deg, rgba(45, 212, 191, 0.15), rgba(34, 211, 238, 0.15)); } [data-theme="dark"] .chart-container::before { background: linear-gradient( 180deg, rgba(45, 212, 191, 0.05) 0%, transparent 100% ); } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ⚡ PERFORMANCE OPTIMIZATIONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ @media (prefers-reduced-motion: reduce) { .gradient-animated, .hover-lift, .hover-scale, .hover-glow, .skeleton-enhanced, .pulse-dot, .badge-pulse, .sparkline path { animation: none !important; transition: none !important; } } /* GPU acceleration for smooth animations */ .hover-lift, .hover-scale, .stat-card-enhanced, .btn-gradient { will-change: transform; transform: translateZ(0); backface-visibility: hidden; }