/* Custom animations and styles */ @keyframes float { 0%, 100% { transform: translateY(0px); } 50% { transform: translateY(-20px); } } @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 20px rgba(16, 185, 129, 0.5); } 50% { box-shadow: 0 0 40px rgba(16, 185, 129, 0.8); } } .animate-float { animation: float 6s ease-in-out infinite; } .animate-pulse-glow { animation: pulse-glow 2s ease-in-out infinite; } /* Smooth scrolling */ html { scroll-behavior: smooth; } /* Custom scrollbar */ ::-webkit-scrollbar { width: 10px; } ::-webkit-scrollbar-track { background: #0f172a; } ::-webkit-scrollbar-thumb { background: linear-gradient(to bottom, #10b981, #3b82f6); border-radius: 5px; } ::-webkit-scrollbar-thumb:hover { background: linear-gradient(to bottom, #34d399, #60a5fa); } /* Timeline animations */ .timeline-item { position: relative; opacity: 0; transform: translateY(50px); transition: all 0.6s ease; } .timeline-item.visible { opacity: 1; transform: translateY(0); } /* Service card hover effects */ .service-card { opacity: 0; transform: translateY(30px); transition: all 0.6s ease; } .service-card.visible { opacity: 1; transform: translateY(0); } .service-card:hover { box-shadow: 0 20px 40px rgba(16, 185, 129, 0.3); } /* Skill bar animation */ .skill-bar .bg-gradient-to-r { width: 0; transition: width 2s ease; } .skill-bar.visible .bg-gradient-to-r { width: var(--skill-width); } /* Shockwave canvas */ #shockwaveCanvas { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; } /* Glass morphism effect */ .glass { background: rgba(255, 255, 255, 0.05); backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.1); } /* Text gradient animation */ @keyframes gradient-shift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } .animate-gradient { background-size: 200% 200%; animation: gradient-shift 3s ease infinite; } /* Loading animation */ .loading { display: inline-block; width: 20px; height: 20px; border: 3px solid rgba(255, 255, 255, 0.3); border-radius: 50%; border-top-color: #10b981; animation: spin 1s ease-in-out infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* Focus states for accessibility */ button:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible { outline: 2px solid #10b981; outline-offset: 2px; } /* Mobile menu animation */ .mobile-menu { transform: translateX(-100%); transition: transform 0.3s ease; } .mobile-menu.open { transform: translateX(0); } /* FAQ animations */ .faq-item { transition: all 0.3s ease; } .faq-item:hover { background: rgba(16, 185, 129, 0.1); } .faq-content { transition: all 0.3s ease; } /* Custom checkbox and radio buttons */ input[type="checkbox"], input[type="radio"] { appearance: none; width: 20px; height: 20px; border: 2px solid #10b981; border-radius: 4px; cursor: pointer; position: relative; transition: all 0.3s ease; } input[type="checkbox"]:checked, input[type="radio"]:checked { background: #10b981; } input[type="checkbox"]:checked::after, input[type="radio"]:checked::after { content: '✓'; position: absolute; color: white; font-size: 14px; top: 50%; left: 50%; transform: translate(-50%, -50%); } /* Responsive adjustments */ @media (max-width: 768px) { .chat-window { width: 100%; right: -10px; left: -10px; } .timeline-item { margin-left: 20px; } .service-card { margin-bottom: 20px; } } /* Parallax effect */ .parallax { will-change: transform; } /* Neon glow effect */ .neon-glow { text-shadow: 0 0 10px rgba(16, 185, 129, 0.8), 0 0 20px rgba(16, 185, 129, 0.6), 0 0 30px rgba(16, 185, 129, 0.4); } /* Success message animation */ @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } .success-message { animation: slideIn 0.3s ease-out; }