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 layouts on a square grid module, content capped at 1160-1200px and centred (only the landing hero spans 100vw). Elements align to strong horizontal and vertical axes, like the grid of characters within a seal face. Negative space is active — the uncarved area defines the carved. Group related content behind square dark inset frames that echo a seal stone.
Primary emphasis through size and cinnabar red; secondary through serif weight and dark ink; tertiary through muted stone gray. Headings are carved-in: large, dark, Noto Serif SC 900. Body flows like brush annotations. Interactive elements stamp forward like freshly pressed chops.
Medium-high. Seal compositions pack meaning into square spaces; the UI is structured and information-rich without crowding. Consistent 8px spacing units and inset stone frames separate content zones.
The decisive press: every control presses inward via inset/stamp shadows and deepens the cinnabar on activation. Five named patterns — Stamp Button, Seal Badge, Stone Card, Imprint Table, Chop-Mark Divider — each appearing live in the embodiment.
Square module; CSS grid with minmax(0,1fr) + min-width:0 so children shrink, never overflow; content max-width 1160-1200px centred.
Generous; section gaps 96px, card padding 32px; always pad above titles.
medium-high
390px mobile to 2560px+ ultra-wide. Mobile stacks to one column, hides non-essential nav links and secondary table columns, never overflows horizontally. Ultra-wide caps and centres content; only the hero spans 100vw.
cinnabar
Imagery is hand-pressed cinnabar seal impressions: bold flat vermilion-red carved strokes stamped onto warm cream xuan-paper, forms emerging from carved negative space, grainy mottled edges with fiber gaps, flat single-color with no gradients, composed on a strong square axis and filling the frame edge to edge.
One full-bleed cinnabar impression as the landing hero (swapped via --hero-image); compact chops for features and avatars; sparser half-inked impressions for empty states.
# Zhuwen ## Philosophy 朱文 — the carved-relief seal style, where characters stand in cinnabar against the paper. Zhuwen carries the grammar of zhuan ke (seal carving) into the interface: each control presses into a warm xuan-paper field like a chop meeting cinnabar paste — square, deliberate, irreversible in its clarity. It is the design language for the things a seal proves: catalogues, provenance trails, and authentication desks. The signature mechanic is the decisive press — controls do not float; on activation a stamp drops one pixel and the cinnabar deepens, the way real seal paste meets paper. Carved negative space does as much work as the ink. ### Values - Carved with intention — purposeful form, no decorative excess - Red and white in dynamic tension — the yin-yang of carved and uncarved space - Square geometry honours the seal stone — sharp edges convey authority and permanence - Hierarchy from weight and position, like characters composed within a seal face - The press is decisive — interactions resolve with the finality of ink meeting paper ### Anti-Values - Rounded corners — seals are carved from square stone - Floating soft drop-shadows that lift elements off the page - Gradients and photographic backgrounds — the field is ink-on-paper abstraction - Pills and circular badges — seal forms are square - Cold white screens — the ground is warm xuan-paper - Bounce or elastic easing — the press is firm ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#F1E7D2` | | surface | `#FBF4E3` | | surface_2 | `#EADFC6` | | text | `#241C14` | | muted | `#756A55` | | border | `#D8CBAE` | | accent | `#C0271F` | | accent_deep | `#8F1B16` | | on_accent | `#FBF4E3` | | gold | `#9A6A1E` | | success | `#4F6B34` | | warning | `#9A6A1E` | | error | `#A8201A` | | info | `#355A78` | | primary | `#C0271F` | | secondary | `#241C14` | ### Typography - **Base Size**: 17px - **Body Font**: Noto Sans SC - **Heading Font**: Noto Serif SC - **Mono Font**: Fira Code - **Heading Weight**: 900 - **Heading Transform**: none - **Letter Spacing**: -0.02em - **Line Height**: 1.62 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@500;700;900&family=Noto+Sans+SC:wght@400;500;700&family=Fira+Code:wght@500&display=swap ### Radii - **None**: 0px - **Sm**: 0px - **Md**: 0px - **Lg**: 0px - **Full**: 0px ### Shadows - **Carve Sm**: inset 0 1px 2px rgba(36,28,20,.14) - **Carve Md**: inset 0 2px 6px rgba(36,28,20,.18), inset 0 0 0 1px rgba(36,28,20,.06) - **Stamp**: inset 0 2px 0 rgba(143,27,22,.45), inset 0 -2px 0 rgba(0,0,0,.10) - **Stone**: 6px 6px 0 rgba(36,28,20,.10) ### Spacing - **Base**: 8px - **Scale**: ["4px","8px","12px","16px","24px","32px","48px","64px","96px","128px"] ### Surfaces - **Treatment**: warm xuan-paper field with subtle CSS fiber speckle and flat cinnabar stamp surfaces - **Card Style**: surface behind a 3px dark inset stroke (square seal-stone frame) with a hard offset stone-shadow; carved, never floating - **Bg Pattern**: radial paper-fiber speckle dots via CSS gradients only; no photographic imagery ### Borders - **Default Width**: 3px - **Accent Width**: 3px - **Style**: solid as inset stroke - **Character**: square seal-stone frames realised as inset box-shadow strokes; thick cinnabar top rule on data regions; never rounded, never a single accent edge ### Motion - **Duration**: 150ms - **Easing**: cubic-bezier(0.2,0,0.3,1) - **Philosophy**: firm decisive press: controls translate down one pixel and the cinnabar deepens as if paste meets paper; no bounce or elastic easing; settled state is the no-JS default, motion layered on top ## Rules ### Composition Build layouts on a square grid module, content capped at 1160-1200px and centred (only the landing hero spans 100vw). Elements align to strong horizontal and vertical axes, like the grid of characters within a seal face. Negative space is active — the uncarved area defines the carved. Group related content behind square dark inset frames that echo a seal stone. ### Hierarchy Primary emphasis through size and cinnabar red; secondary through serif weight and dark ink; tertiary through muted stone gray. Headings are carved-in: large, dark, Noto Serif SC 900. Body flows like brush annotations. Interactive elements stamp forward like freshly pressed chops. ### Density Medium-high. Seal compositions pack meaning into square spaces; the UI is structured and information-rich without crowding. Consistent 8px spacing units and inset stone frames separate content zones. ### Signature The decisive press: every control presses inward via inset/stamp shadows and deepens the cinnabar on activation. Five named patterns — Stamp Button, Seal Badge, Stone Card, Imprint Table, Chop-Mark Divider — each appearing live in the embodiment. ## Layout ### Grid Square module; CSS grid with minmax(0,1fr) + min-width:0 so children shrink, never overflow; content max-width 1160-1200px centred. ### Whitespace Generous; section gaps 96px, card padding 32px; always pad above titles. ### Density medium-high ### Responsive 390px mobile to 2560px+ ultra-wide. Mobile stacks to one column, hides non-essential nav links and secondary table columns, never overflows horizontally. Ultra-wide caps and centres content; only the hero spans 100vw. ### Breakpoints - **Mobile**: 390px - **Tablet**: 720px - **Desktop**: 980px - **Wide**: 1200px ## Guidance ### Do - Press cinnabar (#C0271F) onto warm xuan-paper for primary actions and emphasis - Keep everything square — radius 0; sharp edges convey authority - Use inset and stamp shadows to carve controls inward, never floating drops - Compose on a strong grid, aligned like characters in a seal face - Make one button clearly primary; keep the rest quieter; share one shape and height - Use seal badges with text or characters, not colour alone, for status - Use Noto Serif SC 900 for headings to evoke the structured strokes of seal script - Reserve seal-gold for authentication and certification marks ### Don't - Never round corners — seals are carved from square stone - Avoid gradients and photographic backgrounds — the field is ink-on-paper abstraction (the swappable hero image excepted) - Do not use floating soft drop-shadows; prefer inset/offset shadows that carve - Never mix more than three accents in one component - Never use pills or circular badges; never a single accent edge on a card - No emoji or symbol glyphs in copy, markup, or on buttons - Do not trap navigation in a floating boxed pill ### Accessibility WCAG AA contrast: cinnabar on paper ~4.6:1, dark ink on paper ~13:1, paper-white on cinnabar ~4.7:1. Focus states use a 2px cinnabar inset ring. Touch targets meet 44px. Colour is never the sole indicator — seal badges carry text or characters. Semantic heading order preserved. prefers-reduced-motion respected. ## Imagery Direction ### Pairs With cinnabar ### Summary Imagery is hand-pressed cinnabar seal impressions: bold flat vermilion-red carved strokes stamped onto warm cream xuan-paper, forms emerging from carved negative space, grainy mottled edges with fiber gaps, flat single-color with no gradients, composed on a strong square axis and filling the frame edge to edge. ### Subjects - cranes over mountain peaks - leaping carp - auspicious clouds - pine and rock - scrolls and chops - heritage motifs ### Usage One full-bleed cinnabar impression as the landing hero (swapped via --hero-image); compact chops for features and avatars; sparser half-inked impressions for empty states.
---
version: "alpha"
name: "Zhuwen"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#F1E7D2"
surface: "#FBF4E3"
surface_2: "#EADFC6"
text: "#241C14"
muted: "#756A55"
border: "#D8CBAE"
accent: "#C0271F"
accent_deep: "#8F1B16"
on_accent: "#FBF4E3"
gold: "#9A6A1E"
success: "#4F6B34"
warning: "#9A6A1E"
error: "#A8201A"
info: "#355A78"
primary: "#C0271F"
secondary: "#241C14"
typography:
headline-lg:
fontFamily: "Noto Serif SC"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Noto Serif SC"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "Noto Sans SC"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.02em"
label-md:
fontFamily: "Fira Code"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
sm: "0px"
md: "0px"
lg: "0px"
full: "0px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
step-8: "96px"
step-9: "128px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_2:
backgroundColor: "{colors.surface_2}"
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_deep:
backgroundColor: "{colors.accent_deep}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-gold:
backgroundColor: "{colors.gold}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
color-reference-primary:
backgroundColor: "{colors.primary}"
color-reference-secondary:
backgroundColor: "{colors.secondary}"
button-primary:
backgroundColor: "{colors.primary}"
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"
---
# Zhuwen
## Overview
朱文 — the carved-relief seal style, where characters stand in cinnabar against the paper. Zhuwen carries the grammar of zhuan ke (seal carving) into the interface: each control presses into a warm xuan-paper field like a chop meeting cinnabar paste — square, deliberate, irreversible in its clarity. It is the design language for the things a seal proves: catalogues, provenance trails, and authentication desks. The signature mechanic is the decisive press — controls do not float; on activation a stamp drops one pixel and the cinnabar deepens, the way real seal paste meets paper. Carved negative space does as much work as the ink.
### Values
- Carved with intention — purposeful form, no decorative excess
- Red and white in dynamic tension — the yin-yang of carved and uncarved space
- Square geometry honours the seal stone — sharp edges convey authority and permanence
- Hierarchy from weight and position, like characters composed within a seal face
- The press is decisive — interactions resolve with the finality of ink meeting paper
### Anti-Values
- Rounded corners — seals are carved from square stone
- Floating soft drop-shadows that lift elements off the page
- Gradients and photographic backgrounds — the field is ink-on-paper abstraction
- Pills and circular badges — seal forms are square
- Cold white screens — the ground is warm xuan-paper
- Bounce or elastic easing — the press is firm
## 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 | `#F1E7D2` |
| surface | `#FBF4E3` |
| surface_2 | `#EADFC6` |
| text | `#241C14` |
| muted | `#756A55` |
| border | `#D8CBAE` |
| accent | `#C0271F` |
| accent_deep | `#8F1B16` |
| on_accent | `#FBF4E3` |
| gold | `#9A6A1E` |
| success | `#4F6B34` |
| warning | `#9A6A1E` |
| error | `#A8201A` |
| info | `#355A78` |
| primary | `#C0271F` |
| secondary | `#241C14` |
## Typography
- **Headline-Lg**: Noto Serif SC, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Noto Serif SC, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Noto Sans SC, 17px, weight 400, line-height 1.5.
- **Label-Md**: Fira Code, 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`
- **Step-9**: `128px`
### Grid
Square module; CSS grid with minmax(0,1fr) + min-width:0 so children shrink, never overflow; content max-width 1160-1200px centred.
### Whitespace
Generous; section gaps 96px, card padding 32px; always pad above titles.
### Density
medium-high
### Responsive
390px mobile to 2560px+ ultra-wide. Mobile stacks to one column, hides non-essential nav links and secondary table columns, never overflows horizontally. Ultra-wide caps and centres content; only the hero spans 100vw.
### Breakpoints
- **Mobile**: 390px
- **Tablet**: 720px
- **Desktop**: 980px
- **Wide**: 1200px
## Elevation & Depth
### Shadows
- **Carve Sm**: inset 0 1px 2px rgba(36,28,20,.14)
- **Carve Md**: inset 0 2px 6px rgba(36,28,20,.18), inset 0 0 0 1px rgba(36,28,20,.06)
- **Stamp**: inset 0 2px 0 rgba(143,27,22,.45), inset 0 -2px 0 rgba(0,0,0,.10)
- **Stone**: 6px 6px 0 rgba(36,28,20,.10)
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `0px`
- **Md**: `0px`
- **Lg**: `0px`
- **Full**: `0px`
### Surfaces
- **Treatment**: warm xuan-paper field with subtle CSS fiber speckle and flat cinnabar stamp surfaces
- **Card Style**: surface behind a 3px dark inset stroke (square seal-stone frame) with a hard offset stone-shadow; carved, never floating
- **Bg Pattern**: radial paper-fiber speckle dots via CSS gradients only; no photographic imagery
### Borders
- **Default Width**: 3px
- **Accent Width**: 3px
- **Style**: solid as inset stroke
- **Character**: square seal-stone frames realised as inset box-shadow strokes; thick cinnabar top rule on data regions; never rounded, never a single accent edge
## Components
### Composition
Build layouts on a square grid module, content capped at 1160-1200px and centred (only the landing hero spans 100vw). Elements align to strong horizontal and vertical axes, like the grid of characters within a seal face. Negative space is active — the uncarved area defines the carved. Group related content behind square dark inset frames that echo a seal stone.
### Hierarchy
Primary emphasis through size and cinnabar red; secondary through serif weight and dark ink; tertiary through muted stone gray. Headings are carved-in: large, dark, Noto Serif SC 900. Body flows like brush annotations. Interactive elements stamp forward like freshly pressed chops.
### Density
Medium-high. Seal compositions pack meaning into square spaces; the UI is structured and information-rich without crowding. Consistent 8px spacing units and inset stone frames separate content zones.
### Signature
The decisive press: every control presses inward via inset/stamp shadows and deepens the cinnabar on activation. Five named patterns — Stamp Button, Seal Badge, Stone Card, Imprint Table, Chop-Mark Divider — each appearing live in the embodiment.
## 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-019efa7c-0b56-7ca3-8c1b-fa224a738f6d/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 Press cinnabar (#C0271F) onto warm xuan-paper for primary actions and emphasis
- Do Keep everything square — radius 0; sharp edges convey authority
- Do Use inset and stamp shadows to carve controls inward, never floating drops
- Do Compose on a strong grid, aligned like characters in a seal face
- Do Make one button clearly primary; keep the rest quieter; share one shape and height
- Do Use seal badges with text or characters, not colour alone, for status
- Do Use Noto Serif SC 900 for headings to evoke the structured strokes of seal script
- Do Reserve seal-gold for authentication and certification marks
- Don't Never round corners — seals are carved from square stone
- Don't Avoid gradients and photographic backgrounds — the field is ink-on-paper abstraction (the swappable hero image excepted)
- Don't Do not use floating soft drop-shadows; prefer inset/offset shadows that carve
- Don't Never mix more than three accents in one component
- Don't Never use pills or circular badges; never a single accent edge on a card
- Don't No emoji or symbol glyphs in copy, markup, or on buttons
- Don't Do not trap navigation in a floating boxed pill
### Accessibility
WCAG AA contrast: cinnabar on paper ~4.6:1, dark ink on paper ~13:1, paper-white on cinnabar ~4.7:1. Focus states use a 2px cinnabar inset ring. Touch targets meet 44px. Colour is never the sole indicator — seal badges carry text or characters. Semantic heading order preserved. prefers-reduced-motion respected.
## Imagery Direction
### Pairs With
cinnabar
### Summary
Imagery is hand-pressed cinnabar seal impressions: bold flat vermilion-red carved strokes stamped onto warm cream xuan-paper, forms emerging from carved negative space, grainy mottled edges with fiber gaps, flat single-color with no gradients, composed on a strong square axis and filling the frame edge to edge.
### Subjects
- cranes over mountain peaks
- leaping carp
- auspicious clouds
- pine and rock
- scrolls and chops
- heritage motifs
### Usage
One full-bleed cinnabar impression as the landing hero (swapped via --hero-image); compact chops for features and avatars; sparser half-inked impressions for empty states.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "zhuwen",
"type": "registry:theme",
"title": "Zhuwen shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F1E7D2",
"foreground": "#241C14",
"card": "#FBF4E3",
"card-foreground": "#241C14",
"popover": "#FBF4E3",
"popover-foreground": "#241C14",
"primary": "#C0271F",
"primary-foreground": "#ffffff",
"secondary": "#241C14",
"secondary-foreground": "#ffffff",
"muted": "#756A55",
"muted-foreground": "#241C14",
"accent": "#C0271F",
"accent-foreground": "#ffffff",
"destructive": "#A8201A",
"border": "#D8CBAE",
"input": "#D8CBAE",
"ring": "#C0271F",
"chart-1": "#C0271F",
"chart-2": "#241C14",
"chart-3": "#C0271F",
"chart-4": "#4F6B34",
"chart-5": "#9A6A1E",
"sidebar": "#FBF4E3",
"sidebar-foreground": "#241C14",
"sidebar-primary": "#C0271F",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#355A78",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#D8CBAE",
"sidebar-ring": "#C0271F",
"radius": "0px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#C0271F",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#C0271F",
"accent-foreground": "#ffffff",
"destructive": "#A8201A",
"border": "#303642",
"input": "#303642",
"ring": "#C0271F",
"chart-1": "#C0271F",
"chart-2": "#241C14",
"chart-3": "#C0271F",
"chart-4": "#4F6B34",
"chart-5": "#9A6A1E",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#C0271F",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#C0271F",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#C0271F",
"radius": "0px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019efa7c-0b56-7ca3-8c1b-fa224a738f6d",
"slug": "zhuwen",
"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_deep",
"bg",
"border",
"error",
"gold",
"info",
"muted",
"on_accent",
"primary",
"secondary",
"success",
"surface",
"surface_2",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"carve_md",
"carve_sm",
"stamp",
"stone"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"motion": [
"duration",
"easing",
"philosophy"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
Keep Zhuwenand 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: #F1E7D2;
--foreground: #241C14;
--card: #FBF4E3;
--card-foreground: #241C14;
--popover: #FBF4E3;
--popover-foreground: #241C14;
--primary: #C0271F;
--primary-foreground: #ffffff;
--secondary: #241C14;
--secondary-foreground: #ffffff;
--muted: #756A55;
--muted-foreground: #241C14;
--accent: #C0271F;
--accent-foreground: #ffffff;
--destructive: #A8201A;
--border: #D8CBAE;
--input: #D8CBAE;
--ring: #C0271F;
--chart-1: #C0271F;
--chart-2: #241C14;
--chart-3: #C0271F;
--chart-4: #4F6B34;
--chart-5: #9A6A1E;
--sidebar: #FBF4E3;
--sidebar-foreground: #241C14;
--sidebar-primary: #C0271F;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #355A78;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #D8CBAE;
--sidebar-ring: #C0271F;
--radius: 0px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #C0271F;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #C0271F;
--accent-foreground: #ffffff;
--destructive: #A8201A;
--border: #303642;
--input: #303642;
--ring: #C0271F;
--chart-1: #C0271F;
--chart-2: #241C14;
--chart-3: #C0271F;
--chart-4: #4F6B34;
--chart-5: #9A6A1E;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #C0271F;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #C0271F;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #C0271F;
--radius: 0px;
}
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 ZhuwenShadcnKit() {
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">Zhuwen</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": "zhuwen",
"type": "registry:theme",
"title": "Zhuwen — Cinnabar Seal Impression",
"author": "katagami-agent",
"cssVars": {
"theme": {
"font-sans": "\"Noto Sans SC\", \"PingFang SC\", system-ui, sans-serif",
"font-serif": "\"Noto Serif SC\", \"Songti SC\", serif",
"font-mono": "\"Fira Code\", ui-monospace, monospace",
"radius": "0px"
},
"light": {
"background": "#F1E7D2",
"foreground": "#241C14",
"card": "#FBF4E3",
"card-foreground": "#241C14",
"popover": "#FBF4E3",
"popover-foreground": "#241C14",
"primary": "#C0271F",
"primary-foreground": "#FBF4E3",
"secondary": "#EADFC6",
"secondary-foreground": "#241C14",
"muted": "#EADFC6",
"muted-foreground": "#756A55",
"accent": "#9A6A1E",
"accent-foreground": "#FBF4E3",
"destructive": "#A8201A",
"destructive-foreground": "#FBF4E3",
"border": "#D8CBAE",
"input": "#D8CBAE",
"ring": "#C0271F",
"chart-1": "#C0271F",
"chart-2": "#9A6A1E",
"chart-3": "#4F6B34",
"chart-4": "#8F1B16",
"chart-5": "#355A78",
"radius": "0px"
},
"dark": {
"background": "#1B140D",
"foreground": "#EFE4CE",
"card": "#241C14",
"card-foreground": "#EFE4CE",
"popover": "#241C14",
"popover-foreground": "#EFE4CE",
"primary": "#D8392B",
"primary-foreground": "#1B140D",
"secondary": "#332A1F",
"secondary-foreground": "#EFE4CE",
"muted": "#332A1F",
"muted-foreground": "#A89B82",
"accent": "#C8A85E",
"accent-foreground": "#1B140D",
"destructive": "#D8392B",
"destructive-foreground": "#1B140D",
"border": "#3D3326",
"input": "#3D3326",
"ring": "#D8392B",
"chart-1": "#D8392B",
"chart-2": "#C8A85E",
"chart-3": "#7FA06A",
"chart-4": "#A8201A",
"chart-5": "#7C97A8"
}
},
"visualProfile": {
"id": "zhuwen-cinnabar-seal",
"material": "flat ink-on-paper; carved-relief seal impression, never glossy or floating",
"radius": "0px",
"borders": "square dark inset strokes (3px) that frame surfaces like seal-stone edges; thick cinnabar top rule on data regions; no rounded or single-side accent edges",
"shadow": "inset carve-shadows on controls and a hard offset stone-shadow (6px 6px 0) on cards; never soft floating drops",
"accentUsage": "one vivid cinnabar primary, a stone-gold accent, a small jade for success — used like highlighters on a warm xuan-paper ground",
"motion": "firm decisive press: controls drop one pixel and the cinnabar deepens on activation; no bounce or elastic easing",
"ground": "warm xuan-paper (#F1E7D2) with subtle CSS fiber speckle; light mode default"
}
}
# Zhuwen shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019efa7c-0b56-7ca3-8c1b-fa224a738f6d`
Slug: `zhuwen`
## Intent
朱文 — the carved-relief seal style, where characters stand in cinnabar against the paper. Zhuwen carries the grammar of zhuan ke (seal carving) into the interface: each control presses into a warm xuan-paper field like a chop meeting cinnabar paste — square, deliberate, irreversible in its clarity. It is the design language for the things a seal proves: catalogues, provenance trails, and authentication desks. The signature mechanic is the decisive press — controls do not float; on activation a stamp drops one pixel and the cinnabar deepens, the way real seal paste meets paper. Carved negative space does as much work as the ink.
## 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": "#F1E7D2",
"surface": "#FBF4E3",
"surface_2": "#EADFC6",
"text": "#241C14",
"muted": "#756A55",
"border": "#D8CBAE",
"accent": "#C0271F",
"accent_deep": "#8F1B16",
"on_accent": "#FBF4E3",
"gold": "#9A6A1E",
"success": "#4F6B34",
"warning": "#9A6A1E",
"error": "#A8201A",
"info": "#355A78",
"primary": "#C0271F",
"secondary": "#241C14"
}
Typography:
{
"base_size": "17px",
"body_font": "Noto Sans SC",
"heading_font": "Noto Serif SC",
"mono_font": "Fira Code",
"heading_weight": "900",
"heading_transform": "none",
"letter_spacing": "-0.02em",
"line_height": "1.62",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@500;700;900&family=Noto+Sans+SC:wght@400;500;700&family=Fira+Code:wght@500&display=swap"
}
## Visual character to preserve
- Make the source language's structural identity visible in every component state.
## ShadSync visual profile
{
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "solid",
"underlay": true,
"grain": true,
"stickerBadges": true,
"motion": "still",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
}
## Signature component recipes
### Button
Use `Button` for primary, secondary, outline, and ghost actions. Primary actions must expose the language's strongest contrast pair, while secondary and ghost actions should preserve the surface treatment instead of falling back to default neutral SaaS styling.
### Card
Use `Card`, `CardHeader`, `CardContent`, `CardFooter`, and `CardAction` as the main composition frame. Cards should demonstrate the language's surface, border, hierarchy, and density rules rather than appearing as generic rounded rectangles.
### Input and Textarea
Use `Input` and `Textarea` with visible focus rings, field labels, validation states, and the language's rhythm. Forms should show real product content, not placeholder-only controls.
### Select, Tabs, and Table
Use `Select`, `Tabs`, and `Table` to prove navigation, filtering, and dense data states. The table should show row rhythm, separators, hover/focus states, and an empty or status state when the language calls for it.
### Dialog and Sheet
Use `Dialog` for centered decisions and `Sheet` for contextual editing. Both should inherit the language's spacing, border, overlay, and motion rules.
## Preview shots
- `application-shell`: dashboard or workspace shell with navigation, cards, forms, and state badges.
- `detail-editor`: focused editing flow using input, textarea, select, switch/checkbox, dialog or sheet, and action buttons.
- `data-operations`: table-heavy operational view with tabs, dropdown menu affordances, badges, and destructive/empty states.
- Each preview shot must include a renderable `scene` payload with concrete headline, description, actions, and rows/fields/stats for the UI preview.
## Implementation contract
- Start from local `ui/src/components/ui` shadcn-style primitives; do not create a second component system.
- Apply `/katagami/shadcn/zhuwen/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: Press cinnabar (#C0271F) onto warm xuan-paper for primary actions and emphasis; Keep everything square — radius 0; sharp edges convey authority; Use inset and stamp shadows to carve controls inward, never floating drops; Compose on a strong grid, aligned like characters in a seal face; Make one button clearly primary; keep the rest quieter; share one shape and height; Use seal badges with text or characters, not colour alone, for status; Use Noto Serif SC 900 for headings to evoke the structured strokes of seal script; Reserve seal-gold for authentication and certification marks
- Do not: Never round corners — seals are carved from square stone; Avoid gradients and photographic backgrounds — the field is ink-on-paper abstraction (the swappable hero image excepted); Do not use floating soft drop-shadows; prefer inset/offset shadows that carve; Never mix more than three accents in one component; Never use pills or circular badges; never a single accent edge on a card; No emoji or symbol glyphs in copy, markup, or on buttons; Do not trap navigation in a floating boxed pill
## 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 ZhuwenShadcnKit() {
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">Zhuwen</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": "Square module; CSS grid with minmax(0,1fr) + min-width:0 so children shrink, never overflow; content max-width 1160-1200px centred.",
"whitespace": "Generous; section gaps 96px, card padding 32px; always pad above titles.",
"density": "medium-high",
"responsive": "390px mobile to 2560px+ ultra-wide. Mobile stacks to one column, hides non-essential nav links and secondary table columns, never overflows horizontally. Ultra-wide caps and centres content; only the hero spans 100vw.",
"breakpoints": {
"mobile": "390px",
"tablet": "720px",
"desktop": "980px",
"wide": "1200px"
}
}
{
"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-019efa7c-0b56-7ca3-8c1b-fa224a738f6d",
"name": "Zhuwen",
"slug": "zhuwen"
},
"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": [],
"visualProfile": {
"family": "system",
"material": "flat",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "still",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
},
"shots": [
{
"id": "application-shell",
"title": "Application shell",
"viewport": "desktop",
"primitives": [
"button",
"card",
"input",
"select",
"tabs",
"badge",
"separator",
"table"
],
"composition": "A real product workspace with navigation, summary cards, filtering controls, and one dense content region.",
"mustShow": [
"primary and secondary actions",
"card hierarchy",
"filterable state",
"table or list density"
],
"avoid": [
"component inventory walls",
"placeholder-only content",
"generic rounded SaaS chrome"
],
"scene": {
"eyebrow": "workspace spread",
"headline": "Zhuwen 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": [
"Press cinnabar (#C0271F) onto warm xuan-paper for primary actions and emphasis",
"Keep everything square — radius 0; sharp edges convey authority",
"Use inset and stamp shadows to carve controls inward, never floating drops",
"Compose on a strong grid, aligned like characters in a seal face",
"Make one button clearly primary; keep the rest quieter; share one shape and height",
"Use seal badges with text or characters, not colour alone, for status",
"Use Noto Serif SC 900 for headings to evoke the structured strokes of seal script",
"Reserve seal-gold for authentication and certification marks"
],
"dont": [
"Never round corners — seals are carved from square stone",
"Avoid gradients and photographic backgrounds — the field is ink-on-paper abstraction (the swappable hero image excepted)",
"Do not use floating soft drop-shadows; prefer inset/offset shadows that carve",
"Never mix more than three accents in one component",
"Never use pills or circular badges; never a single accent edge on a card",
"No emoji or symbol glyphs in copy, markup, or on buttons",
"Do not trap navigation in a floating boxed pill"
]
}
}