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.
Content sits on a two-page techo spread with a visible center gutter (single column on mobile). The left page holds the structured day (timeline, tasks); the right page holds freeform notes and annotations. Generous margins; sections are defined by whitespace and hairline rules, never heavy boxes. Stacking order: dot-grid surface, content, margin annotations, then stamps and stickers.
Date stamps and Newsreader headings establish primary hierarchy through size and weight. Highlighter marks create secondary emphasis without changing font properties. Script margin annotations are tertiary. Fountain indigo marks every actionable element; muted grey carries secondary content; wisteria and ochre are emphasis markers only.
Medium — a well-organized planner page, structured but spacious (line-height 1.6). The hourly timeline is the densest element with a consistent vertical rhythm; note areas breathe more. Never pack tighter than a real A5 spread.
A kept page: dot grid; rotated monospace date stamps; translucent overshooting highlighter marks; wavy pen-stroke underlines; clip-path edge page tabs; dotted sticker badges; margin notes on thin guide lines.
Two-page spread on a dot grid (22px); 12-col underlying, visible center gutter ~32-40px
Whitespace is paper, not emptiness — generous page margins (32-48px), section gaps 24px+, room to write
medium
Single-column stacked spread on mobile, edge tabs become a row of pills, forms and grids collapse, no horizontal overflow; contained content caps and centres on ultra-wide while only the hero spans 100vw
wisteria
Layered fountain-pen ink linework over diluted watercolor washes blooming into warm cream paper, with translucent highlighter-marker passes and faint graphite under-sketch. Subjects are kept-by-hand objects treated in that technique.
Full-bleed hero of an open planner spread; feature and illustration slots use single kept-by-hand objects. Keep warm cream paper ground, soft wisteria/ochre accents, no text or logos in the imagery.
# Tomoe ## Philosophy A planner you keep by hand. The interface is a daily techo spread — Tomoe-River cream paper, a fountain-pen line, dot-grid pages, and two markers used like real highlighters. Structure enough to find last Thursday; soft enough to invite you back. ### Values - A page is a surface you return to, not a database you fill - Emphasis you can feel — markers overshoot like real ones, never colour floods - Generous margins; a page that breathes invites you back - Warm cream paper, not white; one fountain-pen ink for every action - The settled, hand-kept page is the default; motion is brief and meaningful ### Anti-Values - Heavy drop shadows or floating chrome (planners sit flat on a desk) - Bright saturated container fills or neon ink - Perfectly straight mechanical underlines that break the analog feel - Over-boxed navigation trapped in a pill bar or nested cards - Cramming the page until it could not fit a real A5 spread ### Visual Character - Tomoe-River cream paper spread with a visible center gutter, radial-gradient dot grid every 22px, hairline rules. - Hand-kept artifacts: rotated monospace date stamps, dotted sticker badges, clip-path edge page tabs, margin notes on thin guide lines. - Analog emphasis over digital chrome: translucent wisteria/ochre highlighter spans, wavy pen-stroke underlines, near-square corners, almost-flat shadows. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#F4EFE3` | | surface | `#FBF8F0` | | surface_2 | `#FFFEFA` | | paper_edge | `#ECE4D2` | | text | `#2A2620` | | muted | `#7C7464` | | border | `rgba(42,38,32,0.14)` | | grid | `rgba(42,38,32,0.10)` | | accent | `#3A4E8C` | | accent_deep | `#28396B` | | wisteria | `#9A7BB5` | | ochre | `#C98A3E` | | on_accent | `#FBF8F0` | | success | `#5C7A52` | | warning | `#C98A3E` | | error | `#B14A3C` | | info | `#3A4E8C` | ### Typography - **Base Size**: 17px - **Body Font**: Source Sans 3, system-ui, sans-serif - **Heading Font**: Newsreader, Georgia, serif - **Mono Font**: Fira Code, ui-monospace, monospace - **Script Font**: Caveat, cursive - **Heading Weight**: 600 - **Heading Transform**: none - **Letter Spacing**: -0.012em - **Scale Ratio**: 1.25 - **Line Height Base**: 1.6 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,400&family=Source+Sans+3:wght@400;500;600;700&family=Fira+Code:wght@400;500&family=Caveat:wght@500;600&display=swap ### Radii - **Sm**: 0px - **Md**: 16px - **Lg**: 24px - **Full**: 9999px ### Shadows - **Sm**: 0 1px 2px rgba(42,38,32,0.06) - **Md**: 0 2px 10px rgba(42,38,32,0.08) - **Stamp**: 1px 1px 0 rgba(42,38,32,0.10) ### Spacing - **Base**: 4px - **Scale**: ["4px","8px","12px","16px","24px","32px","48px","64px","96px"] ### Surfaces - **Page**: #FBF8F0 Tomoe-River paper over #F4EFE3 desk cream with a radial-gradient dot grid every 22px - **Note**: #FFFEFA inset note panel, 16px radius, almost-flat shadow, no gradient - **Highlight**: translucent wisteria (rgba(154,123,181,.22)) / ochre (rgba(201,138,62,.22)) marker spans with padding overshoot - **Tab**: clip-path colored page tabs protruding from the right edge - **Stamp**: monospace date in a hairline rect, rotated 1-2 degrees, with a 1px stamp shadow ### Borders - **Color**: rgba(42,38,32,0.14) - **Width**: 1px - **Style**: solid; dashed reserved for sticker badges ### Motion - **Duration**: 240ms - **Easing**: cubic-bezier(.4,0,.2,1) - **Philosophy**: brief and meaningful; settled state is the default, reveals layered behind a .pe class, respects prefers-reduced-motion ## Rules ### Composition Content sits on a two-page techo spread with a visible center gutter (single column on mobile). The left page holds the structured day (timeline, tasks); the right page holds freeform notes and annotations. Generous margins; sections are defined by whitespace and hairline rules, never heavy boxes. Stacking order: dot-grid surface, content, margin annotations, then stamps and stickers. ### Hierarchy Date stamps and Newsreader headings establish primary hierarchy through size and weight. Highlighter marks create secondary emphasis without changing font properties. Script margin annotations are tertiary. Fountain indigo marks every actionable element; muted grey carries secondary content; wisteria and ochre are emphasis markers only. ### Density Medium — a well-organized planner page, structured but spacious (line-height 1.6). The hourly timeline is the densest element with a consistent vertical rhythm; note areas breathe more. Never pack tighter than a real A5 spread. ### Signature A kept page: dot grid; rotated monospace date stamps; translucent overshooting highlighter marks; wavy pen-stroke underlines; clip-path edge page tabs; dotted sticker badges; margin notes on thin guide lines. ## Layout ### Grid Two-page spread on a dot grid (22px); 12-col underlying, visible center gutter ~32-40px ### Whitespace Whitespace is paper, not emptiness — generous page margins (32-48px), section gaps 24px+, room to write ### Density medium ### Responsive Single-column stacked spread on mobile, edge tabs become a row of pills, forms and grids collapse, no horizontal overflow; contained content caps and centres on ultra-wide while only the hero spans 100vw ### Breakpoints - **Mobile**: 0-639px single column - **Tablet**: 640-979px spread begins - **Desktop**: 980px+ full two-page spread, max content ~1280px centered ## Guidance ### Do - Put the dot grid on every page surface — it is the foundational identity - Use translucent wisteria/ochre highlighter spans with padding overshoot for emphasis - Stamp temporal markers as rotated monospace dates in hairline rectangles - Keep the two-page spread metaphor on desktop with a visible center gutter - Use Newsreader for headings and Caveat only for margin annotations - Define sections with whitespace and hairline rules, not heavy boxes - Use wavy pen-stroke underlines and dotted sticker badges for decoration that means something - Make one button clearly primary in fountain indigo; keep the rest quieter - Keep margins generous so the page breathes ### Don't - Never use heavy drop shadows — planners sit flat on a desk - Never flood a region with an accent; markers are translucent emphasis only - Avoid in-between border-radii — corners are 0, 16, 24, or full - Do not use bright saturated container fills or neon ink - Never use perfectly straight mechanical underlines for the decorative role - Do not box navigation into a floating pill bar or nest cards - Do not overcrowd — if it would not fit a real A5 spread, it is too dense ### Accessibility Graphite #2A2620 on cream #F4EFE3 passes WCAG AA comfortably (>10:1). Highlighter emphasis is always paired with font weight or a pen-stroke underline, never colour alone. Every control has an explicit fountain-indigo focus state; invalid states use rust plus a message. Dot grid stays subtle. Motion reduced to zero under prefers-reduced-motion; minimum 44px touch targets. ## Imagery Direction ### Pairs With wisteria ### Summary Layered fountain-pen ink linework over diluted watercolor washes blooming into warm cream paper, with translucent highlighter-marker passes and faint graphite under-sketch. Subjects are kept-by-hand objects treated in that technique. ### Subjects - an open daily planner spread - a fountain pen resting in a binding gutter - pressed flowers and wisteria sprigs - a dot-grid page with marker passes - a cup of coffee beside a notebook ### Usage Full-bleed hero of an open planner spread; feature and illustration slots use single kept-by-hand objects. Keep warm cream paper ground, soft wisteria/ochre accents, no text or logos in the imagery.
---
version: "alpha"
name: "Tomoe"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#F4EFE3"
surface: "#FBF8F0"
surface_2: "#FFFEFA"
paper_edge: "#ECE4D2"
text: "#2A2620"
muted: "#7C7464"
accent: "#3A4E8C"
accent_deep: "#28396B"
wisteria: "#9A7BB5"
ochre: "#C98A3E"
on_accent: "#FBF8F0"
success: "#5C7A52"
warning: "#C98A3E"
error: "#B14A3C"
info: "#3A4E8C"
typography:
headline-lg:
fontFamily: "Newsreader, Georgia, serif"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.012em"
headline-md:
fontFamily: "Newsreader, Georgia, serif"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.012em"
body-md:
fontFamily: "Source Sans 3, system-ui, sans-serif"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.012em"
label-md:
fontFamily: "Fira Code, ui-monospace, monospace"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
sm: "0px"
md: "16px"
lg: "24px"
full: "9999px"
spacing:
base: "4px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
step-8: "96px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_2:
backgroundColor: "{colors.surface_2}"
color-reference-paper_edge:
backgroundColor: "{colors.paper_edge}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-accent_deep:
backgroundColor: "{colors.accent_deep}"
color-reference-wisteria:
backgroundColor: "{colors.wisteria}"
color-reference-ochre:
backgroundColor: "{colors.ochre}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "#ffffff"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Tomoe
## Overview
A planner you keep by hand. The interface is a daily techo spread — Tomoe-River cream paper, a fountain-pen line, dot-grid pages, and two markers used like real highlighters. Structure enough to find last Thursday; soft enough to invite you back.
### Values
- A page is a surface you return to, not a database you fill
- Emphasis you can feel — markers overshoot like real ones, never colour floods
- Generous margins; a page that breathes invites you back
- Warm cream paper, not white; one fountain-pen ink for every action
- The settled, hand-kept page is the default; motion is brief and meaningful
### Anti-Values
- Heavy drop shadows or floating chrome (planners sit flat on a desk)
- Bright saturated container fills or neon ink
- Perfectly straight mechanical underlines that break the analog feel
- Over-boxed navigation trapped in a pill bar or nested cards
- Cramming the page until it could not fit a real A5 spread
### Visual Character
- Tomoe-River cream paper spread with a visible center gutter, radial-gradient dot grid every 22px, hairline rules.
- Hand-kept artifacts: rotated monospace date stamps, dotted sticker badges, clip-path edge page tabs, margin notes on thin guide lines.
- Analog emphasis over digital chrome: translucent wisteria/ochre highlighter spans, wavy pen-stroke underlines, near-square corners, almost-flat shadows.
## 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 | `#F4EFE3` |
| surface | `#FBF8F0` |
| surface_2 | `#FFFEFA` |
| paper_edge | `#ECE4D2` |
| text | `#2A2620` |
| muted | `#7C7464` |
| accent | `#3A4E8C` |
| accent_deep | `#28396B` |
| wisteria | `#9A7BB5` |
| ochre | `#C98A3E` |
| on_accent | `#FBF8F0` |
| success | `#5C7A52` |
| warning | `#C98A3E` |
| error | `#B14A3C` |
| info | `#3A4E8C` |
## Typography
- **Headline-Lg**: Newsreader, Georgia, serif, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Newsreader, Georgia, serif, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Source Sans 3, system-ui, sans-serif, 17px, weight 400, line-height 1.5.
- **Label-Md**: Fira Code, ui-monospace, monospace, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `4px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `12px`
- **Lg**: `16px`
- **Xl**: `24px`
- **2xl**: `32px`
- **3xl**: `48px`
- **4xl**: `64px`
- **Step-8**: `96px`
### Grid
Two-page spread on a dot grid (22px); 12-col underlying, visible center gutter ~32-40px
### Whitespace
Whitespace is paper, not emptiness — generous page margins (32-48px), section gaps 24px+, room to write
### Density
medium
### Responsive
Single-column stacked spread on mobile, edge tabs become a row of pills, forms and grids collapse, no horizontal overflow; contained content caps and centres on ultra-wide while only the hero spans 100vw
### Breakpoints
- **Mobile**: 0-639px single column
- **Tablet**: 640-979px spread begins
- **Desktop**: 980px+ full two-page spread, max content ~1280px centered
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 2px rgba(42,38,32,0.06)
- **Md**: 0 2px 10px rgba(42,38,32,0.08)
- **Stamp**: 1px 1px 0 rgba(42,38,32,0.10)
## Shapes
### Rounded
- **Sm**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Page**: #FBF8F0 Tomoe-River paper over #F4EFE3 desk cream with a radial-gradient dot grid every 22px
- **Note**: #FFFEFA inset note panel, 16px radius, almost-flat shadow, no gradient
- **Highlight**: translucent wisteria (rgba(154,123,181,.22)) / ochre (rgba(201,138,62,.22)) marker spans with padding overshoot
- **Tab**: clip-path colored page tabs protruding from the right edge
- **Stamp**: monospace date in a hairline rect, rotated 1-2 degrees, with a 1px stamp shadow
### Borders
- **Color**: rgba(42,38,32,0.14)
- **Width**: 1px
- **Style**: solid; dashed reserved for sticker badges
## Components
### Composition
Content sits on a two-page techo spread with a visible center gutter (single column on mobile). The left page holds the structured day (timeline, tasks); the right page holds freeform notes and annotations. Generous margins; sections are defined by whitespace and hairline rules, never heavy boxes. Stacking order: dot-grid surface, content, margin annotations, then stamps and stickers.
### Hierarchy
Date stamps and Newsreader headings establish primary hierarchy through size and weight. Highlighter marks create secondary emphasis without changing font properties. Script margin annotations are tertiary. Fountain indigo marks every actionable element; muted grey carries secondary content; wisteria and ochre are emphasis markers only.
### Density
Medium — a well-organized planner page, structured but spacious (line-height 1.6). The hourly timeline is the densest element with a consistent vertical rhythm; note areas breathe more. Never pack tighter than a real A5 spread.
### Signature
A kept page: dot grid; rotated monospace date stamps; translucent overshooting highlighter marks; wavy pen-stroke underlines; clip-path edge page tabs; dotted sticker badges; margin notes on thin guide lines.
## 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-019efb5a-8016-75b3-b3ef-81fe500eb2d6/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 Put the dot grid on every page surface — it is the foundational identity
- Do Use translucent wisteria/ochre highlighter spans with padding overshoot for emphasis
- Do Stamp temporal markers as rotated monospace dates in hairline rectangles
- Do Keep the two-page spread metaphor on desktop with a visible center gutter
- Do Use Newsreader for headings and Caveat only for margin annotations
- Do Define sections with whitespace and hairline rules, not heavy boxes
- Do Use wavy pen-stroke underlines and dotted sticker badges for decoration that means something
- Do Make one button clearly primary in fountain indigo; keep the rest quieter
- Do Keep margins generous so the page breathes
- Don't Never use heavy drop shadows — planners sit flat on a desk
- Don't Never flood a region with an accent; markers are translucent emphasis only
- Don't Avoid in-between border-radii — corners are 0, 16, 24, or full
- Don't Do not use bright saturated container fills or neon ink
- Don't Never use perfectly straight mechanical underlines for the decorative role
- Don't Do not box navigation into a floating pill bar or nest cards
- Don't Do not overcrowd — if it would not fit a real A5 spread, it is too dense
### Accessibility
Graphite #2A2620 on cream #F4EFE3 passes WCAG AA comfortably (>10:1). Highlighter emphasis is always paired with font weight or a pen-stroke underline, never colour alone. Every control has an explicit fountain-indigo focus state; invalid states use rust plus a message. Dot grid stays subtle. Motion reduced to zero under prefers-reduced-motion; minimum 44px touch targets.
## Imagery Direction
### Pairs With
wisteria
### Summary
Layered fountain-pen ink linework over diluted watercolor washes blooming into warm cream paper, with translucent highlighter-marker passes and faint graphite under-sketch. Subjects are kept-by-hand objects treated in that technique.
### Subjects
- an open daily planner spread
- a fountain pen resting in a binding gutter
- pressed flowers and wisteria sprigs
- a dot-grid page with marker passes
- a cup of coffee beside a notebook
### Usage
Full-bleed hero of an open planner spread; feature and illustration slots use single kept-by-hand objects. Keep warm cream paper ground, soft wisteria/ochre accents, no text or logos in the imagery.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "tomoe",
"type": "registry:theme",
"title": "Tomoe shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F4EFE3",
"foreground": "#2A2620",
"card": "#FBF8F0",
"card-foreground": "#2A2620",
"popover": "#FBF8F0",
"popover-foreground": "#2A2620",
"primary": "#2A2620",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#7C7464",
"muted-foreground": "#2A2620",
"accent": "#3A4E8C",
"accent-foreground": "#ffffff",
"destructive": "#B14A3C",
"border": "rgba(42,38,32,0.14)",
"input": "rgba(42,38,32,0.14)",
"ring": "#3A4E8C",
"chart-1": "#2A2620",
"chart-2": "#f4f4f5",
"chart-3": "#3A4E8C",
"chart-4": "#5C7A52",
"chart-5": "#C98A3E",
"sidebar": "#FBF8F0",
"sidebar-foreground": "#2A2620",
"sidebar-primary": "#2A2620",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#3A4E8C",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "rgba(42,38,32,0.14)",
"sidebar-ring": "#3A4E8C",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#2A2620",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#3A4E8C",
"accent-foreground": "#ffffff",
"destructive": "#B14A3C",
"border": "#303642",
"input": "#303642",
"ring": "#3A4E8C",
"chart-1": "#2A2620",
"chart-2": "#f4f4f5",
"chart-3": "#3A4E8C",
"chart-4": "#5C7A52",
"chart-5": "#C98A3E",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#2A2620",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#3A4E8C",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#3A4E8C",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019efb5a-8016-75b3-b3ef-81fe500eb2d6",
"slug": "tomoe",
"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_deep",
"bg",
"border",
"error",
"grid",
"info",
"muted",
"ochre",
"on_accent",
"paper_edge",
"success",
"surface",
"surface_2",
"text",
"warning",
"wisteria"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height_base",
"mono_font",
"scale_ratio",
"script_font"
],
"radii": [
"full",
"lg",
"md",
"sm"
],
"shadows": [
"md",
"sm",
"stamp"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"highlight",
"note",
"page",
"stamp",
"tab"
],
"borders": [
"color",
"style",
"width"
],
"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
produced by claude-opus-4-8 · sourced by claude-opus-4-8 · images by gpt-image-2
Keep Tomoeand 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: #F4EFE3;
--foreground: #2A2620;
--card: #FBF8F0;
--card-foreground: #2A2620;
--popover: #FBF8F0;
--popover-foreground: #2A2620;
--primary: #2A2620;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #7C7464;
--muted-foreground: #2A2620;
--accent: #3A4E8C;
--accent-foreground: #ffffff;
--destructive: #B14A3C;
--border: rgba(42,38,32,0.14);
--input: rgba(42,38,32,0.14);
--ring: #3A4E8C;
--chart-1: #2A2620;
--chart-2: #f4f4f5;
--chart-3: #3A4E8C;
--chart-4: #5C7A52;
--chart-5: #C98A3E;
--sidebar: #FBF8F0;
--sidebar-foreground: #2A2620;
--sidebar-primary: #2A2620;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #3A4E8C;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: rgba(42,38,32,0.14);
--sidebar-ring: #3A4E8C;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #2A2620;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #3A4E8C;
--accent-foreground: #ffffff;
--destructive: #B14A3C;
--border: #303642;
--input: #303642;
--ring: #3A4E8C;
--chart-1: #2A2620;
--chart-2: #f4f4f5;
--chart-3: #3A4E8C;
--chart-4: #5C7A52;
--chart-5: #C98A3E;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #2A2620;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #3A4E8C;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #3A4E8C;
--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 TomoeShadcnKit() {
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">Tomoe</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": "tomoe",
"type": "registry:theme",
"title": "Tomoe Ink",
"description": "A kept-by-hand techo: cream Tomoe-River paper, fountain-pen indigo as the single action ink, wisteria and ochre as two translucent markers, near-square corners, almost-flat shadows.",
"cssVars": {
"theme": {
"font-sans": "Source Sans 3, system-ui, sans-serif",
"font-serif": "Newsreader, Georgia, serif",
"font-mono": "Fira Code, ui-monospace, monospace",
"radius": "16px"
},
"light": {
"background": "#F4EFE3",
"foreground": "#2A2620",
"card": "#FBF8F0",
"card-foreground": "#2A2620",
"popover": "#FFFEFA",
"popover-foreground": "#2A2620",
"primary": "#28396B",
"primary-foreground": "#FBF8F0",
"secondary": "#FFFEFA",
"secondary-foreground": "#2A2620",
"muted": "#ECE4D2",
"muted-foreground": "#7C7464",
"accent": "#3A4E8C",
"accent-foreground": "#FBF8F0",
"destructive": "#B14A3C",
"destructive-foreground": "#FBF8F0",
"border": "rgba(42,38,32,0.14)",
"input": "rgba(42,38,32,0.14)",
"ring": "#3A4E8C",
"chart-1": "#3A4E8C",
"chart-2": "#9A7BB5",
"chart-3": "#C98A3E",
"chart-4": "#5C7A52",
"chart-5": "#7C7464",
"radius": "16px"
},
"dark": {
"background": "#26221C",
"foreground": "#F4EFE3",
"card": "#2F2A22",
"card-foreground": "#F4EFE3",
"popover": "#2F2A22",
"popover-foreground": "#F4EFE3",
"primary": "#A6B4E0",
"primary-foreground": "#26221C",
"secondary": "#3A342B",
"secondary-foreground": "#F4EFE3",
"muted": "#3A342B",
"muted-foreground": "#B6AC98",
"accent": "#A6B4E0",
"accent-foreground": "#26221C",
"destructive": "#D6745F",
"destructive-foreground": "#26221C",
"border": "rgba(244,239,227,0.16)",
"input": "rgba(244,239,227,0.16)",
"ring": "#A6B4E0",
"chart-1": "#A6B4E0",
"chart-2": "#C2A8D8",
"chart-3": "#E0AE6B",
"chart-4": "#8FAE82",
"chart-5": "#B6AC98"
}
}
}
# Tomoe shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019efb5a-8016-75b3-b3ef-81fe500eb2d6`
Slug: `tomoe`
## Intent
A planner you keep by hand. The interface is a daily techo spread — Tomoe-River cream paper, a fountain-pen line, dot-grid pages, and two markers used like real highlighters. Structure enough to find last Thursday; soft enough to invite you back.
## 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": "#F4EFE3",
"surface": "#FBF8F0",
"surface_2": "#FFFEFA",
"paper_edge": "#ECE4D2",
"text": "#2A2620",
"muted": "#7C7464",
"border": "rgba(42,38,32,0.14)",
"grid": "rgba(42,38,32,0.10)",
"accent": "#3A4E8C",
"accent_deep": "#28396B",
"wisteria": "#9A7BB5",
"ochre": "#C98A3E",
"on_accent": "#FBF8F0",
"success": "#5C7A52",
"warning": "#C98A3E",
"error": "#B14A3C",
"info": "#3A4E8C"
}
Typography:
{
"base_size": "17px",
"body_font": "Source Sans 3, system-ui, sans-serif",
"heading_font": "Newsreader, Georgia, serif",
"mono_font": "Fira Code, ui-monospace, monospace",
"script_font": "Caveat, cursive",
"heading_weight": "600",
"heading_transform": "none",
"letter_spacing": "-0.012em",
"scale_ratio": "1.25",
"line_height_base": "1.6",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,400&family=Source+Sans+3:wght@400;500;600;700&family=Fira+Code:wght@400;500&family=Caveat:wght@500;600&display=swap"
}
## Visual character to preserve
- Tomoe-River cream paper spread with a visible center gutter, radial-gradient dot grid every 22px, hairline rules.
- Hand-kept artifacts: rotated monospace date stamps, dotted sticker badges, clip-path edge page tabs, margin notes on thin guide lines.
- Analog emphasis over digital chrome: translucent wisteria/ochre highlighter spans, wavy pen-stroke underlines, near-square corners, almost-flat shadows.
## ShadSync visual profile
{
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "dashed",
"underlay": true,
"grain": true,
"stickerBadges": true,
"motion": "lift-rotate",
"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/tomoe/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: Put the dot grid on every page surface — it is the foundational identity; Use translucent wisteria/ochre highlighter spans with padding overshoot for emphasis; Stamp temporal markers as rotated monospace dates in hairline rectangles; Keep the two-page spread metaphor on desktop with a visible center gutter; Use Newsreader for headings and Caveat only for margin annotations; Define sections with whitespace and hairline rules, not heavy boxes; Use wavy pen-stroke underlines and dotted sticker badges for decoration that means something; Make one button clearly primary in fountain indigo; keep the rest quieter; Keep margins generous so the page breathes
- Do not: Never use heavy drop shadows — planners sit flat on a desk; Never flood a region with an accent; markers are translucent emphasis only; Avoid in-between border-radii — corners are 0, 16, 24, or full; Do not use bright saturated container fills or neon ink; Never use perfectly straight mechanical underlines for the decorative role; Do not box navigation into a floating pill bar or nest cards; Do not overcrowd — if it would not fit a real A5 spread, it is too dense
## 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 TomoeShadcnKit() {
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">Tomoe</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": "Two-page spread on a dot grid (22px); 12-col underlying, visible center gutter ~32-40px",
"whitespace": "Whitespace is paper, not emptiness — generous page margins (32-48px), section gaps 24px+, room to write",
"density": "medium",
"responsive": "Single-column stacked spread on mobile, edge tabs become a row of pills, forms and grids collapse, no horizontal overflow; contained content caps and centres on ultra-wide while only the hero spans 100vw",
"breakpoints": {
"mobile": "0-639px single column",
"tablet": "640-979px spread begins",
"desktop": "980px+ full two-page spread, max content ~1280px centered"
}
}
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"generator": "katagami-ui-compatibility-projection",
"generatedBy": "katagami-ui-projection",
"requiresVisualProfile": true,
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"language": {
"id": "en-019efb5a-8016-75b3-b3ef-81fe500eb2d6",
"name": "Tomoe",
"slug": "tomoe"
},
"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": [
"Tomoe-River cream paper spread with a visible center gutter, radial-gradient dot grid every 22px, hairline rules.",
"Hand-kept artifacts: rotated monospace date stamps, dotted sticker badges, clip-path edge page tabs, margin notes on thin guide lines.",
"Analog emphasis over digital chrome: translucent wisteria/ochre highlighter spans, wavy pen-stroke underlines, near-square corners, almost-flat shadows."
],
"visualProfile": {
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": true,
"stickerBadges": true,
"motion": "lift-rotate",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
},
"shots": [
{
"id": "application-shell",
"title": "Application shell",
"viewport": "desktop",
"primitives": [
"button",
"card",
"input",
"select",
"tabs",
"badge",
"separator",
"table"
],
"composition": "A real product workspace with navigation, summary cards, filtering controls, and one dense content region.",
"mustShow": [
"primary and secondary actions",
"card hierarchy",
"filterable state",
"table or list density"
],
"avoid": [
"component inventory walls",
"placeholder-only content",
"generic rounded SaaS chrome"
],
"scene": {
"eyebrow": "workspace spread",
"headline": "Tomoe launch room",
"description": "A product team workspace where navigation, filters, metrics, and dense rows carry the language's visible structure.",
"primaryAction": "Apply theme",
"secondaryAction": "Review states",
"stats": [
{
"label": "components",
"value": "16",
"tone": "accent"
},
{
"label": "states",
"value": "ready"
},
{
"label": "density",
"value": "balanced",
"tone": "warning"
}
],
"rows": [
{
"label": "Primary flow",
"value": "mapped",
"status": "active"
},
{
"label": "Token coverage",
"value": "semantic",
"status": "synced"
},
{
"label": "Responsive proof",
"value": "queued",
"status": "review"
}
],
"statuses": [
"Active",
"Synced",
"Draft"
]
}
},
{
"id": "detail-editor",
"title": "Detail editor",
"viewport": "tablet",
"primitives": [
"button",
"card",
"input",
"textarea",
"select",
"checkbox",
"switch",
"slider",
"dialog",
"sheet"
],
"composition": "A focused editing flow with form fields, validation, confirmation, and a contextual side panel.",
"mustShow": [
"focus ring",
"error or destructive state",
"dialog or sheet treatment",
"written guidance content"
],
"avoid": [
"unstyled browser controls",
"floating cards inside cards",
"missing labels"
],
"scene": {
"eyebrow": "editing flow",
"headline": "Language recipe editor",
"description": "A focused form proving labels, validation, toggles, panel rhythm, and action hierarchy.",
"primaryAction": "Save recipe",
"secondaryAction": "Open sheet",
"fields": [
{
"label": "Component family",
"value": "Narrative cards"
},
{
"label": "State treatment",
"value": "Visible focus + validation"
},
{
"label": "Motion",
"value": "Small lift, no opacity-only fade"
}
],
"statuses": [
"Focus",
"Invalid",
"Confirmed"
]
}
},
{
"id": "data-operations",
"title": "Data operations",
"viewport": "mobile",
"primitives": [
"button",
"tabs",
"badge",
"dropdown-menu",
"table",
"tooltip",
"separator"
],
"composition": "A compact operational view proving row rhythm, stacked actions, menu states, badges, and empty/destructive states.",
"mustShow": [
"responsive reflow",
"dense row styling",
"menu affordance",
"status badge system"
],
"avoid": [
"desktop-only tables",
"text overflow",
"default shadcn spacing without Katagami character"
],
"scene": {
"eyebrow": "operations",
"headline": "Compact review queue",
"description": "A narrow viewport scene with rows, menus, tooltips, badges, and destructive affordances.",
"primaryAction": "Resolve",
"secondaryAction": "Filter",
"rows": [
{
"label": "Button hierarchy",
"value": "approved",
"status": "ok"
},
{
"label": "Table rhythm",
"value": "needs pass",
"status": "watch"
},
{
"label": "Empty state",
"value": "designed",
"status": "done"
}
],
"statuses": [
"Queued",
"Blocked",
"Done"
]
}
}
],
"componentRecipes": [
{
"primitive": "button",
"intent": "Prove action hierarchy, focus, disabled, and destructive states."
},
{
"primitive": "card",
"intent": "Carry the language surface, border, elevation, and density rules."
},
{
"primitive": "input",
"intent": "Show labels, focus rings, validation, and spacing rhythm."
},
{
"primitive": "textarea",
"intent": "Show longer guidance, validation copy, and writing density."
},
{
"primitive": "select",
"intent": "Show filtering, selection contrast, and menu trigger styling."
},
{
"primitive": "dialog",
"intent": "Show centered decision states and overlay treatment."
},
{
"primitive": "sheet",
"intent": "Show contextual side panels and responsive editing."
},
{
"primitive": "tabs",
"intent": "Show navigational structure and active/inactive contrast."
},
{
"primitive": "badge",
"intent": "Show compact status vocabulary and semantic colors."
},
{
"primitive": "separator",
"intent": "Show section rhythm without generic gray dividers."
},
{
"primitive": "checkbox",
"intent": "Show binary selection with visible focus and checked states."
},
{
"primitive": "switch",
"intent": "Show settings toggles and on/off contrast."
},
{
"primitive": "slider",
"intent": "Show numeric adjustment with track/thumb styling."
},
{
"primitive": "tooltip",
"intent": "Show concise explanation styling above compact controls."
},
{
"primitive": "dropdown-menu",
"intent": "Show action menus, destructive items, and grouped choices."
},
{
"primitive": "table",
"intent": "Show dense operational data, separators, row states, and responsive behavior."
}
],
"qualityRules": {
"do": [
"Put the dot grid on every page surface — it is the foundational identity",
"Use translucent wisteria/ochre highlighter spans with padding overshoot for emphasis",
"Stamp temporal markers as rotated monospace dates in hairline rectangles",
"Keep the two-page spread metaphor on desktop with a visible center gutter",
"Use Newsreader for headings and Caveat only for margin annotations",
"Define sections with whitespace and hairline rules, not heavy boxes",
"Use wavy pen-stroke underlines and dotted sticker badges for decoration that means something",
"Make one button clearly primary in fountain indigo; keep the rest quieter",
"Keep margins generous so the page breathes"
],
"dont": [
"Never use heavy drop shadows — planners sit flat on a desk",
"Never flood a region with an accent; markers are translucent emphasis only",
"Avoid in-between border-radii — corners are 0, 16, 24, or full",
"Do not use bright saturated container fills or neon ink",
"Never use perfectly straight mechanical underlines for the decorative role",
"Do not box navigation into a floating pill bar or nest cards",
"Do not overcrowd — if it would not fit a real A5 spread, it is too dense"
]
}
}