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.
Use spread-like compositions: a broad illustrated plate paired with a narrower caption rail, then break rhythm with a full-width page-turn moment. Keep no more than three major clusters visible at a time. Anchor each cluster with a gouache patch or a printed motif. Let white paper carry anticipation before primary actions. Align controls to caption blocks, not arbitrary card centres. Build page architecture from offset-registration plates, scalloped ribbons and corner page-stamps — never a ruled border.
Display headings use Fraunces with strong optical sizing and black-ink weight. Body uses IBM Plex Sans for editorial clarity. Metadata and page numbers use IBM Plex Mono in small uppercase slips. Primary hierarchy comes from scale, plate elevation and placement on the spread rather than colour alone. The warm brick red marks page-turn actions and active states; most information stays black on white.
Medium-low with deliberate pauses: plates have 24-32px internal padding, large gutters and short measures. Dense data becomes story strips, caption lists, folded ledgers and status stamps.
Medium-low, chosen to preserve picture-book pacing and image-text interplay. Controls group into caption rails while plates keep narrative breathing room.
Desktop uses a 12-column, ~1240px content cap with 24px gutters; a dominant spread plate spans the majority width paired with a narrower caption rail, then breaks rhythm with a full-width page-turn moment. Secondary cards form a 3-column story-strip grid. Containers use CSS grid or flex, with minmax(0,1fr) so children shrink rather than overflow.
Whitespace behaves like blank paper before a page turn: generous outer margins, quiet interior padding and intentional empty fields around illustrated shapes. Negative space should feel deliberate and playful, never unfinished.
Flat mid-century gouache picture-book scenes under limited-colour printing: rolling hills, an ochre sun, a paper moon, a lone brick-red bird crossing an open sky, small child-and-dog silhouettes, and warm-white paper with a soft offset registration between the ink and colour layers. Illustration inserts inside the UI are built from CSS primitives; full scene imagery is generated in the same flat gouache technique.
chapbook
brick red, slate blue, ochre, sage green and warm black ink on warm white paper
# Folio
## Philosophy
Folio is a picture-book language for planning visual stories. It borrows the craft discipline of picture books, where every spread must carry narrative, emotion and orientation for a young reader before a word is read. It treats the interface like a freshly opened picture book: readable at arm's length, built from simplified gouache plates, shaped by page-turn pacing, and warmed by the tactile evidence of ink and limited-colour printing. Controls become caption slips, cards become pasted illustration plates, and large fields of white paper create the same anticipation a quiet page holds before the turn. It is not childish decoration — it is the print craft of the picture book, brought to a product.
### Values
- {"name":"Sequential storytelling","explanation":"Arrange information as a left-to-right, top-to-bottom reading journey with clear beginnings, pauses, reveals and endings — never a neutral dashboard grid."}
- {"name":"Print tactility","explanation":"Use paper grain, hard offset plates and one warm colour that lands exactly as the page does, so digital surfaces feel printed and handled without becoming distressed nostalgia."}
- {"name":"Child-readable clarity","explanation":"Favour large gouache shapes, few competing colours, strong labels and generous paper so hierarchy is grasped in a glance, before a single word is read."}
- {"name":"Author-illustrator partnership","explanation":"Let text and image complete one another: captions, notes and controls sit beside the visual story plate instead of overwhelming it."}
- {"name":"Limited-palette discipline","explanation":"Build pages from black ink, white paper and three highlighter inks — brick red, slate blue, ochre — reserving the one loud plate for the moment the page turns."}
- {"name":"Nursery-era ornament with restraint","explanation":"Use scallops, dotted rules, corner page-stamps and paper moons as framing devices that guide reading order, never confetti."}
### Anti-Values
- {"name":"Toy-like interface gimmicks","explanation":"No cartoon bounciness, rainbow palettes, sticker overload or novelty fonts that reduce the craft tradition to children's branding."}
- {"name":"Generic SaaS neutrality","explanation":"No interchangeable white cards with a colour swap; the printed-page structure must be visible in the offset plate, the spacing and the composition."}
- {"name":"Synthetic polish","explanation":"No glossy gradients, glassmorphism, coloured glow shadows or hyper-smooth surfaces that contradict ink-and-paper warmth."}
- {"name":"Dense administrative tables","explanation":"Do not compress the narrative workspace into spreadsheet density; picture-book pacing needs pauses and spacious spreads."}
### Visual Character
- Every plate is white paper lifted by a hard offset-registration shadow — a misprinted plate showing through — with a subtle colour-registration ghost on the one page-turn plate; no border, no one-sided accent edge.
- Large white fields carry a fine CSS grain and faint fibre lines while content stays on pure #FFFFFF.
- Story cards use simplified gouache patches — flat circles, hills, moons, birds and silhouettes built from CSS shapes.
- Section labels sit on caption ribbons with scalloped dotted underlines and tiny corner page-stamps.
- Composition alternates roomy picture-spread plates with narrow caption columns and playful, intentional negative space.
## Tokens
### Colors
| Name | Value |
|------|-------|
| bg | `#FFFFFF` |
| surface | `#FFFFFF` |
| surface_solid | `#FFFFFF` |
| text | `#171410` |
| muted | `#6B6558` |
| border | `#EBE3D3` |
| accent | `#C23B2A` |
| accent_2 | `#2F5F8F` |
| accent_soft | `#D6A43A` |
| on_accent | `#FFFFFF` |
| success | `#2F6F4E` |
| warning | `#B77A18` |
| error | `#B3261E` |
| info | `#2F5F8F` |
### Typography
- **Base Size**: 17px
- **Body Font**: IBM Plex Sans
- **Heading Font**: Fraunces
- **Mono Font**: IBM Plex Mono
- **Heading Weight**: 700
- **Heading Transform**: none
- **Letter Spacing**: -0.02em
- **Line Height**: 1.6
- **Scale Ratio**: 1.25
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,600;9..144,700&family=IBM+Plex+Mono:wght@500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap
### Radii
- **None**: 0px
- **Md**: 16px
- **Lg**: 24px
- **Full**: 9999px
### Shadows
- **Sm**: 5px 5px 0 rgba(23,20,16,0.13)
- **Md**: 6px 6px 0 rgba(23,20,16,0.14)
- **Lg**: 9px 9px 0 rgba(23,20,16,0.14)
### Spacing
- **Base**: 8px
- **Scale**: ["4px","8px","12px","16px","24px","32px","48px","64px","96px"]
### Surfaces
- **Treatment**: paper
- **Card Style**: A white paper plate lifted by a hard, square, two-sided offset-registration shadow; structure is the plate and the paper, never a border. The one page-turn plate per view carries a colour-registration ghost.
- **Bg Pattern**: grain
### Borders
- **Default Width**: 0px
- **Accent Width**: 0px
- **Style**: none
- **Character**: No border. Separation and elevation come from the offset-registration plate shadow — a hard, square, two-sided ink offset (5-9px, radius 0) reading as a misregistered printing plate — never a ruled edge and never a one-sided accent bar.
### Motion
- **Duration**: 180ms
- **Easing**: cubic-bezier(0.2, 0.8, 0.2, 1)
- **Philosophy**: Snappy page-turn motion: tiny lifts, short slides and no elastic bounce. The landing is a scroll-controlled page-turn film; reduced-motion de-pins to the readable document.
## Rules
### Composition
Use spread-like compositions: a broad illustrated plate paired with a narrower caption rail, then break rhythm with a full-width page-turn moment. Keep no more than three major clusters visible at a time. Anchor each cluster with a gouache patch or a printed motif. Let white paper carry anticipation before primary actions. Align controls to caption blocks, not arbitrary card centres. Build page architecture from offset-registration plates, scalloped ribbons and corner page-stamps — never a ruled border.
### Hierarchy
Display headings use Fraunces with strong optical sizing and black-ink weight. Body uses IBM Plex Sans for editorial clarity. Metadata and page numbers use IBM Plex Mono in small uppercase slips. Primary hierarchy comes from scale, plate elevation and placement on the spread rather than colour alone. The warm brick red marks page-turn actions and active states; most information stays black on white.
### Density
Medium-low with deliberate pauses: plates have 24-32px internal padding, large gutters and short measures. Dense data becomes story strips, caption lists, folded ledgers and status stamps.
### Signature Patterns
- Lift plates and cards on a hard offset-registration shadow (5-9px translation, square 0-radius edge) — the misregistered plate — instead of a border; the one page-turn plate carries a colour-registration ghost (6px 6px 0 accent).
- Build paper texture on body and plates from layered radial-gradient speckle and faint fibre lines at very low opacity on #FFFFFF.
- Draw scalloped caption rules under section labels via a repeating radial-gradient clipped to a short underline strip.
- Build flat gouache illustration inserts from CSS-only circles, arches, hills, moons, birds and simplified silhouettes inside story cards.
- Use page-turn tabs and corner page-stamps: small pill tabs and round number badges with mono page numbers, positioned at plate corners.
## Layout
### Density
Medium-low, chosen to preserve picture-book pacing and image-text interplay. Controls group into caption rails while plates keep narrative breathing room.
### Grid
Desktop uses a 12-column, ~1240px content cap with 24px gutters; a dominant spread plate spans the majority width paired with a narrower caption rail, then breaks rhythm with a full-width page-turn moment. Secondary cards form a 3-column story-strip grid. Containers use CSS grid or flex, with minmax(0,1fr) so children shrink rather than overflow.
### Whitespace
Whitespace behaves like blank paper before a page turn: generous outer margins, quiet interior padding and intentional empty fields around illustrated shapes. Negative space should feel deliberate and playful, never unfinished.
### Breakpoints
- **Desktop**: 1200px and up: spread plate plus caption rail
- **Tablet**: 768-1199px: single-column spreads, caption rail drops below the plate, cards become two columns — its own considered layout, not a stretched mobile column
- **Mobile**: 0-767px: single column, full-width controls, the film re-art-directed for portrait; the folded ledger scrolls horizontally as a deliberate strip
- **Small Mobile**: 480px and below: reduce display type and stack all action groups
## Guidance
### Do
- Start each screen by deciding the story sequence: what to notice, read, adjust and turn to next.
- Use pure #FFFFFF paper, then add grain with subtle CSS layers rather than a cream background.
- Keep letter-spacing at -0.02em across headings, body, labels and controls for a crafted editorial feel.
- Make structure from the offset-registration plate and whitespace; let a colour-registration ghost mark one plate per view.
- Pair text with a visual cue — a stamp, a gouache patch, a caption ribbon — at a major state change.
- Use brick red sparingly for page-turn actions, active tabs and small emphasis; use the deeper brick (#A02A1B) for red text so it clears WCAG AA on paper.
- Reflow spreads on smaller screens: caption rails move below image plates before content crowds.
- Style every input, select, checkbox, switch and focus state so no browser default breaks the printed world.
### Don't
- Do not draw a border, a ruled line, or a one-sided accent edge / left bar (including inset shadows with an x-offset).
- Do not use pastel page backgrounds, glossy gradients, glass panels, coloured glow shadows or rainbow accents.
- Do not mix arbitrary radii; use 0px for print cuts, 16/24px for rare soft plates and 9999px only for pills and stamps.
- Do not treat motifs as confetti; each scallop, stamp or dot rule must frame content or guide reading order.
- Do not replace narrative structure with a component catalogue or a generic analytics grid.
- Do not use Poppins, Montserrat, DM Sans, Space Grotesk or loose default letter spacing.
- Do not rely on colour alone for state; combine stamps, labels and text.
### Usage Context
Best for 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 black-on-white contrast for primary text; the bright brick red never carries body text — accent text uses the deeper brick (#A02A1B) and ochre-ink (#8A6410) to clear WCAG AA on paper. Pair red and blue states with labels and icons. Keep touch targets at least 44px, preserve visible focus outlines, and keep motion to short transform transitions; the landing de-pins to a fully readable stacked document under prefers-reduced-motion and with no JavaScript.
## Imagery Direction
### Summary
Flat mid-century gouache picture-book scenes under limited-colour printing: rolling hills, an ochre sun, a paper moon, a lone brick-red bird crossing an open sky, small child-and-dog silhouettes, and warm-white paper with a soft offset registration between the ink and colour layers. Illustration inserts inside the UI are built from CSS primitives; full scene imagery is generated in the same flat gouache technique.
### Pairs With
chapbook
### Palette Hint
brick red, slate blue, ochre, sage green and warm black ink on warm white paper
---
version: "alpha"
name: "Folio"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#FFFFFF"
surface: "#FFFFFF"
surface_solid: "#FFFFFF"
text: "#171410"
muted: "#6B6558"
border: "#EBE3D3"
accent: "#C23B2A"
accent_2: "#2F5F8F"
accent_soft: "#D6A43A"
on_accent: "#FFFFFF"
success: "#2F6F4E"
warning: "#B77A18"
error: "#B3261E"
info: "#2F5F8F"
typography:
headline-lg:
fontFamily: "Fraunces"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Fraunces"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "IBM Plex Sans"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.02em"
label-md:
fontFamily: "IBM Plex Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
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"
---
# Folio
## Overview
Folio is a picture-book language for planning visual stories. It borrows the craft discipline of picture books, where every spread must carry narrative, emotion and orientation for a young reader before a word is read. It treats the interface like a freshly opened picture book: readable at arm's length, built from simplified gouache plates, shaped by page-turn pacing, and warmed by the tactile evidence of ink and limited-colour printing. Controls become caption slips, cards become pasted illustration plates, and large fields of white paper create the same anticipation a quiet page holds before the turn. It is not childish decoration — it is the print craft of the picture book, brought to a product.
### Values
- {"name":"Sequential storytelling","explanation":"Arrange information as a left-to-right, top-to-bottom reading journey with clear beginnings, pauses, reveals and endings — never a neutral dashboard grid."}
- {"name":"Print tactility","explanation":"Use paper grain, hard offset plates and one warm colour that lands exactly as the page does, so digital surfaces feel printed and handled without becoming distressed nostalgia."}
- {"name":"Child-readable clarity","explanation":"Favour large gouache shapes, few competing colours, strong labels and generous paper so hierarchy is grasped in a glance, before a single word is read."}
- {"name":"Author-illustrator partnership","explanation":"Let text and image complete one another: captions, notes and controls sit beside the visual story plate instead of overwhelming it."}
- {"name":"Limited-palette discipline","explanation":"Build pages from black ink, white paper and three highlighter inks — brick red, slate blue, ochre — reserving the one loud plate for the moment the page turns."}
- {"name":"Nursery-era ornament with restraint","explanation":"Use scallops, dotted rules, corner page-stamps and paper moons as framing devices that guide reading order, never confetti."}
### Anti-Values
- {"name":"Toy-like interface gimmicks","explanation":"No cartoon bounciness, rainbow palettes, sticker overload or novelty fonts that reduce the craft tradition to children's branding."}
- {"name":"Generic SaaS neutrality","explanation":"No interchangeable white cards with a colour swap; the printed-page structure must be visible in the offset plate, the spacing and the composition."}
- {"name":"Synthetic polish","explanation":"No glossy gradients, glassmorphism, coloured glow shadows or hyper-smooth surfaces that contradict ink-and-paper warmth."}
- {"name":"Dense administrative tables","explanation":"Do not compress the narrative workspace into spreadsheet density; picture-book pacing needs pauses and spacious spreads."}
### Visual Character
- Every plate is white paper lifted by a hard offset-registration shadow — a misprinted plate showing through — with a subtle colour-registration ghost on the one page-turn plate; no border, no one-sided accent edge.
- Large white fields carry a fine CSS grain and faint fibre lines while content stays on pure #FFFFFF.
- Story cards use simplified gouache patches — flat circles, hills, moons, birds and silhouettes built from CSS shapes.
- Section labels sit on caption ribbons with scalloped dotted underlines and tiny corner page-stamps.
- Composition alternates roomy picture-spread plates with narrow caption columns and playful, intentional negative space.
## 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 | `#FFFFFF` |
| surface | `#FFFFFF` |
| surface_solid | `#FFFFFF` |
| text | `#171410` |
| muted | `#6B6558` |
| border | `#EBE3D3` |
| accent | `#C23B2A` |
| accent_2 | `#2F5F8F` |
| accent_soft | `#D6A43A` |
| on_accent | `#FFFFFF` |
| success | `#2F6F4E` |
| warning | `#B77A18` |
| error | `#B3261E` |
| info | `#2F5F8F` |
## Typography
- **Headline-Lg**: Fraunces, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Fraunces, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Sans, 17px, weight 400, line-height 1.5.
- **Label-Md**: IBM Plex 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, chosen to preserve picture-book pacing and image-text interplay. Controls group into caption rails while plates keep narrative breathing room.
### Grid
Desktop uses a 12-column, ~1240px content cap with 24px gutters; a dominant spread plate spans the majority width paired with a narrower caption rail, then breaks rhythm with a full-width page-turn moment. Secondary cards form a 3-column story-strip grid. Containers use CSS grid or flex, with minmax(0,1fr) so children shrink rather than overflow.
### Whitespace
Whitespace behaves like blank paper before a page turn: generous outer margins, quiet interior padding and intentional empty fields around illustrated shapes. Negative space should feel deliberate and playful, never unfinished.
### Breakpoints
- **Desktop**: 1200px and up: spread plate plus caption rail
- **Tablet**: 768-1199px: single-column spreads, caption rail drops below the plate, cards become two columns — its own considered layout, not a stretched mobile column
- **Mobile**: 0-767px: single column, full-width controls, the film re-art-directed for portrait; the folded ledger scrolls horizontally as a deliberate strip
- **Small Mobile**: 480px and below: reduce display type and stack all action groups
## Elevation & Depth
### Shadows
- **Sm**: 5px 5px 0 rgba(23,20,16,0.13)
- **Md**: 6px 6px 0 rgba(23,20,16,0.14)
- **Lg**: 9px 9px 0 rgba(23,20,16,0.14)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: paper
- **Card Style**: A white paper plate lifted by a hard, square, two-sided offset-registration shadow; structure is the plate and the paper, never a border. The one page-turn plate per view carries a colour-registration ghost.
- **Bg Pattern**: grain
### Borders
- **Default Width**: 0px
- **Accent Width**: 0px
- **Style**: none
- **Character**: No border. Separation and elevation come from the offset-registration plate shadow — a hard, square, two-sided ink offset (5-9px, radius 0) reading as a misregistered printing plate — never a ruled edge and never a one-sided accent bar.
## Components
### Composition
Use spread-like compositions: a broad illustrated plate paired with a narrower caption rail, then break rhythm with a full-width page-turn moment. Keep no more than three major clusters visible at a time. Anchor each cluster with a gouache patch or a printed motif. Let white paper carry anticipation before primary actions. Align controls to caption blocks, not arbitrary card centres. Build page architecture from offset-registration plates, scalloped ribbons and corner page-stamps — never a ruled border.
### Hierarchy
Display headings use Fraunces with strong optical sizing and black-ink weight. Body uses IBM Plex Sans for editorial clarity. Metadata and page numbers use IBM Plex Mono in small uppercase slips. Primary hierarchy comes from scale, plate elevation and placement on the spread rather than colour alone. The warm brick red marks page-turn actions and active states; most information stays black on white.
### Density
Medium-low with deliberate pauses: plates have 24-32px internal padding, large gutters and short measures. Dense data becomes story strips, caption lists, folded ledgers and status stamps.
### Signature Patterns
- Lift plates and cards on a hard offset-registration shadow (5-9px translation, square 0-radius edge) — the misregistered plate — instead of a border; the one page-turn plate carries a colour-registration ghost (6px 6px 0 accent).
- Build paper texture on body and plates from layered radial-gradient speckle and faint fibre lines at very low opacity on #FFFFFF.
- Draw scalloped caption rules under section labels via a repeating radial-gradient clipped to a short underline strip.
- Build flat gouache illustration inserts from CSS-only circles, arches, hills, moons, birds and simplified silhouettes inside story cards.
- Use page-turn tabs and corner page-stamps: small pill tabs and round number badges with mono page numbers, positioned at plate corners.
## 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-019f9a39-297b-7c02-886c-37d59b85e1e6/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 to notice, read, adjust and turn to next.
- Do Use pure #FFFFFF paper, then add grain with subtle CSS layers rather than a cream background.
- Do Keep letter-spacing at -0.02em across headings, body, labels and controls for a crafted editorial feel.
- Do Make structure from the offset-registration plate and whitespace; let a colour-registration ghost mark one plate per view.
- Do Pair text with a visual cue — a stamp, a gouache patch, a caption ribbon — at a major state change.
- Do Use brick red sparingly for page-turn actions, active tabs and small emphasis; use the deeper brick (#A02A1B) for red text so it clears WCAG AA on paper.
- Do Reflow spreads on smaller screens: caption rails move below image plates before content crowds.
- Do Style every input, select, checkbox, switch and focus state so no browser default breaks the printed world.
- Don't Do not draw a border, a ruled line, or a one-sided accent edge / left bar (including inset shadows with an x-offset).
- Don't Do not use pastel page backgrounds, glossy gradients, glass panels, coloured glow shadows or rainbow accents.
- Don't Do not mix arbitrary radii; use 0px for print cuts, 16/24px for rare soft plates and 9999px only for pills and stamps.
- Don't Do not treat motifs as confetti; each scallop, stamp or dot rule must frame content or guide reading order.
- Don't Do not replace narrative structure with a component catalogue or a generic analytics grid.
- Don't Do not use Poppins, Montserrat, DM Sans, Space Grotesk or loose default letter spacing.
- Don't Do not rely on colour alone for state; combine stamps, labels and text.
### Usage Context
Best for 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 black-on-white contrast for primary text; the bright brick red never carries body text — accent text uses the deeper brick (#A02A1B) and ochre-ink (#8A6410) to clear WCAG AA on paper. Pair red and blue states with labels and icons. Keep touch targets at least 44px, preserve visible focus outlines, and keep motion to short transform transitions; the landing de-pins to a fully readable stacked document under prefers-reduced-motion and with no JavaScript.
## Imagery Direction
### Summary
Flat mid-century gouache picture-book scenes under limited-colour printing: rolling hills, an ochre sun, a paper moon, a lone brick-red bird crossing an open sky, small child-and-dog silhouettes, and warm-white paper with a soft offset registration between the ink and colour layers. Illustration inserts inside the UI are built from CSS primitives; full scene imagery is generated in the same flat gouache technique.
### Pairs With
chapbook
### Palette Hint
brick red, slate blue, ochre, sage green and warm black ink on warm white paper
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "folio",
"type": "registry:theme",
"title": "Folio shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#FFFFFF",
"foreground": "#171410",
"card": "#FFFFFF",
"card-foreground": "#171410",
"popover": "#FFFFFF",
"popover-foreground": "#171410",
"primary": "#171410",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#6B6558",
"muted-foreground": "#171410",
"accent": "#C23B2A",
"accent-foreground": "#ffffff",
"destructive": "#B3261E",
"border": "#EBE3D3",
"input": "#EBE3D3",
"ring": "#C23B2A",
"chart-1": "#171410",
"chart-2": "#f4f4f5",
"chart-3": "#C23B2A",
"chart-4": "#2F6F4E",
"chart-5": "#B77A18",
"sidebar": "#FFFFFF",
"sidebar-foreground": "#171410",
"sidebar-primary": "#171410",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#2F5F8F",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#EBE3D3",
"sidebar-ring": "#C23B2A",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#171410",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#C23B2A",
"accent-foreground": "#ffffff",
"destructive": "#B3261E",
"border": "#303642",
"input": "#303642",
"ring": "#C23B2A",
"chart-1": "#171410",
"chart-2": "#f4f4f5",
"chart-3": "#C23B2A",
"chart-4": "#2F6F4E",
"chart-5": "#B77A18",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#171410",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#C23B2A",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#C23B2A",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019f9a39-297b-7c02-886c-37d59b85e1e6",
"slug": "folio",
"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.
Agent-generated
Keep Folioand 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: #FFFFFF;
--foreground: #171410;
--card: #FFFFFF;
--card-foreground: #171410;
--popover: #FFFFFF;
--popover-foreground: #171410;
--primary: #171410;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #6B6558;
--muted-foreground: #171410;
--accent: #C23B2A;
--accent-foreground: #ffffff;
--destructive: #B3261E;
--border: #EBE3D3;
--input: #EBE3D3;
--ring: #C23B2A;
--chart-1: #171410;
--chart-2: #f4f4f5;
--chart-3: #C23B2A;
--chart-4: #2F6F4E;
--chart-5: #B77A18;
--sidebar: #FFFFFF;
--sidebar-foreground: #171410;
--sidebar-primary: #171410;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #2F5F8F;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #EBE3D3;
--sidebar-ring: #C23B2A;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #171410;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #C23B2A;
--accent-foreground: #ffffff;
--destructive: #B3261E;
--border: #303642;
--input: #303642;
--ring: #C23B2A;
--chart-1: #171410;
--chart-2: #f4f4f5;
--chart-3: #C23B2A;
--chart-4: #2F6F4E;
--chart-5: #B77A18;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #171410;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #C23B2A;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #C23B2A;
--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 FolioShadcnKit() {
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">Folio</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": "folio",
"type": "registry:theme",
"author": "katagami-agent",
"title": "Folio",
"description": "A picture-book language for product UI: every surface is a white paper plate lifted by an offset-registration shadow, structure comes from that plate and generous paper rather than a border, and three highlighter inks — brick red, slate blue, ochre — mark the page-turn moments over black ink on white.",
"cssVars": {
"theme": {
"font-sans": "IBM Plex Sans, system-ui, sans-serif",
"font-heading": "Fraunces, Georgia, serif",
"font-mono": "IBM Plex Mono, ui-monospace, monospace",
"radius": "0rem"
},
"light": {
"background": "#FFFFFF",
"foreground": "#171410",
"card": "#FFFFFF",
"card-foreground": "#171410",
"popover": "#FFFFFF",
"popover-foreground": "#171410",
"primary": "#C23B2A",
"primary-foreground": "#FFFFFF",
"secondary": "#FBF7EE",
"secondary-foreground": "#171410",
"muted": "#FBF7EE",
"muted-foreground": "#6B6558",
"accent": "#F7E4E0",
"accent-foreground": "#A02A1B",
"destructive": "#B3261E",
"destructive-foreground": "#FFFFFF",
"border": "#EBE3D3",
"input": "#EBE3D3",
"ring": "#C23B2A",
"chart-1": "#C23B2A",
"chart-2": "#2F5F8F",
"chart-3": "#D6A43A",
"chart-4": "#5F7F4F",
"chart-5": "#171410",
"radius": "0rem"
},
"dark": {
"background": "#171410",
"foreground": "#F4EFE4",
"card": "#1F1B16",
"card-foreground": "#F4EFE4",
"popover": "#1F1B16",
"popover-foreground": "#F4EFE4",
"primary": "#D9634F",
"primary-foreground": "#1A140F",
"secondary": "#262019",
"secondary-foreground": "#F4EFE4",
"muted": "#262019",
"muted-foreground": "#AFA592",
"accent": "#3A2620",
"accent-foreground": "#EDB6A9",
"destructive": "#E15B4C",
"destructive-foreground": "#1A140F",
"border": "#332C23",
"input": "#332C23",
"ring": "#D9634F",
"chart-1": "#D9634F",
"chart-2": "#6E9BC7",
"chart-3": "#D6A43A",
"chart-4": "#8FAd7A",
"chart-5": "#F4EFE4",
"radius": "0rem"
}
},
"visualProfile": "Picture-book print material: every surface is a white paper plate lifted by a hard, square, two-sided offset-registration shadow (5-9px), never a border and never a one-sided accent edge or left bar. State rides a colour-registration ghost (a coloured offset plate) or a corner page-stamp — brick red for the page-turn, slate blue for drafting, ochre for review, leaf for confirmed — used one at a time over black ink on white paper. Buttons are pressed-ink plates of one height; forms are caption slips with an ink writing-rule that reddens on focus; tables are folded ledgers separated by fold-shadow bands, not rules; section labels sit on caption ribbons with scalloped dotted underlines and corner page-stamps. Fraunces display, IBM Plex Sans 17px body, IBM Plex Mono uppercase micro-labels; square print cuts by default, full pills for stamps and page-turn tabs; three inks used like highlighters over paper-white.",
"notes": "Structure is an offset-registration plate shadow, never a border and never a one-sided accent edge or left bar (no inset box-shadows with an x-offset). Elevation shadows are hard neutral ink offsets, never a coloured glow. Accent text uses the deeper brick (#A02A1B) and ochre-ink (#8A6410) so labels clear WCAG AA on paper; the bright #C23B2A brick is for marks, fills, page-turn tabs and colour-registration ghosts only. Semantic colours (success/warning/error/info) stay a small part of the palette; red is never visually primary. Button and chip labels stay on one line."
}
# Folio — shadcn/ui Components
Author: `katagami-agent`
Format: `component-recipes-v1`
Folio dresses shadcn/ui as a printed picture book. Every primitive is a white paper plate lifted by an
offset-registration shadow, state rides a colour-registration ghost or a corner page-stamp, and three
highlighter inks — brick red, slate blue, ochre — mark one page-turn moment at a time over black ink on
white paper. The registry theme in `export.json` owns the colours; these recipes own the material.
## ShadSync visual profile
- **Family** — mid-century picture-book print; gouache plates, caption slips, page-turn pacing.
- **Material** — a white paper plate under a faint CSS grain, lifted by a hard offset-registration shadow.
- **Contour** — structure is the offset plate shadow (a two-sided square ink offset), never a border,
never a one-sided accent edge or left bar.
- **Border** — none; separation is plate-shadow and paper. The shadcn `border`/`input` tokens map to a
very faint warm fold-line (`#EBE3D3`), used only where a hairline is truly unavoidable.
- **Elevation** — a hard neutral-ink offset (`5–9px`, radius 0); never a coloured glow. The one page-turn
plate per view may carry a coloured registration ghost (`5px 5px 0 <accent>`).
- **Type** — Fraunces display, IBM Plex Sans body (17px+), IBM Plex Mono uppercase micro-labels.
- **Radius** — 0 print cuts by default, 16/24px on rare soft plates, full pills for stamps and page-turn
tabs; only from {0, 16, 24, 9999}.
- **Accents** — brick red `#C23B2A`, slate blue `#2F5F8F`, ochre `#D6A43A`, used like highlighters; accent
text uses the deeper brick (`#A02A1B`) and ochre-ink (`#8A6410`) for WCAG AA on paper.
## Signature component recipes
- **Button** — a pressed-ink plate of one height. Primary is a solid brick-red plate with white knockout
on a hard ink offset; secondary is a white paper plate on the same offset; ghost/quiet stay text-only.
Hover lifts the plate up-left, active presses it down-right. Labels stay on one line.
- **Card** — one white paper plate lifted by its offset-registration shadow, with an optional
colour-registration ghost and a corner page-stamp carrying the state when it is the page-turn plate.
- **Input / Textarea / Select** — caption slips: a mono uppercase label above warm inset paper with an ink
writing-rule; focus reddens the rule to brick, a confirmed field greens it to leaf, a fault reddens it.
- **Table** — a folded ledger: mono uppercase heads, serif names, rows separated by a fold-shadow band,
never a rule line; scrolls horizontally on mobile as a deliberate ledger.
- **Tabs / Navigation Menu** — page-turn tabs on a folded ribbon; the active tab inks solid, the rest stay
quiet mono pills. Never boxed into a pill bar.
- **Badge / Chip** — a small mono pill: page-turn=brick, drafting=slate, review=ochre, confirmed=leaf; a
dot marker, one line.
- **Switch** — a paper knob sliding a slip; the track inks brick when on.
- **Dialog / Sheet / Popover** — a lifted paper plate on a hard ink offset with a corner page-stamp; the
overlay is a soft paper scrim, never a heavy black wash.
## Preview shots
Three renderable scenes are defined in `preview-shots.json` (`renderable-v1`): a studio spread console, a
caption-slip booking form, and the family-pass pricing plates. Each names the primitives it must show and
the print details it must carry (offset plate shadow, colour-registration ghost, scalloped caption rule,
corner page-stamp, one brick-red page-turn moment).
## Copy-paste component example
```tsx
import { Button } from "@/components/ui/button"
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"
import { Badge } from "@/components/ui/badge"
export function SpreadCard() {
return (
<Card className="relative bg-card p-6 rounded-none shadow-[5px_5px_0_rgba(23,20,16,0.13)]">
{/* corner page-stamp: the round number badge lifted at the plate corner */}
<span aria-hidden className="page-stamp absolute -top-3 right-4 grid h-10 w-10 place-items-center rounded-full bg-card shadow-[5px_5px_0_rgba(23,20,16,0.13)] font-mono text-[11px] text-muted-foreground">09</span>
<CardHeader className="p-0">
<span className="font-mono text-[11px] uppercase tracking-[.13em] text-primary">Page-turn · pg 09</span>
<CardTitle className="mt-3 font-heading text-2xl tracking-tight">The red bird crosses</CardTitle>
</CardHeader>
<CardContent className="mt-3 p-0 text-[15.5px] text-muted-foreground">
The one loud plate: brick red, held for the turn.
<div className="mt-4 flex gap-3">
<Button className="rounded-none bg-primary text-primary-foreground">Turn the page</Button>
<Badge className="rounded-full bg-accent text-accent-foreground">Page-turn</Badge>
</div>
</CardContent>
</Card>
)
}
```
All primitives import from `@/components/ui/` and read their colours from the registry theme in
`export.json`, so a palette swap re-skins the whole set while the offset-registration plate, the
colour-registration ghost, the scalloped caption rule, and the corner page-stamp stay intact.
{
"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-019f9a39-297b-7c02-886c-37d59b85e1e6",
"name": "Folio",
"slug": "folio"
},
"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 plate is white paper lifted by a hard offset-registration shadow — a misprinted plate showing through — with a subtle colour-registration ghost on the one page-turn plate; no border, no one-sided accent edge.",
"Large white fields carry a fine CSS grain and faint fibre lines while content stays on pure #FFFFFF.",
"Story cards use simplified gouache patches — flat circles, hills, moons, birds and silhouettes built from CSS shapes.",
"Section labels sit on caption ribbons with scalloped dotted underlines and tiny corner page-stamps.",
"Composition alternates roomy picture-spread plates with narrow caption columns and playful, intentional negative space."
],
"visualProfile": {
"family": "paper-collage",
"material": "paper",
"contour": "blob",
"border": "solid",
"underlay": true,
"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": "Folio 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 to notice, read, adjust and turn to next.",
"Use pure #FFFFFF paper, then add grain with subtle CSS layers rather than a cream background.",
"Keep letter-spacing at -0.02em across headings, body, labels and controls for a crafted editorial feel.",
"Make structure from the offset-registration plate and whitespace; let a colour-registration ghost mark one plate per view.",
"Pair text with a visual cue — a stamp, a gouache patch, a caption ribbon — at a major state change.",
"Use brick red sparingly for page-turn actions, active tabs and small emphasis; use the deeper brick (#A02A1B) for red text so it clears WCAG AA on paper.",
"Reflow spreads on smaller screens: caption rails move below image plates before content crowds.",
"Style every input, select, checkbox, switch and focus state so no browser default breaks the printed world."
],
"dont": [
"Do not draw a border, a ruled line, or a one-sided accent edge / left bar (including inset shadows with an x-offset).",
"Do not use pastel page backgrounds, glossy gradients, glass panels, coloured glow shadows or rainbow accents.",
"Do not mix arbitrary radii; use 0px for print cuts, 16/24px for rare soft plates and 9999px only for pills and stamps.",
"Do not treat motifs as confetti; each scallop, stamp or dot rule must frame content or guide reading order.",
"Do not replace narrative structure with a component catalogue or a generic analytics grid.",
"Do not use Poppins, Montserrat, DM Sans, Space Grotesk or loose default letter spacing.",
"Do not rely on colour alone for state; combine stamps, labels and text."
]
}
}