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 the page as one reversed broadside poured down a centre fold: a contained column (max 1180px) reading top-to-bottom, anchored by a stacked-caps masthead and a phosphor knockout lead block, with three-up dispatch columns divided by hairline rules and full-bleed halftone bands that break the column for pull quotes. Only the hero and full-bleed bands span 100vw.
Hierarchy comes from scale contrast and reversal: Anton headlines are dramatically larger than Oswald body; the lead is knocked out of solid phosphor while everything else is paper on ink; Spline Mono kickers and amber numerals form the intermediate layer; controls and labels stay small, high-contrast, and square.
Moderately dense and information-rich, with reading rhythm preserved by disciplined spacing bands, hairline dividers, and the gutter. Pad generously above titles.
Every major region registers to a visible foldline with amber crosshair marks at its corners. The lead block is a solid phosphor field with reversed dark type (the knockout); full-bleed halftone-dot bands carry manifestos; one phosphor plate of light per view, amber for the register, black for the rest.
A centred contained column on a fold: desktop reads top-to-bottom with three-up dispatch columns and a dashboard fold-rail sidebar; only the hero and full-bleed bands span 100vw. Tablet stacks dispatch columns to two-up; mobile collapses to a single column with hairline rules turned horizontal.
Disciplined rather than airy: tight internal padding for mono labels and controls, larger band spacing between editorial modules, generous padding above every title.
Moderately dense, information-rich, with clear module separation by hairline rule and gutter.
Grids use minmax(0,1fr) + min-width:0 so children shrink instead of overflowing; from ~390px mobile to 2560px+ ultra-wide the contained content caps and centres while only the full-bleed hero and bands span 100vw.
overprint
Full-frame overprint crops of printed ephemera — folded broadsheets, the press bed, the proofing bench — rendered as high-contrast risograph: dense black halftone linework with one misregistered phosphor-green plate, treated as printed matter, reversed onto a deep-ink ground.
Hero and full-bleed band imagery are driven by background-image: var(--hero-image) over a dark scrim so type stays legible. Keep the black/phosphor overprint treatment; no text, letters, or logos in the image.
# Broadside ## Philosophy Broadside is a publication-first interface conceived as a reversed broadside: one large printed sheet for the screen, poured down a centre fold and photographed on the press bed under darkroom light. The page is the ink and the type is knocked out of it as reversed paper; a single phosphor-green plate carries the signal while amber registration crosshairs pin the sheet to the bed. Depth is ink coverage and reversal, never elevation or shadow. ### Values - The fold is the grid: every layout begins at a visible foldline with hairline register rails, and content pours down it rather than floating in cards. - Reverse, don't float: surfaces are knocked out of solid ink, depth comes from coverage and rule weight, never from drop shadows or offset plates. - One plate of light: a single phosphor-green ink is reserved for the lead, the live mark, and the primary action; amber marks the register; everything else runs black. - Set in cold metal: Anton sets stacked condensed mastheads, Spline Mono files the specimen data — big and blunt, then small and exact. ### Anti-Values - Soft SaaS polish — pills, large radii, glass cards, gradient washes — that erases the sense of printed matter. - Floating blocks on offset drop-shadow plates; Broadside lies flat on the bed. - Using the phosphor plate as an ambient background wash or glow instead of reversed light through ink. - Falling back to a cream or white ground; the reversal out of deep press ink is the identity. ### Visual Character - A visible foldline flanked by hairline register rails, with amber crosshair registration marks at the corners of major regions. - Lead blocks are solid phosphor-green fields with reversed dark type (the knockout); secondary content runs reversed paper on deep ink, divided only by hairline rules and the gutter. - Full-bleed halftone-dot bands break the column to carry pull quotes and manifestos. - Stacked condensed Anton caps form vertical mastheads (BROAD / SIDE); Spline Sans Mono labels are letter-spaced uppercase like data filed on the bench. - Square corners throughout with a faint screen-blend halftone grain over the page; the only full-radius element is the pulsing live-status dot. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#0d0d0d` | | surface | `#161616` | | surface_2 | `#1f1f1f` | | text | `#f4f1e8` | | muted | `#8d897e` | | border | `#2a2a28` | | accent | `#00ff66` | | accent_2 | `#ffb000` | | on_accent | `#07120a` | | success | `#00ff66` | | warning | `#ffb000` | | error | `#ff4d4d` | | info | `#5ad1ff` | ### Typography - **Base Size**: 17px - **Body Font**: Oswald - **Heading Font**: Anton - **Mono Font**: Spline Sans Mono - **Heading Weight**: 400 - **Heading Transform**: uppercase - **Letter Spacing**: -0.01em - **Line Height**: 1.55 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Anton&family=Oswald:wght@300;400;500;600;700&family=Spline+Sans+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 - **Philosophy**: No drop shadows. Depth is knockout, reversal, and hairline rule weight — the sheet lies flat on the press bed. ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64,96] ### Surfaces - **Treatment**: reversed-ink-knockout - **Card Style**: Register blocks of #161616 on a deep press-ink ground, separated by hairline rules and the gutter; lead blocks invert to a solid phosphor field with reversed dark type. A faint screen-blend halftone grain sits over the page. - **Bg Pattern**: halftone-grain ### Borders - **Default Width**: 1px - **Accent Width**: 3px - **Style**: solid - **Character**: Hairline register rules divide columns; a 3px reversed-paper rule marks bold section breaks. Borders are dividing rules, never coloured accent edges on cards. ### Motion - **Duration**: 200ms - **Easing**: cubic-bezier(0.2,0.8,0.2,1) - **Philosophy**: Snappy and mechanical. The settled state is the default (visible with no JS); an inline script gates a hidden start-state and reveals blocks on scroll. Respects prefers-reduced-motion. ## Rules ### Composition Compose the page as one reversed broadside poured down a centre fold: a contained column (max 1180px) reading top-to-bottom, anchored by a stacked-caps masthead and a phosphor knockout lead block, with three-up dispatch columns divided by hairline rules and full-bleed halftone bands that break the column for pull quotes. Only the hero and full-bleed bands span 100vw. ### Hierarchy Hierarchy comes from scale contrast and reversal: Anton headlines are dramatically larger than Oswald body; the lead is knocked out of solid phosphor while everything else is paper on ink; Spline Mono kickers and amber numerals form the intermediate layer; controls and labels stay small, high-contrast, and square. ### Density Moderately dense and information-rich, with reading rhythm preserved by disciplined spacing bands, hairline dividers, and the gutter. Pad generously above titles. ### Signature Every major region registers to a visible foldline with amber crosshair marks at its corners. The lead block is a solid phosphor field with reversed dark type (the knockout); full-bleed halftone-dot bands carry manifestos; one phosphor plate of light per view, amber for the register, black for the rest. ## Layout ### Grid A centred contained column on a fold: desktop reads top-to-bottom with three-up dispatch columns and a dashboard fold-rail sidebar; only the hero and full-bleed bands span 100vw. Tablet stacks dispatch columns to two-up; mobile collapses to a single column with hairline rules turned horizontal. ### Whitespace Disciplined rather than airy: tight internal padding for mono labels and controls, larger band spacing between editorial modules, generous padding above every title. ### Density Moderately dense, information-rich, with clear module separation by hairline rule and gutter. ### Responsive Grids use minmax(0,1fr) + min-width:0 so children shrink instead of overflowing; from ~390px mobile to 2560px+ ultra-wide the contained content caps and centres while only the full-bleed hero and bands span 100vw. ### Breakpoints - **Desktop**: 1440px and above — masthead, knockout lead, three-up dispatches, full register table. - **Tablet**: 768px to 1439px — dispatches stack to two columns; dashboard sidebar becomes a horizontal rail. - **Mobile**: 390px to 767px — single-column fold, headline first, hairline rules horizontal, full-width buttons. ## Guidance ### Do - Knock the lead out of solid phosphor and reverse paper type through deep ink. - Pin every major block to the foldline and mark its corners with amber registration crosshairs. - Set mastheads in stacked Anton caps; file metadata, controls, and wayfinding in Spline Sans Mono. - Keep one phosphor plate of light per view — lead, live mark, primary action — and let everything else run black. ### Don't - Do not float blocks on offset or drop-shadow plates; Broadside lies flat on the press bed. - Do not use the phosphor as a background wash or ambient glow — it is reversed light, not fill. - Do not soften the system with pill buttons, large radii, glass cards, or grey borders. - Do not fall back to a cream or white ground; the reversal out of deep press ink is the identity. ### Accessibility High contrast everywhere: warm reversed paper (#f4f1e8) on deep press ink (#0d0d0d) clears AA at body sizes. The phosphor (#00ff66) and amber (#ffb000) fills carry dark text for AA contrast. Every form control is explicitly styled with a visible 2px phosphor focus ring; icons are SVG/CSS primitives, never glyphs or emoji; motion respects prefers-reduced-motion and the fully-rendered state is visible with no JavaScript. ## Imagery Direction ### Pairs With overprint ### Summary Full-frame overprint crops of printed ephemera — folded broadsheets, the press bed, the proofing bench — rendered as high-contrast risograph: dense black halftone linework with one misregistered phosphor-green plate, treated as printed matter, reversed onto a deep-ink ground. ### Subjects - stacks of folded broadsheets seen edge-on - the press bed under raking light - hands at the proofing bench - rollers and ink cylinders - taped layout sheets with registration marks - metal type in the case ### Usage Hero and full-bleed band imagery are driven by background-image: var(--hero-image) over a dark scrim so type stays legible. Keep the black/phosphor overprint treatment; no text, letters, or logos in the image. ### Engine Hints - **Model**: gpt-image-2 - **Provider**: openai - **Tool**: openai-image MCP - **Size**: 1536x1024 - **Quality**: high
---
version: "alpha"
name: "Broadside"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#0d0d0d"
surface: "#161616"
surface_2: "#1f1f1f"
text: "#f4f1e8"
muted: "#8d897e"
border: "#2a2a28"
accent: "#00ff66"
accent_2: "#ffb000"
on_accent: "#07120a"
success: "#00ff66"
warning: "#ffb000"
error: "#ff4d4d"
info: "#5ad1ff"
typography:
headline-lg:
fontFamily: "Anton"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.01em"
headline-md:
fontFamily: "Anton"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.01em"
body-md:
fontFamily: "Oswald"
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"
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-accent_2:
backgroundColor: "{colors.accent_2}"
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"
---
# Broadside
## Overview
Broadside is a publication-first interface conceived as a reversed broadside: one large printed sheet for the screen, poured down a centre fold and photographed on the press bed under darkroom light. The page is the ink and the type is knocked out of it as reversed paper; a single phosphor-green plate carries the signal while amber registration crosshairs pin the sheet to the bed. Depth is ink coverage and reversal, never elevation or shadow.
### Values
- The fold is the grid: every layout begins at a visible foldline with hairline register rails, and content pours down it rather than floating in cards.
- Reverse, don't float: surfaces are knocked out of solid ink, depth comes from coverage and rule weight, never from drop shadows or offset plates.
- One plate of light: a single phosphor-green ink is reserved for the lead, the live mark, and the primary action; amber marks the register; everything else runs black.
- Set in cold metal: Anton sets stacked condensed mastheads, Spline Mono files the specimen data — big and blunt, then small and exact.
### Anti-Values
- Soft SaaS polish — pills, large radii, glass cards, gradient washes — that erases the sense of printed matter.
- Floating blocks on offset drop-shadow plates; Broadside lies flat on the bed.
- Using the phosphor plate as an ambient background wash or glow instead of reversed light through ink.
- Falling back to a cream or white ground; the reversal out of deep press ink is the identity.
### Visual Character
- A visible foldline flanked by hairline register rails, with amber crosshair registration marks at the corners of major regions.
- Lead blocks are solid phosphor-green fields with reversed dark type (the knockout); secondary content runs reversed paper on deep ink, divided only by hairline rules and the gutter.
- Full-bleed halftone-dot bands break the column to carry pull quotes and manifestos.
- Stacked condensed Anton caps form vertical mastheads (BROAD / SIDE); Spline Sans Mono labels are letter-spaced uppercase like data filed on the bench.
- Square corners throughout with a faint screen-blend halftone grain over the page; the only full-radius element is the pulsing live-status dot.
## 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 | `#0d0d0d` |
| surface | `#161616` |
| surface_2 | `#1f1f1f` |
| text | `#f4f1e8` |
| muted | `#8d897e` |
| border | `#2a2a28` |
| accent | `#00ff66` |
| accent_2 | `#ffb000` |
| on_accent | `#07120a` |
| success | `#00ff66` |
| warning | `#ffb000` |
| error | `#ff4d4d` |
| info | `#5ad1ff` |
## Typography
- **Headline-Lg**: Anton, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Anton, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Oswald, 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`
- **Step-8**: `96px`
### Grid
A centred contained column on a fold: desktop reads top-to-bottom with three-up dispatch columns and a dashboard fold-rail sidebar; only the hero and full-bleed bands span 100vw. Tablet stacks dispatch columns to two-up; mobile collapses to a single column with hairline rules turned horizontal.
### Whitespace
Disciplined rather than airy: tight internal padding for mono labels and controls, larger band spacing between editorial modules, generous padding above every title.
### Density
Moderately dense, information-rich, with clear module separation by hairline rule and gutter.
### Responsive
Grids use minmax(0,1fr) + min-width:0 so children shrink instead of overflowing; from ~390px mobile to 2560px+ ultra-wide the contained content caps and centres while only the full-bleed hero and bands span 100vw.
### Breakpoints
- **Desktop**: 1440px and above — masthead, knockout lead, three-up dispatches, full register table.
- **Tablet**: 768px to 1439px — dispatches stack to two columns; dashboard sidebar becomes a horizontal rail.
- **Mobile**: 390px to 767px — single-column fold, headline first, hairline rules horizontal, full-width buttons.
## Elevation & Depth
### Shadows
- **Sm**: none
- **Md**: none
- **Lg**: none
- **Philosophy**: No drop shadows. Depth is knockout, reversal, and hairline rule weight — the sheet lies flat on the press bed.
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `0px`
- **Md**: `0px`
- **Lg**: `0px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: reversed-ink-knockout
- **Card Style**: Register blocks of #161616 on a deep press-ink ground, separated by hairline rules and the gutter; lead blocks invert to a solid phosphor field with reversed dark type. A faint screen-blend halftone grain sits over the page.
- **Bg Pattern**: halftone-grain
### Borders
- **Default Width**: 1px
- **Accent Width**: 3px
- **Style**: solid
- **Character**: Hairline register rules divide columns; a 3px reversed-paper rule marks bold section breaks. Borders are dividing rules, never coloured accent edges on cards.
## Components
### Composition
Compose the page as one reversed broadside poured down a centre fold: a contained column (max 1180px) reading top-to-bottom, anchored by a stacked-caps masthead and a phosphor knockout lead block, with three-up dispatch columns divided by hairline rules and full-bleed halftone bands that break the column for pull quotes. Only the hero and full-bleed bands span 100vw.
### Hierarchy
Hierarchy comes from scale contrast and reversal: Anton headlines are dramatically larger than Oswald body; the lead is knocked out of solid phosphor while everything else is paper on ink; Spline Mono kickers and amber numerals form the intermediate layer; controls and labels stay small, high-contrast, and square.
### Density
Moderately dense and information-rich, with reading rhythm preserved by disciplined spacing bands, hairline dividers, and the gutter. Pad generously above titles.
### Signature
Every major region registers to a visible foldline with amber crosshair marks at its corners. The lead block is a solid phosphor field with reversed dark type (the knockout); full-bleed halftone-dot bands carry manifestos; one phosphor plate of light per view, amber for the register, black for the rest.
## 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-019efa5d-8ce7-7d80-8fd3-c79b24fdca6f/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 Knock the lead out of solid phosphor and reverse paper type through deep ink.
- Do Pin every major block to the foldline and mark its corners with amber registration crosshairs.
- Do Set mastheads in stacked Anton caps; file metadata, controls, and wayfinding in Spline Sans Mono.
- Do Keep one phosphor plate of light per view — lead, live mark, primary action — and let everything else run black.
- Don't Do not float blocks on offset or drop-shadow plates; Broadside lies flat on the press bed.
- Don't Do not use the phosphor as a background wash or ambient glow — it is reversed light, not fill.
- Don't Do not soften the system with pill buttons, large radii, glass cards, or grey borders.
- Don't Do not fall back to a cream or white ground; the reversal out of deep press ink is the identity.
### Accessibility
High contrast everywhere: warm reversed paper (#f4f1e8) on deep press ink (#0d0d0d) clears AA at body sizes. The phosphor (#00ff66) and amber (#ffb000) fills carry dark text for AA contrast. Every form control is explicitly styled with a visible 2px phosphor focus ring; icons are SVG/CSS primitives, never glyphs or emoji; motion respects prefers-reduced-motion and the fully-rendered state is visible with no JavaScript.
## Imagery Direction
### Pairs With
overprint
### Summary
Full-frame overprint crops of printed ephemera — folded broadsheets, the press bed, the proofing bench — rendered as high-contrast risograph: dense black halftone linework with one misregistered phosphor-green plate, treated as printed matter, reversed onto a deep-ink ground.
### Subjects
- stacks of folded broadsheets seen edge-on
- the press bed under raking light
- hands at the proofing bench
- rollers and ink cylinders
- taped layout sheets with registration marks
- metal type in the case
### Usage
Hero and full-bleed band imagery are driven by background-image: var(--hero-image) over a dark scrim so type stays legible. Keep the black/phosphor overprint treatment; no text, letters, or logos in the image.
### Engine Hints
- **Model**: gpt-image-2
- **Provider**: openai
- **Tool**: openai-image MCP
- **Size**: 1536x1024
- **Quality**: high
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "broadside",
"type": "registry:theme",
"title": "Broadside shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#0d0d0d",
"foreground": "#f4f1e8",
"card": "#161616",
"card-foreground": "#f4f1e8",
"popover": "#161616",
"popover-foreground": "#f4f1e8",
"primary": "#f4f1e8",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#8d897e",
"muted-foreground": "#f4f1e8",
"accent": "#00ff66",
"accent-foreground": "#111111",
"destructive": "#ff4d4d",
"border": "#2a2a28",
"input": "#2a2a28",
"ring": "#00ff66",
"chart-1": "#f4f1e8",
"chart-2": "#f4f4f5",
"chart-3": "#00ff66",
"chart-4": "#00ff66",
"chart-5": "#ffb000",
"sidebar": "#161616",
"sidebar-foreground": "#f4f1e8",
"sidebar-primary": "#f4f1e8",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#5ad1ff",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#2a2a28",
"sidebar-ring": "#00ff66",
"radius": "0"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#f4f1e8",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#00ff66",
"accent-foreground": "#111111",
"destructive": "#ff4d4d",
"border": "#303642",
"input": "#303642",
"ring": "#00ff66",
"chart-1": "#f4f1e8",
"chart-2": "#f4f4f5",
"chart-3": "#00ff66",
"chart-4": "#00ff66",
"chart-5": "#ffb000",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#f4f1e8",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#00ff66",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#303642",
"sidebar-ring": "#00ff66",
"radius": "0"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019efa5d-8ce7-7d80-8fd3-c79b24fdca6f",
"slug": "broadside",
"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",
"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"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"lg",
"md",
"philosophy",
"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 Broadsideand 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: #0d0d0d;
--foreground: #f4f1e8;
--card: #161616;
--card-foreground: #f4f1e8;
--popover: #161616;
--popover-foreground: #f4f1e8;
--primary: #f4f1e8;
--primary-foreground: #111111;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #8d897e;
--muted-foreground: #f4f1e8;
--accent: #00ff66;
--accent-foreground: #111111;
--destructive: #ff4d4d;
--border: #2a2a28;
--input: #2a2a28;
--ring: #00ff66;
--chart-1: #f4f1e8;
--chart-2: #f4f4f5;
--chart-3: #00ff66;
--chart-4: #00ff66;
--chart-5: #ffb000;
--sidebar: #161616;
--sidebar-foreground: #f4f1e8;
--sidebar-primary: #f4f1e8;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #5ad1ff;
--sidebar-accent-foreground: #111111;
--sidebar-border: #2a2a28;
--sidebar-ring: #00ff66;
--radius: 0;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #f4f1e8;
--primary-foreground: #111111;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #00ff66;
--accent-foreground: #111111;
--destructive: #ff4d4d;
--border: #303642;
--input: #303642;
--ring: #00ff66;
--chart-1: #f4f1e8;
--chart-2: #f4f4f5;
--chart-3: #00ff66;
--chart-4: #00ff66;
--chart-5: #ffb000;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #f4f1e8;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #00ff66;
--sidebar-accent-foreground: #111111;
--sidebar-border: #303642;
--sidebar-ring: #00ff66;
--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 BroadsideShadcnKit() {
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">Broadside</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": "broadside",
"type": "registry:theme",
"author": "katagami-agent",
"title": "Broadside — Phosphor Knockout",
"description": "Reversed broadside: deep press-ink ground, knocked-out paper type, one phosphor-green plate, amber registration marks. Square corners, hairline rules, no drop shadows.",
"cssVars": {
"theme": {
"font-sans": "Oswald, system-ui, sans-serif",
"font-mono": "Spline Sans Mono, ui-monospace, monospace",
"font-display": "Anton, Oswald, sans-serif",
"radius": "0rem"
},
"light": {
"background": "#0d0d0d",
"foreground": "#f4f1e8",
"card": "#161616",
"card-foreground": "#f4f1e8",
"popover": "#161616",
"popover-foreground": "#f4f1e8",
"primary": "#00ff66",
"primary-foreground": "#07120a",
"secondary": "#1f1f1f",
"secondary-foreground": "#f4f1e8",
"muted": "#1f1f1f",
"muted-foreground": "#8d897e",
"accent": "#ffb000",
"accent-foreground": "#1c1300",
"destructive": "#ff4d4d",
"destructive-foreground": "#1a0000",
"border": "#2a2a28",
"input": "#2a2a28",
"ring": "#00ff66",
"chart-1": "#00ff66",
"chart-2": "#ffb000",
"chart-3": "#5ad1ff",
"chart-4": "#8d897e",
"chart-5": "#f4f1e8"
},
"dark": {
"background": "#0d0d0d",
"foreground": "#f4f1e8",
"card": "#161616",
"card-foreground": "#f4f1e8",
"popover": "#161616",
"popover-foreground": "#f4f1e8",
"primary": "#00ff66",
"primary-foreground": "#07120a",
"secondary": "#1f1f1f",
"secondary-foreground": "#f4f1e8",
"muted": "#1f1f1f",
"muted-foreground": "#8d897e",
"accent": "#ffb000",
"accent-foreground": "#1c1300",
"destructive": "#ff4d4d",
"destructive-foreground": "#1a0000",
"border": "#2a2a28",
"input": "#2a2a28",
"ring": "#00ff66",
"chart-1": "#00ff66",
"chart-2": "#ffb000",
"chart-3": "#5ad1ff",
"chart-4": "#8d897e",
"chart-5": "#f4f1e8"
}
},
"visualProfile": {
"mode": "dark",
"ground": "#0d0d0d",
"radius": "square",
"borders": "hairline-rule",
"border_width": "1px",
"elevation": "none",
"shadow": "none",
"material": "reversed-ink-knockout",
"accent_usage": "spot-ink",
"primary_is_fill": true,
"texture": "halftone-grain",
"typography": {
"display": "Anton",
"body": "Oswald",
"mono": "Spline Sans Mono",
"case": "uppercase-display",
"tracking_mono": "0.14em"
},
"notes": "Primary buttons are solid phosphor fields with reversed dark text (knockout). Cards are register blocks on deep ink, separated by hairline rules — never drop-shadow plates. Amber is the registration/warning mark only. Square corners; the only pill is a small live-status dot."
}
}
# Broadside shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019efa5d-8ce7-7d80-8fd3-c79b24fdca6f`
Slug: `broadside`
## Intent
Broadside is a publication-first interface conceived as a reversed broadside: one large printed sheet for the screen, poured down a centre fold and photographed on the press bed under darkroom light. The page is the ink and the type is knocked out of it as reversed paper; a single phosphor-green plate carries the signal while amber registration crosshairs pin the sheet to the bed. Depth is ink coverage and reversal, never elevation or shadow.
## 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": "#0d0d0d",
"surface": "#161616",
"surface_2": "#1f1f1f",
"text": "#f4f1e8",
"muted": "#8d897e",
"border": "#2a2a28",
"accent": "#00ff66",
"accent_2": "#ffb000",
"on_accent": "#07120a",
"success": "#00ff66",
"warning": "#ffb000",
"error": "#ff4d4d",
"info": "#5ad1ff"
}
Typography:
{
"base_size": "17px",
"body_font": "Oswald",
"heading_font": "Anton",
"mono_font": "Spline Sans Mono",
"heading_weight": "400",
"heading_transform": "uppercase",
"letter_spacing": "-0.01em",
"line_height": 1.55,
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Anton&family=Oswald:wght@300;400;500;600;700&family=Spline+Sans+Mono:wght@400;500;600&display=swap"
}
## Visual character to preserve
- A visible foldline flanked by hairline register rails, with amber crosshair registration marks at the corners of major regions.
- Lead blocks are solid phosphor-green fields with reversed dark type (the knockout); secondary content runs reversed paper on deep ink, divided only by hairline rules and the gutter.
- Full-bleed halftone-dot bands break the column to carry pull quotes and manifestos.
- Stacked condensed Anton caps form vertical mastheads (BROAD / SIDE); Spline Sans Mono labels are letter-spaced uppercase like data filed on the bench.
- Square corners throughout with a faint screen-blend halftone grain over the page; the only full-radius element is the pulsing live-status dot.
## ShadSync visual profile
{
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": true,
"stickerBadges": false,
"motion": "still",
"density": "dense",
"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/broadside/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: Knock the lead out of solid phosphor and reverse paper type through deep ink.; Pin every major block to the foldline and mark its corners with amber registration crosshairs.; Set mastheads in stacked Anton caps; file metadata, controls, and wayfinding in Spline Sans Mono.; Keep one phosphor plate of light per view — lead, live mark, primary action — and let everything else run black.
- Do not: Do not float blocks on offset or drop-shadow plates; Broadside lies flat on the press bed.; Do not use the phosphor as a background wash or ambient glow — it is reversed light, not fill.; Do not soften the system with pill buttons, large radii, glass cards, or grey borders.; Do not fall back to a cream or white ground; the reversal out of deep press ink is the identity.
## 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 BroadsideShadcnKit() {
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">Broadside</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 centred contained column on a fold: desktop reads top-to-bottom with three-up dispatch columns and a dashboard fold-rail sidebar; only the hero and full-bleed bands span 100vw. Tablet stacks dispatch columns to two-up; mobile collapses to a single column with hairline rules turned horizontal.",
"whitespace": "Disciplined rather than airy: tight internal padding for mono labels and controls, larger band spacing between editorial modules, generous padding above every title.",
"density": "Moderately dense, information-rich, with clear module separation by hairline rule and gutter.",
"responsive": "Grids use minmax(0,1fr) + min-width:0 so children shrink instead of overflowing; from ~390px mobile to 2560px+ ultra-wide the contained content caps and centres while only the full-bleed hero and bands span 100vw.",
"breakpoints": {
"desktop": "1440px and above — masthead, knockout lead, three-up dispatches, full register table.",
"tablet": "768px to 1439px — dispatches stack to two columns; dashboard sidebar becomes a horizontal rail.",
"mobile": "390px to 767px — single-column fold, headline first, hairline rules horizontal, full-width buttons."
}
}
{
"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-019efa5d-8ce7-7d80-8fd3-c79b24fdca6f",
"name": "Broadside",
"slug": "broadside"
},
"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": [
"A visible foldline flanked by hairline register rails, with amber crosshair registration marks at the corners of major regions.",
"Lead blocks are solid phosphor-green fields with reversed dark type (the knockout); secondary content runs reversed paper on deep ink, divided only by hairline rules and the gutter.",
"Full-bleed halftone-dot bands break the column to carry pull quotes and manifestos.",
"Stacked condensed Anton caps form vertical mastheads (BROAD / SIDE); Spline Sans Mono labels are letter-spaced uppercase like data filed on the bench.",
"Square corners throughout with a faint screen-blend halftone grain over the page; the only full-radius element is the pulsing live-status dot."
],
"visualProfile": {
"family": "paper-collage",
"material": "paper",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": true,
"stickerBadges": false,
"motion": "still",
"density": "dense",
"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": "Broadside 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": [
"Knock the lead out of solid phosphor and reverse paper type through deep ink.",
"Pin every major block to the foldline and mark its corners with amber registration crosshairs.",
"Set mastheads in stacked Anton caps; file metadata, controls, and wayfinding in Spline Sans Mono.",
"Keep one phosphor plate of light per view — lead, live mark, primary action — and let everything else run black."
],
"dont": [
"Do not float blocks on offset or drop-shadow plates; Broadside lies flat on the press bed.",
"Do not use the phosphor as a background wash or ambient glow — it is reversed light, not fill.",
"Do not soften the system with pill buttons, large radii, glass cards, or grey borders.",
"Do not fall back to a cream or white ground; the reversal out of deep press ink is the identity."
]
}
}