@keyframes glow { from { box-shadow: 0 0 10px rgba(59, 130, 246, 0.3); } to { box-shadow: 0 0 40px rgba(59, 130, 246, 0.6); } } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } @keyframes slideUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } } @keyframes bounceSoft { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } @keyframes gradient { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } @keyframes typing { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* Gradient Text */ .gradient-text { background: linear-gradient(135deg, #3B82F6, #F59E0B, #3B82F6); background-size: 200% auto; -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; animation: gradient 4s ease infinite; } /* Shimmer Effect */ .shimmer { background: linear-gradient(90deg, transparent, rgba(255,255,255,0.5), transparent); background-size: 200% 100%; animation: shimmer 2s linear infinite; } /* Card Hover Effects */ .card-hover { transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); } .card-hover:hover { transform: translateY(-10px) scale(1.02); box-shadow: 0 30px 60px -15px rgba(59, 130, 246, 0.3); } /* Button Shine Effect */ .btn-shine { position: relative; overflow: hidden; } .btn-shine::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent); transition: left 0.6s; } .btn-shine:hover::before { left: 100%; } /* Glow Border */ .glow-border { position: relative; } .glow-border::before { content: ''; position: absolute; inset: -2px; background: linear-gradient(45deg, #3B82F6, #F59E0B, #3B82F6); border-radius: inherit; z-index: -1; opacity: 0; transition: opacity 0.3s; } .glow-border:hover::before { opacity: 1; animation: gradient 3s ease infinite; background-size: 200% auto; } /* Scroll Reveal */ .reveal { opacity: 0; transform: translateY(30px); transition: all 0.8s cubic-bezier(0.5, 0, 0, 1); } .reveal.active { opacity: 1; transform: translateY(0); } /* Noise Texture */ .noise::before { content: ''; position: absolute; inset: 0; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E"); opacity: 0.03; pointer-events: none; } /* Custom Scrollbar */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: #f1f5f9; border-radius: 10px; } ::-webkit-scrollbar-thumb { background: linear-gradient(180deg, #3B82F6, #0F172A); border-radius: 10px; } ::-webkit-scrollbar-thumb:hover { background: #1E40AF; } /* Message Animations */ .message-enter { animation: slideUp 0.4s ease-out; } /* Pulse Ring */ .pulse-ring { animation: pulse-ring 2s cubic-bezier(0.455, 0.03, 0.515, 0.955) infinite; } @keyframes pulse-ring { 0% { transform: scale(0.8); opacity: 1; } 50% { transform: scale(1); opacity: 0.5; } 100% { transform: scale(0.8); opacity: 1; } } /* Marquee */ .marquee-container { overflow: hidden; white-space: nowrap; } .marquee-content { display: inline-flex; animation: marquee 25s linear infinite; } .marquee-content:hover { animation-play-state: paused; } /* Floating shapes */ .floating-shape { position: absolute; border-radius: 50%; filter: blur(60px); opacity: 0.4; animation: float 8s ease-in-out infinite; }