back to gallery
design language·minimal-repro

Minimal repro

A portable design language for agents: download the markdown first, then inspect the preview, tokens, and rules as needed.

Download DESIGN.md

Portable DESIGN.md source of truth for most agents and apps.

the spec

specification

philosophy
values
Reduce every screen to the smallest useful proofMake state and causality inspectable before decorative polishPrefer deterministic structure, explicit affordances, and quick failure recognition
anti-values
×ornamental complexity that hides the defect×ambiguous soft UI with low contrast controls×animation that masks timing or state changes
tokens
borders4 items
evidence
1px dashed #94A3B8
failure rail
4px solid #EF4444
focus
2px solid #2563EB
hairline
1px solid #CBD5E1
colors12 items
accent
#EF4444
background
#F7F3EA
border
#CBD5E1
danger
#DC2626
foreground
#111827
muted
#E5E7EB
primary
#2563EB
secondary
#475569
success
#10B981
surface
#FFFFFF
surface_alt
#F1F5F9
warning
#F59E0B
motion4 items
duration base
160ms
duration fast
90ms
easing
cubic-bezier(.2,0,.2,1)
principle
Only reveal state changes; no decorative looping animation.
opacity2 items
disabled
.48
overlay
.72
radii4 items
lg
10px
md
6px
pill
999px
sm
2px
shadows3 items
focus
0 0 0 3px rgba(37,99,235,.28)
md
0 14px 30px rgba(17,24,39,.10)
sm
0 1px 0 rgba(17,24,39,.08)
spacing6 items
lg
24px
md
16px
sm
8px
xl
40px
xs
4px
xxl
64px
surfaces5 items
bench
#F7F3EA
case
#FFFFFF
evidence
#F1F5F9
failure tint
#FEF2F2
inverted
#111827
typography6 items
body font
IBM Plex Sans
google fonts url
https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap
heading font
IBM Plex Sans
line height
1.55
mono font
IBM Plex Mono
scale
base 1rem·lg 1.125rem·sm 0.875rem·xl 1.5rem·xs 0.75rem·xxl 2.25rem
rules
components
buttons
Rectangular 6px radius buttons with solid primary fill, mono shortcut hint, and explicit focus outline.
cards
Flat case cards with status rail, dense metadata row, and dashed evidence attachments.
inputs
White fields with hairline borders, mono placeholder examples, compact labels, and visible validation rails.
navigation
Simple tab strip with active tab underlined in primary blue and inactive tabs as quiet text.
signature patterns
Use a four-pixel red or green left rail on cards and log rows to encode failing versus passing states; implement with border-left and matching pale background tints.Wrap reproduction instructions in numbered step blocks using CSS counters, mono badges, and dashed connector lines so the shortest path is visually explicit.Render evidence panels as preformatted mono snippets on #111827 with blue focus rings and small status pills anchored to the top-right corner.Use thin square data tables with sticky-looking header bands, tabular numerals, and one highlighted suspect row rather than decorative chart furniture.
layout
accessibility

Maintain WCAG AA contrast, visible focus rings, non-color status labels, reduced-motion safe transitions, and 44px touch targets on mobile.

density

High information density is acceptable when hierarchy is explicit; use 16px base gaps and reserve large whitespace for isolating the failing case.

grid
12-column desktop bench with a narrow reproduction checklist, wide evidence workspace, and compact status sidebar; collapse to 6 columns on tablet and single column on mobile.
responsive

At 1440px show tri-pane investigation, at 768px stack status below evidence, and at 375px turn steps into full-width cards with sticky primary action.

guidance
do
  • Start with the smallest reproducible path and show every input that affects the result.
  • Pair each color status with text labels, icons, or rail patterns so the state is not color-only.
  • Use mono typography for values, timestamps, IDs, and code excerpts to reinforce inspectability.
  • Keep motion short and deterministic, limited to revealing changed state or validation feedback.
avoid
  • Do not add decorative gradients, mascot illustrations, or cinematic effects that obscure the proof.
  • Do not hide errors behind hover-only UI or rely on color without labels.
  • Do not use rounded glassmorphism, soft shadows, or vague empty states that weaken the lab-bench character.
  • Do not create generic component catalogs; always stage a plausible debugging workflow.
imagery
hero image direction

A focused debugging bench with numbered repro steps, failing evidence panel, and pass/fail status rails.

icon style

1.5px outline icons with square corners and tiny mono labels.

illustration style

Sparse line annotations, cropped terminal captures, redline callouts, and paper labels; no glossy illustrations.

image gen prompts
minimal software bug reproduction dashboard, paper white debug bench, red failure rail, mono evidence panels, swiss information design
generative
animation philosophy

Motion behaves like instrumentation: brief, reversible, and only triggered by state changes.

shader palette
#F7F3EA#111827#EF4444#2563EB
techniques
CSS grid overlayssubtle line tracesdeterministic status pulse disabled under reduced motion
katagami spec
# Minimal repro

## Philosophy

### Values

- Reduce every screen to the smallest useful proof
- Make state and causality inspectable before decorative polish
- Prefer deterministic structure, explicit affordances, and quick failure recognition

### Anti-Values

- ornamental complexity that hides the defect
- ambiguous soft UI with low contrast controls
- animation that masks timing or state changes

### Visual Character

- A paper-white debug bench uses #F7F3EA panels on #111827 ink with thin #CBD5E1 dividers, so each region reads like an isolated test case rather than a marketing card.
- Reproduction focus is expressed with vivid #EF4444 failure rails, #F59E0B warning tags, and #10B981 passing badges applied as left borders, chips, and status dots in concrete CSS.
- Typography pairs IBM Plex Sans headings with IBM Plex Mono evidence fields; code-like labels, tabular numbers, and uppercase step markers make the interface feel inspectable.
- Layouts use constrained grids, numbered steps, small checklists, and annotated callouts with dashed outlines to show the minimum path from input to observable result.

## Tokens

### Borders

- **Evidence**: 1px dashed #94A3B8
- **Failure Rail**: 4px solid #EF4444
- **Focus**: 2px solid #2563EB
- **Hairline**: 1px solid #CBD5E1

### Colors

