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.
Build on an asymmetric grid with an oversized left index rail; set important values in the primary value module; separate modules with hairline and 2px top rules, never nested cards.
Hierarchy comes from scale jumps in one strict type scale, the primary module's signal/amber cells, and position in the grid — not from colour fill or ornament.
Medium density, high legibility: generous margins, tight rows, tabular mono for numeric values; whitespace is structural and architectural.
Desktop uses an asymmetric grid with a fixed left index rail (mono section numbers, detached from content) plus flexible content columns; the dashboard uses a fixed rail plus a flexible field of frames.
The tablet band (768-1024) is its own layout: the rail becomes a top row and panels reflow two-up. Phone collapses to a single column, index numbers become inline headers, tables scroll inside ruled wrappers, and the nav collapses rather than spilling.
Structural: large outer margins, generous inter-section spacing, an 8px baseline; negative space frames typography like poster composition.
quadratura
Subjects reconstructed as modular grids: matte paper frames divided by hairline seams, panels that cleave and re-tile, monochrome ink and warm white with a single vermilion signal module. Imagery sits behind a legible veil in the hero and never contests copy for the same ground.
A full composable grid (or the subject rebuilt as one), head-on, its modules mid-recompose behind a legible dark veil.
Use imagery sparingly; prefer the composable grid, framed modules, ruled tables, and typographic rhythm.
# Quadro ## Philosophy Quadro is the modular-grid design language: it keeps the Swiss soul — objective clarity, hairline discipline, and one urgent signal in a monochrome field — and rebuilds that order as a viewport that cleaves into panels and recomposes. Every module is a frame; the whole page is one composable grid that partitions, swaps its modules, and re-tiles to signal. ### Values - objective order over decoration - one signal that means something - modules that cleave, settle, and recompose - warm paper authority over stark white - hairline structure over boxes and shadows ### Anti-Values - rounded friendly softness - glass and glow - a second accent used as fill - boxed-in navigation widgets - one-off type sizes ### Visual Character - a composable grid of framed modules divided by hairline seams - an oversized left index rail of section numbers - hairline and 2px rules that partition and open modules - warm paper ground with ink modules - one vermilion signal module and one amber transit module ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#EFEBE2` | | surface | `#FBF9F3` | | surface_solid | `#FFFFFF` | | text | `#14130F` | | muted | `#6C665B` | | border | `#16150F` | | accent | `#E23A1E` | | accent_2 | `#E39A12` | | accent_soft | `#F3E6C7` | | on_accent | `#FBF9F3` | | success | `#1E6E43` | | warning | `#B26A00` | | error | `#B4231A` | | info | `#17607F` | ### Typography - **Base Size**: 17px - **Body Font**: Archivo, system-ui, sans-serif - **Heading Font**: Archivo, Arial Narrow, sans-serif - **Mono Font**: IBM Plex Mono, ui-monospace, monospace - **Heading Weight**: 800 - **Heading Transform**: none - **Letter Spacing**: -0.02em - **Line Height**: 1.5 - **Scale Ratio**: 1.28 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Archivo:wght@400;500;600;700;800;900&family=Archivo+Narrow:wght@500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap ### Radii - **None**: 0px - **Md**: 16px - **Lg**: 24px - **Full**: 9999px ### Shadows - **Sm**: 0 1px 0 rgba(20,19,15,0.14) - **Md**: 0 2px 0 rgba(20,19,15,0.18) - **Lg**: 0 3px 0 rgba(20,19,15,0.22) ### Spacing - **Base**: 8px - **Scale**: ["6px","10px","16px","24px","36px","56px","84px","128px"] ### Surfaces - **Treatment**: paper - **Card Style**: ruled planes separated by hairline and 2px top rules; no elevation, no rounded cards - **Bg Pattern**: grid ### Borders - **Default Width**: 1px - **Accent Width**: 2px - **Style**: solid - **Character**: hairline rules divide modules and rows; a 2px top rule opens a panel; the flap seam is a 1px hairline through every mechanical cell ### Motion - **Duration**: 150ms - **Easing**: cubic-bezier(0.2,0,0,1) - **Philosophy**: mechanical — values settle into place like a flap turning; snappy, purposeful, never decorative ## Rules ### Composition Build on an asymmetric grid with an oversized left index rail; set important values in the primary value module; separate modules with hairline and 2px top rules, never nested cards. ### Hierarchy Hierarchy comes from scale jumps in one strict type scale, the primary module's signal/amber cells, and position in the grid — not from colour fill or ornament. ### Density Medium density, high legibility: generous margins, tight rows, tabular mono for numeric values; whitespace is structural and architectural. ### Signature Patterns - every important value is set in split-flap mono cells, each with a 1px flap seam - one vermilion signal cell marks the value that matters; one amber cell marks a value in transit - a triangular position marker rides the active cell like a cursor on the module grid - modules are opened by a 2px top rule and divided by 1px hairlines, never boxed on all sides - the flap seam recurs page-wide as the ornament system — the primary value module, module clock, tile field, throughput bars ## Layout ### Grid Desktop uses an asymmetric grid with a fixed left index rail (mono section numbers, detached from content) plus flexible content columns; the dashboard uses a fixed rail plus a flexible field of frames. ### Breakpoints The tablet band (768-1024) is its own layout: the rail becomes a top row and panels reflow two-up. Phone collapses to a single column, index numbers become inline headers, tables scroll inside ruled wrappers, and the nav collapses rather than spilling. ### Whitespace Structural: large outer margins, generous inter-section spacing, an 8px baseline; negative space frames typography like poster composition. ## Guidance ### Do - Set values that matter in the primary value module so they read as the dominant frame. - Keep vermilion positional and amber for motion. - Separate modules with hairline and 2px rules instead of nested cards. - Use tabular mono for times, codes, and totals. - Let typography and the flap seam carry the identity before colour. ### Don't - Fill the page with red or amber; they are lamps, not paint. - Round the cells or soften them with glows. - Box navigation into a floating pill. - Add a second display face or stray one-off type sizes. - Bury copy under busy imagery or let imagery starve information. ## Imagery Direction ### Pairs With quadratura ### Summary Subjects reconstructed as modular grids: matte paper frames divided by hairline seams, panels that cleave and re-tile, monochrome ink and warm white with a single vermilion signal module. Imagery sits behind a legible veil in the hero and never contests copy for the same ground. ### Hero A full composable grid (or the subject rebuilt as one), head-on, its modules mid-recompose behind a legible dark veil. ### Usage Use imagery sparingly; prefer the composable grid, framed modules, ruled tables, and typographic rhythm.
---
version: "alpha"
name: "Quadro"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#EFEBE2"
surface: "#FBF9F3"
surface_solid: "#FFFFFF"
text: "#14130F"
muted: "#6C665B"
border: "#16150F"
accent: "#E23A1E"
accent_2: "#E39A12"
accent_soft: "#F3E6C7"
on_accent: "#FBF9F3"
success: "#1E6E43"
warning: "#B26A00"
error: "#B4231A"
info: "#17607F"
typography:
headline-lg:
fontFamily: "Archivo, Arial Narrow, sans-serif"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Archivo, Arial Narrow, sans-serif"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "Archivo, system-ui, sans-serif"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.02em"
label-md:
fontFamily: "IBM Plex Mono, ui-monospace, monospace"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
md: "16px"
lg: "24px"
full: "9999px"
spacing:
base: "8px"
xs: "6px"
sm: "10px"
md: "16px"
lg: "24px"
xl: "36px"
2xl: "56px"
3xl: "84px"
4xl: "128px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_solid:
backgroundColor: "{colors.surface_solid}"
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_soft:
backgroundColor: "{colors.accent_soft}"
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.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"
---
# Quadro
## Overview
Quadro is the modular-grid design language: it keeps the Swiss soul — objective clarity, hairline discipline, and one urgent signal in a monochrome field — and rebuilds that order as a viewport that cleaves into panels and recomposes. Every module is a frame; the whole page is one composable grid that partitions, swaps its modules, and re-tiles to signal.
### Values
- objective order over decoration
- one signal that means something
- modules that cleave, settle, and recompose
- warm paper authority over stark white
- hairline structure over boxes and shadows
### Anti-Values
- rounded friendly softness
- glass and glow
- a second accent used as fill
- boxed-in navigation widgets
- one-off type sizes
### Visual Character
- a composable grid of framed modules divided by hairline seams
- an oversized left index rail of section numbers
- hairline and 2px rules that partition and open modules
- warm paper ground with ink modules
- one vermilion signal module and one amber transit module
## 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 | `#EFEBE2` |
| surface | `#FBF9F3` |
| surface_solid | `#FFFFFF` |
| text | `#14130F` |
| muted | `#6C665B` |
| border | `#16150F` |
| accent | `#E23A1E` |
| accent_2 | `#E39A12` |
| accent_soft | `#F3E6C7` |
| on_accent | `#FBF9F3` |
| success | `#1E6E43` |
| warning | `#B26A00` |
| error | `#B4231A` |
| info | `#17607F` |
## Typography
- **Headline-Lg**: Archivo, Arial Narrow, sans-serif, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Archivo, Arial Narrow, sans-serif, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Archivo, system-ui, sans-serif, 17px, weight 400, line-height 1.5.
- **Label-Md**: IBM Plex Mono, ui-monospace, monospace, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `6px`
- **Sm**: `10px`
- **Md**: `16px`
- **Lg**: `24px`
- **Xl**: `36px`
- **2xl**: `56px`
- **3xl**: `84px`
- **4xl**: `128px`
### Grid
Desktop uses an asymmetric grid with a fixed left index rail (mono section numbers, detached from content) plus flexible content columns; the dashboard uses a fixed rail plus a flexible field of frames.
### Breakpoints
The tablet band (768-1024) is its own layout: the rail becomes a top row and panels reflow two-up. Phone collapses to a single column, index numbers become inline headers, tables scroll inside ruled wrappers, and the nav collapses rather than spilling.
### Whitespace
Structural: large outer margins, generous inter-section spacing, an 8px baseline; negative space frames typography like poster composition.
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 0 rgba(20,19,15,0.14)
- **Md**: 0 2px 0 rgba(20,19,15,0.18)
- **Lg**: 0 3px 0 rgba(20,19,15,0.22)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: paper
- **Card Style**: ruled planes separated by hairline and 2px top rules; no elevation, no rounded cards
- **Bg Pattern**: grid
### Borders
- **Default Width**: 1px
- **Accent Width**: 2px
- **Style**: solid
- **Character**: hairline rules divide modules and rows; a 2px top rule opens a panel; the flap seam is a 1px hairline through every mechanical cell
## Components
### Composition
Build on an asymmetric grid with an oversized left index rail; set important values in the primary value module; separate modules with hairline and 2px top rules, never nested cards.
### Hierarchy
Hierarchy comes from scale jumps in one strict type scale, the primary module's signal/amber cells, and position in the grid — not from colour fill or ornament.
### Density
Medium density, high legibility: generous margins, tight rows, tabular mono for numeric values; whitespace is structural and architectural.
### Signature Patterns
- every important value is set in split-flap mono cells, each with a 1px flap seam
- one vermilion signal cell marks the value that matters; one amber cell marks a value in transit
- a triangular position marker rides the active cell like a cursor on the module grid
- modules are opened by a 2px top rule and divided by 1px hairlines, never boxed on all sides
- the flap seam recurs page-wide as the ornament system — the primary value module, module clock, tile field, throughput bars
## 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-019f707a-483d-7733-974a-4617c7566e66/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 Set values that matter in the primary value module so they read as the dominant frame.
- Do Keep vermilion positional and amber for motion.
- Do Separate modules with hairline and 2px rules instead of nested cards.
- Do Use tabular mono for times, codes, and totals.
- Do Let typography and the flap seam carry the identity before colour.
- Don't Fill the page with red or amber; they are lamps, not paint.
- Don't Round the cells or soften them with glows.
- Don't Box navigation into a floating pill.
- Don't Add a second display face or stray one-off type sizes.
- Don't Bury copy under busy imagery or let imagery starve information.
## Imagery Direction
### Pairs With
quadratura
### Summary
Subjects reconstructed as modular grids: matte paper frames divided by hairline seams, panels that cleave and re-tile, monochrome ink and warm white with a single vermilion signal module. Imagery sits behind a legible veil in the hero and never contests copy for the same ground.
### Hero
A full composable grid (or the subject rebuilt as one), head-on, its modules mid-recompose behind a legible dark veil.
### Usage
Use imagery sparingly; prefer the composable grid, framed modules, ruled tables, and typographic rhythm.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "quadro",
"type": "registry:theme",
"title": "Quadro shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#EFEBE2",
"foreground": "#14130F",
"card": "#FBF9F3",
"card-foreground": "#14130F",
"popover": "#FBF9F3",
"popover-foreground": "#14130F",
"primary": "#14130F",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#6C665B",
"muted-foreground": "#14130F",
"accent": "#E23A1E",
"accent-foreground": "#ffffff",
"destructive": "#B4231A",
"border": "#16150F",
"input": "#16150F",
"ring": "#E23A1E",
"chart-1": "#14130F",
"chart-2": "#f4f4f5",
"chart-3": "#E23A1E",
"chart-4": "#1E6E43",
"chart-5": "#B26A00",
"sidebar": "#FBF9F3",
"sidebar-foreground": "#14130F",
"sidebar-primary": "#14130F",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#17607F",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#16150F",
"sidebar-ring": "#E23A1E",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#14130F",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#E23A1E",
"accent-foreground": "#ffffff",
"destructive": "#B4231A",
"border": "#303642",
"input": "#303642",
"ring": "#E23A1E",
"chart-1": "#14130F",
"chart-2": "#f4f4f5",
"chart-3": "#E23A1E",
"chart-4": "#1E6E43",
"chart-5": "#B26A00",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#14130F",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#E23A1E",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#E23A1E",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019f707a-483d-7733-974a-4617c7566e66",
"slug": "quadro",
"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_soft",
"bg",
"border",
"error",
"info",
"muted",
"on_accent",
"success",
"surface",
"surface_solid",
"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",
"md",
"none"
],
"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
images by fal-ai/flux/dev
Keep Quadroand 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: #EFEBE2;
--foreground: #14130F;
--card: #FBF9F3;
--card-foreground: #14130F;
--popover: #FBF9F3;
--popover-foreground: #14130F;
--primary: #14130F;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #6C665B;
--muted-foreground: #14130F;
--accent: #E23A1E;
--accent-foreground: #ffffff;
--destructive: #B4231A;
--border: #16150F;
--input: #16150F;
--ring: #E23A1E;
--chart-1: #14130F;
--chart-2: #f4f4f5;
--chart-3: #E23A1E;
--chart-4: #1E6E43;
--chart-5: #B26A00;
--sidebar: #FBF9F3;
--sidebar-foreground: #14130F;
--sidebar-primary: #14130F;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #17607F;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #16150F;
--sidebar-ring: #E23A1E;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #14130F;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #E23A1E;
--accent-foreground: #ffffff;
--destructive: #B4231A;
--border: #303642;
--input: #303642;
--ring: #E23A1E;
--chart-1: #14130F;
--chart-2: #f4f4f5;
--chart-3: #E23A1E;
--chart-4: #1E6E43;
--chart-5: #B26A00;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #14130F;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #E23A1E;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #E23A1E;
--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 QuadroShadcnKit() {
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">Quadro</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": "quadro",
"type": "registry:theme",
"author": "katagami-agent",
"title": "Quadro",
"description": "The modular-grid design language: framed panels that partition and recompose, warm paper ground, hairline rules, and one urgent signal vermilion with a transit amber. A reimagining of the Swiss International Style as a viewport that cleaves into modules and re-tiles.",
"cssVars": {
"theme": {
"font-sans": "Archivo, system-ui, sans-serif",
"font-mono": "IBM Plex Mono, ui-monospace, monospace",
"radius": "0px"
},
"light": {
"background": "#EFEBE2",
"foreground": "#14130F",
"card": "#FBF9F3",
"card-foreground": "#14130F",
"popover": "#FFFFFF",
"popover-foreground": "#14130F",
"primary": "#E23A1E",
"primary-foreground": "#FBF9F3",
"secondary": "#F3E6C7",
"secondary-foreground": "#14130F",
"muted": "#FBF9F3",
"muted-foreground": "#6C665B",
"accent": "#E39A12",
"accent-foreground": "#14130F",
"destructive": "#B4231A",
"destructive-foreground": "#FBF9F3",
"border": "#16150F",
"input": "#16150F",
"ring": "#E23A1E",
"radius": "0px",
"chart-1": "#E23A1E",
"chart-2": "#E39A12",
"chart-3": "#17607F",
"chart-4": "#1E6E43",
"chart-5": "#6C665B"
},
"dark": {
"background": "#14130F",
"foreground": "#FBF9F3",
"card": "#1C1A15",
"card-foreground": "#FBF9F3",
"popover": "#1C1A15",
"popover-foreground": "#FBF9F3",
"primary": "#E23A1E",
"primary-foreground": "#FBF9F3",
"secondary": "#2A2720",
"secondary-foreground": "#FBF9F3",
"muted": "#1C1A15",
"muted-foreground": "#A49E90",
"accent": "#E39A12",
"accent-foreground": "#14130F",
"destructive": "#E5564B",
"destructive-foreground": "#14130F",
"border": "#33302A",
"input": "#33302A",
"ring": "#E23A1E",
"radius": "0px",
"chart-1": "#E23A1E",
"chart-2": "#E39A12",
"chart-3": "#3E9CC0",
"chart-4": "#3FA96C",
"chart-5": "#A49E90"
}
},
"visualProfile": {
"family": "grotesque-industrial",
"material": "matte paper card",
"contour": "square",
"border": "hairline",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "mechanical-recompose",
"density": "medium",
"accents": ["#E23A1E", "#E39A12"]
},
"notes": "Square corners only (radius 0). Controls share one height and a hairline perimeter; primary carries the signal vermilion; amber marks a module in transit. Modules open with a 2px top rule along the top edge rather than a full box. Compose interfaces from framed modules that partition and recompose within one grid; the split-flap seam survives inside modules as a fine texture that echoes the grid's own hairline. Keep accents positional; they signal, they never fill."
}
---
artifact: katagami:shadcn-component-spec
version: component-recipes-v1
language: quadro
author: katagami-agent
---
# Quadro — shadcn/ui Components
Author: `katagami-agent`
Quadro dresses shadcn/ui as a working departure board. Square corners, hairline rules, warm paper surfaces, and one urgent signal vermilion with a transit amber. Values that matter are set in split-flap mono cells — the Track — each carrying a 1px flap seam. Nothing is rounded, nothing glows, and accents stay positional.
## ShadSync visual profile
The renderer follows this profile so every primitive looks like Quadro, not a generic house chassis:
- **family** — grotesque-industrial (Archivo display + body, IBM Plex Mono for values)
- **material** — matte paper card; surfaces are `#FBF9F3` on a `#EFEBE2` field
- **contour** — square; `radius: 0px` everywhere except the round utility dot / radio
- **border** — hairline `1px` rules in near-black `#16150F`; panels open with a `2px` top rule, never a full box
- **underlay** — false (no drop cards, no elevation)
- **grain** — false (clean paper, never textured)
- **stickerBadges** — false (badges are flat ruled chips)
- **motion** — mechanical-flap: values settle into place; 150ms, `cubic-bezier(0.2,0,0,1)`
- **density** — medium; generous margins, tight rows
- **accents** — signal vermilion `#E23A1E`, transit amber `#E39A12`
## Signature component recipes
The identity lives in a few moves that repeat across primitives:
- **Button** — one height (44px), square, hairline perimeter. `default` fills signal vermilion with paper text; `secondary` is ink; `outline`/`ghost` keep the hairline only; an amber variant marks a value in transit. Labels are uppercase, tracked, and never wrap.
- **Card** — a ruled plane: `2px` top rule opens it, a hairline separates the header from the body. No all-around box, no shadow, no radius.
- **Input / Textarea / Select** — hairline perimeter, square; on focus, a signal underline (`inset 0 -3px 0` vermilion) instead of a ring glow. Select carries a small mono caret drawn from two gradients.
- **Table** — mono tabular numerals, hairline row rules, uppercase mono column heads; status set as flat chips in signal, amber, and success.
- **Badge** — a flat mono chip with a hairline; `signal` and `transit` variants fill vermilion and amber.
- **Tabs** — underline the active track in vermilion; no pill, no filled background.
- **Switch / Checkbox / Radio** — square switch and checkbox (checkbox mark is a small vermilion square); radio is the one round element, with a vermilion dot.
- **The Track** — the ownable primitive: values set in fixed-width mono cells, each with a 1px flap seam; ink / card / signal / amber roles; a triangular position marker rides the active cell.
## Preview shots
`preview-shots.json` renders three product scenes against this profile, exercising all sixteen primitives:
1. **Departure board** — the operations timetable: table, badges, tabs, tooltip, dropdown-menu, separator.
2. **Dispatch panel** — the control surface: inputs, select, textarea, switch, checkbox, slider, buttons, dialog.
3. **Ticket sheet** — a booking flow: card, sheet, input, radio-style select, badge, button.
Each shot names what it must show (the Track, hairline rules, the signal cell) and what to avoid (rounded corners, shadows, a second accent used as fill).
## Copy-paste component example
A primary action and a value set in the Track, using the installed primitives from `@/components/ui/`:
```tsx
import { Button } from "@/components/ui/button"
import { Badge } from "@/components/ui/badge"
export function DepartureRow() {
return (
<div className="flex items-center justify-between border-b border-border py-3">
{/* the Track: a value in split-flap mono cells */}
<div className="flex gap-[3px] font-mono tabular-nums">
{"15:02".split("").map((ch, i) => (
<span
key={i}
className="relative min-w-[0.72em] bg-foreground px-1.5 py-1 text-center text-background
after:absolute after:inset-x-0 after:top-1/2 after:h-px after:bg-white/20"
>
{ch}
</span>
))}
</div>
<Badge className="rounded-none bg-primary text-primary-foreground">Departing</Badge>
<Button className="h-11 rounded-none uppercase tracking-wide">Flap to board</Button>
</div>
)
}
```
Install the primitives you need from `@/components/ui/` (button, card, input, textarea, select, dialog, sheet, tabs, badge, separator, checkbox, switch, slider, tooltip, dropdown-menu, table) and apply the Quadro theme from `export.json`. Keep `rounded-none`, keep the hairline, keep the signal positional.
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"author": "katagami-agent",
"requiresVisualProfile": true,
"language": {
"id": "quadro",
"name": "Quadro",
"slug": "quadro"
},
"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": [
"Square corners only (radius 0); the round utility dot and radio are the only exceptions.",
"Important values are set in split-flap mono cells (the Track), each with a 1px flap seam.",
"One button is primary and carries the signal vermilion; the rest stay ink, amber, or ghost, all one height.",
"Panels open with a 2px top rule and hairline separators — never a full box or a shadow.",
"Accents are positional lamps: vermilion for the value that matters, amber for a value in transit."
],
"visualProfile": {
"family": "grotesque-industrial",
"material": "matte paper card",
"contour": "square",
"border": "hairline",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "mechanical-flap",
"density": "medium",
"accents": ["#E23A1E", "#E39A12"]
},
"tokens": {
"background": "#EFEBE2",
"foreground": "#14130F",
"card": "#FBF9F3",
"popover": "#FFFFFF",
"primary": "#E23A1E",
"primary-foreground": "#FBF9F3",
"secondary": "#F3E6C7",
"accent": "#E39A12",
"muted-foreground": "#6C665B",
"destructive": "#B4231A",
"success": "#1E6E43",
"info": "#17607F",
"border": "#16150F",
"ring": "#E23A1E",
"radius": "0px",
"font-sans": "Archivo, system-ui, sans-serif",
"font-mono": "IBM Plex Mono, ui-monospace, monospace"
},
"shots": [
{
"id": "departure-board",
"title": "Departure board",
"viewport": "desktop",
"primitives": ["table", "badge", "tabs", "tooltip", "dropdown-menu", "separator", "button"],
"composition": "A live operations board: tabs over a ruled timetable of departures, status shown as flat chips, a dropdown-menu for platform actions, a tooltip on a delayed row, and a primary action to flap a service to the board.",
"mustShow": [
"hairline row rules with mono tabular numerals",
"status chips in signal vermilion, transit amber, and success green",
"tabs underlining the active track in vermilion",
"at least one value set in the split-flap Track"
],
"avoid": ["rounded corners", "drop shadows", "a filled pill nav", "amber or vermilion used as a background wash"],
"scene": {
"headline": "Departures — Zurich HB",
"description": "Live board, updated 14:27. Signal marks the service departing now; amber marks a service boarding.",
"rows": [
{"time": "14:31", "service": "IC 728", "destination": "Geneve Aeroport", "platform": "07", "status": "Departing"},
{"time": "14:44", "service": "RE 3312", "destination": "Luzern", "platform": "12", "status": "Boarding"},
{"time": "15:02", "service": "ICE 279", "destination": "Milano Centrale", "platform": "03", "status": "On time"},
{"time": "15:18", "service": "IR 2119", "destination": "Bern", "platform": "—", "status": "Delayed 6'"}
]
}
},
{
"id": "dispatch-panel",
"title": "Dispatch panel",
"viewport": "desktop",
"primitives": ["card", "input", "select", "textarea", "switch", "checkbox", "slider", "button", "dialog"],
"composition": "A control surface for dispatching a service: a card opened by a 2px top rule holding a service input, a platform select, a note textarea, live-update switch, reserve checkbox, a depart-after slider, and a primary dispatch button that opens a confirm dialog.",
"mustShow": [
"form controls with a hairline perimeter and a signal underline on focus",
"one primary button in signal vermilion at a shared height",
"a card opened by a 2px top rule, no full box",
"square switch and checkbox, vermilion mark"
],
"avoid": ["rounded inputs", "glowing focus rings", "tactile gradient buttons", "a second display font"],
"scene": {
"headline": "Dispatch — ICE 279",
"description": "Assign a platform and flap the service to the live board.",
"fields": [
{"label": "Service", "value": "ICE 279 · Milano Centrale"},
{"label": "Assign platform", "value": "Platform 03"},
{"label": "Depart after", "value": "14:27"},
{"label": "Note to conductor", "value": "Two folding cycles held in the vestibule."}
]
}
},
{
"id": "ticket-sheet",
"title": "Ticket sheet",
"viewport": "mobile",
"primitives": ["sheet", "card", "input", "select", "badge", "separator", "button", "tooltip"],
"composition": "A booking sheet sliding up on mobile: origin and destination inputs, a class select, a fare summary card, a reserved badge, and a primary book button — all square, hairline, single column.",
"mustShow": [
"single-column stack with no horizontal overflow at 390px",
"the fare total set in the split-flap Track",
"a reserved badge as a flat mono chip",
"one primary book button in signal vermilion"
],
"avoid": ["rounded sheet corners", "shadow under the sheet", "centered headline", "emoji on the button"],
"scene": {
"headline": "Book — Zurich to Milano",
"description": "First class, window reserved. Fare held for nine minutes.",
"stats": [
{"label": "Fare", "value": "142.00"},
{"label": "Duration", "value": "3h 31m"},
{"label": "Changes", "value": "0"}
]
}
}
],
"componentRecipes": [
{"primitive": "button", "intent": "Primary action fills signal vermilion with paper text; one height (44px), square, uppercase tracked label that never wraps."},
{"primitive": "button", "intent": "Secondary is ink, ghost keeps only the hairline; an amber variant marks a value in transit."},
{"primitive": "card", "intent": "A ruled plane opened by a 2px top rule with a hairline header separator; no full box, no shadow, no radius."},
{"primitive": "input", "intent": "Hairline perimeter, square; focus draws a signal underline instead of a ring glow."},
{"primitive": "textarea", "intent": "Same hairline field as input, resizable vertically, mono-friendly for notes and codes."},
{"primitive": "select", "intent": "Hairline field with a small mono caret drawn from two gradients; square, no rounded chevron chip."},
{"primitive": "dialog", "intent": "A centered paper panel with a 2px top rule and hairline divisions; square, no rounded modal, no backdrop blur."},
{"primitive": "sheet", "intent": "Slides from the edge as a square paper panel with a hairline seam; single-column content, no rounded corners."},
{"primitive": "tabs", "intent": "Underline the active track in vermilion along a hairline baseline; no pill, no filled tab."},
{"primitive": "badge", "intent": "A flat mono chip with a hairline; signal and transit variants fill vermilion and amber."},
{"primitive": "separator", "intent": "A 1px hairline rule in near-black; the primary way modules and rows are divided."},
{"primitive": "checkbox", "intent": "A square hairline box; checked fills ink with a small vermilion square as the mark."},
{"primitive": "switch", "intent": "A square track; on state fills vermilion and slides a paper knob — never a rounded pill toggle."},
{"primitive": "slider", "intent": "A 1px ink rail with a square vermilion thumb; value read in mono below the rail."},
{"primitive": "tooltip", "intent": "A square ink panel with paper mono text and a hairline; no rounded bubble, no soft shadow."},
{"primitive": "dropdown-menu", "intent": "A square paper menu opened by a 2px top rule; hairline row separators, uppercase mono items, no radius."},
{"primitive": "table", "intent": "Mono tabular numerals, hairline row rules, uppercase mono heads; status as flat chips in signal, amber, and success."}
],
"qualityRules": {
"do": [
"Set values that matter in the split-flap Track with its 1px flap seam.",
"Keep every control at one height and one square geometry.",
"Divide modules with hairline and 2px rules, not nested boxes.",
"Keep vermilion and amber positional — lamps on a board, never fill.",
"Use mono tabular numerals for times, codes, and totals."
],
"dont": [
"Round any corner except the utility dot and radio.",
"Add shadows, glows, or glass to any surface.",
"Introduce a second display font or a stray one-off type size.",
"Box the navigation into a floating pill.",
"Let copy sit on busy imagery or let imagery starve the information."
]
}
}