@tailwind base; @tailwind components; @tailwind utilities; :root { /* Base Colors - Dark Theme (slate/emerald) */ --background: 222 47% 11%; --foreground: 210 40% 98%; /* Card Colors */ --card: 217 33% 17%; --card-foreground: 210 40% 98%; /* Popover Colors */ --popover: 217 33% 17%; --popover-foreground: 210 40% 98%; /* Primary - Emerald */ --primary: 160 84% 39%; --primary-foreground: 210 40% 98%; /* Secondary */ --secondary: 217 33% 17%; --secondary-foreground: 210 40% 98%; /* Muted */ --muted: 217 33% 17%; --muted-foreground: 215 20% 65%; /* Accent */ --accent: 217 33% 17%; --accent-foreground: 210 40% 98%; /* Destructive */ --destructive: 0 84% 60%; --destructive-foreground: 210 40% 98%; /* Border & Input */ --border: 215 28% 25%; --input: 215 28% 25%; /* Ring - Emerald */ --ring: 160 84% 39%; /* Radius */ --radius: 0.5rem; } @theme inline { --color-background: hsl(var(--background)); --color-foreground: hsl(var(--foreground)); --color-card: hsl(var(--card)); --color-card-foreground: hsl(var(--card-foreground)); --color-popover: hsl(var(--popover)); --color-popover-foreground: hsl(var(--popover-foreground)); --color-primary: hsl(var(--primary)); --color-primary-foreground: hsl(var(--primary-foreground)); --color-secondary: hsl(var(--secondary)); --color-secondary-foreground: hsl(var(--secondary-foreground)); --color-muted: hsl(var(--muted)); --color-muted-foreground: hsl(var(--muted-foreground)); --color-accent: hsl(var(--accent)); --color-accent-foreground: hsl(var(--accent-foreground)); --color-destructive: hsl(var(--destructive)); --color-destructive-foreground: hsl(var(--destructive-foreground)); --color-border: hsl(var(--border)); --color-input: hsl(var(--input)); --color-ring: hsl(var(--ring)); --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); } /* Base Styles */ html { scroll-behavior: smooth; } body { background-color: hsl(var(--background)); color: hsl(var(--foreground)); font-feature-settings: "rlig" 1, "calt" 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* Input Styles */ input, textarea, select { background-color: hsl(var(--card)); border-color: hsl(var(--border)); color: hsl(var(--foreground)); } input::placeholder, textarea::placeholder { color: hsl(var(--muted-foreground)); } /* Selection */ ::selection { background-color: hsl(160 84% 39% / 0.3); color: hsl(var(--foreground)); } /* Focus Ring */ :focus-visible { outline: none; ring: 2px; ring-color: hsl(var(--ring)); ring-offset: 2px; ring-offset-color: hsl(var(--background)); } /* Custom Scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: hsl(var(--background)); } ::-webkit-scrollbar-thumb { background: hsl(var(--border)); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: hsl(var(--muted-foreground) / 0.5); } /* Firefox Scrollbar */ * { scrollbar-width: thin; scrollbar-color: hsl(var(--border)) hsl(var(--background)); } /* Utility Classes */ .gradient-text { background: linear-gradient(135deg, hsl(160 84% 39%) 0%, hsl(168 76% 42%) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .glass-card { background: hsl(var(--card) / 0.8); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid hsl(var(--border) / 0.5); } .text-balance { text-wrap: balance; } /* Loading States */ .skeleton { background: linear-gradient( 90deg, hsl(var(--muted)) 25%, hsl(var(--muted-foreground) / 0.3) 50%, hsl(var(--muted)) 75% ); background-size: 200% 100%; animation: skeleton-pulse 1.5s ease-in-out infinite; border-radius: var(--radius); } @keyframes skeleton-pulse { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } .spinner { width: 24px; height: 24px; border: 2px solid hsl(var(--border)); border-top-color: hsl(var(--primary)); border-radius: 50%; animation: spin 0.8s linear infinite; } .spinner-sm { width: 16px; height: 16px; border-width: 2px; } .spinner-lg { width: 32px; height: 32px; border-width: 3px; } @keyframes spin { to { transform: rotate(360deg); } } /* Animations */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideInLeft { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } } @keyframes slideInRight { from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: translateX(0); } } @keyframes pulse-slow { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } @keyframes bounce-slight { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-3px); } } /* Animation Utility Classes */ .animate-fade-in { animation: fadeIn 0.3s ease-out forwards; } .animate-fade-in-up { animation: fadeInUp 0.3s ease-out forwards; } .animate-fade-in-down { animation: fadeInDown 0.3s ease-out forwards; } .animate-slide-in-left { animation: slideInLeft 0.3s ease-out forwards; } .animate-slide-in-right { animation: slideInRight 0.3s ease-out forwards; } .animate-pulse-slow { animation: pulse-slow 2s ease-in-out infinite; } .animate-bounce-slight { animation: bounce-slight 1s ease-in-out infinite; } /* Stagger Animation Delays */ .stagger-1 { animation-delay: 0.05s; } .stagger-2 { animation-delay: 0.1s; } .stagger-3 { animation-delay: 0.15s; } .stagger-4 { animation-delay: 0.2s; } .stagger-5 { animation-delay: 0.25s; } .stagger-6 { animation-delay: 0.3s; } .stagger-7 { animation-delay: 0.35s; } .stagger-8 { animation-delay: 0.4s; } /* Reduced Motion */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } }