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.
A quiet asymmetrical grid: reserve one column as the ma bay, place primary work slightly off-centre, let secondary controls sit in narrow vertical planes. Major groups get 48-96px of visible interval. Alignment and silence create rhythm.
Priority from spatial isolation, illumination, shadow density, and type scale. Display and numbers in Noto Serif JP; labels in IBM Plex Mono. The one earth accent appears only on a mark, a selection, or a single call.
Medium-low with deliberate pauses: lists compact enough for work but never crowded; full-height controls; the screen feels edited rather than empty.
Medium-low; every cluster gets enough void to read as a deliberate pause.
Desktop uses an asymmetric grid with one reserved empty ma bay; content offsets into the remaining columns, max width ~1240-1360px.
Whitespace is active structure: 48px minimum between primary regions, 64px around decision areas, 96px where the reader should slow.
Collapse side rails beneath the main panel on tablet; stack all panels on mobile; keep controls 44px minimum; tables become card rows rather than overflow.
Quiet architectural and material photography in the Tadao Ando tradition: bare poured concrete, off-white washi paper, weathered cedar and rough stone, raking daylight and deep restrained shadow, generous empty space. Natural aspect, no text.
doma
NO text, NO letters, NO logos, no people, no gradients as decoration, no glossy sheen, no cultural cliche motifs
# Doma
## Philosophy
Doma (the bare threshold floor of a traditional house) is spatial editing for interfaces. It treats interval, emptiness, and light as structural material rather than leftover space. It draws from ma (the active pause), wabi-sabi, MUJI no-brand restraint, Kenya Hara's emptiness-as-open-vessel, Naoto Fukasawa's without-thought affordances, and Tadao Ando's disciplined planes of concrete, light, and shadow. Every element earns its place by the silence around it; hierarchy comes from illumination, shadow, and exposed space rather than badges, gradients, or saturated colour.
### Values
- {"name":"Active emptiness","explanation":"White and warm paper fields behave as structural intervals; isolated controls and quiet planes make the pause legible."}
- {"name":"Material restraint","explanation":"Surfaces suggest paper, stone, concrete, and weathered wood through slight texture and edge discipline rather than illustration."}
- {"name":"Quiet affordance","explanation":"Controls read through proportion, placement, weight, and one tactile measure line, avoiding loud colour or decorative state."}
- {"name":"Light as hierarchy","explanation":"A plane that sits deeper in the light reads as more important; priority comes from illumination and space, not a badge or an accent edge."}
- {"name":"Weathered precision","explanation":"The layout is measured and rigorous while micro-texture and one muted earth tone keep it human."}
- {"name":"No-brand neutrality","explanation":"The interface recedes behind the work, using understated typography and sparse labelling."}
### Anti-Values
- {"name":"Ornamental Japanism","explanation":"No cherry blossoms, faux calligraphy, red-sun motifs, or cultural cliche."}
- {"name":"Spa minimalism","explanation":"No beige-on-beige softness or lifestyle calm that weakens function."}
- {"name":"Showroom gloss","explanation":"No glassmorphism, neon, gradient buttons, or polished SaaS hero effects."}
- {"name":"Over-compression","explanation":"The space between objects is part of the content; never pack the screen to prove efficiency."}
### Visual Character
- An asymmetrical grid with one reserved empty ma bay and content offset into the remaining columns.
- Flat warm-paper planes defined by tone and soft elevation - no box borders, no accent edges.
- Large ma intervals (48-96px) around forms, metrics, and navigation.
- Barely-visible concrete-paper texture (low-opacity speckle and thin horizontal shadow bands) instead of gradients.
- Square 0px corners on structure, with only small pills, chips, and avatars fully rounded.
## Tokens
### Colors
| Name | Value |
|------|-------|
| bg | `#FFFFFF` |
| surface | `#F7F5F0` |
| surface_solid | `#FAF9F6` |
| text | `#1A1714` |
| muted | `#7C766D` |
| border | `#D8D2C8` |
| accent | `#8A6F4D` |
| accent_2 | `#77624D` |
| accent_soft | `#EAE3D6` |
| on_accent | `#FAF9F6` |
| success | `#4E6B4A` |
| warning | `#9A6B22` |
| error | `#8B2F2A` |
| info | `#4D6270` |
| stone | `#B8B0A4` |
| weathered_wood | `#77624D` |
### Typography
- **Base Size**: 17px
- **Body Font**: IBM Plex Sans
- **Heading Font**: Noto Serif JP
- **Mono Font**: IBM Plex Mono
- **Heading Weight**: 700
- **Heading Transform**: none
- **Letter Spacing**: -0.02em
- **Line Height**: 1.6
- **Scale Ratio**: 1.25
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=IBM+Plex+Sans:wght@400;500;600&family=Noto+Serif+JP:wght@500;600;700&display=swap
### Radii
- **None**: 0px
- **Md**: 16px
- **Lg**: 24px
- **Full**: 9999px
### Shadows
- **Sm**: 0 1px 2px rgba(26,23,20,0.06)
- **Md**: 0 18px 50px rgba(26,23,20,0.08)
- **Lg**: 0 30px 80px rgba(26,23,20,0.11)
### Spacing
- **Base**: 8px
- **Scale**: ["4px","8px","12px","16px","24px","32px","48px","64px","96px","128px"]
### Surfaces
- **Treatment**: paper
- **Card Style**: Flat warm paper planes defined by surface tone and soft elevation; no box borders, no accent edges.
- **Bg Pattern**: noise
### Borders
- **Default Width**: 1px
- **Accent Width**: 1px
- **Style**: solid
- **Character**: Hairlines survive only as a deliberate ornament system - the ma-seam, the short rule under a mono overline, and table/list dividers - never a box around a card.
### Motion
- **Duration**: 200ms
- **Easing**: cubic-bezier(0.2,0,0.1,1)
- **Philosophy**: deliberate; like a paper screen settling, never bouncing or celebrating.
## Rules
### Composition
A quiet asymmetrical grid: reserve one column as the ma bay, place primary work slightly off-centre, let secondary controls sit in narrow vertical planes. Major groups get 48-96px of visible interval. Alignment and silence create rhythm.
### Hierarchy
Priority from spatial isolation, illumination, shadow density, and type scale. Display and numbers in Noto Serif JP; labels in IBM Plex Mono. The one earth accent appears only on a mark, a selection, or a single call.
### Density
Medium-low with deliberate pauses: lists compact enough for work but never crowded; full-height controls; the screen feels edited rather than empty.
### Signature Patterns
- A reserved empty ma bay: a narrow interval with one rotated mono label and a single hairline seam.
- Planes read through surface tone and soft elevation - the important plane sits deeper in the light with more surrounding space, never a border or an accent edge.
- A soft raking light models the leading plane (light as hierarchy) and recolours with the accent on a palette swap.
- Section headers pair a small IBM Plex Mono overline with a short 32px hairline rule and generous negative space below.
- Interactive focus uses an offset earth outline and a faint earth wash, preserving square 0px corners instead of glow or colour floods.
## Layout
### Density
Medium-low; every cluster gets enough void to read as a deliberate pause.
### Grid
Desktop uses an asymmetric grid with one reserved empty ma bay; content offsets into the remaining columns, max width ~1240-1360px.
### Whitespace
Whitespace is active structure: 48px minimum between primary regions, 64px around decision areas, 96px where the reader should slow.
### Breakpoints
- **Desktop**: 1024px+: asymmetric grid with the empty ma bay
- **Tablet**: 768-1024px: ma bay becomes a top interval, side rails collapse
- **Mobile**: 0-767px: single column, intervals reduce to 32px but stay visible
### Responsive
Collapse side rails beneath the main panel on tablet; stack all panels on mobile; keep controls 44px minimum; tables become card rows rather than overflow.
## Guidance
### Do
- Use pure #FFFFFF for the main ground and warm paper only for material planes.
- Keep letter-spacing at -0.02em; lean on Noto Serif JP + IBM Plex Sans for quiet authority.
- Reserve at least one intentionally empty ma bay in desktop layouts.
- Use 0px square corners for structural UI; reserve 9999px for pills, chips, avatars.
- Express hierarchy with light, shadow, spacing, and type scale before adding colour.
- Use the muted earth accent once per decision, not as a brand wash.
- Keep texture barely visible and always behind content.
### Don't
- Do not box cards in borders, and never give a card an accent edge on any side.
- Do not use gradients as decoration, glossy cards, glassmorphism, or neon washes.
- Do not decorate with stereotypical Japanese motifs, brush fonts, or red circles.
- Do not fill every column; visible emptiness is part of the layout.
- Do not use arbitrary radii (8, 12, 20, 32, 48px).
- Do not centre everything or make symmetrical landing sections.
- Do not add multiple accent colours; one muted earth accent is enough.
### Usage Context
Editorial tools, product inventory, design archives, calm operations dashboards, architecture portfolios, material libraries, and focused planning interfaces where reduction, touch, and careful reading matter.
### Accessibility
Maintain WCAG AA contrast; visible offset earth focus outlines; 44px touch targets; never encode status by colour alone (pills carry a mark and a word); keep texture overlays low-opacity behind content; reduced-motion settles the landing to a readable static document.
## Imagery Direction
### Technique
Quiet architectural and material photography in the Tadao Ando tradition: bare poured concrete, off-white washi paper, weathered cedar and rough stone, raking daylight and deep restrained shadow, generous empty space. Natural aspect, no text.
### Palette
- #FFFFFF
- #F7F5F0
- #1A1714
- #8A6F4D
- #B8B0A4
### Subjects
- concrete threshold and light-seam interiors
- folded off-white paper
- weathered wood and stone material studies
- empty interval rooms with a single blade of light
### Pairs With
doma
### Negative Prompt
NO text, NO letters, NO logos, no people, no gradients as decoration, no glossy sheen, no cultural cliche motifs
### Plate Manifest
- **Hero-Image**: concrete plane with a vertical raking light seam
- **Plate-1**: concrete threshold / morning shadow
- **Plate-2**: folded washi paper
- **Plate-3**: weathered cedar and stone
- **Plate-4**: tall vertical light-seam interval room
---
version: "alpha"
name: "Doma"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#FFFFFF"
surface: "#F7F5F0"
surface_solid: "#FAF9F6"
text: "#1A1714"
muted: "#7C766D"
border: "#D8D2C8"
accent: "#8A6F4D"
accent_2: "#77624D"
accent_soft: "#EAE3D6"
on_accent: "#FAF9F6"
success: "#4E6B4A"
warning: "#9A6B22"
error: "#8B2F2A"
info: "#4D6270"
stone: "#B8B0A4"
weathered_wood: "#77624D"
typography:
headline-lg:
fontFamily: "Noto Serif JP"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Noto Serif JP"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "IBM Plex Sans"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.02em"
label-md:
fontFamily: "IBM Plex Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
md: "16px"
lg: "24px"
full: "9999px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
step-8: "96px"
step-9: "128px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_solid:
backgroundColor: "{colors.surface_solid}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-accent_2:
backgroundColor: "{colors.accent_2}"
color-reference-accent_soft:
backgroundColor: "{colors.accent_soft}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
color-reference-stone:
backgroundColor: "{colors.stone}"
color-reference-weathered_wood:
backgroundColor: "{colors.weathered_wood}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "#ffffff"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Doma
## Overview
Doma (the bare threshold floor of a traditional house) is spatial editing for interfaces. It treats interval, emptiness, and light as structural material rather than leftover space. It draws from ma (the active pause), wabi-sabi, MUJI no-brand restraint, Kenya Hara's emptiness-as-open-vessel, Naoto Fukasawa's without-thought affordances, and Tadao Ando's disciplined planes of concrete, light, and shadow. Every element earns its place by the silence around it; hierarchy comes from illumination, shadow, and exposed space rather than badges, gradients, or saturated colour.
### Values
- {"name":"Active emptiness","explanation":"White and warm paper fields behave as structural intervals; isolated controls and quiet planes make the pause legible."}
- {"name":"Material restraint","explanation":"Surfaces suggest paper, stone, concrete, and weathered wood through slight texture and edge discipline rather than illustration."}
- {"name":"Quiet affordance","explanation":"Controls read through proportion, placement, weight, and one tactile measure line, avoiding loud colour or decorative state."}
- {"name":"Light as hierarchy","explanation":"A plane that sits deeper in the light reads as more important; priority comes from illumination and space, not a badge or an accent edge."}
- {"name":"Weathered precision","explanation":"The layout is measured and rigorous while micro-texture and one muted earth tone keep it human."}
- {"name":"No-brand neutrality","explanation":"The interface recedes behind the work, using understated typography and sparse labelling."}
### Anti-Values
- {"name":"Ornamental Japanism","explanation":"No cherry blossoms, faux calligraphy, red-sun motifs, or cultural cliche."}
- {"name":"Spa minimalism","explanation":"No beige-on-beige softness or lifestyle calm that weakens function."}
- {"name":"Showroom gloss","explanation":"No glassmorphism, neon, gradient buttons, or polished SaaS hero effects."}
- {"name":"Over-compression","explanation":"The space between objects is part of the content; never pack the screen to prove efficiency."}
### Visual Character
- An asymmetrical grid with one reserved empty ma bay and content offset into the remaining columns.
- Flat warm-paper planes defined by tone and soft elevation - no box borders, no accent edges.
- Large ma intervals (48-96px) around forms, metrics, and navigation.
- Barely-visible concrete-paper texture (low-opacity speckle and thin horizontal shadow bands) instead of gradients.
- Square 0px corners on structure, with only small pills, chips, and avatars fully rounded.
## 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 | `#FFFFFF` |
| surface | `#F7F5F0` |
| surface_solid | `#FAF9F6` |
| text | `#1A1714` |
| muted | `#7C766D` |
| border | `#D8D2C8` |
| accent | `#8A6F4D` |
| accent_2 | `#77624D` |
| accent_soft | `#EAE3D6` |
| on_accent | `#FAF9F6` |
| success | `#4E6B4A` |
| warning | `#9A6B22` |
| error | `#8B2F2A` |
| info | `#4D6270` |
| stone | `#B8B0A4` |
| weathered_wood | `#77624D` |
## Typography
- **Headline-Lg**: Noto Serif JP, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Noto Serif JP, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Sans, 17px, weight 400, line-height 1.5.
- **Label-Md**: IBM Plex Mono, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `12px`
- **Lg**: `16px`
- **Xl**: `24px`
- **2xl**: `32px`
- **3xl**: `48px`
- **4xl**: `64px`
- **Step-8**: `96px`
- **Step-9**: `128px`
### Density
Medium-low; every cluster gets enough void to read as a deliberate pause.
### Grid
Desktop uses an asymmetric grid with one reserved empty ma bay; content offsets into the remaining columns, max width ~1240-1360px.
### Whitespace
Whitespace is active structure: 48px minimum between primary regions, 64px around decision areas, 96px where the reader should slow.
### Breakpoints
- **Desktop**: 1024px+: asymmetric grid with the empty ma bay
- **Tablet**: 768-1024px: ma bay becomes a top interval, side rails collapse
- **Mobile**: 0-767px: single column, intervals reduce to 32px but stay visible
### Responsive
Collapse side rails beneath the main panel on tablet; stack all panels on mobile; keep controls 44px minimum; tables become card rows rather than overflow.
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 2px rgba(26,23,20,0.06)
- **Md**: 0 18px 50px rgba(26,23,20,0.08)
- **Lg**: 0 30px 80px rgba(26,23,20,0.11)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: paper
- **Card Style**: Flat warm paper planes defined by surface tone and soft elevation; no box borders, no accent edges.
- **Bg Pattern**: noise
### Borders
- **Default Width**: 1px
- **Accent Width**: 1px
- **Style**: solid
- **Character**: Hairlines survive only as a deliberate ornament system - the ma-seam, the short rule under a mono overline, and table/list dividers - never a box around a card.
## Components
### Composition
A quiet asymmetrical grid: reserve one column as the ma bay, place primary work slightly off-centre, let secondary controls sit in narrow vertical planes. Major groups get 48-96px of visible interval. Alignment and silence create rhythm.
### Hierarchy
Priority from spatial isolation, illumination, shadow density, and type scale. Display and numbers in Noto Serif JP; labels in IBM Plex Mono. The one earth accent appears only on a mark, a selection, or a single call.
### Density
Medium-low with deliberate pauses: lists compact enough for work but never crowded; full-height controls; the screen feels edited rather than empty.
### Signature Patterns
- A reserved empty ma bay: a narrow interval with one rotated mono label and a single hairline seam.
- Planes read through surface tone and soft elevation - the important plane sits deeper in the light with more surrounding space, never a border or an accent edge.
- A soft raking light models the leading plane (light as hierarchy) and recolours with the accent on a palette swap.
- Section headers pair a small IBM Plex Mono overline with a short 32px hairline rule and generous negative space below.
- Interactive focus uses an offset earth outline and a faint earth wash, preserving square 0px corners instead of glow or colour floods.
## 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-019f8b0d-6289-7c72-b78e-9ab4b60e8ddd/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 Use pure #FFFFFF for the main ground and warm paper only for material planes.
- Do Keep letter-spacing at -0.02em; lean on Noto Serif JP + IBM Plex Sans for quiet authority.
- Do Reserve at least one intentionally empty ma bay in desktop layouts.
- Do Use 0px square corners for structural UI; reserve 9999px for pills, chips, avatars.
- Do Express hierarchy with light, shadow, spacing, and type scale before adding colour.
- Do Use the muted earth accent once per decision, not as a brand wash.
- Do Keep texture barely visible and always behind content.
- Don't Do not box cards in borders, and never give a card an accent edge on any side.
- Don't Do not use gradients as decoration, glossy cards, glassmorphism, or neon washes.
- Don't Do not decorate with stereotypical Japanese motifs, brush fonts, or red circles.
- Don't Do not fill every column; visible emptiness is part of the layout.
- Don't Do not use arbitrary radii (8, 12, 20, 32, 48px).
- Don't Do not centre everything or make symmetrical landing sections.
- Don't Do not add multiple accent colours; one muted earth accent is enough.
### Usage Context
Editorial tools, product inventory, design archives, calm operations dashboards, architecture portfolios, material libraries, and focused planning interfaces where reduction, touch, and careful reading matter.
### Accessibility
Maintain WCAG AA contrast; visible offset earth focus outlines; 44px touch targets; never encode status by colour alone (pills carry a mark and a word); keep texture overlays low-opacity behind content; reduced-motion settles the landing to a readable static document.
## Imagery Direction
### Technique
Quiet architectural and material photography in the Tadao Ando tradition: bare poured concrete, off-white washi paper, weathered cedar and rough stone, raking daylight and deep restrained shadow, generous empty space. Natural aspect, no text.
### Palette
- #FFFFFF
- #F7F5F0
- #1A1714
- #8A6F4D
- #B8B0A4
### Subjects
- concrete threshold and light-seam interiors
- folded off-white paper
- weathered wood and stone material studies
- empty interval rooms with a single blade of light
### Pairs With
doma
### Negative Prompt
NO text, NO letters, NO logos, no people, no gradients as decoration, no glossy sheen, no cultural cliche motifs
### Plate Manifest
- **Hero-Image**: concrete plane with a vertical raking light seam
- **Plate-1**: concrete threshold / morning shadow
- **Plate-2**: folded washi paper
- **Plate-3**: weathered cedar and stone
- **Plate-4**: tall vertical light-seam interval room
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "doma",
"type": "registry:theme",
"title": "Doma shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#FFFFFF",
"foreground": "#1A1714",
"card": "#F7F5F0",
"card-foreground": "#1A1714",
"popover": "#F7F5F0",
"popover-foreground": "#1A1714",
"primary": "#1A1714",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#7C766D",
"muted-foreground": "#1A1714",
"accent": "#8A6F4D",
"accent-foreground": "#ffffff",
"destructive": "#8B2F2A",
"border": "#D8D2C8",
"input": "#D8D2C8",
"ring": "#8A6F4D",
"chart-1": "#1A1714",
"chart-2": "#f4f4f5",
"chart-3": "#8A6F4D",
"chart-4": "#4E6B4A",
"chart-5": "#9A6B22",
"sidebar": "#F7F5F0",
"sidebar-foreground": "#1A1714",
"sidebar-primary": "#1A1714",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#4D6270",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#D8D2C8",
"sidebar-ring": "#8A6F4D",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#1A1714",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#8A6F4D",
"accent-foreground": "#ffffff",
"destructive": "#8B2F2A",
"border": "#303642",
"input": "#303642",
"ring": "#8A6F4D",
"chart-1": "#1A1714",
"chart-2": "#f4f4f5",
"chart-3": "#8A6F4D",
"chart-4": "#4E6B4A",
"chart-5": "#9A6B22",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#1A1714",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#8A6F4D",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#8A6F4D",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019f8b0d-6289-7c72-b78e-9ab4b60e8ddd",
"slug": "doma",
"componentManifest": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
"nativeTokenNames": {
"colors": [
"accent",
"accent_2",
"accent_soft",
"bg",
"border",
"error",
"info",
"muted",
"on_accent",
"stone",
"success",
"surface",
"surface_solid",
"text",
"warning",
"weathered_wood"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
],
"radii": [
"full",
"lg",
"md",
"none"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"motion": [
"duration",
"easing",
"philosophy"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
Keep Domaand 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: #FFFFFF;
--foreground: #1A1714;
--card: #F7F5F0;
--card-foreground: #1A1714;
--popover: #F7F5F0;
--popover-foreground: #1A1714;
--primary: #1A1714;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #7C766D;
--muted-foreground: #1A1714;
--accent: #8A6F4D;
--accent-foreground: #ffffff;
--destructive: #8B2F2A;
--border: #D8D2C8;
--input: #D8D2C8;
--ring: #8A6F4D;
--chart-1: #1A1714;
--chart-2: #f4f4f5;
--chart-3: #8A6F4D;
--chart-4: #4E6B4A;
--chart-5: #9A6B22;
--sidebar: #F7F5F0;
--sidebar-foreground: #1A1714;
--sidebar-primary: #1A1714;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #4D6270;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #D8D2C8;
--sidebar-ring: #8A6F4D;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #1A1714;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #8A6F4D;
--accent-foreground: #ffffff;
--destructive: #8B2F2A;
--border: #303642;
--input: #303642;
--ring: #8A6F4D;
--chart-1: #1A1714;
--chart-2: #f4f4f5;
--chart-3: #8A6F4D;
--chart-4: #4E6B4A;
--chart-5: #9A6B22;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #1A1714;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #8A6F4D;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #8A6F4D;
--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 DomaShadcnKit() {
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">Doma</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": "doma",
"type": "registry:theme",
"author": "katagami-agent",
"title": "Doma",
"description": "Spatial-editing theme built on ma (間), wabi-sabi, and Tadao Ando light: warm paper and concrete planes, square structural corners, hairline rules used only as a deliberate ornament system, and one muted earth accent used once per decision. Light mode, no box borders.",
"cssVars": {
"theme": {
"font-sans": "'IBM Plex Sans', system-ui, sans-serif",
"font-serif": "'Noto Serif JP', serif",
"font-mono": "'IBM Plex Mono', monospace",
"radius": "0px"
},
"light": {
"background": "#FFFFFF",
"foreground": "#1A1714",
"card": "#FAF9F6",
"card-foreground": "#1A1714",
"popover": "#FAF9F6",
"popover-foreground": "#1A1714",
"primary": "#1A1714",
"primary-foreground": "#FAF9F6",
"secondary": "#F7F5F0",
"secondary-foreground": "#1A1714",
"muted": "#F7F5F0",
"muted-foreground": "#7C766D",
"accent": "#8A6F4D",
"accent-foreground": "#FAF9F6",
"destructive": "#8B2F2A",
"destructive-foreground": "#FAF9F6",
"success": "#4E6B4A",
"warning": "#9A6B22",
"info": "#4D6270",
"border": "#D8D2C8",
"input": "#B8B0A4",
"ring": "#8A6F4D",
"radius": "0px",
"chart-1": "#8A6F4D",
"chart-2": "#77624D",
"chart-3": "#B8B0A4",
"chart-4": "#5F5951",
"chart-5": "#4D6270"
},
"dark": {
"background": "#141210",
"foreground": "#FAF9F6",
"card": "#1B1712",
"card-foreground": "#FAF9F6",
"popover": "#1B1712",
"popover-foreground": "#FAF9F6",
"primary": "#FAF9F6",
"primary-foreground": "#1A1714",
"secondary": "#211C16",
"secondary-foreground": "#FAF9F6",
"muted": "#211C16",
"muted-foreground": "#B8B0A4",
"accent": "#8A6F4D",
"accent-foreground": "#FAF9F6",
"destructive": "#8B2F2A",
"destructive-foreground": "#FAF9F6",
"success": "#4E6B4A",
"warning": "#9A6B22",
"info": "#4D6270",
"border": "#2A241D",
"input": "#3E3B37",
"ring": "#8A6F4D",
"radius": "0px",
"chart-1": "#8A6F4D",
"chart-2": "#77624D",
"chart-3": "#B8B0A4",
"chart-4": "#5F5951",
"chart-5": "#4D6270"
}
},
"visualProfile": {
"family": "quiet-spatial-editorial",
"material": "warm paper and concrete planes with barely-visible speckle grain",
"contour": "square",
"border": "hairline-rules-only",
"underlay": true,
"grain": true,
"stickerBadges": false,
"motion": "settling, 200ms cubic-bezier(0.2,0,0.1,1), like a paper screen coming to rest",
"density": "medium-low",
"accents": ["#8A6F4D", "#77624D"]
},
"notes": "Doma boxes nothing: cards read through surface tone and soft elevation, not borders, and no card carries an accent edge on any side. Hairlines survive only as a page-wide ornament system — the ma-seam, the short rule beneath a mono overline, table/list dividers, and the underline edge of an input that inks to the earth accent on focus. Buttons are square, one clearly primary; the earth accent appears once per decision. Structural radius is 0px; only pills, chips, and avatars use 9999px."
}
# Doma — shadcn/ui Components
> `component-recipes-v1`
> Author: `katagami-agent`
> Design language: **Doma** (土間) — spatial editing for interfaces. Ma, wabi-sabi, and Tadao Ando light.
Doma dresses shadcn/ui primitives in warm paper and concrete planes. The rules are simple and strict: **no box borders**, square structural corners (`0px`), hairlines only as a deliberate ornament system, and one muted earth accent (`#8A6F4D`) used once per decision. Light mode is the default.
## ShadSync visual profile
The renderer follows this profile so every primitive reads as Doma, not a generic house chassis:
- **family**: quiet-spatial-editorial
- **material**: warm paper (`#FAF9F6`) and stone-paper (`#F7F5F0`) planes on pure white, barely-visible speckle grain behind content
- **contour**: square — structural radius `0px`; only pills, chips, avatars use `9999px`
- **border**: hairline-rules-only — never a four-sided card border, never an accent edge on a card
- **underlay**: true (paper-concrete texture, low opacity, behind content)
- **grain**: true
- **stickerBadges**: false
- **motion**: settling, 200ms `cubic-bezier(0.2,0,0.1,1)`, like a paper screen coming to rest
- **density**: medium-low — 48–96px between primary regions
- **accents**: `#8A6F4D` (earth), `#77624D` (weathered wood)
Typography: display / numbers **Noto Serif JP**, body **IBM Plex Sans** (17px base), labels & status **IBM Plex Mono**. Letter-spacing `-0.02em`.
## Signature component recipes
The signature mechanic — the reserved interval and a soft raking light modelling the leading plane — recolours with the accent role on a palette swap. Applied to primitives:
- **Button** — square `0px`, one clearly primary (charcoal fill) with the earth variant reserved for the single lead action; quiet buttons use an inset hairline that inks to earth on hover. Label centred, never wraps.
- **Card / Panel** — a paper plane defined by tone + soft shadow, **no border**. The "important" card sits deeper in the light (larger shadow) with more surrounding space, never an accent edge.
- **Input / Textarea / Select** — an underline measure (bottom hairline) that inks to the earth accent on focus with a faint accent wash; no four-sided box.
- **Badge / Status pill** — `9999px`, small, a coloured mark + word; colour never floods the plane.
- **Table** — hairline row dividers, mono figures right-aligned, earth-wash row hover.
- **Tabs / Navigation** — unboxed; the active tab carries the earth underline that sweeps in, never a pill container.
## Preview shots
Product scenes are defined in `preview-shots.json` (`renderable-v1`, all 16 primitives, ≥3 scenes). They render a material archive / calm operations surface: a specimen form, a study table with status pills, and a light-readings dashboard — each on paper planes with the ma interval reserved.
## Copy-paste component example
```tsx
import { Button } from "@/components/ui/button"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
import { Badge } from "@/components/ui/badge"
import { Input } from "@/components/ui/input"
export function SpecimenPanel() {
return (
// no border — the plane reads through tone + elevation; radius 0
<Card className="rounded-none border-0 bg-card shadow-[0_18px_50px_rgba(26,23,20,0.08)]">
<CardHeader className="flex flex-row items-start justify-between gap-6 pt-8">
<CardTitle className="font-serif text-2xl tracking-tight">
Concrete threshold
</CardTitle>
<Badge className="rounded-full bg-secondary text-[color:var(--success)]">
active
</Badge>
</CardHeader>
<CardContent className="space-y-6">
{/* underline input — inks to earth on focus */}
<Input
defaultValue="poured concrete"
className="rounded-none border-0 border-b border-b-[color:var(--input)] bg-transparent
px-1 focus-visible:border-b-[color:var(--ring)] focus-visible:ring-0"
/>
<div className="flex gap-3">
<Button className="rounded-none bg-[color:var(--accent)] text-[color:var(--accent-foreground)]">
Record reading
</Button>
<Button variant="ghost" className="rounded-none">Hold for later</Button>
</div>
</CardContent>
</Card>
)
}
```
Install the theme, then add primitives from `@/components/ui/` (`button`, `card`, `input`, `badge`, `table`, `dialog`, `tabs`, …) and apply the classes above. Every primitive imported from `@/components/ui/` inherits the Doma tokens from `export.json`.
## Quality rules
**Do**: keep cards borderless (tone + shadow); reserve one earth accent per decision; square corners on structure, pills only for status; hairlines as a recurring system; 17px+ body; generous interval between regions.
**Don't**: box a card or give it an accent edge; use gradient/glossy fills; wrap button labels; add a second accent colour; use arbitrary radii; crowd the screen.
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"author": "katagami-agent",
"requiresVisualProfile": true,
"language": { "id": "doma", "name": "Doma", "slug": "doma" },
"installCommand": "npx shadcn@latest add https://katagami.ai/r/doma.json",
"primitives": [
"button", "card", "input", "textarea", "select", "dialog", "sheet", "tabs",
"badge", "separator", "checkbox", "switch", "slider", "tooltip", "dropdown-menu", "table"
],
"identityNotes": [
"Cards are borderless: a warm paper plane defined by surface tone and one soft shadow — never a four-sided border, never an accent edge on any side.",
"Square structural corners (0px); only badges, pills, avatars use 9999px.",
"Inputs are underline measures that ink to the earth accent (#8A6F4D) on focus, not boxed fields.",
"One muted earth accent, used once per decision; semantic colours stay small and never lead.",
"Hairlines survive only as a deliberate ornament system: the ma-seam, the short rule under a mono overline, and table/list dividers.",
"Display and numbers in Noto Serif JP; body in IBM Plex Sans (17px); labels and status in IBM Plex Mono."
],
"visualProfile": {
"family": "quiet-spatial-editorial",
"material": "warm paper and concrete planes with barely-visible speckle grain",
"contour": "square",
"border": "hairline-rules-only",
"underlay": true,
"grain": true,
"stickerBadges": false,
"motion": "settling, 200ms cubic-bezier(0.2,0,0.1,1), like a paper screen coming to rest",
"density": "medium-low",
"accents": ["#8A6F4D", "#77624D"]
},
"tokens": {
"background": "#FFFFFF",
"surface": "#F7F5F0",
"surfaceSolid": "#FAF9F6",
"foreground": "#1A1714",
"muted": "#7C766D",
"border": "#D8D2C8",
"accent": "#8A6F4D",
"accent2": "#77624D",
"onAccent": "#FAF9F6",
"success": "#4E6B4A",
"warning": "#9A6B22",
"error": "#8B2F2A",
"info": "#4D6270",
"radius": "0px",
"radiusFull": "9999px",
"fontSerif": "'Noto Serif JP', serif",
"fontSans": "'IBM Plex Sans', system-ui, sans-serif",
"fontMono": "'IBM Plex Mono', monospace"
},
"shots": [
{
"id": "specimen-form",
"title": "Record a specimen",
"viewport": "desktop",
"primitives": ["card", "input", "textarea", "select", "checkbox", "switch", "button", "separator", "tooltip"],
"composition": "A warm paper panel (no border, soft elevation) with a mono overline, a short 32px earth-inking rule, underline inputs, and one earth primary action. The empty ma bay sits to the left.",
"mustShow": ["borderless paper card", "underline input focused with earth accent", "one primary earth button and one quiet ghost button", "mono overline with short rule"],
"avoid": ["four-sided card border", "accent edge on the card", "gradient or glossy fill", "wrapped button label"],
"scene": {
"headline": "Concrete threshold / morning shadow",
"description": "Log a material study: edges exact, surface slightly uneven; the useful quality is the pause before the reveal.",
"fields": [
{ "label": "Material", "value": "poured concrete" },
{ "label": "Tone", "value": "shadow grey" },
{ "label": "Observation", "value": "The interval closes at dusk when the light turns." }
]
}
},
{
"id": "specimen-queue",
"title": "Specimen queue",
"viewport": "desktop",
"primitives": ["table", "badge", "tabs", "dropdown-menu", "checkbox", "button", "separator"],
"composition": "A study table on a paper plane with hairline row dividers, mono depth figures right-aligned, and small status pills. Tabs above are unboxed with an earth underline on the active tab.",
"mustShow": ["hairline row dividers (no boxed table)", "status pills with mark + word", "earth-wash row hover", "right-aligned mono figures"],
"avoid": ["zebra fills", "heavy grid lines", "colour flooding a row", "pill-bar tab container"],
"scene": {
"headline": "Studies open for reading",
"description": "Four readings remain before the interval closes.",
"rows": [
{ "specimen": "Weathered cedar pull", "plane": "wood 04", "state": "draft", "depth": "2.4" },
{ "specimen": "Off-white paper fold", "plane": "paper 11", "state": "review", "depth": "1.1" },
{ "specimen": "Stone basin lip", "plane": "stone 02", "state": "selected", "depth": "3.9" },
{ "specimen": "Concrete sill 07", "plane": "concrete 07", "state": "active", "depth": "2.0" }
]
}
},
{
"id": "light-dashboard",
"title": "Light readings",
"viewport": "desktop",
"primitives": ["card", "slider", "switch", "badge", "separator", "button", "tooltip", "dialog"],
"composition": "A calm operations surface: serif measure numbers, a light-readings meter, a shadow-density slider, and a restraint note. Planes read through tone and elevation; the earth accent appears only on the peak reading and the one call to action.",
"mustShow": ["serif measure figures", "earth accent only on the peak reading", "restraint note on a quiet plane", "generous ma interval between regions"],
"avoid": ["multiple accent colours", "boxed cards", "dark-on-dark", "crowded clusters"],
"scene": {
"headline": "North light, slow",
"description": "Shadow density steady; reveal held until the light turns.",
"stats": [
{ "label": "Open studies", "value": "64" },
{ "label": "Awaiting review", "value": "12" },
{ "label": "Readings today", "value": "28" },
{ "label": "Held for pause", "value": "05" }
]
}
},
{
"id": "review-interval",
"title": "Review interval",
"viewport": "mobile",
"primitives": ["sheet", "dialog", "button", "badge", "checkbox", "separator"],
"composition": "A mobile review sheet on a warm paper plane: a serif title, a quiet body note, one earth primary and one ghost action. Square corners, no border, the status pill fully rounded.",
"mustShow": ["single-column stack", "square sheet corners with no border", "one earth primary action", "status pill rounded"],
"avoid": ["horizontal overflow", "accent edge", "two competing accents", "tiny touch targets"],
"scene": {
"headline": "Review interval",
"description": "Pause before publishing: compare shadow density against the stone edge and remove any accent not doing work.",
"fields": [
{ "label": "Shadow density", "value": "62%" },
{ "label": "Decision", "value": "hold for later" }
]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Primary is a square charcoal fill; the single earth variant marks the one lead action; ghost uses an inking underline. Labels centred, never wrap." },
{ "primitive": "card", "intent": "Borderless warm paper plane defined by tone and one soft shadow; the important card sits deeper in the light with more space, never an accent edge." },
{ "primitive": "input", "intent": "Underline measure; bottom hairline inks to the earth accent on focus with a faint accent wash; no four-sided box." },
{ "primitive": "textarea", "intent": "Same underline treatment as input, taller, resize vertical only, calm 1.55 line-height." },
{ "primitive": "select", "intent": "Underline control with a mono chevron; options open on a warm paper popover with hairline dividers." },
{ "primitive": "dialog", "intent": "Paper plane with a serif title and quiet body; square corners, soft lg shadow, one earth action and one ghost." },
{ "primitive": "sheet", "intent": "Slides from the edge as a paper plane; square corners, no border; used for mobile review intervals." },
{ "primitive": "tabs", "intent": "Unboxed; the active tab carries an earth underline that sweeps in — never a pill-bar container." },
{ "primitive": "badge", "intent": "Fully rounded pill, small, a coloured mark plus a word; colour never floods the plane." },
{ "primitive": "separator", "intent": "A stone hairline used as a deliberate rule — the ma-seam, the short 32px overline rule, or a row divider." },
{ "primitive": "checkbox", "intent": "Square box with an inset hairline; checks to an earth fill with a paper tick; offset earth focus ring." },
{ "primitive": "switch", "intent": "Stone track that inks to an earth-washed track with an earth knob when on; settles, never bounces." },
{ "primitive": "slider", "intent": "Thin stone rail with an earth knob; used for shadow density and measured values." },
{ "primitive": "tooltip", "intent": "Small charcoal bubble with paper text; appears on the measure and rake affordances." },
{ "primitive": "dropdown-menu", "intent": "Warm paper popover, hairline dividers, earth-wash hover; square corners." },
{ "primitive": "table", "intent": "Hairline row dividers, mono figures right-aligned, earth-wash row hover; no boxed grid, no zebra." }
],
"qualityRules": {
"do": [
"Keep cards borderless — tone and soft elevation define the plane.",
"Reserve one muted earth accent per decision; keep semantic colours small.",
"Square structural corners; pills, chips, avatars only for 9999px.",
"Use hairlines as a recurring ornament system, not as box borders.",
"Body 17px+, generous 48–96px intervals, always pad above titles."
],
"dont": [
"Box a card or give it an accent edge on any side.",
"Use gradients, glossy fills, or glassmorphism.",
"Wrap a button or chip label.",
"Add a second accent colour or let colour flood a plane.",
"Use arbitrary radii or crowd a cluster beside a starved void."
]
}
}