@import "tailwindcss"; @import "@fontsource/geist/400.css"; @import "@fontsource/geist/500.css"; @import "@fontsource/geist/600.css"; @import "@fontsource/geist/700.css"; @import "@fontsource/ibm-plex-sans/400.css"; @import "@fontsource/ibm-plex-sans/500.css"; @import "@fontsource/ibm-plex-sans/600.css"; @custom-variant dark (&:is(.dark *)); /* Design System Tokens */ :root { /* Colors - Professional Blue-Gray Palette */ --background: 0 0% 100%; --foreground: 220 14% 18%; --card: 0 0% 100%; --card-foreground: 220 14% 18%; --popover: 0 0% 100%; --popover-foreground: 220 14% 18%; /* Primary - Professional Blue */ --primary: 221 83% 53%; --primary-foreground: 0 0% 100%; /* Secondary - Cool Gray */ --secondary: 220 13% 95%; --secondary-foreground: 220 14% 18%; /* Muted */ --muted: 220 13% 95%; --muted-foreground: 220 9% 46%; /* Accent */ --accent: 220 13% 95%; --accent-foreground: 220 14% 18%; /* Destructive */ --destructive: 0 84% 60%; --destructive-foreground: 0 0% 100%; /* Borders & Inputs */ --border: 220 13% 91%; --input: 220 13% 91%; --ring: 221 83% 53%; /* Radius */ --radius: 0.5rem; /* Shadows */ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.03); --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.06), 0 1px 2px -1px rgb(0 0 0 / 0.04); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.06), 0 2px 4px -2px rgb(0 0 0 / 0.04); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.06), 0 4px 6px -4px rgb(0 0 0 / 0.04); } /* Dark Mode - Professional Dark */ .dark { --background: 220 17% 10%; --foreground: 210 17% 95%; --card: 220 17% 12%; --card-foreground: 210 17% 95%; --popover: 220 17% 12%; --popover-foreground: 210 17% 95%; --primary: 217 91% 60%; --primary-foreground: 220 17% 10%; --secondary: 217 33% 17%; --secondary-foreground: 210 17% 95%; --muted: 217 33% 17%; --muted-foreground: 215 20% 65%; --accent: 217 33% 17%; --accent-foreground: 210 17% 95%; --destructive: 0 63% 31%; --destructive-foreground: 210 17% 95%; --border: 217 33% 17%; --input: 217 33% 17%; --ring: 224 76% 48%; } /* Base Styles */ * { border-color: hsl(var(--border)); } body { font-family: "Geist", "IBM Plex Sans", system-ui, sans-serif; background: hsl(var(--background)); color: hsl(var(--foreground)); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; } /* Smooth Scrolling */ html { scroll-behavior: smooth; } /* Selection */ ::selection { background: hsl(var(--primary) / 0.2); color: hsl(var(--foreground)); } /* Focus Visible */ :focus-visible { outline: 2px solid hsl(var(--ring)); outline-offset: 2px; } /* Scrollbar Styling */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: hsl(var(--muted)); border-radius: 4px; } ::-webkit-scrollbar-thumb { background: hsl(var(--muted-foreground) / 0.3); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: hsl(var(--muted-foreground) / 0.5); } /* Animation Utilities */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideUp { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideDown { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: translateY(0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* Animation Classes */ .animate-fade-in { animation: fadeIn 0.3s ease-out forwards; } .animate-slide-up { animation: slideUp 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards; } .animate-slide-down { animation: slideDown 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards; } .animate-scale-in { animation: scaleIn 0.3s cubic-bezier(0.16, 1, 0.3, 1) forwards; } .animate-pulse { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } .animate-spin { animation: spin 1s linear infinite; } /* Staggered Animation Delays */ .stagger-1 { animation-delay: 50ms; } .stagger-2 { animation-delay: 100ms; } .stagger-3 { animation-delay: 150ms; } .stagger-4 { animation-delay: 200ms; } .stagger-5 { animation-delay: 250ms; } /* Transition Utilities */ .transition-base { transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1); } .transition-smooth { transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .transition-bounce { transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1); } /* Hover Effects */ .hover-lift { transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.2s cubic-bezier(0.16, 1, 0.3, 1); } .hover-lift:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); } .hover-scale { transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1); } .hover-scale:hover { transform: scale(1.02); } /* Button Active Effect */ .btn-press:active { transform: scale(0.97); } /* Glass Effect */ .glass { background: hsl(var(--background) / 0.8); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); } /* Reduced Motion */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } } /* Typography Scale */ .text-display { font-size: 3rem; line-height: 1.1; letter-spacing: -0.025em; font-weight: 700; } .text-heading-1 { font-size: 2.25rem; line-height: 1.2; letter-spacing: -0.02em; font-weight: 600; } .text-heading-2 { font-size: 1.5rem; line-height: 1.3; letter-spacing: -0.015em; font-weight: 600; } .text-heading-3 { font-size: 1.25rem; line-height: 1.4; letter-spacing: -0.01em; font-weight: 600; } .text-body { font-size: 1rem; line-height: 1.6; } .text-body-small { font-size: 0.875rem; line-height: 1.5; } .text-caption { font-size: 0.75rem; line-height: 1.4; letter-spacing: 0.01em; }