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.
Build scenes as a card catalog: sections are drawer rails (routed teak bar + brass pull + ivory red-ruled label-frame), and the records inside are borderless ivory index cards sitting in a row. The card you act on is pulled forward out of the row. No bordered panels; the ruled margin and tabs are the structure.
Lead with Fraunces display, file every record with a single filing-ink tab and a mono call number, and reserve one brass primary action per view. Categories and states read from the five filing inks, not from oversized controls.
Content may be rich and list-heavy, but cards keep generous 16-22px+ padding and the layout breathes on a calm teak ground. Whitespace is the dark cabinet, never filled with noise.
Drawer rails + filed index cards with a brick-red margin rule and faint index ruling + the pulled card + protruding filing-ink tabs + mono call numbers + a single brass datum, on a deep teak-ink ground.
Container max-width 1180-1200px with 16-44px responsive padding. Landing opens on a full-bleed 100svh hero, then contained drawer sections. Dashboard is a 248px drawer-column + main retrieval area. Mobile collapses to a single-column notebook flow.
Generous outer margins and 48-72px section gaps; the dark teak ground is the breathing room. Drawer rails head each section; cards sit in their rows beneath.
Comfortable; list-heavy shelf-lists allowed but always inside generous margins on a calm ground.
Renders well from ~390px mobile to 2560px+ ultra-wide. On mobile the drawer column becomes a horizontal tab row, non-essential nav and table columns hide, and nothing overflows horizontally. On ultra-wide, contained content caps and centers; only the hero spans 100vw. Grids use minmax(0,1fr) + min-width:0 so children shrink instead of overflowing.
pasteboard
Cut-paper collage of catalog and stationery subjects — drawers, index cards, filing tabs, brass pulls — built from layered torn construction-paper shapes with soft paper shadows, on warm cream notebook paper, composed for a dark-overlay hero.
One full-bleed landing hero in the Pasteboard cut-paper technique, composed with the catalog subject toward the right so a left-side dark overlay keeps the headline legible. End every prompt with: NO text, NO letters, NO logos.
# Cardwell ## Philosophy A card-catalog reading room. Knowledge is filed the way a librarian files it: every record is a tabbed index card pulled from a drawer, ruled with a brick-red margin line and stamped with a call number. Where most tools hand you a feed to clear, Cardwell hands you a cabinet to retrieve from. A deliberately dark teak-ink ground frames warm-ivory cards so a pulled record reads as retrieved into the light. ### Values - Filed, not fed — items live in drawers and are retrieved, never streamed; the cabinet is finite and addressable. - The pulled card — the thing you act on lifts a few pixels out of its row, tipped a half-degree, the way a real card leaves the drawer. - The ruling is the structure — a single brick-red margin and faint index lines replace borders and boxes. - One ink per role — five bright filing inks with dark ink text encode category and status at a glance; amber leads. - One metal — a single warm brass plate carries the primary action and key totals, like the brass frame on a catalog drawer. - Every record is addressed — a mono call number files each card to an exact place in the cabinet. ### Anti-Values - No bordered boxes for structure; use the ruled margin, drawer rails, and protruding tabs. - No second metal and no accent beyond the five filing inks; brick-red is reserved for the margin rule only. - No glass blur, neon glow, animated gradients, or mesh backgrounds; the scene reads printed, wooden, and tactile. - No dark-fill stamps or reversed white text; stamps stay bright with dark ink. - No oversized AI-startup italic serif headline; Fraunces stays upright and tight. - No infinite-feed metaphor; this is a cabinet, not a stream. ### Visual Character - Sections are drawer rails: a routed teak bar with a brass pull and an ivory red-ruled label-frame; the filed cards sit in a row inside. - Index cards are warm ivory with no border, a brick-red vertical margin rule, faint horizontal index ruling behind the text, a protruding filing-ink tab top-left, and a mono call number top-right. - The active or featured card is pulled — translateY(-6px) rotate(-0.5deg) with a larger warm shadow — so it reads as retrieved from the row. - Five filing inks (amber, sage, rose, slate, plum) encode roles as bright tabs and dark-ink stamps; brass is the single metal for primary actions and totals. - The ground is a deep teak-ink dark (#211A14) with a faint routed wood grain, so cream cards and bright tabs read as lifted into the light. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#211A14` | | bg_2 | `#2C2219` | | rail | `#3A2D20` | | surface | `#F4ECDD` | | surface_2 | `#EFE4D0` | | text | `#2A2115` | | text_on_dark | `#EDE3D2` | | muted | `#9C8E78` | | muted_on_dark | `#B7A78C` | | border | `#3A2D20` | | brass | `#C8A24A` | | brass_deep | `#A8843A` | | on_brass | `#2A2115` | | rule_red | `#C0473B` | | amber | `#E6A93C` | | sage | `#8FB48A` | | rose | `#D98C84` | | slate | `#7FA6C9` | | plum | `#B294C0` | | accent | `#E6A93C` | | on_accent | `#2A2115` | | success | `#8FB48A` | | warning | `#E6A93C` | | error | `#D98C84` | | info | `#7FA6C9` | ### Typography - **Base Size**: 17px - **Body Font**: Inter - **Heading Font**: Fraunces - **Mono Font**: JetBrains Mono - **Heading Weight**: 600 - **Heading Transform**: none - **Letter Spacing**: -0.018em - **Line Height**: 1.6 - **Mono Tracking**: 0.10em to 0.14em uppercase labels and call numbers - **Scale**: eyebrow 10-11px mono, body 16-17px sans, title 19-24px display, hero 52-108px display - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap ### Radii - **None**: 0 - **Sm**: 2px - **Md**: 2px - **Lg**: 2px - **Full**: 9999px ### Shadows - **Sm**: 0 1px 2px rgba(0,0,0,.28) - **Md**: 0 2px 4px rgba(0,0,0,.30), 0 8px 18px rgba(0,0,0,.30) - **Lg**: 0 4px 8px rgba(0,0,0,.34), 0 18px 38px rgba(0,0,0,.38) ### Spacing - **Base**: 4px - **Scale**: [4,8,12,16,22,32,48,72] ### Surfaces - **Treatment**: paper card on wooden-dark cabinet - **Card Style**: Borderless warm-ivory index card with a brick-red left margin rule, faint horizontal index ruling, one protruding filing-ink tab, a mono call number, and a two-layer warm shadow; the active card is pulled forward out of its drawer row. - **Bg Pattern**: deep teak-ink ground with a faint routed wood grain (no dot grid) ### Borders - **Default Width**: 0 - **Divider**: 2px dashed rgba(42,33,21,.14) - **Style**: no card borders; brick-red margin rule + dashed perforation dividers - **Character**: Structure comes from drawer rails, the brick-red margin rule, faint index ruling, and protruding filing tabs, never from enclosing cards with borders. ### Motion - **Duration**: 240ms - **Easing**: cubic-bezier(0.22,1,0.36,1) - **Philosophy**: the pull — cards lift out of their drawer row - **Card Pull**: translateY(-6px) rotate(-0.5deg) - **Drawer Slot**: translateX(5-8px) on hover - **Reveal**: settled state is the default and renders with no JavaScript; an inline html.js class gates a hidden start-state and an IntersectionObserver reveals on scroll; respects prefers-reduced-motion - **Page Transitions**: none ## Rules ### Composition Build scenes as a card catalog: sections are drawer rails (routed teak bar + brass pull + ivory red-ruled label-frame), and the records inside are borderless ivory index cards sitting in a row. The card you act on is pulled forward out of the row. No bordered panels; the ruled margin and tabs are the structure. ### Hierarchy Lead with Fraunces display, file every record with a single filing-ink tab and a mono call number, and reserve one brass primary action per view. Categories and states read from the five filing inks, not from oversized controls. ### Density Content may be rich and list-heavy, but cards keep generous 16-22px+ padding and the layout breathes on a calm teak ground. Whitespace is the dark cabinet, never filled with noise. ### Signature Drawer rails + filed index cards with a brick-red margin rule and faint index ruling + the pulled card + protruding filing-ink tabs + mono call numbers + a single brass datum, on a deep teak-ink ground. ## Layout ### Grid Container max-width 1180-1200px with 16-44px responsive padding. Landing opens on a full-bleed 100svh hero, then contained drawer sections. Dashboard is a 248px drawer-column + main retrieval area. Mobile collapses to a single-column notebook flow. ### Whitespace Generous outer margins and 48-72px section gaps; the dark teak ground is the breathing room. Drawer rails head each section; cards sit in their rows beneath. ### Density Comfortable; list-heavy shelf-lists allowed but always inside generous margins on a calm ground. ### Responsive Renders well from ~390px mobile to 2560px+ ultra-wide. On mobile the drawer column becomes a horizontal tab row, non-essential nav and table columns hide, and nothing overflows horizontally. On ultra-wide, contained content caps and centers; only the hero spans 100vw. Grids use minmax(0,1fr) + min-width:0 so children shrink instead of overflowing. ### Breakpoints - **Sm**: 640px - **Md**: 820px - **Lg**: 1020px ## Guidance ### Do - File every record with one filing-ink tab and a mono call number. - Give each card the brick-red left margin rule and faint horizontal index ruling instead of a border. - Pull the active or featured card forward out of its drawer row. - Head each section with a drawer rail: routed teak bar, brass pull, ivory red-ruled label-frame. - Keep one brass primary action per view and make the rest quieter. - Separate shelf-list rows with 2px dashed perforation rules, not solid borders. - Use JetBrains Mono for call numbers, dates, counts, and status so metadata feels catalogued. ### Don't - Do not use dark-fill stamps or reversed white text; stamps stay bright with dark ink. - Do not enclose cards in borders; the ruled margin and tabs carry the structure. - Do not add a second metal or any accent beyond the five filing inks; brick-red is the margin rule only. - Do not add glass blur, glow, animated gradients, or mesh backgrounds. - Do not use the brick-red rule anywhere except the card/input left margin. - Do not trap navigation in a floating pill bar; let the drawer rail and column breathe on the page. ### Accessibility Bright filing inks always carry dark ink text for strong contrast; the brick-red margin rule and index ruling are decorative, not required for comprehension; focus states show a 3px brass ring; controls keep touch-friendly sizing across mobile layouts. ## Imagery Direction ### Pairs With pasteboard ### Summary Cut-paper collage of catalog and stationery subjects — drawers, index cards, filing tabs, brass pulls — built from layered torn construction-paper shapes with soft paper shadows, on warm cream notebook paper, composed for a dark-overlay hero. ### Subjects - a pulled-open card-catalog drawer - a fanned stack of tabbed index cards - a brass drawer pull and label-frame - a single ruled index card laid flat - a wall of filing drawers ### Usage One full-bleed landing hero in the Pasteboard cut-paper technique, composed with the catalog subject toward the right so a left-side dark overlay keeps the headline legible. End every prompt with: NO text, NO letters, NO logos. ### Engine Hints - **Model**: gpt-image-2 - **Provider**: openai - **Tool**: openai-image MCP
---
version: "alpha"
name: "Cardwell"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#211A14"
bg_2: "#2C2219"
rail: "#3A2D20"
surface: "#F4ECDD"
surface_2: "#EFE4D0"
text: "#2A2115"
text_on_dark: "#EDE3D2"
muted: "#9C8E78"
muted_on_dark: "#B7A78C"
border: "#3A2D20"
brass: "#C8A24A"
brass_deep: "#A8843A"
on_brass: "#2A2115"
rule_red: "#C0473B"
amber: "#E6A93C"
sage: "#8FB48A"
rose: "#D98C84"
slate: "#7FA6C9"
plum: "#B294C0"
accent: "#E6A93C"
on_accent: "#2A2115"
success: "#8FB48A"
warning: "#E6A93C"
error: "#D98C84"
info: "#7FA6C9"
typography:
headline-lg:
fontFamily: "Fraunces"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.018em"
headline-md:
fontFamily: "Fraunces"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.018em"
body-md:
fontFamily: "Inter"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.018em"
label-md:
fontFamily: "JetBrains Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
sm: "2px"
md: "2px"
lg: "2px"
full: "9999px"
spacing:
base: "4px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "22px"
2xl: "32px"
3xl: "48px"
4xl: "72px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-bg_2:
backgroundColor: "{colors.bg_2}"
color-reference-rail:
backgroundColor: "{colors.rail}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_2:
backgroundColor: "{colors.surface_2}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-text_on_dark:
backgroundColor: "{colors.text_on_dark}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-muted_on_dark:
backgroundColor: "{colors.muted_on_dark}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-brass:
backgroundColor: "{colors.brass}"
color-reference-brass_deep:
backgroundColor: "{colors.brass_deep}"
color-reference-on_brass:
backgroundColor: "{colors.on_brass}"
color-reference-rule_red:
backgroundColor: "{colors.rule_red}"
color-reference-amber:
backgroundColor: "{colors.amber}"
color-reference-sage:
backgroundColor: "{colors.sage}"
color-reference-rose:
backgroundColor: "{colors.rose}"
color-reference-slate:
backgroundColor: "{colors.slate}"
color-reference-plum:
backgroundColor: "{colors.plum}"
color-reference-accent:
backgroundColor: "{colors.accent}"
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: "#000000"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Cardwell
## Overview
A card-catalog reading room. Knowledge is filed the way a librarian files it: every record is a tabbed index card pulled from a drawer, ruled with a brick-red margin line and stamped with a call number. Where most tools hand you a feed to clear, Cardwell hands you a cabinet to retrieve from. A deliberately dark teak-ink ground frames warm-ivory cards so a pulled record reads as retrieved into the light.
### Values
- Filed, not fed — items live in drawers and are retrieved, never streamed; the cabinet is finite and addressable.
- The pulled card — the thing you act on lifts a few pixels out of its row, tipped a half-degree, the way a real card leaves the drawer.
- The ruling is the structure — a single brick-red margin and faint index lines replace borders and boxes.
- One ink per role — five bright filing inks with dark ink text encode category and status at a glance; amber leads.
- One metal — a single warm brass plate carries the primary action and key totals, like the brass frame on a catalog drawer.
- Every record is addressed — a mono call number files each card to an exact place in the cabinet.
### Anti-Values
- No bordered boxes for structure; use the ruled margin, drawer rails, and protruding tabs.
- No second metal and no accent beyond the five filing inks; brick-red is reserved for the margin rule only.
- No glass blur, neon glow, animated gradients, or mesh backgrounds; the scene reads printed, wooden, and tactile.
- No dark-fill stamps or reversed white text; stamps stay bright with dark ink.
- No oversized AI-startup italic serif headline; Fraunces stays upright and tight.
- No infinite-feed metaphor; this is a cabinet, not a stream.
### Visual Character
- Sections are drawer rails: a routed teak bar with a brass pull and an ivory red-ruled label-frame; the filed cards sit in a row inside.
- Index cards are warm ivory with no border, a brick-red vertical margin rule, faint horizontal index ruling behind the text, a protruding filing-ink tab top-left, and a mono call number top-right.
- The active or featured card is pulled — translateY(-6px) rotate(-0.5deg) with a larger warm shadow — so it reads as retrieved from the row.
- Five filing inks (amber, sage, rose, slate, plum) encode roles as bright tabs and dark-ink stamps; brass is the single metal for primary actions and totals.
- The ground is a deep teak-ink dark (#211A14) with a faint routed wood grain, so cream cards and bright tabs read as lifted into the light.
## 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 | `#211A14` |
| bg_2 | `#2C2219` |
| rail | `#3A2D20` |
| surface | `#F4ECDD` |
| surface_2 | `#EFE4D0` |
| text | `#2A2115` |
| text_on_dark | `#EDE3D2` |
| muted | `#9C8E78` |
| muted_on_dark | `#B7A78C` |
| border | `#3A2D20` |
| brass | `#C8A24A` |
| brass_deep | `#A8843A` |
| on_brass | `#2A2115` |
| rule_red | `#C0473B` |
| amber | `#E6A93C` |
| sage | `#8FB48A` |
| rose | `#D98C84` |
| slate | `#7FA6C9` |
| plum | `#B294C0` |
| accent | `#E6A93C` |
| on_accent | `#2A2115` |
| success | `#8FB48A` |
| warning | `#E6A93C` |
| error | `#D98C84` |
| info | `#7FA6C9` |
## 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**: Inter, 17px, weight 400, line-height 1.5.
- **Label-Md**: JetBrains Mono, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `4px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `12px`
- **Lg**: `16px`
- **Xl**: `22px`
- **2xl**: `32px`
- **3xl**: `48px`
- **4xl**: `72px`
### Grid
Container max-width 1180-1200px with 16-44px responsive padding. Landing opens on a full-bleed 100svh hero, then contained drawer sections. Dashboard is a 248px drawer-column + main retrieval area. Mobile collapses to a single-column notebook flow.
### Whitespace
Generous outer margins and 48-72px section gaps; the dark teak ground is the breathing room. Drawer rails head each section; cards sit in their rows beneath.
### Density
Comfortable; list-heavy shelf-lists allowed but always inside generous margins on a calm ground.
### Responsive
Renders well from ~390px mobile to 2560px+ ultra-wide. On mobile the drawer column becomes a horizontal tab row, non-essential nav and table columns hide, and nothing overflows horizontally. On ultra-wide, contained content caps and centers; only the hero spans 100vw. Grids use minmax(0,1fr) + min-width:0 so children shrink instead of overflowing.
### Breakpoints
- **Sm**: 640px
- **Md**: 820px
- **Lg**: 1020px
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 2px rgba(0,0,0,.28)
- **Md**: 0 2px 4px rgba(0,0,0,.30), 0 8px 18px rgba(0,0,0,.30)
- **Lg**: 0 4px 8px rgba(0,0,0,.34), 0 18px 38px rgba(0,0,0,.38)
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `2px`
- **Md**: `2px`
- **Lg**: `2px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: paper card on wooden-dark cabinet
- **Card Style**: Borderless warm-ivory index card with a brick-red left margin rule, faint horizontal index ruling, one protruding filing-ink tab, a mono call number, and a two-layer warm shadow; the active card is pulled forward out of its drawer row.
- **Bg Pattern**: deep teak-ink ground with a faint routed wood grain (no dot grid)
### Borders
- **Default Width**: 0
- **Divider**: 2px dashed rgba(42,33,21,.14)
- **Style**: no card borders; brick-red margin rule + dashed perforation dividers
- **Character**: Structure comes from drawer rails, the brick-red margin rule, faint index ruling, and protruding filing tabs, never from enclosing cards with borders.
## Components
### Composition
Build scenes as a card catalog: sections are drawer rails (routed teak bar + brass pull + ivory red-ruled label-frame), and the records inside are borderless ivory index cards sitting in a row. The card you act on is pulled forward out of the row. No bordered panels; the ruled margin and tabs are the structure.
### Hierarchy
Lead with Fraunces display, file every record with a single filing-ink tab and a mono call number, and reserve one brass primary action per view. Categories and states read from the five filing inks, not from oversized controls.
### Density
Content may be rich and list-heavy, but cards keep generous 16-22px+ padding and the layout breathes on a calm teak ground. Whitespace is the dark cabinet, never filled with noise.
### Signature
Drawer rails + filed index cards with a brick-red margin rule and faint index ruling + the pulled card + protruding filing-ink tabs + mono call numbers + a single brass datum, on a deep teak-ink ground.
## 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-019efa8d-8811-7a40-a7d6-45db22c9498c/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 File every record with one filing-ink tab and a mono call number.
- Do Give each card the brick-red left margin rule and faint horizontal index ruling instead of a border.
- Do Pull the active or featured card forward out of its drawer row.
- Do Head each section with a drawer rail: routed teak bar, brass pull, ivory red-ruled label-frame.
- Do Keep one brass primary action per view and make the rest quieter.
- Do Separate shelf-list rows with 2px dashed perforation rules, not solid borders.
- Do Use JetBrains Mono for call numbers, dates, counts, and status so metadata feels catalogued.
- Don't Do not use dark-fill stamps or reversed white text; stamps stay bright with dark ink.
- Don't Do not enclose cards in borders; the ruled margin and tabs carry the structure.
- Don't Do not add a second metal or any accent beyond the five filing inks; brick-red is the margin rule only.
- Don't Do not add glass blur, glow, animated gradients, or mesh backgrounds.
- Don't Do not use the brick-red rule anywhere except the card/input left margin.
- Don't Do not trap navigation in a floating pill bar; let the drawer rail and column breathe on the page.
### Accessibility
Bright filing inks always carry dark ink text for strong contrast; the brick-red margin rule and index ruling are decorative, not required for comprehension; focus states show a 3px brass ring; controls keep touch-friendly sizing across mobile layouts.
## Imagery Direction
### Pairs With
pasteboard
### Summary
Cut-paper collage of catalog and stationery subjects — drawers, index cards, filing tabs, brass pulls — built from layered torn construction-paper shapes with soft paper shadows, on warm cream notebook paper, composed for a dark-overlay hero.
### Subjects
- a pulled-open card-catalog drawer
- a fanned stack of tabbed index cards
- a brass drawer pull and label-frame
- a single ruled index card laid flat
- a wall of filing drawers
### Usage
One full-bleed landing hero in the Pasteboard cut-paper technique, composed with the catalog subject toward the right so a left-side dark overlay keeps the headline legible. End every prompt with: NO text, NO letters, NO logos.
### Engine Hints
- **Model**: gpt-image-2
- **Provider**: openai
- **Tool**: openai-image MCP
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "cardwell",
"type": "registry:theme",
"title": "Cardwell shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#211A14",
"foreground": "#2A2115",
"card": "#F4ECDD",
"card-foreground": "#2A2115",
"popover": "#F4ECDD",
"popover-foreground": "#2A2115",
"primary": "#2A2115",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#9C8E78",
"muted-foreground": "#2A2115",
"accent": "#E6A93C",
"accent-foreground": "#ffffff",
"destructive": "#D98C84",
"border": "#3A2D20",
"input": "#3A2D20",
"ring": "#E6A93C",
"chart-1": "#2A2115",
"chart-2": "#f4f4f5",
"chart-3": "#E6A93C",
"chart-4": "#8FB48A",
"chart-5": "#E6A93C",
"sidebar": "#F4ECDD",
"sidebar-foreground": "#2A2115",
"sidebar-primary": "#2A2115",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#7FA6C9",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#3A2D20",
"sidebar-ring": "#E6A93C",
"radius": "2px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#2A2115",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#E6A93C",
"accent-foreground": "#ffffff",
"destructive": "#D98C84",
"border": "#303642",
"input": "#303642",
"ring": "#E6A93C",
"chart-1": "#2A2115",
"chart-2": "#f4f4f5",
"chart-3": "#E6A93C",
"chart-4": "#8FB48A",
"chart-5": "#E6A93C",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#2A2115",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#E6A93C",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#E6A93C",
"radius": "2px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019efa8d-8811-7a40-a7d6-45db22c9498c",
"slug": "cardwell",
"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",
"amber",
"bg",
"bg_2",
"border",
"brass",
"brass_deep",
"error",
"info",
"muted",
"muted_on_dark",
"on_accent",
"on_brass",
"plum",
"rail",
"rose",
"rule_red",
"sage",
"slate",
"success",
"surface",
"surface_2",
"text",
"text_on_dark",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font",
"mono_tracking",
"scale"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"borders": [
"character",
"default_width",
"divider",
"style"
],
"motion": [
"card_pull",
"drawer_slot",
"duration",
"easing",
"page_transitions",
"philosophy",
"reveal"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
Keep Cardwelland 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: #211A14;
--foreground: #2A2115;
--card: #F4ECDD;
--card-foreground: #2A2115;
--popover: #F4ECDD;
--popover-foreground: #2A2115;
--primary: #2A2115;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #9C8E78;
--muted-foreground: #2A2115;
--accent: #E6A93C;
--accent-foreground: #ffffff;
--destructive: #D98C84;
--border: #3A2D20;
--input: #3A2D20;
--ring: #E6A93C;
--chart-1: #2A2115;
--chart-2: #f4f4f5;
--chart-3: #E6A93C;
--chart-4: #8FB48A;
--chart-5: #E6A93C;
--sidebar: #F4ECDD;
--sidebar-foreground: #2A2115;
--sidebar-primary: #2A2115;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #7FA6C9;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #3A2D20;
--sidebar-ring: #E6A93C;
--radius: 2px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #2A2115;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #E6A93C;
--accent-foreground: #ffffff;
--destructive: #D98C84;
--border: #303642;
--input: #303642;
--ring: #E6A93C;
--chart-1: #2A2115;
--chart-2: #f4f4f5;
--chart-3: #E6A93C;
--chart-4: #8FB48A;
--chart-5: #E6A93C;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #2A2115;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #E6A93C;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #E6A93C;
--radius: 2px;
}
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 CardwellShadcnKit() {
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">Cardwell</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": "cardwell",
"type": "registry:theme",
"cssVars": {
"theme": {
"font-sans": "Inter, system-ui, sans-serif",
"font-serif": "Fraunces, Georgia, serif",
"font-mono": "JetBrains Mono, ui-monospace, monospace",
"radius": "2px"
},
"light": {
"background": "#211A14",
"foreground": "#EDE3D2",
"card": "#F4ECDD",
"card-foreground": "#2A2115",
"popover": "#F4ECDD",
"popover-foreground": "#2A2115",
"primary": "#C8A24A",
"primary-foreground": "#2A2115",
"secondary": "#3A2D20",
"secondary-foreground": "#EDE3D2",
"muted": "#2C2219",
"muted-foreground": "#B7A78C",
"accent": "#E6A93C",
"accent-foreground": "#2A2115",
"destructive": "#D98C84",
"destructive-foreground": "#2A2115",
"border": "#3A2D20",
"input": "#F4ECDD",
"ring": "#E6A93C",
"chart-1": "#E6A93C",
"chart-2": "#8FB48A",
"chart-3": "#D98C84",
"chart-4": "#7FA6C9",
"chart-5": "#B294C0"
},
"dark": {
"background": "#1A140E",
"foreground": "#EDE3D2",
"card": "#F4ECDD",
"card-foreground": "#2A2115",
"popover": "#F4ECDD",
"popover-foreground": "#2A2115",
"primary": "#C8A24A",
"primary-foreground": "#2A2115",
"secondary": "#3A2D20",
"secondary-foreground": "#EDE3D2",
"muted": "#2C2219",
"muted-foreground": "#B7A78C",
"accent": "#E6A93C",
"accent-foreground": "#2A2115",
"destructive": "#D98C84",
"destructive-foreground": "#2A2115",
"border": "#3A2D20",
"input": "#F4ECDD",
"ring": "#E6A93C",
"chart-1": "#E6A93C",
"chart-2": "#8FB48A",
"chart-3": "#D98C84",
"chart-4": "#7FA6C9",
"chart-5": "#B294C0"
}
}
}
# Cardwell shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019efa8d-8811-7a40-a7d6-45db22c9498c`
Slug: `cardwell`
## Intent
A card-catalog reading room. Knowledge is filed the way a librarian files it: every record is a tabbed index card pulled from a drawer, ruled with a brick-red margin line and stamped with a call number. Where most tools hand you a feed to clear, Cardwell hands you a cabinet to retrieve from. A deliberately dark teak-ink ground frames warm-ivory cards so a pulled record reads as retrieved into the light.
## 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": "#211A14",
"bg_2": "#2C2219",
"rail": "#3A2D20",
"surface": "#F4ECDD",
"surface_2": "#EFE4D0",
"text": "#2A2115",
"text_on_dark": "#EDE3D2",
"muted": "#9C8E78",
"muted_on_dark": "#B7A78C",
"border": "#3A2D20",
"brass": "#C8A24A",
"brass_deep": "#A8843A",
"on_brass": "#2A2115",
"rule_red": "#C0473B",
"amber": "#E6A93C",
"sage": "#8FB48A",
"rose": "#D98C84",
"slate": "#7FA6C9",
"plum": "#B294C0",
"accent": "#E6A93C",
"on_accent": "#2A2115",
"success": "#8FB48A",
"warning": "#E6A93C",
"error": "#D98C84",
"info": "#7FA6C9"
}
Typography:
{
"base_size": "17px",
"body_font": "Inter",
"heading_font": "Fraunces",
"mono_font": "JetBrains Mono",
"heading_weight": "600",
"heading_transform": "none",
"letter_spacing": "-0.018em",
"line_height": "1.6",
"mono_tracking": "0.10em to 0.14em uppercase labels and call numbers",
"scale": "eyebrow 10-11px mono, body 16-17px sans, title 19-24px display, hero 52-108px display",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap"
}
## Visual character to preserve
- Sections are drawer rails: a routed teak bar with a brass pull and an ivory red-ruled label-frame; the filed cards sit in a row inside.
- Index cards are warm ivory with no border, a brick-red vertical margin rule, faint horizontal index ruling behind the text, a protruding filing-ink tab top-left, and a mono call number top-right.
- The active or featured card is pulled — translateY(-6px) rotate(-0.5deg) with a larger warm shadow — so it reads as retrieved from the row.
- Five filing inks (amber, sage, rose, slate, plum) encode roles as bright tabs and dark-ink stamps; brass is the single metal for primary actions and totals.
- The ground is a deep teak-ink dark (#211A14) with a faint routed wood grain, so cream cards and bright tabs read as lifted into the light.
## ShadSync visual profile
{
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "dashed",
"underlay": false,
"grain": true,
"stickerBadges": true,
"motion": "lift-rotate",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
}
## Signature component recipes
### Button
Use `Button` for primary, secondary, outline, and ghost actions. Primary actions must expose the language's strongest contrast pair, while secondary and ghost actions should preserve the surface treatment instead of falling back to default neutral SaaS styling.
### Card
Use `Card`, `CardHeader`, `CardContent`, `CardFooter`, and `CardAction` as the main composition frame. Cards should demonstrate the language's surface, border, hierarchy, and density rules rather than appearing as generic rounded rectangles.
### Input and Textarea
Use `Input` and `Textarea` with visible focus rings, field labels, validation states, and the language's rhythm. Forms should show real product content, not placeholder-only controls.
### Select, Tabs, and Table
Use `Select`, `Tabs`, and `Table` to prove navigation, filtering, and dense data states. The table should show row rhythm, separators, hover/focus states, and an empty or status state when the language calls for it.
### Dialog and Sheet
Use `Dialog` for centered decisions and `Sheet` for contextual editing. Both should inherit the language's spacing, border, overlay, and motion rules.
## Preview shots
- `application-shell`: dashboard or workspace shell with navigation, cards, forms, and state badges.
- `detail-editor`: focused editing flow using input, textarea, select, switch/checkbox, dialog or sheet, and action buttons.
- `data-operations`: table-heavy operational view with tabs, dropdown menu affordances, badges, and destructive/empty states.
- Each preview shot must include a renderable `scene` payload with concrete headline, description, actions, and rows/fields/stats for the UI preview.
## Implementation contract
- Start from local `ui/src/components/ui` shadcn-style primitives; do not create a second component system.
- Apply `/katagami/shadcn/cardwell/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: File every record with one filing-ink tab and a mono call number.; Give each card the brick-red left margin rule and faint horizontal index ruling instead of a border.; Pull the active or featured card forward out of its drawer row.; Head each section with a drawer rail: routed teak bar, brass pull, ivory red-ruled label-frame.; Keep one brass primary action per view and make the rest quieter.; Separate shelf-list rows with 2px dashed perforation rules, not solid borders.; Use JetBrains Mono for call numbers, dates, counts, and status so metadata feels catalogued.
- Do not: Do not use dark-fill stamps or reversed white text; stamps stay bright with dark ink.; Do not enclose cards in borders; the ruled margin and tabs carry the structure.; Do not add a second metal or any accent beyond the five filing inks; brick-red is the margin rule only.; Do not add glass blur, glow, animated gradients, or mesh backgrounds.; Do not use the brick-red rule anywhere except the card/input left margin.; Do not trap navigation in a floating pill bar; let the drawer rail and column breathe on the page.
## 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 CardwellShadcnKit() {
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">Cardwell</h2>
<p className="mt-1 max-w-xl text-sm text-muted-foreground">
Use the Katagami registry theme, then compose these shadcn primitives
with the language-specific component recipes.
</p>
</div>
<Button>Apply theme</Button>
</div>
<Tabs defaultValue="components">
<TabsList>
<TabsTrigger value="components">Components</TabsTrigger>
<TabsTrigger value="states">States</TabsTrigger>
<TabsTrigger value="export">Export</TabsTrigger>
</TabsList>
</Tabs>
<Card>
<CardHeader>
<CardTitle>Component recipe</CardTitle>
<CardDescription>
Replace this starter content with the agent-authored product scene
from components.md and preview-shots.json.
</CardDescription>
</CardHeader>
<CardContent className="grid gap-3 sm:grid-cols-[1fr_auto]">
<Input defaultValue="Tokenized shadcn surface" aria-label="Recipe name" />
<Button variant="secondary">Preview state</Button>
</CardContent>
<CardFooter className="justify-between">
<Badge>Ready</Badge>
<Button variant="outline">Copy recipe</Button>
</CardFooter>
</Card>
</section>
);
}
```
## Layout notes
{
"grid": "Container max-width 1180-1200px with 16-44px responsive padding. Landing opens on a full-bleed 100svh hero, then contained drawer sections. Dashboard is a 248px drawer-column + main retrieval area. Mobile collapses to a single-column notebook flow.",
"whitespace": "Generous outer margins and 48-72px section gaps; the dark teak ground is the breathing room. Drawer rails head each section; cards sit in their rows beneath.",
"density": "Comfortable; list-heavy shelf-lists allowed but always inside generous margins on a calm ground.",
"responsive": "Renders well from ~390px mobile to 2560px+ ultra-wide. On mobile the drawer column becomes a horizontal tab row, non-essential nav and table columns hide, and nothing overflows horizontally. On ultra-wide, contained content caps and centers; only the hero spans 100vw. Grids use minmax(0,1fr) + min-width:0 so children shrink instead of overflowing.",
"breakpoints": {
"sm": "640px",
"md": "820px",
"lg": "1020px"
}
}
{
"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-019efa8d-8811-7a40-a7d6-45db22c9498c",
"name": "Cardwell",
"slug": "cardwell"
},
"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": [
"Sections are drawer rails: a routed teak bar with a brass pull and an ivory red-ruled label-frame; the filed cards sit in a row inside.",
"Index cards are warm ivory with no border, a brick-red vertical margin rule, faint horizontal index ruling behind the text, a protruding filing-ink tab top-left, and a mono call number top-right.",
"The active or featured card is pulled — translateY(-6px) rotate(-0.5deg) with a larger warm shadow — so it reads as retrieved from the row.",
"Five filing inks (amber, sage, rose, slate, plum) encode roles as bright tabs and dark-ink stamps; brass is the single metal for primary actions and totals.",
"The ground is a deep teak-ink dark (#211A14) with a faint routed wood grain, so cream cards and bright tabs read as lifted into the light."
],
"visualProfile": {
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": true,
"stickerBadges": true,
"motion": "lift-rotate",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
},
"shots": [
{
"id": "application-shell",
"title": "Application shell",
"viewport": "desktop",
"primitives": [
"button",
"card",
"input",
"select",
"tabs",
"badge",
"separator",
"table"
],
"composition": "A real product workspace with navigation, summary cards, filtering controls, and one dense content region.",
"mustShow": [
"primary and secondary actions",
"card hierarchy",
"filterable state",
"table or list density"
],
"avoid": [
"component inventory walls",
"placeholder-only content",
"generic rounded SaaS chrome"
],
"scene": {
"eyebrow": "workspace spread",
"headline": "Cardwell 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": [
"File every record with one filing-ink tab and a mono call number.",
"Give each card the brick-red left margin rule and faint horizontal index ruling instead of a border.",
"Pull the active or featured card forward out of its drawer row.",
"Head each section with a drawer rail: routed teak bar, brass pull, ivory red-ruled label-frame.",
"Keep one brass primary action per view and make the rest quieter.",
"Separate shelf-list rows with 2px dashed perforation rules, not solid borders.",
"Use JetBrains Mono for call numbers, dates, counts, and status so metadata feels catalogued."
],
"dont": [
"Do not use dark-fill stamps or reversed white text; stamps stay bright with dark ink.",
"Do not enclose cards in borders; the ruled margin and tabs carry the structure.",
"Do not add a second metal or any accent beyond the five filing inks; brick-red is the margin rule only.",
"Do not add glass blur, glow, animated gradients, or mesh backgrounds.",
"Do not use the brick-red rule anywhere except the card/input left margin.",
"Do not trap navigation in a floating pill bar; let the drawer rail and column breathe on the page."
]
}
}