@import "tailwindcss"; @plugin "tailwindcss-animate"; @custom-variant dark (&:where(.dark, .dark *)); @theme { --font-sans: var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif; --font-mono: var(--font-geist-mono), ui-monospace, SFMono-Regular, monospace; --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); --color-card-foreground: var(--card-foreground); --color-popover: var(--popover); --color-popover-foreground: var(--popover-foreground); --color-primary: var(--primary); --color-primary-foreground: var(--primary-foreground); --color-secondary: var(--secondary); --color-secondary-foreground: var(--secondary-foreground); --color-muted: var(--muted); --color-muted-foreground: var(--muted-foreground); --color-accent: var(--accent); --color-accent-foreground: var(--accent-foreground); --color-destructive: var(--destructive); --color-destructive-foreground: var(--destructive-foreground); --color-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); --color-chart-1: var(--chart-1); --color-chart-2: var(--chart-2); --color-chart-3: var(--chart-3); --color-chart-4: var(--chart-4); --color-chart-5: var(--chart-5); --radius-lg: var(--radius); --radius-md: calc(var(--radius) - 2px); --radius-sm: calc(var(--radius) - 4px); --animate-accordion-down: accordion-down 0.2s ease-out; --animate-accordion-up: accordion-up 0.2s ease-out; @keyframes accordion-down { from { height: 0; } to { height: var(--radix-accordion-content-height); } } @keyframes accordion-up { from { height: var(--radix-accordion-content-height); } to { height: 0; } } } /* The default border color has changed to `currentColor` in Tailwind CSS v4, so we've added these compatibility styles to make sure everything still looks the same as it did with Tailwind CSS v3. */ @layer base { *, ::after, ::before, ::backdrop, ::file-selector-button { border-color: var(--color-gray-200, currentColor); } } @layer base { :root { /* Dark Theme Only - Terminal/Hacker Aesthetic */ /* Colors */ --background: #0a0a0a; --foreground: #ededed; --card: #111111; --card-foreground: #ededed; --popover: #111111; --popover-foreground: #ededed; --primary: #00d4ff; --primary-foreground: #000000; --secondary: #7c3aed; --secondary-foreground: #ffffff; --muted: #1a1a1a; --muted-foreground: #a1a1a1; --accent: #1a1a1a; --accent-foreground: #ededed; --destructive: #ef4444; --destructive-foreground: #ffffff; --border: #262626; --input: #262626; --ring: #00d4ff; /* Charts */ --chart-1: #00d4ff; --chart-2: #7c3aed; --chart-3: #10b981; --chart-4: #f59e0b; --chart-5: #ef4444; /* Code */ --code-bg: #1e1e2e; --code-text: #cdd6f4; /* Spacing */ --radius: 0.5rem; /* Typography */ --font-geist-sans: var(--font-geist-sans); --font-geist-mono: var(--font-geist-mono); /* Semantic Fonts */ --font-heading: var(--font-geist-sans); --font-body: var(--font-geist-sans); --font-code: var(--font-geist-mono); } } @layer base { * { @apply border-border; } body { @apply bg-background text-foreground; font-feature-settings: "rlig" 1, "calt" 1; } /* * Hero background image fades in after first paint so the headline text is * the LCP candidate. The image is decorative (opacity 30%) and is preloaded * with low priority so it doesn't compete with critical resources. */ .hero-bg { opacity: 0; animation: hero-bg-fade-in 600ms ease-out 200ms forwards; } @keyframes hero-bg-fade-in { to { opacity: 0.3; } } @media (prefers-reduced-motion: reduce) { .hero-bg { animation: none; opacity: 0.3; } } h1, h2, h3, h4, h5, h6 { font-family: var(--font-geist-sans); } [lang|="ko"] h1, [lang|="ko"] h2, [lang|="ko"] h3, [lang|="ko"] h4, [lang|="ko"] h5, [lang|="ko"] h6, [lang|="ja"] h1, [lang|="ja"] h2, [lang|="ja"] h3, [lang|="ja"] h4, [lang|="ja"] h5, [lang|="ja"] h6, [lang|="zh"] h1, [lang|="zh"] h2, [lang|="zh"] h3, [lang|="zh"] h4, [lang|="zh"] h5, [lang|="zh"] h6 { letter-spacing: normal !important; text-wrap: pretty; } :where([lang|="ko"], [lang|="ja"], [lang|="zh"]) :where(p, li, blockquote, figcaption, td, th, a, button, span) { overflow-wrap: break-word; } [lang|="ko"] :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption, td, th, a, button, span) { word-break: keep-all; } :where([lang|="ja"], [lang|="zh"]) :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption, td, th, a, button, span) { word-break: normal; line-break: strict; } html { scroll-behavior: auto; } ::selection { @apply bg-primary/20 text-primary; } ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-track { @apply bg-muted; } ::-webkit-scrollbar-thumb { @apply bg-border hover:bg-muted-foreground/50 rounded-full transition-colors; } } @layer utilities { .glow-cyan { box-shadow: 0 0 15px -5px rgba(0, 212, 255, 0.3); } .glow-purple { box-shadow: 0 0 15px -5px rgba(124, 58, 237, 0.3); } .text-glow-cyan { text-shadow: 0 0 8px rgba(0, 212, 255, 0.3); } } @layer components { .docs-content h1 { @apply mt-8 mb-4 scroll-mt-24 text-4xl font-bold tracking-tight first:mt-0; } .docs-content h2 { @apply mt-12 mb-4 scroll-mt-24 text-2xl font-semibold tracking-tight; } .docs-content h3 { @apply mt-8 mb-3 scroll-mt-24 text-xl font-semibold tracking-tight; } .docs-content h4 { @apply mt-6 mb-2 scroll-mt-24 text-lg font-semibold tracking-tight; } .docs-content p { @apply text-muted-foreground my-4 leading-7; } .docs-content a { @apply text-primary font-medium underline underline-offset-4; } .docs-content ul { @apply text-muted-foreground my-4 ml-6 list-disc space-y-1; } .docs-content ol { @apply text-muted-foreground my-4 ml-6 list-decimal space-y-1; } .docs-content li { @apply leading-7; } .docs-content blockquote { @apply border-primary/40 my-6 border-l-4 pl-4 italic; } .docs-content code:not(pre code) { @apply bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-sm; } .docs-content pre { @apply border-border/50 my-4 overflow-x-auto rounded-lg border bg-[#1e1e2e] p-4 font-mono text-sm text-[#cdd6f4] shadow-sm; } .docs-content pre code { @apply bg-transparent p-0 text-inherit; } .docs-content table { @apply border-border my-6 w-full border-collapse border text-sm; } .docs-content thead { @apply bg-muted; } .docs-content th { @apply border-border border px-3 py-2 text-left font-semibold; } .docs-content td { @apply border-border text-muted-foreground border px-3 py-2; } .docs-content hr { @apply border-border my-8; } .docs-content strong { @apply text-foreground font-semibold; } }