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 screens like a Swiss press sheet merged with a data ledger: one commanding headline zone, a narrow halftone register rail, and modular content slices locked to a visible column rhythm.
Use scale contrast first, then weight, then rule lines and the halftone screen, then a single vermilion register mark for the focal state. Headlines command, mono index labels stay quiet, data values are precise and sharply aligned.
Medium-high density with disciplined whitespace: content is plentiful but every cluster lives inside a measured grid with breathing room around major headlines.
The halftone register rail — a numbered monospace index column with a dot-screen tick and a vertical rule that survives all breakpoints, with the same halftone raster recurring on stat underbars, chart bars and proof textures.
A two-track editorial grid (narrow index rail + wide content span) on minmax(0,1fr) columns with min-width:0 children; collapses to a single stacked column with the index rail as a horizontal band on mobile.
Generous page margins and deliberate vertical rhythm, with compressed spacing inside data clusters so the contrast between macro-space and micro-density stays visible.
balanced
Renders from ~390px mobile to 2560px+ ultra-wide; single-column stack on mobile with non-essential nav hidden and no horizontal overflow; capped centred content on ultra-wide with only the hero spanning 100vw.
rasterwerk
High-contrast monochrome lithographic halftone dot-screen imagery: any subject rendered in pure black ink on a bright field, every tone built from a mechanical dot raster, crossed by thin hairline registration rules and crop ticks aligned to a Swiss editorial grid.
One full-bleed halftone hero behind a solid white type plate on the landing; smaller halftone proofs and the dot-screen raster as the recurring interface texture on stat bars, chart bars and index ticks. End prompts with NO text, NO letters, NO logos.
# Druckwerk ## Philosophy A Swiss typographic monochrome press desk for the screen: warm press-paper ground, pure black ink, a halftone register rail as the signature mechanic, oversized grotesk headlines, structural rule lines, and one register vermilion used like a registration mark instead of decoration. ### Values - clarity through typographic structure and rule lines rather than ornamental interface chrome - asymmetric editorial grid logic that creates tension while preserving order and scanability - near-monochrome restraint where ink, scale, the halftone screen and one register mark do the expressive work ### Anti-Values - colourful accent washes, soft shadows, glass, or gradients other than the halftone dot raster - rounded consumer-app styling, nested cards, or a single coloured accent edge pinned to a panel ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#F4F3EE` | | surface | `#FFFFFF` | | surface-2 | `#ECEBE3` | | text | `#0E0E0C` | | muted | `#6B6B64` | | border | `#14140F` | | accent | `#D9341F` | | on-accent | `#FFFFFF` | | success | `#1F5C3A` | | warning | `#8A6A00` | | error | `#A1281A` | | info | `#1E3A5F` | ### Typography - **Base Size**: 17px - **Body Font**: Archivo - **Heading Font**: Archivo - **Mono Font**: IBM Plex Mono - **Heading Weight**: 900 - **Heading Transform**: none - **Letter Spacing**: -0.02em - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Archivo:wght@400;500;600;700;800;900&family=IBM+Plex+Mono:wght@400;500;600&display=swap ### Radii - **None**: 0 - **Sm**: 0 - **Md**: 0 - **Lg**: 0 - **Full**: 9999px ### Shadows - **Sm**: none - **Md**: none - **Lg**: none ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64,96] ### Surfaces - **Treatment**: paper - **Card Style**: Flat white panel on a 2px black top rule, no side or bottom borders, no shadow, square corners; a tinted press-paper index band for register areas. - **Bg Pattern**: halftone ### Borders - **Default Width**: 1px - **Accent Width**: 2px - **Style**: solid - **Character**: Borders are structural editorial rule lines — thin, exact, near-black — that expose the grid and separate information zones; never a coloured accent edge. ### Motion - **Duration**: 160ms - **Easing**: cubic-bezier(0.2,0.8,0.2,1) - **Philosophy**: snappy ## Rules ### Composition Compose screens like a Swiss press sheet merged with a data ledger: one commanding headline zone, a narrow halftone register rail, and modular content slices locked to a visible column rhythm. ### Hierarchy Use scale contrast first, then weight, then rule lines and the halftone screen, then a single vermilion register mark for the focal state. Headlines command, mono index labels stay quiet, data values are precise and sharply aligned. ### Density Medium-high density with disciplined whitespace: content is plentiful but every cluster lives inside a measured grid with breathing room around major headlines. ### Signature The halftone register rail — a numbered monospace index column with a dot-screen tick and a vertical rule that survives all breakpoints, with the same halftone raster recurring on stat underbars, chart bars and proof textures. ## Layout ### Grid A two-track editorial grid (narrow index rail + wide content span) on minmax(0,1fr) columns with min-width:0 children; collapses to a single stacked column with the index rail as a horizontal band on mobile. ### Whitespace Generous page margins and deliberate vertical rhythm, with compressed spacing inside data clusters so the contrast between macro-space and micro-density stays visible. ### Density balanced ### Responsive Renders from ~390px mobile to 2560px+ ultra-wide; single-column stack on mobile with non-essential nav hidden and no horizontal overflow; capped centred content on ultra-wide with only the hero spanning 100vw. ### Breakpoints - **Mobile**: 390-767 - **Tablet**: 768-1439 - **Desktop**: 1440+ ## Guidance ### Do - Use black rule lines, scale contrast, alignment and the halftone screen as the primary expressive tools. - Keep components rectangular, flat and grid-locked with visible structural seams; seat panels on a 2px black top rule. - Reserve vermilion for the registration mark and focal states; set index labels, slugs, counts and times in IBM Plex Mono uppercase. ### Don't - Introduce colourful accent washes, soft shadows, glass, or gradients other than the halftone dot raster. - Pin a single coloured accent edge to a card, nest cards, box the nav into a floating pill, or round corners. - Centre body content; preserve asymmetric tension and a left-anchored reading flow. ### Accessibility High contrast throughout (ink #0E0E0C on paper #F4F3EE, white on ink); body text 17px+, table rows 14.5px+; every form control explicitly styled with a visible vermilion focus ring and an error-red invalid state; motion respects prefers-reduced-motion. ## Imagery Direction ### Pairs With rasterwerk ### Summary High-contrast monochrome lithographic halftone dot-screen imagery: any subject rendered in pure black ink on a bright field, every tone built from a mechanical dot raster, crossed by thin hairline registration rules and crop ticks aligned to a Swiss editorial grid. ### Subjects - letterpress and offset printing machinery - press cylinders and inked rollers - architectural Swiss-modern concrete and steel - objective still-life of tools and type ### Usage One full-bleed halftone hero behind a solid white type plate on the landing; smaller halftone proofs and the dot-screen raster as the recurring interface texture on stat bars, chart bars and index ticks. End prompts with NO text, NO letters, NO logos.
---
version: "alpha"
name: "Druckwerk"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#F4F3EE"
surface: "#FFFFFF"
surface-2: "#ECEBE3"
text: "#0E0E0C"
muted: "#6B6B64"
border: "#14140F"
accent: "#D9341F"
on-accent: "#FFFFFF"
success: "#1F5C3A"
warning: "#8A6A00"
error: "#A1281A"
info: "#1E3A5F"
typography:
headline-lg:
fontFamily: "Archivo"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Archivo"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "Archivo"
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: "0px"
md: "0px"
lg: "0px"
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-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "#ffffff"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Druckwerk
## Overview
A Swiss typographic monochrome press desk for the screen: warm press-paper ground, pure black ink, a halftone register rail as the signature mechanic, oversized grotesk headlines, structural rule lines, and one register vermilion used like a registration mark instead of decoration.
### Values
- clarity through typographic structure and rule lines rather than ornamental interface chrome
- asymmetric editorial grid logic that creates tension while preserving order and scanability
- near-monochrome restraint where ink, scale, the halftone screen and one register mark do the expressive work
### Anti-Values
- colourful accent washes, soft shadows, glass, or gradients other than the halftone dot raster
- rounded consumer-app styling, nested cards, or a single coloured accent edge pinned to a panel
## 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 | `#F4F3EE` |
| surface | `#FFFFFF` |
| surface-2 | `#ECEBE3` |
| text | `#0E0E0C` |
| muted | `#6B6B64` |
| border | `#14140F` |
| accent | `#D9341F` |
| on-accent | `#FFFFFF` |
| success | `#1F5C3A` |
| warning | `#8A6A00` |
| error | `#A1281A` |
| info | `#1E3A5F` |
## Typography
- **Headline-Lg**: Archivo, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Archivo, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Archivo, 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 two-track editorial grid (narrow index rail + wide content span) on minmax(0,1fr) columns with min-width:0 children; collapses to a single stacked column with the index rail as a horizontal band on mobile.
### Whitespace
Generous page margins and deliberate vertical rhythm, with compressed spacing inside data clusters so the contrast between macro-space and micro-density stays visible.
### Density
balanced
### Responsive
Renders from ~390px mobile to 2560px+ ultra-wide; single-column stack on mobile with non-essential nav hidden and no horizontal overflow; capped centred content on ultra-wide with only the hero spanning 100vw.
### Breakpoints
- **Mobile**: 390-767
- **Tablet**: 768-1439
- **Desktop**: 1440+
## Elevation & Depth
### Shadows
- **Sm**: none
- **Md**: none
- **Lg**: none
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `0px`
- **Md**: `0px`
- **Lg**: `0px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: paper
- **Card Style**: Flat white panel on a 2px black top rule, no side or bottom borders, no shadow, square corners; a tinted press-paper index band for register areas.
- **Bg Pattern**: halftone
### Borders
- **Default Width**: 1px
- **Accent Width**: 2px
- **Style**: solid
- **Character**: Borders are structural editorial rule lines — thin, exact, near-black — that expose the grid and separate information zones; never a coloured accent edge.
## Components
### Composition
Compose screens like a Swiss press sheet merged with a data ledger: one commanding headline zone, a narrow halftone register rail, and modular content slices locked to a visible column rhythm.
### Hierarchy
Use scale contrast first, then weight, then rule lines and the halftone screen, then a single vermilion register mark for the focal state. Headlines command, mono index labels stay quiet, data values are precise and sharply aligned.
### Density
Medium-high density with disciplined whitespace: content is plentiful but every cluster lives inside a measured grid with breathing room around major headlines.
### Signature
The halftone register rail — a numbered monospace index column with a dot-screen tick and a vertical rule that survives all breakpoints, with the same halftone raster recurring on stat underbars, chart bars and proof textures.
## 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-019ef8e7-e881-7ea2-9b64-0ab97fedcfcc/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 black rule lines, scale contrast, alignment and the halftone screen as the primary expressive tools.
- Do Keep components rectangular, flat and grid-locked with visible structural seams; seat panels on a 2px black top rule.
- Do Reserve vermilion for the registration mark and focal states; set index labels, slugs, counts and times in IBM Plex Mono uppercase.
- Don't Introduce colourful accent washes, soft shadows, glass, or gradients other than the halftone dot raster.
- Don't Pin a single coloured accent edge to a card, nest cards, box the nav into a floating pill, or round corners.
- Don't Centre body content; preserve asymmetric tension and a left-anchored reading flow.
### Accessibility
High contrast throughout (ink #0E0E0C on paper #F4F3EE, white on ink); body text 17px+, table rows 14.5px+; every form control explicitly styled with a visible vermilion focus ring and an error-red invalid state; motion respects prefers-reduced-motion.
## Imagery Direction
### Pairs With
rasterwerk
### Summary
High-contrast monochrome lithographic halftone dot-screen imagery: any subject rendered in pure black ink on a bright field, every tone built from a mechanical dot raster, crossed by thin hairline registration rules and crop ticks aligned to a Swiss editorial grid.
### Subjects
- letterpress and offset printing machinery
- press cylinders and inked rollers
- architectural Swiss-modern concrete and steel
- objective still-life of tools and type
### Usage
One full-bleed halftone hero behind a solid white type plate on the landing; smaller halftone proofs and the dot-screen raster as the recurring interface texture on stat bars, chart bars and index ticks. End prompts with NO text, NO letters, NO logos.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "druckwerk",
"type": "registry:theme",
"title": "Druckwerk shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F4F3EE",
"foreground": "#0E0E0C",
"card": "#FFFFFF",
"card-foreground": "#0E0E0C",
"popover": "#FFFFFF",
"popover-foreground": "#0E0E0C",
"primary": "#0E0E0C",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#6B6B64",
"muted-foreground": "#0E0E0C",
"accent": "#D9341F",
"accent-foreground": "#ffffff",
"destructive": "#A1281A",
"border": "#14140F",
"input": "#14140F",
"ring": "#D9341F",
"chart-1": "#0E0E0C",
"chart-2": "#f4f4f5",
"chart-3": "#D9341F",
"chart-4": "#1F5C3A",
"chart-5": "#8A6A00",
"sidebar": "#FFFFFF",
"sidebar-foreground": "#0E0E0C",
"sidebar-primary": "#0E0E0C",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#1E3A5F",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#14140F",
"sidebar-ring": "#D9341F",
"radius": "0"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#0E0E0C",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#D9341F",
"accent-foreground": "#ffffff",
"destructive": "#A1281A",
"border": "#303642",
"input": "#303642",
"ring": "#D9341F",
"chart-1": "#0E0E0C",
"chart-2": "#f4f4f5",
"chart-3": "#D9341F",
"chart-4": "#1F5C3A",
"chart-5": "#8A6A00",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#0E0E0C",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#D9341F",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#D9341F",
"radius": "0"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ef8e7-e881-7ea2-9b64-0ab97fedcfcc",
"slug": "druckwerk",
"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",
"bg",
"border",
"error",
"info",
"muted",
"on-accent",
"success",
"surface",
"surface-2",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"mono_font"
],
"radii": [
"full",
"lg",
"md",
"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 Druckwerkand 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: #F4F3EE;
--foreground: #0E0E0C;
--card: #FFFFFF;
--card-foreground: #0E0E0C;
--popover: #FFFFFF;
--popover-foreground: #0E0E0C;
--primary: #0E0E0C;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #6B6B64;
--muted-foreground: #0E0E0C;
--accent: #D9341F;
--accent-foreground: #ffffff;
--destructive: #A1281A;
--border: #14140F;
--input: #14140F;
--ring: #D9341F;
--chart-1: #0E0E0C;
--chart-2: #f4f4f5;
--chart-3: #D9341F;
--chart-4: #1F5C3A;
--chart-5: #8A6A00;
--sidebar: #FFFFFF;
--sidebar-foreground: #0E0E0C;
--sidebar-primary: #0E0E0C;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #1E3A5F;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #14140F;
--sidebar-ring: #D9341F;
--radius: 0;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #0E0E0C;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #D9341F;
--accent-foreground: #ffffff;
--destructive: #A1281A;
--border: #303642;
--input: #303642;
--ring: #D9341F;
--chart-1: #0E0E0C;
--chart-2: #f4f4f5;
--chart-3: #D9341F;
--chart-4: #1F5C3A;
--chart-5: #8A6A00;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #0E0E0C;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #D9341F;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #D9341F;
--radius: 0;
}
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 DruckwerkShadcnKit() {
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">Druckwerk</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": "druckwerk",
"type": "registry:theme",
"title": "Druckwerk",
"description": "Swiss typographic monochrome press desk. Warm press-paper ground, pure black ink, structural black rule lines (1–2px) as the only separators, and one register vermilion used like a registration mark. Archivo grotesk + IBM Plex Mono index; square corners; halftone dot-screen as the signature texture.",
"cssVars": {
"theme": {
"font-sans": "Archivo, Helvetica Neue, Arial, sans-serif",
"font-mono": "IBM Plex Mono, ui-monospace, monospace",
"font-display": "Archivo, Helvetica Neue, Arial, sans-serif",
"font-heading": "Archivo, Helvetica Neue, Arial, sans-serif",
"radius": "0px"
},
"light": {
"background": "#F4F3EE",
"foreground": "#0E0E0C",
"card": "#FFFFFF",
"card-foreground": "#0E0E0C",
"popover": "#FFFFFF",
"popover-foreground": "#0E0E0C",
"primary": "#0E0E0C",
"primary-foreground": "#FFFFFF",
"secondary": "#ECEBE3",
"secondary-foreground": "#0E0E0C",
"accent": "#D9341F",
"accent-foreground": "#FFFFFF",
"muted": "#ECEBE3",
"muted-foreground": "#6B6B64",
"destructive": "#A1281A",
"destructive-foreground": "#FFFFFF",
"success": "#1F5C3A",
"warning": "#8A6A00",
"info": "#1E3A5F",
"border": "#14140F",
"input": "#14140F",
"ring": "#D9341F",
"radius": "0px"
}
}
}
# Druckwerk shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019ef8e7-e881-7ea2-9b64-0ab97fedcfcc`
Slug: `druckwerk`
## Intent
A Swiss typographic monochrome press desk for the screen: warm press-paper ground, pure black ink, a halftone register rail as the signature mechanic, oversized grotesk headlines, structural rule lines, and one register vermilion used like a registration mark instead of 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:
{
"bg": "#F4F3EE",
"surface": "#FFFFFF",
"surface-2": "#ECEBE3",
"text": "#0E0E0C",
"muted": "#6B6B64",
"border": "#14140F",
"accent": "#D9341F",
"on-accent": "#FFFFFF",
"success": "#1F5C3A",
"warning": "#8A6A00",
"error": "#A1281A",
"info": "#1E3A5F"
}
Typography:
{
"base_size": "17px",
"body_font": "Archivo",
"heading_font": "Archivo",
"mono_font": "IBM Plex Mono",
"heading_weight": "900",
"heading_transform": "none",
"letter_spacing": "-0.02em",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Archivo:wght@400;500;600;700;800;900&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/druckwerk/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 black rule lines, scale contrast, alignment and the halftone screen as the primary expressive tools.; Keep components rectangular, flat and grid-locked with visible structural seams; seat panels on a 2px black top rule.; Reserve vermilion for the registration mark and focal states; set index labels, slugs, counts and times in IBM Plex Mono uppercase.
- Do not: Introduce colourful accent washes, soft shadows, glass, or gradients other than the halftone dot raster.; Pin a single coloured accent edge to a card, nest cards, box the nav into a floating pill, or round corners.; Centre body content; preserve asymmetric tension and a left-anchored reading flow.
## 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 DruckwerkShadcnKit() {
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">Druckwerk</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 two-track editorial grid (narrow index rail + wide content span) on minmax(0,1fr) columns with min-width:0 children; collapses to a single stacked column with the index rail as a horizontal band on mobile.",
"whitespace": "Generous page margins and deliberate vertical rhythm, with compressed spacing inside data clusters so the contrast between macro-space and micro-density stays visible.",
"density": "balanced",
"responsive": "Renders from ~390px mobile to 2560px+ ultra-wide; single-column stack on mobile with non-essential nav hidden and no horizontal overflow; capped centred content on ultra-wide with only the hero spanning 100vw.",
"breakpoints": {
"mobile": "390-767",
"tablet": "768-1439",
"desktop": "1440+"
}
}
{
"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": "Druckwerk", "slug": "druckwerk" },
"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 press-paper ground (#F4F3EE), pure black ink, and ONE register vermilion used like a registration mark — never a colour wash.",
"Separation is structural: 2px black top rules on panels, 1px ink hairlines, and measured whitespace. Square corners; no soft shadows; no single coloured accent edge.",
"Archivo grotesk for everything visible; IBM Plex Mono for index labels, slugs, codes and times. The signature texture is a halftone dot-screen raster on stat bars, chart bars and index ticks."
],
"visualProfile": {
"family": "editorial",
"material": "paper",
"contour": "sharp",
"border": "structural",
"underlay": false,
"grain": "halftone",
"stickerBadges": false,
"motion": "snappy",
"density": "balanced",
"accents": ["accent", "success", "warning"]
},
"shots": [
{
"id": "application-shell",
"title": "The galley desk",
"viewport": "desktop",
"primitives": ["button", "card", "input", "select", "tabs", "badge", "separator", "table"],
"composition": "A Swiss editorial press desk: an ink compositor rail, four KPI cards on 2px black top rules with halftone underbars, a filter tab row, and the run-sheet ledger with status badges and a halftone column-fill chart.",
"mustShow": ["ink primary action vs white-bordered secondary action", "white square cards on a 2px black top rule (no shadow, no accent edge)", "register-vermilion + pine + ochre status badges", "halftone dot-screen on the stat underbars and chart bars", "warm press-paper ground, never glare-white"],
"avoid": ["rounded corners", "soft shadows", "single coloured accent edges on cards", "warm cream surfaces", "centred body content"],
"scene": {
"eyebrow": "pressraum",
"headline": "The galley",
"description": "An editorial press desk where every story is locked to a column, proofed as a halftone, and signed in register.",
"primaryAction": "Send to press",
"secondaryAction": "Hold the page",
"stats": [
{ "label": "sheets pulled", "value": "2,840", "tone": "default" },
{ "label": "stories set", "value": "28", "tone": "default" },
{ "label": "galley close", "value": "17 min", "tone": "accent" },
{ "label": "registration", "value": "99.4%", "tone": "accent" }
],
"rows": [
{ "label": "Harbour vote", "value": "City · cols 1–3 · 840w", "status": "register" },
{ "label": "Bridge delay", "value": "City · cols 4–5 · 410w", "status": "set" },
{ "label": "Market close", "value": "Business · col 6 · 260w", "status": "standing" },
{ "label": "Letters", "value": "Opinion · cols 7–8", "status": "holding" }
],
"statuses": ["Register", "Set", "Standing", "Holding"]
}
},
{
"id": "detail-editor",
"title": "Send a story to galley",
"viewport": "tablet",
"primitives": ["button", "card", "input", "textarea", "select", "checkbox", "switch", "slider", "dialog", "sheet"],
"composition": "A formal send flow: mono-labelled Archivo fields, an invalid (error-red) column-span state, a carry-to-next-edition switch, a screen-density slider with a vermilion fill, and a send-confirm dialog as a printed notice.",
"mustShow": ["vermilion inset focus ring on inputs", "an invalid (error-red) inset state", "switch on = ink track with a vermilion knob", "slider fill in vermilion with a square ink thumb", "send-confirm dialog as a formal square notice"],
"avoid": ["unstyled browser controls", "missing labels", "nested cards", "rounded inputs", "soft drop shadows"],
"scene": {
"eyebrow": "the desk",
"headline": "Send — the bridge delay",
"description": "A story form proving mono labels, an invalid column-span state, a carry toggle, a screen-density slider, and a send confirm.",
"primaryAction": "Send to galley",
"secondaryAction": "Hold",
"fields": [
{ "label": "Slug", "value": "Bridge delay", "type": "text" },
{ "label": "Column span", "value": "— assign a span before sending", "type": "invalid" },
{ "label": "Desk", "value": "City", "type": "select" },
{ "label": "Carry to next edition", "value": "on", "type": "switch" }
],
"statuses": ["Set", "Invalid", "Carried"]
}
},
{
"id": "data-operations",
"title": "Proof queue",
"viewport": "mobile",
"primitives": ["button", "tabs", "badge", "dropdown-menu", "table", "tooltip", "separator"],
"composition": "A narrow proof queue: stacked Archivo slug rows on 1px ink hairlines, per-row dropdown actions with a vermilion register marker, status badges, tooltips, and a holding empty state.",
"mustShow": ["responsive single-column reflow", "Archivo slug rows with mono metadata", "row action menu with a vermilion register marker and an error-red spike item", "status badges", "a holding empty state"],
"avoid": ["desktop-only tables", "horizontal text overflow", "generic shadcn spacing without Druckwerk's mono index + register character"],
"scene": {
"eyebrow": "galley",
"headline": "Proof queue",
"description": "A compact queue with rows, action menus, tooltips, status badges, and a holding affordance.",
"primaryAction": "Register",
"secondaryAction": "Filter",
"rows": [
{ "label": "Harbour vote", "value": "City", "status": "register" },
{ "label": "Market close", "value": "Business", "status": "standing" },
{ "label": "Letters", "value": "Opinion", "status": "holding" }
],
"statuses": ["Register", "Standing", "Holding"]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Hierarchy: ink primary = the one emphasis (hover inverts to vermilion); white-bordered secondary; borderless quiet on the press-paper recess. Square, mono uppercase label, one shared height." },
{ "primitive": "card", "intent": "White square panel on a 2px black top rule as its structural seam; no side/bottom border, no shadow, no rounded corners; a focal card may carry the halftone screen in a footer strip. Never nest cards." },
{ "primitive": "input", "intent": "White field, 1px ink border, square; inset 2px vermilion ring on focus, inset 2px error-red when invalid; mono label above." },
{ "primitive": "textarea", "intent": "Longer notes with the same focus + invalid rhythm; Archivo, generous, square." },
{ "primitive": "select", "intent": "Square trigger with a custom ink chevron (no browser default) and clear selection contrast; mono label above." },
{ "primitive": "dialog", "intent": "A formal 'Send this story to press?' printed notice — square, generous, 2px ink top rule, no border ring." },
{ "primitive": "sheet", "intent": "The story / archive side rail; white, square, 2px ink edge rule." },
{ "primitive": "tabs", "intent": "Switch Desk / Galley / Wire; the active tab carries a vermilion register underbar, not a grey underline." },
{ "primitive": "badge", "intent": "Flat status chip: register (solid vermilion), set (pine), standing (ochre), spiked (error red), holding (ink). Mono uppercase on white." },
{ "primitive": "separator", "intent": "A 1px ink hairline or open whitespace — never a coloured rule across a panel." },
{ "primitive": "checkbox", "intent": "22px square, 2px ink border; checked = solid ink with a small inset vermilion square mark." },
{ "primitive": "switch", "intent": "Square track, 2px ink border; off = press-paper recess + ink knob; on = solid ink track + vermilion knob." },
{ "primitive": "slider", "intent": "Screen density / column span; thin ink-bordered rail, vermilion fill, small square ink thumb." },
{ "primitive": "tooltip", "intent": "White square note, 1px ink border, concise Archivo editorial copy." },
{ "primitive": "dropdown-menu", "intent": "Per-row story actions; white square menu, vermilion register marker on the focal item, an error-red 'spike' destructive item." },
{ "primitive": "table", "intent": "The run sheet: mono uppercase header on a 2px ink bottom rule, 1px hairline rows with a press-paper recess zebra, a vermilion register dot on the focal row, tabular mono numerics, a holding empty state; no vertical rules." }
],
"qualityRules": {
"do": [
"Seat panels on a 2px black top rule and separate by measured whitespace and 1px ink hairlines.",
"Keep the ground warm press paper; reserve vermilion for the register mark / focal state only.",
"Set every label, slug, count and time in IBM Plex Mono uppercase; everything else in Archivo.",
"Carry the halftone dot-screen onto stat underbars, chart bars and index ticks as the signature texture."
],
"dont": [
"Round corners, add soft shadows, or use gradients other than the halftone dot raster.",
"Pin a single coloured accent edge to a card or default to glare-white / warm cream surfaces.",
"Centre body content or nest cards.",
"Solve hierarchy with many accent colours when the grid, the rule lines and the register mark do the work."
]
}
}