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.
Anchor each screen with one dominant narrative panel, a narrow utility rail of vertical cartouche labels, and smaller slabs pinned around it. Use asymmetry, but keep reading order obvious through strong inked framing and label systems.
Poster-weight Zen Kaku headlines and numeric mono status blocks dominate by scale and contour weight; supporting copy sits in a restrained Shippori Mincho serif; utility labels use Share Tech Mono microtype and vertical cartouches.
Moderate: enough tools and data to feel operational, with intentional gaps so the print-inspired calm survives.
The registration offset — a single reusable primitive that ghosts headlines, badges, and panel edges into the red and green channels, like a color block printed a few pixels off its kentō mark. Supported by deliberate scanline bands, stepped/clipped corners, double-rule dividers, and hard offset ink shadows.
Desktop uses a 12-column asymmetric composition with a wide main sheet, a narrow utility rail, and offset slabs. Tablet collapses to a single wide sheet with the rail moving below. Mobile becomes a single-column stack with full-width actions; dense data scrolls horizontally only where necessary.
Preserve large top and side print-margin breathing space around the dominant sheet; padding feels like printed margins, generous for narrative blocks and tighter for data modules.
balanced
Single-column stack on mobile; hide non-essential nav links; minmax(0,1fr) columns and min-width:0 children so grids never overflow; cap and center contained content on ultra-wide while the hero spans 100vw.
surimono-signal
Glitched woodblock prints: flat poster color planes in vermilion, indigo, and pine on warm parchment, framed by heavy sumi contours and interrupted by deliberate scanline bands and RGB registration offset.
Hero and feature imagery only; keep one dominant color field, reserve quiet parchment space for asymmetric gravity, and never wallpaper the glitch.
# Kentō ## Philosophy Kentō is a flat woodblock-print interface sliced by deliberate digital signal corruption. Named for the kentō registration mark that aligns each color block on a woodblock press, the language pulls that mark a few pixels out of true on purpose: near-black sumi contours frame every panel, poster-flat color planes sit on warm parchment, and headlines ghost into the red and green channels like a misregistered print. Calm negative space meets confrontational brutalist clarity — the glitch is the craft, never random damage. ### Values - Treat negative space as an active compositional force, not leftover area. - Draw structure with inked contours and frame lines before any shadow or blur. - Keep color fields flat and poster-like, echoing inked blocks rather than gradients. - Make every digital artifact deliberate: the registration offset and scanlines sharpen identity, never reduce clarity. - Compose with asymmetric gravity so each screen reads like a curated print poster. - Balance poetic woodblock calm against harsh utility so the interface feels crafted and immediate at once. ### Anti-Values - Soft glassmorphism, blur, or neumorphic depth. - Symmetrical grids that erase directional tension. - Smooth gradients or color glow standing in for printed flatness. - Random illegible glitch damage with no system behind it. - Tiny low-contrast controls that disappear into the parchment. - A white or pastel-wash ground that drops the printed-sheet identity. ### Visual Character - thick near-black sumi ink contours framing every major panel and control - warm parchment ground with generous print-margin negative space around one dominant column - flat vermilion, indigo, and pine color planes with no gradients, one field dominating each region - registration offset: headlines and mastheads ghost into the red and green channels like a misregistered print - deliberate scanline bands on headers and media frames, plus hard offset ink shadows and double-rule dividers - asymmetric compositions with vertical cartouche labels and stepped, clipped panel corners ## Tokens ### Colors | Name | Value | |------|-------| | primary | `#C53A2F` | | secondary | `#1F3A5F` | | accent | `#2A8C6E` | | background | `#F3E9D2` | | surface | `#FBF5E6` | | surface_2 | `#ECDFC2` | | text | `#171311` | | muted | `#6F6149` | | border | `#171311` | | on_accent | `#FBF5E6` | | error | `#A12822` | | success | `#2F6B50` | | warning | `#B06A1A` | | info | `#1F3A5F` | ### Typography - **Base Size**: 17px - **Body Font**: Shippori Mincho B1 - **Heading Font**: Zen Kaku Gothic New - **Mono Font**: Share Tech Mono - **Heading Weight**: 900 - **Heading Transform**: none - **Letter Spacing**: -0.01em - **Line Height**: 1.6 - **Scale Ratio**: 1.25 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Shippori+Mincho+B1:wght@400;500;700;800&family=Share+Tech+Mono&family=Zen+Kaku+Gothic+New:wght@400;500;700;900&display=swap ### Radii - **None**: 0px - **Sm**: 0px - **Md**: 0px - **Lg**: 0px - **Full**: 9999px ### Shadows - **Sm**: 4px 4px 0 #171311 - **Md**: 8px 8px 0 #171311 - **Press**: 2px 2px 0 #171311 ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64,96] ### Surfaces - **Treatment**: flat woodblock paper - **Card Style**: flat parchment panels with sumi contours, hard offset shadows, occasional stepped corners and scanline bands - **Bg Pattern**: fine woodblock paper grain ### Borders - **Default Width**: 3px - **Accent Width**: 5px - **Style**: solid - **Character**: near-black sumi ink contours with emphatic outer frames and double-rule dividers ### Motion - **Duration**: 160ms - **Easing**: cubic-bezier(0.2, 0.9, 0.2, 1) - **Philosophy**: snappy; press translates the hard offset shadow ## Rules ### Composition Anchor each screen with one dominant narrative panel, a narrow utility rail of vertical cartouche labels, and smaller slabs pinned around it. Use asymmetry, but keep reading order obvious through strong inked framing and label systems. ### Hierarchy Poster-weight Zen Kaku headlines and numeric mono status blocks dominate by scale and contour weight; supporting copy sits in a restrained Shippori Mincho serif; utility labels use Share Tech Mono microtype and vertical cartouches. ### Density Moderate: enough tools and data to feel operational, with intentional gaps so the print-inspired calm survives. ### Signature The registration offset — a single reusable primitive that ghosts headlines, badges, and panel edges into the red and green channels, like a color block printed a few pixels off its kentō mark. Supported by deliberate scanline bands, stepped/clipped corners, double-rule dividers, and hard offset ink shadows. ## Layout ### Grid Desktop uses a 12-column asymmetric composition with a wide main sheet, a narrow utility rail, and offset slabs. Tablet collapses to a single wide sheet with the rail moving below. Mobile becomes a single-column stack with full-width actions; dense data scrolls horizontally only where necessary. ### Whitespace Preserve large top and side print-margin breathing space around the dominant sheet; padding feels like printed margins, generous for narrative blocks and tighter for data modules. ### Density balanced ### Responsive Single-column stack on mobile; hide non-essential nav links; minmax(0,1fr) columns and min-width:0 children so grids never overflow; cap and center contained content on ultra-wide while the hero spans 100vw. ### Breakpoints - **Mobile**: 0-759px - **Tablet**: 760-1000px - **Desktop**: 1001px+ ## Guidance ### Do - Let one color field dominate each region while neighbors stay parchment. - Wear an inked sumi contour on cards, inputs, buttons, tables, and alerts so structure reads instantly. - Preserve large breathing areas; let some zones stay intentionally sparse. - Use the registration offset on headlines and mastheads, and scanline bands on headers and media frames, sparingly. - Style every form control with the same inked frame language. - Keep interactions tactile through hard offset shadows and pressed states. ### Don't - Fill every area with decoration; emptiness is part of the style. - Use smooth gradients, glass blur, or soft neumorphic depth. - Center everything; the language depends on directional tension. - Treat the glitch as random damage or illegible distortion. - Leave browser-default checkboxes, selects, or buttons visible. - Default to a white or pastel ground that loses the printed-sheet identity. ### Accessibility Body 17px on high-contrast sumi-on-parchment; reserve the registration offset for large display type so body copy stays crisp; respect prefers-reduced-motion by settling all reveals immediately; every control has a visible focus state via the hard offset shadow. ## Imagery Direction ### Pairs With surimono-signal ### Summary Glitched woodblock prints: flat poster color planes in vermilion, indigo, and pine on warm parchment, framed by heavy sumi contours and interrupted by deliberate scanline bands and RGB registration offset. ### Subjects - a leaping carp - cresting waves - a single object filling the frame - a mid-distance figure or motif ### Usage Hero and feature imagery only; keep one dominant color field, reserve quiet parchment space for asymmetric gravity, and never wallpaper the glitch.
---
version: "alpha"
name: "Kentō"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
primary: "#C53A2F"
secondary: "#1F3A5F"
accent: "#2A8C6E"
background: "#F3E9D2"
surface: "#FBF5E6"
surface_2: "#ECDFC2"
text: "#171311"
muted: "#6F6149"
border: "#171311"
on_accent: "#FBF5E6"
error: "#A12822"
success: "#2F6B50"
warning: "#B06A1A"
info: "#1F3A5F"
typography:
headline-lg:
fontFamily: "Zen Kaku Gothic New"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.01em"
headline-md:
fontFamily: "Zen Kaku Gothic New"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.01em"
body-md:
fontFamily: "Shippori Mincho B1"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.6
letterSpacing: "-0.01em"
label-md:
fontFamily: "Share Tech Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
sm: "0px"
md: "0px"
lg: "0px"
full: "9999px"
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-primary:
backgroundColor: "{colors.primary}"
color-reference-secondary:
backgroundColor: "{colors.secondary}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-background:
backgroundColor: "{colors.background}"
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-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-info:
backgroundColor: "{colors.info}"
button-primary:
backgroundColor: "{colors.primary}"
textColor: "#ffffff"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Kentō
## Overview
Kentō is a flat woodblock-print interface sliced by deliberate digital signal corruption. Named for the kentō registration mark that aligns each color block on a woodblock press, the language pulls that mark a few pixels out of true on purpose: near-black sumi contours frame every panel, poster-flat color planes sit on warm parchment, and headlines ghost into the red and green channels like a misregistered print. Calm negative space meets confrontational brutalist clarity — the glitch is the craft, never random damage.
### Values
- Treat negative space as an active compositional force, not leftover area.
- Draw structure with inked contours and frame lines before any shadow or blur.
- Keep color fields flat and poster-like, echoing inked blocks rather than gradients.
- Make every digital artifact deliberate: the registration offset and scanlines sharpen identity, never reduce clarity.
- Compose with asymmetric gravity so each screen reads like a curated print poster.
- Balance poetic woodblock calm against harsh utility so the interface feels crafted and immediate at once.
### Anti-Values
- Soft glassmorphism, blur, or neumorphic depth.
- Symmetrical grids that erase directional tension.
- Smooth gradients or color glow standing in for printed flatness.
- Random illegible glitch damage with no system behind it.
- Tiny low-contrast controls that disappear into the parchment.
- A white or pastel-wash ground that drops the printed-sheet identity.
### Visual Character
- thick near-black sumi ink contours framing every major panel and control
- warm parchment ground with generous print-margin negative space around one dominant column
- flat vermilion, indigo, and pine color planes with no gradients, one field dominating each region
- registration offset: headlines and mastheads ghost into the red and green channels like a misregistered print
- deliberate scanline bands on headers and media frames, plus hard offset ink shadows and double-rule dividers
- asymmetric compositions with vertical cartouche labels and stepped, clipped panel corners
## Colors
Use the YAML color tokens as the normative palette. The prose below names the roles agents should preserve when generating UI.
| Token | Value |
|-------|-------|
| primary | `#C53A2F` |
| secondary | `#1F3A5F` |
| accent | `#2A8C6E` |
| background | `#F3E9D2` |
| surface | `#FBF5E6` |
| surface_2 | `#ECDFC2` |
| text | `#171311` |
| muted | `#6F6149` |
| border | `#171311` |
| on_accent | `#FBF5E6` |
| error | `#A12822` |
| success | `#2F6B50` |
| warning | `#B06A1A` |
| info | `#1F3A5F` |
## Typography
- **Headline-Lg**: Zen Kaku Gothic New, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Zen Kaku Gothic New, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Shippori Mincho B1, 17px, weight 400, line-height 1.6.
- **Label-Md**: Share Tech Mono, 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
Desktop uses a 12-column asymmetric composition with a wide main sheet, a narrow utility rail, and offset slabs. Tablet collapses to a single wide sheet with the rail moving below. Mobile becomes a single-column stack with full-width actions; dense data scrolls horizontally only where necessary.
### Whitespace
Preserve large top and side print-margin breathing space around the dominant sheet; padding feels like printed margins, generous for narrative blocks and tighter for data modules.
### Density
balanced
### Responsive
Single-column stack on mobile; hide non-essential nav links; minmax(0,1fr) columns and min-width:0 children so grids never overflow; cap and center contained content on ultra-wide while the hero spans 100vw.
### Breakpoints
- **Mobile**: 0-759px
- **Tablet**: 760-1000px
- **Desktop**: 1001px+
## Elevation & Depth
### Shadows
- **Sm**: 4px 4px 0 #171311
- **Md**: 8px 8px 0 #171311
- **Press**: 2px 2px 0 #171311
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `0px`
- **Md**: `0px`
- **Lg**: `0px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: flat woodblock paper
- **Card Style**: flat parchment panels with sumi contours, hard offset shadows, occasional stepped corners and scanline bands
- **Bg Pattern**: fine woodblock paper grain
### Borders
- **Default Width**: 3px
- **Accent Width**: 5px
- **Style**: solid
- **Character**: near-black sumi ink contours with emphatic outer frames and double-rule dividers
## Components
### Composition
Anchor each screen with one dominant narrative panel, a narrow utility rail of vertical cartouche labels, and smaller slabs pinned around it. Use asymmetry, but keep reading order obvious through strong inked framing and label systems.
### Hierarchy
Poster-weight Zen Kaku headlines and numeric mono status blocks dominate by scale and contour weight; supporting copy sits in a restrained Shippori Mincho serif; utility labels use Share Tech Mono microtype and vertical cartouches.
### Density
Moderate: enough tools and data to feel operational, with intentional gaps so the print-inspired calm survives.
### Signature
The registration offset — a single reusable primitive that ghosts headlines, badges, and panel edges into the red and green channels, like a color block printed a few pixels off its kentō mark. Supported by deliberate scanline bands, stepped/clipped corners, double-rule dividers, and hard offset ink shadows.
## 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-019ef8ba-eb77-7e21-ba70-1f1eed4e6b02/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 one color field dominate each region while neighbors stay parchment.
- Do Wear an inked sumi contour on cards, inputs, buttons, tables, and alerts so structure reads instantly.
- Do Preserve large breathing areas; let some zones stay intentionally sparse.
- Do Use the registration offset on headlines and mastheads, and scanline bands on headers and media frames, sparingly.
- Do Style every form control with the same inked frame language.
- Do Keep interactions tactile through hard offset shadows and pressed states.
- Don't Fill every area with decoration; emptiness is part of the style.
- Don't Use smooth gradients, glass blur, or soft neumorphic depth.
- Don't Center everything; the language depends on directional tension.
- Don't Treat the glitch as random damage or illegible distortion.
- Don't Leave browser-default checkboxes, selects, or buttons visible.
- Don't Default to a white or pastel ground that loses the printed-sheet identity.
### Accessibility
Body 17px on high-contrast sumi-on-parchment; reserve the registration offset for large display type so body copy stays crisp; respect prefers-reduced-motion by settling all reveals immediately; every control has a visible focus state via the hard offset shadow.
## Imagery Direction
### Pairs With
surimono-signal
### Summary
Glitched woodblock prints: flat poster color planes in vermilion, indigo, and pine on warm parchment, framed by heavy sumi contours and interrupted by deliberate scanline bands and RGB registration offset.
### Subjects
- a leaping carp
- cresting waves
- a single object filling the frame
- a mid-distance figure or motif
### Usage
Hero and feature imagery only; keep one dominant color field, reserve quiet parchment space for asymmetric gravity, and never wallpaper the glitch.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "kento",
"type": "registry:theme",
"title": "Kentō shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F3E9D2",
"foreground": "#171311",
"card": "#FBF5E6",
"card-foreground": "#171311",
"popover": "#FBF5E6",
"popover-foreground": "#171311",
"primary": "#C53A2F",
"primary-foreground": "#ffffff",
"secondary": "#1F3A5F",
"secondary-foreground": "#ffffff",
"muted": "#6F6149",
"muted-foreground": "#171311",
"accent": "#2A8C6E",
"accent-foreground": "#ffffff",
"destructive": "#A12822",
"border": "#171311",
"input": "#171311",
"ring": "#2A8C6E",
"chart-1": "#C53A2F",
"chart-2": "#1F3A5F",
"chart-3": "#2A8C6E",
"chart-4": "#2F6B50",
"chart-5": "#B06A1A",
"sidebar": "#FBF5E6",
"sidebar-foreground": "#171311",
"sidebar-primary": "#C53A2F",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#1F3A5F",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#171311",
"sidebar-ring": "#2A8C6E",
"radius": "0px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#C53A2F",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#2A8C6E",
"accent-foreground": "#ffffff",
"destructive": "#A12822",
"border": "#303642",
"input": "#303642",
"ring": "#2A8C6E",
"chart-1": "#C53A2F",
"chart-2": "#1F3A5F",
"chart-3": "#2A8C6E",
"chart-4": "#2F6B50",
"chart-5": "#B06A1A",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#C53A2F",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#2A8C6E",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#2A8C6E",
"radius": "0px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ef8ba-eb77-7e21-ba70-1f1eed4e6b02",
"slug": "kento",
"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",
"background",
"border",
"error",
"info",
"muted",
"on_accent",
"primary",
"secondary",
"success",
"surface",
"surface_2",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"md",
"press",
"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 Kentōand 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: #F3E9D2;
--foreground: #171311;
--card: #FBF5E6;
--card-foreground: #171311;
--popover: #FBF5E6;
--popover-foreground: #171311;
--primary: #C53A2F;
--primary-foreground: #ffffff;
--secondary: #1F3A5F;
--secondary-foreground: #ffffff;
--muted: #6F6149;
--muted-foreground: #171311;
--accent: #2A8C6E;
--accent-foreground: #ffffff;
--destructive: #A12822;
--border: #171311;
--input: #171311;
--ring: #2A8C6E;
--chart-1: #C53A2F;
--chart-2: #1F3A5F;
--chart-3: #2A8C6E;
--chart-4: #2F6B50;
--chart-5: #B06A1A;
--sidebar: #FBF5E6;
--sidebar-foreground: #171311;
--sidebar-primary: #C53A2F;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #1F3A5F;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #171311;
--sidebar-ring: #2A8C6E;
--radius: 0px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #C53A2F;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #2A8C6E;
--accent-foreground: #ffffff;
--destructive: #A12822;
--border: #303642;
--input: #303642;
--ring: #2A8C6E;
--chart-1: #C53A2F;
--chart-2: #1F3A5F;
--chart-3: #2A8C6E;
--chart-4: #2F6B50;
--chart-5: #B06A1A;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #C53A2F;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #2A8C6E;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #2A8C6E;
--radius: 0px;
}
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
export function KentShadcnKit() {
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">Kentō</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": "kento",
"type": "registry:theme",
"cssVars": {
"theme": {
"font-sans": "Shippori Mincho B1, Georgia, serif",
"font-mono": "Share Tech Mono, ui-monospace, monospace",
"font-heading": "Zen Kaku Gothic New, system-ui, sans-serif",
"radius": "0px"
},
"light": {
"background": "#F3E9D2",
"foreground": "#171311",
"card": "#FBF5E6",
"card-foreground": "#171311",
"popover": "#FBF5E6",
"popover-foreground": "#171311",
"primary": "#C53A2F",
"primary-foreground": "#FBF5E6",
"secondary": "#1F3A5F",
"secondary-foreground": "#FBF5E6",
"muted": "#ECDFC2",
"muted-foreground": "#6F6149",
"accent": "#2A8C6E",
"accent-foreground": "#FBF5E6",
"destructive": "#A12822",
"destructive-foreground": "#FBF5E6",
"border": "#171311",
"input": "#171311",
"ring": "#C53A2F",
"radius": "0px",
"chart-1": "#C53A2F",
"chart-2": "#1F3A5F",
"chart-3": "#2A8C6E",
"chart-4": "#B06A1A",
"chart-5": "#6F6149"
},
"dark": {
"background": "#171311",
"foreground": "#F3E9D2",
"card": "#221C18",
"card-foreground": "#F3E9D2",
"popover": "#221C18",
"popover-foreground": "#F3E9D2",
"primary": "#E0584C",
"primary-foreground": "#171311",
"secondary": "#3C5C82",
"secondary-foreground": "#F3E9D2",
"muted": "#2A231D",
"muted-foreground": "#B8A98C",
"accent": "#3FA987",
"accent-foreground": "#171311",
"destructive": "#C9453C",
"destructive-foreground": "#171311",
"border": "#F3E9D2",
"input": "#F3E9D2",
"ring": "#E0584C",
"radius": "0px",
"chart-1": "#E0584C",
"chart-2": "#3C5C82",
"chart-3": "#3FA987",
"chart-4": "#D08A3C",
"chart-5": "#B8A98C"
}
},
"visualProfile": {
"id": "kento",
"material": "flat-print",
"surface": "warm parchment paper, flat poster color planes, no gradients or glass",
"border": "heavy near-black sumi ink contours, 3px default / 5px outer frame, double-rule dividers",
"radius": "0px hard corners; 9999px only on tags and status dots",
"shadow": "hard offset ink shadows (Npx Npx 0), no blur, pressed-state translate",
"elevation": "offset-shadow only — depth comes from displacement, never from blur or soft glow",
"accentUsage": "one dominant color field per region; vermilion primary, indigo + pine as highlighters",
"ornament": "registration-offset channel ghosting and deliberate scanline bands, applied sparingly",
"motion": "snappy 160ms cubic-bezier(0.2,0.9,0.2,1); press translates the offset shadow"
}
}
# Kentō shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019ef8ba-eb77-7e21-ba70-1f1eed4e6b02`
Slug: `kento`
## Intent
Kentō is a flat woodblock-print interface sliced by deliberate digital signal corruption. Named for the kentō registration mark that aligns each color block on a woodblock press, the language pulls that mark a few pixels out of true on purpose: near-black sumi contours frame every panel, poster-flat color planes sit on warm parchment, and headlines ghost into the red and green channels like a misregistered print. Calm negative space meets confrontational brutalist clarity — the glitch is the craft, never random damage.
## 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:
{
"primary": "#C53A2F",
"secondary": "#1F3A5F",
"accent": "#2A8C6E",
"background": "#F3E9D2",
"surface": "#FBF5E6",
"surface_2": "#ECDFC2",
"text": "#171311",
"muted": "#6F6149",
"border": "#171311",
"on_accent": "#FBF5E6",
"error": "#A12822",
"success": "#2F6B50",
"warning": "#B06A1A",
"info": "#1F3A5F"
}
Typography:
{
"base_size": "17px",
"body_font": "Shippori Mincho B1",
"heading_font": "Zen Kaku Gothic New",
"mono_font": "Share Tech Mono",
"heading_weight": "900",
"heading_transform": "none",
"letter_spacing": "-0.01em",
"line_height": 1.6,
"scale_ratio": 1.25,
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Shippori+Mincho+B1:wght@400;500;700;800&family=Share+Tech+Mono&family=Zen+Kaku+Gothic+New:wght@400;500;700;900&display=swap"
}
## Visual character to preserve
- thick near-black sumi ink contours framing every major panel and control
- warm parchment ground with generous print-margin negative space around one dominant column
- flat vermilion, indigo, and pine color planes with no gradients, one field dominating each region
- registration offset: headlines and mastheads ghost into the red and green channels like a misregistered print
- deliberate scanline bands on headers and media frames, plus hard offset ink shadows and double-rule dividers
- asymmetric compositions with vertical cartouche labels and stepped, clipped panel corners
## ShadSync visual profile
{
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "solid",
"underlay": true,
"grain": true,
"stickerBadges": false,
"motion": "still",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
}
## Signature component recipes
### Button
Use `Button` for primary, secondary, outline, and ghost actions. Primary actions must expose the language's strongest contrast pair, while secondary and ghost actions should preserve the surface treatment instead of falling back to default neutral SaaS styling.
### Card
Use `Card`, `CardHeader`, `CardContent`, `CardFooter`, and `CardAction` as the main composition frame. Cards should demonstrate the language's surface, border, hierarchy, and density rules rather than appearing as generic rounded rectangles.
### Input and Textarea
Use `Input` and `Textarea` with visible focus rings, field labels, validation states, and the language's rhythm. Forms should show real product content, not placeholder-only controls.
### Select, Tabs, and Table
Use `Select`, `Tabs`, and `Table` to prove navigation, filtering, and dense data states. The table should show row rhythm, separators, hover/focus states, and an empty or status state when the language calls for it.
### Dialog and Sheet
Use `Dialog` for centered decisions and `Sheet` for contextual editing. Both should inherit the language's spacing, border, overlay, and motion rules.
## Preview shots
- `application-shell`: dashboard or workspace shell with navigation, cards, forms, and state badges.
- `detail-editor`: focused editing flow using input, textarea, select, switch/checkbox, dialog or sheet, and action buttons.
- `data-operations`: table-heavy operational view with tabs, dropdown menu affordances, badges, and destructive/empty states.
- Each preview shot must include a renderable `scene` payload with concrete headline, description, actions, and rows/fields/stats for the UI preview.
## Implementation contract
- Start from local `ui/src/components/ui` shadcn-style primitives; do not create a second component system.
- Apply `/katagami/shadcn/kento/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: Let one color field dominate each region while neighbors stay parchment.; Wear an inked sumi contour on cards, inputs, buttons, tables, and alerts so structure reads instantly.; Preserve large breathing areas; let some zones stay intentionally sparse.; Use the registration offset on headlines and mastheads, and scanline bands on headers and media frames, sparingly.; Style every form control with the same inked frame language.; Keep interactions tactile through hard offset shadows and pressed states.
- Do not: Fill every area with decoration; emptiness is part of the style.; Use smooth gradients, glass blur, or soft neumorphic depth.; Center everything; the language depends on directional tension.; Treat the glitch as random damage or illegible distortion.; Leave browser-default checkboxes, selects, or buttons visible.; Default to a white or pastel ground that loses the printed-sheet identity.
## 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 KentShadcnKit() {
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">Kentō</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": "Desktop uses a 12-column asymmetric composition with a wide main sheet, a narrow utility rail, and offset slabs. Tablet collapses to a single wide sheet with the rail moving below. Mobile becomes a single-column stack with full-width actions; dense data scrolls horizontally only where necessary.",
"whitespace": "Preserve large top and side print-margin breathing space around the dominant sheet; padding feels like printed margins, generous for narrative blocks and tighter for data modules.",
"density": "balanced",
"responsive": "Single-column stack on mobile; hide non-essential nav links; minmax(0,1fr) columns and min-width:0 children so grids never overflow; cap and center contained content on ultra-wide while the hero spans 100vw.",
"breakpoints": {
"mobile": "0-759px",
"tablet": "760-1000px",
"desktop": "1001px+"
}
}
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"author": "katagami-agent",
"generatedBy": "katagami-agent",
"requiresVisualProfile": true,
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"language": { "id": "", "name": "Kentō", "slug": "kento" },
"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": [
"Flat woodblock color planes on warm parchment (#F3E9D2), sliced by deliberate signal corruption — never white, never gradient.",
"Every panel and control wears a near-black sumi ink contour and a hard offset shadow (Npx Npx 0, no blur); corners are 0px, with 9999px reserved for tags and status dots.",
"The signature is the registration offset: headlines and mastheads ghost into the red and green channels; scanline bands appear on headers and media frames only, never wallpapered.",
"Vermilion leads as the one primary action; indigo and pine answer as highlighters; one color field dominates each region."
],
"visualProfile": {
"family": "brutalist-print",
"material": "flat-print",
"contour": "ink",
"border": "heavy",
"underlay": true,
"grain": true,
"stickerBadges": false,
"motion": "snappy",
"density": "balanced",
"accents": ["accent", "secondary", "success", "warning", "destructive"]
},
"shots": [
{
"id": "press-floor",
"title": "The press floor",
"viewport": "desktop",
"primitives": ["button", "card", "input", "select", "tabs", "badge", "separator", "table"],
"composition": "A woodblock press-floor dashboard: a sumi sidebar masthead, KPI cards with one dominant color plane each and a scanline band, a filter row, and the plate-run ledger with registration status badges and a per-block heat meter.",
"mustShow": ["vermilion primary action vs inked secondary action", "parchment cards with a sumi contour and hard offset shadow, one carrying a scanline band", "vermilion + indigo + pine status badges", "registration-offset ghosting on the page title"],
"avoid": ["white or cream-pastel ground", "soft blur shadows or glassmorphism", "rounded corners on cards or buttons", "wallpapering scanlines across every surface"],
"scene": {
"eyebrow": "the floor",
"headline": "Press Floor — Spring Run",
"description": "Where every plate is registered to its kentō mark by rank: aligned, drift, off-mark.",
"primaryAction": "Pull a proof",
"secondaryAction": "Re-register",
"stats": [
{ "label": "proofs pulled", "value": "312", "tone": "accent" },
{ "label": "on-mark", "value": "98.6%", "tone": "success" },
{ "label": "plates active", "value": "04", "tone": "info" }
],
"rows": [
{ "label": "Vermilion key", "value": "KB-018 · 0.0px offset", "status": "aligned" },
{ "label": "Indigo plate", "value": "KB-019 · 1.4px offset", "status": "drift" },
{ "label": "Pine overlay", "value": "KB-020 · 3.2px offset", "status": "off-mark" },
{ "label": "Paper sheet", "value": "KB-021 · 0.0px offset", "status": "aligned" }
],
"statuses": ["Aligned", "Drift", "Off-mark", "Locked"]
}
},
{
"id": "register-plate",
"title": "Register a plate",
"viewport": "tablet",
"primitives": ["button", "card", "input", "textarea", "select", "checkbox", "switch", "slider", "dialog", "sheet"],
"composition": "A formal plate-registration flow: labelled inked fields, a dominant-block select, a press-note textarea, a lock-kentō checkbox, a scanline-overlay switch, a channel-offset slider, all inside a stepped-corner panel; a confirm dialog and a side sheet for plate history.",
"mustShow": ["every control wearing the same inked frame, no browser defaults", "custom checkbox that fills vermilion with a parchment tick", "switch knob as a sumi block sliding to vermilion", "dialog with a 5px sumi outer frame and the registration-offset title"],
"avoid": ["visible native checkbox/select/switch", "glow focus rings", "rounded inputs", "centered everything — keep directional tension"],
"scene": {
"eyebrow": "register",
"headline": "Register a plate",
"description": "Lock each color block to its kentō mark, then dial the deliberate channel offset.",
"primaryAction": "Save plate",
"secondaryAction": "Reset",
"fields": [
{ "label": "Edition title", "value": "Carp Ascending, Spring Edition", "type": "text" },
{ "label": "Dominant block", "value": "Vermilion key", "type": "select" },
{ "label": "Press note", "value": "Pull the red channel 2px left to ghost the silhouette.", "type": "textarea" },
{ "label": "Channel offset", "value": "2px", "type": "slider" }
],
"toggles": [
{ "label": "Lock kentō marks", "value": true, "type": "checkbox" },
{ "label": "Scanline overlay", "value": true, "type": "switch" }
]
}
},
{
"id": "archive-card",
"title": "Surimono archive",
"viewport": "desktop",
"primitives": ["card", "badge", "tooltip", "dropdown-menu", "separator", "tabs", "button", "table"],
"composition": "An edition archive: a gallery of plate cards each with one dominant flat color plane and a stepped corner, mono cartouche metadata, status badges, a per-card dropdown menu of actions, and a double-rule separator between sections; a tooltip explains the offset metric.",
"mustShow": ["double-rule divider between archive sections", "dropdown menu with a vermilion active-item left bar", "tooltip as a sumi block with hard offset shadow", "pill-shaped tags as the only rounded shapes"],
"avoid": ["nested cards", "thin hairline dividers", "boxing the section nav into a pill bar", "more than three accent colors fighting for primacy"],
"scene": {
"eyebrow": "archive",
"headline": "Surimono Archive",
"description": "Editions filed by dominant block; offset noted on each, glitch logged, nothing lost.",
"primaryAction": "Open edition",
"secondaryAction": "Export plate",
"rows": [
{ "label": "Carp Ascending", "value": "Vermilion · offset 2.0px", "status": "aligned" },
{ "label": "River at Dusk", "value": "Indigo · offset 0.6px", "status": "aligned" },
{ "label": "Pine Gate", "value": "Pine · offset 3.2px", "status": "off-mark" }
],
"statuses": ["Aligned", "Drift", "Off-mark"],
"menuActions": ["Open edition", "Duplicate plate", "Re-register", "Archive"]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Hierarchy: vermilion primary = the one emphasis; indigo secondary; parchment outline = quiet; ghost = quietest. 0px, 3px sumi border, hard offset shadow, centred Zen Kaku 700 label, one shared height; press translates the shadow." },
{ "primitive": "card", "intent": "Parchment surface, 3px sumi contour, 4px 4px 0 shadow, 0px corners; optional 18px stepped corner; header may carry one scanline band. Never nest cards." },
{ "primitive": "input", "intent": "Full-width inked frame, parchment fill, 0px; Shippori Mincho 16px; focus = 2px 2px 0 shadow + white fill, no glow ring; no browser default." },
{ "primitive": "textarea", "intent": "Input frame, 3 rows min, vertical resize only, same focus treatment." },
{ "primitive": "select", "intent": "Input frame with a custom inline-SVG sumi chevron; appearance reset; menu surface parchment with 3px border and hard shadow." },
{ "primitive": "dialog", "intent": "Sumi 55% overlay; panel parchment with a 5px outer frame, 8px 8px 0 shadow, 0px; title carries the registration offset; close is an SVG glyph, never an emoji." },
{ "primitive": "sheet", "intent": "Slides from the edge as an inked plate; 5px leading sumi border, hard shadow; content stacks as parchment rows." },
{ "primitive": "tabs", "intent": "List on a 3px bottom rule; active tab a 5px vermilion underline; mono uppercase labels; never boxed pills." },
{ "primitive": "badge", "intent": "Pill (9999px) or hard chip, 3px border, mono uppercase 11px; default parchment, primary vermilion, accent pine, secondary indigo, destructive error." },
{ "primitive": "separator", "intent": "Double-rule: two 3px sumi lines with a 5px parchment gap — never a thin hairline." },
{ "primitive": "checkbox", "intent": "22px square, 3px border; checked fills vermilion with a parchment SVG tick; focus-visible 2px 2px 0 shadow; native hidden." },
{ "primitive": "switch", "intent": "54x28 inked track, pressed-well off state; knob a sumi block that slides right and fills vermilion when on." },
{ "primitive": "slider", "intent": "Inked rail on the pressed-well surface; vermilion fill to the thumb; thumb a 3px-bordered sumi block, 0px; value in mono." },
{ "primitive": "tooltip", "intent": "Sumi #171311 block, parchment text, 0px, 2px 2px 0 shadow, mono 12px." },
{ "primitive": "dropdown-menu", "intent": "Parchment surface, 3px border, hard shadow, 0px; items mono uppercase; hover fills the muted well; active item shows a vermilion left bar." },
{ "primitive": "table", "intent": "Parchment surface, 3px border; header row is sumi with parchment mono caps; row dividers 3px sumi (2px pressed-well when dense); rows 14.5px+." }
],
"qualityRules": {
"do": [
"Keep the ground warm parchment and color planes flat; let one field dominate each region.",
"Inked sumi contour before any color; hard offset shadow for depth, never blur.",
"Reserve the registration offset for headlines and mastheads, and scanlines for headers and media frames.",
"Set plate codes, offsets, and metadata in mono; everything else in serif/sans."
],
"dont": [
"Use a white or cream-pastel ground, smooth gradients, glass blur, or soft neumorphic depth.",
"Round card or button corners, or leave browser-default form controls visible.",
"Wallpaper scanlines or treat the glitch as random illegible damage.",
"Solve hierarchy with many fighting accents when one dominant plane and the offset can do the work."
]
}
}