Typography
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
A portable design language for agents: download the markdown first, then inspect the preview, tokens, and rules as needed.
Portable DESIGN.md source of truth for most agents and apps.
Compose like a premium sample box: one dominant carton panel, small label islands, barcode-like data strips, and more empty paper than content.
Dramatic scale: a large quiet Fraunces headline, tiny mono batch metadata, compact controls grouped as printed label blocks. One button is clearly primary (forest + pixel seal); the rest are quieter.
Low density overall, with dense 4px bitmap clusters only at seals, corners, and status strips.
The pixel seal: a 4px-square box-shadow constellation (forest ink + one copper square) that stamps the focal action as verified, recolouring on palette swap and reappearing as registration crosshairs, stepped die-cut corner ticks, dither tone fields, and a registration meter.
A 12-column packaging sheet; the landing leads with a full-bleed hero carton, the dashboard uses an open batch-code rail plus a content sheet. Mobile stacks to single-column sealed slips.
Whitespace is the signature material: 64-96px paper fields between content, while label internals compress to 4px and 8px increments.
calm
Renders from ~390px mobile to 2560px+ ultra-wide: single-column stack with nav links and table columns dropped on mobile; contained content capped and centred on ultra-wide while only the hero spans 100vw; minmax(0,1fr) columns so grids never blow out.
mill-proof
Single-ink bitmap-reduction imagery on warm paper: a packaging subject (sample box, sealed carton) rendered in one forest ink with tone from an ordered 4px dither dot-matrix, registration crosshairs and stepped corner ticks in the margins. Calm, refined, packaging-proof — never retro arcade.
Heroes are full-bleed single-ink bitmap reductions composed with the subject dominant in frame, marks sparse in the calm paper margins. No second colour, no text. Drive the hero with background-image: var(--hero-image).
# Kerf Works ## Philosophy Kerf Works treats pixel art as a luxury registration system: one quiet forest ink on warm uncoated paper, tone built from a 4px dither dot-matrix, and every surface laid out as a die-cut carton, label, or sample sheet. Pixels appear only as small verification marks — seals, registration crosshairs, stepped corner ticks — so the bitmap reads as a premium packaging proof, never a retro game skin. ### Values - One-ink confidence with tonal paper depth - Tiny bitmap marks used as registration, not decoration - Generous calm paper that makes a small pixel feel valuable - Packaging-grade hierarchy: labels, seals, batch codes, dielines ### Anti-Values - Neon arcade nostalgia or noisy full-screen sprites - Generic SaaS dashboards with pixel icons pasted on top - Overfilled dithering that destroys the premium paper calm - Gradients, glow, or rounded friendly app bubbles ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#F4EEDF` | | surface | `#FCFAF1` | | surface_2 | `#ECE4D2` | | text | `#1C2620` | | muted | `#847C6C` | | border | `#D8CFBC` | | accent | `#233A2E` | | on_accent | `#F7F2E6` | | accent_2 | `#A6611F` | | accent_3 | `#3C5E6C` | | primary | `#233A2E` | | secondary | `#ECE4D2` | | success | `#2F5C3E` | | warning | `#946322` | | error | `#8B3A32` | | info | `#3C5E6C` | ### Typography - **Base Size**: 17px - **Body Font**: Literata - **Heading Font**: Fraunces - **Mono Font**: IBM Plex Mono - **Heading Weight**: 500 - **Heading Transform**: none - **Letter Spacing**: -0.02em - **Line Height**: 1.55 - **Scale Ratio**: 1.22 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;1,9..144,500&family=Literata:opsz,wght@7..72,400;7..72,500;7..72,600&family=IBM+Plex+Mono:wght@400;500;600&display=swap ### Radii - **None**: 0 - **Sm**: 2px - **Lg**: 16px - **Full**: 9999px ### Shadows - **Sm**: 0 1px 0 rgba(28,38,32,.10) - **Md**: 0 14px 38px rgba(35,58,46,.07) - **Lg**: 0 30px 80px rgba(35,58,46,.10) ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64,96] ### Surfaces - **Bg Pattern**: bare warm-paper field with faint single-ink fibre speckle and occasional registration marks - **Card Style**: flat carton panels: hairline ink rule, 2px radius, clipped label tabs, die-cut stepped corner ticks, sparse pixel seals, oversized gutters - **Treatment**: premium warm uncoated paper with subtle fibre speckle made from tiny single-ink radial gradients ### Borders - **Default Width**: 1px - **Accent Width**: 2px - **Style**: solid - **Character**: hairline carton rules interrupted by 4px stepped pixel ticks at selected corners (ink top-left, copper bottom-right) ### Motion - **Duration**: 160ms - **Easing**: steps(2, end) - **Philosophy**: interactions snap in two bitmap increments like print registration aligning — never bounce or float; landing reveal is gated on top of a fully settled no-JS state ## Rules ### Composition Compose like a premium sample box: one dominant carton panel, small label islands, barcode-like data strips, and more empty paper than content. ### Hierarchy Dramatic scale: a large quiet Fraunces headline, tiny mono batch metadata, compact controls grouped as printed label blocks. One button is clearly primary (forest + pixel seal); the rest are quieter. ### Density Low density overall, with dense 4px bitmap clusters only at seals, corners, and status strips. ### Signature The pixel seal: a 4px-square box-shadow constellation (forest ink + one copper square) that stamps the focal action as verified, recolouring on palette swap and reappearing as registration crosshairs, stepped die-cut corner ticks, dither tone fields, and a registration meter. ## Layout ### Grid A 12-column packaging sheet; the landing leads with a full-bleed hero carton, the dashboard uses an open batch-code rail plus a content sheet. Mobile stacks to single-column sealed slips. ### Whitespace Whitespace is the signature material: 64-96px paper fields between content, while label internals compress to 4px and 8px increments. ### Density calm ### Responsive Renders from ~390px mobile to 2560px+ ultra-wide: single-column stack with nav links and table columns dropped on mobile; contained content capped and centred on ultra-wide while only the hero spans 100vw; minmax(0,1fr) columns so grids never blow out. ### Breakpoints - **Mobile**: 390px - **Tablet**: 768px - **Desktop**: 1200px - **Wide**: 2560px ## Guidance ### Do - Use one forest ink plus paper tints before introducing any extra accent; reserve copper for seals/ticks and blue for liners/info. - Keep pixel marks physically small and aligned to a 4px bitmap grid. - Make every screen a plausible label, carton, insert, seal, or premium sample sheet. - Use empty paper to make controls and marks feel deliberately printed; build tone from dither, never gradients. ### Don't - Do not use rainbow pixel art, game characters, or neon CRT glow. - Do not fill backgrounds with dense dithering or decorative sprites. - Do not round components into friendly app bubbles or box the nav into a floating pill; keep packaging geometry crisp at 2px. - Do not give a card a single accent edge, or use generic dashboard widgets when product-package content can carry the scene. ### Accessibility High contrast throughout: forest ink #233A2E and text #1C2620 on warm paper #F4EEDF clear AA for body and large text; on-accent paper #F7F2E6 on forest is high contrast. Focus is a visible 2px forest ring plus glow. Body 17px+, table rows 14.5px+. Marks carry text labels; motion respects prefers-reduced-motion and the settled state renders with no JS. No symbol glyphs in copy — pixel marks are decorative CSS with aria-hidden. ## Imagery Direction ### Pairs With mill-proof ### Summary Single-ink bitmap-reduction imagery on warm paper: a packaging subject (sample box, sealed carton) rendered in one forest ink with tone from an ordered 4px dither dot-matrix, registration crosshairs and stepped corner ticks in the margins. Calm, refined, packaging-proof — never retro arcade. ### Subjects - a premium cedar packaging sample box - a sealed carton with a verification seal - folded paper inserts and label slips - a dieline / proof sheet ### Usage Heroes are full-bleed single-ink bitmap reductions composed with the subject dominant in frame, marks sparse in the calm paper margins. No second colour, no text. Drive the hero with background-image: var(--hero-image). ### Engine Hints - **Generator**: nano-banana-pro - **Model**: gemini-3-pro-image-preview - **Provider**: google - **Tool**: nano-banana-pro MCP - **Fallback Reason**: openai-image is billing-capped; used nano-banana-pro directly per task instruction - **Recommended Size**: 2K, 16:9 for full-bleed heroes - **Notes**: Strictly single forest ink (#233A2E) on warm paper (#F4EEDF); tone from ordered dither, never gradients. End prompts with NO text, NO letters, NO logos.
---
version: "alpha"
name: "Kerf Works"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#F4EEDF"
surface: "#FCFAF1"
surface_2: "#ECE4D2"
text: "#1C2620"
muted: "#847C6C"
border: "#D8CFBC"
accent: "#233A2E"
on_accent: "#F7F2E6"
accent_2: "#A6611F"
accent_3: "#3C5E6C"
primary: "#233A2E"
secondary: "#ECE4D2"
success: "#2F5C3E"
warning: "#946322"
error: "#8B3A32"
info: "#3C5E6C"
typography:
headline-lg:
fontFamily: "Fraunces"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Fraunces"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "Literata"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.02em"
label-md:
fontFamily: "IBM Plex Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
sm: "2px"
lg: "16px"
full: "9999px"
spacing:
base: "8px"
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-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-accent_2:
backgroundColor: "{colors.accent_2}"
color-reference-accent_3:
backgroundColor: "{colors.accent_3}"
color-reference-primary:
backgroundColor: "{colors.primary}"
color-reference-secondary:
backgroundColor: "{colors.secondary}"
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.primary}"
textColor: "#ffffff"
typography: "{typography.label-md}"
rounded: "{rounded.lg}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.lg}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.lg}"
height: "44px"
---
# Kerf Works
## Overview
Kerf Works treats pixel art as a luxury registration system: one quiet forest ink on warm uncoated paper, tone built from a 4px dither dot-matrix, and every surface laid out as a die-cut carton, label, or sample sheet. Pixels appear only as small verification marks — seals, registration crosshairs, stepped corner ticks — so the bitmap reads as a premium packaging proof, never a retro game skin.
### Values
- One-ink confidence with tonal paper depth
- Tiny bitmap marks used as registration, not decoration
- Generous calm paper that makes a small pixel feel valuable
- Packaging-grade hierarchy: labels, seals, batch codes, dielines
### Anti-Values
- Neon arcade nostalgia or noisy full-screen sprites
- Generic SaaS dashboards with pixel icons pasted on top
- Overfilled dithering that destroys the premium paper calm
- Gradients, glow, or rounded friendly app bubbles
## Colors
Use the YAML color tokens as the normative palette. The prose below names the roles agents should preserve when generating UI.
| Token | Value |
|-------|-------|
| bg | `#F4EEDF` |
| surface | `#FCFAF1` |
| surface_2 | `#ECE4D2` |
| text | `#1C2620` |
| muted | `#847C6C` |
| border | `#D8CFBC` |
| accent | `#233A2E` |
| on_accent | `#F7F2E6` |
| accent_2 | `#A6611F` |
| accent_3 | `#3C5E6C` |
| primary | `#233A2E` |
| secondary | `#ECE4D2` |
| success | `#2F5C3E` |
| warning | `#946322` |
| error | `#8B3A32` |
| info | `#3C5E6C` |
## Typography
- **Headline-Lg**: Fraunces, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Fraunces, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Literata, 17px, weight 400, line-height 1.5.
- **Label-Md**: IBM Plex Mono, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `12px`
- **Lg**: `16px`
- **Xl**: `24px`
- **2xl**: `32px`
- **3xl**: `48px`
- **4xl**: `64px`
- **Step-8**: `96px`
### Grid
A 12-column packaging sheet; the landing leads with a full-bleed hero carton, the dashboard uses an open batch-code rail plus a content sheet. Mobile stacks to single-column sealed slips.
### Whitespace
Whitespace is the signature material: 64-96px paper fields between content, while label internals compress to 4px and 8px increments.
### Density
calm
### Responsive
Renders from ~390px mobile to 2560px+ ultra-wide: single-column stack with nav links and table columns dropped on mobile; contained content capped and centred on ultra-wide while only the hero spans 100vw; minmax(0,1fr) columns so grids never blow out.
### Breakpoints
- **Mobile**: 390px
- **Tablet**: 768px
- **Desktop**: 1200px
- **Wide**: 2560px
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 0 rgba(28,38,32,.10)
- **Md**: 0 14px 38px rgba(35,58,46,.07)
- **Lg**: 0 30px 80px rgba(35,58,46,.10)
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `2px`
- **Lg**: `16px`
- **Full**: `9999px`
### Surfaces
- **Bg Pattern**: bare warm-paper field with faint single-ink fibre speckle and occasional registration marks
- **Card Style**: flat carton panels: hairline ink rule, 2px radius, clipped label tabs, die-cut stepped corner ticks, sparse pixel seals, oversized gutters
- **Treatment**: premium warm uncoated paper with subtle fibre speckle made from tiny single-ink radial gradients
### Borders
- **Default Width**: 1px
- **Accent Width**: 2px
- **Style**: solid
- **Character**: hairline carton rules interrupted by 4px stepped pixel ticks at selected corners (ink top-left, copper bottom-right)
## Components
### Composition
Compose like a premium sample box: one dominant carton panel, small label islands, barcode-like data strips, and more empty paper than content.
### Hierarchy
Dramatic scale: a large quiet Fraunces headline, tiny mono batch metadata, compact controls grouped as printed label blocks. One button is clearly primary (forest + pixel seal); the rest are quieter.
### Density
Low density overall, with dense 4px bitmap clusters only at seals, corners, and status strips.
### Signature
The pixel seal: a 4px-square box-shadow constellation (forest ink + one copper square) that stamps the focal action as verified, recolouring on palette swap and reappearing as registration crosshairs, stepped die-cut corner ticks, dither tone fields, and a registration meter.
## 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-019ef96e-8451-7be0-8f86-3d8dee3f2478/DESIGN.with-shadcn.md`.
The shadcn page also exposes optional machine-readable files for automation, but the human-facing handoff is DESIGN.md with shadcn.
Install recommended primitives with `npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table`.
Use these primitives in shadcn apps:
- button
- card
- input
- textarea
- select
- dialog
- sheet
- tabs
- badge
- separator
- checkbox
- switch
- slider
- tooltip
- dropdown-menu
- table
Implementation rule for agents: import shadcn primitives from `@/components/ui/*`, apply the generated CSS variables first, then compose the language-specific recipes from the companion MD. Katagami remains the source of truth; shadcn names are the implementation surface.
## Do's and Don'ts
- Do Use one forest ink plus paper tints before introducing any extra accent; reserve copper for seals/ticks and blue for liners/info.
- Do Keep pixel marks physically small and aligned to a 4px bitmap grid.
- Do Make every screen a plausible label, carton, insert, seal, or premium sample sheet.
- Do Use empty paper to make controls and marks feel deliberately printed; build tone from dither, never gradients.
- Don't Do not use rainbow pixel art, game characters, or neon CRT glow.
- Don't Do not fill backgrounds with dense dithering or decorative sprites.
- Don't Do not round components into friendly app bubbles or box the nav into a floating pill; keep packaging geometry crisp at 2px.
- Don't Do not give a card a single accent edge, or use generic dashboard widgets when product-package content can carry the scene.
### Accessibility
High contrast throughout: forest ink #233A2E and text #1C2620 on warm paper #F4EEDF clear AA for body and large text; on-accent paper #F7F2E6 on forest is high contrast. Focus is a visible 2px forest ring plus glow. Body 17px+, table rows 14.5px+. Marks carry text labels; motion respects prefers-reduced-motion and the settled state renders with no JS. No symbol glyphs in copy — pixel marks are decorative CSS with aria-hidden.
## Imagery Direction
### Pairs With
mill-proof
### Summary
Single-ink bitmap-reduction imagery on warm paper: a packaging subject (sample box, sealed carton) rendered in one forest ink with tone from an ordered 4px dither dot-matrix, registration crosshairs and stepped corner ticks in the margins. Calm, refined, packaging-proof — never retro arcade.
### Subjects
- a premium cedar packaging sample box
- a sealed carton with a verification seal
- folded paper inserts and label slips
- a dieline / proof sheet
### Usage
Heroes are full-bleed single-ink bitmap reductions composed with the subject dominant in frame, marks sparse in the calm paper margins. No second colour, no text. Drive the hero with background-image: var(--hero-image).
### Engine Hints
- **Generator**: nano-banana-pro
- **Model**: gemini-3-pro-image-preview
- **Provider**: google
- **Tool**: nano-banana-pro MCP
- **Fallback Reason**: openai-image is billing-capped; used nano-banana-pro directly per task instruction
- **Recommended Size**: 2K, 16:9 for full-bleed heroes
- **Notes**: Strictly single forest ink (#233A2E) on warm paper (#F4EEDF); tone from ordered dither, never gradients. End prompts with NO text, NO letters, NO logos.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "kerf-works",
"type": "registry:theme",
"title": "Kerf Works shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F4EEDF",
"foreground": "#1C2620",
"card": "#FCFAF1",
"card-foreground": "#1C2620",
"popover": "#FCFAF1",
"popover-foreground": "#1C2620",
"primary": "#233A2E",
"primary-foreground": "#ffffff",
"secondary": "#ECE4D2",
"secondary-foreground": "#111111",
"muted": "#847C6C",
"muted-foreground": "#1C2620",
"accent": "#233A2E",
"accent-foreground": "#ffffff",
"destructive": "#8B3A32",
"border": "#D8CFBC",
"input": "#D8CFBC",
"ring": "#233A2E",
"chart-1": "#233A2E",
"chart-2": "#ECE4D2",
"chart-3": "#233A2E",
"chart-4": "#2F5C3E",
"chart-5": "#946322",
"sidebar": "#FCFAF1",
"sidebar-foreground": "#1C2620",
"sidebar-primary": "#233A2E",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#3C5E6C",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#D8CFBC",
"sidebar-ring": "#233A2E",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#233A2E",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#233A2E",
"accent-foreground": "#ffffff",
"destructive": "#8B3A32",
"border": "#303642",
"input": "#303642",
"ring": "#233A2E",
"chart-1": "#233A2E",
"chart-2": "#ECE4D2",
"chart-3": "#233A2E",
"chart-4": "#2F5C3E",
"chart-5": "#946322",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#233A2E",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#233A2E",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#233A2E",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ef96e-8451-7be0-8f86-3d8dee3f2478",
"slug": "kerf-works",
"componentManifest": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
"nativeTokenNames": {
"colors": [
"accent",
"accent_2",
"accent_3",
"bg",
"border",
"error",
"info",
"muted",
"on_accent",
"primary",
"secondary",
"success",
"surface",
"surface_2",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
],
"radii": [
"full",
"lg",
"none",
"sm"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"motion": [
"duration",
"easing",
"philosophy"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
Keep Kerf Worksand 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: #F4EEDF;
--foreground: #1C2620;
--card: #FCFAF1;
--card-foreground: #1C2620;
--popover: #FCFAF1;
--popover-foreground: #1C2620;
--primary: #233A2E;
--primary-foreground: #ffffff;
--secondary: #ECE4D2;
--secondary-foreground: #111111;
--muted: #847C6C;
--muted-foreground: #1C2620;
--accent: #233A2E;
--accent-foreground: #ffffff;
--destructive: #8B3A32;
--border: #D8CFBC;
--input: #D8CFBC;
--ring: #233A2E;
--chart-1: #233A2E;
--chart-2: #ECE4D2;
--chart-3: #233A2E;
--chart-4: #2F5C3E;
--chart-5: #946322;
--sidebar: #FCFAF1;
--sidebar-foreground: #1C2620;
--sidebar-primary: #233A2E;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #3C5E6C;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #D8CFBC;
--sidebar-ring: #233A2E;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #233A2E;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #233A2E;
--accent-foreground: #ffffff;
--destructive: #8B3A32;
--border: #303642;
--input: #303642;
--ring: #233A2E;
--chart-1: #233A2E;
--chart-2: #ECE4D2;
--chart-3: #233A2E;
--chart-4: #2F5C3E;
--chart-5: #946322;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #233A2E;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #233A2E;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #233A2E;
--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 KerfWorksShadcnKit() {
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">Kerf Works</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": "kerf-works",
"type": "registry:theme",
"title": "Kerf Works",
"description": "Single-ink packaging-proof interface. Warm uncoated-paper ground, one forest ink, a copper verification seal, and a register-blue liner. Fraunces display + Literata body + IBM Plex Mono chrome. Crisp 2px packaging radii, hairline carton rules, die-cut stepped corners, and 4px pixel-seal marks; tone from dither, never gradients.",
"cssVars": {
"theme": {
"font-sans": "Literata, Georgia, serif",
"font-serif": "Literata, Georgia, serif",
"font-mono": "IBM Plex Mono, ui-monospace, monospace",
"font-display": "Fraunces, Cormorant Garamond, Georgia, serif",
"font-heading": "Fraunces, Cormorant Garamond, Georgia, serif",
"radius": "2px"
},
"light": {
"background": "#F4EEDF",
"foreground": "#1C2620",
"card": "#FCFAF1",
"card-foreground": "#1C2620",
"popover": "#FCFAF1",
"popover-foreground": "#1C2620",
"primary": "#233A2E",
"primary-foreground": "#F7F2E6",
"secondary": "#ECE4D2",
"secondary-foreground": "#233A2E",
"accent": "#A6611F",
"accent-foreground": "#F7F2E6",
"muted": "#ECE4D2",
"muted-foreground": "#847C6C",
"destructive": "#8B3A32",
"destructive-foreground": "#F7F2E6",
"success": "#2F5C3E",
"warning": "#946322",
"info": "#3C5E6C",
"border": "#D8CFBC",
"input": "#D8CFBC",
"ring": "#233A2E",
"radius": "2px"
}
}
}
# Kerf Works shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019ef96e-8451-7be0-8f86-3d8dee3f2478`
Slug: `kerf-works`
## Intent
Kerf Works treats pixel art as a luxury registration system: one quiet forest ink on warm uncoated paper, tone built from a 4px dither dot-matrix, and every surface laid out as a die-cut carton, label, or sample sheet. Pixels appear only as small verification marks — seals, registration crosshairs, stepped corner ticks — so the bitmap reads as a premium packaging proof, never a retro game skin.
## 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": "#F4EEDF",
"surface": "#FCFAF1",
"surface_2": "#ECE4D2",
"text": "#1C2620",
"muted": "#847C6C",
"border": "#D8CFBC",
"accent": "#233A2E",
"on_accent": "#F7F2E6",
"accent_2": "#A6611F",
"accent_3": "#3C5E6C",
"primary": "#233A2E",
"secondary": "#ECE4D2",
"success": "#2F5C3E",
"warning": "#946322",
"error": "#8B3A32",
"info": "#3C5E6C"
}
Typography:
{
"base_size": "17px",
"body_font": "Literata",
"heading_font": "Fraunces",
"mono_font": "IBM Plex Mono",
"heading_weight": "500",
"heading_transform": "none",
"letter_spacing": "-0.02em",
"line_height": "1.55",
"scale_ratio": "1.22",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;1,9..144,500&family=Literata:opsz,wght@7..72,400;7..72,500;7..72,600&family=IBM+Plex+Mono:wght@400;500;600&display=swap"
}
## Visual character to preserve
- Make the source language's structural identity visible in every component state.
## ShadSync visual profile
{
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": true,
"stickerBadges": false,
"motion": "still",
"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/kerf-works/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: Use one forest ink plus paper tints before introducing any extra accent; reserve copper for seals/ticks and blue for liners/info.; Keep pixel marks physically small and aligned to a 4px bitmap grid.; Make every screen a plausible label, carton, insert, seal, or premium sample sheet.; Use empty paper to make controls and marks feel deliberately printed; build tone from dither, never gradients.
- Do not: Do not use rainbow pixel art, game characters, or neon CRT glow.; Do not fill backgrounds with dense dithering or decorative sprites.; Do not round components into friendly app bubbles or box the nav into a floating pill; keep packaging geometry crisp at 2px.; Do not give a card a single accent edge, or use generic dashboard widgets when product-package content can carry the scene.
## 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 KerfWorksShadcnKit() {
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">Kerf Works</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": "A 12-column packaging sheet; the landing leads with a full-bleed hero carton, the dashboard uses an open batch-code rail plus a content sheet. Mobile stacks to single-column sealed slips.",
"whitespace": "Whitespace is the signature material: 64-96px paper fields between content, while label internals compress to 4px and 8px increments.",
"density": "calm",
"responsive": "Renders from ~390px mobile to 2560px+ ultra-wide: single-column stack with nav links and table columns dropped on mobile; contained content capped and centred on ultra-wide while only the hero spans 100vw; minmax(0,1fr) columns so grids never blow out.",
"breakpoints": {
"mobile": "390px",
"tablet": "768px",
"desktop": "1200px",
"wide": "2560px"
}
}
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"author": "katagami-agent",
"generatedBy": "katagami-agent",
"requiresVisualProfile": true,
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"language": { "id": "", "name": "Kerf Works", "slug": "kerf-works" },
"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": [
"Single ink: warm uncoated-paper ground, one forest ink does the work; copper is reserved for verification seals and corner ticks, register-blue for liners and info.",
"Cards are carton panels with hairline rules and die-cut stepped corners (ink tick top-left, copper tick bottom-right) — never a single accent edge, never a nested or boxed widget.",
"Chrome is batch-code mono uppercase with small filled-square bullets; tone is built from a 4px dither dot-matrix, never gradients; corners are crisp 2px packaging radii.",
"A 4px pixel-seal constellation stamps the focal call-to-action as verified."
],
"visualProfile": {
"family": "packaging-proof",
"material": "paper",
"contour": "die-cut",
"border": "hairline",
"underlay": true,
"grain": true,
"stickerBadges": false,
"motion": "snap",
"density": "calm",
"accents": ["accent", "warning", "info"]
},
"shots": [
{
"id": "application-shell",
"title": "The press floor",
"viewport": "desktop",
"primitives": ["button", "card", "input", "select", "tabs", "badge", "separator", "table"],
"composition": "A press-floor desk: an open batch-code rail, stat cards with dither strips and sparklines, a filter row, and the batch ledger with status badges and a barcode-like data strip.",
"mustShow": ["forest primary action vs paper ghost secondary action", "carton panel cards with hairline rule + die-cut stepped corners (no accent edge, no border on edge)", "forest/copper/blue status badges with filled-square bullets", "mono batch codes on a warm-paper ledger with fold-tint zebra"],
"avoid": ["a single accent edge on a card", "rounded app bubbles", "gradients or glow", "dense decorative dither as a background", "boxing the nav into a floating pill"],
"scene": {
"eyebrow": "press floor",
"headline": "Today on press",
"description": "Every batch registered to the 4px grid: queued, on press, drying, shipped, held.",
"primaryAction": "New batch",
"secondaryAction": "Export ledger",
"stats": [
{ "label": "runs on press", "value": "12", "tone": "accent" },
{ "label": "cartons printed", "value": "8,420", "tone": "default" },
{ "label": "registration rate", "value": "98.2%", "tone": "info" }
],
"rows": [
{ "label": "Cedar Box, half-dozen", "value": "Uncoated Cover · 500", "status": "shipped" },
{ "label": "Copper Seal Card", "value": "Copper Foil · 120", "status": "on press" },
{ "label": "Register Blue Liner", "value": "Blue Liner · 300", "status": "drying" },
{ "label": "Apothecary Insert", "value": "Uncoated Cover · 750", "status": "held" }
],
"statuses": ["Shipped", "On press", "Drying", "Held"]
}
},
{
"id": "detail-editor",
"title": "Send a batch to press",
"viewport": "tablet",
"primitives": ["button", "card", "input", "textarea", "select", "checkbox", "switch", "slider", "dialog", "sheet"],
"composition": "A new-batch order slip proving labels, an invalid run-size state, a finishing checkbox, a die-cut-corners switch, an ink-coverage slider, and a proof sign-off confirm dialog.",
"mustShow": ["mono uppercase field labels on premium stock", "checkbox that stamps a pixel mark when checked", "registration-slide switch", "forest primary 'Send to press' with a pixel-seal mark", "die-cut stepped corners on the order panel"],
"avoid": ["visible browser default controls", "rounded friendly bubbles", "a second wash of colour behind the form"],
"scene": {
"eyebrow": "order slip",
"headline": "Send — Copper Seal Card",
"description": "A batch order proving labels, an invalid run state, finishing toggles, an ink-coverage slider, and a sign-off confirm.",
"primaryAction": "Send to press",
"secondaryAction": "Save draft",
"fields": [
{ "label": "Specimen", "value": "Cedar Box, half-dozen", "type": "text" },
{ "label": "Run size", "value": "— set a run of 100 or more before sending", "type": "invalid" },
{ "label": "Finish", "value": "Single-ink letterpress", "type": "select" },
{ "label": "Die-cut stepped corners", "value": "on", "type": "switch" }
],
"statuses": ["Queued", "Invalid", "On press"]
}
},
{
"id": "data-operations",
"title": "Batch queue",
"viewport": "mobile",
"primitives": ["button", "tabs", "badge", "dropdown-menu", "table", "tooltip", "separator"],
"composition": "A single-column batch queue: batch-code tabs, the ledger dropped to Batch/Specimen/Status, a row dropdown of press actions, status badges, and a barcode data strip.",
"mustShow": ["batch-code tabs in mono", "status badges with filled-square bullets", "row dropdown of press actions", "barcode-like data strip footer"],
"avoid": ["horizontal overflow", "borders or accent edges", "rounded corners"],
"scene": {
"eyebrow": "batch ledger",
"headline": "Batch queue",
"description": "Five runs registered today; one held for re-alignment.",
"primaryAction": "New batch",
"secondaryAction": "Filter",
"rows": [
{ "label": "KW-0142-A", "value": "Cedar Box, half-dozen", "status": "shipped" },
{ "label": "KW-0143-C", "value": "Copper Seal Card", "status": "on press" },
{ "label": "KW-0144-B", "value": "Register Blue Liner", "status": "drying" },
{ "label": "KW-0145-A", "value": "Apothecary Insert", "status": "held" }
],
"statuses": ["Shipped", "On press", "Drying", "Held"]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Forest primary = the one emphasis, with a 4px pixel-seal mark; paper ghost = secondary; bordered-ghost = quiet. Shared 40-46px height, 2px radius, mono uppercase centred label." },
{ "primitive": "card", "intent": "A carton panel: surface FCFAF1, 1px hairline rule, 2px radius, die-cut stepped corner ticks (ink top-left, copper bottom-right). Never a single accent edge; never nested." },
{ "primitive": "input", "intent": "Field stamped on stock: paper surface, hairline rule, 2px radius, forest focus ring. Mono uppercase label above. No browser default." },
{ "primitive": "textarea", "intent": "Press-notes block, same field treatment, vertical resize only." },
{ "primitive": "select", "intent": "Carton dropdown with a custom 4px-square chevron built from ink; hairline rule, 2px radius; no native arrow." },
{ "primitive": "dialog", "intent": "Proof sign-off: carton panel with die-cut corners and a copper label tab, soft large-radius shadow, paper surface." },
{ "primitive": "sheet", "intent": "A slide-in insert sheet from the side; paper surface, hairline rule, mono header label." },
{ "primitive": "tabs", "intent": "Batch-code tabs: mono uppercase, hairline underline, forest active border-bottom; no pill chassis." },
{ "primitive": "badge", "intent": "Status chip with a small filled-square bullet; forest default, success/warning/error/info tinted at low alpha as a small part of the palette." },
{ "primitive": "separator", "intent": "Hairline carton rule with a small filled-square registration mark at the start." },
{ "primitive": "checkbox", "intent": "Stamps a pixel mark (a small ink cross of squares) on the paper box when checked; 2px radius." },
{ "primitive": "switch", "intent": "Registration-slide toggle: pill track, forest knob; fills forest on and the knob turns paper; snaps in steps." },
{ "primitive": "slider", "intent": "Ink-coverage track: thin fold-tint track, forest fill, a 2px-square copper thumb." },
{ "primitive": "tooltip", "intent": "A small forest label chip in mono uppercase, like a press annotation." },
{ "primitive": "dropdown-menu", "intent": "Press-actions menu: paper surface, hairline rule, mono items with filled-square bullets." },
{ "primitive": "table", "intent": "Batch ledger: mono uppercase headers, hairline row rules, mono batch codes in ink, fold-tint hover; drops Stock/Run columns on mobile." }
],
"qualityRules": {
"do": [
"Keep one forest ink; reserve copper for verification seals and ticks, blue for liners and info.",
"Build tone from a 4px dither dot-matrix and keep pixel edges crisp.",
"Separate with hairline carton rules, die-cut stepped corners, and generous paper.",
"Set batch codes, labels, and metadata in mono uppercase; everything else in Fraunces/Literata."
],
"dont": [
"Give a card a single accent edge, or box the nav into a floating pill.",
"Round corners beyond 2px (16px/pill only where the system asks), or add gradients/glow.",
"Fill backgrounds with dense decorative dither or paste pixel sprites on widgets.",
"Solve hierarchy with extra accent colours when one ink, dither, and paper can do the work."
]
}
}