@import "tailwindcss"; @import "tw-animate-css"; @custom-variant dark (&:is(.dark *)); @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); --font-sans: var(--font-geist-sans); --font-mono: var(--font-geist-mono); --color-sidebar-ring: var(--sidebar-ring); --color-sidebar-border: var(--sidebar-border); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar: var(--sidebar); --color-chart-5: var(--chart-5); --color-chart-4: var(--chart-4); --color-chart-3: var(--chart-3); --color-chart-2: var(--chart-2); --color-chart-1: var(--chart-1); --color-ring: var(--ring); --color-input: var(--input); --color-border: var(--border); --color-destructive: var(--destructive); --color-accent-foreground: var(--accent-foreground); --color-accent: var(--accent); --color-muted-foreground: var(--muted-foreground); --color-muted: var(--muted); --color-secondary-foreground: var(--secondary-foreground); --color-secondary: var(--secondary); --color-primary-foreground: var(--primary-foreground); --color-primary: var(--primary); --color-popover-foreground: var(--popover-foreground); --color-popover: var(--popover); --color-card-foreground: var(--card-foreground); --color-card: var(--card); --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); } :root { --radius: 0.625rem; --background: oklch(1 0 0); --foreground: oklch(0.145 0 0); --card: oklch(1 0 0); --card-foreground: oklch(0.145 0 0); --popover: oklch(1 0 0); --popover-foreground: oklch(0.145 0 0); --primary: oklch(0.205 0 0); --primary-foreground: oklch(0.985 0 0); --secondary: oklch(0.97 0 0); --secondary-foreground: oklch(0.205 0 0); --muted: oklch(0.97 0 0); --muted-foreground: oklch(0.556 0 0); --accent: oklch(0.97 0 0); --accent-foreground: oklch(0.205 0 0); --destructive: oklch(0.577 0.245 27.325); --border: oklch(0.922 0 0); --input: oklch(0.922 0 0); --ring: oklch(0.708 0 0); --chart-1: oklch(0.646 0.222 41.116); --chart-2: oklch(0.6 0.118 184.704); --chart-3: oklch(0.398 0.07 227.392); --chart-4: oklch(0.828 0.189 84.429); --chart-5: oklch(0.769 0.188 70.08); --sidebar: oklch(0.985 0 0); --sidebar-foreground: oklch(0.145 0 0); --sidebar-primary: oklch(0.205 0 0); --sidebar-primary-foreground: oklch(0.985 0 0); --sidebar-accent: oklch(0.97 0 0); --sidebar-accent-foreground: oklch(0.205 0 0); --sidebar-border: oklch(0.922 0 0); --sidebar-ring: oklch(0.708 0 0); } .dark { --background: oklch(0.145 0 0); --foreground: oklch(0.985 0 0); --card: oklch(0.205 0 0); --card-foreground: oklch(0.985 0 0); --popover: oklch(0.205 0 0); --popover-foreground: oklch(0.985 0 0); --primary: oklch(0.922 0 0); --primary-foreground: oklch(0.205 0 0); --secondary: oklch(0.269 0 0); --secondary-foreground: oklch(0.985 0 0); --muted: oklch(0.269 0 0); --muted-foreground: oklch(0.708 0 0); --accent: oklch(0.269 0 0); --accent-foreground: oklch(0.985 0 0); --destructive: oklch(0.704 0.191 22.216); --border: oklch(1 0 0 / 10%); --input: oklch(1 0 0 / 15%); --ring: oklch(0.556 0 0); --chart-1: oklch(0.488 0.243 264.376); --chart-2: oklch(0.696 0.17 162.48); --chart-3: oklch(0.769 0.188 70.08); --chart-4: oklch(0.627 0.265 303.9); --chart-5: oklch(0.645 0.246 16.439); --sidebar: oklch(0.205 0 0); --sidebar-foreground: oklch(0.985 0 0); --sidebar-primary: oklch(0.488 0.243 264.376); --sidebar-primary-foreground: oklch(0.985 0 0); --sidebar-accent: oklch(0.269 0 0); --sidebar-accent-foreground: oklch(0.985 0 0); --sidebar-border: oklch(1 0 0 / 10%); --sidebar-ring: oklch(0.556 0 0); } @layer base { * { @apply border-border outline-ring/50; } body { @apply bg-background text-foreground; } } /* Custom animations */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideUp { 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); } } @keyframes scaleUp { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } @keyframes shimmer { 0% { background-position: -200% center; } 100% { background-position: 200% center; } } /* Heartbeat animation for buttons */ @keyframes heartbeat { 0%, 100% { transform: scale(1); } 10% { transform: scale(1.05); } 20% { transform: scale(1); } 30% { transform: scale(1.05); } 40% { transform: scale(1); } } /* Animation utility classes */ .animate-fade-in { animation: fadeIn 0.6s ease-out; } .animate-slide-up { animation: slideUp 0.6s ease-out; } .animate-slide-in-left { animation: slideInLeft 0.6s ease-out; } .animate-slide-in-right { animation: slideInRight 0.6s ease-out; } .animate-scale-up { animation: scaleUp 0.5s ease-out; } /* Heartbeat animation for call-to-action buttons */ .animate-heartbeat { animation: heartbeat 2s ease-in-out infinite; } /* Stagger delays for sequential animations */ .animate-delay-100 { animation-delay: 0.1s; animation-fill-mode: both; } .animate-delay-200 { animation-delay: 0.2s; animation-fill-mode: both; } .animate-delay-300 { animation-delay: 0.3s; animation-fill-mode: both; } .animate-delay-400 { animation-delay: 0.4s; animation-fill-mode: both; } .animate-delay-500 { animation-delay: 0.5s; animation-fill-mode: both; } .animate-delay-600 { animation-delay: 0.6s; animation-fill-mode: both; } /* Enhanced hover effects */ .hover-lift { transition: transform 0.3s ease, box-shadow 0.3s ease; } .hover-lift:hover { transform: translateY(-8px); box-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); } /* Gradient shimmer effect */ .gradient-shimmer { background-size: 200% auto; animation: shimmer 3s linear infinite; } /* ======================================== GRADIENT UTILITIES ======================================== */ /* Gradient Backgrounds - Blue/Pink in light, Blue/Purple in dark */ .gradient-bg-primary { background: linear-gradient(135deg, #3B82F6 0%, #EC4899 100%); } .dark .gradient-bg-primary { background: linear-gradient(135deg, #3B82F6 0%, #8B5CF6 100%); } .gradient-bg-secondary { background: linear-gradient(135deg, #60A5FA 0%, #F472B6 100%); } .dark .gradient-bg-secondary { background: linear-gradient(135deg, #60A5FA 0%, #A78BFA 100%); } .gradient-bg-accent { background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); } .dark .gradient-bg-accent { background: linear-gradient(135deg, #3b82f6 0%, #06b6d4 100%); } .gradient-bg-radial { background: radial-gradient( circle at top right, rgba(102, 126, 234, 0.15), transparent 50% ), radial-gradient( circle at bottom left, rgba(118, 75, 162, 0.15), transparent 50% ); } .dark .gradient-bg-radial { background: radial-gradient( circle at top right, rgba(76, 81, 191, 0.2), transparent 50% ), radial-gradient( circle at bottom left, rgba(85, 60, 154, 0.2), transparent 50% ); } .gradient-bg-mesh { background: linear-gradient( 135deg, #667eea 0%, #764ba2 25%, #f093fb 50%, #f5576c 75%, #4facfe 100% ); background-size: 400% 400%; animation: gradientShift 15s ease infinite; } .dark .gradient-bg-mesh { background: linear-gradient( 135deg, #4c51bf 0%, #553c9a 25%, #c471ed 50%, #c94b4b 75%, #3b82f6 100% ); background-size: 400% 400%; animation: gradientShift 15s ease infinite; } @keyframes gradientShift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } /* Gradient Page Backgrounds - Enhanced visibility */ .gradient-page-bg { background: linear-gradient( 135deg, rgba(102, 126, 234, 0.12) 0%, rgba(240, 242, 255, 0.8) 25%, rgba(255, 240, 245, 0.8) 50%, rgba(245, 240, 255, 0.8) 75%, rgba(118, 75, 162, 0.12) 100% ); min-height: 100vh; } .dark .gradient-page-bg { background: linear-gradient( 135deg, rgba(76, 81, 191, 0.25) 0%, rgba(30, 30, 45, 0.95) 25%, rgba(40, 30, 45, 0.95) 50%, rgba(35, 30, 50, 0.95) 75%, rgba(85, 60, 154, 0.25) 100% ); min-height: 100vh; } /* Gradient Borders */ .gradient-border { position: relative; border: 2px solid transparent; background: linear-gradient(var(--background), var(--background)) padding-box, linear-gradient(135deg, #667eea, #764ba2) border-box; } .dark .gradient-border { background: linear-gradient(var(--background), var(--background)) padding-box, linear-gradient(135deg, #4c51bf, #553c9a) border-box; } .gradient-border-animated { position: relative; border: 2px solid transparent; background: linear-gradient(var(--background), var(--background)) padding-box, linear-gradient(135deg, #667eea, #764ba2, #f093fb, #667eea) border-box; background-size: 300% 300%; animation: gradientBorder 4s ease infinite; } .dark .gradient-border-animated { background: linear-gradient(var(--background), var(--background)) padding-box, linear-gradient(135deg, #4c51bf, #553c9a, #c471ed, #4c51bf) border-box; background-size: 300% 300%; animation: gradientBorder 4s ease infinite; } @keyframes gradientBorder { 0%, 100% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } } /* Gradient Text - Blue/Pink in light, Blue/Purple in dark */ .gradient-text-primary { background: linear-gradient(135deg, #3B82F6 0%, #EC4899 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .dark .gradient-text-primary { background: linear-gradient(135deg, #3B82F6 0%, #8B5CF6 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .gradient-text-secondary { background: linear-gradient(135deg, #60A5FA 0%, #F472B6 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .dark .gradient-text-secondary { background: linear-gradient(135deg, #60A5FA 0%, #A78BFA 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .gradient-text-accent { background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* Gradient Overlays */ .gradient-overlay { position: relative; } .gradient-overlay::before { content: ""; position: absolute; inset: 0; background: linear-gradient( 135deg, rgba(102, 126, 234, 0.1), rgba(118, 75, 162, 0.1) ); pointer-events: none; border-radius: inherit; } .dark .gradient-overlay::before { background: linear-gradient( 135deg, rgba(76, 81, 191, 0.15), rgba(85, 60, 154, 0.15) ); } /* Gradient Shine Effect */ .gradient-shine { position: relative; overflow: hidden; } .gradient-shine::after { content: ""; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: linear-gradient( 45deg, transparent 30%, rgba(255, 255, 255, 0.1) 50%, transparent 70% ); transform: translateX(-100%) translateY(-100%); transition: transform 0.6s; } .gradient-shine:hover::after { transform: translateX(100%) translateY(100%); } .dark .gradient-shine::after { background: linear-gradient( 45deg, transparent 30%, rgba(255, 255, 255, 0.05) 50%, transparent 70% ); } /* Enhanced Card Gradients */ .gradient-card { background: linear-gradient( 135deg, rgba(102, 126, 234, 0.05) 0%, rgba(118, 75, 162, 0.05) 100% ); border: 1px solid rgba(102, 126, 234, 0.2); transition: all 0.3s ease; } .gradient-card:hover { background: linear-gradient( 135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100% ); border-color: rgba(102, 126, 234, 0.4); box-shadow: 0 10px 40px rgba(102, 126, 234, 0.2); } .dark .gradient-card { background: linear-gradient( 135deg, rgba(76, 81, 191, 0.1) 0%, rgba(85, 60, 154, 0.1) 100% ); border-color: rgba(76, 81, 191, 0.3); } .dark .gradient-card:hover { background: linear-gradient( 135deg, rgba(76, 81, 191, 0.15) 0%, rgba(85, 60, 154, 0.15) 100% ); border-color: rgba(76, 81, 191, 0.5); box-shadow: 0 10px 40px rgba(76, 81, 191, 0.3); } /* ======================================== GLASSMORPHISM UTILITIES ======================================== */ /* Base glassmorphism style - Subtle white with hint of pink */ .glass { background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border: 1px solid rgba(147, 51, 234, 0.08); box-shadow: 0 2px 12px 0 rgba(147, 51, 234, 0.04); } .dark .glass { background: rgba(30, 20, 40, 0.95); border: 1px solid rgba(147, 51, 234, 0.15); box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.4); } /* Enhanced glass with gradient - Very subtle pink/purple tint */ .glass-gradient { background: linear-gradient( 135deg, rgba(255, 255, 255, 0.98) 0%, rgba(252, 248, 255, 0.98) 100% ); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border: 1px solid rgba(147, 51, 234, 0.1); box-shadow: 0 2px 16px 0 rgba(147, 51, 234, 0.06), inset 0 1px 0 0 rgba(255, 255, 255, 0.5); } .dark .glass-gradient { background: linear-gradient( 135deg, rgba(30, 20, 40, 0.95) 0%, rgba(40, 25, 50, 0.95) 100% ); border: 1px solid rgba(147, 51, 234, 0.2); box-shadow: 0 2px 16px 0 rgba(147, 51, 234, 0.15), inset 0 1px 0 0 rgba(255, 255, 255, 0.05); } /* Glass hover effect - Subtle */ .glass-hover { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .glass-hover:hover { background: rgba(255, 255, 255, 1); border-color: rgba(147, 51, 234, 0.15); box-shadow: 0 4px 20px 0 rgba(147, 51, 234, 0.1), inset 0 1px 0 0 rgba(255, 255, 255, 0.8); transform: translateY(-2px); } .dark .glass-hover:hover { background: rgba(30, 20, 40, 1); border-color: rgba(147, 51, 234, 0.3); box-shadow: 0 4px 20px 0 rgba(147, 51, 234, 0.2), inset 0 1px 0 0 rgba(255, 255, 255, 0.1); }