| Name | Value |
|------|-------|
| accent | `#EF4444` |
| background | `#F7F3EA` |
| border | `#CBD5E1` |
| danger | `#DC2626` |
| foreground | `#111827` |
| muted | `#E5E7EB` |
| primary | `#2563EB` |
| secondary | `#475569` |
| success | `#10B981` |
| surface | `#FFFFFF` |
| surface_alt | `#F1F5F9` |
| warning | `#F59E0B` |

### Motion

- **Duration Base**: 160ms
- **Duration Fast**: 90ms
- **Easing**: cubic-bezier(.2,0,.2,1)
- **Principle**: Only reveal state changes; no decorative looping animation.

### Opacity

- **Disabled**: .48
- **Overlay**: .72

### Radii

- **Lg**: 10px
- **Md**: 6px
- **Pill**: 999px
- **Sm**: 2px

### Shadows

- **Focus**: 0 0 0 3px rgba(37,99,235,.28)
- **Md**: 0 14px 30px rgba(17,24,39,.10)
- **Sm**: 0 1px 0 rgba(17,24,39,.08)

### Spacing

- **Lg**: 24px
- **Md**: 16px
- **Sm**: 8px
- **Xl**: 40px
- **Xs**: 4px
- **Xxl**: 64px

### Surfaces

- **Bench**: #F7F3EA
- **Case**: #FFFFFF
- **Evidence**: #F1F5F9
- **Failure Tint**: #FEF2F2
- **Inverted**: #111827

### Typography

- **Body Font**: IBM Plex Sans
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap
- **Heading Font**: IBM Plex Sans
- **Line Height**: 1.55
- **Mono Font**: IBM Plex Mono
- **Scale**: {"base":"1rem","lg":"1.125rem","sm":"0.875rem","xl":"1.5rem","xs":"0.75rem","xxl":"2.25rem"}

## Rules

### Components

- **Buttons**: Rectangular 6px radius buttons with solid primary fill, mono shortcut hint, and explicit focus outline.
- **Cards**: Flat case cards with status rail, dense metadata row, and dashed evidence attachments.
- **Inputs**: White fields with hairline borders, mono placeholder examples, compact labels, and visible validation rails.
- **Navigation**: Simple tab strip with active tab underlined in primary blue and inactive tabs as quiet text.

### Signature Patterns

- Use a four-pixel red or green left rail on cards and log rows to encode failing versus passing states; implement with border-left and matching pale background tints.
- Wrap reproduction instructions in numbered step blocks using CSS counters, mono badges, and dashed connector lines so the shortest path is visually explicit.
- Render evidence panels as preformatted mono snippets on #111827 with blue focus rings and small status pills anchored to the top-right corner.
- Use thin square data tables with sticky-looking header bands, tabular numerals, and one highlighted suspect row rather than decorative chart furniture.

## Layout

### Accessibility

Maintain WCAG AA contrast, visible focus rings, non-color status labels, reduced-motion safe transitions, and 44px touch targets on mobile.

### Density

High information density is acceptable when hierarchy is explicit; use 16px base gaps and reserve large whitespace for isolating the failing case.

### Grid

12-column desktop bench with a narrow reproduction checklist, wide evidence workspace, and compact status sidebar; collapse to 6 columns on tablet and single column on mobile.

### Responsive

At 1440px show tri-pane investigation, at 768px stack status below evidence, and at 375px turn steps into full-width cards with sticky primary action.

## Guidance

### Do

- Start with the smallest reproducible path and show every input that affects the result.
- Pair each color status with text labels, icons, or rail patterns so the state is not color-only.
- Use mono typography for values, timestamps, IDs, and code excerpts to reinforce inspectability.
- Keep motion short and deterministic, limited to revealing changed state or validation feedback.

### Don't

- Do not add decorative gradients, mascot illustrations, or cinematic effects that obscure the proof.
- Do not hide errors behind hover-only UI or rely on color without labels.
- Do not use rounded glassmorphism, soft shadows, or vague empty states that weaken the lab-bench character.
- Do not create generic component catalogs; always stage a plausible debugging workflow.

### Usage Context

Bug reproduction dashboards, QA triage tools, test case builders, incident notebooks, changelog validators, and developer support consoles.

## Imagery Direction

### Hero Image Direction

A focused debugging bench with numbered repro steps, failing evidence panel, and pass/fail status rails.

### Icon Style

1.5px outline icons with square corners and tiny mono labels.

### Illustration Style

Sparse line annotations, cropped terminal captures, redline callouts, and paper labels; no glossy illustrations.

### Image Gen Prompts

- minimal software bug reproduction dashboard, paper white debug bench, red failure rail, mono evidence panels, swiss information design

## Generative Canvas

### Animation Philosophy

Motion behaves like instrumentation: brief, reversible, and only triggered by state changes.

### Shader Palette

- #F7F3EA
- #111827
- #EF4444
- #2563EB

### Techniques

- CSS grid overlays
- subtle line traces
- deterministic status pulse disabled under reduced motion
DESIGN.md
---
version: "alpha"
name: "Minimal repro"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
  accent: "#EF4444"
  background: "#F7F3EA"
  border: "#CBD5E1"
  danger: "#DC2626"
  foreground: "#111827"
  muted: "#E5E7EB"
  primary: "#2563EB"
  secondary: "#475569"
  success: "#10B981"
  surface: "#FFFFFF"
  surface_alt: "#F1F5F9"
  warning: "#F59E0B"
typography:
  headline-lg:
    fontFamily: "IBM Plex Sans"
    fontSize: "1.953rem"
    fontWeight: 700
    lineHeight: 1.1
    letterSpacing: "-0.02em"
  headline-md:
    fontFamily: "IBM Plex Sans"
    fontSize: "1.563rem"
    fontWeight: 600
    lineHeight: 1.15
    letterSpacing: "-0.02em"
  body-md:
    fontFamily: "IBM Plex Sans"
    fontSize: "16px"
    fontWeight: 400
    lineHeight: 1.5
    letterSpacing: "-0.02em"
  label-md:
    fontFamily: "IBM Plex Mono"
    fontSize: "0.75rem"
    fontWeight: 600
    lineHeight: 1
    letterSpacing: "0.08em"
rounded:
  lg: "10px"
  md: "6px"
  pill: "999px"
  sm: "2px"
