Typography
headline-lgFraunces · 31px · 700
The quick brown fox jumps
headline-mdFraunces · 26px · 600
The quick brown fox jumps
body-mdSource Serif 4 · 18px · 400
The quick brown fox jumps
label-mdArchivo · 12px · 600
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.
Organize the interface as a reading current: a masthead above, and the whole story strung onto a single luminous filament that runs the spine of the page. Sections are nodes on the wire — no marginal gutter, no facing columns. The prose rests on a warm vellum slip that is the brightest thing on screen; notes tie to the line from the margin and stay quieter than the body.
Light carries the hierarchy: the lit (gold) wire behind your place, the ember node at your place, the cold (slate) wire ahead. Fraunces display sits over a Source Serif 4 reading body with Archivo folio labels. Emphasis comes from glow and position, not from many weights or many colours; exactly one ember marks your place and the one primary action.
Prose is spacious at an intimate measure (~42ch); utility regions and the marginalia can be moderately dense while staying visually lighter than the reading slip. Keep generous resting dark space between lit nodes.
The thread — one luminous filament with three node states (lit gold / here ember / ahead cold), a wire whose gradient fades from gold to border at your place, a reading meter standing in for a stat row, a vellum reading slip with a rubricated ember drop-cap, and three accents used like a scribe's marks.
A single reading current rather than facing columns: the story is threaded onto one filament that runs the spine of the page, with sections as nodes. The dashboard turns the filament horizontal into a spine that shows your place across the issue. The masthead breathes above; the reading rail breathes as part of the page, never boxed into a pill.
Desktop shows the full thread and the vellum slip with its marginalia beside it; tablet keeps the slip with a narrower margin; mobile (~390px) becomes a single reading column with the hero headline shrinking via clamp() and the reading rail collapsing to an inline row.
Generous outer space and paragraph spacing, padding above every title, intimate column measure, and dark resting space between lit nodes so the wire reads clearly.
rubricator
Ink-and-gilt manuscript illumination: a confident brush-and-reed-pen ink contour over a warm vellum ground, neutral grey wash for volume, hand-laid gilt-gold flecks and one or two rubricated red marks, in lamplit chiaroscuro — here applied to a single incandescent reading-lamp filament threading through the dark.
Full-bleed hero behind a left-weighted overlay, and feature/illustration slots inside sections; never used for the thumbnail (the embodiment is the thumbnail source).
# Filament ## Philosophy A reading system that strings a long story onto a single luminous wire. Set on a cool midnight ground, the prose rests on a warm vellum slip while the filament runs the spine of the page — gold behind you where you have read, ember at your place, cold ahead until you reach it and light it by reading. Following the story is the navigation. ### Values - reading is following one lit wire; progress is the page's structure and its only chrome - the prose is sovereign on a warm vellum slip; the apparatus stays in the margin - three accents used like a scribe's marks — gold to light, ember to mark, slate to cite - a cool reading night over a bright app window; light is the chrome ### Anti-Values - defaulting to white or washing the ground pale — the cool night is the point - a marginal gutter or facing columns that break the single line of reading - a second loud accent, or flooding the page with embers - card grids and bright SaaS chrome that compete with the body ### Visual Character - The thread: a single luminous filament runs the spine of the page; every section is a node strung along it — gold where you have read, ember at your place, a cold hollow ring ahead — and following the story is the navigation. - A cool midnight-indigo ground against which one warm wire and a vellum reading slip glow like a lit page held in the dark; structure comes from light, space, and a single hairline rule rather than borders. - High-contrast literary serif display (Fraunces) over a calm reading serif (Source Serif 4), with Archivo folio labels set in wide uppercase, and a colour-pop or highlighter mark lighting one headline word. - A rubricated ember drop-cap, superscript gloss markers, and a reading meter — a hairline track whose lit portion glows gold with an ember pip at your place — standing in for any stat row. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#11121f` | | bg_deep | `#0b0c16` | | surface | `#1a1c2e` | | vellum | `#f3ecdd` | | ink | `#181a12` | | text | `#ece9f3` | | muted | `#9a9ab5` | | border | `#2a2c44` | | accent | `#e8a93c` | | filament | `#e8a93c` | | filament_hot | `#ffce78` | | ember | `#e2492f` | | cold | `#6f86b8` | | on_accent | `#11121f` | | success | `#5e9a6a` | | warning | `#e8a93c` | | error | `#e2492f` | | info | `#6f86b8` | ### Typography - **Heading Font**: Fraunces - **Body Font**: Source Serif 4 - **Mono Font**: Archivo - **Base Size**: 18px - **Scale Ratio**: 1.2 - **Line Height**: 1.7 - **Letter Spacing**: -0.01em - **Heading Weight**: 600 - **Heading Transform**: none - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=Source+Serif+4:opsz,wght@8..60,400;8..60,500;8..60,600&family=Archivo:wght@400;500;600;700&display=swap ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64,96] ### Radii - **None**: 0 - **Md**: 16px - **Lg**: 24px - **Full**: 9999px ### Shadows - **Sm**: 0 1px 0 rgba(0,0,0,.25) - **Md**: 0 24px 60px rgba(0,0,0,.45) - **Lg**: 0 30px 70px rgba(0,0,0,.5) ### Surfaces - **Treatment**: cool midnight ground with a warm vellum reading slip and ink panels - **Card Style**: raised ink panels and a glowing vellum reading slip, no borders; structure from light, the hairline rule, and space - **Bg Pattern**: none ### Borders - **Default Width**: 1px - **Accent Width**: 3px - **Style**: solid - **Character**: hairline editorial rules and a 3px accent bar for notices and stats; never a frame border ### Motion - **Duration**: 200ms - **Easing**: cubic-bezier(0.2,0.8,0.2,1) - **Philosophy**: settled by default and fully legible with no JavaScript; a quiet rise-in reveal added on top, respecting prefers-reduced-motion; the wire and nodes glow softly, nothing bounces ## Rules ### Composition Organize the interface as a reading current: a masthead above, and the whole story strung onto a single luminous filament that runs the spine of the page. Sections are nodes on the wire — no marginal gutter, no facing columns. The prose rests on a warm vellum slip that is the brightest thing on screen; notes tie to the line from the margin and stay quieter than the body. ### Hierarchy Light carries the hierarchy: the lit (gold) wire behind your place, the ember node at your place, the cold (slate) wire ahead. Fraunces display sits over a Source Serif 4 reading body with Archivo folio labels. Emphasis comes from glow and position, not from many weights or many colours; exactly one ember marks your place and the one primary action. ### Density Prose is spacious at an intimate measure (~42ch); utility regions and the marginalia can be moderately dense while staying visually lighter than the reading slip. Keep generous resting dark space between lit nodes. ### Signature The thread — one luminous filament with three node states (lit gold / here ember / ahead cold), a wire whose gradient fades from gold to border at your place, a reading meter standing in for a stat row, a vellum reading slip with a rubricated ember drop-cap, and three accents used like a scribe's marks. ## Layout ### Grid A single reading current rather than facing columns: the story is threaded onto one filament that runs the spine of the page, with sections as nodes. The dashboard turns the filament horizontal into a spine that shows your place across the issue. The masthead breathes above; the reading rail breathes as part of the page, never boxed into a pill. ### Breakpoints Desktop shows the full thread and the vellum slip with its marginalia beside it; tablet keeps the slip with a narrower margin; mobile (~390px) becomes a single reading column with the hero headline shrinking via clamp() and the reading rail collapsing to an inline row. ### Whitespace Generous outer space and paragraph spacing, padding above every title, intimate column measure, and dark resting space between lit nodes so the wire reads clearly. ### Breakpoints Map - **Mobile**: 390px - **Tablet**: 760px - **Desktop**: 1080px - **Wide**: 1440px ## Guidance ### Do - Light only the part of the wire you have read; keep the page ahead cold until the reader reaches it - Let the prose be sovereign on the vellum slip; keep notes in the margin tied to the line - Use gold to light, ember to mark and act once, slate to cite — never a fourth accent - Carry structure with light, space, and the hairline rule before any border - Derive the hero from the filament mechanic — the wire itself, one CTA, the reading meter ### Don't - Don't default to white or wash the ground pale — the cool night is the point - Don't add a marginal gutter or facing columns that break the single line of reading - Don't add a second loud accent or flood the page with embers - Don't box the navigation into a pill bar or nest cards - Don't widen the body so far the reading measure loses its intimacy ### Accessibility High contrast throughout (parchment on midnight, ink on vellum); body text 18px; all form controls explicitly styled with a visible gold focus ring; motion respects prefers-reduced-motion and the page is fully legible with no JavaScript. ## Imagery Direction ### Pairs With rubricator ### Summary Ink-and-gilt manuscript illumination: a confident brush-and-reed-pen ink contour over a warm vellum ground, neutral grey wash for volume, hand-laid gilt-gold flecks and one or two rubricated red marks, in lamplit chiaroscuro — here applied to a single incandescent reading-lamp filament threading through the dark. ### Subjects - a single incandescent lamp filament threading through the dark - a reading lamp on a composing-room stone - a bound issue or manuscript - a quiet interior lit by one source - a city or a coastline treated the same way ### Usage Full-bleed hero behind a left-weighted overlay, and feature/illustration slots inside sections; never used for the thumbnail (the embodiment is the thumbnail source).
---
version: "alpha"
name: "Filament"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#11121f"
bg_deep: "#0b0c16"
surface: "#1a1c2e"
vellum: "#f3ecdd"
ink: "#181a12"
text: "#ece9f3"
muted: "#9a9ab5"
border: "#2a2c44"
accent: "#e8a93c"
filament: "#e8a93c"
filament_hot: "#ffce78"
ember: "#e2492f"
cold: "#6f86b8"
on_accent: "#11121f"
success: "#5e9a6a"
warning: "#e8a93c"
error: "#e2492f"
info: "#6f86b8"
typography:
headline-lg:
fontFamily: "Fraunces"
fontSize: "1.944rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.01em"
headline-md:
fontFamily: "Fraunces"
fontSize: "1.62rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.01em"
body-md:
fontFamily: "Source Serif 4"
fontSize: "18px"
fontWeight: 400
lineHeight: 1.7
letterSpacing: "-0.01em"
label-md:
fontFamily: "Archivo"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
md: "16px"
lg: "24px"
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-bg_deep:
backgroundColor: "{colors.bg_deep}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-vellum:
backgroundColor: "{colors.vellum}"
color-reference-ink:
backgroundColor: "{colors.ink}"
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-filament:
backgroundColor: "{colors.filament}"
color-reference-filament_hot:
backgroundColor: "{colors.filament_hot}"
color-reference-ember:
backgroundColor: "{colors.ember}"
color-reference-cold:
backgroundColor: "{colors.cold}"
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"
---
# Filament
## Overview
A reading system that strings a long story onto a single luminous wire. Set on a cool midnight ground, the prose rests on a warm vellum slip while the filament runs the spine of the page — gold behind you where you have read, ember at your place, cold ahead until you reach it and light it by reading. Following the story is the navigation.
### Values
- reading is following one lit wire; progress is the page's structure and its only chrome
- the prose is sovereign on a warm vellum slip; the apparatus stays in the margin
- three accents used like a scribe's marks — gold to light, ember to mark, slate to cite
- a cool reading night over a bright app window; light is the chrome
### Anti-Values
- defaulting to white or washing the ground pale — the cool night is the point
- a marginal gutter or facing columns that break the single line of reading
- a second loud accent, or flooding the page with embers
- card grids and bright SaaS chrome that compete with the body
### Visual Character
- The thread: a single luminous filament runs the spine of the page; every section is a node strung along it — gold where you have read, ember at your place, a cold hollow ring ahead — and following the story is the navigation.
- A cool midnight-indigo ground against which one warm wire and a vellum reading slip glow like a lit page held in the dark; structure comes from light, space, and a single hairline rule rather than borders.
- High-contrast literary serif display (Fraunces) over a calm reading serif (Source Serif 4), with Archivo folio labels set in wide uppercase, and a colour-pop or highlighter mark lighting one headline word.
- A rubricated ember drop-cap, superscript gloss markers, and a reading meter — a hairline track whose lit portion glows gold with an ember pip at your place — standing in for any stat row.
## 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 | `#11121f` |
| bg_deep | `#0b0c16` |
| surface | `#1a1c2e` |
| vellum | `#f3ecdd` |
| ink | `#181a12` |
| text | `#ece9f3` |
| muted | `#9a9ab5` |
| border | `#2a2c44` |
| accent | `#e8a93c` |
| filament | `#e8a93c` |
| filament_hot | `#ffce78` |
| ember | `#e2492f` |
| cold | `#6f86b8` |
| on_accent | `#11121f` |
| success | `#5e9a6a` |
| warning | `#e8a93c` |
| error | `#e2492f` |
| info | `#6f86b8` |
## Typography
- **Headline-Lg**: Fraunces, 1.944rem, weight 700, line-height 1.1.
- **Headline-Md**: Fraunces, 1.62rem, weight 600, line-height 1.15.
- **Body-Md**: Source Serif 4, 18px, weight 400, line-height 1.7.
- **Label-Md**: Archivo, 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 single reading current rather than facing columns: the story is threaded onto one filament that runs the spine of the page, with sections as nodes. The dashboard turns the filament horizontal into a spine that shows your place across the issue. The masthead breathes above; the reading rail breathes as part of the page, never boxed into a pill.
### Breakpoints
Desktop shows the full thread and the vellum slip with its marginalia beside it; tablet keeps the slip with a narrower margin; mobile (~390px) becomes a single reading column with the hero headline shrinking via clamp() and the reading rail collapsing to an inline row.
### Whitespace
Generous outer space and paragraph spacing, padding above every title, intimate column measure, and dark resting space between lit nodes so the wire reads clearly.
### Breakpoints Map
- **Mobile**: 390px
- **Tablet**: 760px
- **Desktop**: 1080px
- **Wide**: 1440px
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 0 rgba(0,0,0,.25)
- **Md**: 0 24px 60px rgba(0,0,0,.45)
- **Lg**: 0 30px 70px rgba(0,0,0,.5)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: cool midnight ground with a warm vellum reading slip and ink panels
- **Card Style**: raised ink panels and a glowing vellum reading slip, no borders; structure from light, the hairline rule, and space
- **Bg Pattern**: none
### Borders
- **Default Width**: 1px
- **Accent Width**: 3px
- **Style**: solid
- **Character**: hairline editorial rules and a 3px accent bar for notices and stats; never a frame border
## Components
### Composition
Organize the interface as a reading current: a masthead above, and the whole story strung onto a single luminous filament that runs the spine of the page. Sections are nodes on the wire — no marginal gutter, no facing columns. The prose rests on a warm vellum slip that is the brightest thing on screen; notes tie to the line from the margin and stay quieter than the body.
### Hierarchy
Light carries the hierarchy: the lit (gold) wire behind your place, the ember node at your place, the cold (slate) wire ahead. Fraunces display sits over a Source Serif 4 reading body with Archivo folio labels. Emphasis comes from glow and position, not from many weights or many colours; exactly one ember marks your place and the one primary action.
### Density
Prose is spacious at an intimate measure (~42ch); utility regions and the marginalia can be moderately dense while staying visually lighter than the reading slip. Keep generous resting dark space between lit nodes.
### Signature
The thread — one luminous filament with three node states (lit gold / here ember / ahead cold), a wire whose gradient fades from gold to border at your place, a reading meter standing in for a stat row, a vellum reading slip with a rubricated ember drop-cap, and three accents used like a scribe's marks.
## 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-019efd7d-6f97-7d12-af94-59afbc7b5d11/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 Light only the part of the wire you have read; keep the page ahead cold until the reader reaches it
- Do Let the prose be sovereign on the vellum slip; keep notes in the margin tied to the line
- Do Use gold to light, ember to mark and act once, slate to cite — never a fourth accent
- Do Carry structure with light, space, and the hairline rule before any border
- Do Derive the hero from the filament mechanic — the wire itself, one CTA, the reading meter
- Don't Don't default to white or wash the ground pale — the cool night is the point
- Don't Don't add a marginal gutter or facing columns that break the single line of reading
- Don't Don't add a second loud accent or flood the page with embers
- Don't Don't box the navigation into a pill bar or nest cards
- Don't Don't widen the body so far the reading measure loses its intimacy
### Accessibility
High contrast throughout (parchment on midnight, ink on vellum); body text 18px; all form controls explicitly styled with a visible gold focus ring; motion respects prefers-reduced-motion and the page is fully legible with no JavaScript.
## Imagery Direction
### Pairs With
rubricator
### Summary
Ink-and-gilt manuscript illumination: a confident brush-and-reed-pen ink contour over a warm vellum ground, neutral grey wash for volume, hand-laid gilt-gold flecks and one or two rubricated red marks, in lamplit chiaroscuro — here applied to a single incandescent reading-lamp filament threading through the dark.
### Subjects
- a single incandescent lamp filament threading through the dark
- a reading lamp on a composing-room stone
- a bound issue or manuscript
- a quiet interior lit by one source
- a city or a coastline treated the same way
### Usage
Full-bleed hero behind a left-weighted overlay, and feature/illustration slots inside sections; never used for the thumbnail (the embodiment is the thumbnail source).
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "filament",
"type": "registry:theme",
"title": "Filament shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#11121f",
"foreground": "#ece9f3",
"card": "#1a1c2e",
"card-foreground": "#ece9f3",
"popover": "#1a1c2e",
"popover-foreground": "#ece9f3",
"primary": "#ece9f3",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#9a9ab5",
"muted-foreground": "#ece9f3",
"accent": "#e8a93c",
"accent-foreground": "#ffffff",
"destructive": "#e2492f",
"border": "#2a2c44",
"input": "#2a2c44",
"ring": "#e8a93c",
"chart-1": "#ece9f3",
"chart-2": "#f4f4f5",
"chart-3": "#e8a93c",
"chart-4": "#5e9a6a",
"chart-5": "#e8a93c",
"sidebar": "#1a1c2e",
"sidebar-foreground": "#ece9f3",
"sidebar-primary": "#ece9f3",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#6f86b8",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#2a2c44",
"sidebar-ring": "#e8a93c",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#ece9f3",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#e8a93c",
"accent-foreground": "#ffffff",
"destructive": "#e2492f",
"border": "#303642",
"input": "#303642",
"ring": "#e8a93c",
"chart-1": "#ece9f3",
"chart-2": "#f4f4f5",
"chart-3": "#e8a93c",
"chart-4": "#5e9a6a",
"chart-5": "#e8a93c",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#ece9f3",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#e8a93c",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#e8a93c",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019efd7d-6f97-7d12-af94-59afbc7b5d11",
"slug": "filament",
"componentManifest": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
"nativeTokenNames": {
"colors": [
"accent",
"bg",
"bg_deep",
"border",
"cold",
"ember",
"error",
"filament",
"filament_hot",
"info",
"ink",
"muted",
"on_accent",
"success",
"surface",
"text",
"vellum",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
],
"spacing": [
"base",
"scale"
],
"radii": [
"full",
"lg",
"md",
"none"
],
"shadows": [
"lg",
"md",
"sm"
],
"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
produced by opus-4.8 · sourced by opus-4.8 · images by gpt-image-2
Keep Filamentand 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: #11121f;
--foreground: #ece9f3;
--card: #1a1c2e;
--card-foreground: #ece9f3;
--popover: #1a1c2e;
--popover-foreground: #ece9f3;
--primary: #ece9f3;
--primary-foreground: #111111;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #9a9ab5;
--muted-foreground: #ece9f3;
--accent: #e8a93c;
--accent-foreground: #ffffff;
--destructive: #e2492f;
--border: #2a2c44;
--input: #2a2c44;
--ring: #e8a93c;
--chart-1: #ece9f3;
--chart-2: #f4f4f5;
--chart-3: #e8a93c;
--chart-4: #5e9a6a;
--chart-5: #e8a93c;
--sidebar: #1a1c2e;
--sidebar-foreground: #ece9f3;
--sidebar-primary: #ece9f3;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #6f86b8;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #2a2c44;
--sidebar-ring: #e8a93c;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #ece9f3;
--primary-foreground: #111111;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #e8a93c;
--accent-foreground: #ffffff;
--destructive: #e2492f;
--border: #303642;
--input: #303642;
--ring: #e8a93c;
--chart-1: #ece9f3;
--chart-2: #f4f4f5;
--chart-3: #e8a93c;
--chart-4: #5e9a6a;
--chart-5: #e8a93c;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #ece9f3;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #e8a93c;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #e8a93c;
--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 FilamentShadcnKit() {
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">Filament</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": "filament",
"type": "registry:theme",
"cssVars": {
"theme": {
"font-sans": "Archivo, system-ui, sans-serif",
"font-serif": "\"Source Serif 4\", Georgia, serif",
"font-display": "Fraunces, Georgia, serif",
"radius": "16px"
},
"light": {
"background": "#11121f",
"foreground": "#ece9f3",
"card": "#1a1c2e",
"card-foreground": "#ece9f3",
"popover": "#1a1c2e",
"popover-foreground": "#ece9f3",
"primary": "#e8a93c",
"primary-foreground": "#11121f",
"secondary": "#1a1c2e",
"secondary-foreground": "#ece9f3",
"muted": "#1a1c2e",
"muted-foreground": "#9a9ab5",
"accent": "#e2492f",
"accent-foreground": "#fdf2ee",
"destructive": "#e2492f",
"destructive-foreground": "#fdf2ee",
"border": "#2a2c44",
"input": "#2a2c44",
"ring": "#e8a93c",
"chart-1": "#e8a93c",
"chart-2": "#e2492f",
"chart-3": "#6f86b8",
"chart-4": "#ffce78",
"chart-5": "#5e9a6a",
"radius": "16px"
},
"dark": {
"background": "#0b0c16",
"foreground": "#ece9f3",
"card": "#11121f",
"card-foreground": "#ece9f3",
"popover": "#11121f",
"popover-foreground": "#ece9f3",
"primary": "#ffce78",
"primary-foreground": "#11121f",
"secondary": "#1a1c2e",
"secondary-foreground": "#ece9f3",
"muted": "#1a1c2e",
"muted-foreground": "#9a9ab5",
"accent": "#e2492f",
"accent-foreground": "#fdf2ee",
"destructive": "#e2492f",
"destructive-foreground": "#fdf2ee",
"border": "#2a2c44",
"input": "#2a2c44",
"ring": "#e8a93c",
"chart-1": "#e8a93c",
"chart-2": "#e2492f",
"chart-3": "#6f86b8",
"chart-4": "#ffce78",
"chart-5": "#5e9a6a",
"radius": "16px"
}
}
}
# Filament shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019efd7d-6f97-7d12-af94-59afbc7b5d11`
Slug: `filament`
## Intent
A reading system that strings a long story onto a single luminous wire. Set on a cool midnight ground, the prose rests on a warm vellum slip while the filament runs the spine of the page — gold behind you where you have read, ember at your place, cold ahead until you reach it and light it by reading. Following the story is the navigation.
## 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": "#11121f",
"bg_deep": "#0b0c16",
"surface": "#1a1c2e",
"vellum": "#f3ecdd",
"ink": "#181a12",
"text": "#ece9f3",
"muted": "#9a9ab5",
"border": "#2a2c44",
"accent": "#e8a93c",
"filament": "#e8a93c",
"filament_hot": "#ffce78",
"ember": "#e2492f",
"cold": "#6f86b8",
"on_accent": "#11121f",
"success": "#5e9a6a",
"warning": "#e8a93c",
"error": "#e2492f",
"info": "#6f86b8"
}
Typography:
{
"heading_font": "Fraunces",
"body_font": "Source Serif 4",
"mono_font": "Archivo",
"base_size": "18px",
"scale_ratio": 1.2,
"line_height": 1.7,
"letter_spacing": "-0.01em",
"heading_weight": 600,
"heading_transform": "none",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=Source+Serif+4:opsz,wght@8..60,400;8..60,500;8..60,600&family=Archivo:wght@400;500;600;700&display=swap"
}
## Visual character to preserve
- The thread: a single luminous filament runs the spine of the page; every section is a node strung along it — gold where you have read, ember at your place, a cold hollow ring ahead — and following the story is the navigation.
- A cool midnight-indigo ground against which one warm wire and a vellum reading slip glow like a lit page held in the dark; structure comes from light, space, and a single hairline rule rather than borders.
- High-contrast literary serif display (Fraunces) over a calm reading serif (Source Serif 4), with Archivo folio labels set in wide uppercase, and a colour-pop or highlighter mark lighting one headline word.
- A rubricated ember drop-cap, superscript gloss markers, and a reading meter — a hairline track whose lit portion glows gold with an ember pip at your place — standing in for any stat row.
## ShadSync visual profile
{
"family": "editorial",
"material": "flat",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "still",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
}
## Signature component recipes
### Button
Use `Button` for primary, secondary, outline, and ghost actions. Primary actions must expose the language's strongest contrast pair, while secondary and ghost actions should preserve the surface treatment instead of falling back to default neutral SaaS styling.
### Card
Use `Card`, `CardHeader`, `CardContent`, `CardFooter`, and `CardAction` as the main composition frame. Cards should demonstrate the language's surface, border, hierarchy, and density rules rather than appearing as generic rounded rectangles.
### Input and Textarea
Use `Input` and `Textarea` with visible focus rings, field labels, validation states, and the language's rhythm. Forms should show real product content, not placeholder-only controls.
### Select, Tabs, and Table
Use `Select`, `Tabs`, and `Table` to prove navigation, filtering, and dense data states. The table should show row rhythm, separators, hover/focus states, and an empty or status state when the language calls for it.
### Dialog and Sheet
Use `Dialog` for centered decisions and `Sheet` for contextual editing. Both should inherit the language's spacing, border, overlay, and motion rules.
## Preview shots
- `application-shell`: dashboard or workspace shell with navigation, cards, forms, and state badges.
- `detail-editor`: focused editing flow using input, textarea, select, switch/checkbox, dialog or sheet, and action buttons.
- `data-operations`: table-heavy operational view with tabs, dropdown menu affordances, badges, and destructive/empty states.
- Each preview shot must include a renderable `scene` payload with concrete headline, description, actions, and rows/fields/stats for the UI preview.
## Implementation contract
- Start from local `ui/src/components/ui` shadcn-style primitives; do not create a second component system.
- Apply `/katagami/shadcn/filament/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: Light only the part of the wire you have read; keep the page ahead cold until the reader reaches it; Let the prose be sovereign on the vellum slip; keep notes in the margin tied to the line; Use gold to light, ember to mark and act once, slate to cite — never a fourth accent; Carry structure with light, space, and the hairline rule before any border; Derive the hero from the filament mechanic — the wire itself, one CTA, the reading meter
- Do not: Don't default to white or wash the ground pale — the cool night is the point; Don't add a marginal gutter or facing columns that break the single line of reading; Don't add a second loud accent or flood the page with embers; Don't box the navigation into a pill bar or nest cards; Don't widen the body so far the reading measure loses its intimacy
## 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 FilamentShadcnKit() {
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">Filament</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 single reading current rather than facing columns: the story is threaded onto one filament that runs the spine of the page, with sections as nodes. The dashboard turns the filament horizontal into a spine that shows your place across the issue. The masthead breathes above; the reading rail breathes as part of the page, never boxed into a pill.",
"breakpoints": "Desktop shows the full thread and the vellum slip with its marginalia beside it; tablet keeps the slip with a narrower margin; mobile (~390px) becomes a single reading column with the hero headline shrinking via clamp() and the reading rail collapsing to an inline row.",
"whitespace": "Generous outer space and paragraph spacing, padding above every title, intimate column measure, and dark resting space between lit nodes so the wire reads clearly.",
"breakpoints_map": {
"mobile": "390px",
"tablet": "760px",
"desktop": "1080px",
"wide": "1440px"
}
}
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"generator": "katagami-ui-compatibility-projection",
"generatedBy": "katagami-ui-projection",
"requiresVisualProfile": true,
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"language": {
"id": "en-019efd7d-6f97-7d12-af94-59afbc7b5d11",
"name": "Filament",
"slug": "filament"
},
"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": [
"The thread: a single luminous filament runs the spine of the page; every section is a node strung along it — gold where you have read, ember at your place, a cold hollow ring ahead — and following the story is the navigation.",
"A cool midnight-indigo ground against which one warm wire and a vellum reading slip glow like a lit page held in the dark; structure comes from light, space, and a single hairline rule rather than borders.",
"High-contrast literary serif display (Fraunces) over a calm reading serif (Source Serif 4), with Archivo folio labels set in wide uppercase, and a colour-pop or highlighter mark lighting one headline word.",
"A rubricated ember drop-cap, superscript gloss markers, and a reading meter — a hairline track whose lit portion glows gold with an ember pip at your place — standing in for any stat row."
],
"visualProfile": {
"family": "editorial",
"material": "flat",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "still",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
},
"shots": [
{
"id": "application-shell",
"title": "Application shell",
"viewport": "desktop",
"primitives": [
"button",
"card",
"input",
"select",
"tabs",
"badge",
"separator",
"table"
],
"composition": "A real product workspace with navigation, summary cards, filtering controls, and one dense content region.",
"mustShow": [
"primary and secondary actions",
"card hierarchy",
"filterable state",
"table or list density"
],
"avoid": [
"component inventory walls",
"placeholder-only content",
"generic rounded SaaS chrome"
],
"scene": {
"eyebrow": "workspace spread",
"headline": "Filament 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": [
"Light only the part of the wire you have read; keep the page ahead cold until the reader reaches it",
"Let the prose be sovereign on the vellum slip; keep notes in the margin tied to the line",
"Use gold to light, ember to mark and act once, slate to cite — never a fourth accent",
"Carry structure with light, space, and the hairline rule before any border",
"Derive the hero from the filament mechanic — the wire itself, one CTA, the reading meter"
],
"dont": [
"Don't default to white or wash the ground pale — the cool night is the point",
"Don't add a marginal gutter or facing columns that break the single line of reading",
"Don't add a second loud accent or flood the page with embers",
"Don't box the navigation into a pill bar or nest cards",
"Don't widen the body so far the reading measure loses its intimacy"
]
}
}