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.
Balanced: one dense cluster per viewport answered by generous reserved intervals (64-128px).
one dense control cluster per viewport balanced by broad reserved intervals
xieyi
Expressive Chinese literati ink-wash with flying-white dry-brush and reserved silk. Misty mountains, pine and pavilion, waterfalls whose water is unpainted silk, a lone boat, and one cinnabar sun.
monochrome sumi with wet-to-dry ink-load gradient, flying-white streaks, soft wet blooms, generous reserved space, one restrained cinnabar note
# Feibai
## Philosophy
A contemplative interface language built on the flying-white mark: sumi ink on misty silk, one cinnabar note, reserved space as structure, and controls drawn as strokes rather than boxed.
### Values
- flying-white as the signature mark
- reserved (liubai) space as structure
- sumi on misty silk
- one rationed cinnabar note
- slow self-drawing motion
- depth from ink shadow, not borders
### Anti-Values
- synthetic SaaS chrome
- cold grey borders
- rainbow accents
- fast abrupt motion
- pillowy oversized controls
- busy filled frames
### Visual Character
- Every stroke carries a wet-to-dry ink-load gradient; the dry tail breaks into flying-white.
- Warm sumi text on a cool misty silk ground; neutrals tuned warm, never cold grey.
- Cinnabar is a single rationed voice — primary action, active state, the climax note — never a broad fill.
- Depth from a warm ink shadow and diluted wash; no borders, no card edge-accents.
- Reserved liubai space is composition, balanced against denser control clusters.
## Tokens
### Colors
| Name | Value |
|------|-------|
| bg | `#EDEBE3` |
| surface | `#F7F5EE` |
| surface_solid | `#F7F5EE` |
| text | `#16130F` |
| muted | `#6B6459` |
| border | `rgba(22,19,15,0.11)` |
| accent | `#B4372A` |
| accent_2 | `#3C6152` |
| accent_soft | `rgba(180,55,42,0.13)` |
| on_accent | `#F7F5EE` |
| success | `#3C6152` |
| warning | `#9A6A2E` |
| error | `#9E2B1E` |
| info | `#3A5566` |
### Typography
- **Base Size**: 18px
- **Body Font**: Newsreader
- **Heading Font**: Cormorant Garamond
- **Mono Font**: IBM Plex Mono
- **Heading Weight**: 600
- **Heading Transform**: none
- **Letter Spacing**: -0.02em
- **Line Height**: 1.62
- **Scale Ratio**: 1.28
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,500;0,600;0,700;1,500;1,600&family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,400&family=IBM+Plex+Mono:wght@400;500&display=swap
### Radii
- **None**: 0px
- **Md**: 16px
- **Lg**: 24px
- **Full**: 9999px
### Shadows
- **Sm**: 0 1px 2px rgba(22,19,15,0.06)
- **Md**: 0 12px 34px rgba(58,48,38,0.11)
- **Lg**: 0 26px 64px rgba(58,48,38,0.15)
### Spacing
- **Base**: 8px
- **Scale**: ["4px","8px","16px","24px","32px","48px","64px","96px","128px"]
### Surfaces
- **Treatment**: silk paper ground with faint fibre grain and generous reserved (liubai) space; depth from ink shadow and wash, never boxes
- **Card Style**: reserved-edge paper panel: soft warm ink shadow, no border, one dry-brush hairline cap as ornament
- **Bg Pattern**: layered mist gradient bands plus low-opacity fibre noise; a self-drawing brush motif replaces the old diffusion blobs
### Borders
- **Default Width**: 0
- **Accent Width**: 0
- **Style**: dry-brush hairline used as ornament, never a container border
- **Character**: ink brush edge
### Motion
- **Duration**: 820ms
- **Easing**: cubic-bezier(0.22,1,0.36,1)
- **Philosophy**: elements arrive as a self-drawing flying-white brushstroke — wet at the pull-down, dry at the tail; slow, deliberate, meditative; honours prefers-reduced-motion
## Rules
### Composition
- Pair one dominant canvas with a denser control cluster
- Let reserved (liubai) silk carry as much weight as the mark
- Keep scroll vertical, like unrolling a hanging scroll
- Break the grid with one oversized plate or ledger
- Never trap navigation in a floating pill bar
### Density
Balanced: one dense cluster per viewport answered by generous reserved intervals (64-128px).
### Hierarchy
- Display in Cormorant Garamond at -0.02em to -0.045em
- Body in Newsreader at 18px, line-height 1.62
- Mono IBM Plex Mono for timecodes, provenance and figures
- Cinnabar marks only primary action, active state, or the climax note
### Signature Patterns
- {"name":"Flying-white stroke","description":"Every stroke carries a wet-to-dry ink-load gradient and breaks into dry-brush flying-white at speed; buttons, rules, tabs and meters are all one stroke.","css_concept":"repeating-linear-gradient with irregular alpha stops used as a mask over solid ink; SVG stroke with a feTurbulence displacement filter for the pulled primary."}
- {"name":"Self-drawing mark","description":"Strokes that reveal content draw themselves as they arrive.","css_concept":"SVG path stroke-dasharray/stroke-dashoffset animated from full length to 0 on reveal."}
- {"name":"Cinnabar note","description":"A single rationed vermillion voice: primary, active, and the climax detonation — never a broad fill.","css_concept":".seal / active states use var(--accent); the landing detonates cinnabar once at the climax scene."}
- {"name":"Reserved paper panel","description":"Cards lift on a warm ink shadow with a dry-brush cap and reserved interior space; no borders, no edge-accents.","css_concept":".panel{background:var(--surface);border-radius:24px;box-shadow:var(--sh-md)} .panel .cap uses the flying-white mask; no border."}
## Layout
### Grid
- **Type**: asymmetric 12-column
- **Columns Desktop**: 12
- **Columns Tablet**: 8
- **Columns Mobile**: 4
- **Gutter**: 24px
- **Max Width**: 1180px
### Density
one dense control cluster per viewport balanced by broad reserved intervals
### Whitespace
- **Tight**: 4-8px metadata
- **Normal**: 24px panel internals
- **Wide**: 64px between zones
- **Breath**: 96-128px reserved voids
### Responsive
- **Wide**: cap and centre content; only the full-bleed hero spans 100vw
- **Desktop**: 12-column asymmetric canvas and controls
- **Tablet**: its own 8-column layout, never the mobile column stretched
- **Mobile**: single column, nav collapses to brand plus CTA, no horizontal overflow
## Guidance
### Do
- Keep cinnabar rationed to a single voice
- Let reserved space carry weight
- Render depth with ink shadow and wash
- Draw controls as strokes with flying-white texture
- Style every form control
- Cap cards and mark active tabs with the dry-brush texture
### Don't
- Use pure white or cold grey
- Add a card edge-accent or container border
- Box navigation in a floating pill bar
- Exceed cinnabar plus one supporting note in a viewport
- Ship pillowy oversized controls or inflated mid-scale text
- Mix arbitrary radii
### Usage Context
Film restoration tools, meditative media archives, nature-documentary libraries, art-gallery interpretation, storytelling products, and wellness applications.
### Accessibility
- **Contrast**: #16130F on #EDEBE3 exceeds WCAG AA; #6B6459 for larger or secondary copy only
- **Focus**: 3px cinnabar ring with offset on all controls
- **Motion**: prefers-reduced-motion disables the film's pins and the ink veil; the settled document stays fully readable
## Imagery Direction
### Pairs With
xieyi
### Description
Expressive Chinese literati ink-wash with flying-white dry-brush and reserved silk. Misty mountains, pine and pavilion, waterfalls whose water is unpainted silk, a lone boat, and one cinnabar sun.
### Subjects
- misty mountain ranges
- pine and pavilion on a cliff
- waterfall with reserved-white water
- lake, reeds and a lone boat
- a single cinnabar sun
### Treatment
monochrome sumi with wet-to-dry ink-load gradient, flying-white streaks, soft wet blooms, generous reserved space, one restrained cinnabar note
### Do
- Keep copy in reserved space, never on busy brushwork
- Let mist be soft value
- Reserve the paper as structure
### Dont
- Stretch or distort plates
- Add a second bright hue
- Bury information under artwork
---
version: "alpha"
name: "Feibai"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#EDEBE3"
surface: "#F7F5EE"
surface_solid: "#F7F5EE"
text: "#16130F"
muted: "#6B6459"
accent: "#B4372A"
accent_2: "#3C6152"
on_accent: "#F7F5EE"
success: "#3C6152"
warning: "#9A6A2E"
error: "#9E2B1E"
info: "#3A5566"
typography:
headline-lg:
fontFamily: "Cormorant Garamond"
fontSize: "2.197rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Cormorant Garamond"
fontSize: "1.758rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "Newsreader"
fontSize: "18px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.02em"
label-md:
fontFamily: "IBM Plex Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
md: "16px"
lg: "24px"
full: "9999px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "16px"
lg: "24px"
xl: "32px"
2xl: "48px"
3xl: "64px"
4xl: "96px"
step-8: "128px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_solid:
backgroundColor: "{colors.surface_solid}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-accent_2:
backgroundColor: "{colors.accent_2}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "#ffffff"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Feibai
## Overview
A contemplative interface language built on the flying-white mark: sumi ink on misty silk, one cinnabar note, reserved space as structure, and controls drawn as strokes rather than boxed.
### Values
- flying-white as the signature mark
- reserved (liubai) space as structure
- sumi on misty silk
- one rationed cinnabar note
- slow self-drawing motion
- depth from ink shadow, not borders
### Anti-Values
- synthetic SaaS chrome
- cold grey borders
- rainbow accents
- fast abrupt motion
- pillowy oversized controls
- busy filled frames
### Visual Character
- Every stroke carries a wet-to-dry ink-load gradient; the dry tail breaks into flying-white.
- Warm sumi text on a cool misty silk ground; neutrals tuned warm, never cold grey.
- Cinnabar is a single rationed voice — primary action, active state, the climax note — never a broad fill.
- Depth from a warm ink shadow and diluted wash; no borders, no card edge-accents.
- Reserved liubai space is composition, balanced against denser control clusters.
## 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 | `#EDEBE3` |
| surface | `#F7F5EE` |
| surface_solid | `#F7F5EE` |
| text | `#16130F` |
| muted | `#6B6459` |
| accent | `#B4372A` |
| accent_2 | `#3C6152` |
| on_accent | `#F7F5EE` |
| success | `#3C6152` |
| warning | `#9A6A2E` |
| error | `#9E2B1E` |
| info | `#3A5566` |
## Typography
- **Headline-Lg**: Cormorant Garamond, 2.197rem, weight 700, line-height 1.1.
- **Headline-Md**: Cormorant Garamond, 1.758rem, weight 600, line-height 1.15.
- **Body-Md**: Newsreader, 18px, weight 400, line-height 1.5.
- **Label-Md**: IBM Plex Mono, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `16px`
- **Lg**: `24px`
- **Xl**: `32px`
- **2xl**: `48px`
- **3xl**: `64px`
- **4xl**: `96px`
- **Step-8**: `128px`
### Grid
- **Type**: asymmetric 12-column
- **Columns Desktop**: 12
- **Columns Tablet**: 8
- **Columns Mobile**: 4
- **Gutter**: 24px
- **Max Width**: 1180px
### Density
one dense control cluster per viewport balanced by broad reserved intervals
### Whitespace
- **Tight**: 4-8px metadata
- **Normal**: 24px panel internals
- **Wide**: 64px between zones
- **Breath**: 96-128px reserved voids
### Responsive
- **Wide**: cap and centre content; only the full-bleed hero spans 100vw
- **Desktop**: 12-column asymmetric canvas and controls
- **Tablet**: its own 8-column layout, never the mobile column stretched
- **Mobile**: single column, nav collapses to brand plus CTA, no horizontal overflow
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 2px rgba(22,19,15,0.06)
- **Md**: 0 12px 34px rgba(58,48,38,0.11)
- **Lg**: 0 26px 64px rgba(58,48,38,0.15)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: silk paper ground with faint fibre grain and generous reserved (liubai) space; depth from ink shadow and wash, never boxes
- **Card Style**: reserved-edge paper panel: soft warm ink shadow, no border, one dry-brush hairline cap as ornament
- **Bg Pattern**: layered mist gradient bands plus low-opacity fibre noise; a self-drawing brush motif replaces the old diffusion blobs
### Borders
- **Default Width**: 0
- **Accent Width**: 0
- **Style**: dry-brush hairline used as ornament, never a container border
- **Character**: ink brush edge
## Components
### Composition
- Pair one dominant canvas with a denser control cluster
- Let reserved (liubai) silk carry as much weight as the mark
- Keep scroll vertical, like unrolling a hanging scroll
- Break the grid with one oversized plate or ledger
- Never trap navigation in a floating pill bar
### Density
Balanced: one dense cluster per viewport answered by generous reserved intervals (64-128px).
### Hierarchy
- Display in Cormorant Garamond at -0.02em to -0.045em
- Body in Newsreader at 18px, line-height 1.62
- Mono IBM Plex Mono for timecodes, provenance and figures
- Cinnabar marks only primary action, active state, or the climax note
### Signature Patterns
- {"name":"Flying-white stroke","description":"Every stroke carries a wet-to-dry ink-load gradient and breaks into dry-brush flying-white at speed; buttons, rules, tabs and meters are all one stroke.","css_concept":"repeating-linear-gradient with irregular alpha stops used as a mask over solid ink; SVG stroke with a feTurbulence displacement filter for the pulled primary."}
- {"name":"Self-drawing mark","description":"Strokes that reveal content draw themselves as they arrive.","css_concept":"SVG path stroke-dasharray/stroke-dashoffset animated from full length to 0 on reveal."}
- {"name":"Cinnabar note","description":"A single rationed vermillion voice: primary, active, and the climax detonation — never a broad fill.","css_concept":".seal / active states use var(--accent); the landing detonates cinnabar once at the climax scene."}
- {"name":"Reserved paper panel","description":"Cards lift on a warm ink shadow with a dry-brush cap and reserved interior space; no borders, no edge-accents.","css_concept":".panel{background:var(--surface);border-radius:24px;box-shadow:var(--sh-md)} .panel .cap uses the flying-white mask; no border."}
## 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-019f8afe-446d-7e93-8071-b7d811181137/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 cinnabar rationed to a single voice
- Do Let reserved space carry weight
- Do Render depth with ink shadow and wash
- Do Draw controls as strokes with flying-white texture
- Do Style every form control
- Do Cap cards and mark active tabs with the dry-brush texture
- Don't Use pure white or cold grey
- Don't Add a card edge-accent or container border
- Don't Box navigation in a floating pill bar
- Don't Exceed cinnabar plus one supporting note in a viewport
- Don't Ship pillowy oversized controls or inflated mid-scale text
- Don't Mix arbitrary radii
### Usage Context
Film restoration tools, meditative media archives, nature-documentary libraries, art-gallery interpretation, storytelling products, and wellness applications.
### Accessibility
- **Contrast**: #16130F on #EDEBE3 exceeds WCAG AA; #6B6459 for larger or secondary copy only
- **Focus**: 3px cinnabar ring with offset on all controls
- **Motion**: prefers-reduced-motion disables the film's pins and the ink veil; the settled document stays fully readable
## Imagery Direction
### Pairs With
xieyi
### Description
Expressive Chinese literati ink-wash with flying-white dry-brush and reserved silk. Misty mountains, pine and pavilion, waterfalls whose water is unpainted silk, a lone boat, and one cinnabar sun.
### Subjects
- misty mountain ranges
- pine and pavilion on a cliff
- waterfall with reserved-white water
- lake, reeds and a lone boat
- a single cinnabar sun
### Treatment
monochrome sumi with wet-to-dry ink-load gradient, flying-white streaks, soft wet blooms, generous reserved space, one restrained cinnabar note
### Do
- Keep copy in reserved space, never on busy brushwork
- Let mist be soft value
- Reserve the paper as structure
### Dont
- Stretch or distort plates
- Add a second bright hue
- Bury information under artwork
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "feibai",
"type": "registry:theme",
"title": "Feibai shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#EDEBE3",
"foreground": "#16130F",
"card": "#F7F5EE",
"card-foreground": "#16130F",
"popover": "#F7F5EE",
"popover-foreground": "#16130F",
"primary": "#16130F",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#6B6459",
"muted-foreground": "#16130F",
"accent": "#B4372A",
"accent-foreground": "#ffffff",
"destructive": "#9E2B1E",
"border": "rgba(22,19,15,0.11)",
"input": "rgba(22,19,15,0.11)",
"ring": "#B4372A",
"chart-1": "#16130F",
"chart-2": "#f4f4f5",
"chart-3": "#B4372A",
"chart-4": "#3C6152",
"chart-5": "#9A6A2E",
"sidebar": "#F7F5EE",
"sidebar-foreground": "#16130F",
"sidebar-primary": "#16130F",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#3A5566",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "rgba(22,19,15,0.11)",
"sidebar-ring": "#B4372A",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#16130F",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#B4372A",
"accent-foreground": "#ffffff",
"destructive": "#9E2B1E",
"border": "#303642",
"input": "#303642",
"ring": "#B4372A",
"chart-1": "#16130F",
"chart-2": "#f4f4f5",
"chart-3": "#B4372A",
"chart-4": "#3C6152",
"chart-5": "#9A6A2E",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#16130F",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#B4372A",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#B4372A",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019f8afe-446d-7e93-8071-b7d811181137",
"slug": "feibai",
"componentManifest": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
"nativeTokenNames": {
"colors": [
"accent",
"accent_2",
"accent_soft",
"bg",
"border",
"error",
"info",
"muted",
"on_accent",
"success",
"surface",
"surface_solid",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
],
"radii": [
"full",
"lg",
"md",
"none"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"motion": [
"duration",
"easing",
"philosophy"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
Keep Feibaiand 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: #EDEBE3;
--foreground: #16130F;
--card: #F7F5EE;
--card-foreground: #16130F;
--popover: #F7F5EE;
--popover-foreground: #16130F;
--primary: #16130F;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #6B6459;
--muted-foreground: #16130F;
--accent: #B4372A;
--accent-foreground: #ffffff;
--destructive: #9E2B1E;
--border: rgba(22,19,15,0.11);
--input: rgba(22,19,15,0.11);
--ring: #B4372A;
--chart-1: #16130F;
--chart-2: #f4f4f5;
--chart-3: #B4372A;
--chart-4: #3C6152;
--chart-5: #9A6A2E;
--sidebar: #F7F5EE;
--sidebar-foreground: #16130F;
--sidebar-primary: #16130F;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #3A5566;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: rgba(22,19,15,0.11);
--sidebar-ring: #B4372A;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #16130F;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #B4372A;
--accent-foreground: #ffffff;
--destructive: #9E2B1E;
--border: #303642;
--input: #303642;
--ring: #B4372A;
--chart-1: #16130F;
--chart-2: #f4f4f5;
--chart-3: #B4372A;
--chart-4: #3C6152;
--chart-5: #9A6A2E;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #16130F;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #B4372A;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #B4372A;
--radius: 16px;
}
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
export function FeibaiShadcnKit() {
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">Feibai</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": "feibai",
"type": "registry:theme",
"author": "katagami-agent",
"title": "Feibai — flying-white ink",
"description": "A contemplative ink-wash theme: sumi ink on misty silk, one rationed cinnabar note, dry-brush flying-white ornament, and reserved space as structure. Depth from ink shadow, never borders.",
"cssVars": {
"theme": {
"font-sans": "Newsreader, Georgia, serif",
"font-serif": "Cormorant Garamond, Georgia, serif",
"font-mono": "IBM Plex Mono, ui-monospace, monospace",
"radius": "1.5rem"
},
"light": {
"background": "#EDEBE3",
"foreground": "#16130F",
"card": "#F7F5EE",
"card-foreground": "#16130F",
"popover": "#F7F5EE",
"popover-foreground": "#16130F",
"primary": "#B4372A",
"primary-foreground": "#F7F5EE",
"secondary": "#3C6152",
"secondary-foreground": "#F7F5EE",
"muted": "#E4E1D7",
"muted-foreground": "#6B6459",
"accent": "#E6E2D8",
"accent-foreground": "#16130F",
"destructive": "#9E2B1E",
"destructive-foreground": "#F7F5EE",
"border": "rgba(22,19,15,0.11)",
"input": "rgba(22,19,15,0.11)",
"ring": "#B4372A",
"chart-1": "#B4372A",
"chart-2": "#3C6152",
"chart-3": "#6B6459",
"chart-4": "#9A6A2E",
"chart-5": "#3A5566",
"radius": "1.5rem"
},
"dark": {
"background": "#16130F",
"foreground": "#EDEBE3",
"card": "#201B16",
"card-foreground": "#EDEBE3",
"popover": "#201B16",
"popover-foreground": "#EDEBE3",
"primary": "#C0452F",
"primary-foreground": "#16130F",
"secondary": "#4E7A67",
"secondary-foreground": "#16130F",
"muted": "#2A241E",
"muted-foreground": "#A79E92",
"accent": "#2A241E",
"accent-foreground": "#EDEBE3",
"destructive": "#B23A2E",
"destructive-foreground": "#16130F",
"border": "rgba(237,235,227,0.14)",
"input": "rgba(237,235,227,0.14)",
"ring": "#C0452F"
}
},
"visualProfile": {
"family": "editorial ink",
"material": "sumi ink on misty silk",
"contour": "soft 24px",
"border": "none",
"underlay": true,
"grain": true,
"stickerBadges": false,
"motion": "slow self-drawing brushstroke",
"density": "balanced, reserved space is structure",
"accents": ["#B4372A", "#3C6152"]
},
"notes": "Light mode is default. Depth comes from a warm ink shadow (0 12px 34px rgba(58,48,38,.11)) and a faint radial ink wash, never a grey border — override any generated 1px borders to transparent and lean on shadow + reserved space. Cinnabar (#B4372A) is the single accent: use it for primary, ring, active, and destructive-adjacent emphasis only, never as a broad fill. The dry-brush flying-white texture (a repeating irregular-alpha gradient) caps cards and underlines the active tab. Radii come only from {0, 16, 24, 9999}."
}
# Feibai — shadcn/ui Components
Author: `katagami-agent`
Feibai dresses shadcn/ui primitives as brush marks on misty silk. The whole kit follows one rule: a control is a **stroke**, not a box. Depth comes from a warm ink shadow and reserved space; the single cinnabar note is rationed to primary, ring, active, and emphasis. The dry-brush **flying-white** texture is the recurring ornament — it caps cards and underlines the active tab.
## ShadSync visual profile
- **Family** — editorial ink (Cormorant Garamond display, Newsreader body, IBM Plex Mono labels).
- **Material** — sumi ink on cool misty silk (`--background #EDEBE3`, `--card #F7F5EE`).
- **Contour** — soft; radius from {0, 16, 24, 9999} only. Cards/panels 24px, inputs 16px, seal chips 0px, pills/toggles 9999px.
- **Border** — none. Replace any generated `1px solid` border with `transparent`; lean on shadow + wash. The only line allowed is a dry-brush hairline used as ornament, never as a container edge.
- **Underlay** — a faint radial ink wash on panels (low opacity), plus a subtle fiber grain.
- **Sticker badges** — off. Badges are quiet mono chips; the cinnabar seal chip marks provenance/active.
- **Motion** — slow, self-drawing brushstroke; `cubic-bezier(0.22,1,0.36,1)`, ~820ms; honours `prefers-reduced-motion`.
- **Density** — balanced; reserved (liubai) space is structure. Never crowd a cluster against a starved void.
- **Accents** — cinnabar `#B4372A`, pine `#3C6152` (≤2 in a viewport; ink is the neutral).
## Signature component recipes
- **Button (primary)** — cinnabar fill, paper text, pill (9999px); on hover the flying-white texture surfaces and the ink shadow deepens. Label centred, never wraps.
- **Button (ghost)** — transparent with a dry-brush underline that fills on hover; no border box.
- **Card** — `--card` silk, 24px radius, ink shadow, a dry-brush cap along the top; reserved space inside is composition. No edge-accent.
- **Tabs** — the active trigger carries a dry-brush flying-white underline in cinnabar.
- **Input / Select / Textarea** — silk fill, inset ink baseline shadow, no border; focus turns the baseline cinnabar with a soft cinnabar ring.
- **Checkbox** — a self-drawing brushed check on a cinnabar fill when checked.
- **Switch** — pine track when on; paper knob with a soft shadow.
- **Slider** — the ink-load meter: cinnabar fill to the thumb, ink wash after.
- **Badge** — quiet mono chip; `seal` variant is a 0px cinnabar chip for provenance.
- **Table** — the provenance ledger: mono numerics, zebra by faint wash (no rules), current row on a cinnabar wash with a cinnabar note dot.
- **Alert** — a note with one stroke-mark in the semantic colour; never a boxed banner.
## Preview shots
Three renderable scenes ship in `preview-shots.json` (`renderable-v1`): a **restoration console** (table + meters + seal chips), a **provenance form** (inputs, select, checkbox, switch, slider), and a **reel card grid** (cards, badges, buttons, tabs). Each names the primitives it must show and what to avoid (grey borders, boxed nav, pillowy oversized controls).
## Copy-paste component example
```tsx
import { Button } from "@/components/ui/button"
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"
import { Badge } from "@/components/ui/badge"
export function ReelCard() {
return (
<Card className="rounded-3xl border-0 shadow-[0_12px_34px_rgba(58,48,38,0.11)]">
<CardHeader>
<span className="font-mono text-[11px] tracking-[0.16em] uppercase text-muted-foreground">
Reel · 0428
</span>
<CardTitle className="font-serif text-2xl">Herdboy at dusk</CardTitle>
</CardHeader>
<CardContent className="flex items-center gap-3">
<Button className="rounded-full bg-primary text-primary-foreground">
Restore frame
</Button>
<Badge className="rounded-none bg-primary text-primary-foreground">sealed</Badge>
</CardContent>
</Card>
)
}
```
Every import resolves under `@/components/ui/` after `npx shadcn@latest add`. Keep borders off (`border-0`) and let the ink shadow carry depth.
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"author": "katagami-agent",
"requiresVisualProfile": true,
"language": { "id": "feibai", "name": "Feibai", "slug": "feibai" },
"installCommand": "npx shadcn@latest add https://katagami.ai/r/feibai.json",
"primitives": ["button","card","input","textarea","select","dialog","sheet","tabs","badge","separator","checkbox","switch","slider","tooltip","dropdown-menu","table"],
"identityNotes": [
"A control is a stroke, not a box — no borders anywhere; depth is a warm ink shadow plus reserved space.",
"Cinnabar #B4372A is the single accent: primary, ring, active, emphasis only — never a broad fill.",
"The dry-brush flying-white texture caps cards and underlines the active tab; it is the recurring ornament.",
"Radii from {0,16,24,9999} only. Seal chips are 0px; panels 24px; pills 9999px.",
"Display Cormorant Garamond, body Newsreader 18px, mono IBM Plex Mono for labels and figures."
],
"visualProfile": {
"family": "editorial ink",
"material": "sumi ink on misty silk",
"contour": "soft 24px",
"border": "none",
"underlay": true,
"grain": true,
"stickerBadges": false,
"motion": "slow self-drawing brushstroke",
"density": "balanced, reserved space is structure",
"accents": ["#B4372A", "#3C6152"]
},
"tokens": {
"background": "#EDEBE3",
"surface": "#F7F5EE",
"foreground": "#16130F",
"muted": "#6B6459",
"primary": "#B4372A",
"primary-foreground": "#F7F5EE",
"secondary": "#3C6152",
"destructive": "#9E2B1E",
"ring": "#B4372A",
"border": "transparent",
"radius": "24px",
"font-serif": "Cormorant Garamond",
"font-sans": "Newsreader",
"font-mono": "IBM Plex Mono",
"shadow": "0 12px 34px rgba(58,48,38,0.11)"
},
"shots": [
{
"id": "restoration-console",
"title": "Restoration console",
"viewport": "desktop",
"primitives": ["table","badge","slider","button","separator","tabs"],
"composition": "One dominant ink plate beside a control cluster; a provenance ledger below with mono numerics and a cinnabar current-row note. Pass meters draw wet-to-cinnabar.",
"mustShow": ["cinnabar seal chip on the active row","ink-load slider","dry-brush card cap","zebra rows by wash, no rules"],
"avoid": ["grey borders","boxed banner alerts","pillowy oversized buttons"],
"scene": {
"headline": "Restoration console",
"description": "Shanghai reels · session 0428 · four sources verified.",
"rows": [
{ "reel": "0428", "title": "Herdboy at dusk", "frames": "312", "load": "62%", "state": "in pass" },
{ "reel": "0429", "title": "Crane over reeds", "frames": "204", "load": "100%", "state": "sealed" },
{ "reel": "0430", "title": "Waterfall, three rocks", "frames": "488", "load": "88%", "state": "draft" },
{ "reel": "0431", "title": "Boatman, far shore", "frames": "156", "load": "12%", "state": "review" }
]
}
},
{
"id": "provenance-form",
"title": "Provenance intake",
"viewport": "desktop",
"primitives": ["input","select","textarea","checkbox","switch","slider","button","tooltip"],
"composition": "A single silk panel of painted controls; inset ink baselines that turn cinnabar on focus; a self-drawing brushed check; an ink-load slider.",
"mustShow": ["focus ring in cinnabar","self-drawing checkbox tick","pine switch when on","no browser-default controls"],
"avoid": ["visible browser defaults","grey borders","more than two accents"],
"scene": {
"headline": "Seal a restored frame",
"description": "Every field is painted; nothing shows a browser default.",
"fields": [
{ "label": "Archive title", "value": "Herdboy and the Buffalo" },
{ "label": "Source collection", "value": "Shanghai reels" },
{ "label": "Year", "value": "1963" },
{ "label": "Keep flying-white", "value": "on" }
]
}
},
{
"id": "reel-card-grid",
"title": "Reel library",
"viewport": "desktop",
"primitives": ["card","badge","button","tabs","separator"],
"composition": "A grid of paper cards, each with a dry-brush cap, a mono reel label, a Cormorant title, and a quiet action; tabs above carry the flying-white active underline.",
"mustShow": ["dry-brush card cap","seal chip badge","ghost button with brushed underline","reserved space inside cards"],
"avoid": ["card edge-accent","three equal catalog cards reading as generic","emoji on buttons"],
"scene": {
"headline": "Reel library",
"description": "Restored, sealed, and drafted reels from the archive.",
"stats": [
{ "label": "Frames restored", "value": "1,284" },
{ "label": "Brush load", "value": "62%" },
{ "label": "Reserved area", "value": "38%" }
]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Primary is a pulled cinnabar stroke; flying-white surfaces on hover; label centred, never wraps." },
{ "primitive": "card", "intent": "Silk panel, 24px, ink shadow, dry-brush cap; reserved interior space; no edge-accent." },
{ "primitive": "input", "intent": "Silk fill, inset ink baseline, no border; baseline turns cinnabar on focus." },
{ "primitive": "textarea", "intent": "As input, vertical resize only; ink baseline; generous line-height for notes." },
{ "primitive": "select", "intent": "Painted trigger with a cinnabar chevron; no native chrome." },
{ "primitive": "dialog", "intent": "Silk sheet on a soft ink scrim; 24px radius; ink shadow, no border." },
{ "primitive": "sheet", "intent": "Slides on paper; dry-brush cap along the leading edge; ink shadow." },
{ "primitive": "tabs", "intent": "Active trigger carries a dry-brush flying-white underline in cinnabar." },
{ "primitive": "badge", "intent": "Quiet mono chip; seal variant is a 0px cinnabar chip for provenance/active." },
{ "primitive": "separator", "intent": "A dry-brush hairline used as ornament, never as a container edge." },
{ "primitive": "checkbox", "intent": "Self-drawing brushed check on a cinnabar fill when checked." },
{ "primitive": "switch", "intent": "Pine track when on; paper knob with a soft shadow; ink wash when off." },
{ "primitive": "slider", "intent": "The ink-load meter: cinnabar fill to the thumb, ink wash after." },
{ "primitive": "tooltip", "intent": "Small ink chip on paper with a soft shadow; mono label." },
{ "primitive": "dropdown-menu", "intent": "Paper surface, ink shadow, active item on a cinnabar wash; no borders." },
{ "primitive": "table", "intent": "Provenance ledger: mono numerics, zebra by wash, current row on cinnabar wash with a note dot." }
],
"qualityRules": {
"do": [
"Let the warm ink shadow and reserved space carry depth.",
"Ration cinnabar to primary, ring, active, and emphasis.",
"Cap cards and underline active tabs with the dry-brush flying-white texture.",
"Keep radii to {0,16,24,9999} and body text 18px.",
"Style every control — no browser defaults."
],
"dont": [
"Add any grey 1px border or card edge-accent.",
"Box the navigation in a floating pill bar.",
"Use more than cinnabar plus one supporting note in a viewport.",
"Ship pillowy oversized buttons or inflated mid-scale text.",
"Put emoji or symbol glyphs on buttons."
]
}
}