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.
specification
philosophy
tokens
borders4 items
- evidence
- 1px dashed #94A3B8
- failure rail
- 4px solid #EF4444
- focus
- 2px solid #2563EB
- hairline
- 1px solid #CBD5E1
colors12 items
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
- 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.
layout
Maintain WCAG AA contrast, visible focus rings, non-color status labels, reduced-motion safe transitions, and 44px touch targets on mobile.
High information density is acceptable when hierarchy is explicit; use 16px base gaps and reserve large whitespace for isolating the failing case.
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.
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
- 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 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
A focused debugging bench with numbered repro steps, failing evidence panel, and pass/fail status rails.
1.5px outline icons with square corners and tiny mono labels.
Sparse line annotations, cropped terminal captures, redline callouts, and paper labels; no glossy illustrations.
generative
Motion behaves like instrumentation: brief, reversible, and only triggered by state changes.
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"
]
}
}
}
```embodiments
at a glance
Typography
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Components
Components rendered with this language’s tokens — colors, type, and rounded corners as specified.
Spacing
- lg24px
- md16px
- sm8px
- xl40px
- xs4px
- xxl64px
Shape
implementation kit
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
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table: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;
}
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>
);
}
{
"$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"
]
}
}
}
# 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."
}
{
"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."
]
}
}