spacing:
  lg: "24px"
  md: "16px"
  sm: "8px"
  xl: "40px"
  xs: "4px"
  xxl: "64px"
components:
  color-reference-accent:
    backgroundColor: "{colors.accent}"
  color-reference-background:
    backgroundColor: "{colors.background}"
  color-reference-border:
    backgroundColor: "{colors.border}"
  color-reference-danger:
    backgroundColor: "{colors.danger}"
  color-reference-foreground:
    backgroundColor: "{colors.foreground}"
  color-reference-muted:
    backgroundColor: "{colors.muted}"
  color-reference-primary:
    backgroundColor: "{colors.primary}"
  color-reference-secondary:
    backgroundColor: "{colors.secondary}"
  color-reference-success:
    backgroundColor: "{colors.success}"
  color-reference-surface:
    backgroundColor: "{colors.surface}"
  color-reference-surface_alt:
    backgroundColor: "{colors.surface_alt}"
  color-reference-warning:
    backgroundColor: "{colors.warning}"
  button-primary:
    backgroundColor: "{colors.primary}"
    textColor: "#ffffff"
    typography: "{typography.label-md}"
    rounded: "{rounded.md}"
    padding: "{spacing.md}"
  card-surface:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.primary}"
    rounded: "{rounded.md}"
    padding: "{spacing.md}"
  input-default:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.primary}"
    rounded: "{rounded.md}"
    height: "44px"
---

# Minimal repro

## Overview

Minimal repro is an agent-curated design language from Katagami.

### Values

- Reduce every screen to the smallest useful proof
- Make state and causality inspectable before decorative polish
- Prefer deterministic structure, explicit affordances, and quick failure recognition

### Anti-Values

- ornamental complexity that hides the defect
- ambiguous soft UI with low contrast controls
- animation that masks timing or state changes

### Visual Character

- A paper-white debug bench uses #F7F3EA panels on #111827 ink with thin #CBD5E1 dividers, so each region reads like an isolated test case rather than a marketing card.
- Reproduction focus is expressed with vivid #EF4444 failure rails, #F59E0B warning tags, and #10B981 passing badges applied as left borders, chips, and status dots in concrete CSS.
- Typography pairs IBM Plex Sans headings with IBM Plex Mono evidence fields; code-like labels, tabular numbers, and uppercase step markers make the interface feel inspectable.
- Layouts use constrained grids, numbered steps, small checklists, and annotated callouts with dashed outlines to show the minimum path from input to observable result.

## Colors

Use the YAML color tokens as the normative palette. The prose below names the roles agents should preserve when generating UI.

| Token | Value |
|-------|-------|
| accent | `#EF4444` |
| background | `#F7F3EA` |
| border | `#CBD5E1` |
| danger | `#DC2626` |
| foreground | `#111827` |
| muted | `#E5E7EB` |
| primary | `#2563EB` |
| secondary | `#475569` |
| success | `#10B981` |
| surface | `#FFFFFF` |
| surface_alt | `#F1F5F9` |
| warning | `#F59E0B` |

## Typography

- **Headline-Lg**: IBM Plex Sans, 1.953rem, weight 700, line-height 1.1.
- **Headline-Md**: IBM Plex Sans, 1.563rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Sans, 16px, weight 400, line-height 1.5.
- **Label-Md**: IBM Plex Mono, 0.75rem, weight 600, line-height 1.

## Layout

### Spacing Tokens

- **Lg**: `24px`
- **Md**: `16px`
- **Sm**: `8px`
- **Xl**: `40px`
- **Xs**: `4px`
- **Xxl**: `64px`

### Accessibility

Maintain WCAG AA contrast, visible focus rings, non-color status labels, reduced-motion safe transitions, and 44px touch targets on mobile.

### Density

High information density is acceptable when hierarchy is explicit; use 16px base gaps and reserve large whitespace for isolating the failing case.

### Grid

12-column desktop bench with a narrow reproduction checklist, wide evidence workspace, and compact status sidebar; collapse to 6 columns on tablet and single column on mobile.

### Responsive

At 1440px show tri-pane investigation, at 768px stack status below evidence, and at 375px turn steps into full-width cards with sticky primary action.

## Elevation & Depth

### Shadows

- **Focus**: 0 0 0 3px rgba(37,99,235,.28)
- **Md**: 0 14px 30px rgba(17,24,39,.10)
- **Sm**: 0 1px 0 rgba(17,24,39,.08)

## Shapes

### Rounded

- **Lg**: `10px`
- **Md**: `6px`
- **Pill**: `999px`
- **Sm**: `2px`

### Surfaces

- **Bench**: #F7F3EA
- **Case**: #FFFFFF
- **Evidence**: #F1F5F9
- **Failure Tint**: #FEF2F2
- **Inverted**: #111827

### Borders

- **Evidence**: 1px dashed #94A3B8
- **Failure Rail**: 4px solid #EF4444
- **Focus**: 2px solid #2563EB
- **Hairline**: 1px solid #CBD5E1

## Components

### Components

- **Buttons**: Rectangular 6px radius buttons with solid primary fill, mono shortcut hint, and explicit focus outline.
- **Cards**: Flat case cards with status rail, dense metadata row, and dashed evidence attachments.
- **Inputs**: White fields with hairline borders, mono placeholder examples, compact labels, and visible validation rails.
- **Navigation**: Simple tab strip with active tab underlined in primary blue and inactive tabs as quiet text.

### Signature Patterns

- Use a four-pixel red or green left rail on cards and log rows to encode failing versus passing states; implement with border-left and matching pale background tints.
- Wrap reproduction instructions in numbered step blocks using CSS counters, mono badges, and dashed connector lines so the shortest path is visually explicit.
- Render evidence panels as preformatted mono snippets on #111827 with blue focus rings and small status pills anchored to the top-right corner.
- Use thin square data tables with sticky-looking header bands, tabular numerals, and one highlighted suspect row rather than decorative chart furniture.

## shadcn/ui Usage

When the target app uses shadcn/ui, copy DESIGN.md with shadcn instead of the plain DESIGN.md. It contains the same Katagami design-language source plus the shadcn/ui primitives, imports, theme variables, component recipes, and preview-shot guidance.

DESIGN.md with shadcn: `/language/en-019e04f8-a87f-7123-bbb2-c59e5a75a160/DESIGN.with-shadcn.md`.

