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 each view as a readable sequence of spotlit koma panels separated by wide structural gutters. Major panels span multiple rows or columns; adjacency implies the order of reading. At least one region per view is a quiet release. Gutters stay visibly wide at every breakpoint.
Panel scale first, then the docked caption strip, then the carved-serif heading, then the single vermilion spotlight on the focal frame. A region looks framed and authored before it looks interactive.
Alternate dense data panels with open breathing panels; never run high-detail frames edge to edge across the whole canvas.
Every major panel is a lit koma — a full 3px sumi frame plus an offset solid-ink shadow block (focal: vermilion offset). A docked uppercase-mono caption strip names the beat. The asymmetric grid carries a tall portrait panel and a wide panoramic one. The focal frame holds the single vermilion spot. One speech-bubble margin note appears at most once per view for human guidance.
Desktop uses an asymmetric multi-fr composition with mixed spans (a tall portrait scene panel + wide panoramic panels); tablet keeps one hero frame; mobile becomes a stacked single-column panel reel with kept gutters and reordered narrative priority. minmax(0,1fr) tracks and min-width:0 children keep grids from blowing out.
Oversized dark gutters are the silence between beats — a narrative pause, not leftover space. They tighten but never vanish on mobile.
Paced: compressed data frames balanced by open release frames.
Renders from ~390px mobile to 2560px+ ultra-wide; contained content caps and centres on ultra-wide, only the full-bleed hero spans 100vw; stacks to a single column on mobile with no horizontal overflow.
mokuhanga
Mokuhanga woodblock nocturnes on the dark: flat carved sumi contours, a muted indigo field, one vermilion spot, woodgrain inside the colour blocks, on off-white kozo paper. Picture and interface read as one printed night.
One full-bleed hero nocturne on the landing; framed scene panels (the 'now lit' koma) inside embodiment and dashboard. Never the apparatus (no press, block, or paper sheet as subject); no text, letters, or logos in the image.
# Tobari
## Philosophy
Tobari — the veil of night that falls over a sequential page — stages an interface the way a manga page is read after the lights go down: as a sequence of spotlit panels on the dark. Where the daytime page reads black on white, Tobari reads off-white kozo on deep indigo night. Structure is the drama. Each major region is a spotlit koma: a lifted indigo panel carrying a full sumi-ink frame and an offset solid-ink shadow block, so it reads printed and stacked rather than soft and floating. A docked uppercase-mono caption strip names the beat. Wide, structural dark gutters between frames are the pause — the ma — and never collapse to save a row. The asymmetric grid mixes a tall portrait panel and a wide panoramic one, and the focal frame carries the single vermilion spotlight: the beat the whole page was paced toward. Imagery is mokuhanga woodblock — carved sumi contours, a flat indigo field, one vermilion spot — the same grammar that governs the colour, so picture and interface read as one printed night.
### Values
- Spotlit framing: every region is a lit koma with a full ink frame and an offset print-shadow, so the reader knows exactly where to look.
- The gutter is the silence: wide dark intervals between frames carry the pause that makes a reveal land.
- One vermilion beat: the single spot of vermilion marks the focal moment per view, reserved like a highlighter.
- Read on the dark: a deep-indigo night ground, not white — drama by contrast, off-white kozo text for legibility.
- Sequential readability: size, caption, and adjacency imply an order of attention before any menu does.
- Printed material honesty: frames and offset shadow blocks feel inked and stacked, never soft glass or vague gradient.
### Anti-Values
- A white or cream surface anywhere — the language lives on the dark.
- A single accent edge or top-rule standing in for a full four-side frame.
- Borderless dissolving panels, soft glassmorphism, or vague gradients.
- Even card grids that flatten pacing, or gutters that collapse on mobile.
- Emoji or symbol glyphs on controls; novelty comic gimmicks like constant speech bubbles.
## Tokens
### Colors
| Name | Value |
|------|-------|
| bg | `#0E1A33` |
| surface | `#16264A` |
| surface_2 | `#1E315C` |
| sumi | `#0A1124` |
| text | `#F2ECDD` |
| muted | `#9FB0CE` |
| border | `#0A1124` |
| accent | `#E8472A` |
| on_accent | `#FFF6EC` |
| indigo | `#5B7FB9` |
| indigo_deep | `#3A5790` |
| success | `#4FB286` |
| warning | `#E0A53D` |
| error | `#E8472A` |
| info | `#5B7FB9` |
### Typography
- **Base Size**: 17px
- **Body Font**: 'Zen Kaku Gothic New','IBM Plex Sans JP','Inter',system-ui,sans-serif
- **Heading Font**: 'Shippori Mincho',Georgia,serif
- **Mono Font**: 'Azeret Mono',ui-monospace,monospace
- **Heading Weight**: 800
- **Heading Transform**: none
- **Letter Spacing**: -0.01em
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Azeret+Mono:wght@400;500;600&family=Shippori+Mincho:wght@500;600;700;800&family=Zen+Kaku+Gothic+New:wght@400;500;700;900&display=swap
### Radii
- **None**: 0px
- **Md**: 16px
- **Lg**: 24px
- **Full**: 9999px
### Shadows
- **Print Sm**: 6px 6px 0 #0A1124
- **Print Md**: 10px 10px 0 #0A1124
- **Print Lg**: 16px 16px 0 #0A1124
- **Print Verm**: 10px 10px 0 #E8472A
- **Soft**: 0 18px 44px rgba(5,9,20,.55)
### Spacing
- **Base**: 8px
- **Scale**: [4,8,12,16,20,24,28,32,40,48,64]
### Surfaces
- **Treatment**: flat lifted indigo panels on a deep-indigo night ground
- **Card Style**: spotlit koma: lifted indigo surface, full 3px sumi frame, offset solid-ink shadow block; focal panel carries a vermilion offset shadow
- **Texture**: halftone dots and woodgrain confined to emphasis zones, never washed across the page
### Borders
- **Default Width**: 3px
- **Bold Width**: 5px
- **Style**: solid
- **Character**: full four-side sumi-ink frames that feel carved with a technical pen; never a single accent edge
### Motion
- **Duration**: 600ms
- **Easing**: cubic-bezier(0.2,0.8,0.2,1)
- **Philosophy**: settled-by-default; panels rise in on scroll and the night settles via a gentle hero parallax; respects prefers-reduced-motion
## Rules
### Composition
Compose each view as a readable sequence of spotlit koma panels separated by wide structural gutters. Major panels span multiple rows or columns; adjacency implies the order of reading. At least one region per view is a quiet release. Gutters stay visibly wide at every breakpoint.
### Hierarchy
Panel scale first, then the docked caption strip, then the carved-serif heading, then the single vermilion spotlight on the focal frame. A region looks framed and authored before it looks interactive.
### Density
Alternate dense data panels with open breathing panels; never run high-detail frames edge to edge across the whole canvas.
### Signature
Every major panel is a lit koma — a full 3px sumi frame plus an offset solid-ink shadow block (focal: vermilion offset). A docked uppercase-mono caption strip names the beat. The asymmetric grid carries a tall portrait panel and a wide panoramic one. The focal frame holds the single vermilion spot. One speech-bubble margin note appears at most once per view for human guidance.
## Layout
### Grid
Desktop uses an asymmetric multi-fr composition with mixed spans (a tall portrait scene panel + wide panoramic panels); tablet keeps one hero frame; mobile becomes a stacked single-column panel reel with kept gutters and reordered narrative priority. minmax(0,1fr) tracks and min-width:0 children keep grids from blowing out.
### Whitespace
Oversized dark gutters are the silence between beats — a narrative pause, not leftover space. They tighten but never vanish on mobile.
### Density
Paced: compressed data frames balanced by open release frames.
### Responsive
Renders from ~390px mobile to 2560px+ ultra-wide; contained content caps and centres on ultra-wide, only the full-bleed hero spans 100vw; stacks to a single column on mobile with no horizontal overflow.
### Breakpoints
- **Ultrawide**: 1600px+
- **Desktop**: 981px-1599px
- **Tablet**: 641px-980px
- **Mobile**: <=640px
## Guidance
### Do
- Keep the deep-indigo night ground; frame every koma on all four sides.
- Reserve vermilion for one spotlight beat per view; use indigo as the cool register and pine for success.
- Dock uppercase-mono caption strips to name beats and modes.
- Hold the gutters wide; let at least one frame breathe.
- Draw imagery from the mokuhanga technique — carved contours, flat indigo field, one vermilion spot.
### Don't
- Introduce a white or cream surface, or a soft glassmorphic panel.
- Replace a full frame with a single accent edge or top-rule.
- Round corners off the {0,16,24,9999} set, or use vague gradients.
- Nest cards, or collapse the gutters on small screens.
- Put emoji or symbol glyphs on controls or in copy.
### Accessibility
Off-white kozo on deep indigo clears WCAG AA for body text; high-contrast pairings (kozo-on-sumi, vermilion-on-kozo) carry emphasis. Vermilion is never the only signal — status also carries a mono label. Focus is a visible vermilion frame on every control. Motion is gated on prefers-reduced-motion.
## Imagery Direction
### Pairs With
mokuhanga
### Summary
Mokuhanga woodblock nocturnes on the dark: flat carved sumi contours, a muted indigo field, one vermilion spot, woodgrain inside the colour blocks, on off-white kozo paper. Picture and interface read as one printed night.
### Subjects
- a breaking wave under a dark mountain at night
- a lantern street after dusk
- a last train under a low crescent moon
- a quiet harbour gate
### Usage
One full-bleed hero nocturne on the landing; framed scene panels (the 'now lit' koma) inside embodiment and dashboard. Never the apparatus (no press, block, or paper sheet as subject); no text, letters, or logos in the image.
---
version: "alpha"
name: "Tobari"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#0E1A33"
surface: "#16264A"
surface_2: "#1E315C"
sumi: "#0A1124"
text: "#F2ECDD"
muted: "#9FB0CE"
border: "#0A1124"
accent: "#E8472A"
on_accent: "#FFF6EC"
indigo: "#5B7FB9"
indigo_deep: "#3A5790"
success: "#4FB286"
warning: "#E0A53D"
error: "#E8472A"
info: "#5B7FB9"
typography:
headline-lg:
fontFamily: "'Shippori Mincho',Georgia,serif"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.01em"
headline-md:
fontFamily: "'Shippori Mincho',Georgia,serif"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.01em"
body-md:
fontFamily: "'Zen Kaku Gothic New','IBM Plex Sans JP','Inter',system-ui,sans-serif"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.01em"
label-md:
fontFamily: "'Azeret Mono',ui-monospace,monospace"
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: "12px"
lg: "16px"
xl: "20px"
2xl: "24px"
3xl: "28px"
4xl: "32px"
step-8: "40px"
step-9: "48px"
step-10: "64px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_2:
backgroundColor: "{colors.surface_2}"
color-reference-sumi:
backgroundColor: "{colors.sumi}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-indigo:
backgroundColor: "{colors.indigo}"
color-reference-indigo_deep:
backgroundColor: "{colors.indigo_deep}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "#000000"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Tobari
## Overview
Tobari — the veil of night that falls over a sequential page — stages an interface the way a manga page is read after the lights go down: as a sequence of spotlit panels on the dark. Where the daytime page reads black on white, Tobari reads off-white kozo on deep indigo night. Structure is the drama. Each major region is a spotlit koma: a lifted indigo panel carrying a full sumi-ink frame and an offset solid-ink shadow block, so it reads printed and stacked rather than soft and floating. A docked uppercase-mono caption strip names the beat. Wide, structural dark gutters between frames are the pause — the ma — and never collapse to save a row. The asymmetric grid mixes a tall portrait panel and a wide panoramic one, and the focal frame carries the single vermilion spotlight: the beat the whole page was paced toward. Imagery is mokuhanga woodblock — carved sumi contours, a flat indigo field, one vermilion spot — the same grammar that governs the colour, so picture and interface read as one printed night.
### Values
- Spotlit framing: every region is a lit koma with a full ink frame and an offset print-shadow, so the reader knows exactly where to look.
- The gutter is the silence: wide dark intervals between frames carry the pause that makes a reveal land.
- One vermilion beat: the single spot of vermilion marks the focal moment per view, reserved like a highlighter.
- Read on the dark: a deep-indigo night ground, not white — drama by contrast, off-white kozo text for legibility.
- Sequential readability: size, caption, and adjacency imply an order of attention before any menu does.
- Printed material honesty: frames and offset shadow blocks feel inked and stacked, never soft glass or vague gradient.
### Anti-Values
- A white or cream surface anywhere — the language lives on the dark.
- A single accent edge or top-rule standing in for a full four-side frame.
- Borderless dissolving panels, soft glassmorphism, or vague gradients.
- Even card grids that flatten pacing, or gutters that collapse on mobile.
- Emoji or symbol glyphs on controls; novelty comic gimmicks like constant speech bubbles.
## 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 | `#0E1A33` |
| surface | `#16264A` |
| surface_2 | `#1E315C` |
| sumi | `#0A1124` |
| text | `#F2ECDD` |
| muted | `#9FB0CE` |
| border | `#0A1124` |
| accent | `#E8472A` |
| on_accent | `#FFF6EC` |
| indigo | `#5B7FB9` |
| indigo_deep | `#3A5790` |
| success | `#4FB286` |
| warning | `#E0A53D` |
| error | `#E8472A` |
| info | `#5B7FB9` |
## Typography
- **Headline-Lg**: 'Shippori Mincho',Georgia,serif, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: 'Shippori Mincho',Georgia,serif, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: 'Zen Kaku Gothic New','IBM Plex Sans JP','Inter',system-ui,sans-serif, 17px, weight 400, line-height 1.5.
- **Label-Md**: 'Azeret Mono',ui-monospace,monospace, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `12px`
- **Lg**: `16px`
- **Xl**: `20px`
- **2xl**: `24px`
- **3xl**: `28px`
- **4xl**: `32px`
- **Step-8**: `40px`
- **Step-9**: `48px`
- **Step-10**: `64px`
### Grid
Desktop uses an asymmetric multi-fr composition with mixed spans (a tall portrait scene panel + wide panoramic panels); tablet keeps one hero frame; mobile becomes a stacked single-column panel reel with kept gutters and reordered narrative priority. minmax(0,1fr) tracks and min-width:0 children keep grids from blowing out.
### Whitespace
Oversized dark gutters are the silence between beats — a narrative pause, not leftover space. They tighten but never vanish on mobile.
### Density
Paced: compressed data frames balanced by open release frames.
### Responsive
Renders from ~390px mobile to 2560px+ ultra-wide; contained content caps and centres on ultra-wide, only the full-bleed hero spans 100vw; stacks to a single column on mobile with no horizontal overflow.
### Breakpoints
- **Ultrawide**: 1600px+
- **Desktop**: 981px-1599px
- **Tablet**: 641px-980px
- **Mobile**: <=640px
## Elevation & Depth
### Shadows
- **Print Sm**: 6px 6px 0 #0A1124
- **Print Md**: 10px 10px 0 #0A1124
- **Print Lg**: 16px 16px 0 #0A1124
- **Print Verm**: 10px 10px 0 #E8472A
- **Soft**: 0 18px 44px rgba(5,9,20,.55)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: flat lifted indigo panels on a deep-indigo night ground
- **Card Style**: spotlit koma: lifted indigo surface, full 3px sumi frame, offset solid-ink shadow block; focal panel carries a vermilion offset shadow
- **Texture**: halftone dots and woodgrain confined to emphasis zones, never washed across the page
### Borders
- **Default Width**: 3px
- **Bold Width**: 5px
- **Style**: solid
- **Character**: full four-side sumi-ink frames that feel carved with a technical pen; never a single accent edge
## Components
### Composition
Compose each view as a readable sequence of spotlit koma panels separated by wide structural gutters. Major panels span multiple rows or columns; adjacency implies the order of reading. At least one region per view is a quiet release. Gutters stay visibly wide at every breakpoint.
### Hierarchy
Panel scale first, then the docked caption strip, then the carved-serif heading, then the single vermilion spotlight on the focal frame. A region looks framed and authored before it looks interactive.
### Density
Alternate dense data panels with open breathing panels; never run high-detail frames edge to edge across the whole canvas.
### Signature
Every major panel is a lit koma — a full 3px sumi frame plus an offset solid-ink shadow block (focal: vermilion offset). A docked uppercase-mono caption strip names the beat. The asymmetric grid carries a tall portrait panel and a wide panoramic one. The focal frame holds the single vermilion spot. One speech-bubble margin note appears at most once per view for human guidance.
## 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-019ef67c-4756-7d41-b3b5-2ee4b0db319e/DESIGN.with-shadcn.md`.
The shadcn page also exposes optional machine-readable files for automation, but the human-facing handoff is DESIGN.md with shadcn.
Install recommended primitives with `npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table`.
Use these primitives in shadcn apps:
- button
- card
- input
- textarea
- select
- dialog
- sheet
- tabs
- badge
- separator
- checkbox
- switch
- slider
- tooltip
- dropdown-menu
- table
Implementation rule for agents: import shadcn primitives from `@/components/ui/*`, apply the generated CSS variables first, then compose the language-specific recipes from the companion MD. Katagami remains the source of truth; shadcn names are the implementation surface.
## Do's and Don'ts
- Do Keep the deep-indigo night ground; frame every koma on all four sides.
- Do Reserve vermilion for one spotlight beat per view; use indigo as the cool register and pine for success.
- Do Dock uppercase-mono caption strips to name beats and modes.
- Do Hold the gutters wide; let at least one frame breathe.
- Do Draw imagery from the mokuhanga technique — carved contours, flat indigo field, one vermilion spot.
- Don't Introduce a white or cream surface, or a soft glassmorphic panel.
- Don't Replace a full frame with a single accent edge or top-rule.
- Don't Round corners off the {0,16,24,9999} set, or use vague gradients.
- Don't Nest cards, or collapse the gutters on small screens.
- Don't Put emoji or symbol glyphs on controls or in copy.
### Accessibility
Off-white kozo on deep indigo clears WCAG AA for body text; high-contrast pairings (kozo-on-sumi, vermilion-on-kozo) carry emphasis. Vermilion is never the only signal — status also carries a mono label. Focus is a visible vermilion frame on every control. Motion is gated on prefers-reduced-motion.
## Imagery Direction
### Pairs With
mokuhanga
### Summary
Mokuhanga woodblock nocturnes on the dark: flat carved sumi contours, a muted indigo field, one vermilion spot, woodgrain inside the colour blocks, on off-white kozo paper. Picture and interface read as one printed night.
### Subjects
- a breaking wave under a dark mountain at night
- a lantern street after dusk
- a last train under a low crescent moon
- a quiet harbour gate
### Usage
One full-bleed hero nocturne on the landing; framed scene panels (the 'now lit' koma) inside embodiment and dashboard. Never the apparatus (no press, block, or paper sheet as subject); no text, letters, or logos in the image.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "tobari",
"type": "registry:theme",
"title": "Tobari shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#0E1A33",
"foreground": "#F2ECDD",
"card": "#16264A",
"card-foreground": "#F2ECDD",
"popover": "#16264A",
"popover-foreground": "#F2ECDD",
"primary": "#F2ECDD",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#9FB0CE",
"muted-foreground": "#F2ECDD",
"accent": "#E8472A",
"accent-foreground": "#ffffff",
"destructive": "#E8472A",
"border": "#0A1124",
"input": "#0A1124",
"ring": "#E8472A",
"chart-1": "#F2ECDD",
"chart-2": "#f4f4f5",
"chart-3": "#E8472A",
"chart-4": "#4FB286",
"chart-5": "#E0A53D",
"sidebar": "#16264A",
"sidebar-foreground": "#F2ECDD",
"sidebar-primary": "#F2ECDD",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#5B7FB9",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#0A1124",
"sidebar-ring": "#E8472A",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#F2ECDD",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#E8472A",
"accent-foreground": "#ffffff",
"destructive": "#E8472A",
"border": "#303642",
"input": "#303642",
"ring": "#E8472A",
"chart-1": "#F2ECDD",
"chart-2": "#f4f4f5",
"chart-3": "#E8472A",
"chart-4": "#4FB286",
"chart-5": "#E0A53D",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#F2ECDD",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#E8472A",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#E8472A",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ef67c-4756-7d41-b3b5-2ee4b0db319e",
"slug": "tobari",
"componentManifest": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
"nativeTokenNames": {
"colors": [
"accent",
"bg",
"border",
"error",
"indigo",
"indigo_deep",
"info",
"muted",
"on_accent",
"success",
"sumi",
"surface",
"surface_2",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"mono_font"
],
"radii": [
"full",
"lg",
"md",
"none"
],
"shadows": [
"print_lg",
"print_md",
"print_sm",
"print_verm",
"soft"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"card_style",
"texture",
"treatment"
],
"borders": [
"bold_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 Tobariand 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: #0E1A33;
--foreground: #F2ECDD;
--card: #16264A;
--card-foreground: #F2ECDD;
--popover: #16264A;
--popover-foreground: #F2ECDD;
--primary: #F2ECDD;
--primary-foreground: #111111;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #9FB0CE;
--muted-foreground: #F2ECDD;
--accent: #E8472A;
--accent-foreground: #ffffff;
--destructive: #E8472A;
--border: #0A1124;
--input: #0A1124;
--ring: #E8472A;
--chart-1: #F2ECDD;
--chart-2: #f4f4f5;
--chart-3: #E8472A;
--chart-4: #4FB286;
--chart-5: #E0A53D;
--sidebar: #16264A;
--sidebar-foreground: #F2ECDD;
--sidebar-primary: #F2ECDD;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #5B7FB9;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #0A1124;
--sidebar-ring: #E8472A;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #F2ECDD;
--primary-foreground: #111111;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #E8472A;
--accent-foreground: #ffffff;
--destructive: #E8472A;
--border: #303642;
--input: #303642;
--ring: #E8472A;
--chart-1: #F2ECDD;
--chart-2: #f4f4f5;
--chart-3: #E8472A;
--chart-4: #4FB286;
--chart-5: #E0A53D;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #F2ECDD;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #E8472A;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #E8472A;
--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 TobariShadcnKit() {
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">Tobari</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": "tobari",
"type": "registry:theme",
"title": "Tobari",
"description": "The veil of night over a sequential page. A dark mode reader: deep-indigo night ground, sumi-ink frames with offset solid-ink shadow blocks (printed, stacked), one vermilion spotlight spot and a cool indigo register. Carved serif display (Shippori Mincho) + Zen Kaku Gothic body + Azeret Mono caption strips. Square corners; full ink frames (never a single accent edge); structural dark gutters carry the silence between panels.",
"cssVars": {
"theme": {
"font-sans": "Zen Kaku Gothic New, IBM Plex Sans JP, Inter, system-ui, sans-serif",
"font-mono": "Azeret Mono, ui-monospace, monospace",
"font-display": "Shippori Mincho, Georgia, serif",
"font-heading": "Shippori Mincho, Georgia, serif",
"radius": "0px"
},
"dark": {
"background": "#0E1A33",
"foreground": "#F2ECDD",
"card": "#16264A",
"card-foreground": "#F2ECDD",
"popover": "#0A1124",
"popover-foreground": "#F2ECDD",
"primary": "#E8472A",
"primary-foreground": "#FFF6EC",
"secondary": "#0A1124",
"secondary-foreground": "#F2ECDD",
"accent": "#5B7FB9",
"accent-foreground": "#0A1124",
"muted": "#1E315C",
"muted-foreground": "#9FB0CE",
"destructive": "#E8472A",
"destructive-foreground": "#FFF6EC",
"success": "#4FB286",
"warning": "#E0A53D",
"border": "#0A1124",
"input": "#0A1124",
"ring": "#E8472A",
"radius": "0px"
}
}
}
# Tobari shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019ef67c-4756-7d41-b3b5-2ee4b0db319e`
Slug: `tobari`
## Intent
Tobari — the veil of night that falls over a sequential page — stages an interface the way a manga page is read after the lights go down: as a sequence of spotlit panels on the dark. Where the daytime page reads black on white, Tobari reads off-white kozo on deep indigo night. Structure is the drama. Each major region is a spotlit koma: a lifted indigo panel carrying a full sumi-ink frame and an offset solid-ink shadow block, so it reads printed and stacked rather than soft and floating. A docked uppercase-mono caption strip names the beat. Wide, structural dark gutters between frames are the pause — the ma — and never collapse to save a row. The asymmetric grid mixes a tall portrait panel and a wide panoramic one, and the focal frame carries the single vermilion spotlight: the beat the whole page was paced toward. Imagery is mokuhanga woodblock — carved sumi contours, a flat indigo field, one vermilion spot — the same grammar that governs the colour, so picture and interface read as one printed night.
## Required primitives
- button
- card
- input
- textarea
- select
- dialog
- sheet
- tabs
- badge
- separator
- checkbox
- switch
- slider
- tooltip
- dropdown-menu
- table
Install with `npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table`.
## Token cues
Colors:
{
"bg": "#0E1A33",
"surface": "#16264A",
"surface_2": "#1E315C",
"sumi": "#0A1124",
"text": "#F2ECDD",
"muted": "#9FB0CE",
"border": "#0A1124",
"accent": "#E8472A",
"on_accent": "#FFF6EC",
"indigo": "#5B7FB9",
"indigo_deep": "#3A5790",
"success": "#4FB286",
"warning": "#E0A53D",
"error": "#E8472A",
"info": "#5B7FB9"
}
Typography:
{
"base_size": "17px",
"body_font": "'Zen Kaku Gothic New','IBM Plex Sans JP','Inter',system-ui,sans-serif",
"heading_font": "'Shippori Mincho',Georgia,serif",
"mono_font": "'Azeret Mono',ui-monospace,monospace",
"heading_weight": "800",
"heading_transform": "none",
"letter_spacing": "-0.01em",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Azeret+Mono:wght@400;500;600&family=Shippori+Mincho:wght@500;600;700;800&family=Zen+Kaku+Gothic+New:wght@400;500;700;900&display=swap"
}
## Visual character to preserve
- Make the source language's structural identity visible in every component state.
## ShadSync visual profile
{
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "solid",
"underlay": true,
"grain": true,
"stickerBadges": false,
"motion": "lift",
"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/tobari/registry-theme.json` variables, then use these recipes for composition and state design.
- Preserve Katagami token names as source metadata; shadcn semantic names are only the export surface.
- Do: Keep the deep-indigo night ground; frame every koma on all four sides.; Reserve vermilion for one spotlight beat per view; use indigo as the cool register and pine for success.; Dock uppercase-mono caption strips to name beats and modes.; Hold the gutters wide; let at least one frame breathe.; Draw imagery from the mokuhanga technique — carved contours, flat indigo field, one vermilion spot.
- Do not: Introduce a white or cream surface, or a soft glassmorphic panel.; Replace a full frame with a single accent edge or top-rule.; Round corners off the {0,16,24,9999} set, or use vague gradients.; Nest cards, or collapse the gutters on small screens.; Put emoji or symbol glyphs on controls or in copy.
## 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 TobariShadcnKit() {
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">Tobari</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 an asymmetric multi-fr composition with mixed spans (a tall portrait scene panel + wide panoramic panels); tablet keeps one hero frame; mobile becomes a stacked single-column panel reel with kept gutters and reordered narrative priority. minmax(0,1fr) tracks and min-width:0 children keep grids from blowing out.",
"whitespace": "Oversized dark gutters are the silence between beats — a narrative pause, not leftover space. They tighten but never vanish on mobile.",
"density": "Paced: compressed data frames balanced by open release frames.",
"responsive": "Renders from ~390px mobile to 2560px+ ultra-wide; contained content caps and centres on ultra-wide, only the full-bleed hero spans 100vw; stacks to a single column on mobile with no horizontal overflow.",
"breakpoints": {
"ultrawide": "1600px+",
"desktop": "981px-1599px",
"tablet": "641px-980px",
"mobile": "<=640px"
}
}
{
"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": "Tobari", "slug": "tobari" },
"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": [
"Dark mode only — deep-indigo night ground (#0E1A33), off-white kozo text. Never a white surface.",
"Every panel is a spotlit koma: a 3px sumi-ink frame on all four sides plus an offset solid-ink shadow block (box-shadow: 10px 10px 0 #0A1124) so it reads printed and stacked. Never a single accent edge.",
"One vermilion spot (#E8472A) is the spotlight — primary action, the focal panel's offset shadow, the active beat. Indigo (#5B7FB9) is the cool secondary register; pine-green marks success.",
"Caption strips are uppercase Azeret Mono labels docked to a panel's top edge on a sumi or vermilion fill — the editorial beat.",
"Square corners (radius 0); carved Shippori Mincho serif display; structural dark gutters separate panels — the silence between frames."
],
"visualProfile": {
"family": "editorial",
"material": "flat",
"contour": "framed",
"border": "solid",
"underlay": true,
"grain": true,
"stickerBadges": false,
"motion": "still",
"density": "balanced",
"accents": ["accent", "success", "warning"]
},
"shots": [
{
"id": "application-shell",
"title": "The Yobanashi night desk",
"viewport": "desktop",
"primitives": ["button", "card", "input", "select", "tabs", "badge", "separator", "table"],
"composition": "An editor's night desk: a sumi-ink rail, KPI koma panels with offset ink shadows (the focal one carries a vermilion offset shadow + a vermilion caption strip), a galley ledger with status badges, and a pacing panel with vermilion progress tracks.",
"mustShow": ["vermilion primary action vs sumi-ink secondary action", "spotlit framed koma panels with an offset solid-ink shadow block (not soft glass, not a single edge)", "docked uppercase mono caption strips", "vermilion + indigo + pine status badges on the dark"],
"avoid": ["white or cream surfaces", "single accent edges or top-rules instead of full frames", "rounded corners", "soft glassmorphism or vague gradients", "borderless dissolving panels"],
"scene": {
"eyebrow": "the desk",
"headline": "Tonight's read — chapter seven",
"description": "An editor's desk staged as spotlit panels on the dark, where every spread is registered to a pacing beat: set, on the wire, toned, holding.",
"primaryAction": "Send to galley",
"secondaryAction": "Open margins",
"stats": [
{ "label": "panels set", "value": "38", "tone": "accent" },
{ "label": "on the wire", "value": "6", "tone": "info" },
{ "label": "toned", "value": "21", "tone": "success" }
],
"rows": [
{ "label": "The wave page", "value": "ch.7 · cols 1–4 · midnight", "status": "set" },
{ "label": "Lantern street", "value": "ch.7 · cols 5–6 · dusk", "status": "toned" },
{ "label": "The empty desk", "value": "ch.7 · col 7", "status": "holding" },
{ "label": "Last train", "value": "ch.6 · cols 1–3 · indigo", "status": "filed" }
],
"statuses": ["Set", "Toned", "Holding", "Filed"]
}
},
{
"id": "detail-editor",
"title": "Send a spread to galley",
"viewport": "tablet",
"primitives": ["button", "card", "input", "textarea", "select", "checkbox", "switch", "slider", "dialog", "sheet"],
"composition": "A formal send flow inside a framed koma: mono-labelled fields on sumi fills, an invalid (vermilion) column-span state, a carry-tone switch, a span slider with a vermilion track, and a send-confirm dialog as a lit panel on the night.",
"mustShow": ["vermilion focus ring on inputs over sumi fills", "an invalid (vermilion) field state", "send-confirm dialog as a framed koma with an offset ink shadow", "real editorial values, no lorem"],
"avoid": ["unstyled browser controls", "white dialogs", "missing labels", "nested cards", "rounded inputs"],
"scene": {
"eyebrow": "the bench",
"headline": "Send — the wave page",
"description": "A spread form proving mono labels, an invalid column-span state, a carry-tone toggle, a span slider, and a send confirm.",
"primaryAction": "Send to galley",
"secondaryAction": "Save draft",
"fields": [
{ "label": "Spread slug", "value": "The wave page", "type": "text" },
{ "label": "Column span", "value": "— assign a span before sending", "type": "invalid" },
{ "label": "Tone field", "value": "Midnight indigo", "type": "select" },
{ "label": "Carry tone to next page", "value": "on", "type": "switch" }
],
"statuses": ["Set", "Invalid", "Carried"]
}
},
{
"id": "data-operations",
"title": "Galley queue",
"viewport": "mobile",
"primitives": ["button", "tabs", "badge", "dropdown-menu", "table", "tooltip", "separator"],
"composition": "A narrow galley queue: stacked serif slug rows on the dark, per-row dropdown actions, status badges, tooltips, and a holding state — single column, gutters preserved.",
"mustShow": ["responsive single-column reflow with kept gutters", "carved serif slug rows", "row action menu on a sumi popover with a vermilion spike item", "status badges", "a holding state"],
"avoid": ["desktop-only tables", "horizontal overflow", "white menus", "generic shadcn spacing without Tobari's framed character"],
"scene": {
"eyebrow": "galley",
"headline": "Galley queue",
"description": "A compact queue with rows, menus, tooltips, status badges, and a holding affordance.",
"primaryAction": "Send",
"secondaryAction": "Filter",
"rows": [
{ "label": "The wave page", "value": "ch.7", "status": "set" },
{ "label": "Lantern street", "value": "ch.7", "status": "toned" },
{ "label": "The empty desk", "value": "ch.7", "status": "holding" }
],
"statuses": ["Set", "Toned", "Holding"]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Hierarchy: vermilion primary (one spotlight) with a 4px sumi offset block; sumi-ink secondary; transparent ghost with a text frame; all square, one shared height, Azeret Mono uppercase label, a small square dot, never an emoji." },
{ "primitive": "card", "intent": "A spotlit koma: lifted indigo surface (#16264A) with a full 3px sumi frame and an offset solid-ink shadow block; the focal card swaps to a vermilion offset shadow. No single accent edge, no soft glass." },
{ "primitive": "input", "intent": "Sumi (#0A1124) fill, 3px indigo-deep frame, square; frame turns vermilion on focus and on invalid; mono label above. Never a browser default." },
{ "primitive": "textarea", "intent": "Margin notes with the same sumi fill and vermilion focus rhythm; Zen Kaku Gothic body, generous, square." },
{ "primitive": "select", "intent": "Tone-field / chapter filtering with a square sumi trigger and clear selection contrast; explicit styled menu, never native." },
{ "primitive": "dialog", "intent": "A formal 'Send this spread to the galley?' notice as a lit koma — centered, square, framed, offset ink shadow, on a dimmed night." },
{ "primitive": "sheet", "intent": "The margins / archive side rail in sumi, sliding from the edge with a caption strip header." },
{ "primitive": "tabs", "intent": "Switch Desk / Galley / Margins; the active tab carries a vermilion caption-strip fill, not an underline rule." },
{ "primitive": "badge", "intent": "Flat status chip vocabulary: set (vermilion), toned (pine tint), holding (indigo tint), filed (sumi). Uppercase mono on a faint fill." },
{ "primitive": "separator", "intent": "An open dark gutter or a faint inset hairline within a panel — never a heavy rule across a koma." },
{ "primitive": "checkbox", "intent": "Lettering-locked opt-ins: a square vermilion box with a sumi check; clear vermilion focus frame." },
{ "primitive": "switch", "intent": "Carry-tone toggle; on is a vermilion track, off is a flat indigo-deep track; square knob in kozo off-white." },
{ "primitive": "slider", "intent": "Column span / pacing weight with a vermilion fill on an indigo-deep track and a square kozo thumb with an offset shadow." },
{ "primitive": "tooltip", "intent": "Concise body notes on a sumi popover above compact controls, square, framed." },
{ "primitive": "dropdown-menu", "intent": "Per-row spread actions on a sumi popover with a vermilion-marked destructive 'spike' item." },
{ "primitive": "table", "intent": "The galley ledger: mono header, carved-serif slug rows on the dark, faint inset row separators (no heavy rules), one status badge per row, a holding empty state." }
]
}