Search Kaotypr Design System

Search tokens, pages and quick actions

Foundations

The rules of the road

Kaotypr Design System is a single canonical theme. Most decisions about names, structure and pairings have already been made — and locked. The job of a consumer project is to override the tunable bits, not to redesign the system.

Locked

Never override per-project.

  • z-index scale (cross-product layering)
  • --ring-width = 3px
  • Status hue conventions (red=destructive, green=success, …)
  • State-layer opacities (4/6/8/12/16%)
  • --size-* ratios
  • Opacity scale
Brand

Override expected per-project. The reskin lever.

  • Surfaces (--background, --card, --popover)
  • Foreground hierarchies
  • --primary, --secondary, --accent
  • Status lightness/chroma
  • Fonts
  • Semantic radii (--radius-button, --radius-card, …)
  • Chart palette
Tunable

Any project may override.

  • Shadows
  • Motion durations & easings
  • --overlay opacity
  • Per-control surfaces (switch, slider, scrollbar, skeleton)
  • --placeholder-color
  • Link / code / kbd treatments
  • Blur scale
<div className="bg-black/30 rounded-3xl z-50">…</div>
<div className="bg-overlay rounded-card z-overlay">…</div>

Inline color/radius/z-index values. Use the token vocabulary.

<div className="bg-destructive/10 text-destructive">Error</div>
<div className="bg-destructive text-destructive-foreground border border-destructive-border">Error</div>

Status uses the solid pattern. /10 on a pastel base loses contrast.

<div className="bg-card text-foreground/70">…</div>
<div className="bg-card text-card-foreground">…</div>

Semantic foreground pairs. Never split bg-{role} from text-{role}-foreground.

<input className="text-sm" />
<input className="text-base md:text-sm" />

iOS Safari focus-zoom rule. Text inputs must be at least 16px on mobile.

<div><Card className="mb-4" /><Card className="mb-4" /></div>
<div className="flex flex-col gap-4"><Card /><Card /></div>

Margins collapse and fight stacking. Use gap-* on a flex/grid parent for sibling spacing.

<div className="gap-3 p-5">…</div>
<div className="gap-2 p-4">…</div>

Prefer even Tailwind spacing steps (2, 4, 6, 8, 10, 12). Odd steps usually mean fighting the layout — pick the nearest even step or a density token.