/* Additional custom styles beyond TailwindCSS */ /* Smooth scrolling for anchor links */ html { scroll-behavior: smooth; } /* Custom scrollbar */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: #f1f5f9; } ::-webkit-scrollbar-thumb { background: #94a3b8; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #64748b; } /* Animation classes */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideInLeft { from { opacity: 0; transform: translateX(-30px); } to { opacity: 1; transform: translateX(0); } } @keyframes slideInRight { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: translateX(0); } } .animate-fade-in-up { animation: fadeInUp 0.6s ease-out; } .animate-slide-in-left { animation: slideInLeft 0.6s ease-out; } .animate-slide-in-right { animation: slideInRight 0.6s ease-out; } /* Hover effects */ .hover-lift { transition: transform 0.3s ease, box-shadow 0.3s ease; } .hover-lift:hover { transform: translateY(-5px); box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); } /* Gradient text */ .gradient-text { background: linear-gradient(135deg, #3b82f6, #1d4ed8); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* Button animations */ .btn-primary { background: linear-gradient(135deg, #3b82f6, #2563eb); transition: all 0.3s ease; } .btn-primary:hover { background: linear-gradient(135deg, #2563eb, #1d4ed8); transform: translateY(-2px); box-shadow: 0 10px 20px rgba(59, 130, 246, 0.3); } /* Card hover effects */ .card-hover { transition: all 0.3s ease; } .card-hover:hover { transform: translateY(-8px); box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); } /* Loading animation */ @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .pulse { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } /* Custom focus styles */ .focus-ring:focus { outline: 2px solid transparent; outline-offset: 2px; box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.5); } /* Responsive typography */ @media (max-width: 640px) { h1 { font-size: 2rem; line-height: 2.5rem; } h2 { font-size: 1.75rem; line-height: 2.25rem; } } /* Dark mode support (if needed in future) */ @media (prefers-color-scheme: dark) { /* Dark mode styles can be added here */ } /* Print styles */ @media print { .no-print { display: none !important; } } /* Animated Hero Background */ .hero-animated-bg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden; z-index: -1; } .gradient-orb { position: absolute; border-radius: 50%; filter: blur(60px); opacity: 0.7; animation: float 20s infinite ease-in-out; } .gradient-orb-1 { width: 300px; height: 300px; background: linear-gradient(45deg, #3b82f6, #8b5cf6); top: 10%; left: 10%; animation-delay: 0s; } .gradient-orb-2 { width: 400px; height: 400px; background: linear-gradient(45deg, #06b6d4, #3b82f6); top: 50%; right: 10%; animation-delay: -5s; } .gradient-orb-3 { width: 250px; height: 250px; background: linear-gradient(45deg, #8b5cf6, #ec4899); bottom: 10%; left: 50%; animation-delay: -10s; } @keyframes float { 0%, 100% { transform: translate(0px, 0px) scale(1); } 25% { transform: translate(30px, -30px) scale(1.1); } 50% { transform: translate(-20px, 20px) scale(0.9); } 75% { transform: translate(-30px, -20px) scale(1.05); } } /* Animated particles */ .particles-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden; z-index: -1; } .particle { position: absolute; width: 4px; height: 4px; background: rgba(255, 255, 255, 0.8); border-radius: 50%; animation: particle-float 15s infinite linear; } @keyframes particle-float { 0% { transform: translateY(100vh) translateX(0px); opacity: 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { transform: translateY(-100px) translateX(100px); opacity: 0; } } /* Animated grid background */ .grid-background { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: linear-gradient(rgba(255, 255, 255, 0.1) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.1) 1px, transparent 1px); background-size: 50px 50px; animation: grid-move 20s linear infinite; z-index: -1; } @keyframes grid-move { 0% { transform: translate(0, 0); } 100% { transform: translate(50px, 50px); } } /* Hero section with animated background */ #home { position: relative; overflow: hidden; } /* Responsive adjustments */ @media (max-width: 768px) { .gradient-orb { filter: blur(40px); } .gradient-orb-1 { width: 200px; height: 200px; } .gradient-orb-2 { width: 250px; height: 250px; } .gradient-orb-3 { width: 150px; height: 150px; } }