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.
A measured structural frame: a full-viewport misprint hero, then columns of load-bearing bays bound by a dashed rebar spine. Surfaces never nest; navigation breathes as part of the page, never boxed in a pill.
Order comes from scale (tall condensed display), then the datum/dimension system, then site-colour ink. The primary action takes the dominant safety-orange slab; supporting surfaces stay on the charcoal slab with mono labels.
Substantial but legible — many real bays and dense data, each framed by its own datum rule so it reads as a measured panel rather than a crowd.
Every surface is a measured structural bay: a 2px top datum rule with cyan end-ticks and a monospace dimension/role label, a left girder edge, columns bound by a dashed orange rebar spine. There are no drop shadows — depth is structural. Metrics carry a measure bracket (end-ticks tinted to role); the board-marked concrete ground is the through-line material.
Desktop runs a structural frame of bays — broad hero, then 2-3 up bay columns and a sidebar dashboard; tablet collapses toward two-up; mobile stacks to one column.
8px gaps between adjacent bays, generous 48-84px section rhythm, always padding above titles so the condensed shout breathes.
Substantial — many real bays, never a thin gallery.
Renders ~390px to 2560px+. Mobile stacks single-column, hides non-essential nav links and table columns, never overflows; grids use minmax(0,1fr) + min-width:0. Ultra-wide caps and centres the contained column; only the full-bleed hero spans 100vw.
misprint
Misprint screenprint imagery applied to raw structure: poured concrete, formwork panels, exposed steel rebar, girders and ties — heavy black keylines, misregistered acid separations, coarse halftone, warm paper ground showing through, hard zero-blur offset shadows in the image itself. One site colour dominant per image.
Use as the full-bleed landing hero behind a left structural ink wash, and as feature/empty-state spots. Generate via the Misprint art style; keep one colour dominant and push the plate misregistration explicitly.
# Formwork ## Philosophy Formwork is the neo-brutalist interface taken back to its origin — beton brut, raw cast concrete — rather than to the print shop. The interface is poured into a mold and left there: every surface is a load-bearing structural bay held up by a measured datum line and a dimension bracket, never floated on a drop shadow. The dark, board-marked concrete ground reads like an engineering elevation of a poured wall, dimensioned and reinforced. Depth comes from where the structure lands, not from soft chrome. ### Values - Structure is measured, never floated — datum lines and dimension brackets carry depth in place of shadows. - Raw material honesty: a dark board-marked concrete ground, exposed reinforcement, hard formwork corners. - Instant legibility through a tall condensed display shout over quiet body, with measurements always in mono. - A settled, fully-rendered page first; motion is a short set-into-place rise added on top, never required to read it. ### Anti-Values - Soft drop shadows, blur, glass, and gradient polish that hide the construction. - Lone accent edges and rounded SaaS cards that read as anonymous product chrome. - Pastel washes or background gradients that drain the raw-concrete ground. - Warm-paper poster pastiche with pulled plates and rotated stickers. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#1A1916` | | surface | `#22211D` | | surface_2 | `#2B2A25` | | text | `#EDE8DC` | | muted | `#938E7F` | | border | `#3A3832` | | accent | `#FF5B1F` | | accent_2 | `#26D6E6` | | accent_3 | `#E8C547` | | on_accent | `#1A1916` | | success | `#4FB477` | | warning | `#E8C547` | | error | `#FF5B1F` | | info | `#26D6E6` | ### Typography - **Base Size**: 17px - **Body Font**: Inter - **Heading Font**: Saira Condensed - **Mono Font**: Spline Sans Mono - **Heading Weight**: 800 - **Heading Transform**: uppercase - **Letter Spacing**: -0.01em - **Scale Ratio**: 1.28 - **Line Height**: 1.55 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Saira+Condensed:wght@500;600;700;800&family=Inter:wght@400;500;600;700&family=Spline+Sans+Mono:wght@400;500;600&display=swap ### Radii - **None**: 0px - **Tag**: 9999px ### Shadows - **None**: none ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64] ### Surfaces - **Treatment**: raw cast concrete - **Card Style**: structural bay: charcoal slab with a 2px top datum rule, cyan end-ticks, a left girder edge and a mono dimension label — no drop shadow - **Bg Pattern**: board-marked plank ruling ### Borders - **Default Width**: 2px - **Accent Width**: 4px - **Style**: solid - **Character**: thin neutral form-tie hairlines that hold panels against pressure; colour enters only as datum ticks or full ink slabs, never as a lone highlight edge ### Motion - **Duration**: 200ms - **Easing**: cubic-bezier(0.22,0.61,0.36,1) - **Philosophy**: set-into-place — surfaces rise onto their datum; settled state renders with no JS ## Rules ### Composition A measured structural frame: a full-viewport misprint hero, then columns of load-bearing bays bound by a dashed rebar spine. Surfaces never nest; navigation breathes as part of the page, never boxed in a pill. ### Hierarchy Order comes from scale (tall condensed display), then the datum/dimension system, then site-colour ink. The primary action takes the dominant safety-orange slab; supporting surfaces stay on the charcoal slab with mono labels. ### Density Substantial but legible — many real bays and dense data, each framed by its own datum rule so it reads as a measured panel rather than a crowd. ### Signature Every surface is a measured structural bay: a 2px top datum rule with cyan end-ticks and a monospace dimension/role label, a left girder edge, columns bound by a dashed orange rebar spine. There are no drop shadows — depth is structural. Metrics carry a measure bracket (end-ticks tinted to role); the board-marked concrete ground is the through-line material. ## Layout ### Grid Desktop runs a structural frame of bays — broad hero, then 2-3 up bay columns and a sidebar dashboard; tablet collapses toward two-up; mobile stacks to one column. ### Whitespace 8px gaps between adjacent bays, generous 48-84px section rhythm, always padding above titles so the condensed shout breathes. ### Density Substantial — many real bays, never a thin gallery. ### Responsive Renders ~390px to 2560px+. Mobile stacks single-column, hides non-essential nav links and table columns, never overflows; grids use minmax(0,1fr) + min-width:0. Ultra-wide caps and centres the contained column; only the full-bleed hero spans 100vw. ### Breakpoints - **Mobile**: 0-599px - **Tablet**: 600-899px - **Desktop**: 900-1439px - **Wide**: 1440px+ ## Guidance ### Do - Frame every surface with a top datum rule, cyan end-ticks, and a monospace dimension or role label. - Keep one site colour dominant per region and let the others annotate. - Use the dashed orange rebar spine to bind a column of related bays. - Pair the tall condensed display shout with quiet Inter body so it stays readable. ### Don't - Do not add drop shadows, blur, or glass; depth is structural, carried by lines and load. - Do not give a card a single lone accent edge; colour belongs to the measure system. - Do not round surfaces into SaaS cards; hard formwork corners are the point. - Do not wash the ground with pastel or gradients; it stays raw concrete. ### Accessibility Body text 17px+, table rows 14.5px+. High contrast: warm off-white on charcoal, dark ink only over the bright site-colour slabs. Settled state renders with no JavaScript; motion is gated and respects prefers-reduced-motion. Every form control is explicitly styled with no browser defaults; no emoji or symbol glyphs in copy, markup, or alt text. ## Imagery Direction ### Pairs With misprint ### Summary Misprint screenprint imagery applied to raw structure: poured concrete, formwork panels, exposed steel rebar, girders and ties — heavy black keylines, misregistered acid separations, coarse halftone, warm paper ground showing through, hard zero-blur offset shadows in the image itself. One site colour dominant per image. ### Subjects - poured concrete and formwork panels - exposed steel rebar and girders - form-ties and rigging - construction site structures - raw structural cross-sections ### Usage Use as the full-bleed landing hero behind a left structural ink wash, and as feature/empty-state spots. Generate via the Misprint art style; keep one colour dominant and push the plate misregistration explicitly.
---
version: "alpha"
name: "Formwork"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#1A1916"
surface: "#22211D"
surface_2: "#2B2A25"
text: "#EDE8DC"
muted: "#938E7F"
border: "#3A3832"
accent: "#FF5B1F"
accent_2: "#26D6E6"
accent_3: "#E8C547"
on_accent: "#1A1916"
success: "#4FB477"
warning: "#E8C547"
error: "#FF5B1F"
info: "#26D6E6"
typography:
headline-lg:
fontFamily: "Saira Condensed"
fontSize: "2.228rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.01em"
headline-md:
fontFamily: "Saira Condensed"
fontSize: "1.741rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.01em"
body-md:
fontFamily: "Inter"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.55
letterSpacing: "-0.01em"
label-md:
fontFamily: "Spline Sans Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
tag: "9999px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
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-accent_2:
backgroundColor: "{colors.accent_2}"
color-reference-accent_3:
backgroundColor: "{colors.accent_3}"
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: "#000000"
typography: "{typography.label-md}"
rounded: "{rounded.none}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.none}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.none}"
height: "44px"
---
# Formwork
## Overview
Formwork is the neo-brutalist interface taken back to its origin — beton brut, raw cast concrete — rather than to the print shop. The interface is poured into a mold and left there: every surface is a load-bearing structural bay held up by a measured datum line and a dimension bracket, never floated on a drop shadow. The dark, board-marked concrete ground reads like an engineering elevation of a poured wall, dimensioned and reinforced. Depth comes from where the structure lands, not from soft chrome.
### Values
- Structure is measured, never floated — datum lines and dimension brackets carry depth in place of shadows.
- Raw material honesty: a dark board-marked concrete ground, exposed reinforcement, hard formwork corners.
- Instant legibility through a tall condensed display shout over quiet body, with measurements always in mono.
- A settled, fully-rendered page first; motion is a short set-into-place rise added on top, never required to read it.
### Anti-Values
- Soft drop shadows, blur, glass, and gradient polish that hide the construction.
- Lone accent edges and rounded SaaS cards that read as anonymous product chrome.
- Pastel washes or background gradients that drain the raw-concrete ground.
- Warm-paper poster pastiche with pulled plates and rotated stickers.
## 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 | `#1A1916` |
| surface | `#22211D` |
| surface_2 | `#2B2A25` |
| text | `#EDE8DC` |
| muted | `#938E7F` |
| border | `#3A3832` |
| accent | `#FF5B1F` |
| accent_2 | `#26D6E6` |
| accent_3 | `#E8C547` |
| on_accent | `#1A1916` |
| success | `#4FB477` |
| warning | `#E8C547` |
| error | `#FF5B1F` |
| info | `#26D6E6` |
## Typography
- **Headline-Lg**: Saira Condensed, 2.228rem, weight 700, line-height 1.1.
- **Headline-Md**: Saira Condensed, 1.741rem, weight 600, line-height 1.15.
- **Body-Md**: Inter, 17px, weight 400, line-height 1.55.
- **Label-Md**: Spline Sans 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`
### Grid
Desktop runs a structural frame of bays — broad hero, then 2-3 up bay columns and a sidebar dashboard; tablet collapses toward two-up; mobile stacks to one column.
### Whitespace
8px gaps between adjacent bays, generous 48-84px section rhythm, always padding above titles so the condensed shout breathes.
### Density
Substantial — many real bays, never a thin gallery.
### Responsive
Renders ~390px to 2560px+. Mobile stacks single-column, hides non-essential nav links and table columns, never overflows; grids use minmax(0,1fr) + min-width:0. Ultra-wide caps and centres the contained column; only the full-bleed hero spans 100vw.
### Breakpoints
- **Mobile**: 0-599px
- **Tablet**: 600-899px
- **Desktop**: 900-1439px
- **Wide**: 1440px+
## Elevation & Depth
### Shadows
- **None**: none
## Shapes
### Rounded
- **None**: `0px`
- **Tag**: `9999px`
### Surfaces
- **Treatment**: raw cast concrete
- **Card Style**: structural bay: charcoal slab with a 2px top datum rule, cyan end-ticks, a left girder edge and a mono dimension label — no drop shadow
- **Bg Pattern**: board-marked plank ruling
### Borders
- **Default Width**: 2px
- **Accent Width**: 4px
- **Style**: solid
- **Character**: thin neutral form-tie hairlines that hold panels against pressure; colour enters only as datum ticks or full ink slabs, never as a lone highlight edge
## Components
### Composition
A measured structural frame: a full-viewport misprint hero, then columns of load-bearing bays bound by a dashed rebar spine. Surfaces never nest; navigation breathes as part of the page, never boxed in a pill.
### Hierarchy
Order comes from scale (tall condensed display), then the datum/dimension system, then site-colour ink. The primary action takes the dominant safety-orange slab; supporting surfaces stay on the charcoal slab with mono labels.
### Density
Substantial but legible — many real bays and dense data, each framed by its own datum rule so it reads as a measured panel rather than a crowd.
### Signature
Every surface is a measured structural bay: a 2px top datum rule with cyan end-ticks and a monospace dimension/role label, a left girder edge, columns bound by a dashed orange rebar spine. There are no drop shadows — depth is structural. Metrics carry a measure bracket (end-ticks tinted to role); the board-marked concrete ground is the through-line material.
## 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-019efa5e-178c-7fb1-934f-89c8afff531f/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 Frame every surface with a top datum rule, cyan end-ticks, and a monospace dimension or role label.
- Do Keep one site colour dominant per region and let the others annotate.
- Do Use the dashed orange rebar spine to bind a column of related bays.
- Do Pair the tall condensed display shout with quiet Inter body so it stays readable.
- Don't Do not add drop shadows, blur, or glass; depth is structural, carried by lines and load.
- Don't Do not give a card a single lone accent edge; colour belongs to the measure system.
- Don't Do not round surfaces into SaaS cards; hard formwork corners are the point.
- Don't Do not wash the ground with pastel or gradients; it stays raw concrete.
### Accessibility
Body text 17px+, table rows 14.5px+. High contrast: warm off-white on charcoal, dark ink only over the bright site-colour slabs. Settled state renders with no JavaScript; motion is gated and respects prefers-reduced-motion. Every form control is explicitly styled with no browser defaults; no emoji or symbol glyphs in copy, markup, or alt text.
## Imagery Direction
### Pairs With
misprint
### Summary
Misprint screenprint imagery applied to raw structure: poured concrete, formwork panels, exposed steel rebar, girders and ties — heavy black keylines, misregistered acid separations, coarse halftone, warm paper ground showing through, hard zero-blur offset shadows in the image itself. One site colour dominant per image.
### Subjects
- poured concrete and formwork panels
- exposed steel rebar and girders
- form-ties and rigging
- construction site structures
- raw structural cross-sections
### Usage
Use as the full-bleed landing hero behind a left structural ink wash, and as feature/empty-state spots. Generate via the Misprint art style; keep one colour dominant and push the plate misregistration explicitly.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "formwork",
"type": "registry:theme",
"title": "Formwork shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#1A1916",
"foreground": "#EDE8DC",
"card": "#22211D",
"card-foreground": "#EDE8DC",
"popover": "#22211D",
"popover-foreground": "#EDE8DC",
"primary": "#EDE8DC",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#938E7F",
"muted-foreground": "#EDE8DC",
"accent": "#FF5B1F",
"accent-foreground": "#ffffff",
"destructive": "#FF5B1F",
"border": "#3A3832",
"input": "#3A3832",
"ring": "#FF5B1F",
"chart-1": "#EDE8DC",
"chart-2": "#f4f4f5",
"chart-3": "#FF5B1F",
"chart-4": "#4FB477",
"chart-5": "#E8C547",
"sidebar": "#22211D",
"sidebar-foreground": "#EDE8DC",
"sidebar-primary": "#EDE8DC",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#26D6E6",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#3A3832",
"sidebar-ring": "#FF5B1F",
"radius": "0.625rem"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#EDE8DC",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#FF5B1F",
"accent-foreground": "#ffffff",
"destructive": "#FF5B1F",
"border": "#303642",
"input": "#303642",
"ring": "#FF5B1F",
"chart-1": "#EDE8DC",
"chart-2": "#f4f4f5",
"chart-3": "#FF5B1F",
"chart-4": "#4FB477",
"chart-5": "#E8C547",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#EDE8DC",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#FF5B1F",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#FF5B1F",
"radius": "0.625rem"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019efa5e-178c-7fb1-934f-89c8afff531f",
"slug": "formwork",
"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",
"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": [
"none",
"tag"
],
"shadows": [
"none"
],
"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 Formworkand 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: #1A1916;
--foreground: #EDE8DC;
--card: #22211D;
--card-foreground: #EDE8DC;
--popover: #22211D;
--popover-foreground: #EDE8DC;
--primary: #EDE8DC;
--primary-foreground: #111111;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #938E7F;
--muted-foreground: #EDE8DC;
--accent: #FF5B1F;
--accent-foreground: #ffffff;
--destructive: #FF5B1F;
--border: #3A3832;
--input: #3A3832;
--ring: #FF5B1F;
--chart-1: #EDE8DC;
--chart-2: #f4f4f5;
--chart-3: #FF5B1F;
--chart-4: #4FB477;
--chart-5: #E8C547;
--sidebar: #22211D;
--sidebar-foreground: #EDE8DC;
--sidebar-primary: #EDE8DC;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #26D6E6;
--sidebar-accent-foreground: #111111;
--sidebar-border: #3A3832;
--sidebar-ring: #FF5B1F;
--radius: 0.625rem;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #EDE8DC;
--primary-foreground: #111111;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #FF5B1F;
--accent-foreground: #ffffff;
--destructive: #FF5B1F;
--border: #303642;
--input: #303642;
--ring: #FF5B1F;
--chart-1: #EDE8DC;
--chart-2: #f4f4f5;
--chart-3: #FF5B1F;
--chart-4: #4FB477;
--chart-5: #E8C547;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #EDE8DC;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #FF5B1F;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #FF5B1F;
--radius: 0.625rem;
}
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 FormworkShadcnKit() {
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">Formwork</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": "formwork",
"type": "registry:theme",
"author": "katagami-agent",
"visualProfile": {
"family": "neo-brutalist",
"material": "raw cast concrete, board-marked dark ground",
"depth": "structural — datum lines and dimension brackets, no drop shadows",
"corners": "hard (0px); pills only for tags (9999px)",
"borders": "thin neutral form-tie hairlines; left girder edge on panels",
"signature": "datum rule with cyan end-ticks + monospace dimension label; dashed orange rebar spine",
"accentUse": "three site colours used like safety paint, one dominant per region",
"mode": "dark"
},
"cssVars": {
"theme": {
"font-sans": "Inter, system-ui, sans-serif",
"font-mono": "Spline Sans Mono, ui-monospace, monospace",
"font-heading": "Saira Condensed, Arial Narrow, sans-serif",
"radius": "0px"
},
"light": {
"background": "#1A1916",
"foreground": "#EDE8DC",
"card": "#22211D",
"card-foreground": "#EDE8DC",
"popover": "#22211D",
"popover-foreground": "#EDE8DC",
"primary": "#FF5B1F",
"primary-foreground": "#1A1916",
"secondary": "#2B2A25",
"secondary-foreground": "#EDE8DC",
"muted": "#2B2A25",
"muted-foreground": "#938E7F",
"accent": "#26D6E6",
"accent-foreground": "#1A1916",
"destructive": "#FF5B1F",
"destructive-foreground": "#1A1916",
"border": "#3A3832",
"input": "#3A3832",
"ring": "#26D6E6",
"chart-1": "#FF5B1F",
"chart-2": "#26D6E6",
"chart-3": "#E8C547",
"chart-4": "#4FB477",
"chart-5": "#938E7F",
"radius": "0px"
},
"dark": {
"background": "#1A1916",
"foreground": "#EDE8DC",
"card": "#22211D",
"card-foreground": "#EDE8DC",
"popover": "#22211D",
"popover-foreground": "#EDE8DC",
"primary": "#FF5B1F",
"primary-foreground": "#1A1916",
"secondary": "#2B2A25",
"secondary-foreground": "#EDE8DC",
"muted": "#2B2A25",
"muted-foreground": "#938E7F",
"accent": "#26D6E6",
"accent-foreground": "#1A1916",
"destructive": "#FF5B1F",
"destructive-foreground": "#1A1916",
"border": "#3A3832",
"input": "#3A3832",
"ring": "#26D6E6",
"chart-1": "#FF5B1F",
"chart-2": "#26D6E6",
"chart-3": "#E8C547",
"chart-4": "#4FB477",
"chart-5": "#938E7F",
"radius": "0px"
}
}
}
# Formwork shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019efa5e-178c-7fb1-934f-89c8afff531f`
Slug: `formwork`
## Intent
Formwork is the neo-brutalist interface taken back to its origin — beton brut, raw cast concrete — rather than to the print shop. The interface is poured into a mold and left there: every surface is a load-bearing structural bay held up by a measured datum line and a dimension bracket, never floated on a drop shadow. The dark, board-marked concrete ground reads like an engineering elevation of a poured wall, dimensioned and reinforced. Depth comes from where the structure lands, not from soft chrome.
## 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": "#1A1916",
"surface": "#22211D",
"surface_2": "#2B2A25",
"text": "#EDE8DC",
"muted": "#938E7F",
"border": "#3A3832",
"accent": "#FF5B1F",
"accent_2": "#26D6E6",
"accent_3": "#E8C547",
"on_accent": "#1A1916",
"success": "#4FB477",
"warning": "#E8C547",
"error": "#FF5B1F",
"info": "#26D6E6"
}
Typography:
{
"base_size": "17px",
"body_font": "Inter",
"heading_font": "Saira Condensed",
"mono_font": "Spline Sans Mono",
"heading_weight": "800",
"heading_transform": "uppercase",
"letter_spacing": "-0.01em",
"scale_ratio": 1.28,
"line_height": 1.55,
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Saira+Condensed:wght@500;600;700;800&family=Inter:wght@400;500;600;700&family=Spline+Sans+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": "system",
"material": "flat",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": false,
"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/formwork/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: Frame every surface with a top datum rule, cyan end-ticks, and a monospace dimension or role label.; Keep one site colour dominant per region and let the others annotate.; Use the dashed orange rebar spine to bind a column of related bays.; Pair the tall condensed display shout with quiet Inter body so it stays readable.
- Do not: Do not add drop shadows, blur, or glass; depth is structural, carried by lines and load.; Do not give a card a single lone accent edge; colour belongs to the measure system.; Do not round surfaces into SaaS cards; hard formwork corners are the point.; Do not wash the ground with pastel or gradients; it stays raw concrete.
## 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 FormworkShadcnKit() {
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">Formwork</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": "Desktop runs a structural frame of bays — broad hero, then 2-3 up bay columns and a sidebar dashboard; tablet collapses toward two-up; mobile stacks to one column.",
"whitespace": "8px gaps between adjacent bays, generous 48-84px section rhythm, always padding above titles so the condensed shout breathes.",
"density": "Substantial — many real bays, never a thin gallery.",
"responsive": "Renders ~390px to 2560px+. Mobile stacks single-column, hides non-essential nav links and table columns, never overflows; grids use minmax(0,1fr) + min-width:0. Ultra-wide caps and centres the contained column; only the full-bleed hero spans 100vw.",
"breakpoints": {
"mobile": "0-599px",
"tablet": "600-899px",
"desktop": "900-1439px",
"wide": "1440px+"
}
}
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"generator": "katagami-ui-compatibility-projection",
"generatedBy": "katagami-ui-projection",
"requiresVisualProfile": true,
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"language": {
"id": "en-019efa5e-178c-7fb1-934f-89c8afff531f",
"name": "Formwork",
"slug": "formwork"
},
"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": [],
"visualProfile": {
"family": "system",
"material": "flat",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "still",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
},
"shots": [
{
"id": "application-shell",
"title": "Application shell",
"viewport": "desktop",
"primitives": [
"button",
"card",
"input",
"select",
"tabs",
"badge",
"separator",
"table"
],
"composition": "A real product workspace with navigation, summary cards, filtering controls, and one dense content region.",
"mustShow": [
"primary and secondary actions",
"card hierarchy",
"filterable state",
"table or list density"
],
"avoid": [
"component inventory walls",
"placeholder-only content",
"generic rounded SaaS chrome"
],
"scene": {
"eyebrow": "workspace spread",
"headline": "Formwork launch room",
"description": "A product team workspace where navigation, filters, metrics, and dense rows carry the language's visible structure.",
"primaryAction": "Apply theme",
"secondaryAction": "Review states",
"stats": [
{
"label": "components",
"value": "16",
"tone": "accent"
},
{
"label": "states",
"value": "ready"
},
{
"label": "density",
"value": "balanced",
"tone": "warning"
}
],
"rows": [
{
"label": "Primary flow",
"value": "mapped",
"status": "active"
},
{
"label": "Token coverage",
"value": "semantic",
"status": "synced"
},
{
"label": "Responsive proof",
"value": "queued",
"status": "review"
}
],
"statuses": [
"Active",
"Synced",
"Draft"
]
}
},
{
"id": "detail-editor",
"title": "Detail editor",
"viewport": "tablet",
"primitives": [
"button",
"card",
"input",
"textarea",
"select",
"checkbox",
"switch",
"slider",
"dialog",
"sheet"
],
"composition": "A focused editing flow with form fields, validation, confirmation, and a contextual side panel.",
"mustShow": [
"focus ring",
"error or destructive state",
"dialog or sheet treatment",
"written guidance content"
],
"avoid": [
"unstyled browser controls",
"floating cards inside cards",
"missing labels"
],
"scene": {
"eyebrow": "editing flow",
"headline": "Language recipe editor",
"description": "A focused form proving labels, validation, toggles, panel rhythm, and action hierarchy.",
"primaryAction": "Save recipe",
"secondaryAction": "Open sheet",
"fields": [
{
"label": "Component family",
"value": "Narrative cards"
},
{
"label": "State treatment",
"value": "Visible focus + validation"
},
{
"label": "Motion",
"value": "Small lift, no opacity-only fade"
}
],
"statuses": [
"Focus",
"Invalid",
"Confirmed"
]
}
},
{
"id": "data-operations",
"title": "Data operations",
"viewport": "mobile",
"primitives": [
"button",
"tabs",
"badge",
"dropdown-menu",
"table",
"tooltip",
"separator"
],
"composition": "A compact operational view proving row rhythm, stacked actions, menu states, badges, and empty/destructive states.",
"mustShow": [
"responsive reflow",
"dense row styling",
"menu affordance",
"status badge system"
],
"avoid": [
"desktop-only tables",
"text overflow",
"default shadcn spacing without Katagami character"
],
"scene": {
"eyebrow": "operations",
"headline": "Compact review queue",
"description": "A narrow viewport scene with rows, menus, tooltips, badges, and destructive affordances.",
"primaryAction": "Resolve",
"secondaryAction": "Filter",
"rows": [
{
"label": "Button hierarchy",
"value": "approved",
"status": "ok"
},
{
"label": "Table rhythm",
"value": "needs pass",
"status": "watch"
},
{
"label": "Empty state",
"value": "designed",
"status": "done"
}
],
"statuses": [
"Queued",
"Blocked",
"Done"
]
}
}
],
"componentRecipes": [
{
"primitive": "button",
"intent": "Prove action hierarchy, focus, disabled, and destructive states."
},
{
"primitive": "card",
"intent": "Carry the language surface, border, elevation, and density rules."
},
{
"primitive": "input",
"intent": "Show labels, focus rings, validation, and spacing rhythm."
},
{
"primitive": "textarea",
"intent": "Show longer guidance, validation copy, and writing density."
},
{
"primitive": "select",
"intent": "Show filtering, selection contrast, and menu trigger styling."
},
{
"primitive": "dialog",
"intent": "Show centered decision states and overlay treatment."
},
{
"primitive": "sheet",
"intent": "Show contextual side panels and responsive editing."
},
{
"primitive": "tabs",
"intent": "Show navigational structure and active/inactive contrast."
},
{
"primitive": "badge",
"intent": "Show compact status vocabulary and semantic colors."
},
{
"primitive": "separator",
"intent": "Show section rhythm without generic gray dividers."
},
{
"primitive": "checkbox",
"intent": "Show binary selection with visible focus and checked states."
},
{
"primitive": "switch",
"intent": "Show settings toggles and on/off contrast."
},
{
"primitive": "slider",
"intent": "Show numeric adjustment with track/thumb styling."
},
{
"primitive": "tooltip",
"intent": "Show concise explanation styling above compact controls."
},
{
"primitive": "dropdown-menu",
"intent": "Show action menus, destructive items, and grouped choices."
},
{
"primitive": "table",
"intent": "Show dense operational data, separators, row states, and responsive behavior."
}
],
"qualityRules": {
"do": [
"Frame every surface with a top datum rule, cyan end-ticks, and a monospace dimension or role label.",
"Keep one site colour dominant per region and let the others annotate.",
"Use the dashed orange rebar spine to bind a column of related bays.",
"Pair the tall condensed display shout with quiet Inter body so it stays readable."
],
"dont": [
"Do not add drop shadows, blur, or glass; depth is structural, carried by lines and load.",
"Do not give a card a single lone accent edge; colour belongs to the measure system.",
"Do not round surfaces into SaaS cards; hard formwork corners are the point.",
"Do not wash the ground with pastel or gradients; it stays raw concrete."
]
}
}