@import 'tailwindcss'; @import 'tw-animate-css'; @import 'shadcn-svelte/tailwind.css'; @import '@fontsource-variable/montserrat'; @custom-variant dark (&:is(.dark *)); @plugin '@tailwindcss/typography'; @theme { --color-bg: #000; --color-surface: #0a0a0a; --color-surface-hover: #171717; --color-border: #262626; --color-border-light: #1a1a1a; --color-text: #ededed; --color-text-muted: #a1a1a1; --color-text-dim: #888; --color-text-ghost: #666; --color-accent: var(--accent); --color-accent-hover: #fff; --color-danger: #b44; --font-heading: 'Montserrat Variable', Arial, Helvetica, sans-serif; --font-mono: 'IBM Plex Mono', 'Courier New', monospace; --font-body: 'Montserrat Variable', Arial, Helvetica, sans-serif; --font-sans: 'Montserrat Variable', sans-serif; --color-sidebar-ring: var(--sidebar-ring); --color-sidebar-border: var(--sidebar-border); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar: var(--sidebar); --color-chart-5: var(--chart-5); --color-chart-4: var(--chart-4); --color-chart-3: var(--chart-3); --color-chart-2: var(--chart-2); --color-chart-1: var(--chart-1); --color-ring: var(--ring); --color-input: var(--input); --color-destructive: var(--destructive); --color-accent-foreground: var(--accent-foreground); --color-muted-foreground: var(--muted-foreground); --color-muted: var(--muted); --color-secondary-foreground: var(--secondary-foreground); --color-secondary: var(--secondary); --color-primary-foreground: var(--primary-foreground); --color-primary: var(--primary); --color-popover-foreground: var(--popover-foreground); --color-popover: var(--popover); --color-card-foreground: var(--card-foreground); --color-card: var(--card); --color-foreground: var(--foreground); --color-background: var(--background); --radius-sm: calc(var(--radius) * 0.6); --radius-md: calc(var(--radius) * 0.8); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) * 1.4); --radius-2xl: calc(var(--radius) * 1.8); --radius-3xl: calc(var(--radius) * 2.2); --radius-4xl: calc(var(--radius) * 2.6); } :root { color-scheme: dark; --site-bg: #000; --site-surface: #0a0a0a; --site-hover: #171717; --site-text: #ededed; --site-muted: #a1a1a1; --site-border: #292929; --background: oklch(1 0 0); --foreground: oklch(0.145 0 0); --card: oklch(1 0 0); --card-foreground: oklch(0.145 0 0); --popover: oklch(1 0 0); --popover-foreground: oklch(0.145 0 0); --primary: oklch(0.205 0 0); --primary-foreground: oklch(0.985 0 0); --secondary: oklch(0.97 0 0); --secondary-foreground: oklch(0.205 0 0); --muted: oklch(0.97 0 0); --muted-foreground: oklch(0.556 0 0); --accent: oklch(0.97 0 0); --accent-foreground: oklch(0.205 0 0); --destructive: oklch(0.577 0.245 27.325); --border: oklch(0.922 0 0); --input: oklch(0.922 0 0); --ring: oklch(0.708 0 0); --chart-1: oklch(0.87 0 0); --chart-2: oklch(0.556 0 0); --chart-3: oklch(0.439 0 0); --chart-4: oklch(0.371 0 0); --chart-5: oklch(0.269 0 0); --radius: 0.625rem; --sidebar: oklch(0.985 0 0); --sidebar-foreground: oklch(0.145 0 0); --sidebar-primary: oklch(0.205 0 0); --sidebar-primary-foreground: oklch(0.985 0 0); --sidebar-accent: oklch(0.97 0 0); --sidebar-accent-foreground: oklch(0.205 0 0); --sidebar-border: oklch(0.922 0 0); --sidebar-ring: oklch(0.708 0 0); } :root[data-theme='light'] { color-scheme: light; --site-bg: #fff; --site-surface: #fafafa; --site-hover: #f4f4f5; --site-text: #171717; --site-muted: #646464; --site-border: #e5e5e5; --color-bg: #fff; --color-surface: #fafafa; --color-surface-hover: #f4f4f5; --color-border: #e5e5e5; --color-border-light: #eee; --color-text: #171717; --color-text-muted: #646464; --color-text-dim: #777; --color-text-ghost: #999; --color-accent: #171717; --color-accent-hover: #000; } .article-content { --tw-prose-body: var(--site-text); --tw-prose-headings: var(--site-text); --tw-prose-lead: var(--site-text); --tw-prose-links: var(--site-text); --tw-prose-bold: var(--site-text); --tw-prose-counters: var(--site-muted); --tw-prose-bullets: var(--site-muted); --tw-prose-hr: var(--site-border); --tw-prose-quotes: var(--site-text); --tw-prose-quote-borders: var(--site-border); --tw-prose-captions: var(--site-muted); --tw-prose-code: var(--site-text); --tw-prose-th-borders: var(--site-border); --tw-prose-td-borders: var(--site-border); } /* Keep older project pages readable while their individual styles use light utility colors. */ :root:not([data-theme='light']) .bg-white, :root:not([data-theme='light']) .bg-gray-50, :root:not([data-theme='light']) .bg-neutral-50 { background-color: #0a0a0a; } :root:not([data-theme='light']) .bg-gray-100, :root:not([data-theme='light']) .bg-neutral-100 { background-color: #171717; } :root:not([data-theme='light']) .bg-gray-200, :root:not([data-theme='light']) .bg-neutral-200 { background-color: #262626; } :root:not([data-theme='light']) .text-black, :root:not([data-theme='light']) .text-gray-900, :root:not([data-theme='light']) .text-gray-800 { color: #ededed; } :root:not([data-theme='light']) .text-gray-700 { color: #d4d4d4; } :root:not([data-theme='light']) .text-gray-600, :root:not([data-theme='light']) .text-gray-500 { color: #a1a1a1; } :root:not([data-theme='light']) .border-gray-100, :root:not([data-theme='light']) .border-gray-200, :root:not([data-theme='light']) .border-gray-300 { border-color: #292929; } :root:not([data-theme='light']) .hover\:bg-gray-50:hover, :root:not([data-theme='light']) .hover\:bg-gray-100:hover { background-color: #171717; } @layer base { * { box-sizing: border-box; margin: 0; padding: 0; @apply border-border outline-ring/50; } html { scroll-behavior: smooth; @apply font-sans; } section[id] { scroll-margin-top: 88px; } body { background: var(--site-bg); color: var(--site-text); font-family: var(--font-body); font-size: 16px; line-height: 1.6; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; @apply bg-background text-foreground; } button, input, textarea, select { font: inherit; } input:not([data-slot]):not([type='checkbox']):not([type='radio']):not([type='file']):not( [type='hidden'] ), textarea:not([data-slot]), select:not([data-slot]) { @apply rounded-md border border-input bg-background px-2.5 py-1 text-foreground shadow-xs; } :focus-visible { outline: 2px solid var(--site-text); outline-offset: 3px; } ::selection { background: color-mix(in srgb, var(--color-accent) 20%, transparent); } a { color: inherit; text-decoration: none; } } /* Keep the site's black and white palette across every shadcn component. */ .dark { --background: #000; --foreground: #ededed; --card: #0a0a0a; --card-foreground: #ededed; --popover: #0a0a0a; --popover-foreground: #ededed; --primary: #ededed; --primary-foreground: #000; --secondary: #171717; --secondary-foreground: #ededed; --muted: #171717; --muted-foreground: #a1a1a1; --accent: #171717; --accent-foreground: #ededed; --border: #292929; --input: #292929; --ring: #ededed; --sidebar: #0a0a0a; --sidebar-foreground: #ededed; --sidebar-accent: #171717; --sidebar-border: #292929; }