/* Custom CSS for animations and effects not covered by Tailwind */ /* Smooth scrolling behavior */ html { scroll-behavior: smooth; } /* Hero section animations */ .hero-title, .hero-subtitle, .hero-cta, .scroll-indicator { animation: fadeInUp 0.8s ease-out forwards; } .hero-title { animation-delay: 0.2s; } .hero-subtitle { animation-delay: 0.4s; } .hero-cta { animation-delay: 0.6s; } .scroll-indicator { animation-delay: 0.8s; } /* Section animations on scroll */ .section-title, .section-subtitle { animation: fadeInUp 0.6s ease-out forwards; } .section-subtitle { animation-delay: 0.2s; } /* Project card stagger animations */ .project-card:nth-child(1) { animation: fadeInUp 0.6s ease-out 0.2s forwards; } .project-card:nth-child(2) { animation: fadeInUp 0.6s ease-out 0.4s forwards; } .project-card:nth-child(3) { animation: fadeInUp 0.6s ease-out 0.6s forwards; } /* About section animations */ .about-content { animation: fadeInLeft 0.8s ease-out forwards; } .about-image { animation: fadeInRight 0.8s ease-out forwards; } /* Stat counter animations */ .stat-item:nth-child(1) { animation: fadeInUp 0.5s ease-out 0.1s forwards; } .stat-item:nth-child(2) { animation: fadeInUp 0.5s ease-out 0.2s forwards; } .stat-item:nth-child(3) { animation: fadeInUp 0.5s ease-out 0.3s forwards; } .stat-item:nth-child(4) { animation: fadeInUp 0.5s ease-out 0.4s forwards; } /* CTA box animation */ .cta-box { animation: fadeInScale 0.6s ease-out forwards; } /* Keyframe animations */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInLeft { from { opacity: 0; transform: translateX(-30px); } to { opacity: 1; transform: translateX(0); } } @keyframes fadeInRight { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: translateX(0); } } @keyframes fadeInScale { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } /* Custom hover effects for navigation links */ .nav-link { position: relative; transition: color 0.3s ease; } .nav-link::after { content: ''; position: absolute; width: 0; height: 1px; bottom: -2px; left: 0; background-color: currentColor; transition: width 0.3s ease; } .nav-link:hover::after { width: 100%; } /* Mobile menu transitions */ .mobile-menu { transform: translateY(-100%); transition: transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94); } .mobile-menu.active { transform: translateY(0); } /* Overlay fade effect */ .overlay { opacity: 0; pointer-events: none; transition: opacity 0.3s ease; } .overlay.active { opacity: 1; pointer-events: auto; } /* Custom scrollbar */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: #f1f1f1; } ::-webkit-scrollbar-thumb { background: #888; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #555; } /* Button hover effects */ .btn-primary { position: relative; overflow: hidden; z-index: 1; } .btn-primary::before { content: ''; position: absolute; top: 0; left: 0; width: 0; height: 100%; background: rgba(255, 255, 255, 0.1); transition: width 0.3s ease; z-index: -1; } .btn-primary:hover::before { width: 100%; } /* Custom transition utilities */ .transition-smooth { transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94); } /* Loading animation */ .loading-dots { display: inline-block; } .loading-dots::after { content: '...'; animation: dots 1.5s steps(4, end) infinite; } @keyframes dots { 0%, 20% { content: '.'; } 40% { content: '..'; } 60%, 100% { content: '...'; } } /* Form focus styles */ .form-input { transition: all 0.3s ease; } .form-input:focus { transform: translateY(-2px); box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); } /* Custom animations for work page tabs */ .tab-content { display: none; opacity: 0; transform: translateY(20px); transition: all 0.3s ease; } .tab-content.active { display: block; opacity: 1; transform: translateY(0); } /* Project detail modal enhancements */ .modal-backdrop { backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); } /* Smooth parallax effect */ .parallax-bg { will-change: transform; transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94); }