@import "tailwindcss"; @import "tw-animate-css"; @custom-variant dark (&:is(.dark *)); /* ============================================ DESIGN TOKENS - OpenPrompt Design System Premium Palette: Indigo (#6366f1) + Rose (#f43f5e) + Teal (#14b8a6) Crafted for visual comfort and modern aesthetics ============================================ */ :root { /* Light Mode - Warm Cream Base */ --background: 60 9% 98%; --foreground: 224 71% 4%; --card: 60 6% 97%; --card-foreground: 224 71% 4%; --popover: 0 0% 100%; --popover-foreground: 224 71% 4%; /* Indigo Primary - Rich & Vibrant */ --primary: 239 84% 67%; --primary-foreground: 0 0% 100%; --secondary: 220 14% 96%; --secondary-foreground: 220 9% 12%; /* Rose Accent - Warm & Inviting */ --accent: 347 77% 50%; --accent-foreground: 0 0% 100%; --muted: 220 14% 96%; --muted-foreground: 220 9% 46%; --destructive: 0 72% 51%; --destructive-foreground: 0 0% 98%; --border: 220 13% 91%; --input: 220 13% 91%; --ring: 239 84% 67%; --radius: 0.625rem; /* Success - Teal / Warning - Amber */ --success: 168 76% 42%; --warning: 43 96% 56%; /* Chart Colors - Harmonious Palette */ --chart-1: 239 84% 67%; --chart-2: 347 77% 50%; --chart-3: 168 76% 42%; --chart-4: 271 81% 56%; --chart-5: 31 97% 72%; --sidebar: 60 6% 97%; --sidebar-foreground: 220 9% 12%; --sidebar-primary: 239 84% 67%; --sidebar-primary-foreground: 0 0% 100%; --sidebar-accent: 220 14% 96%; --sidebar-accent-foreground: 220 9% 12%; --sidebar-border: 220 13% 91%; --sidebar-ring: 239 84% 67%; } .dark { /* Dark Mode - Deep Slate with Subtle Blue */ --background: 222 47% 6%; --foreground: 210 40% 98%; --card: 222 47% 9%; --card-foreground: 210 40% 98%; --popover: 222 47% 9%; --popover-foreground: 210 40% 98%; /* Indigo Primary - Glowing */ --primary: 239 84% 67%; --primary-foreground: 0 0% 100%; --secondary: 217 33% 17%; --secondary-foreground: 210 40% 98%; /* Rose Accent - Soft Glow */ --accent: 347 77% 50%; --accent-foreground: 0 0% 100%; --muted: 217 33% 17%; --muted-foreground: 215 20% 65%; --destructive: 0 62% 30%; --destructive-foreground: 0 0% 98%; --border: 217 33% 17%; --input: 217 33% 17%; --ring: 239 84% 67%; /* Chart Colors - Vibrant for Dark Mode */ --chart-1: 239 84% 67%; --chart-2: 347 77% 50%; --chart-3: 168 76% 42%; --chart-4: 271 81% 56%; --chart-5: 31 97% 72%; --sidebar: 222 47% 9%; --sidebar-foreground: 210 40% 98%; --sidebar-primary: 239 84% 67%; --sidebar-primary-foreground: 0 0% 100%; --sidebar-accent: 217 33% 17%; --sidebar-accent-foreground: 210 40% 98%; --sidebar-border: 217 33% 17%; --sidebar-ring: 239 84% 67%; } /* ============================================ THEME UTILITIES ============================================ */ @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-primary: hsl(var(--primary)); --color-primary-foreground: hsl(var(--primary-foreground)); --color-secondary: hsl(var(--secondary)); --color-secondary-foreground: hsl(var(--secondary-foreground)); --color-accent: hsl(var(--accent)); --color-accent-foreground: hsl(var(--accent-foreground)); --color-muted: hsl(var(--muted)); --color-muted-foreground: hsl(var(--muted-foreground)); --color-destructive: hsl(var(--destructive)); --color-border: hsl(var(--border)); --color-ring: hsl(var(--ring)); --color-input: hsl(var(--input)); /* Fonts */ --font-sans: var(--font-inter), 'Inter', system-ui, sans-serif; --font-serif: var(--font-playfair), 'Playfair Display', serif; --font-mono: var(--font-jetbrains), 'JetBrains Mono', monospace; /* Radius */ --radius-sm: calc(var(--radius) - 4px); --radius-md: var(--radius); --radius-lg: calc(var(--radius) + 4px); --radius-xl: calc(var(--radius) + 8px); --color-sidebar-ring: hsl(var(--sidebar-ring)); --color-sidebar-border: hsl(var(--sidebar-border)); --color-sidebar-accent-foreground: hsl(var(--sidebar-accent-foreground)); --color-sidebar-accent: hsl(var(--sidebar-accent)); --color-sidebar-primary-foreground: hsl(var(--sidebar-primary-foreground)); --color-sidebar-primary: hsl(var(--sidebar-primary)); --color-sidebar-foreground: hsl(var(--sidebar-foreground)); --color-sidebar: hsl(var(--sidebar)); --color-chart-5: hsl(var(--chart-5)); --color-chart-4: hsl(var(--chart-4)); --color-chart-3: hsl(var(--chart-3)); --color-chart-2: hsl(var(--chart-2)); --color-chart-1: hsl(var(--chart-1)); --color-popover-foreground: hsl(var(--popover-foreground)); --color-popover: hsl(var(--popover)); } /* ============================================ BASE STYLES ============================================ */ * { border-color: hsl(var(--border)); } body { background: hsl(var(--background)); color: hsl(var(--foreground)); font-family: var(--font-sans); font-feature-settings: "rlig" 1, "calt" 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* ============================================ TYPOGRAPHY ============================================ */ .font-serif { font-family: var(--font-serif); } .font-mono { font-family: var(--font-mono); } /* Modern Solid Color - Clean & Professional */ .text-gradient { color: hsl(var(--primary)); } .text-gradient-subtle { color: hsl(var(--muted-foreground)); } /* ============================================ GLASSMORPHISM EFFECTS ============================================ */ .glass { background: hsl(var(--card) / 0.8); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid hsl(var(--border) / 0.5); } .glass-strong { background: hsl(var(--card) / 0.95); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid hsl(var(--border)); } /* ============================================ GRADIENT BACKGROUNDS ============================================ */ .bg-gradient-primary { background: linear-gradient(135deg, hsl(var(--primary)) 0%, hsl(239 84% 55%) 100%); } .bg-gradient-accent { background: linear-gradient(135deg, hsl(var(--accent)) 0%, hsl(347 77% 40%) 100%); } .bg-gradient-hero { background: radial-gradient(ellipse 80% 50% at 50% -20%, hsl(var(--primary) / 0.15) 0%, transparent 50%), radial-gradient(ellipse 60% 40% at 80% 0%, hsl(var(--accent) / 0.1) 0%, transparent 50%), hsl(var(--background)); } /* ============================================ ANIMATIONS ============================================ */ @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes slide-up { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 20px hsl(var(--primary) / 0.3); } 50% { box-shadow: 0 0 40px hsl(var(--primary) / 0.5); } } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } .animate-fade-in { animation: fade-in 0.3s ease-out; } .animate-slide-up { animation: slide-up 0.4s ease-out; } .animate-pulse-glow { animation: pulse-glow 2s ease-in-out infinite; } .animate-shimmer { background: linear-gradient(90deg, hsl(var(--muted)) 0%, hsl(var(--muted-foreground) / 0.1) 50%, hsl(var(--muted)) 100%); background-size: 200% 100%; animation: shimmer 1.5s infinite; } /* ============================================ 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); } /* ============================================ FOCUS STATES ============================================ */ .focus-ring { outline: none; } .focus-ring:focus-visible { outline: 2px solid hsl(var(--ring)); outline-offset: 2px; } /* ============================================ UTILITY CLASSES ============================================ */ .bg-grid { background-image: linear-gradient(hsl(var(--border) / 0.3) 1px, transparent 1px), linear-gradient(90deg, hsl(var(--border) / 0.3) 1px, transparent 1px); background-size: 40px 40px; } .bg-dots { background-image: radial-gradient(hsl(var(--muted-foreground) / 0.15) 1px, transparent 1px); background-size: 20px 20px; } /* Prompt variable highlighting */ .prompt-variable { color: hsl(var(--primary)); background: hsl(var(--primary) / 0.1); padding: 0.125rem 0.375rem; border-radius: 0.25rem; font-family: var(--font-mono); font-size: 0.875em; } /* Button glow effect */ .btn-glow { box-shadow: 0 0 20px hsl(var(--primary) / 0.4); transition: box-shadow 0.3s ease; } .btn-glow:hover { box-shadow: 0 0 30px hsl(var(--primary) / 0.6); } @layer base { * { @apply border-border outline-ring/50; } body { @apply bg-background text-foreground; } } /* Ticker Animations */ @keyframes infinite-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } } .animate-infinite-scroll { animation: infinite-scroll 40s linear infinite; } .hover\:pause:hover { animation-play-state: paused; } .text-shadow-sm { text-shadow: 0 0 10px currentColor; } /* ============================================ STACK AUTH CUSTOM STYLES Override default Stack Auth styling ============================================ */ /* Stack Auth container */ [data-stack-theme] { font-family: 'Inter', system-ui, sans-serif !important; } /* Stack Auth cards */ [data-stack-theme] [class*="card"], [data-stack-theme] [class*="Card"] { border-radius: 1rem !important; border: 1px solid hsl(var(--border)) !important; box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1) !important; } /* Stack Auth buttons */ [data-stack-theme] button[class*="primary"], [data-stack-theme] [class*="Button"][class*="primary"] { background: linear-gradient(135deg, hsl(var(--primary)) 0%, hsl(271 81% 56%) 100%) !important; border-radius: 0.75rem !important; font-weight: 600 !important; transition: all 0.2s ease !important; } [data-stack-theme] button[class*="primary"]:hover { transform: translateY(-1px) !important; box-shadow: 0 4px 12px hsl(var(--primary) / 0.4) !important; } /* Stack Auth inputs */ [data-stack-theme] input { border-radius: 0.625rem !important; border: 1px solid hsl(var(--border)) !important; transition: all 0.2s ease !important; } [data-stack-theme] input:focus { border-color: hsl(var(--primary)) !important; box-shadow: 0 0 0 3px hsl(var(--primary) / 0.1) !important; } /* Stack Auth links */ [data-stack-theme] a { color: hsl(var(--primary)) !important; transition: color 0.2s ease !important; } [data-stack-theme] a:hover { color: hsl(271 81% 56%) !important; } /* Stack Auth loading spinner override */ [data-stack-theme] [class*="loading"], [data-stack-theme] [class*="spinner"] { color: hsl(var(--primary)) !important; }