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.
Medium editorial density: generous gallery-wall whitespace and large typographic moments balanced by compact mono captions, small metadata, and tightly ruled annotation panels.
Desktop uses a 12-column grid at max-width 1360px with 24px gutters, a folio rail, and asymmetric 5/4/3 spans aligned to a visible baseline rhythm.
Whitespace reads like gallery wall space — warm studio paper sharply bounded by ink rules, with warm neutral inset panels only where material notes or archive context require them.
Medium-density editorial workspace: large serif display, compact mono metadata, ruled panels that hold dense publication-planning information without feeling like a SaaS dashboard.
From ~390px mobile to 2560px+ ultra-wide. At 1080px collapse the asymmetric grid to a single column and reduce headline scale; on mobile stack all panels, hide non-essential nav and table columns, make controls full width, and never overflow horizontally; on ultra-wide cap and centre the contained content while only the full-bleed hero spans 100vw.
reglure
Black pen-and-ink plates on warm studio paper, crossed by printed register lines, with one small electric register mark as the only colour. Imagery functions as annotation, frame, or compositional tension — never decorative illustration.
One full-bleed landing hero in the Réglure technique; elsewhere keep imagery to margins, captions, contact sheets, and annotation overlays. End every prompt with NO text, NO letters, NO logos.
# Quoin
## Philosophy
Quoin is the editorial ink atelier — a design language for serious visual-culture tools (magazine issue-planning rooms, print archives, art-direction boards, works-on-paper catalogs). It treats the interface like a locked-up forme on a studio table: warm paper, mostly black printing ink, measured columns, printed register rules, and generous editorial whitespace — then one electric signal at a time to call the lead. The ink rule is the layout material; colour is a register mark, never a fill. A quoin is the locking wedge that holds the forme square in the chase: the page is set, ruled, and locked before it goes to press.
### Values
- {"name":"Ink-first authority","description":"Black is the primary drawing instrument — type, rules, marks, and counts feel printed or drawn, not filled with decorative colour."}
- {"name":"The rule as structure","description":"Double-rule headers and faint baseline register lines build hierarchy before any fill or surface; the line is the first layout tool."}
- {"name":"Electric restraint","description":"One signal per view — vermilion calls the lead, cobalt carries focus and action, chartreuse marks a selection — each under about five percent of the surface."}
- {"name":"Works-on-paper materiality","description":"The ground is warm studio paper with a faint tooth, not glass or white; surfaces suggest a sheet on the desk."}
- {"name":"Gesture under control","description":"A rough hand-drawn stroke breaks a panel edge to keep the human hand visible under the grid, never reducing readability."}
- {"name":"Fine-art seriousness","description":"Editorial, disciplined, alive with the tension between hand-drawn gesture and publication-grid precision — never playful, retro, or decorative."}
### Anti-Values
- {"name":"Rainbow creativity","description":"Never use multiple saturated accents at once or turn the screen into an art-school palette sampler."}
- {"name":"Template minimalism","description":"Never rely on pure-white borderless cards with soft shadows; identity comes from ruled structure, ink marks, and editorial hierarchy."}
- {"name":"Crypto gloss","description":"No gradient buttons, glassy panels, neon haze, or inflated rounded cards."}
- {"name":"Decorative illustration","description":"Linework must function as rule, annotation, frame, or compositional tension — never cute ornament."}
## Tokens
### Colors
| Name | Value |
|------|-------|
| bg | `#F4F1EA` |
| surface | `#FBFAF6` |
| surface_2 | `#ECE7DC` |
| text | `#14110C` |
| muted | `#6B6357` |
| border | `#14110C` |
| accent | `#F23B2E` |
| on_accent | `#FBFAF6` |
| accent_2 | `#0057FF` |
| accent_3 | `#C8FF00` |
| success | `#177245` |
| warning | `#B36A00` |
| error | `#B00020` |
| info | `#0057FF` |
### Typography
- **Base Size**: 17px
- **Body Font**: IBM Plex Sans
- **Heading Font**: Libre Baskerville
- **Mono Font**: IBM Plex Mono
- **Heading Weight**: 700
- **Heading Transform**: none
- **Letter Spacing**: -0.02em
- **Line Height**: 1.5
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&family=Libre+Baskerville:ital,wght@0,400;0,700;1,400&display=swap
### Radii
- **None**: 0px
- **Sm**: 0px
- **Md**: 0px
- **Lg**: 0px
- **Pill**: 9999px
### Shadows
- **Sm**: 0 1px 0 rgba(20,17,12,0.20)
- **Md**: 7px 7px 0 rgba(20,17,12,0.10)
### Spacing
- **Base**: 8px
- **Scale**: ["4px","8px","12px","16px","24px","32px","48px","64px","96px"]
### Surfaces
- **Treatment**: paper
- **Card Style**: Warm-paper panels with a 1px ink rule and a double-rule header (border-top 3px double + border-bottom 1px); a lead panel adds a 2px vermilion left edge and a small diamond pin. Offset block shadow, never a soft glow.
- **Bg Pattern**: grain
- **Paper Texture**: Layered radial-gradient noise at very low opacity over warm studio paper (#F4F1EA); a fresher sheet (#FBFAF6) lifts panels and a warm neutral (#ECE7DC) insets material notes.
### Borders
- **Default Width**: 1px
- **Accent Width**: 2px
- **Style**: solid
- **Character**: The ink rule is the layout material: thin frames for panels, 3px double-rules for section headers, faint baseline register lines crossing surfaces, and single hairlines between ledger rows.
### Motion
- **Duration**: 160ms
- **Easing**: cubic-bezier(0.2, 0, 0, 1)
- **Philosophy**: Snappy, editorial, almost mechanical — a state change feels like a mark placed on paper. The settled state is the default and renders with no JavaScript; motion is added on top and respects prefers-reduced-motion.
## Rules
### Composition
- Build screens as editorial spreads: a large title and deck zone, a folio rail, a main asymmetric grid, and caption-like metadata blocks.
- Use black horizontal and vertical rules to divide space before any background fill; the line is the primary layout material.
- Keep accent colour to one chosen signal per screen, covering under five percent of the visible area.
- Circle counts and folios in ink as margin marks rather than boxing them as metric cards.
- Let an occasional rough rotated gesture stroke cross a panel edge to keep the human hand visible without breaking alignment.
### Hierarchy
- Headlines use Libre Baskerville at dramatic scale with tight tracking and compact line-height for an art-book editorial voice.
- Navigation, status labels, folios, and counts use IBM Plex Mono uppercase in small sizes with rule separators.
- Body copy uses IBM Plex Sans aligned to the grid; avoid centred marketing copy.
- Important actions are ink-black with a tiny vermilion accent pin, not a large coloured fill.
- The active or lead item receives a 2px vermilion left edge plus a small diamond pin at its grid origin.
### Density
Medium editorial density: generous gallery-wall whitespace and large typographic moments balanced by compact mono captions, small metadata, and tightly ruled annotation panels.
### Signature
- Double-rule section headers (border-top 3px double + border-bottom 1px) act as magazine-section dividers, never generic card titles.
- Faint baseline register lines cross article panels so structure reads as printed paper.
- A lead item carries a 2px vermilion left edge and an absolute-positioned diamond pin — colour as signal, not fill.
- Gesture underlines are rough rotated inline-SVG strokes behind a chosen heading word.
- Edition counters and folios are circled in ink (9999px), the lead circled in vermilion.
## Layout
### Grid
Desktop uses a 12-column grid at max-width 1360px with 24px gutters, a folio rail, and asymmetric 5/4/3 spans aligned to a visible baseline rhythm.
### Whitespace
Whitespace reads like gallery wall space — warm studio paper sharply bounded by ink rules, with warm neutral inset panels only where material notes or archive context require them.
### Density
Medium-density editorial workspace: large serif display, compact mono metadata, ruled panels that hold dense publication-planning information without feeling like a SaaS dashboard.
### Responsive
From ~390px mobile to 2560px+ ultra-wide. At 1080px collapse the asymmetric grid to a single column and reduce headline scale; on mobile stack all panels, hide non-essential nav and table columns, make controls full width, and never overflow horizontally; on ultra-wide cap and centre the contained content while only the full-bleed hero spans 100vw.
### Breakpoints
- **Desktop**: 1081px and up: 12 columns with folio rail
- **Tablet**: 561px-1080px: single-column stacked panels, rail collapsed into a top bar
- **Mobile**: 560px and below: single column, stacked full-width controls, hidden secondary columns
- **Ultrawide**: 2200px and up: content cap 1600px, only the hero spans 100vw
## Guidance
### Do
- Use warm studio paper (#F4F1EA) as the ground and introduce a fresher sheet or warm neutral only inside panels and material notes.
- Apply -0.02em letter spacing globally, including captions, buttons, metadata, and form controls.
- Use black ruled borders as the first hierarchy tool before adding colour, shadow, or filled surfaces.
- Choose one saturated accent per composition: vermilion for the lead, cobalt for focus and action, chartreuse for a selection.
- Make headings editorial and typographic; pair large serif display with compact mono folios and sans body copy.
- Style every input, select, checkbox, switch, slider, button, and table with the same ink-rule system and a custom focus.
- Use rough gesture lines sparingly to emphasise curatorial judgement or hand annotation.
- Keep border radius at 0px for panels and 9999px only for circled edition marks and small pills.
### Don't
- Do not give a card a single lone accent edge, or fill a large area with vermilion, cobalt, or chartreuse; accents stay small register marks.
- Do not use gradient text or buttons, pastel washes, glassmorphism, or crypto-style glows.
- Do not use generic rounded SaaS cards or random radius values such as 8px, 12px, 20px, or 32px.
- Do not centre every element or build a component catalog; create a real editorial workspace scene.
- Do not let sketch marks reduce readability or make controls look unfinished.
- Do not use default browser styles for selects, checkboxes, switches, sliders, or focus states.
- Do not mix multiple display fonts or use rejected LLM-default fonts like Poppins, Montserrat, DM Sans, or Space Grotesk.
### Accessibility
Keep text near-black on warm paper or fresher-sheet surfaces; never place small text on a saturated accent field. Use a visible 2px cobalt focus ring on every control, keep touch targets at least 44px, and provide text labels beside symbolic ink marks. The fully-rendered state is visible with no JavaScript and motion respects prefers-reduced-motion.
## Imagery Direction
### Pairs With
reglure
### Summary
Black pen-and-ink plates on warm studio paper, crossed by printed register lines, with one small electric register mark as the only colour. Imagery functions as annotation, frame, or compositional tension — never decorative illustration.
### Subjects
- letterpress chase and locked-up forme
- magazine layout sheet with measured columns
- compositor's setting rules and galley proofs
- contact sheets and works-on-paper plates
- studio desk and archive material
### Usage
One full-bleed landing hero in the Réglure technique; elsewhere keep imagery to margins, captions, contact sheets, and annotation overlays. End every prompt with NO text, NO letters, NO logos.
---
version: "alpha"
name: "Quoin"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#F4F1EA"
surface: "#FBFAF6"
surface_2: "#ECE7DC"
text: "#14110C"
muted: "#6B6357"
border: "#14110C"
accent: "#F23B2E"
on_accent: "#FBFAF6"
accent_2: "#0057FF"
accent_3: "#C8FF00"
success: "#177245"
warning: "#B36A00"
error: "#B00020"
info: "#0057FF"
typography:
headline-lg:
fontFamily: "Libre Baskerville"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Libre Baskerville"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "IBM Plex Sans"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.02em"
label-md:
fontFamily: "IBM Plex Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
sm: "0px"
md: "0px"
lg: "0px"
pill: "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-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-accent_2:
backgroundColor: "{colors.accent_2}"
color-reference-accent_3:
backgroundColor: "{colors.accent_3}"
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"
---
# Quoin
## Overview
Quoin is the editorial ink atelier — a design language for serious visual-culture tools (magazine issue-planning rooms, print archives, art-direction boards, works-on-paper catalogs). It treats the interface like a locked-up forme on a studio table: warm paper, mostly black printing ink, measured columns, printed register rules, and generous editorial whitespace — then one electric signal at a time to call the lead. The ink rule is the layout material; colour is a register mark, never a fill. A quoin is the locking wedge that holds the forme square in the chase: the page is set, ruled, and locked before it goes to press.
### Values
- {"name":"Ink-first authority","description":"Black is the primary drawing instrument — type, rules, marks, and counts feel printed or drawn, not filled with decorative colour."}
- {"name":"The rule as structure","description":"Double-rule headers and faint baseline register lines build hierarchy before any fill or surface; the line is the first layout tool."}
- {"name":"Electric restraint","description":"One signal per view — vermilion calls the lead, cobalt carries focus and action, chartreuse marks a selection — each under about five percent of the surface."}
- {"name":"Works-on-paper materiality","description":"The ground is warm studio paper with a faint tooth, not glass or white; surfaces suggest a sheet on the desk."}
- {"name":"Gesture under control","description":"A rough hand-drawn stroke breaks a panel edge to keep the human hand visible under the grid, never reducing readability."}
- {"name":"Fine-art seriousness","description":"Editorial, disciplined, alive with the tension between hand-drawn gesture and publication-grid precision — never playful, retro, or decorative."}
### Anti-Values
- {"name":"Rainbow creativity","description":"Never use multiple saturated accents at once or turn the screen into an art-school palette sampler."}
- {"name":"Template minimalism","description":"Never rely on pure-white borderless cards with soft shadows; identity comes from ruled structure, ink marks, and editorial hierarchy."}
- {"name":"Crypto gloss","description":"No gradient buttons, glassy panels, neon haze, or inflated rounded cards."}
- {"name":"Decorative illustration","description":"Linework must function as rule, annotation, frame, or compositional tension — never cute ornament."}
## 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 | `#F4F1EA` |
| surface | `#FBFAF6` |
| surface_2 | `#ECE7DC` |
| text | `#14110C` |
| muted | `#6B6357` |
| border | `#14110C` |
| accent | `#F23B2E` |
| on_accent | `#FBFAF6` |
| accent_2 | `#0057FF` |
| accent_3 | `#C8FF00` |
| success | `#177245` |
| warning | `#B36A00` |
| error | `#B00020` |
| info | `#0057FF` |
## Typography
- **Headline-Lg**: Libre Baskerville, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Libre Baskerville, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Sans, 17px, weight 400, line-height 1.5.
- **Label-Md**: IBM Plex 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
Desktop uses a 12-column grid at max-width 1360px with 24px gutters, a folio rail, and asymmetric 5/4/3 spans aligned to a visible baseline rhythm.
### Whitespace
Whitespace reads like gallery wall space — warm studio paper sharply bounded by ink rules, with warm neutral inset panels only where material notes or archive context require them.
### Density
Medium-density editorial workspace: large serif display, compact mono metadata, ruled panels that hold dense publication-planning information without feeling like a SaaS dashboard.
### Responsive
From ~390px mobile to 2560px+ ultra-wide. At 1080px collapse the asymmetric grid to a single column and reduce headline scale; on mobile stack all panels, hide non-essential nav and table columns, make controls full width, and never overflow horizontally; on ultra-wide cap and centre the contained content while only the full-bleed hero spans 100vw.
### Breakpoints
- **Desktop**: 1081px and up: 12 columns with folio rail
- **Tablet**: 561px-1080px: single-column stacked panels, rail collapsed into a top bar
- **Mobile**: 560px and below: single column, stacked full-width controls, hidden secondary columns
- **Ultrawide**: 2200px and up: content cap 1600px, only the hero spans 100vw
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 0 rgba(20,17,12,0.20)
- **Md**: 7px 7px 0 rgba(20,17,12,0.10)
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `0px`
- **Md**: `0px`
- **Lg**: `0px`
- **Pill**: `9999px`
### Surfaces
- **Treatment**: paper
- **Card Style**: Warm-paper panels with a 1px ink rule and a double-rule header (border-top 3px double + border-bottom 1px); a lead panel adds a 2px vermilion left edge and a small diamond pin. Offset block shadow, never a soft glow.
- **Bg Pattern**: grain
- **Paper Texture**: Layered radial-gradient noise at very low opacity over warm studio paper (#F4F1EA); a fresher sheet (#FBFAF6) lifts panels and a warm neutral (#ECE7DC) insets material notes.
### Borders
- **Default Width**: 1px
- **Accent Width**: 2px
- **Style**: solid
- **Character**: The ink rule is the layout material: thin frames for panels, 3px double-rules for section headers, faint baseline register lines crossing surfaces, and single hairlines between ledger rows.
## Components
### Composition
- Build screens as editorial spreads: a large title and deck zone, a folio rail, a main asymmetric grid, and caption-like metadata blocks.
- Use black horizontal and vertical rules to divide space before any background fill; the line is the primary layout material.
- Keep accent colour to one chosen signal per screen, covering under five percent of the visible area.
- Circle counts and folios in ink as margin marks rather than boxing them as metric cards.
- Let an occasional rough rotated gesture stroke cross a panel edge to keep the human hand visible without breaking alignment.
### Hierarchy
- Headlines use Libre Baskerville at dramatic scale with tight tracking and compact line-height for an art-book editorial voice.
- Navigation, status labels, folios, and counts use IBM Plex Mono uppercase in small sizes with rule separators.
- Body copy uses IBM Plex Sans aligned to the grid; avoid centred marketing copy.
- Important actions are ink-black with a tiny vermilion accent pin, not a large coloured fill.
- The active or lead item receives a 2px vermilion left edge plus a small diamond pin at its grid origin.
### Density
Medium editorial density: generous gallery-wall whitespace and large typographic moments balanced by compact mono captions, small metadata, and tightly ruled annotation panels.
### Signature
- Double-rule section headers (border-top 3px double + border-bottom 1px) act as magazine-section dividers, never generic card titles.
- Faint baseline register lines cross article panels so structure reads as printed paper.
- A lead item carries a 2px vermilion left edge and an absolute-positioned diamond pin — colour as signal, not fill.
- Gesture underlines are rough rotated inline-SVG strokes behind a chosen heading word.
- Edition counters and folios are circled in ink (9999px), the lead circled in vermilion.
## 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-019ef8bb-aef6-7e13-8bd3-1dc2cadae95e/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 Use warm studio paper (#F4F1EA) as the ground and introduce a fresher sheet or warm neutral only inside panels and material notes.
- Do Apply -0.02em letter spacing globally, including captions, buttons, metadata, and form controls.
- Do Use black ruled borders as the first hierarchy tool before adding colour, shadow, or filled surfaces.
- Do Choose one saturated accent per composition: vermilion for the lead, cobalt for focus and action, chartreuse for a selection.
- Do Make headings editorial and typographic; pair large serif display with compact mono folios and sans body copy.
- Do Style every input, select, checkbox, switch, slider, button, and table with the same ink-rule system and a custom focus.
- Do Use rough gesture lines sparingly to emphasise curatorial judgement or hand annotation.
- Do Keep border radius at 0px for panels and 9999px only for circled edition marks and small pills.
- Don't Do not give a card a single lone accent edge, or fill a large area with vermilion, cobalt, or chartreuse; accents stay small register marks.
- Don't Do not use gradient text or buttons, pastel washes, glassmorphism, or crypto-style glows.
- Don't Do not use generic rounded SaaS cards or random radius values such as 8px, 12px, 20px, or 32px.
- Don't Do not centre every element or build a component catalog; create a real editorial workspace scene.
- Don't Do not let sketch marks reduce readability or make controls look unfinished.
- Don't Do not use default browser styles for selects, checkboxes, switches, sliders, or focus states.
- Don't Do not mix multiple display fonts or use rejected LLM-default fonts like Poppins, Montserrat, DM Sans, or Space Grotesk.
### Accessibility
Keep text near-black on warm paper or fresher-sheet surfaces; never place small text on a saturated accent field. Use a visible 2px cobalt focus ring on every control, keep touch targets at least 44px, and provide text labels beside symbolic ink marks. The fully-rendered state is visible with no JavaScript and motion respects prefers-reduced-motion.
## Imagery Direction
### Pairs With
reglure
### Summary
Black pen-and-ink plates on warm studio paper, crossed by printed register lines, with one small electric register mark as the only colour. Imagery functions as annotation, frame, or compositional tension — never decorative illustration.
### Subjects
- letterpress chase and locked-up forme
- magazine layout sheet with measured columns
- compositor's setting rules and galley proofs
- contact sheets and works-on-paper plates
- studio desk and archive material
### Usage
One full-bleed landing hero in the Réglure technique; elsewhere keep imagery to margins, captions, contact sheets, and annotation overlays. End every prompt with NO text, NO letters, NO logos.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "quoin",
"type": "registry:theme",
"title": "Quoin shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F4F1EA",
"foreground": "#14110C",
"card": "#FBFAF6",
"card-foreground": "#14110C",
"popover": "#FBFAF6",
"popover-foreground": "#14110C",
"primary": "#14110C",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#6B6357",
"muted-foreground": "#14110C",
"accent": "#F23B2E",
"accent-foreground": "#ffffff",
"destructive": "#B00020",
"border": "#14110C",
"input": "#14110C",
"ring": "#F23B2E",
"chart-1": "#14110C",
"chart-2": "#f4f4f5",
"chart-3": "#F23B2E",
"chart-4": "#177245",
"chart-5": "#B36A00",
"sidebar": "#FBFAF6",
"sidebar-foreground": "#14110C",
"sidebar-primary": "#14110C",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#0057FF",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#14110C",
"sidebar-ring": "#F23B2E",
"radius": "0px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#14110C",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#F23B2E",
"accent-foreground": "#ffffff",
"destructive": "#B00020",
"border": "#303642",
"input": "#303642",
"ring": "#F23B2E",
"chart-1": "#14110C",
"chart-2": "#f4f4f5",
"chart-3": "#F23B2E",
"chart-4": "#177245",
"chart-5": "#B36A00",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#14110C",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#F23B2E",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#F23B2E",
"radius": "0px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ef8bb-aef6-7e13-8bd3-1dc2cadae95e",
"slug": "quoin",
"componentManifest": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
"nativeTokenNames": {
"colors": [
"accent",
"accent_2",
"accent_3",
"bg",
"border",
"error",
"info",
"muted",
"on_accent",
"success",
"surface",
"surface_2",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font"
],
"radii": [
"lg",
"md",
"none",
"pill",
"sm"
],
"shadows": [
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"paper_texture",
"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 Quoinand swap a palette and an art style onto it — the landing & dashboard recolor live. The Studio does the same with all three lanes free.
Agent-authored scenes, component recipes, and visual profile rendered on local shadcn-style primitives.
An editorial desk where every spread is set to a column by rank: lead, standing, set, holding — locked in the chase before the press.
A spread form proving mono labels, an invalid column-span state, a carry toggle, a measure slider, and a send confirm.
A compact queue with rows, menus, tooltips, status badges, and a holding affordance.
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: #F4F1EA;
--foreground: #14110C;
--card: #FBFAF6;
--card-foreground: #14110C;
--popover: #FBFAF6;
--popover-foreground: #14110C;
--primary: #14110C;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #6B6357;
--muted-foreground: #14110C;
--accent: #F23B2E;
--accent-foreground: #ffffff;
--destructive: #B00020;
--border: #14110C;
--input: #14110C;
--ring: #F23B2E;
--chart-1: #14110C;
--chart-2: #f4f4f5;
--chart-3: #F23B2E;
--chart-4: #177245;
--chart-5: #B36A00;
--sidebar: #FBFAF6;
--sidebar-foreground: #14110C;
--sidebar-primary: #14110C;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #0057FF;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #14110C;
--sidebar-ring: #F23B2E;
--radius: 0px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #14110C;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #F23B2E;
--accent-foreground: #ffffff;
--destructive: #B00020;
--border: #303642;
--input: #303642;
--ring: #F23B2E;
--chart-1: #14110C;
--chart-2: #f4f4f5;
--chart-3: #F23B2E;
--chart-4: #177245;
--chart-5: #B36A00;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #14110C;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #F23B2E;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #F23B2E;
--radius: 0px;
}
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 QuoinShadcnKit() {
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">Quoin</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": "quoin",
"type": "registry:theme",
"title": "Quoin",
"description": "Editorial ink atelier on warm studio paper. Black printing ink draws the structure — double-rule headers, baseline register lines, circled editions — then one electric vermilion mark calls the lead. Serif display (Libre Baskerville) with mono folios (IBM Plex Mono) and sans body (IBM Plex Sans). Square corners (radius 0); the ink rule is the primary separator, never a soft shadow alone. Light/warm-paper mode is the point.",
"cssVars": {
"theme": {
"font-sans": "IBM Plex Sans, system-ui, sans-serif",
"font-mono": "IBM Plex Mono, ui-monospace, monospace",
"font-display": "Libre Baskerville, Iowan Old Style, Georgia, serif",
"font-heading": "Libre Baskerville, Iowan Old Style, Georgia, serif",
"radius": "0px"
},
"light": {
"background": "#F4F1EA",
"foreground": "#14110C",
"card": "#FBFAF6",
"card-foreground": "#14110C",
"popover": "#FBFAF6",
"popover-foreground": "#14110C",
"primary": "#14110C",
"primary-foreground": "#FBFAF6",
"secondary": "#ECE7DC",
"secondary-foreground": "#14110C",
"accent": "#F23B2E",
"accent-foreground": "#FBFAF6",
"muted": "#ECE7DC",
"muted-foreground": "#6B6357",
"destructive": "#B00020",
"destructive-foreground": "#FBFAF6",
"success": "#177245",
"warning": "#B36A00",
"info": "#0057FF",
"border": "#14110C",
"input": "#14110C",
"ring": "#0057FF",
"radius": "0px"
}
}
}
# Quoin shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-agent`
Slug: `quoin`
## Intent
Quoin is an editorial ink atelier language. Through shadcn/ui its one governing idea —
**the ink rule is the layout material, and one electric mark calls the lead** — must survive.
Black printing ink draws structure first: double-rule section headers, faint baseline register
lines crossing panels, circled edition counts. Then a single vermilion signal (a 2px left edge +
a small diamond pin) marks the lead; cobalt carries focus, links, and switch-on; chartreuse
highlights a selection. The ground is **warm studio paper (#F4F1EA)** with a faint grain, not
white; type is serif display (Libre Baskerville), mono folios (IBM Plex Mono), sans body (IBM
Plex Sans). Corners are square (radius 0); the only round shape is a circled edition mark.
**The primary action is ink black** — accents stay marks, never fills (under ~5% of a view).
Light / warm-paper mode is the point.
## 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:
```json
{ "primary": "#14110C", "accent": "#F23B2E", "accent2": "#0057FF", "accent3": "#C8FF00", "background": "#F4F1EA", "surface": "#FBFAF6", "surface2": "#ECE7DC", "text": "#14110C", "muted": "#6B6357", "border": "#14110C", "success": "#177245", "warning": "#B36A00", "error": "#B00020", "info": "#0057FF" }
```
Typography:
```json
{ "heading_font": "Libre Baskerville", "body_font": "IBM Plex Sans", "mono_font": "IBM Plex Mono", "letter_spacing": "-0.02em", "base_size": "17px" }
```
## Visual character to preserve
- **The ink rule is the layout material.** Double-rule headers (border-top + border-bottom) are
magazine-section dividers; faint baseline register lines cross panels; single hairlines
separate ledger rows. Never a generic borderless card, never a lone single accent edge.
- **One electric mark per view.** The lead carries a 2px vermilion left edge + a small diamond
pin at the grid origin; cobalt is focus / links / switch-on; chartreuse marks a selection.
An accent is a register mark, never a panel fill — keep it under ~5% of the surface.
- **Warm paper, square, circled editions.** Ground is studio paper (#F4F1EA) with a faint grain;
corners are square (radius 0); counts and folios are circled in ink (9999px) as margin marks,
not metric cards. Primary action is ink black, not a colored fill.
- Serif display (Libre Baskerville) for slugs and headlines, IBM Plex Mono for folios / counts /
timestamps, IBM Plex Sans body — `-0.02em` tracking throughout.
## ShadSync visual profile
```json
{ "family": "editorial", "material": "paper", "contour": "ruled", "border": "ruled", "underlay": false, "grain": true, "stickerBadges": false, "motion": "subtle", "density": "balanced", "accents": ["accent", "info", "success"] }
```
## Signature component recipes
### Button
Primary `Button` = ink (`--primary`) on paper with a tiny vermilion accent pin at the top-right —
the one emphasis. A secondary variant is a paper surface with a 1px ink rule; a link is cobalt.
No rounded corners; square; mono uppercase label, centred. Buttons in a set share one height and
shape. Disabled is a flat paper plaque with a faint ink rule.
### Card
`Card` is a warm-paper panel with an ink rule and a double-rule header (border-top + border-bottom)
acting as a section divider. A **lead** card adds a 2px vermilion left edge + a small diamond pin
at its grid origin; a standing card uses cobalt. Never nest cards; never give a card a single
lone accent edge as decoration.
### Input and Textarea
`Input` / `Textarea` sit on a paper fill with a 1px ink rule; focus draws a cobalt inset; an
invalid field draws a vermilion inset. Mono labels above, real editorial values inside. Square.
### Select, Tabs, and Table
`Select` filters desks with a square ink-ruled trigger and a custom chevron (no browser default).
`Tabs` switch The Forme / Galley / Wire; the active tab carries a 2px vermilion underline mark.
`Table` is the issue ledger — mono header under a single ink rule, serif slug names, warm-paper
zebra, faint baseline rules, a square status `Badge` per row, and a "holding" empty state.
### Dialog and Sheet
`Dialog` is a formal printed notice ("Send this spread to the chase?") — centered, square,
ink-ruled, generous. `Sheet` is the spread-edit side rail. Both paper/ink.
### Badge, Switch, Slider, Tooltip, Separator, Checkbox, Dropdown-menu
`Badge` is a square ink-outlined chip with a small colored dot: lead (vermilion) / standing
(cobalt) / set (pine) / holding (grey). `Switch` "on" is cobalt with a paper knob. `Slider` is a
2px ink track with a square vermilion thumb. `Tooltip` is concise sans on paper. `Separator` is a
printed ink rule — a hairline between rows, a double rule for a section header. `Checkbox` is a
square ink box that fills ink (paper check) when on, cobalt focus. `dropdown-menu` carries a
vermilion marker and a destructive "spike" item.
## Preview shots
- `application-shell`: the issue desk — folio rail, double-rule headers, circled edition-mark KPIs (lead in vermilion), the issue ledger, a press-progress block.
- `detail-editor`: set a spread to the chase — mono-labelled fields, an invalid (vermilion) column-span state, a carry switch, a measure slider, a send confirm.
- `data-operations`: the galley queue — rows, dropdown actions with a spike item, status badges, a holding state.
- Each preview shot carries a renderable `scene` (headline, description, actions, rows/fields/stats).
## Implementation contract
- Start from the local `@/components/ui/*` shadcn primitives; do not create a second component system.
- Apply `/katagami/shadcn/quoin/registry-theme.json` variables first, then compose with these recipes.
- Keep Katagami token names as source metadata; shadcn semantic names are only the export surface.
- Do: let the ink rule build hierarchy; keep the ground warm paper; reserve vermilion for the lead, cobalt for focus/action; circle counts; keep accents under ~5%.
- Do not: give a card a lone accent edge or fill a panel with an accent; round corners or use random radii; default to white borderless SaaS cards; add gradients/glow/glassmorphism; nest cards.
## Copy-paste component example
This shows the import shape and a real Quoin 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";
// A spread card on warm paper: an ink rule and a double-rule header; the lead carries a
// 2px vermilion left edge + a diamond pin; a mono caption for the desk + column span.
export function SpreadCard() {
return (
<Card className="relative rounded-none border border-[#14110C] bg-[#FBFAF6] text-[#14110C] shadow-[7px_7px_0_rgba(20,17,12,0.10)] border-l-2 border-l-[#F23B2E]">
<span aria-hidden className="absolute -left-[7px] top-5 h-3 w-3 rotate-45 bg-[#F23B2E]" />
<CardHeader className="border-y-[3px] border-double border-[#14110C] px-6 py-3">
<CardDescription className="font-mono text-xs uppercase tracking-wide text-[#6B6357]">
City desk · lead spread · cols 1–5
</CardDescription>
<CardTitle className="font-[var(--font-display)] text-2xl leading-tight tracking-tight">
The harbour vote returns to the front
</CardTitle>
</CardHeader>
<CardContent className="px-6 pt-4">
<p className="text-base">Registered to the lead block and held for the cover line.</p>
</CardContent>
<CardFooter className="justify-between border-t border-[rgba(20,17,12,0.16)] px-6">
<Badge className="rounded-none border border-[#14110C] bg-[#FBFAF6] font-mono text-xs uppercase text-[#14110C]">
Lead
</Badge>
<Button className="h-10 rounded-none bg-[#14110C] font-mono text-xs uppercase text-[#FBFAF6]">
Send to chase
</Button>
</CardFooter>
</Card>
);
}
```
## Layout notes
```json
{ "grid": "editorial asymmetric; 12-col with a folio rail and 5/4/3 spans on warm paper", "density": "balanced; large serif display, compact mono folios, ruled annotation panels", "radii": "0 (square) / 9999 (circled edition marks only)", "borders": "the ink rule is the layout material — double-rule headers, faint baseline lines, single hairlines", "separators": "ink rules first; warm-paper zebra and one vermilion mark second" }
```
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"author": "katagami-agent",
"generatedBy": "katagami-agent",
"requiresVisualProfile": true,
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"language": { "id": "", "name": "Quoin", "slug": "quoin" },
"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 ink rule is the layout material: double-rule (border-top + border-bottom) headers act as magazine-section dividers, and faint baseline register lines cross panels — never a generic borderless card.",
"One electric signal per view: vermilion marks the lead (a 2px left edge + a small diamond pin), cobalt carries focus/links/switch-on, chartreuse highlights a selection. No accent ever fills a field; it stays under ~5% of the surface.",
"Warm studio-paper ground (#F4F1EA) with a faint grain, near-black printing ink, square corners (radius 0); editions are circled (9999px) in ink — counts read as margin marks, not metric cards. Primary action is ink black, not a colored fill."
],
"visualProfile": {
"family": "editorial",
"material": "paper",
"contour": "ruled",
"border": "ruled",
"underlay": false,
"grain": true,
"stickerBadges": false,
"motion": "subtle",
"density": "balanced",
"accents": ["accent", "info", "success"]
},
"shots": [
{
"id": "application-shell",
"title": "The chase — issue desk",
"viewport": "desktop",
"primitives": ["button", "card", "input", "select", "tabs", "badge", "separator", "table"],
"composition": "An editorial issue desk: a folio rail, double-rule section headers, circled edition-mark KPIs (the lead in vermilion), the story ledger with status badges, and a press-progress block — all ruled to the grid on warm studio paper.",
"mustShow": ["ink-black primary action with a tiny vermilion accent pin vs a quiet paper secondary", "double-rule section header (top rule + bottom rule), never a single accent edge", "circled edition-mark counts in ink, the lead circled in vermilion", "status badges: lead (vermilion) / standing (cobalt) / set (pine) / holding (grey)", "serif slug names on a ledger with warm-paper zebra and faint baseline rules"],
"avoid": ["pure-white SaaS cards with soft shadows and no rules", "rounded corners or random radii (8/12/20px)", "filling a panel with vermilion or cobalt", "gradients, glow, glassmorphism"],
"scene": {
"eyebrow": "the forme",
"headline": "Issue desk — Grange Quarterly 47",
"description": "An editorial desk where every spread is set to a column by rank: lead, standing, set, holding — locked in the chase before the press.",
"primaryAction": "Send forme to press",
"secondaryAction": "Pull a proof",
"stats": [
{ "label": "spreads set", "value": "28", "tone": "accent" },
{ "label": "on the wire", "value": "6", "tone": "default" },
{ "label": "galleys open", "value": "3", "tone": "info" }
],
"rows": [
{ "label": "The harbour vote", "value": "City · cols 1–5 · 1,240w", "status": "lead" },
{ "label": "Three studios in winter", "value": "Reviews · cols 1–3 · 620w", "status": "standing" },
{ "label": "The colophon", "value": "Studio · col 6 · 180w", "status": "set" },
{ "label": "From the readers", "value": "Letters · col 6 · 260w", "status": "holding" }
],
"statuses": ["Lead", "Standing", "Set", "Holding"]
}
},
{
"id": "detail-editor",
"title": "Set a spread to the chase",
"viewport": "tablet",
"primitives": ["button", "card", "input", "textarea", "select", "checkbox", "switch", "slider", "dialog", "sheet"],
"composition": "A formal setting flow: mono labels above serif/sans fields, an invalid (vermilion-inset) column-span state, a carry-to-next-edition switch (cobalt on), a measure slider with a vermilion thumb, and a send-confirm dialog as a printed notice.",
"mustShow": ["cobalt focus inset on inputs", "an invalid state drawn as a vermilion inset", "a send-confirm dialog framed by ink rules, square", "real editorial values (slugs, column spans, words)"],
"avoid": ["unstyled browser controls", "missing labels", "nested cards", "rounded inputs or pill buttons"],
"scene": {
"eyebrow": "the setting desk",
"headline": "Set — the harbour vote",
"description": "A spread form proving mono labels, an invalid column-span state, a carry toggle, a measure slider, and a send confirm.",
"primaryAction": "Send to chase",
"secondaryAction": "Save draft",
"fields": [
{ "label": "Spread slug", "value": "The harbour vote", "type": "text" },
{ "label": "Column span", "value": "— assign 1–6 before lock", "type": "invalid" },
{ "label": "Desk", "value": "City", "type": "select" },
{ "label": "Carry to next edition", "value": "on", "type": "switch" }
],
"statuses": ["Set", "Invalid", "Carried"]
}
},
{
"id": "data-operations",
"title": "Galley queue",
"viewport": "mobile",
"primitives": ["button", "tabs", "badge", "dropdown-menu", "table", "tooltip", "separator"],
"composition": "A narrow galley queue: stacked serif slug rows ruled at the baseline, per-row dropdown actions with vermilion markers and a destructive 'spike' item, status badges, tooltips, and a holding state.",
"mustShow": ["responsive single-column reflow with no horizontal overflow", "serif slug rows separated by faint baseline rules", "row action menu with a vermilion marker and a 'spike' destructive item", "status badges", "a holding empty state"],
"avoid": ["desktop-only tables", "text overflow", "generic shadcn spacing without Quoin's ruled character"],
"scene": {
"eyebrow": "galley",
"headline": "Galley queue",
"description": "A compact queue with rows, menus, tooltips, status badges, and a holding affordance.",
"primaryAction": "Send",
"secondaryAction": "Filter",
"rows": [
{ "label": "The harbour vote", "value": "City", "status": "lead" },
{ "label": "The colophon", "value": "Studio", "status": "set" },
{ "label": "From the readers", "value": "Letters", "status": "holding" }
],
"statuses": ["Lead", "Set", "Holding"]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Hierarchy: ink-black primary (the press) with a tiny vermilion accent pin = the one emphasis; paper-surface secondary with an ink rule; cobalt link; square, mono uppercase label, one shared height. A button set shares one shape and height." },
{ "primitive": "card", "intent": "Warm paper panel with an ink rule and a double-rule header (border-top + border-bottom) as a section divider; a lead card adds a 2px vermilion left edge + a small diamond pin at its grid origin. Never nest cards; never a lone accent edge." },
{ "primitive": "input", "intent": "Paper fill with a 1px ink rule; cobalt inset on focus, vermilion inset when invalid; square corners; mono label above." },
{ "primitive": "textarea", "intent": "Longer compositor notes with the same focus + invalid rhythm; sans, generous, square, ruled." },
{ "primitive": "select", "intent": "Desk / column filtering with a square ink-ruled trigger, a custom chevron (no browser default), and clear selection contrast." },
{ "primitive": "dialog", "intent": "A formal 'Send this spread to the chase?' notice — centered, square, ink-ruled, generous." },
{ "primitive": "sheet", "intent": "The spread / archive side rail for contextual editing, ruled at the edge." },
{ "primitive": "tabs", "intent": "Switch The Forme / Galley / Wire; the active tab carries a 2px vermilion underline mark, not a filled pill." },
{ "primitive": "badge", "intent": "Square ink-outlined status chip with a small colored dot: lead (vermilion) / standing (cobalt) / set (pine) / holding (grey)." },
{ "primitive": "separator", "intent": "A printed ink rule — single hairline between rows, double rule for a section header; the line is the primary separator." },
{ "primitive": "checkbox", "intent": "Square ink box; checked fills ink with a paper check; cobalt focus ring." },
{ "primitive": "switch", "intent": "Square ink-ruled track; on is cobalt with a paper knob; off is a warm-paper track." },
{ "primitive": "slider", "intent": "Column-span / measure control: a 2px ink track with a square vermilion thumb." },
{ "primitive": "tooltip", "intent": "Concise sans notes on a paper surface with an ink rule." },
{ "primitive": "dropdown-menu", "intent": "Per-row spread actions with a vermilion marker and a destructive 'spike' item." },
{ "primitive": "table", "intent": "The issue ledger: mono header under a single ink rule, serif slug rows, warm-paper zebra, faint baseline rules, a status badge per row, and a 'holding' empty state." }
],
"qualityRules": {
"do": [
"Let the ink rule do the work: double-rule headers, faint baseline lines, single hairlines between rows.",
"Keep the ground warm studio paper; reserve vermilion for the lead, cobalt for focus/action, chartreuse for selection.",
"Circle counts and folios in ink; keep accents under ~5% of any view.",
"Set slugs in serif, folios/counts/timestamps in mono, body in sans."
],
"dont": [
"Give a card a single lone accent edge, or fill a panel with an accent colour.",
"Round corners or use random radii; the only round shape is a circled edition mark.",
"Default to pure-white borderless SaaS cards or add gradients, glow, or glassmorphism.",
"Mix multiple display fonts or solve hierarchy with many accent colours when the ink rule and one signal can."
]
}
}