Search Kaotypr Design System

Search tokens, pages and quick actions

Theming

Light, dark & density

Two orthogonal switches every Kaotypr product gets for free. They compose: a dashboard in dark + compact looks intentional, not stitched together.

Light & dark

Override pattern
:root {
  --background: oklch(0.99 0.005 80);
  --foreground: oklch(0.18 0 0);
  --card: oklch(1 0 0);
  --card-foreground: oklch(0.18 0 0);
  --primary: oklch(0.205 0.04 290);
  --primary-foreground: oklch(0.98 0 0);
}

.dark {
  --background: oklch(0.13 0.005 290);
  --foreground: oklch(0.96 0 0);
  --card: oklch(0.18 0.008 290);
  --card-foreground: oklch(0.96 0 0);
  --primary: oklch(0.92 0 0);
  --primary-foreground: oklch(0.18 0.04 290);
}
import { ThemeProvider } from "next-themes";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en" suppressHydrationWarning>
      <body>
        <ThemeProvider
          attribute="class"      /* toggles .dark on <html> */
          defaultTheme="system"  /* respect OS */
          enableSystem
          disableTransitionOnChange  /* avoid flicker on switch */
        >
          {children}
        </ThemeProvider>
      </body>
    </html>
  );
}

Density

<html lang="en" data-density="compact">
  …everything inside is compact
</html>
function FilterChip({ children, ...props }) {
  return (
    <button
      {...props}
      className="
        h-(--density-control-h) px-3
        rounded-chip border-border
        bg-muted text-foreground-subtle
        hover:bg-state-hover
      "
    >
      {children}
    </button>
  );
}