Contrast Craft Proof
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
- black production rules for structure, cinnabar enamel rules only for selected active states
- default width
- 1px
- style
- solid
colors12 items
motion3 items
- duration
- 120ms
- easing
- cubic-bezier(.2,0,.1,1)
- philosophy
- short mechanical state changes; no float, shimmer, parallax, or decorative easing
radii5 items
- full
- 9999px
- lg
- 4px
- md
- 2px
- none
- 0
- sm
- 2px
shadows3 items
- lg
- 10px 10px 0 #101010
- md
- 6px 6px 0 #101010
- sm
- 3px 3px 0 #101010
spacing2 items
- base
- 8px
- scale
- 4, 8, 12, 16, 24, 32, 48, 64
surfaces3 items
- bg pattern
- subtle 24px registration grid drawn with low-contrast neutral rules
- card style
- bone or graphite blocks with 2px ink border, tiny clipped notch, and offset rule shadow
- treatment
- flat ink-and-paper surfaces with no blur, no glass, no gradients, and deliberate neutral temperature shifts
typography8 items
- base size
- 16px
- body font
- IBM Plex Sans
- google fonts url
- https://fonts.googleapis.com/css2?family=Sora:wght@500;600;700;800&family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap
- heading font
- Sora
- letter spacing
- -0.015em
- line height
- 1.5
- mono font
- IBM Plex Mono
- scale ratio
- 1.22
rules
Build screens as editorial proof sheets: strong black axes, asymmetric information panels, measured gutters, and one small crafted accent per view.
Medium-high product density with compact controls, generous section gutters, and highly legible 16px body text.
Use weight, scale, border thickness, and neutral inversion before hue; color never carries meaning without text, shape, or position.
layout
mobile 375px, tablet 768px, desktop 1200px, wide 1440px
12-column desktop proof grid collapsing to 6 columns on tablet and single-column stacked panels on mobile.
Tight internal padding with larger editorial gutters; empty space acts as a neutral step between dense blocks.
guidance
- Define primitives first, then map every semantic state to a named token with contrast notes.
- Use one warm cinnabar accent sparingly against black, bone, graphite, and slate neutrals.
- Provide light and dark variants that preserve contrast relationships rather than merely inverting colors.
- Treat charts as safety-critical: use shape, labels, dash patterns, and limited colorblind-safe hues.
- Do not use vague gradients, glow fields, aurora backgrounds, or automatic saturation harmonies.
- Do not introduce unnamed colors in illustrations, hover states, charts, or one-off marketing blocks.
- Do not rely on accent hue alone for selected, error, success, or warning states.
- Do not soften the system with pillowed shadows, glassmorphism, or generic AI-polished rounded cards.
katagami spec
# Contrast Craft Proof ## Philosophy A high-contrast palette system for production interfaces that treats accessibility, editorial restraint, and named token discipline as the visual identity rather than as cleanup after decoration. ### Values - Contrast as composition - Small primitive palette - Named semantic intent - Crafted accent restraint - Light and dark parity ### Anti-Values - AI-polished gradient haze - Unnamed one-off colors - Random saturation spikes - Low-contrast decorative neutrals ### Visual Character - CSS uses hard neutral steps with black-ink text, bone backgrounds, graphite surfaces, and 1px/2px borders instead of soft gradient atmospheres. - Accent color appears as a narrow cinnabar enamel strip, small status chip, or chart mark capped by explicit max-width utility classes. - Cards use squared 2px radii, offset rule shadows, and clipped corner notches to create manufactured craft rather than generic rounded SaaS polish. - Light and dark modes share identical semantic slots with inverted neutral ramps and preserved AA/AAA contrast ratios for every text state. ## Tokens ### Borders - **Accent Width**: 4px - **Character**: black production rules for structure, cinnabar enamel rules only for selected active states - **Default Width**: 1px - **Style**: solid ### Colors | Name | Value | |------|-------| | accent | `#B6422A` | | background | `#FAF8F1` | | border | `#2A2926` | | error | `#A72E24` | | info | `#245C7A` | | muted | `#6A665F` | | primary | `#101010` | | secondary | `#F2EFE8` | | success | `#176C4A` | | surface | `#E8E3D8` | | text | `#101010` | | warning | `#8A5A00` | ### Motion - **Duration**: 120ms - **Easing**: cubic-bezier(.2,0,.1,1) - **Philosophy**: short mechanical state changes; no float, shimmer, parallax, or decorative easing ### Radii - **Full**: 9999px - **Lg**: 4px - **Md**: 2px - **None**: 0 - **Sm**: 2px ### Shadows - **Lg**: 10px 10px 0 #101010 - **Md**: 6px 6px 0 #101010 - **Sm**: 3px 3px 0 #101010 ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64] ### Surfaces - **Bg Pattern**: subtle 24px registration grid drawn with low-contrast neutral rules - **Card Style**: bone or graphite blocks with 2px ink border, tiny clipped notch, and offset rule shadow - **Treatment**: flat ink-and-paper surfaces with no blur, no glass, no gradients, and deliberate neutral temperature shifts ### Typography - **Base Size**: 16px - **Body Font**: IBM Plex Sans - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Sora:wght@500;600;700;800&family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap - **Heading Font**: Sora - **Letter Spacing**: -0.015em - **Line Height**: 1.5 - **Mono Font**: IBM Plex Mono - **Scale Ratio**: 1.22 ## Rules ### Composition Build screens as editorial proof sheets: strong black axes, asymmetric information panels, measured gutters, and one small crafted accent per view. ### Density Medium-high product density with compact controls, generous section gutters, and highly legible 16px body text. ### Hierarchy Use weight, scale, border thickness, and neutral inversion before hue; color never carries meaning without text, shape, or position. ### Signature Patterns - Registration-grid backgrounds use repeating-linear-gradient neutral rules at 24px intervals with opacity below visible text contrast thresholds. - Proof cards include a clipped top-right notch via clip-path plus an offset black shadow that reads as print production furniture. - Accent governance uses a .cinnabar-cap utility that restricts accent fills to thin strips, badges, selected tabs, and chart strokes. - Contrast badges pair mono token names with explicit AA or AAA labels so accessibility metadata becomes visible interface texture. ## Layout ### Breakpoints mobile 375px, tablet 768px, desktop 1200px, wide 1440px ### Grid 12-column desktop proof grid collapsing to 6 columns on tablet and single-column stacked panels on mobile. ### Whitespace Tight internal padding with larger editorial gutters; empty space acts as a neutral step between dense blocks. ## Guidance ### Do - Define primitives first, then map every semantic state to a named token with contrast notes. - Use one warm cinnabar accent sparingly against black, bone, graphite, and slate neutrals. - Provide light and dark variants that preserve contrast relationships rather than merely inverting colors. - Treat charts as safety-critical: use shape, labels, dash patterns, and limited colorblind-safe hues. ### Don't - Do not use vague gradients, glow fields, aurora backgrounds, or automatic saturation harmonies. - Do not introduce unnamed colors in illustrations, hover states, charts, or one-off marketing blocks. - Do not rely on accent hue alone for selected, error, success, or warning states. - Do not soften the system with pillowed shadows, glassmorphism, or generic AI-polished rounded cards.
DESIGN.md
---
version: "alpha"
name: "Contrast Craft Proof"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
accent: "#B6422A"
background: "#FAF8F1"
border: "#2A2926"
error: "#A72E24"
info: "#245C7A"
muted: "#6A665F"
primary: "#101010"
secondary: "#F2EFE8"
success: "#176C4A"
surface: "#E8E3D8"
text: "#101010"
warning: "#8A5A00"
typography:
headline-lg:
fontFamily: "Sora"
fontSize: "1.816rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.015em"
headline-md:
fontFamily: "Sora"
fontSize: "1.488rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.015em"
body-md:
fontFamily: "IBM Plex Sans"
fontSize: "16px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.015em"
label-md:
fontFamily: "IBM Plex Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
full: "9999px"
lg: "4px"
md: "2px"
none: "0px"
sm: "2px"
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"
---
# Contrast Craft Proof
## Overview
A high-contrast palette system for production interfaces that treats accessibility, editorial restraint, and named token discipline as the visual identity rather than as cleanup after decoration.
### Values
- Contrast as composition
- Small primitive palette
- Named semantic intent
- Crafted accent restraint
- Light and dark parity
### Anti-Values
- AI-polished gradient haze
- Unnamed one-off colors
- Random saturation spikes
- Low-contrast decorative neutrals
### Visual Character
- CSS uses hard neutral steps with black-ink text, bone backgrounds, graphite surfaces, and 1px/2px borders instead of soft gradient atmospheres.
- Accent color appears as a narrow cinnabar enamel strip, small status chip, or chart mark capped by explicit max-width utility classes.
- Cards use squared 2px radii, offset rule shadows, and clipped corner notches to create manufactured craft rather than generic rounded SaaS polish.
- Light and dark modes share identical semantic slots with inverted neutral ramps and preserved AA/AAA contrast ratios for every text state.
## 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 | `#B6422A` |
| background | `#FAF8F1` |
| border | `#2A2926` |
| error | `#A72E24` |
| info | `#245C7A` |
| muted | `#6A665F` |
| primary | `#101010` |
| secondary | `#F2EFE8` |
| success | `#176C4A` |
| surface | `#E8E3D8` |
| text | `#101010` |
| warning | `#8A5A00` |
## Typography
- **Headline-Lg**: Sora, 1.816rem, weight 700, line-height 1.1.
- **Headline-Md**: Sora, 1.488rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Sans, 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
12-column desktop proof grid collapsing to 6 columns on tablet and single-column stacked panels on mobile.
### Whitespace
Tight internal padding with larger editorial gutters; empty space acts as a neutral step between dense blocks.
## Elevation & Depth
### Shadows
- **Lg**: 10px 10px 0 #101010
- **Md**: 6px 6px 0 #101010
- **Sm**: 3px 3px 0 #101010
## Shapes
### Rounded
- **Full**: `9999px`
- **Lg**: `4px`
- **Md**: `2px`
- **None**: `0px`
- **Sm**: `2px`
### Surfaces
- **Bg Pattern**: subtle 24px registration grid drawn with low-contrast neutral rules
- **Card Style**: bone or graphite blocks with 2px ink border, tiny clipped notch, and offset rule shadow
- **Treatment**: flat ink-and-paper surfaces with no blur, no glass, no gradients, and deliberate neutral temperature shifts
### Borders
- **Accent Width**: 4px
- **Character**: black production rules for structure, cinnabar enamel rules only for selected active states
- **Default Width**: 1px
- **Style**: solid
## Components
### Composition
Build screens as editorial proof sheets: strong black axes, asymmetric information panels, measured gutters, and one small crafted accent per view.
### Density
Medium-high product density with compact controls, generous section gutters, and highly legible 16px body text.
### Hierarchy
Use weight, scale, border thickness, and neutral inversion before hue; color never carries meaning without text, shape, or position.
### Signature Patterns
- Registration-grid backgrounds use repeating-linear-gradient neutral rules at 24px intervals with opacity below visible text contrast thresholds.
- Proof cards include a clipped top-right notch via clip-path plus an offset black shadow that reads as print production furniture.
- Accent governance uses a .cinnabar-cap utility that restricts accent fills to thin strips, badges, selected tabs, and chart strokes.
- Contrast badges pair mono token names with explicit AA or AAA labels so accessibility metadata becomes visible interface texture.
## 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-019ea9b2-f7ec-7841-8335-35618e48e7c8/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 Define primitives first, then map every semantic state to a named token with contrast notes.
- Do Use one warm cinnabar accent sparingly against black, bone, graphite, and slate neutrals.
- Do Provide light and dark variants that preserve contrast relationships rather than merely inverting colors.
- Do Treat charts as safety-critical: use shape, labels, dash patterns, and limited colorblind-safe hues.
- Don't Do not use vague gradients, glow fields, aurora backgrounds, or automatic saturation harmonies.
- Don't Do not introduce unnamed colors in illustrations, hover states, charts, or one-off marketing blocks.
- Don't Do not rely on accent hue alone for selected, error, success, or warning states.
- Don't Do not soften the system with pillowed shadows, glassmorphism, or generic AI-polished rounded cards.
shadcn/ui theme
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "contrast-craft-proof",
"type": "registry:theme",
"title": "Contrast Craft Proof shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#FAF8F1",
"foreground": "#101010",
"card": "#E8E3D8",
"card-foreground": "#101010",
"popover": "#E8E3D8",
"popover-foreground": "#101010",
"primary": "#101010",
"primary-foreground": "#ffffff",
"secondary": "#F2EFE8",
"secondary-foreground": "#111111",
"muted": "#6A665F",
"muted-foreground": "#101010",
"accent": "#B6422A",
"accent-foreground": "#ffffff",
"destructive": "#A72E24",
"border": "#2A2926",
"input": "#2A2926",
"ring": "#B6422A",
"chart-1": "#101010",
"chart-2": "#F2EFE8",
"chart-3": "#B6422A",
"chart-4": "#176C4A",
"chart-5": "#8A5A00",
"sidebar": "#E8E3D8",
"sidebar-foreground": "#101010",
"sidebar-primary": "#101010",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#245C7A",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#2A2926",
"sidebar-ring": "#B6422A",
"radius": "2px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#101010",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#B6422A",
"accent-foreground": "#ffffff",
"destructive": "#A72E24",
"border": "#303642",
"input": "#303642",
"ring": "#B6422A",
"chart-1": "#101010",
"chart-2": "#F2EFE8",
"chart-3": "#B6422A",
"chart-4": "#176C4A",
"chart-5": "#8A5A00",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#101010",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#B6422A",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#B6422A",
"radius": "2px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ea9b2-f7ec-7841-8335-35618e48e7c8",
"slug": "contrast-craft-proof",
"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: #FAF8F1;
--foreground: #101010;
--card: #E8E3D8;
--card-foreground: #101010;
--popover: #E8E3D8;
--popover-foreground: #101010;
--primary: #101010;
--primary-foreground: #ffffff;
--secondary: #F2EFE8;
--secondary-foreground: #111111;
--muted: #6A665F;
--muted-foreground: #101010;
--accent: #B6422A;
--accent-foreground: #ffffff;
--destructive: #A72E24;
--border: #2A2926;
--input: #2A2926;
--ring: #B6422A;
--chart-1: #101010;
--chart-2: #F2EFE8;
--chart-3: #B6422A;
--chart-4: #176C4A;
--chart-5: #8A5A00;
--sidebar: #E8E3D8;
--sidebar-foreground: #101010;
--sidebar-primary: #101010;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #245C7A;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #2A2926;
--sidebar-ring: #B6422A;
--radius: 2px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #101010;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #B6422A;
--accent-foreground: #ffffff;
--destructive: #A72E24;
--border: #303642;
--input: #303642;
--ring: #B6422A;
--chart-1: #101010;
--chart-2: #F2EFE8;
--chart-3: #B6422A;
--chart-4: #176C4A;
--chart-5: #8A5A00;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #101010;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #B6422A;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #B6422A;
--radius: 2px;
}
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 ContrastCraftProofShadcnKit() {
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">Contrast Craft Proof</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": "contrast-craft-proof",
"type": "registry:theme",
"title": "Contrast Craft Proof shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#FAF8F1",
"foreground": "#101010",
"card": "#E8E3D8",
"card-foreground": "#101010",
"popover": "#E8E3D8",
"popover-foreground": "#101010",
"primary": "#101010",
"primary-foreground": "#ffffff",
"secondary": "#F2EFE8",
"secondary-foreground": "#111111",
"muted": "#6A665F",
"muted-foreground": "#101010",
"accent": "#B6422A",
"accent-foreground": "#ffffff",
"destructive": "#A72E24",
"border": "#2A2926",
"input": "#2A2926",
"ring": "#B6422A",
"chart-1": "#101010",
"chart-2": "#F2EFE8",
"chart-3": "#B6422A",
"chart-4": "#176C4A",
"chart-5": "#8A5A00",
"sidebar": "#E8E3D8",
"sidebar-foreground": "#101010",
"sidebar-primary": "#101010",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#245C7A",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#2A2926",
"sidebar-ring": "#B6422A",
"radius": "2px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#101010",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#B6422A",
"accent-foreground": "#ffffff",
"destructive": "#A72E24",
"border": "#303642",
"input": "#303642",
"ring": "#B6422A",
"chart-1": "#101010",
"chart-2": "#F2EFE8",
"chart-3": "#B6422A",
"chart-4": "#176C4A",
"chart-5": "#8A5A00",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#101010",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#B6422A",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#B6422A",
"radius": "2px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ea9b2-f7ec-7841-8335-35618e48e7c8",
"slug": "contrast-craft-proof",
"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"
]
}
}
}
# Contrast Craft Proof shadcn/ui Components
Author: `katagami-agent`
## Intent
Translate the palette system into shadcn/ui screens where high contrast, semantic token naming, and restricted cinnabar accent use are unmistakable.
## Required primitives
button, card, input, textarea, select, dialog, sheet, tabs, badge, separator, checkbox, switch, slider, tooltip, dropdown-menu, table.
## Token cues
Use bone backgrounds, paper surfaces, black ink text and borders, graphite dark surfaces, muted copy, and cinnabar only for active strips, focus rings, selected tabs, and chart marks.
## Visual character to preserve
Hard neutral steps; 1px and 2px ink rules; clipped proof-card notches; offset black rule shadows; mono token labels; visible AA/AAA contrast metadata.
## ShadSync visual profile
family: production-proof; material: ink-paper; contour: clipped-notch; border: solid-ink; underlay: registration-grid; grain: false; stickerBadges: false; motion: mechanical-120ms; density: compact-editorial; accents: cinnabar-capped.
## Signature component recipes
- button: primary uses ink fill and paper text with 3px cinnabar offset shadow; secondary is paper fill with ink border.
- card: 2px ink border, 2px radius, clipped top-right notch, 6px black offset shadow, no blur.
- input: white or dark surface, 2px ink border, mono label, cinnabar focus ring; never use pastel backgrounds.
- textarea: same as input with compact padding and visible contrast note helper text.
- select: square field with ink chevron, explicit mode label, focus ring in cinnabar.
- dialog: paper proof sheet with strong border, notch, black shadow, and one accent header rule.
- sheet: graphite or paper slab with registration-grid underlay and hard separator rules.
- tabs: selected tab gets a 4px cinnabar top or left rule; inactive tabs remain neutral.
- badge: mono token capsule with border-left accent only for active/verified states.
- separator: 1px ink rule for local division; 2px rule for section axes.
- checkbox: square 2px ink box; checked uses cinnabar fill plus checkmark, not color alone.
- switch: rectangular mechanical track, ink border, text label adjacent for state redundancy.
- slider: black track with cinnabar value cap and numeric mono output.
- tooltip: ink fill, paper text, no glass, max one sentence.
- dropdown-menu: paper list with ink border, selected item has left accent rule.
- table: dense token register with mono names, row rules, swatches, and contrast labels.
## Preview shots
application-shell, detail-editor, data-operations.
## Implementation contract
Import local primitives from `@/components/ui/*`. Do not invent another component system, do not add unnamed hex colors, and do not exceed the accent budget.
## 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"
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"
export function ContrastCraftProofPanel() {
return (
<Card className="rounded-[2px] border-2 border-foreground bg-card shadow-[6px_6px_0_hsl(var(--foreground))]">
<CardHeader className="border-b-2 border-foreground">
<Badge className="rounded-[2px] border border-foreground border-l-4 border-l-primary font-mono">AAA verified</Badge>
<CardTitle className="font-sora tracking-[-0.04em]">Semantic token proof</CardTitle>
</CardHeader>
<CardContent className="grid gap-3 pt-4">
<Input aria-label="Token" defaultValue="color.intent.warning.fg" className="rounded-[2px] border-2" />
<Tabs defaultValue="light"><TabsList><TabsTrigger value="light">Light</TabsTrigger><TabsTrigger value="dark">Dark</TabsTrigger></TabsList></Tabs>
<Button>Run contrast lint</Button>
</CardContent>
</Card>
)
}
```
{
"artifact": "katagami:shadcn-preview-shots",
"author": "katagami-agent",
"componentRecipes": [
{
"component": "button",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "card",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "input",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "textarea",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "select",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "dialog",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "sheet",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "tabs",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "badge",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "separator",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "checkbox",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "switch",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "slider",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "tooltip",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "dropdown-menu",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
},
{
"component": "table",
"recipe": "Use hard 2px/1px ink rules, 2px radius, semantic labels, and capped cinnabar accents where state requires emphasis."
}
],
"generatedBy": "katagami-agent",
"renderable": true,
"requiresVisualProfile": true,
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"shots": [
{
"avoid": [
"gradients",
"unnamed colors",
"soft shadows"
],
"composition": "Two-column palette governance shell with rail navigation and proof cards.",
"id": "application-shell",
"mustShowStates": [
"active tab with cinnabar rule",
"AAA badge",
"dense token table"
],
"primitives": [
"button",
"card",
"tabs",
"badge",
"separator",
"table",
"dropdown-menu",
"tooltip"
],
"scene": {
"actions": [
"Approve token set",
"Run contrast lint"
],
"description": "Review primitive ramps, semantic aliases, and contrast status before export.",
"eyebrow": "Palette governance",
"headline": "Contrast proof desk",
"rows": [
{
"contrast": "AAA",
"hex": "#FAF8F1",
"token": "color.bg.default"
},
{
"contrast": "AA large",
"hex": "#B6422A",
"token": "color.accent.cinnabar"
}
],
"stats": [
{
"label": "AAA pairs",
"value": "18"
},
{
"label": "Unnamed hex",
"value": "0"
},
{
"label": "Accent budget",
"value": "7%"
}
]
}
},
{
"avoid": [
"color-only state",
"pastel fills"
],
"composition": "Token detail editor with contrast metadata, mode parity controls, and mechanical state toggles.",
"id": "detail-editor",
"mustShowStates": [
"focus ring",
"checked state with label",
"slider numeric output"
],
"primitives": [
"input",
"textarea",
"select",
"checkbox",
"switch",
"slider",
"dialog",
"sheet",
"button",
"badge"
],
"scene": {
"actions": [
"Save alias",
"Open dark preview"
],
"description": "Every alias requires usage notes, redundancy, and light/dark contrast parity.",
"eyebrow": "Semantic alias",
"fields": [
{
"label": "Token",
"value": "color.intent.warning.fg"
},
{
"label": "Usage",
"value": "Amber rule plus icon and label"
},
{
"label": "Mode",
"value": "Light/dark paired"
}
],
"headline": "Edit warning foreground"
}
},
{
"avoid": [
"rainbow charts",
"hue-only legends"
],
"composition": "Data-viz safety board with patterned bars, table rows, and explicit colorblind notes.",
"id": "data-operations",
"mustShowStates": [
"patterned series",
"selected row",
"export menu"
],
"primitives": [
"table",
"card",
"badge",
"separator",
"button",
"tooltip",
"dropdown-menu",
"tabs"
],
"scene": {
"actions": [
"Export chart tokens",
"Inspect failures"
],
"description": "Series combine hue, dash pattern, labels, and ordering for accessible operations screens.",
"eyebrow": "Chart tokens",
"headline": "Safe series register",
"rows": [
{
"hex": "#245C7A",
"series": "info dash",
"shape": "diagonal stripe"
},
{
"hex": "#176C4A",
"series": "success hatch",
"shape": "vertical hatch"
}
],
"stats": [
{
"label": "Series",
"value": "6"
},
{
"label": "Patterned",
"value": "4"
},
{
"label": "Failures",
"value": "0"
}
]
}
}
],
"version": "preview-shots-v1",
"visualProfile": {
"accents": "cinnabar-capped",
"border": "solid-ink",
"contour": "clipped-notch",
"density": "compact-editorial",
"family": "production-proof",
"grain": false,
"material": "ink-paper",
"motion": "mechanical-120ms",
"stickerBadges": false,
"underlay": "registration-grid"
}
}