| @import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600&family=Inter:wght@300;400;500;600;700&display=swap'); |
|
|
| @import "tailwindcss"; |
|
|
| @theme { |
| --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; |
| --font-mono: 'Fira Code', 'Courier New', monospace; |
|
|
| --color-border: hsl(var(--border)); |
| --color-input: hsl(var(--input)); |
| --color-ring: hsl(var(--ring)); |
| --color-background: hsl(var(--background)); |
| --color-foreground: hsl(var(--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-popover: hsl(var(--popover)); |
| --color-popover-foreground: hsl(var(--popover-foreground)); |
|
|
| --color-card: hsl(var(--card)); |
| --color-card-foreground: hsl(var(--card-foreground)); |
| |
| --radius-lg: var(--radius); |
| --radius-md: calc(var(--radius) - 2px); |
| --radius-sm: calc(var(--radius) - 4px); |
| } |
|
|
| :root { |
| |
| --background: 250 33% 5%; |
| --foreground: 250 20% 98%; |
|
|
| --muted: 250 15% 12%; |
| --muted-foreground: 250 12% 65%; |
|
|
| --popover: 250 33% 5%; |
| --popover-foreground: 250 20% 98%; |
|
|
| --card: 250 32% 10%; |
| --card-foreground: 250 20% 98%; |
|
|
| --border: 247 25% 15%; |
| --input: 247 25% 15%; |
|
|
| --primary: 252 65% 55%; |
| --primary-foreground: 0 0% 100%; |
|
|
| --secondary: 250 28% 18%; |
| --secondary-foreground: 250 20% 98%; |
|
|
| --accent: 252 50% 20%; |
| --accent-foreground: 250 20% 98%; |
|
|
| --destructive: 0 85% 60%; |
| --destructive-foreground: 0 0% 100%; |
|
|
| --ring: 252 65% 55%; |
|
|
| --radius: 0.75rem; |
| } |
|
|
| .light { |
| |
| --background: 0 0% 100%; |
| --foreground: 224 71% 4%; |
|
|
| --muted: 220 14% 96%; |
| --muted-foreground: 220 9% 46%; |
|
|
| --popover: 0 0% 100%; |
| --popover-foreground: 224 71% 4%; |
|
|
| --card: 0 0% 99%; |
| --card-foreground: 224 71% 4%; |
|
|
| --border: 220 13% 91%; |
| --input: 220 13% 91%; |
|
|
| --primary: 252 65% 45%; |
| --primary-foreground: 0 0% 100%; |
|
|
| --secondary: 220 14% 96%; |
| --secondary-foreground: 224 71% 4%; |
|
|
| --accent: 252 40% 94%; |
| --accent-foreground: 252 65% 45%; |
| } |
|
|
| * { |
| box-sizing: border-box; |
| margin: 0; |
| padding: 0; |
| } |
|
|
| body { |
| font-family: var(--font-sans); |
| font-size: 14px; |
| background-color: hsl(var(--background)); |
| color: hsl(var(--foreground)); |
| overflow: hidden; |
| transition: background-color 0.2s ease, color 0.2s ease; |
| line-height: 1.5; |
| -webkit-font-smoothing: antialiased; |
| } |
|
|
| |
| ::-webkit-scrollbar { |
| width: 6px; |
| height: 6px; |
| } |
|
|
| ::-webkit-scrollbar-track { |
| background: transparent; |
| } |
|
|
| ::-webkit-scrollbar-thumb { |
| background: hsl(var(--border)); |
| border-radius: 4px; |
| } |
|
|
| ::-webkit-scrollbar-thumb:hover { |
| background: hsl(var(--muted-foreground)); |
| } |
|
|
| |
| @keyframes shimmer { |
| 0% { |
| background-position: -200% 0; |
| } |
| 100% { |
| background-position: 200% 0; |
| } |
| } |
|
|
| .animate-shimmer { |
| background: linear-gradient( |
| 90deg, |
| hsl(var(--card)) 25%, |
| color-mix(in srgb, hsl(var(--muted)) 60%, transparent) 50%, |
| hsl(var(--card)) 75% |
| ); |
| background-size: 200% 100%; |
| animation: shimmer 1.5s infinite linear; |
| } |
|
|
| |
| .focus-ring { |
| outline: none; |
| transition: box-shadow 0.2s cubic-bezier(0.16, 1, 0.3, 1), border-color 0.2s cubic-bezier(0.16, 1, 0.3, 1); |
| } |
|
|
| .focus-ring:focus-visible { |
| box-shadow: 0 0 0 2px hsl(var(--background)), 0 0 0 4px hsl(var(--primary)); |
| border-color: hsl(var(--primary)); |
| } |
|
|
| |
| .glass-panel { |
| background: color-mix(in srgb, hsl(var(--card)) 70%, transparent); |
| backdrop-filter: blur(12px); |
| -webkit-backdrop-filter: blur(12px); |
| } |
|
|
| |
| .glow-primary { |
| box-shadow: 0 0 15px -3px color-mix(in srgb, hsl(var(--primary)) 40%, transparent); |
| } |
|
|
| .border-glow-hover:hover { |
| border-color: color-mix(in srgb, hsl(var(--primary)) 50%, transparent); |
| box-shadow: 0 0 12px -5px color-mix(in srgb, hsl(var(--primary)) 30%, transparent); |
| } |
|
|
| |
| ::selection { |
| background-color: color-mix(in srgb, hsl(var(--primary)) 30%, transparent); |
| color: hsl(var(--foreground)); |
| } |
|
|
| |
| @keyframes pulse-glow { |
| 0%, 100% { |
| opacity: 0.15; |
| transform: scale(1); |
| } |
| 50% { |
| opacity: 0.35; |
| transform: scale(1.05); |
| } |
| } |
|
|
| .animate-pulse-glow { |
| animation: pulse-glow 4s ease-in-out infinite; |
| } |
|
|
| |
| .btn-primary { |
| background-color: hsl(var(--primary)); |
| color: hsl(var(--primary-foreground)); |
| border-radius: var(--radius); |
| transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1); |
| } |
|
|
| .btn-primary:hover { |
| transform: translateY(-1px); |
| box-shadow: 0 4px 12px color-mix(in srgb, hsl(var(--primary)) 40%, transparent); |
| } |
|
|
| .btn-primary:active { |
| transform: translateY(0); |
| } |
|
|