Calibrated Paint Canvas
A portable design language for agents: download the markdown first, then inspect the preview, tokens, and rules as needed.
Download DESIGN.md
Portable DESIGN.md source of truth for most agents and apps.
specification
philosophy
tokens
borders4 items
- accent width
- 4px
- character
- precise graphite and linen borders anchor the system; saturated borders appear only for active, focus, selection, or annotation roles
- default width
- 1px
- style
- solid hairline borders with occasional brush-edge accent strips
colors12 items
motion3 items
- duration
- 180ms
- easing
- cubic-bezier(0.2, 0.8, 0.2, 1)
- philosophy
- motion is a small calibration response: controls lift 1px, accents slide into alignment, and focus halos settle quickly without bounce
radii5 items
- full
- 9999px
- lg
- 18px
- md
- 14px
- none
- 0
- sm
- 10px
shadows3 items
- lg
- 0 24px 80px rgba(36, 36, 36, 0.12)
- md
- 0 12px 36px rgba(36, 36, 36, 0.08)
- sm
- 0 1px 2px rgba(36, 36, 36, 0.05)
spacing2 items
- base
- 8px
- scale
- 4, 8, 12, 16, 24, 32, 48, 64
surfaces3 items
- bg pattern
- barely visible 24px neutral alignment grid used only in the outer app canvas
- card style
- 18px radius white cards with 1px linen-gray borders, tiny shadow, and deliberate painted accent notches
- treatment
- warm white planes over a chalk-warm background with subtle top highlights and no glass blur
typography8 items
- base size
- 16px
- body font
- Inter
- google fonts url
- https://fonts.googleapis.com/css2?family=Instrument+Sans:wght@500;600;700&family=Inter:wght@400;500;600;700&family=IBM+Plex+Mono:wght@500;600&display=swap
- heading font
- Instrument Sans
- letter spacing
- -0.018em
- line height
- 1.5
- mono font
- IBM Plex Mono
- scale ratio
- 1.22
rules
Use a single product workspace as the dominant artifact: a neutral inspector/editor canvas with clipped color study moments attached to real controls, data, and notes.
Moderate product density with generous gutters, compact metadata, and spacious decision zones so color marks feel curated rather than busy.
Let graphite type, whitespace, and border weight establish hierarchy first; saturated color may only mark active sections, selected records, validation, focus, or measured chart values.
layout
mobile 375px, tablet 768px, desktop 1200px, wide 1440px
Twelve-column desktop shell with a left product rail, central editor canvas, and right calibration inspector; collapses to stacked artifact cards below tablet width.
Large warm-white gutters separate major panes; dense details live inside cards with 16px internal rhythm and 24px section gaps.
guidance
- Assign every saturated color to a named product role such as active tab, warning chip, focus ring, chart mark, or annotation.
- Keep the default interface warm white, soft gray, graphite, and hairline precise before introducing chroma.
- Use clipped rectangular swatches, rails, and dots as a repeatable system rather than illustrations.
- Check contrast for colored labels by pairing saturated marks with graphite text instead of relying on colored text alone.
- Do not use rainbow gradients, neon glows, arbitrary confetti, or free-floating decorative blobs.
- Do not make the screen look like a textbook color theory exercise page or a flat poster catalog.
- Do not mix many radius sizes or use color as a substitute for product hierarchy and state design.
- Do not fill entire panels with saturated colors unless the product state truly requires a critical alert.
katagami spec
# Calibrated Paint Canvas ## Philosophy A premium neutral product interface where Apple-clean surfaces are interrupted by disciplined color-study marks that behave as navigation, annotation, focus, and data semantics rather than decoration. ### Values - quiet product trust - calibrated chroma with assigned jobs - catalog-grade spacing and alignment - legible interactive state design - fresh color intelligence without chaos ### Anti-Values - rainbow decoration without product role - generic SaaS blobs or gradient hero art - textbook color-wheel worksheets - confetti-style accents - overstuffed component catalogs ### Visual Character - Warm off-white app shell with soft gray inset panels, 1px cool borders, and large unbroken negative space around a single workspace artifact. - Small brushlike color swatches appear as clipped tabs, annotation chips, active rails, chart ticks, and focus rings with no full-bleed color fields. - Graphite typography uses tight display tracking, tabular numerals, and restrained section labels to keep the interface product-first. - Cards use one committed 18px radius geometry, feather-light shadows, and hairline separators so color accents carry state rather than volume. - Interactive controls reveal chroma through narrow left edges, underlines, and halo outlines while default states remain white, gray, and quiet. ## Tokens ### Borders - **Accent Width**: 4px - **Character**: precise graphite and linen borders anchor the system; saturated borders appear only for active, focus, selection, or annotation roles - **Default Width**: 1px - **Style**: solid hairline borders with occasional brush-edge accent strips ### Colors | Name | Value | |------|-------| | accent | `#D8D939` | | background | `#F8F6F1` | | border | `#DCD8CF` | | error | `#D94B3D` | | info | `#2767D8` | | muted | `#74736F` | | primary | `#1D4ED8` | | secondary | `#F05A3B` | | success | `#3DBB86` | | surface | `#FFFFFF` | | text | `#242424` | | warning | `#C9B900` | ### Motion - **Duration**: 180ms - **Easing**: cubic-bezier(0.2, 0.8, 0.2, 1) - **Philosophy**: motion is a small calibration response: controls lift 1px, accents slide into alignment, and focus halos settle quickly without bounce ### Radii - **Full**: 9999px - **Lg**: 18px - **Md**: 14px - **None**: 0 - **Sm**: 10px ### Shadows - **Lg**: 0 24px 80px rgba(36, 36, 36, 0.12) - **Md**: 0 12px 36px rgba(36, 36, 36, 0.08) - **Sm**: 0 1px 2px rgba(36, 36, 36, 0.05) ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64] ### Surfaces - **Bg Pattern**: barely visible 24px neutral alignment grid used only in the outer app canvas - **Card Style**: 18px radius white cards with 1px linen-gray borders, tiny shadow, and deliberate painted accent notches - **Treatment**: warm white planes over a chalk-warm background with subtle top highlights and no glass blur ### Typography - **Base Size**: 16px - **Body Font**: Inter - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Instrument+Sans:wght@500;600;700&family=Inter:wght@400;500;600;700&family=IBM+Plex+Mono:wght@500;600&display=swap - **Heading Font**: Instrument Sans - **Letter Spacing**: -0.018em - **Line Height**: 1.5 - **Mono Font**: IBM Plex Mono - **Scale Ratio**: 1.22 ## Rules ### Composition Use a single product workspace as the dominant artifact: a neutral inspector/editor canvas with clipped color study moments attached to real controls, data, and notes. ### Density Moderate product density with generous gutters, compact metadata, and spacious decision zones so color marks feel curated rather than busy. ### Hierarchy Let graphite type, whitespace, and border weight establish hierarchy first; saturated color may only mark active sections, selected records, validation, focus, or measured chart values. ### Signature Patterns - Paint-tab navigation: active tabs receive a short uneven color slab on the top edge while inactive tabs stay monochrome. - Annotation chips use white pills with a 4px brushed color rail, mono labels, and tiny circular paint dot indicators tied to status. - Data charts render as graphite tracks interrupted by small cobalt, tomato, citron, and mint tick marks instead of large filled graphs. - Focus and selection states use offset double rings: a graphite hairline plus a saturated color halo displaced by 2px. - Panel corners remain consistently 18px while color swatches are rectangular clipped stickers, preventing arbitrary soft blob geometry. ## Layout ### Breakpoints mobile 375px, tablet 768px, desktop 1200px, wide 1440px ### Grid Twelve-column desktop shell with a left product rail, central editor canvas, and right calibration inspector; collapses to stacked artifact cards below tablet width. ### Whitespace Large warm-white gutters separate major panes; dense details live inside cards with 16px internal rhythm and 24px section gaps. ## Guidance ### Do - Assign every saturated color to a named product role such as active tab, warning chip, focus ring, chart mark, or annotation. - Keep the default interface warm white, soft gray, graphite, and hairline precise before introducing chroma. - Use clipped rectangular swatches, rails, and dots as a repeatable system rather than illustrations. - Check contrast for colored labels by pairing saturated marks with graphite text instead of relying on colored text alone. ### Don't - Do not use rainbow gradients, neon glows, arbitrary confetti, or free-floating decorative blobs. - Do not make the screen look like a textbook color theory exercise page or a flat poster catalog. - Do not mix many radius sizes or use color as a substitute for product hierarchy and state design. - Do not fill entire panels with saturated colors unless the product state truly requires a critical alert.
DESIGN.md
---
version: "alpha"
name: "Calibrated Paint Canvas"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
accent: "#D8D939"
background: "#F8F6F1"
border: "#DCD8CF"
error: "#D94B3D"
info: "#2767D8"
muted: "#74736F"
primary: "#1D4ED8"
secondary: "#F05A3B"
success: "#3DBB86"
surface: "#FFFFFF"
text: "#242424"
warning: "#C9B900"
typography:
headline-lg:
fontFamily: "Instrument Sans"
fontSize: "1.816rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.018em"
headline-md:
fontFamily: "Instrument Sans"
fontSize: "1.488rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.018em"
body-md:
fontFamily: "Inter"
fontSize: "16px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.018em"
label-md:
fontFamily: "IBM Plex Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
full: "9999px"
lg: "18px"
md: "14px"
none: "0px"
sm: "10px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
components:
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-background:
backgroundColor: "{colors.background}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-primary:
backgroundColor: "{colors.primary}"
color-reference-secondary:
backgroundColor: "{colors.secondary}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-warning:
backgroundColor: "{colors.warning}"
button-primary:
backgroundColor: "{colors.primary}"
textColor: "#ffffff"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Calibrated Paint Canvas
## Overview
A premium neutral product interface where Apple-clean surfaces are interrupted by disciplined color-study marks that behave as navigation, annotation, focus, and data semantics rather than decoration.
### Values
- quiet product trust
- calibrated chroma with assigned jobs
- catalog-grade spacing and alignment
- legible interactive state design
- fresh color intelligence without chaos
### Anti-Values
- rainbow decoration without product role
- generic SaaS blobs or gradient hero art
- textbook color-wheel worksheets
- confetti-style accents
- overstuffed component catalogs
### Visual Character
- Warm off-white app shell with soft gray inset panels, 1px cool borders, and large unbroken negative space around a single workspace artifact.
- Small brushlike color swatches appear as clipped tabs, annotation chips, active rails, chart ticks, and focus rings with no full-bleed color fields.
- Graphite typography uses tight display tracking, tabular numerals, and restrained section labels to keep the interface product-first.
- Cards use one committed 18px radius geometry, feather-light shadows, and hairline separators so color accents carry state rather than volume.
- Interactive controls reveal chroma through narrow left edges, underlines, and halo outlines while default states remain white, gray, and quiet.
## Colors
Use the YAML color tokens as the normative palette. The prose below names the roles agents should preserve when generating UI.
| Token | Value |
|-------|-------|
| accent | `#D8D939` |
| background | `#F8F6F1` |
| border | `#DCD8CF` |
| error | `#D94B3D` |
| info | `#2767D8` |
| muted | `#74736F` |
| primary | `#1D4ED8` |
| secondary | `#F05A3B` |
| success | `#3DBB86` |
| surface | `#FFFFFF` |
| text | `#242424` |
| warning | `#C9B900` |
## Typography
- **Headline-Lg**: Instrument Sans, 1.816rem, weight 700, line-height 1.1.
- **Headline-Md**: Instrument Sans, 1.488rem, weight 600, line-height 1.15.
- **Body-Md**: Inter, 16px, 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`
### Breakpoints
mobile 375px, tablet 768px, desktop 1200px, wide 1440px
### Grid
Twelve-column desktop shell with a left product rail, central editor canvas, and right calibration inspector; collapses to stacked artifact cards below tablet width.
### Whitespace
Large warm-white gutters separate major panes; dense details live inside cards with 16px internal rhythm and 24px section gaps.
## Elevation & Depth
### Shadows
- **Lg**: 0 24px 80px rgba(36, 36, 36, 0.12)
- **Md**: 0 12px 36px rgba(36, 36, 36, 0.08)
- **Sm**: 0 1px 2px rgba(36, 36, 36, 0.05)
## Shapes
### Rounded
- **Full**: `9999px`
- **Lg**: `18px`
- **Md**: `14px`
- **None**: `0px`
- **Sm**: `10px`
### Surfaces
- **Bg Pattern**: barely visible 24px neutral alignment grid used only in the outer app canvas
- **Card Style**: 18px radius white cards with 1px linen-gray borders, tiny shadow, and deliberate painted accent notches
- **Treatment**: warm white planes over a chalk-warm background with subtle top highlights and no glass blur
### Borders
- **Accent Width**: 4px
- **Character**: precise graphite and linen borders anchor the system; saturated borders appear only for active, focus, selection, or annotation roles
- **Default Width**: 1px
- **Style**: solid hairline borders with occasional brush-edge accent strips
## Components
### Composition
Use a single product workspace as the dominant artifact: a neutral inspector/editor canvas with clipped color study moments attached to real controls, data, and notes.
### Density
Moderate product density with generous gutters, compact metadata, and spacious decision zones so color marks feel curated rather than busy.
### Hierarchy
Let graphite type, whitespace, and border weight establish hierarchy first; saturated color may only mark active sections, selected records, validation, focus, or measured chart values.
### Signature Patterns
- Paint-tab navigation: active tabs receive a short uneven color slab on the top edge while inactive tabs stay monochrome.
- Annotation chips use white pills with a 4px brushed color rail, mono labels, and tiny circular paint dot indicators tied to status.
- Data charts render as graphite tracks interrupted by small cobalt, tomato, citron, and mint tick marks instead of large filled graphs.
- Focus and selection states use offset double rings: a graphite hairline plus a saturated color halo displaced by 2px.
- Panel corners remain consistently 18px while color swatches are rectangular clipped stickers, preventing arbitrary soft blob geometry.
## 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-019e4592-77b8-77c0-829f-b519e8bc1dea/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 Assign every saturated color to a named product role such as active tab, warning chip, focus ring, chart mark, or annotation.
- Do Keep the default interface warm white, soft gray, graphite, and hairline precise before introducing chroma.
- Do Use clipped rectangular swatches, rails, and dots as a repeatable system rather than illustrations.
- Do Check contrast for colored labels by pairing saturated marks with graphite text instead of relying on colored text alone.
- Don't Do not use rainbow gradients, neon glows, arbitrary confetti, or free-floating decorative blobs.
- Don't Do not make the screen look like a textbook color theory exercise page or a flat poster catalog.
- Don't Do not mix many radius sizes or use color as a substitute for product hierarchy and state design.
- Don't Do not fill entire panels with saturated colors unless the product state truly requires a critical alert.
shadcn/ui theme
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "calibrated-paint-canvas",
"type": "registry:theme",
"title": "Calibrated Paint Canvas shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F8F6F1",
"foreground": "#242424",
"card": "#FFFFFF",
"card-foreground": "#242424",
"popover": "#FFFFFF",
"popover-foreground": "#242424",
"primary": "#1D4ED8",
"primary-foreground": "#ffffff",
"secondary": "#F05A3B",
"secondary-foreground": "#ffffff",
"muted": "#74736F",
"muted-foreground": "#242424",
"accent": "#D8D939",
"accent-foreground": "#111111",
"destructive": "#D94B3D",
"border": "#DCD8CF",
"input": "#DCD8CF",
"ring": "#D8D939",
"chart-1": "#1D4ED8",
"chart-2": "#F05A3B",
"chart-3": "#D8D939",
"chart-4": "#3DBB86",
"chart-5": "#C9B900",
"sidebar": "#FFFFFF",
"sidebar-foreground": "#242424",
"sidebar-primary": "#1D4ED8",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#2767D8",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#DCD8CF",
"sidebar-ring": "#D8D939",
"radius": "14px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#1D4ED8",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#D8D939",
"accent-foreground": "#111111",
"destructive": "#D94B3D",
"border": "#303642",
"input": "#303642",
"ring": "#D8D939",
"chart-1": "#1D4ED8",
"chart-2": "#F05A3B",
"chart-3": "#D8D939",
"chart-4": "#3DBB86",
"chart-5": "#C9B900",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#1D4ED8",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#D8D939",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#303642",
"sidebar-ring": "#D8D939",
"radius": "14px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019e4592-77b8-77c0-829f-b519e8bc1dea",
"slug": "calibrated-paint-canvas",
"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": {
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"colors": [
"accent",
"background",
"border",
"error",
"info",
"muted",
"primary",
"secondary",
"success",
"surface",
"text",
"warning"
],
"motion": [
"duration",
"easing",
"philosophy"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
]
}
}
}
```embodiments
at a glance
Typography
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Components
Components rendered with this language’s tokens — colors, type, and rounded corners as specified.
Spacing
- base8px
- xs4px
- sm8px
- md12px
- lg16px
- xl24px
- 2xl32px
- 3xl48px
- 4xl64px
Shape
implementation kit
DESIGN.md with shadcn
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.
advanced implementation filesoptional machine-readable theme, CSS, TSX starter, recipes, and preview contract
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table:root {
--background: #F8F6F1;
--foreground: #242424;
--card: #FFFFFF;
--card-foreground: #242424;
--popover: #FFFFFF;
--popover-foreground: #242424;
--primary: #1D4ED8;
--primary-foreground: #ffffff;
--secondary: #F05A3B;
--secondary-foreground: #ffffff;
--muted: #74736F;
--muted-foreground: #242424;
--accent: #D8D939;
--accent-foreground: #111111;
--destructive: #D94B3D;
--border: #DCD8CF;
--input: #DCD8CF;
--ring: #D8D939;
--chart-1: #1D4ED8;
--chart-2: #F05A3B;
--chart-3: #D8D939;
--chart-4: #3DBB86;
--chart-5: #C9B900;
--sidebar: #FFFFFF;
--sidebar-foreground: #242424;
--sidebar-primary: #1D4ED8;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #2767D8;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #DCD8CF;
--sidebar-ring: #D8D939;
--radius: 14px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #1D4ED8;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #D8D939;
--accent-foreground: #111111;
--destructive: #D94B3D;
--border: #303642;
--input: #303642;
--ring: #D8D939;
--chart-1: #1D4ED8;
--chart-2: #F05A3B;
--chart-3: #D8D939;
--chart-4: #3DBB86;
--chart-5: #C9B900;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #1D4ED8;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #D8D939;
--sidebar-accent-foreground: #111111;
--sidebar-border: #303642;
--sidebar-ring: #D8D939;
--radius: 14px;
}
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 CalibratedPaintCanvasShadcnKit() {
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">Calibrated Paint Canvas</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",
"cssVars": {
"dark": {
"accent": "#D8D939",
"accent-foreground": "#111111",
"background": "#0f1115",
"border": "#303642",
"card": "#181b22",
"card-foreground": "#f8fafc",
"chart-1": "#1D4ED8",
"chart-2": "#F05A3B",
"chart-3": "#D8D939",
"chart-4": "#3DBB86",
"chart-5": "#C9B900",
"destructive": "#D94B3D",
"foreground": "#f8fafc",
"input": "#303642",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#1D4ED8",
"primary-foreground": "#ffffff",
"radius": "14px",
"ring": "#D8D939",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"sidebar": "#181b22",
"sidebar-accent": "#D8D939",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#303642",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#1D4ED8",
"sidebar-primary-foreground": "#ffffff",
"sidebar-ring": "#D8D939"
},
"light": {
"accent": "#D8D939",
"accent-foreground": "#111111",
"background": "#F8F6F1",
"border": "#DCD8CF",
"card": "#FFFFFF",
"card-foreground": "#242424",
"chart-1": "#1D4ED8",
"chart-2": "#F05A3B",
"chart-3": "#D8D939",
"chart-4": "#3DBB86",
"chart-5": "#C9B900",
"destructive": "#D94B3D",
"foreground": "#242424",
"input": "#DCD8CF",
"muted": "#74736F",
"muted-foreground": "#242424",
"popover": "#FFFFFF",
"popover-foreground": "#242424",
"primary": "#1D4ED8",
"primary-foreground": "#ffffff",
"radius": "14px",
"ring": "#D8D939",
"secondary": "#F05A3B",
"secondary-foreground": "#ffffff",
"sidebar": "#FFFFFF",
"sidebar-accent": "#2767D8",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#DCD8CF",
"sidebar-foreground": "#242424",
"sidebar-primary": "#1D4ED8",
"sidebar-primary-foreground": "#ffffff",
"sidebar-ring": "#D8D939"
},
"theme": {}
},
"meta": {
"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",
"languageId": "en-019e4592-77b8-77c0-829f-b519e8bc1dea",
"nativeTokenNames": {
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"colors": [
"accent",
"background",
"border",
"error",
"info",
"muted",
"primary",
"secondary",
"success",
"surface",
"text",
"warning"
],
"motion": [
"duration",
"easing",
"philosophy"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
]
},
"slug": "calibrated-paint-canvas",
"source": "katagami"
},
"name": "calibrated-paint-canvas",
"title": "Calibrated Paint Canvas shadcn Theme",
"type": "registry:theme"
}
# Calibrated Paint Canvas shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019e4592-77b8-77c0-829f-b519e8bc1dea`
Slug: `calibrated-paint-canvas`
## Intent
A premium neutral product interface where Apple-clean surfaces are interrupted by disciplined color-study marks that behave as navigation, annotation, focus, and data semantics rather than decoration.
## 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:
{
"accent": "#D8D939",
"background": "#F8F6F1",
"border": "#DCD8CF",
"error": "#D94B3D",
"info": "#2767D8",
"muted": "#74736F",
"primary": "#1D4ED8",
"secondary": "#F05A3B",
"success": "#3DBB86",
"surface": "#FFFFFF",
"text": "#242424",
"warning": "#C9B900"
}
Typography:
{
"base_size": "16px",
"body_font": "Inter",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Instrument+Sans:wght@500;600;700&family=Inter:wght@400;500;600;700&family=IBM+Plex+Mono:wght@500;600&display=swap",
"heading_font": "Instrument Sans",
"letter_spacing": "-0.018em",
"line_height": 1.5,
"mono_font": "IBM Plex Mono",
"scale_ratio": 1.22
}
## Visual character to preserve
- Warm off-white app shell with soft gray inset panels, 1px cool borders, and large unbroken negative space around a single workspace artifact.
- Small brushlike color swatches appear as clipped tabs, annotation chips, active rails, chart ticks, and focus rings with no full-bleed color fields.
- Graphite typography uses tight display tracking, tabular numerals, and restrained section labels to keep the interface product-first.
- Cards use one committed 18px radius geometry, feather-light shadows, and hairline separators so color accents carry state rather than volume.
- Interactive controls reveal chroma through narrow left edges, underlines, and halo outlines while default states remain white, gray, and quiet.
## ShadSync visual profile
{
"family": "paper-collage",
"material": "paper",
"contour": "blob",
"border": "solid",
"underlay": true,
"grain": false,
"stickerBadges": true,
"motion": "lift",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
}
## Signature component recipes
### Button
Use `Button` for primary, secondary, outline, and ghost actions. Primary actions must expose the language's strongest contrast pair, while secondary and ghost actions should preserve the surface treatment instead of falling back to default neutral SaaS styling.
### Card
Use `Card`, `CardHeader`, `CardContent`, `CardFooter`, and `CardAction` as the main composition frame. Cards should demonstrate the language's surface, border, hierarchy, and density rules rather than appearing as generic rounded rectangles.
### Input and Textarea
Use `Input` and `Textarea` with visible focus rings, field labels, validation states, and the language's rhythm. Forms should show real product content, not placeholder-only controls.
### Select, Tabs, and Table
Use `Select`, `Tabs`, and `Table` to prove navigation, filtering, and dense data states. The table should show row rhythm, separators, hover/focus states, and an empty or status state when the language calls for it.
### Dialog and Sheet
Use `Dialog` for centered decisions and `Sheet` for contextual editing. Both should inherit the language's spacing, border, overlay, and motion rules.
## Preview shots
- `application-shell`: dashboard or workspace shell with navigation, cards, forms, and state badges.
- `detail-editor`: focused editing flow using input, textarea, select, switch/checkbox, dialog or sheet, and action buttons.
- `data-operations`: table-heavy operational view with tabs, dropdown menu affordances, badges, and destructive/empty states.
- Each preview shot must include a renderable `scene` payload with concrete headline, description, actions, and rows/fields/stats for the UI preview.
## Implementation contract
- Start from local `ui/src/components/ui` shadcn-style primitives; do not create a second component system.
- Apply `/katagami/shadcn/calibrated-paint-canvas/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: Assign every saturated color to a named product role such as active tab, warning chip, focus ring, chart mark, or annotation.; Keep the default interface warm white, soft gray, graphite, and hairline precise before introducing chroma.; Use clipped rectangular swatches, rails, and dots as a repeatable system rather than illustrations.; Check contrast for colored labels by pairing saturated marks with graphite text instead of relying on colored text alone.
- Do not: Do not use rainbow gradients, neon glows, arbitrary confetti, or free-floating decorative blobs.; Do not make the screen look like a textbook color theory exercise page or a flat poster catalog.; Do not mix many radius sizes or use color as a substitute for product hierarchy and state design.; Do not fill entire panels with saturated colors unless the product state truly requires a critical alert.
## 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 CalibratedPaintCanvasShadcnKit() {
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">Calibrated Paint Canvas</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
{
"breakpoints": "mobile 375px, tablet 768px, desktop 1200px, wide 1440px",
"grid": "Twelve-column desktop shell with a left product rail, central editor canvas, and right calibration inspector; collapses to stacked artifact cards below tablet width.",
"whitespace": "Large warm-white gutters separate major panes; dense details live inside cards with 16px internal rhythm and 24px section gaps."
}
{
"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-019e4592-77b8-77c0-829f-b519e8bc1dea",
"name": "Calibrated Paint Canvas",
"slug": "calibrated-paint-canvas"
},
"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": [
"Warm off-white app shell with soft gray inset panels, 1px cool borders, and large unbroken negative space around a single workspace artifact.",
"Small brushlike color swatches appear as clipped tabs, annotation chips, active rails, chart ticks, and focus rings with no full-bleed color fields.",
"Graphite typography uses tight display tracking, tabular numerals, and restrained section labels to keep the interface product-first.",
"Cards use one committed 18px radius geometry, feather-light shadows, and hairline separators so color accents carry state rather than volume.",
"Interactive controls reveal chroma through narrow left edges, underlines, and halo outlines while default states remain white, gray, and quiet."
],
"visualProfile": {
"family": "paper-collage",
"material": "paper",
"contour": "blob",
"border": "solid",
"underlay": true,
"grain": false,
"stickerBadges": true,
"motion": "still",
"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": "Calibrated Paint Canvas 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": [
"Assign every saturated color to a named product role such as active tab, warning chip, focus ring, chart mark, or annotation.",
"Keep the default interface warm white, soft gray, graphite, and hairline precise before introducing chroma.",
"Use clipped rectangular swatches, rails, and dots as a repeatable system rather than illustrations.",
"Check contrast for colored labels by pairing saturated marks with graphite text instead of relying on colored text alone."
],
"dont": [
"Do not use rainbow gradients, neon glows, arbitrary confetti, or free-floating decorative blobs.",
"Do not make the screen look like a textbook color theory exercise page or a flat poster catalog.",
"Do not mix many radius sizes or use color as a substitute for product hierarchy and state design.",
"Do not fill entire panels with saturated colors unless the product state truly requires a critical alert."
]
}
}