The shadcn page also exposes optional machine-readable files for automation, but the human-facing handoff is DESIGN.md with shadcn.

Install recommended primitives with `npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table`.

Use these primitives in shadcn apps:
- button
- card
- input
- textarea
- select
- dialog
- sheet
- tabs
- badge
- separator
- checkbox
- switch
- slider
- tooltip
- dropdown-menu
- table

Implementation rule for agents: import shadcn primitives from `@/components/ui/*`, apply the generated CSS variables first, then compose the language-specific recipes from the companion MD. Katagami remains the source of truth; shadcn names are the implementation surface.

## Do's and Don'ts

- Do Start with the smallest reproducible path and show every input that affects the result.
- Do Pair each color status with text labels, icons, or rail patterns so the state is not color-only.
- Do Use mono typography for values, timestamps, IDs, and code excerpts to reinforce inspectability.
- Do Keep motion short and deterministic, limited to revealing changed state or validation feedback.
- Don't Do not add decorative gradients, mascot illustrations, or cinematic effects that obscure the proof.
- Don't Do not hide errors behind hover-only UI or rely on color without labels.
- Don't Do not use rounded glassmorphism, soft shadows, or vague empty states that weaken the lab-bench character.
- Don't Do not create generic component catalogs; always stage a plausible debugging workflow.

### Usage Context

Bug reproduction dashboards, QA triage tools, test case builders, incident notebooks, changelog validators, and developer support consoles.

## Imagery Direction

### Hero Image Direction

A focused debugging bench with numbered repro steps, failing evidence panel, and pass/fail status rails.

### Icon Style

1.5px outline icons with square corners and tiny mono labels.

### Illustration Style

Sparse line annotations, cropped terminal captures, redline callouts, and paper labels; no glossy illustrations.

### Image Gen Prompts

- minimal software bug reproduction dashboard, paper white debug bench, red failure rail, mono evidence panels, swiss information design

## Generative Canvas

### Animation Philosophy

Motion behaves like instrumentation: brief, reversible, and only triggered by state changes.

### Shader Palette

- #F7F3EA
- #111827
- #EF4444
- #2563EB

### Techniques

- CSS grid overlays
- subtle line traces
- deterministic status pulse disabled under reduced motion
shadcn/ui theme
```json
{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "minimal-repro",
  "type": "registry:theme",
  "title": "Minimal repro shadcn Theme",
  "cssVars": {
    "theme": {},
    "light": {
      "background": "#F7F3EA",
      "foreground": "#111827",
      "card": "#FFFFFF",
      "card-foreground": "#111827",
      "popover": "#FFFFFF",
      "popover-foreground": "#111827",
      "primary": "#2563EB",
      "primary-foreground": "#ffffff",
      "secondary": "#475569",
      "secondary-foreground": "#ffffff",
      "muted": "#E5E7EB",
      "muted-foreground": "#111827",
      "accent": "#EF4444",
      "accent-foreground": "#ffffff",
      "destructive": "#dc2626",
      "border": "#CBD5E1",
      "input": "#CBD5E1",
      "ring": "#EF4444",
      "chart-1": "#2563EB",
      "chart-2": "#475569",
      "chart-3": "#EF4444",
      "chart-4": "#10B981",
      "chart-5": "#F59E0B",
      "sidebar": "#FFFFFF",
      "sidebar-foreground": "#111827",
      "sidebar-primary": "#2563EB",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#EF4444",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#CBD5E1",
      "sidebar-ring": "#EF4444",
      "radius": "6px"
    },
    "dark": {
      "background": "#0f1115",
      "foreground": "#f8fafc",
      "card": "#181b22",
      "card-foreground": "#f8fafc",
      "popover": "#181b22",
      "popover-foreground": "#f8fafc",
      "primary": "#2563EB",
      "primary-foreground": "#ffffff",
      "secondary": "#252a33",
      "secondary-foreground": "#f8fafc",
      "muted": "#252a33",
      "muted-foreground": "#a1a1aa",
      "accent": "#EF4444",
      "accent-foreground": "#ffffff",
      "destructive": "#dc2626",
      "border": "#303642",
      "input": "#303642",
      "ring": "#EF4444",
      "chart-1": "#2563EB",
      "chart-2": "#475569",
      "chart-3": "#EF4444",
      "chart-4": "#10B981",
      "chart-5": "#F59E0B",
      "sidebar": "#181b22",
      "sidebar-foreground": "#f8fafc",
      "sidebar-primary": "#2563EB",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#EF4444",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#303642",
      "sidebar-ring": "#EF4444",
      "radius": "6px"
    }
  },
  "meta": {
    "source": "katagami",
    "languageId": "en-019e04f8-a87f-7123-bbb2-c59e5a75a160",
    "slug": "minimal-repro",
    "componentManifest": [
      "button",
      "card",
      "input",
      "textarea",
      "select",
      "dialog",
      "sheet",
      "tabs",
      "badge",
      "separator",
      "checkbox",
      "switch",
      "slider",
      "tooltip",
      "dropdown-menu",
      "table"
    ],
    "installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
    "nativeTokenNames": {
      "borders": [
        "evidence",
        "failure_rail",
        "focus",
        "hairline"
      ],
      "colors": [
        "accent",
        "background",
        "border",
        "danger",
        "foreground",
        "muted",
        "primary",
        "secondary",
        "success",
        "surface",
        "surface_alt",
        "warning"
      ],
      "motion": [
        "duration_base",
        "duration_fast",
        "easing",
        "principle"
      ],
      "opacity": [
        "disabled",
        "overlay"
      ],
      "radii": [
        "lg",
        "md",
        "pill",
        "sm"
      ],
      "shadows": [
        "focus",
        "md",
        "sm"
      ],
      "spacing": [
        "lg",
        "md",
        "sm",
        "xl",
        "xs",
        "xxl"
      ],
      "surfaces": [
        "bench",
        "case",
        "evidence",
        "failure_tint",
        "inverted"
      ],
      "typography": [
        "body_font",
        "google_fonts_url",
        "heading_font",
        "line_height",
        "mono_font",
        "scale"
      ]
    }
  }
}
```
in the wild

embodiments

the full element showcase
embodiment · minimal-repro
DESIGN.md

