@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap'); @import "tailwindcss"; @theme inline { --color-navy: #1B2A4A; --color-navy-light: #2A3D66; --color-navy-dark: #111D36; --color-orange: #E8772E; --color-orange-hover: #D06522; --color-orange-light: #F5A623; --color-stone: #8B7355; --color-stone-light: #C4A882; --color-stone-bg: #F5F0EA; --color-bg: #F7F8FA; --color-bg-white: #FFFFFF; --color-bg-card: #FFFFFF; --color-bg-muted: #F0F2F5; --color-text: #1A1A2E; --color-text-light: #6B7280; --color-text-muted: #9CA3AF; --color-border: #E5E7EB; --color-border-light: #F3F4F6; --color-success: #10B981; --color-warning: #F59E0B; --color-error: #EF4444; --color-primary: #E8772E; --color-primary-hover: #D06522; --color-dark: #0B0F19; --color-dark-bg: #0B0F19; --color-dark-light: #1A1F2E; --color-dark-lighter: #252A3A; --color-dark-border: #2A2F3F; --font-sans: "Inter", sans-serif; } body { background: var(--color-bg); color: var(--color-text); font-family: var(--font-sans); } html { scroll-behavior: smooth; } /* Gradient utilities (used by login, admin, candidature pages) */ .gradient-text { background: linear-gradient(135deg, #6D5EF6, #9D8FF9); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .gradient-bg { background: linear-gradient(135deg, #6D5EF6, #9D8FF9); } /* Card hover */ .card-hover { transition: transform 0.3s ease, box-shadow 0.3s ease; } .card-hover:hover { transform: translateY(-4px); box-shadow: 0 12px 32px rgba(27, 42, 74, 0.12); } /* Orange CTA glow */ @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 16px rgba(232, 119, 46, 0.3); } 50% { box-shadow: 0 0 32px rgba(232, 119, 46, 0.5); } } .pulse-glow { animation: pulse-glow 2.5s ease-in-out infinite; } /* Selection */ ::selection { background: rgba(27, 42, 74, 0.15); color: var(--color-text); } /* Skip to content */ .skip-to-content { position: absolute; left: -9999px; z-index: 999; padding: 0.75rem 1.5rem; background: var(--color-navy); color: #ffffff; font-weight: 600; border-radius: 0 0 8px 0; text-decoration: none; } .skip-to-content:focus { left: 0; top: 0; } /* Focus visible */ *:focus-visible { outline: 2px solid var(--color-orange); outline-offset: 2px; } /* Scrollbar */ ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: var(--color-bg); } ::-webkit-scrollbar-thumb { background: var(--color-border); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: var(--color-navy); } /* ================================================ HERO ANIMATIONS - Staggered text reveal ================================================ */ @keyframes hero-text-appear { 0% { opacity: 0; transform: translateY(30px); filter: blur(4px); } 100% { opacity: 1; transform: translateY(0); filter: blur(0); } } .animate-hero-text-1 { opacity: 0; animation: hero-text-appear 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.1s forwards; } .animate-hero-text-2 { opacity: 0; animation: hero-text-appear 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.3s forwards; } .animate-hero-text-3 { opacity: 0; animation: hero-text-appear 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.5s forwards; } /* ================================================ FADE IN ANIMATIONS ================================================ */ @keyframes fade-in-down { 0% { opacity: 0; transform: translateY(-20px); } 100% { opacity: 1; transform: translateY(0); } } @keyframes fade-in-up { 0% { opacity: 0; transform: translateY(20px); } 100% { opacity: 1; transform: translateY(0); } } .animate-fade-in-down { opacity: 0; animation: fade-in-down 0.6s ease-out forwards; } .animate-fade-in-up { opacity: 0; animation: fade-in-up 0.6s ease-out forwards; } /* Animation delays */ .animation-delay-200 { animation-delay: 200ms; } .animation-delay-400 { animation-delay: 400ms; } .animation-delay-600 { animation-delay: 600ms; } .animation-delay-800 { animation-delay: 800ms; } .animation-delay-1000 { animation-delay: 1000ms; } /* ================================================ UNDERLINE GROW ANIMATION ================================================ */ @keyframes underline-grow { 0% { width: 0; } 100% { width: 100%; } } .animate-underline-grow { animation: underline-grow 1s cubic-bezier(0.16, 1, 0.3, 1) 0.8s forwards; width: 0; } /* ================================================ BOUNCE SLOW (scroll indicator) ================================================ */ @keyframes bounce-slow { 0%, 100% { transform: translate(-50%, 0); } 50% { transform: translate(-50%, 8px); } } .animate-bounce-slow { animation: bounce-slow 2s ease-in-out infinite; } /* ================================================ FLOATING ELEMENTS ================================================ */ @keyframes float-slow { 0%, 100% { transform: translateY(0) scale(1); opacity: 0.4; } 50% { transform: translateY(-20px) scale(1.1); opacity: 0.7; } } @keyframes float-medium { 0%, 100% { transform: translateY(0) translateX(0); opacity: 0.3; } 33% { transform: translateY(-15px) translateX(10px); opacity: 0.6; } 66% { transform: translateY(-25px) translateX(-5px); opacity: 0.5; } } @keyframes float-fast { 0%, 100% { transform: translateY(0) rotate(0deg); opacity: 0.3; } 50% { transform: translateY(-12px) rotate(180deg); opacity: 0.6; } } .animate-float-slow { animation: float-slow 6s ease-in-out infinite; } .animate-float-medium { animation: float-medium 5s ease-in-out infinite; } .animate-float-fast { animation: float-fast 4s ease-in-out infinite; } /* ================================================ ROCKET FLAME ANIMATION ================================================ */ @keyframes flame-flicker { 0%, 100% { transform: scaleY(1) scaleX(1); opacity: 0.9; } 25% { transform: scaleY(1.1) scaleX(0.95); opacity: 0.8; } 50% { transform: scaleY(0.9) scaleX(1.05); opacity: 1; } 75% { transform: scaleY(1.05) scaleX(0.97); opacity: 0.85; } } .animate-flame { transform-origin: center top; animation: flame-flicker 0.3s ease-in-out infinite; } /* ================================================ PARTICLE ANIMATIONS (rocket trail) ================================================ */ @keyframes particle-1 { 0%, 100% { transform: translateY(0) scale(1); opacity: 0.6; } 50% { transform: translateY(8px) scale(0.5); opacity: 0; } } @keyframes particle-2 { 0%, 100% { transform: translateY(0) scale(1); opacity: 0.4; } 50% { transform: translateY(12px) scale(0.3); opacity: 0; } } @keyframes particle-3 { 0%, 100% { transform: translateY(0) scale(1); opacity: 0.5; } 50% { transform: translateY(10px) scale(0.4); opacity: 0; } } .animate-particle-1 { animation: particle-1 1.2s ease-in-out infinite; } .animate-particle-2 { animation: particle-2 1.5s ease-in-out infinite 0.2s; } .animate-particle-3 { animation: particle-3 1.3s ease-in-out infinite 0.4s; } /* ================================================ SCROLL REVEAL ANIMATIONS ================================================ */ .scroll-reveal-up, .scroll-reveal-down, .scroll-reveal-left, .scroll-reveal-right, .scroll-reveal-fade { opacity: 0; transition-property: opacity, transform; transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); } .scroll-reveal-up { transform: translateY(40px); } .scroll-reveal-down { transform: translateY(-40px); } .scroll-reveal-left { transform: translateX(-40px); } .scroll-reveal-right { transform: translateX(40px); } .scroll-reveal-fade { transform: scale(0.95); } /* Revealed state */ .scroll-revealed { opacity: 1 !important; transform: translateY(0) translateX(0) scale(1) !important; } /* ================================================ ANIMATED COUNTER GLOW ================================================ */ @keyframes stat-glow { 0%, 100% { text-shadow: 0 0 10px rgba(232, 119, 46, 0.3); } 50% { text-shadow: 0 0 20px rgba(232, 119, 46, 0.6); } } .animate-stat-glow { animation: stat-glow 2s ease-in-out infinite; }