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.
Asymmetric, off-centre-left, flowing rather than rigidly gridded; layouts follow cursive reading energy top-right to bottom-left. Oversized brush-stroke SVG anchors bleed behind content. Negative space is deliberate, like the breathing room in a scroll.
Dramatic size contrast. The wild-cursive display hand (Ma Shan Zheng) dominates headings, big numerals, and a table's leading cell like a bold first stroke; Noto Sans SC carries all reading. Vermillion marks the one primary action and active states; gold leaf marks secondary emphasis like a seal stamp.
Medium-high with generous vertical rhythm. Focal surfaces carry an organic dry-paper clip edge and a slight tilt (-0.6deg..0.6deg) for the handwritten feel. Spacing follows brush rhythm — tight within groups, generous between.
1) Flying-white surfaces: organic clip-path edge + slight tilt on focal cards. 2) The seal, placed: a single inset 4px vermillion bar asymmetrically on active surfaces. 3) Gesture-flow anchors: oversized brush-stroke SVGs behind content. 4) Ink-splatter texture in large dark areas. 5) Dry-brush dividers — alternating-opacity bands, never flat rules.
asymmetric-fluid, off-centre-left, minmax(0,1fr) columns with min-width:0 children, max 1280px contained
generous; section gap ~96px, component gap ~32px; always pad above titles
medium-high
single column on mobile; non-essential nav links and table columns hidden; only the full-bleed hero spans 100vw; contained content capped and centred on ultra-wide
feibai-brushwork
All imagery uses the Feibai Brushwork art style: forms built from a few sweeping single-gesture ink brushstrokes on dark handmade paper, dry-brush flying-white striations, a small vermillion seal-mark and flecks of gold leaf, asymmetric top-right to bottom-left energy.
Landing hero is a full-bleed feibai gesture with breathing negative space in the lower-left for the headline overlay; feature images reuse the hero stroke. Never illustrate the thumbnail — the thumbnail is an embodiment screenshot.
# Feihong ## Philosophy Wild-cursive (kuangcao) calligraphy given to product surfaces. The page carries the gesture of brush meeting paper at speed — a single confident stroke that cannot be revised mid-flight. Ink-dark handmade-paper ground, cream ink that glows under lamplight, the vermillion seal pressed only where it counts. Calligraphy as performance, not careful penmanship. ### Values - The single confident stroke over mechanical precision - Deliberate asymmetry as compositional strength - Ink-dark foundations that let cream content glow - Dry-brush texture and organic imperfection as authenticity - Speed and confidence in every interaction - Compositional flow following cursive reading order (top-right to bottom-left) - The vermillion seal reserved for moments that matter ### Anti-Values - Sterile symmetry and rigid grid alignment - Light or pastel grounds that lack gravitas - Rounded friendly rectangles that soften the gesture - Slow cautious motion that kills momentum - Borders and accent edges used as chrome ### Visual Character - background:#0F0E0C; color:#ECE6DA; font-family:'Ma Shan Zheng',serif - clip-path:polygon(0 2%,99% 0,100% 98%,1% 100%); transform:rotate(-0.6deg) - box-shadow:0 14px 40px rgba(0,0,0,.55), inset 0 0 60px rgba(0,0,0,.5) - primary action carries box-shadow:5px 5px 0 rgba(216,57,43,.30) - background-image:radial-gradient(circle at 18% 24%, rgba(156,144,129,.10) 1px, transparent 1.4px) ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#0F0E0C` | | surface | `#1B1916` | | surface_2 | `#23201C` | | text | `#ECE6DA` | | muted | `#9C9081` | | border | `#36312B` | | accent | `#D8392B` | | on_accent | `#FBF6EC` | | gold | `#C8A85E` | | ink_1 | `#161410` | | ink_3 | `#332E27` | | ink_4 | `#4A4339` | | success | `#6FA06A` | | warning | `#C8A85E` | | error | `#D8392B` | | info | `#7C97A8` | ### Typography - **Base Size**: 17px - **Body Font**: Noto Sans SC - **Heading Font**: Ma Shan Zheng - **Mono Font**: Source Code Pro - **Heading Weight**: 400 - **Heading Transform**: none - **Letter Spacing**: -0.01em - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Ma+Shan+Zheng&family=Noto+Sans+SC:wght@400;500;700&family=Source+Code+Pro:wght@400;500&display=swap ### Radii - **None**: 0 - **Soft**: 16px - **Pill**: 9999px - **Organic Clip**: polygon(0 2%, 99% 0, 100% 98%, 1% 100%) ### Shadows - **Sm**: 0 2px 10px rgba(0,0,0,.35) - **Md**: 0 14px 40px rgba(0,0,0,.55) - **Lg**: 0 28px 70px rgba(0,0,0,.66) - **Seal**: 5px 5px 0 rgba(216,57,43,.30) - **Inset Vignette**: inset 0 0 60px rgba(0,0,0,.5) ### Spacing - **Base**: 8px - **Scale**: ["4px","8px","12px","16px","24px","32px","48px","64px","96px"] ### Surfaces - **Paper**: #0F0E0C - **Panel**: #1B1916 - **Ink Splatter**: radial-gradient(circle at 18% 24%, rgba(156,144,129,.10) 1px, transparent 1.4px) ### Borders - **Policy**: none-as-chrome - **Focus Ring**: inset 0 0 0 2px #D8392B - **Seal Bar**: inset 4px 0 0 #D8392B ### Motion - **Fast**: 150ms cubic-bezier(0.2,0,0,1) - **Flick**: 180ms cubic-bezier(0.2,0,0,1) - **Spread**: 300ms cubic-bezier(0.4,0,0.2,1) - **Reduced Motion**: respected ## Rules ### Composition Asymmetric, off-centre-left, flowing rather than rigidly gridded; layouts follow cursive reading energy top-right to bottom-left. Oversized brush-stroke SVG anchors bleed behind content. Negative space is deliberate, like the breathing room in a scroll. ### Hierarchy Dramatic size contrast. The wild-cursive display hand (Ma Shan Zheng) dominates headings, big numerals, and a table's leading cell like a bold first stroke; Noto Sans SC carries all reading. Vermillion marks the one primary action and active states; gold leaf marks secondary emphasis like a seal stamp. ### Density Medium-high with generous vertical rhythm. Focal surfaces carry an organic dry-paper clip edge and a slight tilt (-0.6deg..0.6deg) for the handwritten feel. Spacing follows brush rhythm — tight within groups, generous between. ### Signature 1) Flying-white surfaces: organic clip-path edge + slight tilt on focal cards. 2) The seal, placed: a single inset 4px vermillion bar asymmetrically on active surfaces. 3) Gesture-flow anchors: oversized brush-stroke SVGs behind content. 4) Ink-splatter texture in large dark areas. 5) Dry-brush dividers — alternating-opacity bands, never flat rules. ## Layout ### Grid asymmetric-fluid, off-centre-left, minmax(0,1fr) columns with min-width:0 children, max 1280px contained ### Whitespace generous; section gap ~96px, component gap ~32px; always pad above titles ### Density medium-high ### Responsive single column on mobile; non-essential nav links and table columns hidden; only the full-bleed hero spans 100vw; contained content capped and centred on ultra-wide ### Breakpoints - **Mobile**: 390px - **Tablet**: 768px - **Desktop**: 1200px - **Ultrawide**: 2560px ## Guidance ### Do - Keep the ground ink-dark (#0F0E0C) with a faint ink-splatter texture - Use the organic clip-path edge and a slight tilt on focal surfaces - Place the vermillion seal rarely and asymmetrically (left edge or bottom) - Let oversized brush-stroke anchors bleed behind content, top-right to bottom-left - Use Ma Shan Zheng at large scale for headings, numerals, and the table's leading cell - Keep motion fast (150-200ms), gestural, ease-out; respect prefers-reduced-motion - Hold extreme cream-on-ink contrast (~13:1) ### Don't - Never centre layouts symmetrically - Never use border-radius on primary containers - Never use light or pastel grounds - Never use pure white (#FFF) — the lightest value is the cream ink - Never box the nav into a floating pill or trap chrome in a card - Never put more than three accents in one view - Never apply the calligraphic hand to body paragraphs - Never use flat horizontal rule-lines — use the dry-brush band ### Accessibility Cream #ECE6DA on #0F0E0C ground reaches ~13:1 (WCAG AAA). Body in Noto Sans SC at 17px for CJK and Latin readability. Interactive elements have a clear 2px vermillion focus ring. Motion respects prefers-reduced-motion; the fully-settled page renders with no JavaScript. Clip-path is decorative only — content stays in normal flow. ## Imagery Direction ### Pairs With feibai-brushwork ### Summary All imagery uses the Feibai Brushwork art style: forms built from a few sweeping single-gesture ink brushstrokes on dark handmade paper, dry-brush flying-white striations, a small vermillion seal-mark and flecks of gold leaf, asymmetric top-right to bottom-left energy. ### Subjects - wild-cursive calligraphic gesture - single explosive brush stroke - ink-on-dark-paper abstraction - feibai flying-white sweep ### Usage Landing hero is a full-bleed feibai gesture with breathing negative space in the lower-left for the headline overlay; feature images reuse the hero stroke. Never illustrate the thumbnail — the thumbnail is an embodiment screenshot.
---
version: "alpha"
name: "Feihong"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#0F0E0C"
surface: "#1B1916"
surface_2: "#23201C"
text: "#ECE6DA"
muted: "#9C9081"
border: "#36312B"
accent: "#D8392B"
on_accent: "#FBF6EC"
gold: "#C8A85E"
ink_1: "#161410"
ink_3: "#332E27"
ink_4: "#4A4339"
success: "#6FA06A"
warning: "#C8A85E"
error: "#D8392B"
info: "#7C97A8"
typography:
headline-lg:
fontFamily: "Ma Shan Zheng"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.01em"
headline-md:
fontFamily: "Ma Shan Zheng"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.01em"
body-md:
fontFamily: "Noto Sans SC"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.01em"
label-md:
fontFamily: "Source Code Pro"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
soft: "16px"
pill: "9999px"
organic_clip: "0px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
step-8: "96px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_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-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-gold:
backgroundColor: "{colors.gold}"
color-reference-ink_1:
backgroundColor: "{colors.ink_1}"
color-reference-ink_3:
backgroundColor: "{colors.ink_3}"
color-reference-ink_4:
backgroundColor: "{colors.ink_4}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "#ffffff"
typography: "{typography.label-md}"
rounded: "{rounded.none}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.none}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.none}"
height: "44px"
---
# Feihong
## Overview
Wild-cursive (kuangcao) calligraphy given to product surfaces. The page carries the gesture of brush meeting paper at speed — a single confident stroke that cannot be revised mid-flight. Ink-dark handmade-paper ground, cream ink that glows under lamplight, the vermillion seal pressed only where it counts. Calligraphy as performance, not careful penmanship.
### Values
- The single confident stroke over mechanical precision
- Deliberate asymmetry as compositional strength
- Ink-dark foundations that let cream content glow
- Dry-brush texture and organic imperfection as authenticity
- Speed and confidence in every interaction
- Compositional flow following cursive reading order (top-right to bottom-left)
- The vermillion seal reserved for moments that matter
### Anti-Values
- Sterile symmetry and rigid grid alignment
- Light or pastel grounds that lack gravitas
- Rounded friendly rectangles that soften the gesture
- Slow cautious motion that kills momentum
- Borders and accent edges used as chrome
### Visual Character
- background:#0F0E0C; color:#ECE6DA; font-family:'Ma Shan Zheng',serif
- clip-path:polygon(0 2%,99% 0,100% 98%,1% 100%); transform:rotate(-0.6deg)
- box-shadow:0 14px 40px rgba(0,0,0,.55), inset 0 0 60px rgba(0,0,0,.5)
- primary action carries box-shadow:5px 5px 0 rgba(216,57,43,.30)
- background-image:radial-gradient(circle at 18% 24%, rgba(156,144,129,.10) 1px, transparent 1.4px)
## 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 | `#0F0E0C` |
| surface | `#1B1916` |
| surface_2 | `#23201C` |
| text | `#ECE6DA` |
| muted | `#9C9081` |
| border | `#36312B` |
| accent | `#D8392B` |
| on_accent | `#FBF6EC` |
| gold | `#C8A85E` |
| ink_1 | `#161410` |
| ink_3 | `#332E27` |
| ink_4 | `#4A4339` |
| success | `#6FA06A` |
| warning | `#C8A85E` |
| error | `#D8392B` |
| info | `#7C97A8` |
## Typography
- **Headline-Lg**: Ma Shan Zheng, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Ma Shan Zheng, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Noto Sans SC, 17px, weight 400, line-height 1.5.
- **Label-Md**: Source Code Pro, 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`
### Grid
asymmetric-fluid, off-centre-left, minmax(0,1fr) columns with min-width:0 children, max 1280px contained
### Whitespace
generous; section gap ~96px, component gap ~32px; always pad above titles
### Density
medium-high
### Responsive
single column on mobile; non-essential nav links and table columns hidden; only the full-bleed hero spans 100vw; contained content capped and centred on ultra-wide
### Breakpoints
- **Mobile**: 390px
- **Tablet**: 768px
- **Desktop**: 1200px
- **Ultrawide**: 2560px
## Elevation & Depth
### Shadows
- **Sm**: 0 2px 10px rgba(0,0,0,.35)
- **Md**: 0 14px 40px rgba(0,0,0,.55)
- **Lg**: 0 28px 70px rgba(0,0,0,.66)
- **Seal**: 5px 5px 0 rgba(216,57,43,.30)
- **Inset Vignette**: inset 0 0 60px rgba(0,0,0,.5)
## Shapes
### Rounded
- **None**: `0px`
- **Soft**: `16px`
- **Pill**: `9999px`
- **Organic Clip**: `0px`
### Surfaces
- **Paper**: #0F0E0C
- **Panel**: #1B1916
- **Ink Splatter**: radial-gradient(circle at 18% 24%, rgba(156,144,129,.10) 1px, transparent 1.4px)
### Borders
- **Policy**: none-as-chrome
- **Focus Ring**: inset 0 0 0 2px #D8392B
- **Seal Bar**: inset 4px 0 0 #D8392B
## Components
### Composition
Asymmetric, off-centre-left, flowing rather than rigidly gridded; layouts follow cursive reading energy top-right to bottom-left. Oversized brush-stroke SVG anchors bleed behind content. Negative space is deliberate, like the breathing room in a scroll.
### Hierarchy
Dramatic size contrast. The wild-cursive display hand (Ma Shan Zheng) dominates headings, big numerals, and a table's leading cell like a bold first stroke; Noto Sans SC carries all reading. Vermillion marks the one primary action and active states; gold leaf marks secondary emphasis like a seal stamp.
### Density
Medium-high with generous vertical rhythm. Focal surfaces carry an organic dry-paper clip edge and a slight tilt (-0.6deg..0.6deg) for the handwritten feel. Spacing follows brush rhythm — tight within groups, generous between.
### Signature
1) Flying-white surfaces: organic clip-path edge + slight tilt on focal cards. 2) The seal, placed: a single inset 4px vermillion bar asymmetrically on active surfaces. 3) Gesture-flow anchors: oversized brush-stroke SVGs behind content. 4) Ink-splatter texture in large dark areas. 5) Dry-brush dividers — alternating-opacity bands, never flat rules.
## 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-019ef9b1-f2a1-7a90-9849-75a24147e19a/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 Keep the ground ink-dark (#0F0E0C) with a faint ink-splatter texture
- Do Use the organic clip-path edge and a slight tilt on focal surfaces
- Do Place the vermillion seal rarely and asymmetrically (left edge or bottom)
- Do Let oversized brush-stroke anchors bleed behind content, top-right to bottom-left
- Do Use Ma Shan Zheng at large scale for headings, numerals, and the table's leading cell
- Do Keep motion fast (150-200ms), gestural, ease-out; respect prefers-reduced-motion
- Do Hold extreme cream-on-ink contrast (~13:1)
- Don't Never centre layouts symmetrically
- Don't Never use border-radius on primary containers
- Don't Never use light or pastel grounds
- Don't Never use pure white (#FFF) — the lightest value is the cream ink
- Don't Never box the nav into a floating pill or trap chrome in a card
- Don't Never put more than three accents in one view
- Don't Never apply the calligraphic hand to body paragraphs
- Don't Never use flat horizontal rule-lines — use the dry-brush band
### Accessibility
Cream #ECE6DA on #0F0E0C ground reaches ~13:1 (WCAG AAA). Body in Noto Sans SC at 17px for CJK and Latin readability. Interactive elements have a clear 2px vermillion focus ring. Motion respects prefers-reduced-motion; the fully-settled page renders with no JavaScript. Clip-path is decorative only — content stays in normal flow.
## Imagery Direction
### Pairs With
feibai-brushwork
### Summary
All imagery uses the Feibai Brushwork art style: forms built from a few sweeping single-gesture ink brushstrokes on dark handmade paper, dry-brush flying-white striations, a small vermillion seal-mark and flecks of gold leaf, asymmetric top-right to bottom-left energy.
### Subjects
- wild-cursive calligraphic gesture
- single explosive brush stroke
- ink-on-dark-paper abstraction
- feibai flying-white sweep
### Usage
Landing hero is a full-bleed feibai gesture with breathing negative space in the lower-left for the headline overlay; feature images reuse the hero stroke. Never illustrate the thumbnail — the thumbnail is an embodiment screenshot.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "feihong",
"type": "registry:theme",
"title": "Feihong shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#0F0E0C",
"foreground": "#ECE6DA",
"card": "#1B1916",
"card-foreground": "#ECE6DA",
"popover": "#1B1916",
"popover-foreground": "#ECE6DA",
"primary": "#ECE6DA",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#9C9081",
"muted-foreground": "#ECE6DA",
"accent": "#D8392B",
"accent-foreground": "#ffffff",
"destructive": "#D8392B",
"border": "#36312B",
"input": "#36312B",
"ring": "#D8392B",
"chart-1": "#ECE6DA",
"chart-2": "#f4f4f5",
"chart-3": "#D8392B",
"chart-4": "#6FA06A",
"chart-5": "#C8A85E",
"sidebar": "#1B1916",
"sidebar-foreground": "#ECE6DA",
"sidebar-primary": "#ECE6DA",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#7C97A8",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#36312B",
"sidebar-ring": "#D8392B",
"radius": "0.625rem"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#ECE6DA",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#D8392B",
"accent-foreground": "#ffffff",
"destructive": "#D8392B",
"border": "#303642",
"input": "#303642",
"ring": "#D8392B",
"chart-1": "#ECE6DA",
"chart-2": "#f4f4f5",
"chart-3": "#D8392B",
"chart-4": "#6FA06A",
"chart-5": "#C8A85E",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#ECE6DA",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#D8392B",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#D8392B",
"radius": "0.625rem"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ef9b1-f2a1-7a90-9849-75a24147e19a",
"slug": "feihong",
"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",
"bg",
"border",
"error",
"gold",
"info",
"ink_1",
"ink_3",
"ink_4",
"muted",
"on_accent",
"success",
"surface",
"surface_2",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"mono_font"
],
"radii": [
"none",
"organic_clip",
"pill",
"soft"
],
"shadows": [
"inset_vignette",
"lg",
"md",
"seal",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"ink_splatter",
"panel",
"paper"
],
"borders": [
"focus_ring",
"policy",
"seal_bar"
],
"motion": [
"fast",
"flick",
"reduced_motion",
"spread"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
Keep Feihongand 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: #0F0E0C;
--foreground: #ECE6DA;
--card: #1B1916;
--card-foreground: #ECE6DA;
--popover: #1B1916;
--popover-foreground: #ECE6DA;
--primary: #ECE6DA;
--primary-foreground: #111111;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #9C9081;
--muted-foreground: #ECE6DA;
--accent: #D8392B;
--accent-foreground: #ffffff;
--destructive: #D8392B;
--border: #36312B;
--input: #36312B;
--ring: #D8392B;
--chart-1: #ECE6DA;
--chart-2: #f4f4f5;
--chart-3: #D8392B;
--chart-4: #6FA06A;
--chart-5: #C8A85E;
--sidebar: #1B1916;
--sidebar-foreground: #ECE6DA;
--sidebar-primary: #ECE6DA;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #7C97A8;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #36312B;
--sidebar-ring: #D8392B;
--radius: 0.625rem;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #ECE6DA;
--primary-foreground: #111111;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #D8392B;
--accent-foreground: #ffffff;
--destructive: #D8392B;
--border: #303642;
--input: #303642;
--ring: #D8392B;
--chart-1: #ECE6DA;
--chart-2: #f4f4f5;
--chart-3: #D8392B;
--chart-4: #6FA06A;
--chart-5: #C8A85E;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #ECE6DA;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #D8392B;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #D8392B;
--radius: 0.625rem;
}
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 FeihongShadcnKit() {
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">Feihong</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": "feihong",
"type": "registry:theme",
"title": "Feihong",
"description": "Wild-cursive (kuangcao) calligraphy as interface. Ink-dark handmade-paper ground, cream ink, one vermillion seal action and a quieter gold-leaf emphasis. Display in Ma Shan Zheng, body in Noto Sans SC. Surfaces carry an organic dry-paper clip edge and a slight handwritten tilt — never rounded UI rectangles, never borders or accent edges as chrome; separate by deep lamplight shadow and surface. Dark mode is the point.",
"cssVars": {
"theme": {
"font-sans": "Noto Sans SC, Inter, system-ui, sans-serif",
"font-mono": "Source Code Pro, ui-monospace, monospace",
"font-display": "Ma Shan Zheng, Noto Serif SC, serif",
"font-heading": "Ma Shan Zheng, Noto Serif SC, serif",
"radius": "0px"
},
"dark": {
"background": "#0F0E0C",
"foreground": "#ECE6DA",
"card": "#1B1916",
"card-foreground": "#ECE6DA",
"popover": "#1B1916",
"popover-foreground": "#ECE6DA",
"primary": "#D8392B",
"primary-foreground": "#FBF6EC",
"secondary": "#C8A85E",
"secondary-foreground": "#1A150A",
"accent": "#C8A85E",
"accent-foreground": "#1A150A",
"muted": "#23201C",
"muted-foreground": "#9C9081",
"destructive": "#D8392B",
"destructive-foreground": "#FBF6EC",
"success": "#6FA06A",
"warning": "#C8A85E",
"info": "#7C97A8",
"border": "transparent",
"input": "#332E27",
"ring": "#D8392B",
"radius": "0px"
}
}
}
# Feihong shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019ef9b1-f2a1-7a90-9849-75a24147e19a`
Slug: `feihong`
## Intent
Wild-cursive (kuangcao) calligraphy given to product surfaces. The page carries the gesture of brush meeting paper at speed — a single confident stroke that cannot be revised mid-flight. Ink-dark handmade-paper ground, cream ink that glows under lamplight, the vermillion seal pressed only where it counts. Calligraphy as performance, not careful penmanship.
## 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": "#0F0E0C",
"surface": "#1B1916",
"surface_2": "#23201C",
"text": "#ECE6DA",
"muted": "#9C9081",
"border": "#36312B",
"accent": "#D8392B",
"on_accent": "#FBF6EC",
"gold": "#C8A85E",
"ink_1": "#161410",
"ink_3": "#332E27",
"ink_4": "#4A4339",
"success": "#6FA06A",
"warning": "#C8A85E",
"error": "#D8392B",
"info": "#7C97A8"
}
Typography:
{
"base_size": "17px",
"body_font": "Noto Sans SC",
"heading_font": "Ma Shan Zheng",
"mono_font": "Source Code Pro",
"heading_weight": "400",
"heading_transform": "none",
"letter_spacing": "-0.01em",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Ma+Shan+Zheng&family=Noto+Sans+SC:wght@400;500;700&family=Source+Code+Pro:wght@400;500&display=swap"
}
## Visual character to preserve
- background:#0F0E0C; color:#ECE6DA; font-family:'Ma Shan Zheng',serif
- clip-path:polygon(0 2%,99% 0,100% 98%,1% 100%); transform:rotate(-0.6deg)
- box-shadow:0 14px 40px rgba(0,0,0,.55), inset 0 0 60px rgba(0,0,0,.5)
- primary action carries box-shadow:5px 5px 0 rgba(216,57,43,.30)
- background-image:radial-gradient(circle at 18% 24%, rgba(156,144,129,.10) 1px, transparent 1.4px)
## ShadSync visual profile
{
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": true,
"stickerBadges": false,
"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/feihong/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: Keep the ground ink-dark (#0F0E0C) with a faint ink-splatter texture; Use the organic clip-path edge and a slight tilt on focal surfaces; Place the vermillion seal rarely and asymmetrically (left edge or bottom); Let oversized brush-stroke anchors bleed behind content, top-right to bottom-left; Use Ma Shan Zheng at large scale for headings, numerals, and the table's leading cell; Keep motion fast (150-200ms), gestural, ease-out; respect prefers-reduced-motion; Hold extreme cream-on-ink contrast (~13:1)
- Do not: Never centre layouts symmetrically; Never use border-radius on primary containers; Never use light or pastel grounds; Never use pure white (#FFF) — the lightest value is the cream ink; Never box the nav into a floating pill or trap chrome in a card; Never put more than three accents in one view; Never apply the calligraphic hand to body paragraphs; Never use flat horizontal rule-lines — use the dry-brush band
## 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 FeihongShadcnKit() {
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">Feihong</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": "asymmetric-fluid, off-centre-left, minmax(0,1fr) columns with min-width:0 children, max 1280px contained",
"whitespace": "generous; section gap ~96px, component gap ~32px; always pad above titles",
"density": "medium-high",
"responsive": "single column on mobile; non-essential nav links and table columns hidden; only the full-bleed hero spans 100vw; contained content capped and centred on ultra-wide",
"breakpoints": {
"mobile": "390px",
"tablet": "768px",
"desktop": "1200px",
"ultrawide": "2560px"
}
}
{
"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-019ef9b1-f2a1-7a90-9849-75a24147e19a",
"name": "Feihong",
"slug": "feihong"
},
"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": [
"background:#0F0E0C; color:#ECE6DA; font-family:'Ma Shan Zheng',serif",
"clip-path:polygon(0 2%,99% 0,100% 98%,1% 100%); transform:rotate(-0.6deg)",
"box-shadow:0 14px 40px rgba(0,0,0,.55), inset 0 0 60px rgba(0,0,0,.5)",
"primary action carries box-shadow:5px 5px 0 rgba(216,57,43,.30)",
"background-image:radial-gradient(circle at 18% 24%, rgba(156,144,129,.10) 1px, transparent 1.4px)"
],
"visualProfile": {
"family": "editorial",
"material": "flat",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": false,
"stickerBadges": false,
"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": "Feihong 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": [
"Keep the ground ink-dark (#0F0E0C) with a faint ink-splatter texture",
"Use the organic clip-path edge and a slight tilt on focal surfaces",
"Place the vermillion seal rarely and asymmetrically (left edge or bottom)",
"Let oversized brush-stroke anchors bleed behind content, top-right to bottom-left",
"Use Ma Shan Zheng at large scale for headings, numerals, and the table's leading cell",
"Keep motion fast (150-200ms), gestural, ease-out; respect prefers-reduced-motion",
"Hold extreme cream-on-ink contrast (~13:1)"
],
"dont": [
"Never centre layouts symmetrically",
"Never use border-radius on primary containers",
"Never use light or pastel grounds",
"Never use pure white (#FFF) — the lightest value is the cream ink",
"Never box the nav into a floating pill or trap chrome in a card",
"Never put more than three accents in one view",
"Never apply the calligraphic hand to body paragraphs",
"Never use flat horizontal rule-lines — use the dry-brush band"
]
}
}