Typography
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
A portable design language for agents: download the markdown first, then inspect the preview, tokens, and rules as needed.
Portable DESIGN.md source of truth for most agents and apps.
Lay screens as an overlapping pile, not an aligned grid: paper scraps span irregular widths, nudge up into one another, tilt a degree or two and cast hard offset pin shadows, each held by a visible staple, tape strip or pushpin on a tar-black wall. Section bands are a mono index box (amber-ruled) + an Anton uppercase title + a mono aside. Compose real application screens, never a component catalogue. On mobile the pile relaxes into a clean single stack with no tilt.
Hierarchy is physical: what sits on top of the pile, biggest and least buried, is what matters now. Oversized condensed uppercase Anton headlines are the loudest layer; mono serials are stamped metadata. Sodium amber flags only what is live and never does structural work.
Medium-high: tightly packed mono metadata, dashed production-sheet separators and 8px-rhythm gutters. Negative space is the dark wall showing between scraps, not luxury padding.
Stapled overlap — torn xerox scraps pinned over each other at varied tilts with a visible fastener (staple / tape / pushpin), the loudest sheet on top. It appears as every panel, the stat scraps, the overlapping wall pile, and the hero collage; the single amber recolours live tags, primary buttons, focus rings and the chart/meter peak so the signature maps onto semantic roles.
An overlap pile, not a fixed grid: a 12-track flexible layout where scraps span irregular widths and use negative margins to overlap and tilt. No serial rail, no balanced symmetry. Tablet eases the overlap; mobile collapses to a single untilted vertical stack.
Tight, consistent 8px-rhythm gutters; the visible space is the dark wall between pinned scraps, read as production margin rather than soft luxury padding.
medium-high
Renders well from 390px mobile to 2560px+ ultra-wide; contained content caps at 1440 and centres while only the hero spans 100vw; tables scroll within their scrap; the pile relaxes to a single column and drops all tilt/overlap on mobile; grids use minmax(0,1fr)+min-width:0 so children shrink instead of overflowing.
toner
Dense walls of overlapping wheatpasted xerox flyers in the high-contrast photocopy Toner technique — coarse halftone, blown highlights, crushed blacks, misregistration and toner grain — bright off-white scraps crowding a deep tar-black wall, with staples, tape, pushpins and registration crosshairs as part of the printed surface.
Full-bleed hero collages and feature scraps; never clean centred floats, never any text or letters in the image.
# Wheatpaste ## Philosophy A bulletin-wall interface language for things that have to be heard before they are read. Conceived independently from the anti-design / photocopied-poster brief: bright torn xerox scraps stapled over each other on a tar-black wall, the loudest sheet on top, lit by a single sodium-amber highlighter. Where a calmer reading of the brief lays soot ink on a pale paper field and locks it to an exposed engineering grid, Wheatpaste reads the same heritage as a flyposted stairwell — there is no grid to hide behind, the pile is the structure. ### Values - The pile is the structure: content is scraps stapled in overlap, hierarchy carried by depth, tilt and what sits on top — not by a fixed column. - Show the fastener: staples, tape and pushpins are the ornament, and every fastener declares how a scrap is held to the wall. - One colour only: sodium amber used like hazard tape, a highlighter for what is live — strip it and the wall still reads. - Type as the loudest layer: condensed uppercase Anton screams before a word of body copy is read. - Visible construction over seamless illusion: 3px soot borders, hard offset pin shadows, toner grain and registration crosshairs stay on. ### Anti-Values - No exposed serial-rail engineering grid or balanced startup-dashboard symmetry; the layout is an overlapping pile, not aligned columns. - No misregistered print-double as the signature; the mechanic here is physical stapled overlap, not an offset ghost duplicate. - No pale paper ground or white default; the ground is a tar-black grimy wall and the scraps pop bright against it. - No amber wash, gloss, blur, rounded SaaS cards, or colour doing the work type and structure should carry. ### Visual Character - Every notice is a bright off-white xerox scrap with a 3px soot-black border, a toner-grain multiply overlay and a hard offset pin shadow, pasted at a degree or two of tilt over the scrap beneath it on a tar-black wall. - Fasteners are the signature ornament: a visible staple, a strip of translucent tape, or a pushpin holds each scrap, and the choice of fastener is shown rather than hidden. - Headlines are oversized condensed uppercase Anton blocks stacked tight like a pasted bill, sitting as the top layer of the pile; mono JetBrains serials, timestamps and frequencies read as stamped production metadata. - The ground is a warm grimy tar-black concrete wall lit faintly by a single sodium glow; light type lives directly on the wall while soot type lives on the paper scraps. - Sodium amber is the only colour, applied like hazard tape to live tags, the primary button, focus rings and the on-air meter / chart peak — never spread as a fill. - Controls are explicit mechanical slabs with hard-0 corners and 3px soot borders that invert and shift on press; the on-air meter and signal chart turn amber above the live threshold. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#16140f` | | bg_2 | `#0e0d09` | | surface | `#f4f0e6` | | surface_2 | `#e6e0d2` | | surface_3 | `#d6cfbd` | | text | `#16140f` | | wall_text | `#f4f0e6` | | muted | `#6f6a5c` | | wall_muted | `#8d8676` | | border | `#16140f` | | accent | `#f2b705` | | on_accent | `#16140f` | | primary | `#f2b705` | | success | `#9aa06a` | | warning | `#f2b705` | | error | `#c2552e` | | info | `#7f8a8d` | ### Typography - **Base Size**: 17px - **Body Font**: Roboto Condensed - **Heading Font**: Anton - **Mono Font**: JetBrains Mono - **Heading Weight**: 400 - **Heading Transform**: uppercase - **Letter Spacing**: 0.01em - **Line Height**: 1.5 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Anton&family=Roboto+Condensed:ital,wght@0,400;0,700;1,700&family=JetBrains+Mono:wght@400;500;700&display=swap ### Radii - **None**: 0 - **Sm**: 0 - **Md**: 0 - **Lg**: 0 - **Full**: 9999px ### Shadows - **Sm**: 4px 4px 0 #16140f - **Pin**: 6px 7px 0 rgba(0,0,0,0.55), 14px 16px 0 rgba(0,0,0,0.32) - **Lift**: 10px 12px 0 rgba(0,0,0,0.6), 22px 26px 0 rgba(0,0,0,0.34) - **Philosophy**: Hard offset pin shadows from layered scraps only — never blur, glow, glass or gloss. ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64,96] ### Surfaces - **Treatment**: paper-on-wall - **Card Style**: Bright off-white xerox paper scraps with a 3px soot-black border, toner-grain multiply overlay and a hard offset pin shadow, pasted at a slight tilt and held by a visible staple, tape strip or pushpin over a tar-black wall. - **Bg Pattern**: concrete wall + faint sodium glow + toner grain ### Borders - **Default Width**: 3px - **Accent Width**: 3px - **Style**: solid - **Character**: Hard mechanical soot-black borders, always visible, hard-0 corners, paired with a visible fastener. ### Motion - **Duration**: 150ms - **Easing**: cubic-bezier(0.2,0.9,0.2,1) - **Philosophy**: snappy and mechanical; buttons invert and shift on press; scraps drop in like pinned paper over a settled no-JS default; respects prefers-reduced-motion ## Rules ### Composition Lay screens as an overlapping pile, not an aligned grid: paper scraps span irregular widths, nudge up into one another, tilt a degree or two and cast hard offset pin shadows, each held by a visible staple, tape strip or pushpin on a tar-black wall. Section bands are a mono index box (amber-ruled) + an Anton uppercase title + a mono aside. Compose real application screens, never a component catalogue. On mobile the pile relaxes into a clean single stack with no tilt. ### Hierarchy Hierarchy is physical: what sits on top of the pile, biggest and least buried, is what matters now. Oversized condensed uppercase Anton headlines are the loudest layer; mono serials are stamped metadata. Sodium amber flags only what is live and never does structural work. ### Density Medium-high: tightly packed mono metadata, dashed production-sheet separators and 8px-rhythm gutters. Negative space is the dark wall showing between scraps, not luxury padding. ### Signature Stapled overlap — torn xerox scraps pinned over each other at varied tilts with a visible fastener (staple / tape / pushpin), the loudest sheet on top. It appears as every panel, the stat scraps, the overlapping wall pile, and the hero collage; the single amber recolours live tags, primary buttons, focus rings and the chart/meter peak so the signature maps onto semantic roles. ## Layout ### Grid An overlap pile, not a fixed grid: a 12-track flexible layout where scraps span irregular widths and use negative margins to overlap and tilt. No serial rail, no balanced symmetry. Tablet eases the overlap; mobile collapses to a single untilted vertical stack. ### Whitespace Tight, consistent 8px-rhythm gutters; the visible space is the dark wall between pinned scraps, read as production margin rather than soft luxury padding. ### Density medium-high ### Responsive Renders well from 390px mobile to 2560px+ ultra-wide; contained content caps at 1440 and centres while only the hero spans 100vw; tables scroll within their scrap; the pile relaxes to a single column and drops all tilt/overlap on mobile; grids use minmax(0,1fr)+min-width:0 so children shrink instead of overflowing. ### Breakpoints - **Desktop**: 1440+ - **Tablet**: 768-1023 - **Mobile**: 390-767 - **Ultrawide**: 1700+ caps at 1440 contained ## Guidance ### Do - Build the page as an overlapping pile of stapled scraps; let the loudest sheet sit on top. - Show every fastener — staple, tape or pushpin — as the ornament that declares how a scrap is held. - Lead with oversized condensed uppercase Anton before any supporting copy. - Keep 3px soot borders, dashed rules and hard offset pin shadows visibly dominant, with toner grain on every scrap. - Reserve sodium amber for one live thing per region — a highlighter, never a fill field. ### Don't - Do not fall back to an exposed serial-rail grid or a balanced, symmetric startup-dashboard layout. - Do not use a misregistered offset duplicate as the signature, or a pale paper / white ground. - Do not round corners (except status dots), blur shadows, or introduce glass, gloss or glow. - Do not let amber wash a surface or let colour carry hierarchy that type and overlap should carry. - Do not leave any browser-default control unstyled, and do not let the tilt get so chaotic that scanning breaks. ### Accessibility Body 17px+, table rows 14.5px+; soot-black on off-white and off-white on tar-black both clear AA comfortably. Focus states invert to high-contrast with a 3px amber ring; controls are sized to content and evenly padded. The settled page renders with no JavaScript; motion respects prefers-reduced-motion. No emoji or decorative symbol glyphs in copy — icons are SVG primitives. ## Imagery Direction ### Pairs With toner ### Summary Dense walls of overlapping wheatpasted xerox flyers in the high-contrast photocopy Toner technique — coarse halftone, blown highlights, crushed blacks, misregistration and toner grain — bright off-white scraps crowding a deep tar-black wall, with staples, tape, pushpins and registration crosshairs as part of the printed surface. ### Subjects - a screaming mouth shouting into a megaphone - a torn flyposted bulletin wall - a pirate-radio transmitter and antenna - a fist gripping a bullhorn - a stack of pasted gig handbills ### Usage Full-bleed hero collages and feature scraps; never clean centred floats, never any text or letters in the image.
---
version: "alpha"
name: "Wheatpaste"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#16140f"
bg_2: "#0e0d09"
surface: "#f4f0e6"
surface_2: "#e6e0d2"
surface_3: "#d6cfbd"
text: "#16140f"
wall_text: "#f4f0e6"
muted: "#6f6a5c"
wall_muted: "#8d8676"
border: "#16140f"
accent: "#f2b705"
on_accent: "#16140f"
primary: "#f2b705"
success: "#9aa06a"
warning: "#f2b705"
error: "#c2552e"
info: "#7f8a8d"
typography:
headline-lg:
fontFamily: "Anton"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "0.01em"
headline-md:
fontFamily: "Anton"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "0.01em"
body-md:
fontFamily: "Roboto Condensed"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "0.01em"
label-md:
fontFamily: "JetBrains Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
sm: "0px"
md: "0px"
lg: "0px"
full: "9999px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
step-8: "96px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-bg_2:
backgroundColor: "{colors.bg_2}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_2:
backgroundColor: "{colors.surface_2}"
color-reference-surface_3:
backgroundColor: "{colors.surface_3}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-wall_text:
backgroundColor: "{colors.wall_text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-wall_muted:
backgroundColor: "{colors.wall_muted}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-primary:
backgroundColor: "{colors.primary}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
button-primary:
backgroundColor: "{colors.primary}"
textColor: "#000000"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Wheatpaste
## Overview
A bulletin-wall interface language for things that have to be heard before they are read. Conceived independently from the anti-design / photocopied-poster brief: bright torn xerox scraps stapled over each other on a tar-black wall, the loudest sheet on top, lit by a single sodium-amber highlighter. Where a calmer reading of the brief lays soot ink on a pale paper field and locks it to an exposed engineering grid, Wheatpaste reads the same heritage as a flyposted stairwell — there is no grid to hide behind, the pile is the structure.
### Values
- The pile is the structure: content is scraps stapled in overlap, hierarchy carried by depth, tilt and what sits on top — not by a fixed column.
- Show the fastener: staples, tape and pushpins are the ornament, and every fastener declares how a scrap is held to the wall.
- One colour only: sodium amber used like hazard tape, a highlighter for what is live — strip it and the wall still reads.
- Type as the loudest layer: condensed uppercase Anton screams before a word of body copy is read.
- Visible construction over seamless illusion: 3px soot borders, hard offset pin shadows, toner grain and registration crosshairs stay on.
### Anti-Values
- No exposed serial-rail engineering grid or balanced startup-dashboard symmetry; the layout is an overlapping pile, not aligned columns.
- No misregistered print-double as the signature; the mechanic here is physical stapled overlap, not an offset ghost duplicate.
- No pale paper ground or white default; the ground is a tar-black grimy wall and the scraps pop bright against it.
- No amber wash, gloss, blur, rounded SaaS cards, or colour doing the work type and structure should carry.
### Visual Character
- Every notice is a bright off-white xerox scrap with a 3px soot-black border, a toner-grain multiply overlay and a hard offset pin shadow, pasted at a degree or two of tilt over the scrap beneath it on a tar-black wall.
- Fasteners are the signature ornament: a visible staple, a strip of translucent tape, or a pushpin holds each scrap, and the choice of fastener is shown rather than hidden.
- Headlines are oversized condensed uppercase Anton blocks stacked tight like a pasted bill, sitting as the top layer of the pile; mono JetBrains serials, timestamps and frequencies read as stamped production metadata.
- The ground is a warm grimy tar-black concrete wall lit faintly by a single sodium glow; light type lives directly on the wall while soot type lives on the paper scraps.
- Sodium amber is the only colour, applied like hazard tape to live tags, the primary button, focus rings and the on-air meter / chart peak — never spread as a fill.
- Controls are explicit mechanical slabs with hard-0 corners and 3px soot borders that invert and shift on press; the on-air meter and signal chart turn amber above the live threshold.
## Colors
Use the YAML color tokens as the normative palette. The prose below names the roles agents should preserve when generating UI.
| Token | Value |
|-------|-------|
| bg | `#16140f` |
| bg_2 | `#0e0d09` |
| surface | `#f4f0e6` |
| surface_2 | `#e6e0d2` |
| surface_3 | `#d6cfbd` |
| text | `#16140f` |
| wall_text | `#f4f0e6` |
| muted | `#6f6a5c` |
| wall_muted | `#8d8676` |
| border | `#16140f` |
| accent | `#f2b705` |
| on_accent | `#16140f` |
| primary | `#f2b705` |
| success | `#9aa06a` |
| warning | `#f2b705` |
| error | `#c2552e` |
| info | `#7f8a8d` |
## Typography
- **Headline-Lg**: Anton, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Anton, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Roboto Condensed, 17px, weight 400, line-height 1.5.
- **Label-Md**: JetBrains Mono, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `12px`
- **Lg**: `16px`
- **Xl**: `24px`
- **2xl**: `32px`
- **3xl**: `48px`
- **4xl**: `64px`
- **Step-8**: `96px`
### Grid
An overlap pile, not a fixed grid: a 12-track flexible layout where scraps span irregular widths and use negative margins to overlap and tilt. No serial rail, no balanced symmetry. Tablet eases the overlap; mobile collapses to a single untilted vertical stack.
### Whitespace
Tight, consistent 8px-rhythm gutters; the visible space is the dark wall between pinned scraps, read as production margin rather than soft luxury padding.
### Density
medium-high
### Responsive
Renders well from 390px mobile to 2560px+ ultra-wide; contained content caps at 1440 and centres while only the hero spans 100vw; tables scroll within their scrap; the pile relaxes to a single column and drops all tilt/overlap on mobile; grids use minmax(0,1fr)+min-width:0 so children shrink instead of overflowing.
### Breakpoints
- **Desktop**: 1440+
- **Tablet**: 768-1023
- **Mobile**: 390-767
- **Ultrawide**: 1700+ caps at 1440 contained
## Elevation & Depth
### Shadows
- **Sm**: 4px 4px 0 #16140f
- **Pin**: 6px 7px 0 rgba(0,0,0,0.55), 14px 16px 0 rgba(0,0,0,0.32)
- **Lift**: 10px 12px 0 rgba(0,0,0,0.6), 22px 26px 0 rgba(0,0,0,0.34)
- **Philosophy**: Hard offset pin shadows from layered scraps only — never blur, glow, glass or gloss.
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `0px`
- **Md**: `0px`
- **Lg**: `0px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: paper-on-wall
- **Card Style**: Bright off-white xerox paper scraps with a 3px soot-black border, toner-grain multiply overlay and a hard offset pin shadow, pasted at a slight tilt and held by a visible staple, tape strip or pushpin over a tar-black wall.
- **Bg Pattern**: concrete wall + faint sodium glow + toner grain
### Borders
- **Default Width**: 3px
- **Accent Width**: 3px
- **Style**: solid
- **Character**: Hard mechanical soot-black borders, always visible, hard-0 corners, paired with a visible fastener.
## Components
### Composition
Lay screens as an overlapping pile, not an aligned grid: paper scraps span irregular widths, nudge up into one another, tilt a degree or two and cast hard offset pin shadows, each held by a visible staple, tape strip or pushpin on a tar-black wall. Section bands are a mono index box (amber-ruled) + an Anton uppercase title + a mono aside. Compose real application screens, never a component catalogue. On mobile the pile relaxes into a clean single stack with no tilt.
### Hierarchy
Hierarchy is physical: what sits on top of the pile, biggest and least buried, is what matters now. Oversized condensed uppercase Anton headlines are the loudest layer; mono serials are stamped metadata. Sodium amber flags only what is live and never does structural work.
### Density
Medium-high: tightly packed mono metadata, dashed production-sheet separators and 8px-rhythm gutters. Negative space is the dark wall showing between scraps, not luxury padding.
### Signature
Stapled overlap — torn xerox scraps pinned over each other at varied tilts with a visible fastener (staple / tape / pushpin), the loudest sheet on top. It appears as every panel, the stat scraps, the overlapping wall pile, and the hero collage; the single amber recolours live tags, primary buttons, focus rings and the chart/meter peak so the signature maps onto semantic roles.
## 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-019ef9e8-b2e5-7570-9be2-3ff526efdba8/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 Build the page as an overlapping pile of stapled scraps; let the loudest sheet sit on top.
- Do Show every fastener — staple, tape or pushpin — as the ornament that declares how a scrap is held.
- Do Lead with oversized condensed uppercase Anton before any supporting copy.
- Do Keep 3px soot borders, dashed rules and hard offset pin shadows visibly dominant, with toner grain on every scrap.
- Do Reserve sodium amber for one live thing per region — a highlighter, never a fill field.
- Don't Do not fall back to an exposed serial-rail grid or a balanced, symmetric startup-dashboard layout.
- Don't Do not use a misregistered offset duplicate as the signature, or a pale paper / white ground.
- Don't Do not round corners (except status dots), blur shadows, or introduce glass, gloss or glow.
- Don't Do not let amber wash a surface or let colour carry hierarchy that type and overlap should carry.
- Don't Do not leave any browser-default control unstyled, and do not let the tilt get so chaotic that scanning breaks.
### Accessibility
Body 17px+, table rows 14.5px+; soot-black on off-white and off-white on tar-black both clear AA comfortably. Focus states invert to high-contrast with a 3px amber ring; controls are sized to content and evenly padded. The settled page renders with no JavaScript; motion respects prefers-reduced-motion. No emoji or decorative symbol glyphs in copy — icons are SVG primitives.
## Imagery Direction
### Pairs With
toner
### Summary
Dense walls of overlapping wheatpasted xerox flyers in the high-contrast photocopy Toner technique — coarse halftone, blown highlights, crushed blacks, misregistration and toner grain — bright off-white scraps crowding a deep tar-black wall, with staples, tape, pushpins and registration crosshairs as part of the printed surface.
### Subjects
- a screaming mouth shouting into a megaphone
- a torn flyposted bulletin wall
- a pirate-radio transmitter and antenna
- a fist gripping a bullhorn
- a stack of pasted gig handbills
### Usage
Full-bleed hero collages and feature scraps; never clean centred floats, never any text or letters in the image.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "wheatpaste",
"type": "registry:theme",
"title": "Wheatpaste shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#16140f",
"foreground": "#16140f",
"card": "#f4f0e6",
"card-foreground": "#16140f",
"popover": "#f4f0e6",
"popover-foreground": "#16140f",
"primary": "#f2b705",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#6f6a5c",
"muted-foreground": "#16140f",
"accent": "#f2b705",
"accent-foreground": "#ffffff",
"destructive": "#c2552e",
"border": "#16140f",
"input": "#16140f",
"ring": "#f2b705",
"chart-1": "#f2b705",
"chart-2": "#f4f4f5",
"chart-3": "#f2b705",
"chart-4": "#9aa06a",
"chart-5": "#f2b705",
"sidebar": "#f4f0e6",
"sidebar-foreground": "#16140f",
"sidebar-primary": "#f2b705",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#7f8a8d",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#16140f",
"sidebar-ring": "#f2b705",
"radius": "0"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#f2b705",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#f2b705",
"accent-foreground": "#ffffff",
"destructive": "#c2552e",
"border": "#303642",
"input": "#303642",
"ring": "#f2b705",
"chart-1": "#f2b705",
"chart-2": "#f4f4f5",
"chart-3": "#f2b705",
"chart-4": "#9aa06a",
"chart-5": "#f2b705",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#f2b705",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#f2b705",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#f2b705",
"radius": "0"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ef9e8-b2e5-7570-9be2-3ff526efdba8",
"slug": "wheatpaste",
"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": {
"colors": [
"accent",
"bg",
"bg_2",
"border",
"error",
"info",
"muted",
"on_accent",
"primary",
"success",
"surface",
"surface_2",
"surface_3",
"text",
"wall_muted",
"wall_text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"lift",
"philosophy",
"pin",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"motion": [
"duration",
"easing",
"philosophy"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
Keep Wheatpasteand swap a palette and an art style onto it — the landing & dashboard recolor live. The Studio does the same with all three lanes free.
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.
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table:root {
--background: #16140f;
--foreground: #16140f;
--card: #f4f0e6;
--card-foreground: #16140f;
--popover: #f4f0e6;
--popover-foreground: #16140f;
--primary: #f2b705;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #6f6a5c;
--muted-foreground: #16140f;
--accent: #f2b705;
--accent-foreground: #ffffff;
--destructive: #c2552e;
--border: #16140f;
--input: #16140f;
--ring: #f2b705;
--chart-1: #f2b705;
--chart-2: #f4f4f5;
--chart-3: #f2b705;
--chart-4: #9aa06a;
--chart-5: #f2b705;
--sidebar: #f4f0e6;
--sidebar-foreground: #16140f;
--sidebar-primary: #f2b705;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #7f8a8d;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #16140f;
--sidebar-ring: #f2b705;
--radius: 0;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #f2b705;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #f2b705;
--accent-foreground: #ffffff;
--destructive: #c2552e;
--border: #303642;
--input: #303642;
--ring: #f2b705;
--chart-1: #f2b705;
--chart-2: #f4f4f5;
--chart-3: #f2b705;
--chart-4: #9aa06a;
--chart-5: #f2b705;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #f2b705;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #f2b705;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #f2b705;
--radius: 0;
}
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 WheatpasteShadcnKit() {
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">Wheatpaste</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",
"type": "registry:theme",
"name": "wheatpaste",
"title": "Wheatpaste",
"visualProfile": {
"family": "anti-design / flyposted bulletin wall",
"mode": "dark",
"ground": "tar-black grimy wall (#16140f)",
"surface": "off-white xerox paper scraps (#f4f0e6)",
"radius": "0 (hard corners only; pills 9999 reserved for status dots)",
"border": "3px stamped soot-black; always visible",
"shadow": "hard offset pin shadows (6px 7px 0 + deep second drop); never blurred",
"accent": "single sodium amber (#f2b705) used like hazard tape",
"material": "paper-on-wall: toner-grain paper sheets stapled/taped over a dark concrete field",
"type": { "display": "Anton (condensed poster)", "body": "Roboto Condensed", "mono": "JetBrains Mono" },
"motion": "snappy mechanical; buttons invert + shift on press; no gloss",
"ornament": "fasteners (staple, tape, pushpin) + registration crosshairs; ornament means how a scrap is held",
"notes": "Do not stamp a generic house chassis. Honour hard-0 corners, 3px soot borders, offset pin shadows and the single amber. Surfaces are bright paper on a dark wall."
},
"cssVars": {
"theme": {
"font-sans": "Roboto Condensed, sans-serif",
"font-mono": "JetBrains Mono, monospace",
"font-display": "Anton, sans-serif",
"radius": "0px"
},
"light": {
"background": "#16140f",
"foreground": "#f4f0e6",
"card": "#f4f0e6",
"card-foreground": "#16140f",
"popover": "#f4f0e6",
"popover-foreground": "#16140f",
"primary": "#f2b705",
"primary-foreground": "#16140f",
"secondary": "#e6e0d2",
"secondary-foreground": "#16140f",
"muted": "#e6e0d2",
"muted-foreground": "#6f6a5c",
"accent": "#f2b705",
"accent-foreground": "#16140f",
"destructive": "#c2552e",
"destructive-foreground": "#f4f0e6",
"border": "#16140f",
"input": "#16140f",
"ring": "#f2b705",
"chart-1": "#f2b705",
"chart-2": "#16140f",
"chart-3": "#6f6a5c",
"chart-4": "#9aa06a",
"chart-5": "#c2552e"
},
"dark": {
"background": "#16140f",
"foreground": "#f4f0e6",
"card": "#f4f0e6",
"card-foreground": "#16140f",
"popover": "#f4f0e6",
"popover-foreground": "#16140f",
"primary": "#f2b705",
"primary-foreground": "#16140f",
"secondary": "#e6e0d2",
"secondary-foreground": "#16140f",
"muted": "#d6cfbd",
"muted-foreground": "#6f6a5c",
"accent": "#f2b705",
"accent-foreground": "#16140f",
"destructive": "#c2552e",
"destructive-foreground": "#f4f0e6",
"border": "#16140f",
"input": "#16140f",
"ring": "#f2b705",
"chart-1": "#f2b705",
"chart-2": "#16140f",
"chart-3": "#6f6a5c",
"chart-4": "#9aa06a",
"chart-5": "#c2552e"
}
}
}
# Wheatpaste shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019ef9e8-b2e5-7570-9be2-3ff526efdba8`
Slug: `wheatpaste`
## Intent
A bulletin-wall interface language for things that have to be heard before they are read. Conceived independently from the anti-design / photocopied-poster brief: bright torn xerox scraps stapled over each other on a tar-black wall, the loudest sheet on top, lit by a single sodium-amber highlighter. Where a calmer reading of the brief lays soot ink on a pale paper field and locks it to an exposed engineering grid, Wheatpaste reads the same heritage as a flyposted stairwell — there is no grid to hide behind, the pile is the structure.
## 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:
{
"bg": "#16140f",
"bg_2": "#0e0d09",
"surface": "#f4f0e6",
"surface_2": "#e6e0d2",
"surface_3": "#d6cfbd",
"text": "#16140f",
"wall_text": "#f4f0e6",
"muted": "#6f6a5c",
"wall_muted": "#8d8676",
"border": "#16140f",
"accent": "#f2b705",
"on_accent": "#16140f",
"primary": "#f2b705",
"success": "#9aa06a",
"warning": "#f2b705",
"error": "#c2552e",
"info": "#7f8a8d"
}
Typography:
{
"base_size": "17px",
"body_font": "Roboto Condensed",
"heading_font": "Anton",
"mono_font": "JetBrains Mono",
"heading_weight": "400",
"heading_transform": "uppercase",
"letter_spacing": "0.01em",
"line_height": "1.5",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Anton&family=Roboto+Condensed:ital,wght@0,400;0,700;1,700&family=JetBrains+Mono:wght@400;500;700&display=swap"
}
## Visual character to preserve
- Every notice is a bright off-white xerox scrap with a 3px soot-black border, a toner-grain multiply overlay and a hard offset pin shadow, pasted at a degree or two of tilt over the scrap beneath it on a tar-black wall.
- Fasteners are the signature ornament: a visible staple, a strip of translucent tape, or a pushpin holds each scrap, and the choice of fastener is shown rather than hidden.
- Headlines are oversized condensed uppercase Anton blocks stacked tight like a pasted bill, sitting as the top layer of the pile; mono JetBrains serials, timestamps and frequencies read as stamped production metadata.
- The ground is a warm grimy tar-black concrete wall lit faintly by a single sodium glow; light type lives directly on the wall while soot type lives on the paper scraps.
- Sodium amber is the only colour, applied like hazard tape to live tags, the primary button, focus rings and the on-air meter / chart peak — never spread as a fill.
- Controls are explicit mechanical slabs with hard-0 corners and 3px soot borders that invert and shift on press; the on-air meter and signal chart turn amber above the live threshold.
## ShadSync visual profile
{
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "solid",
"underlay": true,
"grain": true,
"stickerBadges": true,
"motion": "lift-rotate",
"density": "dense",
"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/wheatpaste/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: Build the page as an overlapping pile of stapled scraps; let the loudest sheet sit on top.; Show every fastener — staple, tape or pushpin — as the ornament that declares how a scrap is held.; Lead with oversized condensed uppercase Anton before any supporting copy.; Keep 3px soot borders, dashed rules and hard offset pin shadows visibly dominant, with toner grain on every scrap.; Reserve sodium amber for one live thing per region — a highlighter, never a fill field.
- Do not: Do not fall back to an exposed serial-rail grid or a balanced, symmetric startup-dashboard layout.; Do not use a misregistered offset duplicate as the signature, or a pale paper / white ground.; Do not round corners (except status dots), blur shadows, or introduce glass, gloss or glow.; Do not let amber wash a surface or let colour carry hierarchy that type and overlap should carry.; Do not leave any browser-default control unstyled, and do not let the tilt get so chaotic that scanning breaks.
## 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 WheatpasteShadcnKit() {
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">Wheatpaste</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
{
"grid": "An overlap pile, not a fixed grid: a 12-track flexible layout where scraps span irregular widths and use negative margins to overlap and tilt. No serial rail, no balanced symmetry. Tablet eases the overlap; mobile collapses to a single untilted vertical stack.",
"whitespace": "Tight, consistent 8px-rhythm gutters; the visible space is the dark wall between pinned scraps, read as production margin rather than soft luxury padding.",
"density": "medium-high",
"responsive": "Renders well from 390px mobile to 2560px+ ultra-wide; contained content caps at 1440 and centres while only the hero spans 100vw; tables scroll within their scrap; the pile relaxes to a single column and drops all tilt/overlap on mobile; grids use minmax(0,1fr)+min-width:0 so children shrink instead of overflowing.",
"breakpoints": {
"desktop": "1440+",
"tablet": "768-1023",
"mobile": "390-767",
"ultrawide": "1700+ caps at 1440 contained"
}
}
{
"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-019ef9e8-b2e5-7570-9be2-3ff526efdba8",
"name": "Wheatpaste",
"slug": "wheatpaste"
},
"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": [
"Every notice is a bright off-white xerox scrap with a 3px soot-black border, a toner-grain multiply overlay and a hard offset pin shadow, pasted at a degree or two of tilt over the scrap beneath it on a tar-black wall.",
"Fasteners are the signature ornament: a visible staple, a strip of translucent tape, or a pushpin holds each scrap, and the choice of fastener is shown rather than hidden.",
"Headlines are oversized condensed uppercase Anton blocks stacked tight like a pasted bill, sitting as the top layer of the pile; mono JetBrains serials, timestamps and frequencies read as stamped production metadata.",
"The ground is a warm grimy tar-black concrete wall lit faintly by a single sodium glow; light type lives directly on the wall while soot type lives on the paper scraps.",
"Sodium amber is the only colour, applied like hazard tape to live tags, the primary button, focus rings and the on-air meter / chart peak — never spread as a fill.",
"Controls are explicit mechanical slabs with hard-0 corners and 3px soot borders that invert and shift on press; the on-air meter and signal chart turn amber above the live threshold."
],
"visualProfile": {
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "solid",
"underlay": true,
"grain": true,
"stickerBadges": true,
"motion": "lift-rotate",
"density": "dense",
"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": "Wheatpaste 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": [
"Build the page as an overlapping pile of stapled scraps; let the loudest sheet sit on top.",
"Show every fastener — staple, tape or pushpin — as the ornament that declares how a scrap is held.",
"Lead with oversized condensed uppercase Anton before any supporting copy.",
"Keep 3px soot borders, dashed rules and hard offset pin shadows visibly dominant, with toner grain on every scrap.",
"Reserve sodium amber for one live thing per region — a highlighter, never a fill field."
],
"dont": [
"Do not fall back to an exposed serial-rail grid or a balanced, symmetric startup-dashboard layout.",
"Do not use a misregistered offset duplicate as the signature, or a pale paper / white ground.",
"Do not round corners (except status dots), blur shadows, or introduce glass, gloss or glow.",
"Do not let amber wash a surface or let colour carry hierarchy that type and overlap should carry.",
"Do not leave any browser-default control unstyled, and do not let the tilt get so chaotic that scanning breaks."
]
}
}