at a glance

Palette

Typography

headline-lgIBM Plex Sans · 31px · 700

The quick brown fox jumps

headline-mdIBM Plex Sans · 25px · 600

The quick brown fox jumps

body-mdIBM Plex Sans · 16px · 400

The quick brown fox jumps

label-mdIBM Plex Mono · 12px · 600

The quick brown fox jumps

Components

New
Card title

Components rendered with this language’s tokens — colors, type, and rounded corners as specified.

Spacing

  • lg24px
  • md16px
  • sm8px
  • xl40px
  • xs4px
  • xxl64px

Shape

lg10px
md6px
pill999px
sm2px
shadcn/ui

implementation kit

needs agent-authored kitcompatibility fallback
shadcn compatibility only
The generated theme variables are available, but the polished shadcn component recipes and shots have not been authored by the Katagami agent yet.
fallbackprimitives render
Compatibility proof
Local shadcn-style primitives accept the generated theme variables.
primaryaccentsurfacemutedwarningerror
table rhythm
buttonok
cardok
inputok
recommendedcompatibility fallback

DESIGN.md with shadcn

Copy this when the target app uses shadcn/ui. It packages the Katagami DESIGN.md context with the install list, theme variables, component recipes, preview-shot contract, and starter TSX in one Markdown companion.

advanced implementation filesoptional machine-readable theme, CSS, TSX starter, recipes, and preview contract
shadcn add
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table
theme css
:root {
  --background: #F7F3EA;
  --foreground: #111827;
  --card: #FFFFFF;
  --card-foreground: #111827;
  --popover: #FFFFFF;
  --popover-foreground: #111827;
  --primary: #2563EB;
  --primary-foreground: #ffffff;
  --secondary: #475569;
  --secondary-foreground: #ffffff;
  --muted: #E5E7EB;
  --muted-foreground: #111827;
  --accent: #EF4444;
  --accent-foreground: #ffffff;
  --destructive: #dc2626;
  --border: #CBD5E1;
  --input: #CBD5E1;
  --ring: #EF4444;
  --chart-1: #2563EB;
  --chart-2: #475569;
  --chart-3: #EF4444;
  --chart-4: #10B981;
  --chart-5: #F59E0B;
  --sidebar: #FFFFFF;
  --sidebar-foreground: #111827;
  --sidebar-primary: #2563EB;
  --sidebar-primary-foreground: #ffffff;
  --sidebar-accent: #EF4444;
  --sidebar-accent-foreground: #ffffff;
  --sidebar-border: #CBD5E1;
  --sidebar-ring: #EF4444;
  --radius: 6px;
}

.dark {
  --background: #0f1115;
  --foreground: #f8fafc;
  --card: #181b22;
  --card-foreground: #f8fafc;
  --popover: #181b22;
  --popover-foreground: #f8fafc;
  --primary: #2563EB;
  --primary-foreground: #ffffff;
  --secondary: #252a33;
  --secondary-foreground: #f8fafc;
  --muted: #252a33;
  --muted-foreground: #a1a1aa;
  --accent: #EF4444;
  --accent-foreground: #ffffff;
  --destructive: #dc2626;
  --border: #303642;
  --input: #303642;
  --ring: #EF4444;
  --chart-1: #2563EB;
  --chart-2: #475569;
  --chart-3: #EF4444;
  --chart-4: #10B981;
  --chart-5: #F59E0B;
  --sidebar: #181b22;
  --sidebar-foreground: #f8fafc;
  --sidebar-primary: #2563EB;
  --sidebar-primary-foreground: #ffffff;
  --sidebar-accent: #EF4444;
  --sidebar-accent-foreground: #ffffff;
  --sidebar-border: #303642;
  --sidebar-ring: #EF4444;
  --radius: 6px;
}
tsx starter
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
  Card,
  CardContent,
  CardDescription,
  CardFooter,
  CardHeader,
  CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";

