File size: 4,314 Bytes
ae14296 40d16d9 ae14296 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | @import 'katex/dist/katex.min.css';
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Source.AI clone — Modern dark (ChatGPT/Linear vibe) */
@layer base {
:root {
/* Light fallback (app defaults to dark) */
--background: 0 0% 100%;
--foreground: 240 10% 3.9%;
--card: 0 0% 100%;
--card-foreground: 240 10% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 240 10% 3.9%;
--primary: 240 5.9% 10%;
--primary-foreground: 0 0% 98%;
--secondary: 240 4.8% 95.9%;
--secondary-foreground: 240 5.9% 10%;
--muted: 240 4.8% 95.9%;
--muted-foreground: 240 3.8% 46.1%;
--accent: 240 4.8% 95.9%;
--accent-foreground: 240 5.9% 10%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 0 0% 98%;
--border: 240 5.9% 90%;
--input: 240 5.9% 90%;
--ring: 240 5.9% 10%;
--radius: 0.625rem;
--sidebar-background: 0 0% 98%;
--sidebar-foreground: 240 5.3% 26.1%;
--sidebar-primary: 240 5.9% 10%;
--sidebar-primary-foreground: 0 0% 98%;
--sidebar-accent: 240 4.8% 95.9%;
--sidebar-accent-foreground: 240 5.9% 10%;
--sidebar-border: 240 5.9% 90%;
--sidebar-ring: 240 5.9% 10%;
}
.dark {
/* Linear / ChatGPT inspired neutrals */
--background: 0 0% 4%; /* #0a0a0a */
--foreground: 0 0% 98%;
--card: 0 0% 9%; /* #171717 */
--card-foreground: 0 0% 98%;
--popover: 0 0% 7%;
--popover-foreground: 0 0% 98%;
--primary: 234 89% 74%; /* indigo accent */
--primary-foreground: 0 0% 100%;
--primary-glow: 250 95% 76%;
--secondary: 0 0% 12%;
--secondary-foreground: 0 0% 98%;
--muted: 0 0% 11%;
--muted-foreground: 0 0% 63%;
--accent: 0 0% 14%;
--accent-foreground: 0 0% 98%;
--destructive: 0 72% 51%;
--destructive-foreground: 0 0% 98%;
--success: 142 71% 45%;
--warning: 38 92% 50%;
--border: 0 0% 14%;
--input: 0 0% 14%;
--ring: 234 89% 74%;
--sidebar-background: 0 0% 6%;
--sidebar-foreground: 0 0% 80%;
--sidebar-primary: 234 89% 74%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 0 0% 11%;
--sidebar-accent-foreground: 0 0% 98%;
--sidebar-border: 0 0% 12%;
--sidebar-ring: 234 89% 74%;
--gradient-primary: linear-gradient(135deg, hsl(var(--primary)), hsl(var(--primary-glow)));
--shadow-glow: 0 0 40px -10px hsl(var(--primary) / 0.4);
}
}
@layer base {
* {
@apply border-border;
}
html, body, #root {
@apply h-full;
}
body {
@apply bg-background text-foreground antialiased;
font-feature-settings: "cv11", "ss01";
font-family: ui-sans-serif, system-ui, -apple-system, "Inter", sans-serif;
}
/* Scrollbar */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: hsl(var(--border)); border-radius: 8px; }
::-webkit-scrollbar-thumb:hover { background: hsl(var(--muted-foreground) / 0.4); }
}
@layer utilities {
.prose-invert-tight h2 { @apply text-xl font-semibold mt-6 mb-3; }
.prose-invert-tight h3 { @apply text-lg font-semibold mt-5 mb-2; }
.prose-invert-tight p { @apply leading-7 my-3 text-foreground/90; }
.prose-invert-tight ul { @apply list-disc pl-6 my-3 space-y-1; }
.prose-invert-tight ol { @apply list-decimal pl-6 my-3 space-y-1; }
.prose-invert-tight code { @apply px-1.5 py-0.5 rounded bg-muted text-foreground/90 text-sm; }
.prose-invert-tight pre { @apply bg-muted rounded-lg p-4 overflow-x-auto my-4; }
.prose-invert-tight pre code { @apply bg-transparent p-0; }
.prose-invert-tight table { @apply w-full my-4 border-collapse; }
.prose-invert-tight th, .prose-invert-tight td { @apply border border-border px-3 py-2 text-left; }
.prose-invert-tight th { @apply bg-muted font-semibold; }
.prose-invert-tight strong { @apply text-foreground font-semibold; }
.prose-invert-tight a { @apply text-primary underline underline-offset-2; }
.prose-invert-tight blockquote { @apply border-l-2 border-primary/50 pl-4 italic text-muted-foreground my-4; }
@keyframes scanline {
from { transform: translateY(-100%); }
to { transform: translateY(1000%); }
}
.animate-scanline {
animation: scanline 4s linear infinite;
}
}
|