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.
Compose as editorial planes floating on ma: a dominant content plane, supporting planes, and at least one large quiet zone per major viewport. Nothing is fenced in a box; order comes from the empty room left around each thing.
Mincho headlines each carry a fude ink stroke; gothic body carries operational text; mono uppercase carries labels and counts. Emphasis is position, space, one ink stroke, and one vermilion seal — never many weights or many colors.
Low-to-medium. Controls are compact but never cramped; planes breathe with oversized padding; every cluster is separated by space rather than dividers.
Desktop composes a dominant content plane beside supporting planes on a warm-paper ground; the dashboard side rail is space and type, not a boxed sidebar. Planes align to a calm editorial rhythm with at least one deliberate quiet zone.
1200px+ full editorial spread; 1024px compressed two-plane layout; tablet 768-1024 is designed as its own band (two-up planes, wrapped nav, centred hero art), never the mobile column stretched wide; 390px single column with clamped, wrapping display headlines, collapsed nav, and tables that scroll inside their plane.
Whitespace is structural: 40-96px outer margins on desktop, 24-40px on tablet, 16-24px on phone. Never fill every cell; preserve blank planes to set the rhythm.
kasumi
Sumi-e ink wash on warm washi in the Kasumi hand: any subject reduced to a few confident calligraphic strokes with graded bleed and dry-brush kasure, floated in vast negative space, sealed with one small vermilion hanko. Monochrome ink plus the single seal; copy never contests the busy part of the ink.
one subject entering from an edge, the rest of the frame left as warm-paper ma for text overlay
charcoal sumi ink on warm off-white washi, with a single vermilion seal
# Suzuri ## Philosophy Suzuri is the inkstone: a calm Japanese interface language that grinds structure from ma (intentional emptiness) instead of borders, anchored by a single hand-painted fude ink stroke and one vermilion hanko seal. A reimagining of Minimalist Japanese — its restraint and paper-and-ink soul kept, its expression renewed from framed panels to borderless planes floating on negative space. ### Values - intentional emptiness (ma) as structure - paper-and-ink tactility, near-monochrome - one deliberate mark over many - ritualized quiet hierarchy - calm operational clarity ### Anti-Values - borders and boxes as structure - status as bright pill wallpaper - ornamental clutter and loud gradients - glossy skeuomorphism - motion for spectacle ### Visual Character - borderless warm-washi planes separated by ma and a soft grounded shadow, never a bordered card - the fude ink stroke — a wet brushstroke that pools under the active nav item, focused control, or section heading, the only linework on the page - the hanko seal — a small vermilion square stamped at a 2-degree tilt for status, counts, and confirmations, with ghost and ink variants - a near-monochrome canvas where the single vermilion appears only as a stroke or a seal - Mincho display over gothic body over mono uppercase labels for clear role separation ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#F4EFE6` | | surface | `#FCFAF4` | | surface_solid | `#FCFAF4` | | text | `#1A1613` | | muted | `#877C70` | | border | `#E5DDCF` | | accent | `#C4392A` | | accent_2 | `#324C5C` | | accent_soft | `#EFD9D3` | | on_accent | `#FCFAF4` | | success | `#5A7150` | | warning | `#B07A1E` | | error | `#9E2A1F` | | info | `#3D5A6C` | ### Typography - **Base Size**: 17px - **Body Font**: "Zen Kaku Gothic New", sans-serif - **Heading Font**: "Zen Old Mincho", serif - **Mono Font**: "IBM Plex Mono", monospace - **Heading Weight**: 700 - **Heading Transform**: none - **Letter Spacing**: 0.01em - **Line Height**: 1.75 - **Scale Ratio**: 1.25 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Zen+Kaku+Gothic+New:wght@400;500;700&family=Zen+Old+Mincho:wght@400;500;700;900&display=swap ### Radii - **None**: 0px - **Md**: 16px - **Lg**: 24px - **Full**: 9999px ### Shadows - **Sm**: 0 1px 2px rgba(26,22,19,0.05) - **Md**: 0 10px 30px -12px rgba(26,22,19,0.14) - **Lg**: 0 26px 60px -20px rgba(26,22,19,0.18) ### Spacing - **Base**: 8px - **Scale**: 8px, 16px, 24px, 40px, 64px, 96px, 144px ### Surfaces - **Treatment**: warm washi paper with faint fiber grain; planes float on ma, never boxed by borders - **Card Style**: borderless paper planes separated by whitespace and a soft grounded shadow; a single fude ink-stroke underline anchors each heading - **Bg Pattern**: very faint horizontal paper-fiber grain, no visible lines ### Borders - **Default Width**: 0px - **Accent Width**: 0px - **Style**: none - **Character**: structure comes from ma and alignment, not lines; the only linework is the hand-painted fude ink stroke under active elements and headings ### Motion - **Duration**: 420ms - **Easing**: cubic-bezier(0.22, 1, 0.36, 1) - **Philosophy**: ink settling into paper — a slow, deliberate ink-bleed reveal; never bounce, spring, or overshoot ## Rules ### Composition Compose as editorial planes floating on ma: a dominant content plane, supporting planes, and at least one large quiet zone per major viewport. Nothing is fenced in a box; order comes from the empty room left around each thing. ### Hierarchy Mincho headlines each carry a fude ink stroke; gothic body carries operational text; mono uppercase carries labels and counts. Emphasis is position, space, one ink stroke, and one vermilion seal — never many weights or many colors. ### Density Low-to-medium. Controls are compact but never cramped; planes breathe with oversized padding; every cluster is separated by space rather than dividers. ### Signature Patterns - the fude ink stroke pools beneath the active/focused element and every section heading — the page's only linework - status, counts, and confirmations appear as a small vermilion hanko square rotated 2 degrees, with ghost and ink variants, never a bright pill - cards are borderless paper planes on a soft grounded shadow, separated by ma; navigation breathes as part of the page, never trapped in a pill or floating card - the canvas stays near-monochrome washi-and-ink; the single vermilion is reserved for one earned stroke or seal per view - imagery is sumi-e ink wash in the Kasumi hand — a subject in a few strokes floated in vast negative space, sealed with one hanko ## Layout ### Grid Desktop composes a dominant content plane beside supporting planes on a warm-paper ground; the dashboard side rail is space and type, not a boxed sidebar. Planes align to a calm editorial rhythm with at least one deliberate quiet zone. ### Breakpoints 1200px+ full editorial spread; 1024px compressed two-plane layout; tablet 768-1024 is designed as its own band (two-up planes, wrapped nav, centred hero art), never the mobile column stretched wide; 390px single column with clamped, wrapping display headlines, collapsed nav, and tables that scroll inside their plane. ### Whitespace Whitespace is structural: 40-96px outer margins on desktop, 24-40px on tablet, 16-24px on phone. Never fill every cell; preserve blank planes to set the rhythm. ## Guidance ### Do - let ma and alignment carry structure before any line or fill - reserve the vermilion for the one stroke or seal that earns a pause - pair Mincho display with gothic body and mono labels for clear role separation - keep planes borderless with a soft grounded shadow and generous padding - render imagery as sumi-e ink wash floated in negative space ### Don't - do not draw borders or boxes to group things - do not turn status into bright pills or stamp the seal until it is wallpaper - do not use glossy gradients, heavy shadows, or playful overshoot - do not trap navigation in a floating pill or nest cards - do not let copy sit on the busy part of the ink imagery ## Imagery Direction ### Pairs With kasumi ### Summary Sumi-e ink wash on warm washi in the Kasumi hand: any subject reduced to a few confident calligraphic strokes with graded bleed and dry-brush kasure, floated in vast negative space, sealed with one small vermilion hanko. Monochrome ink plus the single seal; copy never contests the busy part of the ink. ### Hero one subject entering from an edge, the rest of the frame left as warm-paper ma for text overlay ### Palette charcoal sumi ink on warm off-white washi, with a single vermilion seal
---
version: "alpha"
name: "Suzuri"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#F4EFE6"
surface: "#FCFAF4"
surface_solid: "#FCFAF4"
text: "#1A1613"
muted: "#877C70"
border: "#E5DDCF"
accent: "#C4392A"
accent_2: "#324C5C"
accent_soft: "#EFD9D3"
on_accent: "#FCFAF4"
success: "#5A7150"
warning: "#B07A1E"
error: "#9E2A1F"
info: "#3D5A6C"
typography:
headline-lg:
fontFamily: "\"Zen Old Mincho\", serif"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "0.01em"
headline-md:
fontFamily: "\"Zen Old Mincho\", serif"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "0.01em"
body-md:
fontFamily: "\"Zen Kaku Gothic New\", sans-serif"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "0.01em"
label-md:
fontFamily: "\"IBM Plex Mono\", monospace"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
md: "16px"
lg: "24px"
full: "9999px"
spacing:
base: "8px"
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-border:
backgroundColor: "{colors.border}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-accent_2:
backgroundColor: "{colors.accent_2}"
color-reference-accent_soft:
backgroundColor: "{colors.accent_soft}"
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.base}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.base}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Suzuri
## Overview
Suzuri is the inkstone: a calm Japanese interface language that grinds structure from ma (intentional emptiness) instead of borders, anchored by a single hand-painted fude ink stroke and one vermilion hanko seal. A reimagining of Minimalist Japanese — its restraint and paper-and-ink soul kept, its expression renewed from framed panels to borderless planes floating on negative space.
### Values
- intentional emptiness (ma) as structure
- paper-and-ink tactility, near-monochrome
- one deliberate mark over many
- ritualized quiet hierarchy
- calm operational clarity
### Anti-Values
- borders and boxes as structure
- status as bright pill wallpaper
- ornamental clutter and loud gradients
- glossy skeuomorphism
- motion for spectacle
### Visual Character
- borderless warm-washi planes separated by ma and a soft grounded shadow, never a bordered card
- the fude ink stroke — a wet brushstroke that pools under the active nav item, focused control, or section heading, the only linework on the page
- the hanko seal — a small vermilion square stamped at a 2-degree tilt for status, counts, and confirmations, with ghost and ink variants
- a near-monochrome canvas where the single vermilion appears only as a stroke or a seal
- Mincho display over gothic body over mono uppercase labels for clear role separation
## 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 | `#F4EFE6` |
| surface | `#FCFAF4` |
| surface_solid | `#FCFAF4` |
| text | `#1A1613` |
| muted | `#877C70` |
| border | `#E5DDCF` |
| accent | `#C4392A` |
| accent_2 | `#324C5C` |
| accent_soft | `#EFD9D3` |
| on_accent | `#FCFAF4` |
| success | `#5A7150` |
| warning | `#B07A1E` |
| error | `#9E2A1F` |
| info | `#3D5A6C` |
## Typography
- **Headline-Lg**: "Zen Old Mincho", serif, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: "Zen Old Mincho", serif, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: "Zen Kaku Gothic New", sans-serif, 17px, weight 400, line-height 1.5.
- **Label-Md**: "IBM Plex Mono", monospace, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
### Grid
Desktop composes a dominant content plane beside supporting planes on a warm-paper ground; the dashboard side rail is space and type, not a boxed sidebar. Planes align to a calm editorial rhythm with at least one deliberate quiet zone.
### Breakpoints
1200px+ full editorial spread; 1024px compressed two-plane layout; tablet 768-1024 is designed as its own band (two-up planes, wrapped nav, centred hero art), never the mobile column stretched wide; 390px single column with clamped, wrapping display headlines, collapsed nav, and tables that scroll inside their plane.
### Whitespace
Whitespace is structural: 40-96px outer margins on desktop, 24-40px on tablet, 16-24px on phone. Never fill every cell; preserve blank planes to set the rhythm.
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 2px rgba(26,22,19,0.05)
- **Md**: 0 10px 30px -12px rgba(26,22,19,0.14)
- **Lg**: 0 26px 60px -20px rgba(26,22,19,0.18)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: warm washi paper with faint fiber grain; planes float on ma, never boxed by borders
- **Card Style**: borderless paper planes separated by whitespace and a soft grounded shadow; a single fude ink-stroke underline anchors each heading
- **Bg Pattern**: very faint horizontal paper-fiber grain, no visible lines
### Borders
- **Default Width**: 0px
- **Accent Width**: 0px
- **Style**: none
- **Character**: structure comes from ma and alignment, not lines; the only linework is the hand-painted fude ink stroke under active elements and headings
## Components
### Composition
Compose as editorial planes floating on ma: a dominant content plane, supporting planes, and at least one large quiet zone per major viewport. Nothing is fenced in a box; order comes from the empty room left around each thing.
### Hierarchy
Mincho headlines each carry a fude ink stroke; gothic body carries operational text; mono uppercase carries labels and counts. Emphasis is position, space, one ink stroke, and one vermilion seal — never many weights or many colors.
### Density
Low-to-medium. Controls are compact but never cramped; planes breathe with oversized padding; every cluster is separated by space rather than dividers.
### Signature Patterns
- the fude ink stroke pools beneath the active/focused element and every section heading — the page's only linework
- status, counts, and confirmations appear as a small vermilion hanko square rotated 2 degrees, with ghost and ink variants, never a bright pill
- cards are borderless paper planes on a soft grounded shadow, separated by ma; navigation breathes as part of the page, never trapped in a pill or floating card
- the canvas stays near-monochrome washi-and-ink; the single vermilion is reserved for one earned stroke or seal per view
- imagery is sumi-e ink wash in the Kasumi hand — a subject in a few strokes floated in vast negative space, sealed with one hanko
## 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-019f7075-7fac-75a1-8a78-f2cb695c897e/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 let ma and alignment carry structure before any line or fill
- Do reserve the vermilion for the one stroke or seal that earns a pause
- Do pair Mincho display with gothic body and mono labels for clear role separation
- Do keep planes borderless with a soft grounded shadow and generous padding
- Do render imagery as sumi-e ink wash floated in negative space
- Don't do not draw borders or boxes to group things
- Don't do not turn status into bright pills or stamp the seal until it is wallpaper
- Don't do not use glossy gradients, heavy shadows, or playful overshoot
- Don't do not trap navigation in a floating pill or nest cards
- Don't do not let copy sit on the busy part of the ink imagery
## Imagery Direction
### Pairs With
kasumi
### Summary
Sumi-e ink wash on warm washi in the Kasumi hand: any subject reduced to a few confident calligraphic strokes with graded bleed and dry-brush kasure, floated in vast negative space, sealed with one small vermilion hanko. Monochrome ink plus the single seal; copy never contests the busy part of the ink.
### Hero
one subject entering from an edge, the rest of the frame left as warm-paper ma for text overlay
### Palette
charcoal sumi ink on warm off-white washi, with a single vermilion seal
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "suzuri",
"type": "registry:theme",
"title": "Suzuri shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F4EFE6",
"foreground": "#1A1613",
"card": "#FCFAF4",
"card-foreground": "#1A1613",
"popover": "#FCFAF4",
"popover-foreground": "#1A1613",
"primary": "#1A1613",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#877C70",
"muted-foreground": "#1A1613",
"accent": "#C4392A",
"accent-foreground": "#ffffff",
"destructive": "#9E2A1F",
"border": "#E5DDCF",
"input": "#E5DDCF",
"ring": "#C4392A",
"chart-1": "#1A1613",
"chart-2": "#f4f4f5",
"chart-3": "#C4392A",
"chart-4": "#5A7150",
"chart-5": "#B07A1E",
"sidebar": "#FCFAF4",
"sidebar-foreground": "#1A1613",
"sidebar-primary": "#1A1613",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#3D5A6C",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#E5DDCF",
"sidebar-ring": "#C4392A",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#1A1613",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#C4392A",
"accent-foreground": "#ffffff",
"destructive": "#9E2A1F",
"border": "#303642",
"input": "#303642",
"ring": "#C4392A",
"chart-1": "#1A1613",
"chart-2": "#f4f4f5",
"chart-3": "#C4392A",
"chart-4": "#5A7150",
"chart-5": "#B07A1E",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#1A1613",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#C4392A",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#C4392A",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019f7075-7fac-75a1-8a78-f2cb695c897e",
"slug": "suzuri",
"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
images by fal-ai/flux-pro/v1.1
Keep Suzuriand 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: #F4EFE6;
--foreground: #1A1613;
--card: #FCFAF4;
--card-foreground: #1A1613;
--popover: #FCFAF4;
--popover-foreground: #1A1613;
--primary: #1A1613;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #877C70;
--muted-foreground: #1A1613;
--accent: #C4392A;
--accent-foreground: #ffffff;
--destructive: #9E2A1F;
--border: #E5DDCF;
--input: #E5DDCF;
--ring: #C4392A;
--chart-1: #1A1613;
--chart-2: #f4f4f5;
--chart-3: #C4392A;
--chart-4: #5A7150;
--chart-5: #B07A1E;
--sidebar: #FCFAF4;
--sidebar-foreground: #1A1613;
--sidebar-primary: #1A1613;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #3D5A6C;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #E5DDCF;
--sidebar-ring: #C4392A;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #1A1613;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #C4392A;
--accent-foreground: #ffffff;
--destructive: #9E2A1F;
--border: #303642;
--input: #303642;
--ring: #C4392A;
--chart-1: #1A1613;
--chart-2: #f4f4f5;
--chart-3: #C4392A;
--chart-4: #5A7150;
--chart-5: #B07A1E;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #1A1613;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #C4392A;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #C4392A;
--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 SuzuriShadcnKit() {
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">Suzuri</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": "suzuri",
"type": "registry:theme",
"author": "katagami-agent",
"title": "Suzuri",
"description": "A calm Japanese interface theme where structure comes from ma (negative space) rather than borders, anchored by a single hand-painted ink stroke and one vermilion hanko seal. A reimagining of Minimalist Japanese.",
"cssVars": {
"theme": {
"font-sans": "\"Zen Kaku Gothic New\", sans-serif",
"font-serif": "\"Zen Old Mincho\", serif",
"font-mono": "\"IBM Plex Mono\", monospace",
"radius": "0.75rem"
},
"light": {
"background": "#F4EFE6",
"foreground": "#1A1613",
"card": "#FCFAF4",
"card-foreground": "#1A1613",
"popover": "#FCFAF4",
"popover-foreground": "#1A1613",
"primary": "#C4392A",
"primary-foreground": "#FCFAF4",
"secondary": "#F0E9DC",
"secondary-foreground": "#1A1613",
"muted": "#EFE8DB",
"muted-foreground": "#877C70",
"accent": "#EFD9D3",
"accent-foreground": "#9E2A1F",
"destructive": "#9E2A1F",
"destructive-foreground": "#FCFAF4",
"border": "#E5DDCF",
"input": "#E5DDCF",
"ring": "#C4392A",
"chart-1": "#C4392A",
"chart-2": "#324C5C",
"chart-3": "#5A7150",
"chart-4": "#B07A1E",
"chart-5": "#877C70",
"radius": "0.75rem"
},
"dark": {
"background": "#1A1613",
"foreground": "#F4EFE6",
"card": "#221D19",
"card-foreground": "#F4EFE6",
"popover": "#221D19",
"popover-foreground": "#F4EFE6",
"primary": "#D8574A",
"primary-foreground": "#1A1613",
"secondary": "#2C2620",
"secondary-foreground": "#F4EFE6",
"muted": "#2C2620",
"muted-foreground": "#A99F92",
"accent": "#3A2A26",
"accent-foreground": "#E7C3BB",
"destructive": "#C5473B",
"destructive-foreground": "#F4EFE6",
"border": "#332C26",
"input": "#332C26",
"ring": "#D8574A",
"chart-1": "#D8574A",
"chart-2": "#6E93A6",
"chart-3": "#8AA07E",
"chart-4": "#CFA45C",
"chart-5": "#A99F92"
}
},
"visualProfile": {
"family": "editorial-ink",
"material": "warm washi paper, near-monochrome",
"contour": "borderless planes floating on ma",
"border": "none",
"underlay": false,
"grain": true,
"stickerBadges": true,
"motion": "ink settling — slow, deliberate, no overshoot",
"density": "low-to-medium",
"accents": ["#C4392A", "#324C5C", "#5A7150"]
},
"notes": "Structure is ma and alignment, not lines. The two signature marks are the fude ink stroke (under focused/active/heading elements; use for tab underline, active nav, focus ring) and the hanko seal (a vermilion square rotated -2deg for badges/status). Buttons are fully round (radius full); cards are radius 24px with a soft grounded shadow and NO border. Reserve the vermilion primary for one earned mark per view; carry secondary/pending states with ghost and ink hanko variants. Display face Zen Old Mincho, body Zen Kaku Gothic New, mono IBM Plex Mono in wide uppercase tracking for labels and counts."
}
# Suzuri — shadcn/ui Components
Author: `katagami-agent`
Suzuri is a calm Japanese interface language where structure is ground from *ma* (negative space)
rather than borders, anchored by a single hand-painted **fude ink stroke** and one **vermilion hanko
seal**. It is a reimagining of Minimalist Japanese. This document maps the language onto shadcn/ui so
a build stays true to the take: borderless paper planes, near-monochrome canvas, one earned mark of
colour per view.
## ShadSync visual profile
| Property | Value |
|---|---|
| family | editorial-ink |
| material | warm washi paper, near-monochrome |
| contour | borderless planes floating on *ma* |
| border | none (structure = space + alignment) |
| underlay | false |
| grain | true (faint horizontal paper fiber) |
| stickerBadges | true (the hanko seal, rotated -2deg) |
| motion | ink settling — slow (~420ms), deliberate, no overshoot |
| density | low-to-medium |
| accents | `#C4392A` vermilion · `#324C5C` indigo · `#5A7150` matcha |
Core tokens: background `#F4EFE6`, card `#FCFAF4`, foreground `#1A1613`, muted-foreground `#877C70`,
primary `#C4392A`, ring `#C4392A`, border `#E5DDCF`. Radius `0.75rem` (cards render at 24px, buttons
fully round). Fonts: serif `Zen Old Mincho` (display), sans `Zen Kaku Gothic New` (body), mono
`IBM Plex Mono` (labels/counts, uppercase, 0.16em tracking).
## Signature component recipes
The two marks below are the ONLY linework and the ONLY colour Suzuri adds. Everything else is paper,
ink, and space.
### The fude stroke (focus ring + active underline)
A wet ink brushstroke that pools under the active/focused element. Use it for the active `Tabs`
trigger, the active nav item, the focus state of inputs, and section headings.
```css
.fude-underline{ position:relative; }
.fude-underline::after{
content:""; position:absolute; left:0; right:0; bottom:-7px; height:9px;
background:
radial-gradient(60% 120% at 4% 50%, var(--primary) 40%, transparent 62%),
radial-gradient(120% 130% at 50% 40%, var(--primary) 58%, transparent 72%),
radial-gradient(60% 120% at 97% 55%, var(--primary) 35%, transparent 60%);
-webkit-mask:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent);
mask:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent);
transform:scaleY(.7);
}
/* headings use var(--foreground) instead of var(--primary) */
```
### The hanko seal (Badge)
```tsx
// A stamped vermilion square, tilted -2deg — never a rounded pill.
<Badge className="rounded-[2px] -rotate-2 bg-primary text-primary-foreground
font-mono text-[11px] tracking-wider px-2.5 py-1 shadow-none">
CONFIRMED
</Badge>
// ghost variant → outlined vermilion for secondary states
// ink variant → charcoal fill for pending states
```
## Copy-paste component example
A booking confirmation using the hanko seal and a borderless plane:
```tsx
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
export function BookingPlane() {
return (
<Card className="rounded-3xl border-0 shadow-[0_10px_30px_-12px_rgba(26,22,19,0.14)] bg-card">
<CardHeader className="flex flex-row items-center justify-between">
<CardTitle className="font-serif tracking-wide">Hoshino Ren · Tsuki</CardTitle>
<Badge className="rounded-[2px] -rotate-2 bg-primary text-primary-foreground font-mono text-[11px] tracking-wider shadow-none">
CHECKED IN
</Badge>
</CardHeader>
<CardContent className="space-y-4">
<p className="text-muted-foreground">
Anniversary — plum wine at turndown, no fish stock in the broth.
</p>
<Button className="rounded-full bg-primary text-primary-foreground">
Stamp confirmation
</Button>
</CardContent>
</Card>
)
}
```
Notes on the primitives from `@/components/ui/`:
- **`@/components/ui/button`** — fully round (`rounded-full`); one primary vermilion per view, the
rest ghost (transparent + `ring-1 ring-inset ring-black/10`) or ink (charcoal fill).
- **`@/components/ui/card`** — `border-0`, radius 24px (`rounded-3xl`), soft grounded shadow. Never
nest cards; separate planes with space.
- **`@/components/ui/input`, `textarea`, `select`** — no visible border; a faint inset ring
(`ring-1 ring-inset ring-black/[0.08]`) and, on focus, the vermilion ring plus a soft seal-tint
halo.
- **`@/components/ui/tabs`** — the active trigger carries the fude underline, not a boxed indicator.
- **`@/components/ui/badge`** — the hanko seal (see above); reserve for status worth a pause.
- **`@/components/ui/table`** — rows on paper planes separated by 1px ink hairline; status cells use
the hanko seal.
- **`@/components/ui/dialog`, `sheet`, `tooltip`, `dropdown-menu`** — paper surface, 24px/16px radius,
soft shadow, no border; open with the ink-settle motion.
- **`@/components/ui/separator`** — a faint ink hairline used sparingly; prefer space to divide.
- **`@/components/ui/switch`, `checkbox`, `slider`** — track/fill in vermilion when on; controls sized
to their content, never loose.
## Preview shots
The renderable preview scenes for Suzuri live in `preview-shots.json` (schema
`katagami:shadcn-preview-shots/renderable-v1`). They cover a booking confirmation plane, the ryokan
day-book table with hanko status seals, and the reservation form with the fude focus stroke — each
naming the primitives it exercises, what it must show (borderless planes, the ink stroke, the tilted
seal), and what to avoid (borders, bright pills, glossy shadows).
{
"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": "suzuri",
"name": "Suzuri",
"slug": "suzuri"
},
"installCommand": "npx shadcn@latest add https://katagami.ai/r/suzuri.json",
"primitives": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"identityNotes": [
"Structure is ma (negative space) and alignment — never borders or boxes.",
"Two signature marks only: the fude ink stroke under focused/active/heading elements, and the vermilion hanko seal (a square badge rotated -2deg) for status.",
"Near-monochrome washi-and-ink canvas; the single vermilion appears only as a stroke or a seal, never as a fill across the surface.",
"Buttons fully round; cards radius 24px with a soft grounded shadow and no border; the hanko seal is a near-square 2px chop.",
"Display face Zen Old Mincho, body Zen Kaku Gothic New, mono IBM Plex Mono in wide uppercase tracking for counts and labels."
],
"visualProfile": {
"family": "editorial-ink",
"material": "warm washi paper, near-monochrome",
"contour": "borderless planes floating on ma",
"border": "none",
"underlay": false,
"grain": true,
"stickerBadges": true,
"motion": "ink settling — slow, deliberate, no overshoot",
"density": "low-to-medium",
"accents": ["#C4392A", "#324C5C", "#5A7150"]
},
"tokens": {
"background": "#F4EFE6",
"surface": "#FCFAF4",
"foreground": "#1A1613",
"muted": "#877C70",
"border": "#E5DDCF",
"primary": "#C4392A",
"primaryForeground": "#FCFAF4",
"accent2": "#324C5C",
"success": "#5A7150",
"warning": "#B07A1E",
"error": "#9E2A1F",
"info": "#3D5A6C",
"radiusCard": "24px",
"radiusControl": "16px",
"radiusButton": "9999px",
"fontDisplay": "\"Zen Old Mincho\", serif",
"fontBody": "\"Zen Kaku Gothic New\", sans-serif",
"fontMono": "\"IBM Plex Mono\", monospace"
},
"shots": [
{
"id": "booking-plane",
"title": "Booking confirmation plane",
"viewport": "desktop",
"primitives": ["card", "badge", "button", "separator", "tooltip"],
"composition": "A single borderless paper card floating in generous ma; a Mincho title, a tilted vermilion hanko badge reading CHECKED IN, a muted note line, a hairline separator, and one round primary button.",
"mustShow": [
"a borderless card (no border, radius 24px, soft grounded shadow)",
"the hanko seal badge rotated -2deg in vermilion",
"exactly one round primary vermilion button",
"generous surrounding negative space"
],
"avoid": ["any card border", "a rounded pill badge", "glossy or coloured shadow", "a second vermilion fill"],
"scene": {
"headline": "Hoshino Ren · Tsuki",
"description": "Anniversary — plum wine at turndown, no fish stock in the broth.",
"stats": [
{ "label": "ARRIVAL", "value": "15:00" },
{ "label": "KAISEKI", "value": "17:30 · 2" },
{ "label": "STATUS", "value": "CHECKED IN" }
]
}
},
{
"id": "day-book-table",
"title": "The ryokan day-book",
"viewport": "desktop",
"primitives": ["table", "tabs", "badge", "dropdown-menu", "button"],
"composition": "A tab row (Today / Tomorrow / This week / Departures) where the active tab carries the fude ink underline; below it a table of arrivals on a paper plane, each status cell a tilted hanko seal, a row action dropdown at the end.",
"mustShow": [
"the fude ink stroke under the active tab",
"hanko seal status cells (Checked in / En route / Late arrival / No show)",
"table rows separated by a faint ink hairline, not borders",
"mono uppercase column headers"
],
"avoid": ["boxed tab indicator", "bright status pills", "full grid borders on the table"],
"scene": {
"headline": "Arrivals, room by room",
"description": "Today — a quiet, clear evening.",
"rows": [
{ "guest": "Hoshino Ren", "room": "Tsuki", "arrival": "15:00", "status": "Checked in" },
{ "guest": "Aoki Mei", "room": "Kaede", "arrival": "15:30", "status": "En route" },
{ "guest": "Tanabe Sho", "room": "Nagi", "arrival": "16:00", "status": "Late arrival" },
{ "guest": "Sasaki Ito", "room": "Matsu", "arrival": "18:00", "status": "No show" }
]
}
},
{
"id": "reservation-form",
"title": "Take a booking",
"viewport": "desktop",
"primitives": ["input", "textarea", "select", "checkbox", "switch", "slider", "button", "tooltip"],
"composition": "A reservation form on a paper plane: borderless fields with a faint inset ink ring; the focused field shows the vermilion fude stroke and a soft seal-tint halo; preference checkboxes, a switch for the arrival reminder, a warmth slider, and one primary Stamp confirmation button.",
"mustShow": [
"borderless inputs with only a faint inset ring",
"the vermilion focus ring / fude stroke on the active field",
"vermilion fill on the ON switch and checked boxes",
"controls sized to their content, evenly padded"
],
"avoid": ["default browser control chrome", "visible field borders", "loose oversized controls"],
"scene": {
"headline": "Take a booking",
"description": "Grind the ink, then make one mark.",
"fields": [
{ "label": "Guest name", "value": "Hoshino Ren" },
{ "label": "Arrival", "value": "17 Jul · 15:00" },
{ "label": "Room", "value": "Tsuki — corner, garden view" },
{ "label": "Note for the okami", "value": "Anniversary — plum wine at turndown." }
]
}
},
{
"id": "guest-sheet",
"title": "Guest sheet — dialog and menu",
"viewport": "desktop",
"primitives": ["dialog", "sheet", "dropdown-menu", "badge", "button", "separator"],
"composition": "A guest sheet opening as a paper panel (dialog/sheet) with a Mincho heading underlined by the fude stroke, hanko status badges, a hairline separator, a dropdown of quick actions, and a round primary button — all on the washi ground with room to breathe.",
"mustShow": [
"paper surface panel, radius 24px, no border, soft shadow",
"the fude underline on the panel heading",
"at least one hanko seal badge",
"the ink-settle open motion (implied)"
],
"avoid": ["bordered panel", "heavy modal scrim", "pill badges"],
"scene": {
"headline": "Guest — Kuroda party",
"description": "Private room · Yuki + Hana · kaiseki 19:00 · rotenburo held for dusk.",
"stats": [
{ "label": "PARTY", "value": "5" },
{ "label": "NIGHTS", "value": "2" },
{ "label": "STATUS", "value": "EN ROUTE" }
]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Fully round; one vermilion primary per view; the rest ghost (transparent + faint inset ring) or ink (charcoal fill). Centred label, one height." },
{ "primitive": "card", "intent": "Borderless paper plane, radius 24px, soft grounded shadow; never nested; separated from siblings by ma." },
{ "primitive": "input", "intent": "No border; faint inset ink ring; on focus the vermilion ring plus a soft seal-tint halo (the fude focus mark)." },
{ "primitive": "textarea", "intent": "Same as input; taller; resize vertical; content-sized, never loose." },
{ "primitive": "select", "intent": "No border; custom chevron in muted ink; matches input ring and focus behaviour." },
{ "primitive": "dialog", "intent": "Paper surface panel, radius 24px, no border, soft shadow; opens with the slow ink-settle motion; heading carries the fude underline." },
{ "primitive": "sheet", "intent": "Side paper panel on the washi ground; no border; mono uppercase section labels; room to breathe." },
{ "primitive": "tabs", "intent": "The active trigger carries the fude ink stroke underline, never a boxed indicator; inactive triggers are muted ink." },
{ "primitive": "badge", "intent": "The hanko seal — a vermilion square rotated -2deg; ghost (outlined) and ink (charcoal) variants for secondary and pending states." },
{ "primitive": "separator", "intent": "A faint ink hairline used sparingly; prefer space to divide planes." },
{ "primitive": "checkbox", "intent": "Rounded 6px; unchecked shows a faint inset ring; checked fills vermilion with a paper-coloured tick." },
{ "primitive": "switch", "intent": "Round track; OFF is faint ink, ON fills vermilion; paper knob with a soft grounded shadow." },
{ "primitive": "slider", "intent": "Thin round track; the filled portion is vermilion; the thumb is a paper disc ringed in vermilion." },
{ "primitive": "tooltip", "intent": "Small charcoal-ink bubble with paper text; radius 16px; appears with the ink-settle fade, no bounce." },
{ "primitive": "dropdown-menu", "intent": "Paper panel, radius 16px, no border, soft shadow; the active item marked with a short vermilion fude stroke, not a fill bar." },
{ "primitive": "table", "intent": "Rows on paper planes separated by a 1px ink hairline; mono uppercase headers; status cells use the hanko seal; scrolls inside its plane on mobile." }
],
"qualityRules": {
"do": [
"Let ma and alignment carry structure before any line or fill.",
"Reserve the vermilion for the one stroke or seal that earns a pause.",
"Keep the canvas near-monochrome washi and ink.",
"Size every control to its content, evenly padded and optically centred.",
"Pair Mincho display with gothic body and mono labels for clear role separation."
],
"dont": [
"Draw borders or boxes to group things.",
"Turn status into bright pills or stamp the seal until it is wallpaper.",
"Use glossy gradients, heavy shadows, or playful overshoot.",
"Trap navigation in a floating pill or nest cards.",
"Let copy sit on the busy part of the ink imagery."
]
}
}