export function MinimalReproShadcnKit() {
  return (
    <section className="grid gap-4 rounded-[var(--radius)] border bg-background p-4 text-foreground">
      <div className="flex items-start justify-between gap-4">
        <div>
          <Badge variant="outline">shadcn/ui</Badge>
          <h2 className="mt-3 text-2xl font-semibold tracking-tight">Minimal repro</h2>
          <p className="mt-1 max-w-xl text-sm text-muted-foreground">
            Use the Katagami registry theme, then compose these shadcn primitives
            with the language-specific component recipes.
          </p>
        </div>
        <Button>Apply theme</Button>
      </div>

      <Tabs defaultValue="components">
        <TabsList>
          <TabsTrigger value="components">Components</TabsTrigger>
          <TabsTrigger value="states">States</TabsTrigger>
          <TabsTrigger value="export">Export</TabsTrigger>
        </TabsList>
      </Tabs>

      <Card>
        <CardHeader>
          <CardTitle>Component recipe</CardTitle>
          <CardDescription>
            Replace this starter content with the agent-authored product scene
            from components.md and preview-shots.json.
          </CardDescription>
        </CardHeader>
        <CardContent className="grid gap-3 sm:grid-cols-[1fr_auto]">
          <Input defaultValue="Tokenized shadcn surface" aria-label="Recipe name" />
          <Button variant="secondary">Preview state</Button>
        </CardContent>
        <CardFooter className="justify-between">
          <Badge>Ready</Badge>
          <Button variant="outline">Copy recipe</Button>
        </CardFooter>
      </Card>
    </section>
  );
}
theme JSONcompatibility fallback
{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "minimal-repro",
  "type": "registry:theme",
  "title": "Minimal repro shadcn Theme",
  "cssVars": {
    "theme": {},
    "light": {
      "background": "#F7F3EA",
      "foreground": "#111827",
      "card": "#FFFFFF",
      "card-foreground": "#111827",
      "popover": "#FFFFFF",
      "popover-foreground": "#111827",
      "primary": "#2563EB",
      "primary-foreground": "#ffffff",
      "secondary": "#475569",
      "secondary-foreground": "#ffffff",
      "muted": "#E5E7EB",
      "muted-foreground": "#111827",
      "accent": "#EF4444",
      "accent-foreground": "#ffffff",
      "destructive": "#dc2626",
      "border": "#CBD5E1",
      "input": "#CBD5E1",
      "ring": "#EF4444",
      "chart-1": "#2563EB",
      "chart-2": "#475569",
      "chart-3": "#EF4444",
      "chart-4": "#10B981",
      "chart-5": "#F59E0B",
      "sidebar": "#FFFFFF",
      "sidebar-foreground": "#111827",
      "sidebar-primary": "#2563EB",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#EF4444",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#CBD5E1",
      "sidebar-ring": "#EF4444",
      "radius": "6px"
    },
    "dark": {
      "background": "#0f1115",
      "foreground": "#f8fafc",
      "card": "#181b22",
      "card-foreground": "#f8fafc",
      "popover": "#181b22",
      "popover-foreground": "#f8fafc",
      "primary": "#2563EB",
      "primary-foreground": "#ffffff",
      "secondary": "#252a33",
      "secondary-foreground": "#f8fafc",
      "muted": "#252a33",
      "muted-foreground": "#a1a1aa",
      "accent": "#EF4444",
      "accent-foreground": "#ffffff",
      "destructive": "#dc2626",
      "border": "#303642",
      "input": "#303642",
      "ring": "#EF4444",
      "chart-1": "#2563EB",
      "chart-2": "#475569",
      "chart-3": "#EF4444",
      "chart-4": "#10B981",
      "chart-5": "#F59E0B",
      "sidebar": "#181b22",
      "sidebar-foreground": "#f8fafc",
      "sidebar-primary": "#2563EB",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#EF4444",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#303642",
      "sidebar-ring": "#EF4444",
      "radius": "6px"
    }
  },
  "meta": {
    "source": "katagami",
    "languageId": "en-019e04f8-a87f-7123-bbb2-c59e5a75a160",
    "slug": "minimal-repro",
    "componentManifest": [
      "button",
      "card",
      "input",
      "textarea",
      "select",
      "dialog",
      "sheet",
      "tabs",
      "badge",
      "separator",
      "checkbox",
      "switch",
      "slider",
      "tooltip",
      "dropdown-menu",
      "table"
    ],
    "installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
    "nativeTokenNames": {
      "borders": [
        "evidence",
        "failure_rail",
        "focus",
        "hairline"
      ],
      "colors": [
        "accent",
        "background",
        "border",
        "danger",
        "foreground",
        "muted",
        "primary",
        "secondary",
        "success",
        "surface",
        "surface_alt",
        "warning"
      ],
      "motion": [
        "duration_base",
        "duration_fast",
        "easing",
        "principle"
      ],
      "opacity": [
        "disabled",
        "overlay"
      ],
      "radii": [
        "lg",
        "md",
        "pill",
        "sm"
      ],
      "shadows": [
        "focus",
        "md",
        "sm"
      ],
      "spacing": [
        "lg",
        "md",
        "sm",
        "xl",
        "xs",
        "xxl"
      ],
      "surfaces": [
        "bench",
        "case",
        "evidence",
        "failure_tint",
        "inverted"
      ],
      "typography": [
        "body_font",
        "google_fonts_url",
        "heading_font",
        "line_height",
        "mono_font",
        "scale"
      ]
    }
  }
}
component recipescompatibility fallback
# Minimal repro shadcn/ui Components

Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019e04f8-a87f-7123-bbb2-c59e5a75a160`
Slug: `minimal-repro`

## Intent

shadcn/ui component recipes for the Katagami language Minimal repro.

## Required primitives

- button
- card
- input
- textarea
- select
- dialog
- sheet
- tabs
- badge
- separator
- checkbox
- switch
- slider
- tooltip
- dropdown-menu
- table

Install with `npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table`.

## Token cues

Colors:

{
  "accent": "#EF4444",
  "background": "#F7F3EA",
  "border": "#CBD5E1",
  "danger": "#DC2626",
  "foreground": "#111827",
  "muted": "#E5E7EB",
  "primary": "#2563EB",
  "secondary": "#475569",
  "success": "#10B981",
  "surface": "#FFFFFF",
  "surface_alt": "#F1F5F9",
  "warning": "#F59E0B"
}

Typography:

{
  "body_font": "IBM Plex Sans",
  "google_fonts_url": "https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap",
  "heading_font": "IBM Plex Sans",
  "line_height": "1.55",
  "mono_font": "IBM Plex Mono",
  "scale": {
    "base": "1rem",
    "lg": "1.125rem",
    "sm": "0.875rem",
    "xl": "1.5rem",
    "xs": "0.75rem",
    "xxl": "2.25rem"
  }
}

## Visual character to preserve

- A paper-white debug bench uses #F7F3EA panels on #111827 ink with thin #CBD5E1 dividers, so each region reads like an isolated test case rather than a marketing card.
- Reproduction focus is expressed with vivid #EF4444 failure rails, #F59E0B warning tags, and #10B981 passing badges applied as left borders, chips, and status dots in concrete CSS.
- Typography pairs IBM Plex Sans headings with IBM Plex Mono evidence fields; code-like labels, tabular numbers, and uppercase step markers make the interface feel inspectable.
- Layouts use constrained grids, numbered steps, small checklists, and annotated callouts with dashed outlines to show the minimum path from input to observable result.

## ShadSync visual profile

{
  "family": "paper-collage",
  "material": "paper",
  "contour": "pebble",
  "border": "dashed",
  "underlay": false,
  "grain": true,
  "stickerBadges": true,
  "motion": "still",
  "density": "balanced",
  "accents": [
    "primary",
    "accent",
    "secondary",
    "muted"
  ]
}

## Signature component recipes

### Button
Use `Button` for primary, secondary, outline, and ghost actions. Primary actions must expose the language's strongest contrast pair, while secondary and ghost actions should preserve the surface treatment instead of falling back to default neutral SaaS styling.

### Card
Use `Card`, `CardHeader`, `CardContent`, `CardFooter`, and `CardAction` as the main composition frame. Cards should demonstrate the language's surface, border, hierarchy, and density rules rather than appearing as generic rounded rectangles.

### Input and Textarea
Use `Input` and `Textarea` with visible focus rings, field labels, validation states, and the language's rhythm. Forms should show real product content, not placeholder-only controls.

### Select, Tabs, and Table
Use `Select`, `Tabs`, and `Table` to prove navigation, filtering, and dense data states. The table should show row rhythm, separators, hover/focus states, and an empty or status state when the language calls for it.

### Dialog and Sheet
Use `Dialog` for centered decisions and `Sheet` for contextual editing. Both should inherit the language's spacing, border, overlay, and motion rules.

## Preview shots

- `application-shell`: dashboard or workspace shell with navigation, cards, forms, and state badges.
- `detail-editor`: focused editing flow using input, textarea, select, switch/checkbox, dialog or sheet, and action buttons.
- `data-operations`: table-heavy operational view with tabs, dropdown menu affordances, badges, and destructive/empty states.
- Each preview shot must include a renderable `scene` payload with concrete headline, description, actions, and rows/fields/stats for the UI preview.

## Implementation contract

- Start from local `ui/src/components/ui` shadcn-style primitives; do not create a second component system.
- Apply `/katagami/shadcn/minimal-repro/registry-theme.json` variables, then use these recipes for composition and state design.
- Preserve Katagami token names as source metadata; shadcn semantic names are only the export surface.
- Do: Start with the smallest reproducible path and show every input that affects the result.; Pair each color status with text labels, icons, or rail patterns so the state is not color-only.; Use mono typography for values, timestamps, IDs, and code excerpts to reinforce inspectability.; Keep motion short and deterministic, limited to revealing changed state or validation feedback.
- Do not: Do not add decorative gradients, mascot illustrations, or cinematic effects that obscure the proof.; Do not hide errors behind hover-only UI or rely on color without labels.; Do not use rounded glassmorphism, soft shadows, or vague empty states that weaken the lab-bench character.; Do not create generic component catalogs; always stage a plausible debugging workflow.

## Copy-paste component example

This generated starter proves the import shape. Production Katagami agents should replace it with a language-specific product composition.

```tsx
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
  Card,
  CardContent,
  CardDescription,
  CardFooter,
  CardHeader,
  CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";

