Search Raihin Design System

Search tokens, pages and quick actions

Theming

Light, dark & density

Two orthogonal switches that compose without friction. A dashboard in dark + compact reads as a single intentional design, not two settings stitched together.

Light & dark

How a token resolves across modes
:root {
  --background: oklch(0.99 0 78.3);
  --foreground: oklch(0.153 0.006 107.1);
  --card: oklch(0.99 0 78.3);
  --card-foreground: oklch(0.153 0.006 107.1);
  --primary: oklch(0.228 0.013 107.4);
  --primary-foreground: oklch(0.988 0.003 106.5);
}

.dark {
  --background: oklch(0.153 0.006 107.1);
  --foreground: oklch(0.988 0.003 106.5);
  --card: oklch(0.228 0.013 107.4);
  --card-foreground: oklch(0.988 0.003 106.5);
  --primary: oklch(0.93 0.007 106.5);
  --primary-foreground: oklch(0.228 0.013 107.4);
}
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>
  );
}