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 — tokens plus the paired art style. Agents must generate real images.
Compose spreads: a dominant illustrated pop-up board paired with a narrower caption rail, then break rhythm with a full-width page-turn moment. Keep to three major clusters at a time; anchor each with a cut-paper plane. Let quiet paper carry anticipation before primary actions. Align controls to caption slips, not arbitrary card centres.
Display headings use Bricolage Grotesque at 700–800 with tight tracking. Body and controls use Newsreader for warm editorial clarity. Folios and micro-labels use Spline Sans Mono. Hierarchy is built from scale, depth (cast-shadow lift), and placement on the spread — not colour alone. The warm-red accent marks page-turns, active states, and warnings; most information stays ink on paper.
Medium-low with deliberate pauses: cards carry 24–26px padding, large gutters, and short measures. Dense data becomes story strips, caption lists, and status stamps.
Medium-low, to preserve picture-book pacing and image–text interplay. Controls group into caption rails while cut-paper planes keep narrative breathing room.
Desktop uses a max-width 1180–1280px grid; a dominant illustrated board pairs with a narrower caption rail (roughly 8/4), with a 3-column story strip below. All containers use CSS grid or flex with minmax(0,1fr) and min-width:0 so children shrink instead of overflowing.
Quiet paper behaves like the blank page before a turn: generous outer margins, calm interior padding, empty fields around the illustrated shapes. Negative space is intentional and playful, never unfinished.
tornleaf
Torn cut-paper collage in the Tornleaf technique: layered hand-torn matte paper with feathery deckle edges, flat poster colours, soft cast shadows between layers, warm limited palette (vermilion, storybook blue, ochre, leaf, night on paper white). In-UI illustration patches are built from CSS primitives; full plates are generated in Tornleaf and consumed through swappable image slots.
# Deckle
## Philosophy
Deckle keeps the soul of mid-century children's-book craft — sequential storytelling, print tactility, a disciplined limited palette, generous quiet paper — but reconceives the expression as cut-paper collage with real depth. Where a flat printed plate lies on the page, Deckle stands its surfaces up: every card is a hand-torn painted-paper plane held in shallow diorama depth, lifted on a soft cast shadow and raked by a moving light. Controls become caption slips, cards become pop-up stages, and the recurring tell is the deckle edge — the feathery torn edge of handmade paper wherever one plane meets another.
### Values
- {"name":"Sequential storytelling","explanation":"Arrange information as a reading journey — beginnings, pauses, reveals, and turns — not a neutral dashboard grid."}
- {"name":"The cut-paper lift","explanation":"Depth comes from a soft paper cast shadow and the torn deckle edge, so surfaces read as cut paper standing off the page — never from a border or ink rule."}
- {"name":"Child-readable clarity","explanation":"Large shapes, few competing colours, strong labels, and generous quiet paper make hierarchy graspable at arm's length."}
- {"name":"Limited-palette discipline","explanation":"Three inks — vermilion, storybook blue, ochre — on paper white and warm ink; bright emphasis is reserved for the page-turn."}
- {"name":"Author–illustrator partnership","explanation":"Text and image complete one another: captions and controls sit beside the illustrated board, never over-writing it."}
- {"name":"Nursery ornament with restraint","explanation":"Scallops, corner stamps, and page folios are framing devices that guide reading order, never confetti."}
### Anti-Values
- {"name":"Bordered boxes","explanation":"No grey borders or single accent edges; a plane is lifted by shadow and torn paper, not outlined."}
- {"name":"Generic SaaS neutrality","explanation":"Not interchangeable white cards with a colour swap; the cut-paper structure must be visible in depth, spacing, and composition."}
- {"name":"Synthetic polish","explanation":"No glossy gradients, glass, or hyper-smooth surfaces that contradict paper warmth."}
- {"name":"Dense administrative tables","explanation":"Picture-book pacing needs pauses and spacious spreads, not spreadsheet density."}
### Visual Character
- Every card is a white cut-paper plane on a soft, corner-matched cast shadow — the cut-paper lift — never a bordered box.
- Torn deckle edges recur wherever one plane meets another; the feathery fibrous edge is the material tell.
- Story cards carry simplified geometric illustration patches — flat gouache circles, hills, moons, suns, silhouettes — built from CSS shapes.
- A raking light follows the pointer across cards and stages, deepening the valleys between layers so depth is felt, not drawn.
- Composition alternates roomy illustrated boards with narrow caption columns and quiet paper fields, broken by one full-width page-turn moment.
## Tokens
### Colors
| Name | Value |
|------|-------|
| bg | `#FBF7EF` |
| surface | `#FFFFFF` |
| surface_solid | `#FFFFFF` |
| text | `#1A1712` |
| muted | `#6E685C` |
| border | `#ECE4D5` |
| accent | `#C0392A` |
| accent_2 | `#2E5E8C` |
| accent_soft | `#C58A24` |
| on_accent | `#FFFFFF` |
| success | `#3F7A4E` |
| warning | `#B7791A` |
| error | `#B3261E` |
| info | `#2E5E8C` |
### Typography
- **Base Size**: 17px
- **Body Font**: Newsreader
- **Heading Font**: Bricolage Grotesque
- **Mono Font**: Spline Sans Mono
- **Heading Weight**: 700
- **Heading Transform**: none
- **Letter Spacing**: -0.01em
- **Line Height**: 1.55
- **Scale Ratio**: 1.25
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,500;12..96,600;12..96,700;12..96,800&family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,400;1,6..72,500&family=Spline+Sans+Mono:wght@500;600&display=swap
### Radii
- **None**: 0px
- **Md**: 16px
- **Lg**: 24px
- **Full**: 9999px
### Shadows
- **Sm**: 0 2px 6px rgba(26,23,18,.10)
- **Md**: 0 10px 24px rgba(26,23,18,.14)
- **Lg**: 0 24px 56px rgba(26,23,18,.20)
### Spacing
- **Base**: 8px
- **Scale**: ["4px","8px","12px","16px","24px","32px","48px","64px","96px"]
### Surfaces
- **Treatment**: paper
- **Card Style**: White paper planes on soft, corner-matched cast shadows with torn deckle edges; a pointer-driven raking light rakes across them. No borders.
- **Bg Pattern**: grain
### Borders
- **Default Width**: 0px
- **Accent Width**: 0px
- **Style**: none
- **Character**: No borders. Depth is the cut-paper lift — a soft paper cast shadow and the feathery torn deckle edge — never a rule.
### Motion
- **Duration**: 180ms
- **Easing**: cubic-bezier(0.22, 0.61, 0.18, 1)
- **Philosophy**: Snappy page-turn motion: tiny lifts, short slides, no elastic bounce. The landing is one scroll-scrubbed film where cut-paper planes rise, tear, and paste into a diorama.
## Rules
### Composition
Compose spreads: a dominant illustrated pop-up board paired with a narrower caption rail, then break rhythm with a full-width page-turn moment. Keep to three major clusters at a time; anchor each with a cut-paper plane. Let quiet paper carry anticipation before primary actions. Align controls to caption slips, not arbitrary card centres.
### Hierarchy
Display headings use Bricolage Grotesque at 700–800 with tight tracking. Body and controls use Newsreader for warm editorial clarity. Folios and micro-labels use Spline Sans Mono. Hierarchy is built from scale, depth (cast-shadow lift), and placement on the spread — not colour alone. The warm-red accent marks page-turns, active states, and warnings; most information stays ink on paper.
### Density
Medium-low with deliberate pauses: cards carry 24–26px padding, large gutters, and short measures. Dense data becomes story strips, caption lists, and status stamps.
### Signature Patterns
- The cut-paper lift: white paper planes stand on a soft, corner-matched cast shadow; hover raises the plane and grows the shadow like a pop-up spread opening.
- Raking light: a pointer-driven radial sheen (and a twin-plate cross-blend on the landing stage) rakes across cut-paper depth so one gesture lifts and lights at once.
- Deckle edges: torn, feathery paper edges on key plates and illustration patches — the recurring material signature.
- Page corners and corner stamps: a folded paper corner and a mono page-number stamp mark each turn.
- Scalloped caption rules: a dotted cut-paper underline strip beneath section labels.
## Layout
### Density
Medium-low, to preserve picture-book pacing and image–text interplay. Controls group into caption rails while cut-paper planes keep narrative breathing room.
### Grid
Desktop uses a max-width 1180–1280px grid; a dominant illustrated board pairs with a narrower caption rail (roughly 8/4), with a 3-column story strip below. All containers use CSS grid or flex with minmax(0,1fr) and min-width:0 so children shrink instead of overflowing.
### Whitespace
Quiet paper behaves like the blank page before a turn: generous outer margins, calm interior padding, empty fields around the illustrated shapes. Negative space is intentional and playful, never unfinished.
### Breakpoints
- **Wide**: 1920px+: contained content centred; only full-bleed heroes span 100vw
- **Desktop**: 1200–1919px: illustrated board plus caption rail
- **Tablet**: 768–1199px: single column; caption rails drop below boards; tall paper-ground scenes top-align with folio clearance
- **Mobile**: 0–767px: single column, full-width controls, compact page-turn folio; the landing is re-art-directed as a vertical film
- **Small Mobile**: 480px and below: reduce display type and stack all action groups
## Guidance
### Do
- Start each screen by deciding the story sequence: what the reader notices, reads, adjusts, and turns to next.
- Use warm paper white as the ground; add fine grain with subtle CSS layers, never a muddy wash.
- Build depth from the torn deckle edge and a soft paper cast shadow — the cut-paper lift.
- Keep tracking tight and crafted across headings, body, labels, and controls.
- Pair colour with a stamp, an illustration patch, or a caption ribbon whenever it marks a state change.
- Use vermilion sparingly for page-turn actions, active tabs, warnings, and small emphasis stamps.
- Reflow spreads responsively: caption rails move below illustrated boards before content ever crowds.
- Style every input, select, checkbox, toggle, and focus state so no browser-default chrome breaks the printed world.
### Don't
- Do not add grey borders or single accent edges; depth is shadow and torn paper, never a rule.
- Do not mix random radii; use 0px for square cuts, 16px or 24px for rare soft cards, 9999px only for pills and stamps.
- Do not treat scallops, stamps, or dot rules as confetti; each must frame content or guide reading order.
- Do not replace narrative structure with a generic component catalogue or analytics grid.
- Do not use pastel background washes, glossy gradients, glass panels, or a fourth accent.
- Do not rely on colour alone for state; combine stamps, shapes, labels, and text.
### Usage Context
Editorial planning tools, children's-literature archives, classroom visual-story builders, museum-education interfaces, creative-writing workspaces, and publishing review screens where warmth and narrative clarity matter.
### Accessibility
Maintain warm-ink-on-paper contrast for primary text; pair red and blue states with labels and marks; keep touch targets at least 44px; preserve visible focus rules; respect prefers-reduced-motion (the landing de-pins to a fully readable settled document).
## Imagery Direction
### Pairs With
tornleaf
### Description
Torn cut-paper collage in the Tornleaf technique: layered hand-torn matte paper with feathery deckle edges, flat poster colours, soft cast shadows between layers, warm limited palette (vermilion, storybook blue, ochre, leaf, night on paper white). In-UI illustration patches are built from CSS primitives; full plates are generated in Tornleaf and consumed through swappable image slots.
### Subjects
- rolling hills
- ochre moon and sun
- a paper fox
- pine silhouettes
- boats and lighthouse towns
- torn painted-paper swatches
---
version: "alpha"
name: "Deckle"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#FBF7EF"
surface: "#FFFFFF"
surface_solid: "#FFFFFF"
text: "#1A1712"
muted: "#6E685C"
border: "#ECE4D5"
accent: "#C0392A"
accent_2: "#2E5E8C"
accent_soft: "#C58A24"
on_accent: "#FFFFFF"
success: "#3F7A4E"
warning: "#B7791A"
error: "#B3261E"
info: "#2E5E8C"
typography:
headline-lg:
fontFamily: "Bricolage Grotesque"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.01em"
headline-md:
fontFamily: "Bricolage Grotesque"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.01em"
body-md:
fontFamily: "Newsreader"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.01em"
label-md:
fontFamily: "Spline Sans Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
md: "16px"
lg: "24px"
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-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_solid:
backgroundColor: "{colors.surface_solid}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-accent_2:
backgroundColor: "{colors.accent_2}"
color-reference-accent_soft:
backgroundColor: "{colors.accent_soft}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
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.accent}"
textColor: "#ffffff"
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"
---
# Deckle
## Overview
Deckle keeps the soul of mid-century children's-book craft — sequential storytelling, print tactility, a disciplined limited palette, generous quiet paper — but reconceives the expression as cut-paper collage with real depth. Where a flat printed plate lies on the page, Deckle stands its surfaces up: every card is a hand-torn painted-paper plane held in shallow diorama depth, lifted on a soft cast shadow and raked by a moving light. Controls become caption slips, cards become pop-up stages, and the recurring tell is the deckle edge — the feathery torn edge of handmade paper wherever one plane meets another.
### Values
- {"name":"Sequential storytelling","explanation":"Arrange information as a reading journey — beginnings, pauses, reveals, and turns — not a neutral dashboard grid."}
- {"name":"The cut-paper lift","explanation":"Depth comes from a soft paper cast shadow and the torn deckle edge, so surfaces read as cut paper standing off the page — never from a border or ink rule."}
- {"name":"Child-readable clarity","explanation":"Large shapes, few competing colours, strong labels, and generous quiet paper make hierarchy graspable at arm's length."}
- {"name":"Limited-palette discipline","explanation":"Three inks — vermilion, storybook blue, ochre — on paper white and warm ink; bright emphasis is reserved for the page-turn."}
- {"name":"Author–illustrator partnership","explanation":"Text and image complete one another: captions and controls sit beside the illustrated board, never over-writing it."}
- {"name":"Nursery ornament with restraint","explanation":"Scallops, corner stamps, and page folios are framing devices that guide reading order, never confetti."}
### Anti-Values
- {"name":"Bordered boxes","explanation":"No grey borders or single accent edges; a plane is lifted by shadow and torn paper, not outlined."}
- {"name":"Generic SaaS neutrality","explanation":"Not interchangeable white cards with a colour swap; the cut-paper structure must be visible in depth, spacing, and composition."}
- {"name":"Synthetic polish","explanation":"No glossy gradients, glass, or hyper-smooth surfaces that contradict paper warmth."}
- {"name":"Dense administrative tables","explanation":"Picture-book pacing needs pauses and spacious spreads, not spreadsheet density."}
### Visual Character
- Every card is a white cut-paper plane on a soft, corner-matched cast shadow — the cut-paper lift — never a bordered box.
- Torn deckle edges recur wherever one plane meets another; the feathery fibrous edge is the material tell.
- Story cards carry simplified geometric illustration patches — flat gouache circles, hills, moons, suns, silhouettes — built from CSS shapes.
- A raking light follows the pointer across cards and stages, deepening the valleys between layers so depth is felt, not drawn.
- Composition alternates roomy illustrated boards with narrow caption columns and quiet paper fields, broken by one full-width page-turn moment.
## 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 | `#FBF7EF` |
| surface | `#FFFFFF` |
| surface_solid | `#FFFFFF` |
| text | `#1A1712` |
| muted | `#6E685C` |
| border | `#ECE4D5` |
| accent | `#C0392A` |
| accent_2 | `#2E5E8C` |
| accent_soft | `#C58A24` |
| on_accent | `#FFFFFF` |
| success | `#3F7A4E` |
| warning | `#B7791A` |
| error | `#B3261E` |
| info | `#2E5E8C` |
## Typography
- **Headline-Lg**: Bricolage Grotesque, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Bricolage Grotesque, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Newsreader, 17px, weight 400, line-height 1.5.
- **Label-Md**: Spline Sans 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`
### Density
Medium-low, to preserve picture-book pacing and image–text interplay. Controls group into caption rails while cut-paper planes keep narrative breathing room.
### Grid
Desktop uses a max-width 1180–1280px grid; a dominant illustrated board pairs with a narrower caption rail (roughly 8/4), with a 3-column story strip below. All containers use CSS grid or flex with minmax(0,1fr) and min-width:0 so children shrink instead of overflowing.
### Whitespace
Quiet paper behaves like the blank page before a turn: generous outer margins, calm interior padding, empty fields around the illustrated shapes. Negative space is intentional and playful, never unfinished.
### Breakpoints
- **Wide**: 1920px+: contained content centred; only full-bleed heroes span 100vw
- **Desktop**: 1200–1919px: illustrated board plus caption rail
- **Tablet**: 768–1199px: single column; caption rails drop below boards; tall paper-ground scenes top-align with folio clearance
- **Mobile**: 0–767px: single column, full-width controls, compact page-turn folio; the landing is re-art-directed as a vertical film
- **Small Mobile**: 480px and below: reduce display type and stack all action groups
## Elevation & Depth
### Shadows
- **Sm**: 0 2px 6px rgba(26,23,18,.10)
- **Md**: 0 10px 24px rgba(26,23,18,.14)
- **Lg**: 0 24px 56px rgba(26,23,18,.20)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: paper
- **Card Style**: White paper planes on soft, corner-matched cast shadows with torn deckle edges; a pointer-driven raking light rakes across them. No borders.
- **Bg Pattern**: grain
### Borders
- **Default Width**: 0px
- **Accent Width**: 0px
- **Style**: none
- **Character**: No borders. Depth is the cut-paper lift — a soft paper cast shadow and the feathery torn deckle edge — never a rule.
## Components
### Composition
Compose spreads: a dominant illustrated pop-up board paired with a narrower caption rail, then break rhythm with a full-width page-turn moment. Keep to three major clusters at a time; anchor each with a cut-paper plane. Let quiet paper carry anticipation before primary actions. Align controls to caption slips, not arbitrary card centres.
### Hierarchy
Display headings use Bricolage Grotesque at 700–800 with tight tracking. Body and controls use Newsreader for warm editorial clarity. Folios and micro-labels use Spline Sans Mono. Hierarchy is built from scale, depth (cast-shadow lift), and placement on the spread — not colour alone. The warm-red accent marks page-turns, active states, and warnings; most information stays ink on paper.
### Density
Medium-low with deliberate pauses: cards carry 24–26px padding, large gutters, and short measures. Dense data becomes story strips, caption lists, and status stamps.
### Signature Patterns
- The cut-paper lift: white paper planes stand on a soft, corner-matched cast shadow; hover raises the plane and grows the shadow like a pop-up spread opening.
- Raking light: a pointer-driven radial sheen (and a twin-plate cross-blend on the landing stage) rakes across cut-paper depth so one gesture lifts and lights at once.
- Deckle edges: torn, feathery paper edges on key plates and illustration patches — the recurring material signature.
- Page corners and corner stamps: a folded paper corner and a mono page-number stamp mark each turn.
- Scalloped caption rules: a dotted cut-paper underline strip beneath section labels.
## 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-019f9a43-6edb-77e1-8999-d447cdae3a15/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 each screen by deciding the story sequence: what the reader notices, reads, adjusts, and turns to next.
- Do Use warm paper white as the ground; add fine grain with subtle CSS layers, never a muddy wash.
- Do Build depth from the torn deckle edge and a soft paper cast shadow — the cut-paper lift.
- Do Keep tracking tight and crafted across headings, body, labels, and controls.
- Do Pair colour with a stamp, an illustration patch, or a caption ribbon whenever it marks a state change.
- Do Use vermilion sparingly for page-turn actions, active tabs, warnings, and small emphasis stamps.
- Do Reflow spreads responsively: caption rails move below illustrated boards before content ever crowds.
- Do Style every input, select, checkbox, toggle, and focus state so no browser-default chrome breaks the printed world.
- Don't Do not add grey borders or single accent edges; depth is shadow and torn paper, never a rule.
- Don't Do not mix random radii; use 0px for square cuts, 16px or 24px for rare soft cards, 9999px only for pills and stamps.
- Don't Do not treat scallops, stamps, or dot rules as confetti; each must frame content or guide reading order.
- Don't Do not replace narrative structure with a generic component catalogue or analytics grid.
- Don't Do not use pastel background washes, glossy gradients, glass panels, or a fourth accent.
- Don't Do not rely on colour alone for state; combine stamps, shapes, labels, and text.
### Usage Context
Editorial planning tools, children's-literature archives, classroom visual-story builders, museum-education interfaces, creative-writing workspaces, and publishing review screens where warmth and narrative clarity matter.
### Accessibility
Maintain warm-ink-on-paper contrast for primary text; pair red and blue states with labels and marks; keep touch targets at least 44px; preserve visible focus rules; respect prefers-reduced-motion (the landing de-pins to a fully readable settled document).
## Imagery Direction
### Pairs With
tornleaf
### Description
Torn cut-paper collage in the Tornleaf technique: layered hand-torn matte paper with feathery deckle edges, flat poster colours, soft cast shadows between layers, warm limited palette (vermilion, storybook blue, ochre, leaf, night on paper white). In-UI illustration patches are built from CSS primitives; full plates are generated in Tornleaf and consumed through swappable image slots.
### Subjects
- rolling hills
- ochre moon and sun
- a paper fox
- pine silhouettes
- boats and lighthouse towns
- torn painted-paper swatches
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "deckle",
"type": "registry:theme",
"title": "Deckle shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#FBF7EF",
"foreground": "#1A1712",
"card": "#FFFFFF",
"card-foreground": "#1A1712",
"popover": "#FFFFFF",
"popover-foreground": "#1A1712",
"primary": "#1A1712",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#6E685C",
"muted-foreground": "#1A1712",
"accent": "#C0392A",
"accent-foreground": "#ffffff",
"destructive": "#B3261E",
"border": "#ECE4D5",
"input": "#ECE4D5",
"ring": "#C0392A",
"chart-1": "#1A1712",
"chart-2": "#f4f4f5",
"chart-3": "#C0392A",
"chart-4": "#3F7A4E",
"chart-5": "#B7791A",
"sidebar": "#FFFFFF",
"sidebar-foreground": "#1A1712",
"sidebar-primary": "#1A1712",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#2E5E8C",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#ECE4D5",
"sidebar-ring": "#C0392A",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#1A1712",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#C0392A",
"accent-foreground": "#ffffff",
"destructive": "#B3261E",
"border": "#303642",
"input": "#303642",
"ring": "#C0392A",
"chart-1": "#1A1712",
"chart-2": "#f4f4f5",
"chart-3": "#C0392A",
"chart-4": "#3F7A4E",
"chart-5": "#B7791A",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#1A1712",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#C0392A",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#C0392A",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019f9a43-6edb-77e1-8999-d447cdae3a15",
"slug": "deckle",
"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",
"accent_2",
"accent_soft",
"bg",
"border",
"error",
"info",
"muted",
"on_accent",
"success",
"surface",
"surface_solid",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
],
"radii": [
"full",
"lg",
"md",
"none"
],
"shadows": [
"lg",
"md",
"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
A generated style is an aggregate of many influences — credit is given to the artists and traditions it draws on, not a claim of authorship.
Keep Deckle and swap a palette and an art style onto it. The landing & dashboard recolor live.
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: #FBF7EF;
--foreground: #1A1712;
--card: #FFFFFF;
--card-foreground: #1A1712;
--popover: #FFFFFF;
--popover-foreground: #1A1712;
--primary: #1A1712;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #6E685C;
--muted-foreground: #1A1712;
--accent: #C0392A;
--accent-foreground: #ffffff;
--destructive: #B3261E;
--border: #ECE4D5;
--input: #ECE4D5;
--ring: #C0392A;
--chart-1: #1A1712;
--chart-2: #f4f4f5;
--chart-3: #C0392A;
--chart-4: #3F7A4E;
--chart-5: #B7791A;
--sidebar: #FFFFFF;
--sidebar-foreground: #1A1712;
--sidebar-primary: #1A1712;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #2E5E8C;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #ECE4D5;
--sidebar-ring: #C0392A;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #1A1712;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #C0392A;
--accent-foreground: #ffffff;
--destructive: #B3261E;
--border: #303642;
--input: #303642;
--ring: #C0392A;
--chart-1: #1A1712;
--chart-2: #f4f4f5;
--chart-3: #C0392A;
--chart-4: #3F7A4E;
--chart-5: #B7791A;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #1A1712;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #C0392A;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #C0392A;
--radius: 16px;
}
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 DeckleShadcnKit() {
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">Deckle</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": "deckle",
"type": "registry:theme",
"title": "Deckle",
"description": "Cut-paper picture-book theme: warm paper ground, white paper planes on soft cast shadows, no borders, three rationed inks (vermilion / storybook blue / ochre), Bricolage Grotesque display over Newsreader body and Spline Sans Mono folios.",
"meta": {
"format": "shadcn-registry-v1",
"language": "Deckle",
"slug": "deckle",
"author": "katagami-agent",
"material": "hand-torn cut-paper planes with deckle edges; elevation is a soft, corner-matched paper cast shadow, never a border",
"radiiTokens": ["0px", "16px", "24px", "9999px"],
"notes": "Default surfaces are square cuts (0px); inputs/cards soften to 16-24px; buttons, badges, stamps, and pills use 9999px. Borders are off by design."
},
"cssVars": {
"theme": {
"font-sans": "Newsreader, Georgia, serif",
"font-serif": "Newsreader, Georgia, serif",
"font-display": "Bricolage Grotesque, ui-sans-serif, system-ui, sans-serif",
"font-mono": "Spline Sans Mono, ui-monospace, monospace",
"radius": "16px"
},
"light": {
"background": "#FBF7EF",
"foreground": "#1A1712",
"card": "#FFFFFF",
"card-foreground": "#1A1712",
"popover": "#FFFFFF",
"popover-foreground": "#1A1712",
"primary": "#C0392A",
"primary-foreground": "#FFFFFF",
"secondary": "#16324B",
"secondary-foreground": "#FFFFFF",
"muted": "#F4ECDD",
"muted-foreground": "#6E685C",
"accent": "#F1E2BF",
"accent-foreground": "#8A5A12",
"destructive": "#B3261E",
"destructive-foreground": "#FFFFFF",
"success": "#3F7A4E",
"warning": "#B7791A",
"info": "#2E5E8C",
"border": "#ECE4D5",
"input": "#FBF7EF",
"ring": "#C0392A",
"chart-1": "#C0392A",
"chart-2": "#2E5E8C",
"chart-3": "#C58A24",
"chart-4": "#3F7A4E",
"chart-5": "#16324B",
"radius": "16px"
},
"dark": {
"background": "#16324B",
"foreground": "#F4ECDD",
"card": "#1E3E58",
"card-foreground": "#F4ECDD",
"popover": "#1E3E58",
"popover-foreground": "#F4ECDD",
"primary": "#E4593F",
"primary-foreground": "#16324B",
"secondary": "#0F2436",
"secondary-foreground": "#F4ECDD",
"muted": "#1E3E58",
"muted-foreground": "#B7C2CC",
"accent": "#E0A93A",
"accent-foreground": "#16324B",
"destructive": "#E4593F",
"destructive-foreground": "#16324B",
"success": "#6FB07E",
"warning": "#E0A93A",
"info": "#7FA9D0",
"border": "#274B66",
"input": "#1E3E58",
"ring": "#E4593F",
"chart-1": "#E4593F",
"chart-2": "#7FA9D0",
"chart-3": "#E0A93A",
"chart-4": "#6FB07E",
"chart-5": "#F4ECDD",
"radius": "16px"
}
}
}
# Deckle shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019f9a43-6edb-77e1-8999-d447cdae3a15`
Slug: `deckle`
## Intent
Deckle keeps the soul of mid-century children's-book craft — sequential storytelling, print tactility, a disciplined limited palette, generous quiet paper — but reconceives the expression as cut-paper collage with real depth. Where a flat printed plate lies on the page, Deckle stands its surfaces up: every card is a hand-torn painted-paper plane held in shallow diorama depth, lifted on a soft cast shadow and raked by a moving light. Controls become caption slips, cards become pop-up stages, and the recurring tell is the deckle edge — the feathery torn edge of handmade paper wherever one plane meets another.
## 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": "#FBF7EF",
"surface": "#FFFFFF",
"surface_solid": "#FFFFFF",
"text": "#1A1712",
"muted": "#6E685C",
"border": "#ECE4D5",
"accent": "#C0392A",
"accent_2": "#2E5E8C",
"accent_soft": "#C58A24",
"on_accent": "#FFFFFF",
"success": "#3F7A4E",
"warning": "#B7791A",
"error": "#B3261E",
"info": "#2E5E8C"
}
Typography:
{
"base_size": "17px",
"body_font": "Newsreader",
"heading_font": "Bricolage Grotesque",
"mono_font": "Spline Sans Mono",
"heading_weight": "700",
"heading_transform": "none",
"letter_spacing": "-0.01em",
"line_height": "1.55",
"scale_ratio": "1.25",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,500;12..96,600;12..96,700;12..96,800&family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,400;1,6..72,500&family=Spline+Sans+Mono:wght@500;600&display=swap"
}
## Visual character to preserve
- Every card is a white cut-paper plane on a soft, corner-matched cast shadow — the cut-paper lift — never a bordered box.
- Torn deckle edges recur wherever one plane meets another; the feathery fibrous edge is the material tell.
- Story cards carry simplified geometric illustration patches — flat gouache circles, hills, moons, suns, silhouettes — built from CSS shapes.
- A raking light follows the pointer across cards and stages, deepening the valleys between layers so depth is felt, not drawn.
- Composition alternates roomy illustrated boards with narrow caption columns and quiet paper fields, broken by one full-width page-turn moment.
## ShadSync visual profile
{
"family": "paper-collage",
"material": "paper",
"contour": "blob",
"border": "solid",
"underlay": false,
"grain": true,
"stickerBadges": true,
"motion": "lift",
"density": "airy",
"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/deckle/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 each screen by deciding the story sequence: what the reader notices, reads, adjusts, and turns to next.; Use warm paper white as the ground; add fine grain with subtle CSS layers, never a muddy wash.; Build depth from the torn deckle edge and a soft paper cast shadow — the cut-paper lift.; Keep tracking tight and crafted across headings, body, labels, and controls.; Pair colour with a stamp, an illustration patch, or a caption ribbon whenever it marks a state change.; Use vermilion sparingly for page-turn actions, active tabs, warnings, and small emphasis stamps.; Reflow spreads responsively: caption rails move below illustrated boards before content ever crowds.; Style every input, select, checkbox, toggle, and focus state so no browser-default chrome breaks the printed world.
- Do not: Do not add grey borders or single accent edges; depth is shadow and torn paper, never a rule.; Do not mix random radii; use 0px for square cuts, 16px or 24px for rare soft cards, 9999px only for pills and stamps.; Do not treat scallops, stamps, or dot rules as confetti; each must frame content or guide reading order.; Do not replace narrative structure with a generic component catalogue or analytics grid.; Do not use pastel background washes, glossy gradients, glass panels, or a fourth accent.; Do not rely on colour alone for state; combine stamps, shapes, labels, and text.
## 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 DeckleShadcnKit() {
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">Deckle</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
{
"density": "Medium-low, to preserve picture-book pacing and image–text interplay. Controls group into caption rails while cut-paper planes keep narrative breathing room.",
"grid": "Desktop uses a max-width 1180–1280px grid; a dominant illustrated board pairs with a narrower caption rail (roughly 8/4), with a 3-column story strip below. All containers use CSS grid or flex with minmax(0,1fr) and min-width:0 so children shrink instead of overflowing.",
"whitespace": "Quiet paper behaves like the blank page before a turn: generous outer margins, calm interior padding, empty fields around the illustrated shapes. Negative space is intentional and playful, never unfinished.",
"breakpoints": {
"wide": "1920px+: contained content centred; only full-bleed heroes span 100vw",
"desktop": "1200–1919px: illustrated board plus caption rail",
"tablet": "768–1199px: single column; caption rails drop below boards; tall paper-ground scenes top-align with folio clearance",
"mobile": "0–767px: single column, full-width controls, compact page-turn folio; the landing is re-art-directed as a vertical film",
"small_mobile": "480px and below: reduce display type and stack all action groups"
}
}
{
"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-019f9a43-6edb-77e1-8999-d447cdae3a15",
"name": "Deckle",
"slug": "deckle"
},
"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 card is a white cut-paper plane on a soft, corner-matched cast shadow — the cut-paper lift — never a bordered box.",
"Torn deckle edges recur wherever one plane meets another; the feathery fibrous edge is the material tell.",
"Story cards carry simplified geometric illustration patches — flat gouache circles, hills, moons, suns, silhouettes — built from CSS shapes.",
"A raking light follows the pointer across cards and stages, deepening the valleys between layers so depth is felt, not drawn.",
"Composition alternates roomy illustrated boards with narrow caption columns and quiet paper fields, broken by one full-width page-turn moment."
],
"visualProfile": {
"family": "paper-collage",
"material": "paper",
"contour": "blob",
"border": "solid",
"underlay": false,
"grain": true,
"stickerBadges": true,
"motion": "lift",
"density": "airy",
"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": "Deckle 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 each screen by deciding the story sequence: what the reader notices, reads, adjusts, and turns to next.",
"Use warm paper white as the ground; add fine grain with subtle CSS layers, never a muddy wash.",
"Build depth from the torn deckle edge and a soft paper cast shadow — the cut-paper lift.",
"Keep tracking tight and crafted across headings, body, labels, and controls.",
"Pair colour with a stamp, an illustration patch, or a caption ribbon whenever it marks a state change.",
"Use vermilion sparingly for page-turn actions, active tabs, warnings, and small emphasis stamps.",
"Reflow spreads responsively: caption rails move below illustrated boards before content ever crowds.",
"Style every input, select, checkbox, toggle, and focus state so no browser-default chrome breaks the printed world."
],
"dont": [
"Do not add grey borders or single accent edges; depth is shadow and torn paper, never a rule.",
"Do not mix random radii; use 0px for square cuts, 16px or 24px for rare soft cards, 9999px only for pills and stamps.",
"Do not treat scallops, stamps, or dot rules as confetti; each must frame content or guide reading order.",
"Do not replace narrative structure with a generic component catalogue or analytics grid.",
"Do not use pastel background washes, glossy gradients, glass panels, or a fourth accent.",
"Do not rely on colour alone for state; combine stamps, shapes, labels, and text."
]
}
}