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.
Use large-format magazine spreads: an oversized left gutter (a vertical folio rail on landings), one dominant plate per screen, asymmetric columns, and deliberate near-black voids that separate reading zones. Content caps and centres on ultra-wide; only the hero bleeds.
Set primary headlines in oversized Cormorant Garamond, open every section and card with a tracked mono folio and its glowing dot, and reserve body copy for measured 17px columns with 1.6 leading.
Keep density low to medium and balanced across the canvas; every detailed cluster needs adjacent empty near-black space, and full ink voids punctuate long pages.
Desktop uses a 12-column editorial grid with an oversized left gutter reserved for folios and negative space; spreads are asymmetric (7/5), dashboards run 8/4.
mobile <= 640px stacks to one column, hides non-essential nav links and ledger columns, and never overflows horizontally; tablet 641-1024px is its own considered layout (two-column stat bands, single-column spreads, full-width ledgers); desktop >= 1025px
Whitespace is treated as black ink void: broad margins, 64-96px section gaps, padding above every title, and narrow body measures.
# Fumage ## Philosophy A near-black editorial language for literary and fine-art interfaces, named for the fine-art technique of drawing with smoke. It translates large-format magazine pacing, ink-wash voids, and backlit smoke photography into a reading surface where atmosphere is structure: plates separate by tone and void, and one tungsten lamp warms each veil of smoke from behind. ### Values - slow literary pacing with generous negative space - one light source: the accent behaves like a lamp, never a fill - atmosphere as structure — veils, grain, and tone instead of borders - fine-art restraint over feed-like density - high-contrast legibility: copy always sits on ink, clear of the smoke ### Anti-Values - borders, hairlines, and edge rules of any kind - bright commercial colour systems and accent floods - busy social-feed density - decorative smoke that obscures reading - rounded SaaS friendliness ### Visual Character - Near-black page fields carry a fixed ambient veil and a 5% film-grain overlay, so even empty ground has weather. - Every key plate glows from one corner: an accent-warmed smoke bloom clipped inside a sharp borderless rectangle. - Headlines are oversized high-contrast Cormorant Garamond beside small uppercase IBM Plex Mono folios with glowing dots. - Layouts keep an oversized left gutter and asymmetric columns; empty black space reads as ink-wash void. - Links ink up: a 1px accent thread sweeps beneath the words and the text warms toward the lamp. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#08080A` | | surface | `#101013` | | surface_solid | `#16161A` | | text | `#F5F2E9` | | muted | `#9C9A92` | | border | `#26262B` | | accent | `#D29C50` | | accent_2 | `#8AA7B8` | | accent_soft | `#2E2415` | | on_accent | `#0B0B0D` | | success | `#8FAF8A` | | warning | `#C3A45D` | | error | `#C96B63` | | info | `#8AA7B8` | ### Typography - **Base Size**: 17px - **Body Font**: Inter - **Heading Font**: Cormorant Garamond - **Mono Font**: IBM Plex Mono - **Heading Weight**: 600 - **Heading Transform**: none - **Letter Spacing**: -0.02em - **Line Height**: 1.6 - **Scale Ratio**: 1.26 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,500;0,600;0,700;1,500&family=IBM+Plex+Mono:wght@400;500;600&family=Inter:wght@400;500;600;700&display=swap ### Radii - **None**: 0px - **Md**: 16px - **Lg**: 24px - **Full**: 9999px ### Shadows - **Sm**: 0 0 14px color-mix(in oklab, var(--accent) 34%, transparent) - **Md**: 0 24px 70px rgba(0,0,0,0.45) - **Lg**: 0 32px 90px rgba(0,0,0,0.5) ### Spacing - **Base**: 8px - **Scale**: [8,16,24,32,48,64,96] ### Surfaces - **Treatment**: grain - **Card Style**: borderless near-black plates separated by tone and void; each key plate carries a backlit smoke veil — blurred radial gradients (accent core over ink smoke) clipped inside its sharp rectangle - **Bg Pattern**: 5% film grain via inline SVG turbulence, plus a fixed ambient page veil ### Borders - **Default Width**: 0px - **Accent Width**: 0px - **Style**: none - **Character**: borderless — separation is tonal: raised plates mix 5% ink into the surface, input wells sink toward the ground with an inset 1px ink baseline; no hairlines, no edge rules, no outlines ### Motion - **Duration**: 260ms - **Easing**: cubic-bezier(0.22, 0.61, 0.36, 1) - **Philosophy**: deliberate — settled state is the default; reveals are gated behind a JS-set class and honour prefers-reduced-motion ## Rules ### Composition Use large-format magazine spreads: an oversized left gutter (a vertical folio rail on landings), one dominant plate per screen, asymmetric columns, and deliberate near-black voids that separate reading zones. Content caps and centres on ultra-wide; only the hero bleeds. ### Hierarchy Set primary headlines in oversized Cormorant Garamond, open every section and card with a tracked mono folio and its glowing dot, and reserve body copy for measured 17px columns with 1.6 leading. ### Density Keep density low to medium and balanced across the canvas; every detailed cluster needs adjacent empty near-black space, and full ink voids punctuate long pages. ### Signature Patterns - The backlit veil: plates carry ::before radial gradients — an accent-warmed core over an ink-smoke field — blurred and clipped inside sharp borderless rectangles, mixed live from the role vars so palette swaps relight the page. - The folio system: uppercase mono labels with a 7px glowing accent dot recur from masthead to footer as the page-wide ornament. - The ink-up link: a 1px accent thread sweeps beneath link text while it warms toward the lamp — never a bare default underline. - The proof ledger: borderless table rows alternate by a 2% ink breath and warm with the accent on hover; serif title cells sit beside mono folio cells. - The ink void: full-width atmospheric pauses with a rising smoke gradient and a single quiet folio at centre. ## Layout ### Grid Desktop uses a 12-column editorial grid with an oversized left gutter reserved for folios and negative space; spreads are asymmetric (7/5), dashboards run 8/4. ### Breakpoints mobile <= 640px stacks to one column, hides non-essential nav links and ledger columns, and never overflows horizontally; tablet 641-1024px is its own considered layout (two-column stat bands, single-column spreads, full-width ledgers); desktop >= 1025px ### Whitespace Whitespace is treated as black ink void: broad margins, 64-96px section gaps, padding above every title, and narrow body measures. ## Guidance ### Do - Let one large atmospheric image, plate, or quote dominate each screen before adding supporting modules. - Separate surfaces with tone and void; keep every plate borderless and sharp. - Give the accent a single job per view — the lamp: one primary action, live focus, the glowing dot. - Pair oversized serif display with small tracked mono folios and a measured 17px sans body. - Keep captions and body copy on ink, clear of the smoke; veils sit behind headlines and empty ground only. ### Don't - Do not draw hairlines, edge rules, or outlined cards — no borders of any kind. - Do not flood the accent; it is a light source, not a fill colour. - Do not fill every column; preserve empty black fields as part of the composition. - Do not place smoke or veils over long body copy. - Do not use glossy elevation; depth comes from veil, grain, and tone.
---
version: "alpha"
name: "Fumage"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#08080A"
surface: "#101013"
surface_solid: "#16161A"
text: "#F5F2E9"
muted: "#9C9A92"
border: "#26262B"
accent: "#D29C50"
accent_2: "#8AA7B8"
accent_soft: "#2E2415"
on_accent: "#0B0B0D"
success: "#8FAF8A"
warning: "#C3A45D"
error: "#C96B63"
info: "#8AA7B8"
typography:
headline-lg:
fontFamily: "Cormorant Garamond"
fontSize: "2.125rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Cormorant Garamond"
fontSize: "1.687rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "Inter"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.6
letterSpacing: "-0.02em"
label-md:
fontFamily: "IBM Plex Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
md: "16px"
lg: "24px"
full: "9999px"
spacing:
base: "8px"
xs: "8px"
sm: "16px"
md: "24px"
lg: "32px"
xl: "48px"
2xl: "64px"
3xl: "96px"
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"
---
# Fumage
## Overview
A near-black editorial language for literary and fine-art interfaces, named for the fine-art technique of drawing with smoke. It translates large-format magazine pacing, ink-wash voids, and backlit smoke photography into a reading surface where atmosphere is structure: plates separate by tone and void, and one tungsten lamp warms each veil of smoke from behind.
### Values
- slow literary pacing with generous negative space
- one light source: the accent behaves like a lamp, never a fill
- atmosphere as structure — veils, grain, and tone instead of borders
- fine-art restraint over feed-like density
- high-contrast legibility: copy always sits on ink, clear of the smoke
### Anti-Values
- borders, hairlines, and edge rules of any kind
- bright commercial colour systems and accent floods
- busy social-feed density
- decorative smoke that obscures reading
- rounded SaaS friendliness
### Visual Character
- Near-black page fields carry a fixed ambient veil and a 5% film-grain overlay, so even empty ground has weather.
- Every key plate glows from one corner: an accent-warmed smoke bloom clipped inside a sharp borderless rectangle.
- Headlines are oversized high-contrast Cormorant Garamond beside small uppercase IBM Plex Mono folios with glowing dots.
- Layouts keep an oversized left gutter and asymmetric columns; empty black space reads as ink-wash void.
- Links ink up: a 1px accent thread sweeps beneath the words and the text warms toward the lamp.
## 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 | `#08080A` |
| surface | `#101013` |
| surface_solid | `#16161A` |
| text | `#F5F2E9` |
| muted | `#9C9A92` |
| border | `#26262B` |
| accent | `#D29C50` |
| accent_2 | `#8AA7B8` |
| accent_soft | `#2E2415` |
| on_accent | `#0B0B0D` |
| success | `#8FAF8A` |
| warning | `#C3A45D` |
| error | `#C96B63` |
| info | `#8AA7B8` |
## Typography
- **Headline-Lg**: Cormorant Garamond, 2.125rem, weight 700, line-height 1.1.
- **Headline-Md**: Cormorant Garamond, 1.687rem, weight 600, line-height 1.15.
- **Body-Md**: Inter, 17px, weight 400, line-height 1.6.
- **Label-Md**: IBM Plex Mono, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `8px`
- **Sm**: `16px`
- **Md**: `24px`
- **Lg**: `32px`
- **Xl**: `48px`
- **2xl**: `64px`
- **3xl**: `96px`
### Grid
Desktop uses a 12-column editorial grid with an oversized left gutter reserved for folios and negative space; spreads are asymmetric (7/5), dashboards run 8/4.
### Breakpoints
mobile <= 640px stacks to one column, hides non-essential nav links and ledger columns, and never overflows horizontally; tablet 641-1024px is its own considered layout (two-column stat bands, single-column spreads, full-width ledgers); desktop >= 1025px
### Whitespace
Whitespace is treated as black ink void: broad margins, 64-96px section gaps, padding above every title, and narrow body measures.
## Elevation & Depth
### Shadows
- **Sm**: 0 0 14px color-mix(in oklab, var(--accent) 34%, transparent)
- **Md**: 0 24px 70px rgba(0,0,0,0.45)
- **Lg**: 0 32px 90px rgba(0,0,0,0.5)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: grain
- **Card Style**: borderless near-black plates separated by tone and void; each key plate carries a backlit smoke veil — blurred radial gradients (accent core over ink smoke) clipped inside its sharp rectangle
- **Bg Pattern**: 5% film grain via inline SVG turbulence, plus a fixed ambient page veil
### Borders
- **Default Width**: 0px
- **Accent Width**: 0px
- **Style**: none
- **Character**: borderless — separation is tonal: raised plates mix 5% ink into the surface, input wells sink toward the ground with an inset 1px ink baseline; no hairlines, no edge rules, no outlines
## Components
### Composition
Use large-format magazine spreads: an oversized left gutter (a vertical folio rail on landings), one dominant plate per screen, asymmetric columns, and deliberate near-black voids that separate reading zones. Content caps and centres on ultra-wide; only the hero bleeds.
### Hierarchy
Set primary headlines in oversized Cormorant Garamond, open every section and card with a tracked mono folio and its glowing dot, and reserve body copy for measured 17px columns with 1.6 leading.
### Density
Keep density low to medium and balanced across the canvas; every detailed cluster needs adjacent empty near-black space, and full ink voids punctuate long pages.
### Signature Patterns
- The backlit veil: plates carry ::before radial gradients — an accent-warmed core over an ink-smoke field — blurred and clipped inside sharp borderless rectangles, mixed live from the role vars so palette swaps relight the page.
- The folio system: uppercase mono labels with a 7px glowing accent dot recur from masthead to footer as the page-wide ornament.
- The ink-up link: a 1px accent thread sweeps beneath link text while it warms toward the lamp — never a bare default underline.
- The proof ledger: borderless table rows alternate by a 2% ink breath and warm with the accent on hover; serif title cells sit beside mono folio cells.
- The ink void: full-width atmospheric pauses with a rising smoke gradient and a single quiet folio at centre.
## 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-019f2e77-7c1f-7ff2-90f6-607e666af508/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 Let one large atmospheric image, plate, or quote dominate each screen before adding supporting modules.
- Do Separate surfaces with tone and void; keep every plate borderless and sharp.
- Do Give the accent a single job per view — the lamp: one primary action, live focus, the glowing dot.
- Do Pair oversized serif display with small tracked mono folios and a measured 17px sans body.
- Do Keep captions and body copy on ink, clear of the smoke; veils sit behind headlines and empty ground only.
- Don't Do not draw hairlines, edge rules, or outlined cards — no borders of any kind.
- Don't Do not flood the accent; it is a light source, not a fill colour.
- Don't Do not fill every column; preserve empty black fields as part of the composition.
- Don't Do not place smoke or veils over long body copy.
- Don't Do not use glossy elevation; depth comes from veil, grain, and tone.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "fumage",
"type": "registry:theme",
"title": "Fumage shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#08080A",
"foreground": "#F5F2E9",
"card": "#101013",
"card-foreground": "#F5F2E9",
"popover": "#101013",
"popover-foreground": "#F5F2E9",
"primary": "#F5F2E9",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#9C9A92",
"muted-foreground": "#F5F2E9",
"accent": "#D29C50",
"accent-foreground": "#ffffff",
"destructive": "#C96B63",
"border": "#26262B",
"input": "#26262B",
"ring": "#D29C50",
"chart-1": "#F5F2E9",
"chart-2": "#f4f4f5",
"chart-3": "#D29C50",
"chart-4": "#8FAF8A",
"chart-5": "#C3A45D",
"sidebar": "#101013",
"sidebar-foreground": "#F5F2E9",
"sidebar-primary": "#F5F2E9",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#8AA7B8",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#26262B",
"sidebar-ring": "#D29C50",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#F5F2E9",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#D29C50",
"accent-foreground": "#ffffff",
"destructive": "#C96B63",
"border": "#303642",
"input": "#303642",
"ring": "#D29C50",
"chart-1": "#F5F2E9",
"chart-2": "#f4f4f5",
"chart-3": "#D29C50",
"chart-4": "#8FAF8A",
"chart-5": "#C3A45D",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#F5F2E9",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#D29C50",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#D29C50",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019f2e77-7c1f-7ff2-90f6-607e666af508",
"slug": "fumage",
"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
Keep Fumageand 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: #08080A;
--foreground: #F5F2E9;
--card: #101013;
--card-foreground: #F5F2E9;
--popover: #101013;
--popover-foreground: #F5F2E9;
--primary: #F5F2E9;
--primary-foreground: #111111;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #9C9A92;
--muted-foreground: #F5F2E9;
--accent: #D29C50;
--accent-foreground: #ffffff;
--destructive: #C96B63;
--border: #26262B;
--input: #26262B;
--ring: #D29C50;
--chart-1: #F5F2E9;
--chart-2: #f4f4f5;
--chart-3: #D29C50;
--chart-4: #8FAF8A;
--chart-5: #C3A45D;
--sidebar: #101013;
--sidebar-foreground: #F5F2E9;
--sidebar-primary: #F5F2E9;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #8AA7B8;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #26262B;
--sidebar-ring: #D29C50;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #F5F2E9;
--primary-foreground: #111111;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #D29C50;
--accent-foreground: #ffffff;
--destructive: #C96B63;
--border: #303642;
--input: #303642;
--ring: #D29C50;
--chart-1: #F5F2E9;
--chart-2: #f4f4f5;
--chart-3: #D29C50;
--chart-4: #8FAF8A;
--chart-5: #C3A45D;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #F5F2E9;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #D29C50;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #D29C50;
--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 FumageShadcnKit() {
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">Fumage</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": "fumage",
"type": "registry:theme",
"author": "katagami-agent",
"title": "Fumage",
"description": "Near-black editorial theme for literary and fine-art interfaces: ink plates, one tungsten accent used like a lamp, bone text, sharp rectangles, tracked mono folios, and depth from backlit smoke veils instead of borders.",
"cssVars": {
"theme": {
"font-sans": "Inter, -apple-system, sans-serif",
"font-serif": "Cormorant Garamond, Georgia, serif",
"font-mono": "IBM Plex Mono, ui-monospace, monospace",
"radius": "0rem"
},
"dark": {
"background": "#08080A",
"foreground": "#F5F2E9",
"card": "#101013",
"card-foreground": "#F5F2E9",
"popover": "#101013",
"popover-foreground": "#F5F2E9",
"primary": "#D29C50",
"primary-foreground": "#0B0B0D",
"secondary": "#1A1A1E",
"secondary-foreground": "#F5F2E9",
"muted": "#141417",
"muted-foreground": "#9C9A92",
"accent": "#2E2415",
"accent-foreground": "#D29C50",
"destructive": "#C96B63",
"destructive-foreground": "#0B0B0D",
"border": "#26262B",
"input": "#0B0B0E",
"ring": "#D29C50",
"chart-1": "#D29C50",
"chart-2": "#8AA7B8",
"chart-3": "#8FAF8A",
"chart-4": "#C3A45D",
"chart-5": "#C96B63",
"sidebar": "#0B0B0E",
"sidebar-foreground": "#F5F2E9",
"sidebar-primary": "#D29C50",
"sidebar-primary-foreground": "#0B0B0D",
"sidebar-accent": "#1A1A1E",
"sidebar-accent-foreground": "#F5F2E9",
"sidebar-border": "#26262B",
"sidebar-ring": "#D29C50"
}
},
"visualProfile": {
"family": "editorial-atmospheric",
"material": "ink plate with backlit smoke veil and film grain",
"contour": "sharp",
"border": "none — separation by tone and void",
"underlay": true,
"grain": true,
"stickerBadges": false,
"motion": "deliberate 260ms cubic-bezier(0.22,0.61,0.36,1)",
"density": "low-medium with intentional voids",
"accents": ["#D29C50", "#8AA7B8"]
},
"notes": "Dark is the language's native ground. Radius is 0 everywhere except full-round dots, switch thumbs, and avatars (9999px). Buttons and labels set in mono uppercase with .14-.22em tracking; body 17px Inter; display in Cormorant Garamond -0.02em. The primary action glows (0 0 34px primary at 34% alpha) — reserve the glow for one action, focus rings, and live status dots. Never draw visible borders; use tonal plates (mix 5% foreground into card) and darker input wells with an inset baseline shadow instead."
}
# Fumage — shadcn/ui Components
Author: `katagami-agent`
Format: `component-recipes-v1`
Language: Fumage (`fumage`)
Fumage dresses shadcn/ui in near-black editorial ink: sharp plates, one tungsten
lamp of an accent, tracked mono folios, and depth that comes from backlit smoke
veils rather than borders. This document is the component contract: how each
primitive wears the language, the recipes that make it recognizable, and the
scenes to render it in.
## ShadSync visual profile
- **Family:** editorial-atmospheric — a literary magazine's production desk, not a SaaS console.
- **Material:** ink plates (`#101013` on `#08080A`) with a clipped, blurred smoke veil warmed by the accent; 5% film grain over the page.
- **Contour:** sharp. Radius 0 on every surface, input, and button; 9999 only for glow dots, switch thumbs, and avatars.
- **Border:** none. Separation is tonal — raised plates mix 5% foreground into the card; input wells mix toward the ground and carry an inset 1px baseline of 22% foreground.
- **Type:** Cormorant Garamond 600 for display (-0.02em), Inter 17px body, IBM Plex Mono for every label, folio, and button in uppercase with .14–.22em tracking. Strict scale: 13/15/17/21/27/34/43.
- **Accent discipline:** `#D29C50` is a light source, not a fill. It belongs to the single primary action, focus rings, checked states, and 7px status dots with a `0 0 14px` glow. Smoke-blue `#8AA7B8` covers info; success/warning/destructive stay muted and are always mixed into the plate at 9–16% for fills.
- **Motion:** deliberate, 260ms `cubic-bezier(0.22,0.61,0.36,1)`; hover lifts are 1px with a broad black shadow or an accent glow, never a colour flip.
## Signature component recipes
1. **Button (primary = the lamp):** accent fill, `on-accent` ink text, mono uppercase 13px `.18em`, height 52px, radius 0, `white-space: nowrap`. Hover adds `box-shadow: 0 0 34px` accent at 34% and a -1px lift. Exactly one per view.
2. **Button (quiet/ghost/destructive):** quiet = 5% foreground mixed into the plate; ghost = transparent with muted text that warms to accent on hover; destructive = error mixed into the plate at 24%. All share the primary's shape and height.
3. **Card (annotation plate):** borderless plate with the backlit veil — a `::before` at `inset:-20%` holding two radial gradients (accent at 22% alpha core, foreground at 8% smoke), `blur(22px)`, clipped by `overflow:hidden`. Content: mono folio with glow dot, serif title, muted 15px body.
4. **Input / Textarea (well):** darker well (55% background mixed into surface), no border, inset baseline `0 -1px 0` foreground at 22%. Focus swaps the baseline to 2px accent plus a low outer glow — the light arriving under the smoke.
5. **Select:** same well, custom chevron drawn with two linear-gradient strokes in muted — never the browser default arrow.
6. **Table (proof ledger):** borderless; header in mono uppercase 13px muted; odd rows carry a 2% foreground breath; hover warms the row with accent at 7%; title cells switch to the serif at 21px.
7. **Badge (status):** mono uppercase with a leading 6px glow dot in `currentColor`; fill is the semantic tone mixed into the plate at 14%, text the tone itself. Radius 0, never wraps.
8. **Tabs (folio tabs):** bare mono uppercase labels; the active tab warms to accent and a 2px glowing thread sweeps in beneath it (right: 100% → 0 transition).
9. **Switch / Checkbox:** wells when off; checked states fill with accent and glow. Switch thumb is the one full-round rectangle-breaker.
10. **Dialog / Sheet (plate overlay):** a veil plate on the broad black shadow (`0 32px 90px rgba(0,0,0,.5)`); the page behind dims to 70% ground, never blurs.
11. **Tooltip:** raised plate, mono 13px, no arrow — a small sharp rectangle that appears settled, 260ms fade.
12. **Progress (meter thread):** 3px full-round track in 10% foreground; the filled thread is accent with the glow — a line of lamplight across the ink.
## Preview shots
Render the language in its own world — a literary magazine's production desk —
never a component zoo. Three canonical scenes:
1. **The press desk** (dashboard, 1440×900): stat plates with veils, the proof ledger, a press schedule, one glowing primary ("Send No. 08 to Press").
2. **Plate review** (form sheet, 1024×768): editorial control form — title input, issue select, caption textarea, varnish slider, veil switch — with one Commit action.
3. **The bindery wire** (feed + cards, 390×844 mobile): activity feed with glow dots, annotation cards stacked single-column, badges for plate status.
## Copy-paste component example
```tsx
import { Button } from "@/components/ui/button"
import { Card, CardContent, CardHeader } from "@/components/ui/card"
import { Badge } from "@/components/ui/badge"
export function PlateCard() {
return (
<Card className="relative overflow-hidden rounded-none border-0 bg-[#101013] shadow-none
before:absolute before:-inset-[20%] before:content-['']
before:bg-[radial-gradient(38%_46%_at_76%_6%,rgba(210,156,80,0.22),transparent_68%),radial-gradient(56%_70%_at_62%_-10%,rgba(245,242,233,0.08),transparent_74%)]
before:blur-[22px] before:pointer-events-none">
<CardHeader className="relative flex-row items-center gap-3 pt-8">
<span className="h-[7px] w-[7px] rounded-full bg-[#D29C50] shadow-[0_0_14px_rgba(210,156,80,0.34)]" />
<span className="font-mono text-[13px] uppercase tracking-[0.22em] text-[#9C9A92]">
Portfolio — 12 plates
</span>
</CardHeader>
<CardContent className="relative space-y-4 pb-8">
<h3 className="font-serif text-[27px] font-semibold leading-tight tracking-[-0.02em] text-[#F5F2E9]">
Smoke Studies, Gdansk
</h3>
<p className="text-[15px] text-[#9C9A92]">
Marguerite Osei’s letterpress series, printed in duotone with a
single varnish pass over the bloom of each plume.
</p>
<div className="flex items-center gap-3 pt-2">
<Badge className="rounded-none border-0 bg-[#D29C50]/15 font-mono text-[13px] uppercase tracking-[0.14em] text-[#D29C50]">
Approved
</Badge>
<Button className="h-[52px] rounded-none bg-[#D29C50] px-8 font-mono text-[13px] font-semibold uppercase tracking-[0.18em] text-[#0B0B0D] whitespace-nowrap hover:shadow-[0_0_34px_rgba(210,156,80,0.34)]">
Open the Folio
</Button>
</div>
</CardContent>
</Card>
)
}
```
## Quality rules
**Do:** keep one glowing primary per view; open every card and section with a folio dot; separate surfaces by tone; set all labels in tracked mono uppercase; keep body at 17px bone-on-ink.
**Don't:** draw borders or hairlines; flood the accent as a background; round any plate corner; let button or badge text wrap; put copy over the smoke.
{
"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": "fumage",
"name": "Fumage",
"slug": "fumage"
},
"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": [
"Near-black ink ground (#08080A) with tonal plates (#101013); no borders anywhere — separation by tone and void.",
"One tungsten accent (#D29C50) used like a lamp: the single primary action, focus, checked states, and glowing 7px status dots.",
"Every key plate carries the backlit veil: a clipped, blurred radial smoke bloom warmed by the accent from one corner.",
"Three voices: Cormorant Garamond display (-0.02em), Inter 17px body, IBM Plex Mono tracked-uppercase folios and buttons.",
"Sharp rectangles everywhere (radius 0); full-round (9999) only for dots, switch thumbs, and avatars.",
"Film grain at 5% over the page; broad quiet black shadows only when a plate lifts."
],
"visualProfile": {
"family": "editorial-atmospheric",
"material": "ink plate with backlit smoke veil and film grain",
"contour": "sharp",
"border": "none",
"underlay": true,
"grain": true,
"stickerBadges": false,
"motion": "deliberate 260ms cubic-bezier(0.22,0.61,0.36,1)",
"density": "low-medium with intentional voids",
"accents": ["#D29C50", "#8AA7B8"]
},
"tokens": {
"background": "#08080A",
"surface": "#101013",
"text": "#F5F2E9",
"muted": "#9C9A92",
"accent": "#D29C50",
"onAccent": "#0B0B0D",
"success": "#8FAF8A",
"warning": "#C3A45D",
"error": "#C96B63",
"info": "#8AA7B8",
"fontDisplay": "Cormorant Garamond",
"fontBody": "Inter",
"fontMono": "IBM Plex Mono",
"radius": "0px",
"radiusFull": "9999px",
"shadow": "0 32px 90px rgba(0,0,0,0.5)",
"glow": "0 0 34px rgba(210,156,80,0.34)"
},
"shots": [
{
"id": "press-desk",
"title": "The Press Desk",
"viewport": "1440x900",
"primitives": ["card", "table", "badge", "button", "tabs", "dropdown-menu"],
"composition": "Dashboard for a print quarterly the night before press. Serif page title over a four-plate stat band (each with a backlit veil and a meter thread), then the proof ledger table with mono folio column, serif title cells, and glowing status badges. One glowing primary button top right.",
"mustShow": [
"backlit veil glowing from one corner of the stat plates",
"borderless ledger rows alternating by a 2% ink breath",
"exactly one glowing accent primary button",
"mono uppercase folio labels with 7px glow dots"
],
"avoid": [
"visible borders or hairlines",
"rounded corners on plates or buttons",
"accent used as a background fill",
"more than one glowing primary"
],
"scene": {
"headline": "The press desk, Thursday night",
"description": "Vesper Quarterly's production dashboard 18 days before the Nightwork issue ships.",
"stats": [
{"label": "Plates Approved", "value": "12 / 16", "delta": "+3 this week"},
{"label": "Subscriptions", "value": "986", "delta": "+41 since the preview"},
{"label": "Copies Unreserved", "value": "214", "delta": "of 1,200 printed"},
{"label": "Open Corrections", "value": "7", "delta": "2 blocking"}
],
"rows": [
{"folio": "PL-081", "plate": "Steam over the composing bed", "contributor": "M. Osei", "status": "Approved"},
{"folio": "PL-082", "plate": "The lamp in the fog chamber", "contributor": "I. Vandermeer", "status": "Second Pass"},
{"folio": "PL-083", "plate": "Ash as an archive, opening spread", "contributor": "T. Ferreira", "status": "In Review"},
{"folio": "PL-084", "plate": "Night ferry, long exposure", "contributor": "R. Aalto", "status": "Rejected"}
]
}
},
{
"id": "plate-review",
"title": "Plate Review",
"viewport": "1024x768",
"primitives": ["card", "input", "select", "textarea", "slider", "switch", "checkbox", "button", "separator"],
"composition": "An editorial control form on a single veil plate: plate title input and issue select side by side, caption textarea full width, then print options (checkboxes, a veil switch, a varnish slider) beside one glowing Commit button and a ghost Hold.",
"mustShow": [
"input wells darker than the plate with an inset ink baseline",
"focus state warming the baseline with the accent",
"custom gradient chevron on the select — no browser default",
"checked switch thumb glowing with the accent"
],
"avoid": [
"outlined or bordered inputs",
"browser default form controls",
"labels in the body font — labels are tracked mono uppercase",
"wrapping button text"
],
"scene": {
"headline": "Plate PL-082 — second pass",
"description": "The proof desk pulls the veil back toward the gutter before recommitting the plate.",
"fields": [
{"label": "Plate title", "value": "The lamp in the fog chamber", "type": "input"},
{"label": "Assign to issue", "value": "No. 08 — Nightwork", "type": "select"},
{"label": "Caption note", "value": "Push the bloom toward the gutter; keep the caption clear of the smoke.", "type": "textarea"},
{"label": "Varnish coverage", "value": "48%", "type": "slider"},
{"label": "Backlit veil on spread", "value": "on", "type": "switch"}
]
}
},
{
"id": "bindery-wire",
"title": "The Bindery Wire",
"viewport": "390x844",
"primitives": ["card", "badge", "button", "tabs", "tooltip", "dialog"],
"composition": "Mobile single-column feed: folio tabs across the top, then annotation cards each with a glow-dot folio, serif title, muted body, and a status badge. One glowing primary at the bottom of the first card. A confirm dialog plate floats on the broad black shadow.",
"mustShow": [
"single column with no horizontal overflow at 390px",
"activity dots glowing in semantic tones",
"serif card titles at the 27px scale step",
"dialog as a sharp veil plate on the broad black shadow"
],
"avoid": [
"clipped or truncated headlines",
"boxed or pill-shaped nav",
"semantic colours flooding card backgrounds",
"scroll cues"
],
"scene": {
"headline": "Bindery wire",
"description": "Overnight activity on the Nightwork issue, read from the bindery floor.",
"rows": [
{"time": "21:40", "event": "PL-081 approved — cleared varnish at 62%", "by": "H. Roux", "tone": "success"},
{"time": "20:15", "event": "Second pass on PL-082 — bloom crosses the caption", "by": "Proof desk", "tone": "warning"},
{"time": "18:02", "event": "41 new subscribers after the preview", "by": "Subscriptions", "tone": "accent"},
{"time": "16:47", "event": "PL-084 rejected — shadow detail collapsed", "by": "Scan room", "tone": "error"}
]
}
}
],
"componentRecipes": [
{"primitive": "button", "intent": "Primary is the lamp: accent fill, on-accent text, mono uppercase 13px/.18em, 52px tall, radius 0, nowrap; hover adds the 34% accent glow and a 1px lift. Quiet/ghost/destructive share the exact shape and recede into the plate."},
{"primitive": "card", "intent": "Borderless ink plate with the backlit veil: a clipped ::before holding an accent-core radial over an ink-smoke radial, blurred 22px. Opens with a folio dot, then serif title, then muted body."},
{"primitive": "input", "intent": "A well darker than the plate, no border, inset 1px ink baseline; focus swaps the baseline to 2px accent with a low outer glow. 17px Inter text, mono uppercase label above."},
{"primitive": "textarea", "intent": "Same well as input, min-height 130px, 1.6 leading; resize vertical only."},
{"primitive": "select", "intent": "Input well with a custom chevron drawn from two muted gradient strokes; options never show browser chrome. Mono label, 17px value."},
{"primitive": "dialog", "intent": "A veil plate floating on the broad black shadow (0 32px 90px); backdrop dims to 70% ground without blur. Serif title, one glowing primary, ghost cancel."},
{"primitive": "sheet", "intent": "Slides from the right as a full-height ink plate with the veil at its top corner; 260ms deliberate ease; content keeps the folio-then-title order."},
{"primitive": "tabs", "intent": "Bare mono uppercase labels, no container; the active tab warms to accent and a 2px glowing thread sweeps in beneath it."},
{"primitive": "badge", "intent": "Sharp mono uppercase chip with a leading 6px currentColor glow dot; fill is the semantic tone mixed into the plate at 14%, text the tone itself; never wraps."},
{"primitive": "separator", "intent": "Not a line — a breath: 8px of extra void, or a centered quiet folio dot for section pauses. When a literal separator is required, use a 1px gradient that dissolves to transparent at both ends."},
{"primitive": "checkbox", "intent": "22px sharp well with an inset ink ring; checked fills with accent, glows, and draws the tick in on-accent ink."},
{"primitive": "switch", "intent": "Full-round track as a well; checked track mixes accent at 30% into the plate and the thumb becomes the glowing lamp."},
{"primitive": "slider", "intent": "A 2px thread of lamplight: filled range in accent with glow, rest in 18% ink; full-round 18px accent thumb."},
{"primitive": "tooltip", "intent": "Small raised plate, mono 13px, radius 0, no arrow; fades in settled over 260ms."},
{"primitive": "dropdown-menu", "intent": "A raised plate on the broad shadow; items in 15px Inter with mono shortcuts; hover warms the row with accent at 7% — no borders between items."},
{"primitive": "table", "intent": "The proof ledger: borderless, mono uppercase header, odd rows carry a 2% ink breath, hover warms with accent at 7%; key title cells switch to the 21px serif."}
],
"qualityRules": {
"do": [
"Keep exactly one glowing primary action per view.",
"Open every card and section with the folio: tracked mono uppercase and a glowing 7px dot.",
"Separate surfaces by tone and void; mix semantic colours into the plate for fills.",
"Hold the strict type scale: 13/15/17/21/27/34/43 and nothing else.",
"Keep the veil behind headlines and empty ground — copy always sits on ink."
],
"dont": [
"Never draw borders, hairlines, or outlined cards.",
"Never round a plate, button, or input corner.",
"Never flood the accent as a background or use it on more than one primary.",
"Never let button, badge, or tab text wrap.",
"Never place text over the smoke bloom or busy artwork."
]
}
}