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.
Every screen registers against one vertical plumb line at the left margin (64px rail). Content hangs off it; nothing floats centred. Weight loads toward the lower third, the way a hanging scroll loads its base. The dark wet-ink ground dominates; luminous marks are placed one at a time.
Typography alone establishes hierarchy: a Spectral display cascade in a 1.414 ratio plus weight variation. Colour is NOT used for rank — bone-white and stone-grey only. The single cinnabar marks importance through rarity. Semantic hues appear only as a documented state heat-scale.
Airy. Generous 40–160px spacing; cards separated by the ground and hairlines, never crowded. Lists paginate before they fill. Empty is the natural condition, not an error.
The Plumb Line (one vertical hairline rail every screen); The Registration Tick (a cinnabar bar+square hanging eyebrows off the rail); The Descending Seal (a column of impressed chops down the margin, three weights = three states); The Unrolling (downward vertical reveal, plumb line draws on load); Absence as state (a single mark on the dark field).
single vertical axis; content registered to a left 64px plumb-line rail, max-width ~1180px (1320px ultra-wide)
the dark wet-ink void is the primary compositional material; generous 40–160px section rhythm
airy
single column on mobile; the rail collapses but the descent remains; only the full-bleed hero spans 100vw; content caps and centres on ultra-wide
cinnabar-seal
Traditional Chinese shuimo (water-and-ink) brushwork — luminous ink blooming into a wet dark ground — finished with impressed vermilion seal stamps. Composed on a vertical hanging-scroll axis: misted forms dissolving into dark void with a descending column of cinnabar chops.
One full-bleed hero per landing, composed vertically with content pinned lower-left and the seal-column descending the right edge. Never used for the thumbnail (the embodiment is the thumbnail source).
# Zhóu ## Philosophy A vertical-axis ink language that reimagines liu bai (留白) as the hanging scroll under tension. The ground is inverted to a deep warm wet-ink black on which luminous bone-white type and a single cinnabar seal bloom. Content registers down one plumb line, the seal descends the margin, and the void is full, not blank. ### Values - charged emptiness - vertical descent - cinnabar restraint - luminous ink on dark - sharp formal discipline - slow attentive reading ### Anti-Values - centred floating columns - warm-paper minimalism - chromatic hierarchy - decorative seal wallpaper - bouncy motion - boxed-in chrome ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#16130f` | | surface | `#1f1b16` | | surface_alt | `#262019` | | inset | `#262019` | | text | `#f2ede3` | | muted | `#9b9286` | | faint | `#6f675c` | | border | `rgba(242,237,227,0.10)` | | rail | `rgba(242,237,227,0.16)` | | accent | `#d4452f` | | accent_light | `rgba(212,69,47,0.14)` | | on_accent | `#16130f` | | success | `#7d9168` | | warning | `#c98a3a` | | error | `#d4452f` | | info | `#6f8aa6` | ### Typography - **Base Size**: 18px - **Body Font**: IBM Plex Sans, system-ui, sans-serif - **Heading Font**: Spectral, Georgia, 'Times New Roman', serif - **Mono Font**: IBM Plex Mono, ui-monospace, monospace - **Heading Weight**: 300 - **Heading Transform**: none - **Letter Spacing**: -0.025em headings, -0.01em body - **Scale Ratio**: 1.414 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,300;0,400;0,500;0,600;1,400&family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&display=swap ### Radii - **None**: 0px - **Sm**: 0px - **Md**: 0px - **Lg**: 0px - **Pill**: 9999px (control affordances only) ### Shadows - **None**: none - **Subtle**: 0 1px 2px rgba(0,0,0,0.30) - **Default**: 0 1px 2px rgba(0,0,0,0.30) ### Spacing - **Base**: 8px - **Scale**: ["8px","16px","24px","40px","64px","104px","160px"] ### Surfaces - **Ground**: #16130f deep warm wet-ink — the inverted void, the primary surface - **Card**: #1f1b16 panel with one hairline rule and 0px radius; no accent edge, never nested - **Inset**: #262019 for control tracks and recessed wells - **Void**: the dark ground left untouched; never filled to balance a grid ### Borders - **Color**: rgba(242,237,227,0.10) - **Width**: 1px - **Style**: solid - **Radius**: 0px ### Motion - **Duration Default**: 700ms - **Easing**: cubic-bezier(.2,0,.1,1) - **Type**: vertical reveal + opacity; the plumb line draws down on load; no scale, bounce, or parallax ## Rules ### Composition Every screen registers against one vertical plumb line at the left margin (64px rail). Content hangs off it; nothing floats centred. Weight loads toward the lower third, the way a hanging scroll loads its base. The dark wet-ink ground dominates; luminous marks are placed one at a time. ### Hierarchy Typography alone establishes hierarchy: a Spectral display cascade in a 1.414 ratio plus weight variation. Colour is NOT used for rank — bone-white and stone-grey only. The single cinnabar marks importance through rarity. Semantic hues appear only as a documented state heat-scale. ### Density Airy. Generous 40–160px spacing; cards separated by the ground and hairlines, never crowded. Lists paginate before they fill. Empty is the natural condition, not an error. ### Signature The Plumb Line (one vertical hairline rail every screen); The Registration Tick (a cinnabar bar+square hanging eyebrows off the rail); The Descending Seal (a column of impressed chops down the margin, three weights = three states); The Unrolling (downward vertical reveal, plumb line draws on load); Absence as state (a single mark on the dark field). ## Layout ### Grid single vertical axis; content registered to a left 64px plumb-line rail, max-width ~1180px (1320px ultra-wide) ### Whitespace the dark wet-ink void is the primary compositional material; generous 40–160px section rhythm ### Density airy ### Responsive single column on mobile; the rail collapses but the descent remains; only the full-bleed hero spans 100vw; content caps and centres on ultra-wide ### Breakpoints - **Mobile**: ≤680px - **Tablet**: 681–980px - **Desktop**: 981–1699px - **Ultrawide**: ≥1700px ## Guidance ### Do - Register everything to one vertical plumb line; load weight toward the base - Keep the cinnabar a seal — a mark of rarity, descending the margin, never an edge - Let the dark wet-ink void dominate; place luminous marks one at a time - Carry hierarchy with the Spectral size cascade and the measure rail - Use the semantic hues only as a documented state heat-scale (verified / in review / disputed) - Ship the settled finished state visible with no JavaScript; layer vertical motion on top - Keep sharp 0px corners and hairline luminous rules ### Don't - Don't centre content in a floating column — the axis is left-anchored and asymmetric - Don't use colour for hierarchy or let semantic hues become primary surface - Don't put an accent edge on a card, nest cards, or box the nav into a pill - Don't round corners or add shadow beyond a faint ink lift - Don't let the seal repeat decoratively until it is wallpaper - Don't revert to warm paper or a white ground — the void here is ink ### Accessibility Bone-white (#f2ede3) on wet-ink (#16130f) clears WCAG AAA for body text. Controls are explicitly styled with a visible cinnabar focus border. Body 17–18px, mono labels 12px+. Motion respects prefers-reduced-motion and is never required to read the page. ## Imagery Direction ### Pairs With cinnabar-seal ### Summary Traditional Chinese shuimo (water-and-ink) brushwork — luminous ink blooming into a wet dark ground — finished with impressed vermilion seal stamps. Composed on a vertical hanging-scroll axis: misted forms dissolving into dark void with a descending column of cinnabar chops. ### Subjects - hanging-scroll landscapes - misted ridges dissolving into void - ink dispersing in dark water - impressed seal columns - single luminous brush strokes on dark ### Usage One full-bleed hero per landing, composed vertically with content pinned lower-left and the seal-column descending the right edge. Never used for the thumbnail (the embodiment is the thumbnail source).
---
version: "alpha"
name: "Zhóu"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#16130f"
surface: "#1f1b16"
surface_alt: "#262019"
inset: "#262019"
text: "#f2ede3"
muted: "#9b9286"
faint: "#6f675c"
accent: "#d4452f"
on_accent: "#16130f"
success: "#7d9168"
warning: "#c98a3a"
error: "#d4452f"
info: "#6f8aa6"
typography:
headline-lg:
fontFamily: "Spectral, Georgia, 'Times New Roman', serif"
fontSize: "3.181rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Spectral, Georgia, 'Times New Roman', serif"
fontSize: "2.249rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "IBM Plex Sans, system-ui, sans-serif"
fontSize: "18px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.02em"
label-md:
fontFamily: "IBM Plex Mono, ui-monospace, monospace"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
sm: "0px"
md: "0px"
lg: "0px"
pill: "0px"
spacing:
base: "8px"
xs: "8px"
sm: "16px"
md: "24px"
lg: "40px"
xl: "64px"
2xl: "104px"
3xl: "160px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_alt:
backgroundColor: "{colors.surface_alt}"
color-reference-inset:
backgroundColor: "{colors.inset}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-faint:
backgroundColor: "{colors.faint}"
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"
---
# Zhóu
## Overview
A vertical-axis ink language that reimagines liu bai (留白) as the hanging scroll under tension. The ground is inverted to a deep warm wet-ink black on which luminous bone-white type and a single cinnabar seal bloom. Content registers down one plumb line, the seal descends the margin, and the void is full, not blank.
### Values
- charged emptiness
- vertical descent
- cinnabar restraint
- luminous ink on dark
- sharp formal discipline
- slow attentive reading
### Anti-Values
- centred floating columns
- warm-paper minimalism
- chromatic hierarchy
- decorative seal wallpaper
- bouncy motion
- boxed-in chrome
## 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 | `#16130f` |
| surface | `#1f1b16` |
| surface_alt | `#262019` |
| inset | `#262019` |
| text | `#f2ede3` |
| muted | `#9b9286` |
| faint | `#6f675c` |
| accent | `#d4452f` |
| on_accent | `#16130f` |
| success | `#7d9168` |
| warning | `#c98a3a` |
| error | `#d4452f` |
| info | `#6f8aa6` |
## Typography
- **Headline-Lg**: Spectral, Georgia, 'Times New Roman', serif, 3.181rem, weight 700, line-height 1.1.
- **Headline-Md**: Spectral, Georgia, 'Times New Roman', serif, 2.249rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Sans, system-ui, sans-serif, 18px, weight 400, line-height 1.5.
- **Label-Md**: IBM Plex Mono, ui-monospace, monospace, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `8px`
- **Sm**: `16px`
- **Md**: `24px`
- **Lg**: `40px`
- **Xl**: `64px`
- **2xl**: `104px`
- **3xl**: `160px`
### Grid
single vertical axis; content registered to a left 64px plumb-line rail, max-width ~1180px (1320px ultra-wide)
### Whitespace
the dark wet-ink void is the primary compositional material; generous 40–160px section rhythm
### Density
airy
### Responsive
single column on mobile; the rail collapses but the descent remains; only the full-bleed hero spans 100vw; content caps and centres on ultra-wide
### Breakpoints
- **Mobile**: ≤680px
- **Tablet**: 681–980px
- **Desktop**: 981–1699px
- **Ultrawide**: ≥1700px
## Elevation & Depth
### Shadows
- **None**: none
- **Subtle**: 0 1px 2px rgba(0,0,0,0.30)
- **Default**: 0 1px 2px rgba(0,0,0,0.30)
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `0px`
- **Md**: `0px`
- **Lg**: `0px`
- **Pill**: `0px`
### Surfaces
- **Ground**: #16130f deep warm wet-ink — the inverted void, the primary surface
- **Card**: #1f1b16 panel with one hairline rule and 0px radius; no accent edge, never nested
- **Inset**: #262019 for control tracks and recessed wells
- **Void**: the dark ground left untouched; never filled to balance a grid
### Borders
- **Color**: rgba(242,237,227,0.10)
- **Width**: 1px
- **Style**: solid
- **Radius**: 0px
## Components
### Composition
Every screen registers against one vertical plumb line at the left margin (64px rail). Content hangs off it; nothing floats centred. Weight loads toward the lower third, the way a hanging scroll loads its base. The dark wet-ink ground dominates; luminous marks are placed one at a time.
### Hierarchy
Typography alone establishes hierarchy: a Spectral display cascade in a 1.414 ratio plus weight variation. Colour is NOT used for rank — bone-white and stone-grey only. The single cinnabar marks importance through rarity. Semantic hues appear only as a documented state heat-scale.
### Density
Airy. Generous 40–160px spacing; cards separated by the ground and hairlines, never crowded. Lists paginate before they fill. Empty is the natural condition, not an error.
### Signature
The Plumb Line (one vertical hairline rail every screen); The Registration Tick (a cinnabar bar+square hanging eyebrows off the rail); The Descending Seal (a column of impressed chops down the margin, three weights = three states); The Unrolling (downward vertical reveal, plumb line draws on load); Absence as state (a single mark on the dark field).
## 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-019ef924-5221-7500-a3ef-eadac1278ed7/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 Register everything to one vertical plumb line; load weight toward the base
- Do Keep the cinnabar a seal — a mark of rarity, descending the margin, never an edge
- Do Let the dark wet-ink void dominate; place luminous marks one at a time
- Do Carry hierarchy with the Spectral size cascade and the measure rail
- Do Use the semantic hues only as a documented state heat-scale (verified / in review / disputed)
- Do Ship the settled finished state visible with no JavaScript; layer vertical motion on top
- Do Keep sharp 0px corners and hairline luminous rules
- Don't Don't centre content in a floating column — the axis is left-anchored and asymmetric
- Don't Don't use colour for hierarchy or let semantic hues become primary surface
- Don't Don't put an accent edge on a card, nest cards, or box the nav into a pill
- Don't Don't round corners or add shadow beyond a faint ink lift
- Don't Don't let the seal repeat decoratively until it is wallpaper
- Don't Don't revert to warm paper or a white ground — the void here is ink
### Accessibility
Bone-white (#f2ede3) on wet-ink (#16130f) clears WCAG AAA for body text. Controls are explicitly styled with a visible cinnabar focus border. Body 17–18px, mono labels 12px+. Motion respects prefers-reduced-motion and is never required to read the page.
## Imagery Direction
### Pairs With
cinnabar-seal
### Summary
Traditional Chinese shuimo (water-and-ink) brushwork — luminous ink blooming into a wet dark ground — finished with impressed vermilion seal stamps. Composed on a vertical hanging-scroll axis: misted forms dissolving into dark void with a descending column of cinnabar chops.
### Subjects
- hanging-scroll landscapes
- misted ridges dissolving into void
- ink dispersing in dark water
- impressed seal columns
- single luminous brush strokes on dark
### Usage
One full-bleed hero per landing, composed vertically with content pinned lower-left and the seal-column descending the right edge. Never used for the thumbnail (the embodiment is the thumbnail source).
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "zhou-vertical-axis-ink",
"type": "registry:theme",
"title": "Zhóu shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#16130f",
"foreground": "#f2ede3",
"card": "#1f1b16",
"card-foreground": "#f2ede3",
"popover": "#1f1b16",
"popover-foreground": "#f2ede3",
"primary": "#f2ede3",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#9b9286",
"muted-foreground": "#f2ede3",
"accent": "#d4452f",
"accent-foreground": "#ffffff",
"destructive": "#d4452f",
"border": "rgba(242,237,227,0.10)",
"input": "rgba(242,237,227,0.10)",
"ring": "#d4452f",
"chart-1": "#f2ede3",
"chart-2": "#f4f4f5",
"chart-3": "#d4452f",
"chart-4": "#7d9168",
"chart-5": "#c98a3a",
"sidebar": "#1f1b16",
"sidebar-foreground": "#f2ede3",
"sidebar-primary": "#f2ede3",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#6f8aa6",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "rgba(242,237,227,0.10)",
"sidebar-ring": "#d4452f",
"radius": "0px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#f2ede3",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#d4452f",
"accent-foreground": "#ffffff",
"destructive": "#d4452f",
"border": "#303642",
"input": "#303642",
"ring": "#d4452f",
"chart-1": "#f2ede3",
"chart-2": "#f4f4f5",
"chart-3": "#d4452f",
"chart-4": "#7d9168",
"chart-5": "#c98a3a",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#f2ede3",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#d4452f",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#d4452f",
"radius": "0px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ef924-5221-7500-a3ef-eadac1278ed7",
"slug": "zhou-vertical-axis-ink",
"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_light",
"bg",
"border",
"error",
"faint",
"info",
"inset",
"muted",
"on_accent",
"rail",
"success",
"surface",
"surface_alt",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"mono_font",
"scale_ratio"
],
"radii": [
"lg",
"md",
"none",
"pill",
"sm"
],
"shadows": [
"default",
"none",
"subtle"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"card",
"ground",
"inset",
"void"
],
"borders": [
"color",
"radius",
"style",
"width"
],
"motion": [
"duration_default",
"easing",
"type"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
Keep Zhóuand 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: #16130f;
--foreground: #f2ede3;
--card: #1f1b16;
--card-foreground: #f2ede3;
--popover: #1f1b16;
--popover-foreground: #f2ede3;
--primary: #f2ede3;
--primary-foreground: #111111;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #9b9286;
--muted-foreground: #f2ede3;
--accent: #d4452f;
--accent-foreground: #ffffff;
--destructive: #d4452f;
--border: rgba(242,237,227,0.10);
--input: rgba(242,237,227,0.10);
--ring: #d4452f;
--chart-1: #f2ede3;
--chart-2: #f4f4f5;
--chart-3: #d4452f;
--chart-4: #7d9168;
--chart-5: #c98a3a;
--sidebar: #1f1b16;
--sidebar-foreground: #f2ede3;
--sidebar-primary: #f2ede3;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #6f8aa6;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: rgba(242,237,227,0.10);
--sidebar-ring: #d4452f;
--radius: 0px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #f2ede3;
--primary-foreground: #111111;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #d4452f;
--accent-foreground: #ffffff;
--destructive: #d4452f;
--border: #303642;
--input: #303642;
--ring: #d4452f;
--chart-1: #f2ede3;
--chart-2: #f4f4f5;
--chart-3: #d4452f;
--chart-4: #7d9168;
--chart-5: #c98a3a;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #f2ede3;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #d4452f;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #d4452f;
--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 ZhUShadcnKit() {
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">Zhóu</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": "zhou-vertical-axis-ink",
"type": "registry:theme",
"title": "Zhóu",
"description": "Vertical-axis ink language. A connoisseurship interface for hanging-scroll painting: deep warm wet-ink ground, luminous bone-white type, one cinnabar seal as the only accent. Spectral display over IBM Plex; sharp 0px corners; hairline luminous rules; no accent edges, no nested cards — hierarchy from the plumb-line measure rail and the Spectral size cascade. Semantic hues appear only as a documented state heat-scale.",
"cssVars": {
"theme": {
"font-sans": "IBM Plex Sans, system-ui, sans-serif",
"font-mono": "IBM Plex Mono, ui-monospace, monospace",
"font-serif": "Spectral, Georgia, 'Times New Roman', serif",
"font-display": "Spectral, Georgia, 'Times New Roman', serif",
"font-heading": "Spectral, Georgia, 'Times New Roman', serif",
"radius": "0px"
},
"dark": {
"background": "#16130f",
"foreground": "#f2ede3",
"card": "#1f1b16",
"card-foreground": "#f2ede3",
"popover": "#1f1b16",
"popover-foreground": "#f2ede3",
"primary": "#d4452f",
"primary-foreground": "#16130f",
"secondary": "#262019",
"secondary-foreground": "#f2ede3",
"accent": "#262019",
"accent-foreground": "#f2ede3",
"muted": "#262019",
"muted-foreground": "#9b9286",
"destructive": "#d4452f",
"destructive-foreground": "#16130f",
"success": "#7d9168",
"warning": "#c98a3a",
"info": "#6f8aa6",
"border": "rgba(242,237,227,0.10)",
"input": "#1f1b16",
"ring": "#d4452f",
"radius": "0px"
},
"light": {
"background": "#16130f",
"foreground": "#f2ede3",
"card": "#1f1b16",
"card-foreground": "#f2ede3",
"popover": "#1f1b16",
"popover-foreground": "#f2ede3",
"primary": "#d4452f",
"primary-foreground": "#16130f",
"secondary": "#262019",
"secondary-foreground": "#f2ede3",
"accent": "#262019",
"accent-foreground": "#f2ede3",
"muted": "#262019",
"muted-foreground": "#9b9286",
"destructive": "#d4452f",
"destructive-foreground": "#16130f",
"success": "#7d9168",
"warning": "#c98a3a",
"info": "#6f8aa6",
"border": "rgba(242,237,227,0.10)",
"input": "#1f1b16",
"ring": "#d4452f",
"radius": "0px"
}
}
}
# Zhóu shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019ef924-5221-7500-a3ef-eadac1278ed7`
Slug: `zhou-vertical-axis-ink`
## Intent
A vertical-axis ink language that reimagines liu bai (留白) as the hanging scroll under tension. The ground is inverted to a deep warm wet-ink black on which luminous bone-white type and a single cinnabar seal bloom. Content registers down one plumb line, the seal descends the margin, and the void is full, not blank.
## 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": "#16130f",
"surface": "#1f1b16",
"surface_alt": "#262019",
"inset": "#262019",
"text": "#f2ede3",
"muted": "#9b9286",
"faint": "#6f675c",
"border": "rgba(242,237,227,0.10)",
"rail": "rgba(242,237,227,0.16)",
"accent": "#d4452f",
"accent_light": "rgba(212,69,47,0.14)",
"on_accent": "#16130f",
"success": "#7d9168",
"warning": "#c98a3a",
"error": "#d4452f",
"info": "#6f8aa6"
}
Typography:
{
"base_size": "18px",
"body_font": "IBM Plex Sans, system-ui, sans-serif",
"heading_font": "Spectral, Georgia, 'Times New Roman', serif",
"mono_font": "IBM Plex Mono, ui-monospace, monospace",
"heading_weight": "300",
"heading_transform": "none",
"letter_spacing": "-0.025em headings, -0.01em body",
"scale_ratio": 1.414,
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,300;0,400;0,500;0,600;1,400&family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&display=swap"
}
## Visual character to preserve
- Make the source language's structural identity visible in every component state.
## ShadSync visual profile
{
"family": "system",
"material": "flat",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": false,
"stickerBadges": false,
"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/zhou-vertical-axis-ink/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: Register everything to one vertical plumb line; load weight toward the base; Keep the cinnabar a seal — a mark of rarity, descending the margin, never an edge; Let the dark wet-ink void dominate; place luminous marks one at a time; Carry hierarchy with the Spectral size cascade and the measure rail; Use the semantic hues only as a documented state heat-scale (verified / in review / disputed); Ship the settled finished state visible with no JavaScript; layer vertical motion on top; Keep sharp 0px corners and hairline luminous rules
- Do not: Don't centre content in a floating column — the axis is left-anchored and asymmetric; Don't use colour for hierarchy or let semantic hues become primary surface; Don't put an accent edge on a card, nest cards, or box the nav into a pill; Don't round corners or add shadow beyond a faint ink lift; Don't let the seal repeat decoratively until it is wallpaper; Don't revert to warm paper or a white ground — the void here is ink
## 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 ZhUShadcnKit() {
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">Zhóu</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": "single vertical axis; content registered to a left 64px plumb-line rail, max-width ~1180px (1320px ultra-wide)",
"whitespace": "the dark wet-ink void is the primary compositional material; generous 40–160px section rhythm",
"density": "airy",
"responsive": "single column on mobile; the rail collapses but the descent remains; only the full-bleed hero spans 100vw; content caps and centres on ultra-wide",
"breakpoints": {
"mobile": "≤680px",
"tablet": "681–980px",
"desktop": "981–1699px",
"ultrawide": "≥1700px"
}
}
{
"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-019ef924-5221-7500-a3ef-eadac1278ed7",
"name": "Zhóu",
"slug": "zhou-vertical-axis-ink"
},
"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": "Zhóu 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": [
"Register everything to one vertical plumb line; load weight toward the base",
"Keep the cinnabar a seal — a mark of rarity, descending the margin, never an edge",
"Let the dark wet-ink void dominate; place luminous marks one at a time",
"Carry hierarchy with the Spectral size cascade and the measure rail",
"Use the semantic hues only as a documented state heat-scale (verified / in review / disputed)",
"Ship the settled finished state visible with no JavaScript; layer vertical motion on top",
"Keep sharp 0px corners and hairline luminous rules"
],
"dont": [
"Don't centre content in a floating column — the axis is left-anchored and asymmetric",
"Don't use colour for hierarchy or let semantic hues become primary surface",
"Don't put an accent edge on a card, nest cards, or box the nav into a pill",
"Don't round corners or add shadow beyond a faint ink lift",
"Don't let the seal repeat decoratively until it is wallpaper",
"Don't revert to warm paper or a white ground — the void here is ink"
]
}
}