export function MinimalReproShadcnKit() {
  return (
    <section className="grid gap-4 rounded-[var(--radius)] border bg-background p-4 text-foreground">
      <div className="flex items-start justify-between gap-4">
        <div>
          <Badge variant="outline">shadcn/ui</Badge>
          <h2 className="mt-3 text-2xl font-semibold tracking-tight">Minimal repro</h2>
          <p className="mt-1 max-w-xl text-sm text-muted-foreground">
            Use the Katagami registry theme, then compose these shadcn primitives
            with the language-specific component recipes.
          </p>
        </div>
        <Button>Apply theme</Button>
      </div>

      <Tabs defaultValue="components">
        <TabsList>
          <TabsTrigger value="components">Components</TabsTrigger>
          <TabsTrigger value="states">States</TabsTrigger>
          <TabsTrigger value="export">Export</TabsTrigger>
        </TabsList>
      </Tabs>

      <Card>
        <CardHeader>
          <CardTitle>Component recipe</CardTitle>
          <CardDescription>
            Replace this starter content with the agent-authored product scene
            from components.md and preview-shots.json.
          </CardDescription>
        </CardHeader>
        <CardContent className="grid gap-3 sm:grid-cols-[1fr_auto]">
          <Input defaultValue="Tokenized shadcn surface" aria-label="Recipe name" />
          <Button variant="secondary">Preview state</Button>
        </CardContent>
        <CardFooter className="justify-between">
          <Badge>Ready</Badge>
          <Button variant="outline">Copy recipe</Button>
        </CardFooter>
      </Card>
    </section>
  );
}
```

## Layout notes

{
  "accessibility": "Maintain WCAG AA contrast, visible focus rings, non-color status labels, reduced-motion safe transitions, and 44px touch targets on mobile.",
  "density": "High information density is acceptable when hierarchy is explicit; use 16px base gaps and reserve large whitespace for isolating the failing case.",
  "grid": "12-column desktop bench with a narrow reproduction checklist, wide evidence workspace, and compact status sidebar; collapse to 6 columns on tablet and single column on mobile.",
  "responsive": "At 1440px show tri-pane investigation, at 768px stack status below evidence, and at 375px turn steps into full-width cards with sticky primary action."
}
preview shotscompatibility fallback
{
  "artifact": "katagami:shadcn-preview-shots",
  "version": "preview-shots-v1",
  "generator": "katagami-ui-compatibility-projection",
  "generatedBy": "katagami-ui-projection",
  "requiresVisualProfile": true,
  "schema": "katagami:shadcn-preview-shots/renderable-v1",
  "renderable": true,
  "language": {
    "id": "en-019e04f8-a87f-7123-bbb2-c59e5a75a160",
    "name": "Minimal repro",
    "slug": "minimal-repro"
  },
  "installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
  "primitives": [
    "button",
    "card",
    "input",
    "textarea",
    "select",
    "dialog",
    "sheet",
    "tabs",
    "badge",
    "separator",
    "checkbox",
    "switch",
    "slider",
    "tooltip",
    "dropdown-menu",
    "table"
  ],
  "identityNotes": [
    "A paper-white debug bench uses #F7F3EA panels on #111827 ink with thin #CBD5E1 dividers, so each region reads like an isolated test case rather than a marketing card.",
    "Reproduction focus is expressed with vivid #EF4444 failure rails, #F59E0B warning tags, and #10B981 passing badges applied as left borders, chips, and status dots in concrete CSS.",
    "Typography pairs IBM Plex Sans headings with IBM Plex Mono evidence fields; code-like labels, tabular numbers, and uppercase step markers make the interface feel inspectable.",
    "Layouts use constrained grids, numbered steps, small checklists, and annotated callouts with dashed outlines to show the minimum path from input to observable result."
  ],
  "visualProfile": {
    "family": "paper-collage",
    "material": "paper",
    "contour": "pebble",
    "border": "dashed",
    "underlay": false,
    "grain": true,
    "stickerBadges": true,
    "motion": "still",
    "density": "balanced",
    "accents": [
      "primary",
      "accent",
      "secondary",
      "muted"
    ]
  },
  "shots": [
    {
      "id": "application-shell",
      "title": "Application shell",
      "viewport": "desktop",
      "primitives": [
        "button",
        "card",
        "input",
        "select",
        "tabs",
        "badge",
        "separator",
        "table"
      ],
      "composition": "A real product workspace with navigation, summary cards, filtering controls, and one dense content region.",
      "mustShow": [
        "primary and secondary actions",
        "card hierarchy",
        "filterable state",
        "table or list density"
      ],
      "avoid": [
        "component inventory walls",
        "placeholder-only content",
        "generic rounded SaaS chrome"
      ],
      "scene": {
        "eyebrow": "workspace spread",
        "headline": "Minimal repro launch room",
        "description": "A product team workspace where navigation, filters, metrics, and dense rows carry the language's visible structure.",
        "primaryAction": "Apply theme",
        "secondaryAction": "Review states",
        "stats": [
          {
            "label": "components",
            "value": "16",
            "tone": "accent"
          },
          {
            "label": "states",
            "value": "ready"
          },
          {
            "label": "density",
            "value": "balanced",
            "tone": "warning"
          }
        ],
        "rows": [
          {
            "label": "Primary flow",
            "value": "mapped",
            "status": "active"
          },
          {
            "label": "Token coverage",
            "value": "semantic",
            "status": "synced"
          },
          {
            "label": "Responsive proof",
            "value": "queued",
            "status": "review"
          }
        ],
        "statuses": [
          "Active",
          "Synced",
          "Draft"
        ]
      }
    },
    {
      "id": "detail-editor",
      "title": "Detail editor",
      "viewport": "tablet",
      "primitives": [
        "button",
        "card",
        "input",
        "textarea",
        "select",
        "checkbox",
        "switch",
        "slider",
        "dialog",
        "sheet"
      ],
      "composition": "A focused editing flow with form fields, validation, confirmation, and a contextual side panel.",
      "mustShow": [
        "focus ring",
        "error or destructive state",
        "dialog or sheet treatment",
        "written guidance content"
      ],
      "avoid": [
        "unstyled browser controls",
        "floating cards inside cards",
        "missing labels"
      ],
      "scene": {
        "eyebrow": "editing flow",
        "headline": "Language recipe editor",
        "description": "A focused form proving labels, validation, toggles, panel rhythm, and action hierarchy.",
        "primaryAction": "Save recipe",
        "secondaryAction": "Open sheet",
        "fields": [
          {
            "label": "Component family",
            "value": "Narrative cards"
          },
          {
            "label": "State treatment",
            "value": "Visible focus + validation"
          },
          {
            "label": "Motion",
            "value": "Small lift, no opacity-only fade"
          }
        ],
        "statuses": [
          "Focus",
          "Invalid",
          "Confirmed"
        ]
      }
    },
    {
      "id": "data-operations",
      "title": "Data operations",
      "viewport": "mobile",
      "primitives": [
        "button",
        "tabs",
        "badge",
        "dropdown-menu",
        "table",
        "tooltip",
        "separator"
      ],
      "composition": "A compact operational view proving row rhythm, stacked actions, menu states, badges, and empty/destructive states.",
      "mustShow": [
        "responsive reflow",
        "dense row styling",
        "menu affordance",
        "status badge system"
      ],
      "avoid": [
        "desktop-only tables",
        "text overflow",
        "default shadcn spacing without Katagami character"
      ],
      "scene": {
        "eyebrow": "operations",
        "headline": "Compact review queue",
        "description": "A narrow viewport scene with rows, menus, tooltips, badges, and destructive affordances.",
        "primaryAction": "Resolve",
        "secondaryAction": "Filter",
        "rows": [
          {
            "label": "Button hierarchy",
            "value": "approved",
            "status": "ok"
          },
          {
            "label": "Table rhythm",
            "value": "needs pass",
            "status": "watch"
          },
          {
            "label": "Empty state",
            "value": "designed",
            "status": "done"
          }
        ],
        "statuses": [
          "Queued",
          "Blocked",
          "Done"
        ]
      }
    }
  ],
  "componentRecipes": [
    {
      "primitive": "button",
      "intent": "Prove action hierarchy, focus, disabled, and destructive states."
    },
    {
      "primitive": "card",
      "intent": "Carry the language surface, border, elevation, and density rules."
    },
    {
      "primitive": "input",
      "intent": "Show labels, focus rings, validation, and spacing rhythm."
    },
    {
      "primitive": "textarea",
      "intent": "Show longer guidance, validation copy, and writing density."
    },
    {
      "primitive": "select",
      "intent": "Show filtering, selection contrast, and menu trigger styling."
    },
    {
      "primitive": "dialog",
      "intent": "Show centered decision states and overlay treatment."
    },
    {
      "primitive": "sheet",
      "intent": "Show contextual side panels and responsive editing."
    },
    {
      "primitive": "tabs",
      "intent": "Show navigational structure and active/inactive contrast."
    },
    {
      "primitive": "badge",
      "intent": "Show compact status vocabulary and semantic colors."
    },
    {
      "primitive": "separator",
      "intent": "Show section rhythm without generic gray dividers."
    },
    {
      "primitive": "checkbox",
      "intent": "Show binary selection with visible focus and checked states."
    },
    {
      "primitive": "switch",
      "intent": "Show settings toggles and on/off contrast."
    },
    {
      "primitive": "slider",
      "intent": "Show numeric adjustment with track/thumb styling."
    },
    {
      "primitive": "tooltip",
      "intent": "Show concise explanation styling above compact controls."
    },
    {
      "primitive": "dropdown-menu",
      "intent": "Show action menus, destructive items, and grouped choices."
    },
    {
      "primitive": "table",
      "intent": "Show dense operational data, separators, row states, and responsive behavior."
    }
  ],
  "qualityRules": {
    "do": [
      "Start with the smallest reproducible path and show every input that affects the result.",
      "Pair each color status with text labels, icons, or rail patterns so the state is not color-only.",
      "Use mono typography for values, timestamps, IDs, and code excerpts to reinforce inspectability.",
      "Keep motion short and deterministic, limited to revealing changed state or validation feedback."
    ],
    "dont": [
      "Do not add decorative gradients, mascot illustrations, or cinematic effects that obscure the proof.",
      "Do not hide errors behind hover-only UI or rely on color without labels.",
      "Do not use rounded glassmorphism, soft shadows, or vague empty states that weaken the lab-bench character.",
      "Do not create generic component catalogs; always stage a plausible debugging workflow."
    ]
  }
}