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-high editorial workbench density: schedules, forms, notes and metadata coexist, organized by rules, gutters, paper panels and the folio rail rather than rounded cards.
Editorial workbench density: desktop shows schedule, notes and metadata at once; mobile collapses to one annotated reading stream.
12-column grid capped at 1440px with 24px gutters and a 96px folio rail; asymmetric spans (7/4, 8/4, 6/5) for specimen, notes and controls.
Margins around works on paper: broad outer edges, tight caption relationships, deliberate empty gutters that make the colour scraps feel placed.
At 1024px the rail flattens and grids drop to two columns; at 640px everything stacks; oversized display type clamps responsively and never clips at 390px; grids use minmax(0,1fr) so nothing overflows.
Loose black India-ink line drawing with irregular grey wash fields on pure white paper, punctuated by a few flat opaque rectangles of cyan, vermilion and acid yellow collaged like printer registration stickers.
Proofing tables, works on paper, gallery objects, print-shop still lifes — always with generous white margins.
no photorealism, no gradients, no text, no letters, no logos
# Galley
## Philosophy
Galley is a fine-art editorial proofing language for publication tools, artist archives and culture desks — the interface as a marked-up galley proof. A pure white page carries off-black ink, hairline charcoal rules, paper-tone panels and crop-marked artwork frames; magazine pacing comes from asymmetry, oversized serif moments and mono proof labels. Colour is punctuation with meaning: cyan, vermilion and acid yellow arrive only as caption scraps — flat stickers that overlap frame edges — and each is a verdict. Cyan moves things, vermilion stops them, acid yellow holds them. The system stays museum-legible and disciplined while the marks steer attention through the composition.
### Values
- {"name":"Paper before chrome","explanation":"The default surface is pure white with warm paper panels and visible rule work; UI chrome reads as an edited page, not an app shell."}
- {"name":"Ink as structure","explanation":"Hairline rules, 4px ink dividers, wash underlines and crop marks define hierarchy and grouping — structure is printed, not floated on shadows."}
- {"name":"Colour as verdict","explanation":"High-chroma accents appear as caption scraps, statuses and register marks placed at decisive points; every colour states a decision and is paired with words."}
- {"name":"Editorial tension","explanation":"Asymmetry, oversized serif pull quotes, cropped artwork and offset scraps create magazine pacing across the interface."}
- {"name":"Annotated utility","explanation":"Controls, statuses, filters and notes are styled as proof marks and margin annotations, keeping dense workflows expressive and usable."}
- {"name":"Fine-art restraint","explanation":"Quiet margins, one strict type scale and material tactility keep the language gallery-adjacent rather than trendy."}
### Anti-Values
- {"name":"Generic dashboard cards","explanation":"No rounded neutral cards that would look identical after a palette swap; grouping comes from paper tones and rules."}
- {"name":"Rainbow enthusiasm","explanation":"Never many accents at equal weight; one dominant high-chroma accent per view, the others only as genuine verdicts."}
- {"name":"Crypto gloss","explanation":"No gradient buttons, glass panels, neon glows or inflated shadow stacks."}
- {"name":"Fake handwriting","explanation":"No novelty script fonts; ink character comes from rules, wash marks and crop frames, not gimmick typography."}
### Visual Character
- Pure white page with warm paper inset panels separated by 1px charcoal rules and abrupt 4px ink dividers.
- A 96px folio rail with vertical mono labels and three registration dots frames the workspace; it becomes a masthead band on tablet.
- Flat cyan, vermilion and acid-yellow caption scraps overlap frame edges as statuses, plate numbers and section marks.
- Irregular ink-wash SVG strokes underline section titles; artwork sits in crop-marked square frames.
- Sharp 0px containers, oversized Cormorant Garamond display, compact IBM Plex Sans body, IBM Plex Mono proof labels — all at -0.02em.
## Tokens
### Colors
| Name | Value |
|------|-------|
| bg | `#FFFFFF` |
| surface | `#F4F1EA` |
| surface_solid | `#ECE7DC` |
| text | `#101010` |
| muted | `#6E6960` |
| border | `#1A1A1A` |
| accent | `#00AEEF` |
| accent_2 | `#FF3B1F` |
| accent_soft | `#F6E800` |
| on_accent | `#FFFFFF` |
| success | `#158A4A` |
| warning | `#F6E800` |
| error | `#FF3B1F` |
| info | `#00AEEF` |
### Typography
- **Base Size**: 17px
- **Body Font**: IBM Plex Sans
- **Heading Font**: Cormorant Garamond
- **Mono Font**: IBM Plex Mono
- **Heading Weight**: 700
- **Heading Transform**: none
- **Letter Spacing**: -0.02em
- **Line Height**: 1.55
- **Scale Ratio**: 1.3
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@500;600;700&family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap
### Radii
- **None**: 0px
- **Md**: 0px
- **Lg**: 0px
- **Full**: 9999px
### Shadows
- **Sm**: 0 1px 0 rgba(0,0,0,0.16)
- **Md**: 0 16px 32px rgba(0,0,0,0.07)
- **Lg**: 0 28px 64px rgba(0,0,0,0.09)
### Spacing
- **Base**: 8px
- **Scale**: ["4px","8px","12px","16px","24px","32px","48px","64px","96px","128px"]
### Surfaces
- **Treatment**: paper
- **Card Style**: Flat warm paper panels and crop-marked ink frames on pure white; square corners, mono labels, caption scraps overlapping edges; no rounded neutral cards.
- **Bg Pattern**: none
### Borders
- **Default Width**: 1.5px
- **Accent Width**: 4px
- **Style**: solid
- **Character**: Borders behave like print rules and ink strokes: hairline charcoal separators, 1.5px ink outlines on fields and frames, abrupt 4px ink dividers before major blocks. Never soft grey box borders, never a single accent edge on a card.
### Motion
- **Duration**: 180ms
- **Easing**: cubic-bezier(0.2, 0.8, 0.2, 1)
- **Philosophy**: Snappy editorial proofing motion: small shifts and hard colour swaps; the settled page is the default state, reveals are gated behind a script class and respect prefers-reduced-motion.
## Rules
### Composition
- Use a 12-column editorial grid capped at 1440px with a 96px folio rail on desktop; the rail becomes a horizontal masthead band on tablet.
- Reserve at least half the screen as white or paper negative space; density arrives in edited blocks organized by rules, not everywhere.
- Crop artwork aggressively inside square crop-marked frames so images behave as composition, not thumbnail decoration.
- Place colour on edges, scraps and small blocks that punctuate reading order; never fill whole regions with accent colour.
- Let one oversized serif headline or pull quote break the grid per view to create magazine rhythm.
- Separate content families with hairline rules, 4px ink dividers and paper tone shifts instead of shadowed containers.
- Balance density across the canvas — a dense schedule block always faces a margin-note column or generous white, never a starved void.
### Hierarchy
- Cormorant Garamond display carries editorial importance and may overlap a rule or wash mark.
- IBM Plex Sans body is compact and sober at 17px minimum with -0.02em tracking.
- IBM Plex Mono acts as proof marks: dates, plate numbers, statuses, filters, breadcrumbs — 13px uppercase at +0.08em.
- Caption scraps outrank muted tags but stay small enough to read as annotations.
- One clearly primary action per view: a solid ink block; secondary actions are outlined proof boxes; quiet actions are mono labels with a highlighter hover.
### Density
Medium-high editorial workbench density: schedules, forms, notes and metadata coexist, organized by rules, gutters, paper panels and the folio rail rather than rounded cards.
### Signature Patterns
- Caption scrap (signature mechanic): a flat cyan/vermilion/yellow/ink rectangle with a mono uppercase label, absolutely offset to overlap its parent's edge — used page-wide for statuses, plate numbers, section marks and verdicts.
- Crop-mark frames: 14px ink corner marks outside artwork frames and key blocks, recurring across all compositions.
- Folio rail: fixed left gutter with vertical mono labels and three registration dots (cyan/vermilion/yellow).
- Wash-underlined titles: irregular ink-wash SVG strokes under section headings.
- Highlighter links: an ink baseline that floods acid yellow on hover — the language's link gesture everywhere.
- Register-mark tabs: the active tab carries a 4px vermilion mark under a hairline baseline.
- Ink block buttons: solid ink primary stamping cyan on hover and vermilion on active press.
- Plate schedule tables: 4px ink top rule, alternating paper-tone rows, cyan-wash hover, scrap statuses.
## Layout
### Density
Editorial workbench density: desktop shows schedule, notes and metadata at once; mobile collapses to one annotated reading stream.
### Grid
12-column grid capped at 1440px with 24px gutters and a 96px folio rail; asymmetric spans (7/4, 8/4, 6/5) for specimen, notes and controls.
### Breakpoints
- **Desktop**: 1200px and above: full grid with the vertical folio rail.
- **Tablet**: 768px to 1024px: the rail becomes a horizontal masthead band; grids drop to two considered columns — never the mobile column stretched wide.
- **Mobile**: 640px and below: single annotated stream; vertical writing mode removed, display type clamps to 38px, buttons full width, tables become scrollable proof strips, 44px touch targets.
### Whitespace
Margins around works on paper: broad outer edges, tight caption relationships, deliberate empty gutters that make the colour scraps feel placed.
### Responsive
At 1024px the rail flattens and grids drop to two columns; at 640px everything stacks; oversized display type clamps responsively and never clips at 390px; grids use minmax(0,1fr) so nothing overflows.
## Guidance
### Do
- Start every screen from pure #FFFFFF and add paper panels only where grouping is necessary.
- Let rules, crop marks and gutters do structural work before reaching for shadows.
- Give every colour a verdict — cyan moves, vermilion stops, acid yellow holds — and pair it with words.
- Offset caption scraps across frame edges to create collage depth.
- Keep ink-wash marks tied to headings and dividers, never spread across surfaces.
- Style forms as proofing instruments: square paper fields, mono labels, 2.5px cyan focus outlines, written error reasons.
- Apply -0.02em tracking to all sans text and one strict type scale to every size on the page.
- Keep the scrap + crop-mark + rule ornament recurring page-wide as one system.
### Don't
- Do not tint the page background; the canvas stays pure white.
- Do not round containers; only tiny tags and avatars are fully round.
- Do not use gradients, glass panels, neon glows or stacked shadows.
- Do not scatter the three accents equally; choose a dominant one per view.
- Do not give cards single accent edges; verdicts arrive as scraps.
- Do not use decorative handwriting fonts or faux-sketch icons.
- Do not centre everything; asymmetry and margin logic are essential.
- Do not let artwork float without captions, crop marks or editorial context.
- Do not let button or chip text wrap; layouts shrink or stack instead.
### Usage Context
Art-publication proofing tools, exhibition catalogue desks, artist archives, culture magazines and journals, design criticism platforms, and cultural-institution workflow tools that need museum seriousness with contemporary colour energy.
### Accessibility
Maintain WCAG contrast for text on accent scraps (white on cyan/vermilion, ink on yellow); pair every colour status with words; 2.5px cyan focus outlines on all interactive elements; 44px touch targets on tablet and mobile; respect prefers-reduced-motion; never place long text over wash textures.
## Imagery Direction
### Technique
Loose black India-ink line drawing with irregular grey wash fields on pure white paper, punctuated by a few flat opaque rectangles of cyan, vermilion and acid yellow collaged like printer registration stickers.
### Subjects
Proofing tables, works on paper, gallery objects, print-shop still lifes — always with generous white margins.
### Negative
no photorealism, no gradients, no text, no letters, no logos
---
version: "alpha"
name: "Galley"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#FFFFFF"
surface: "#F4F1EA"
surface_solid: "#ECE7DC"
text: "#101010"
muted: "#6E6960"
border: "#1A1A1A"
accent: "#00AEEF"
accent_2: "#FF3B1F"
accent_soft: "#F6E800"
on_accent: "#FFFFFF"
success: "#158A4A"
warning: "#F6E800"
error: "#FF3B1F"
info: "#00AEEF"
typography:
headline-lg:
fontFamily: "Cormorant Garamond"
fontSize: "2.334rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Cormorant Garamond"
fontSize: "1.796rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "IBM Plex Sans"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.55
letterSpacing: "-0.02em"
label-md:
fontFamily: "IBM Plex Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
md: "0px"
lg: "0px"
full: "9999px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
step-8: "96px"
step-9: "128px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_solid:
backgroundColor: "{colors.surface_solid}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-accent_2:
backgroundColor: "{colors.accent_2}"
color-reference-accent_soft:
backgroundColor: "{colors.accent_soft}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "#000000"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Galley
## Overview
Galley is a fine-art editorial proofing language for publication tools, artist archives and culture desks — the interface as a marked-up galley proof. A pure white page carries off-black ink, hairline charcoal rules, paper-tone panels and crop-marked artwork frames; magazine pacing comes from asymmetry, oversized serif moments and mono proof labels. Colour is punctuation with meaning: cyan, vermilion and acid yellow arrive only as caption scraps — flat stickers that overlap frame edges — and each is a verdict. Cyan moves things, vermilion stops them, acid yellow holds them. The system stays museum-legible and disciplined while the marks steer attention through the composition.
### Values
- {"name":"Paper before chrome","explanation":"The default surface is pure white with warm paper panels and visible rule work; UI chrome reads as an edited page, not an app shell."}
- {"name":"Ink as structure","explanation":"Hairline rules, 4px ink dividers, wash underlines and crop marks define hierarchy and grouping — structure is printed, not floated on shadows."}
- {"name":"Colour as verdict","explanation":"High-chroma accents appear as caption scraps, statuses and register marks placed at decisive points; every colour states a decision and is paired with words."}
- {"name":"Editorial tension","explanation":"Asymmetry, oversized serif pull quotes, cropped artwork and offset scraps create magazine pacing across the interface."}
- {"name":"Annotated utility","explanation":"Controls, statuses, filters and notes are styled as proof marks and margin annotations, keeping dense workflows expressive and usable."}
- {"name":"Fine-art restraint","explanation":"Quiet margins, one strict type scale and material tactility keep the language gallery-adjacent rather than trendy."}
### Anti-Values
- {"name":"Generic dashboard cards","explanation":"No rounded neutral cards that would look identical after a palette swap; grouping comes from paper tones and rules."}
- {"name":"Rainbow enthusiasm","explanation":"Never many accents at equal weight; one dominant high-chroma accent per view, the others only as genuine verdicts."}
- {"name":"Crypto gloss","explanation":"No gradient buttons, glass panels, neon glows or inflated shadow stacks."}
- {"name":"Fake handwriting","explanation":"No novelty script fonts; ink character comes from rules, wash marks and crop frames, not gimmick typography."}
### Visual Character
- Pure white page with warm paper inset panels separated by 1px charcoal rules and abrupt 4px ink dividers.
- A 96px folio rail with vertical mono labels and three registration dots frames the workspace; it becomes a masthead band on tablet.
- Flat cyan, vermilion and acid-yellow caption scraps overlap frame edges as statuses, plate numbers and section marks.
- Irregular ink-wash SVG strokes underline section titles; artwork sits in crop-marked square frames.
- Sharp 0px containers, oversized Cormorant Garamond display, compact IBM Plex Sans body, IBM Plex Mono proof labels — all at -0.02em.
## 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 | `#FFFFFF` |
| surface | `#F4F1EA` |
| surface_solid | `#ECE7DC` |
| text | `#101010` |
| muted | `#6E6960` |
| border | `#1A1A1A` |
| accent | `#00AEEF` |
| accent_2 | `#FF3B1F` |
| accent_soft | `#F6E800` |
| on_accent | `#FFFFFF` |
| success | `#158A4A` |
| warning | `#F6E800` |
| error | `#FF3B1F` |
| info | `#00AEEF` |
## Typography
- **Headline-Lg**: Cormorant Garamond, 2.334rem, weight 700, line-height 1.1.
- **Headline-Md**: Cormorant Garamond, 1.796rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Sans, 17px, weight 400, line-height 1.55.
- **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`
- **Step-9**: `128px`
### Density
Editorial workbench density: desktop shows schedule, notes and metadata at once; mobile collapses to one annotated reading stream.
### Grid
12-column grid capped at 1440px with 24px gutters and a 96px folio rail; asymmetric spans (7/4, 8/4, 6/5) for specimen, notes and controls.
### Breakpoints
- **Desktop**: 1200px and above: full grid with the vertical folio rail.
- **Tablet**: 768px to 1024px: the rail becomes a horizontal masthead band; grids drop to two considered columns — never the mobile column stretched wide.
- **Mobile**: 640px and below: single annotated stream; vertical writing mode removed, display type clamps to 38px, buttons full width, tables become scrollable proof strips, 44px touch targets.
### Whitespace
Margins around works on paper: broad outer edges, tight caption relationships, deliberate empty gutters that make the colour scraps feel placed.
### Responsive
At 1024px the rail flattens and grids drop to two columns; at 640px everything stacks; oversized display type clamps responsively and never clips at 390px; grids use minmax(0,1fr) so nothing overflows.
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 0 rgba(0,0,0,0.16)
- **Md**: 0 16px 32px rgba(0,0,0,0.07)
- **Lg**: 0 28px 64px rgba(0,0,0,0.09)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `0px`
- **Lg**: `0px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: paper
- **Card Style**: Flat warm paper panels and crop-marked ink frames on pure white; square corners, mono labels, caption scraps overlapping edges; no rounded neutral cards.
- **Bg Pattern**: none
### Borders
- **Default Width**: 1.5px
- **Accent Width**: 4px
- **Style**: solid
- **Character**: Borders behave like print rules and ink strokes: hairline charcoal separators, 1.5px ink outlines on fields and frames, abrupt 4px ink dividers before major blocks. Never soft grey box borders, never a single accent edge on a card.
## Components
### Composition
- Use a 12-column editorial grid capped at 1440px with a 96px folio rail on desktop; the rail becomes a horizontal masthead band on tablet.
- Reserve at least half the screen as white or paper negative space; density arrives in edited blocks organized by rules, not everywhere.
- Crop artwork aggressively inside square crop-marked frames so images behave as composition, not thumbnail decoration.
- Place colour on edges, scraps and small blocks that punctuate reading order; never fill whole regions with accent colour.
- Let one oversized serif headline or pull quote break the grid per view to create magazine rhythm.
- Separate content families with hairline rules, 4px ink dividers and paper tone shifts instead of shadowed containers.
- Balance density across the canvas — a dense schedule block always faces a margin-note column or generous white, never a starved void.
### Hierarchy
- Cormorant Garamond display carries editorial importance and may overlap a rule or wash mark.
- IBM Plex Sans body is compact and sober at 17px minimum with -0.02em tracking.
- IBM Plex Mono acts as proof marks: dates, plate numbers, statuses, filters, breadcrumbs — 13px uppercase at +0.08em.
- Caption scraps outrank muted tags but stay small enough to read as annotations.
- One clearly primary action per view: a solid ink block; secondary actions are outlined proof boxes; quiet actions are mono labels with a highlighter hover.
### Density
Medium-high editorial workbench density: schedules, forms, notes and metadata coexist, organized by rules, gutters, paper panels and the folio rail rather than rounded cards.
### Signature Patterns
- Caption scrap (signature mechanic): a flat cyan/vermilion/yellow/ink rectangle with a mono uppercase label, absolutely offset to overlap its parent's edge — used page-wide for statuses, plate numbers, section marks and verdicts.
- Crop-mark frames: 14px ink corner marks outside artwork frames and key blocks, recurring across all compositions.
- Folio rail: fixed left gutter with vertical mono labels and three registration dots (cyan/vermilion/yellow).
- Wash-underlined titles: irregular ink-wash SVG strokes under section headings.
- Highlighter links: an ink baseline that floods acid yellow on hover — the language's link gesture everywhere.
- Register-mark tabs: the active tab carries a 4px vermilion mark under a hairline baseline.
- Ink block buttons: solid ink primary stamping cyan on hover and vermilion on active press.
- Plate schedule tables: 4px ink top rule, alternating paper-tone rows, cyan-wash hover, scrap statuses.
## 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-019f2e78-8711-7072-b72d-200b095d9a51/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 Start every screen from pure #FFFFFF and add paper panels only where grouping is necessary.
- Do Let rules, crop marks and gutters do structural work before reaching for shadows.
- Do Give every colour a verdict — cyan moves, vermilion stops, acid yellow holds — and pair it with words.
- Do Offset caption scraps across frame edges to create collage depth.
- Do Keep ink-wash marks tied to headings and dividers, never spread across surfaces.
- Do Style forms as proofing instruments: square paper fields, mono labels, 2.5px cyan focus outlines, written error reasons.
- Do Apply -0.02em tracking to all sans text and one strict type scale to every size on the page.
- Do Keep the scrap + crop-mark + rule ornament recurring page-wide as one system.
- Don't Do not tint the page background; the canvas stays pure white.
- Don't Do not round containers; only tiny tags and avatars are fully round.
- Don't Do not use gradients, glass panels, neon glows or stacked shadows.
- Don't Do not scatter the three accents equally; choose a dominant one per view.
- Don't Do not give cards single accent edges; verdicts arrive as scraps.
- Don't Do not use decorative handwriting fonts or faux-sketch icons.
- Don't Do not centre everything; asymmetry and margin logic are essential.
- Don't Do not let artwork float without captions, crop marks or editorial context.
- Don't Do not let button or chip text wrap; layouts shrink or stack instead.
### Usage Context
Art-publication proofing tools, exhibition catalogue desks, artist archives, culture magazines and journals, design criticism platforms, and cultural-institution workflow tools that need museum seriousness with contemporary colour energy.
### Accessibility
Maintain WCAG contrast for text on accent scraps (white on cyan/vermilion, ink on yellow); pair every colour status with words; 2.5px cyan focus outlines on all interactive elements; 44px touch targets on tablet and mobile; respect prefers-reduced-motion; never place long text over wash textures.
## Imagery Direction
### Technique
Loose black India-ink line drawing with irregular grey wash fields on pure white paper, punctuated by a few flat opaque rectangles of cyan, vermilion and acid yellow collaged like printer registration stickers.
### Subjects
Proofing tables, works on paper, gallery objects, print-shop still lifes — always with generous white margins.
### Negative
no photorealism, no gradients, no text, no letters, no logos
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "galley",
"type": "registry:theme",
"title": "Galley shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#FFFFFF",
"foreground": "#101010",
"card": "#F4F1EA",
"card-foreground": "#101010",
"popover": "#F4F1EA",
"popover-foreground": "#101010",
"primary": "#101010",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#6E6960",
"muted-foreground": "#101010",
"accent": "#00AEEF",
"accent-foreground": "#ffffff",
"destructive": "#FF3B1F",
"border": "#1A1A1A",
"input": "#1A1A1A",
"ring": "#00AEEF",
"chart-1": "#101010",
"chart-2": "#f4f4f5",
"chart-3": "#00AEEF",
"chart-4": "#158A4A",
"chart-5": "#F6E800",
"sidebar": "#F4F1EA",
"sidebar-foreground": "#101010",
"sidebar-primary": "#101010",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#00AEEF",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#1A1A1A",
"sidebar-ring": "#00AEEF",
"radius": "0px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#101010",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#00AEEF",
"accent-foreground": "#ffffff",
"destructive": "#FF3B1F",
"border": "#303642",
"input": "#303642",
"ring": "#00AEEF",
"chart-1": "#101010",
"chart-2": "#f4f4f5",
"chart-3": "#00AEEF",
"chart-4": "#158A4A",
"chart-5": "#F6E800",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#101010",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#00AEEF",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#00AEEF",
"radius": "0px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019f2e78-8711-7072-b72d-200b095d9a51",
"slug": "galley",
"componentManifest": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
"nativeTokenNames": {
"colors": [
"accent",
"accent_2",
"accent_soft",
"bg",
"border",
"error",
"info",
"muted",
"on_accent",
"success",
"surface",
"surface_solid",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
],
"radii": [
"full",
"lg",
"md",
"none"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"motion": [
"duration",
"easing",
"philosophy"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
Keep Galleyand 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: #FFFFFF;
--foreground: #101010;
--card: #F4F1EA;
--card-foreground: #101010;
--popover: #F4F1EA;
--popover-foreground: #101010;
--primary: #101010;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #6E6960;
--muted-foreground: #101010;
--accent: #00AEEF;
--accent-foreground: #ffffff;
--destructive: #FF3B1F;
--border: #1A1A1A;
--input: #1A1A1A;
--ring: #00AEEF;
--chart-1: #101010;
--chart-2: #f4f4f5;
--chart-3: #00AEEF;
--chart-4: #158A4A;
--chart-5: #F6E800;
--sidebar: #F4F1EA;
--sidebar-foreground: #101010;
--sidebar-primary: #101010;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #00AEEF;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #1A1A1A;
--sidebar-ring: #00AEEF;
--radius: 0px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #101010;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #00AEEF;
--accent-foreground: #ffffff;
--destructive: #FF3B1F;
--border: #303642;
--input: #303642;
--ring: #00AEEF;
--chart-1: #101010;
--chart-2: #f4f4f5;
--chart-3: #00AEEF;
--chart-4: #158A4A;
--chart-5: #F6E800;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #101010;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #00AEEF;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #00AEEF;
--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 GalleyShadcnKit() {
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">Galley</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": "galley",
"type": "registry:theme",
"author": "katagami-agent",
"title": "Galley",
"description": "A fine-art editorial proofing theme: pure white paper, off-black ink, hairline rules, square corners, and three proof-mark accents used like stickers — cyan moves, vermilion stops, acid yellow holds.",
"cssVars": {
"theme": {
"font-sans": "'IBM Plex Sans', -apple-system, sans-serif",
"font-serif": "'Cormorant Garamond', Georgia, serif",
"font-mono": "'IBM Plex Mono', 'SF Mono', monospace",
"radius": "0rem"
},
"light": {
"background": "0 0% 100%",
"foreground": "0 0% 6%",
"card": "43 27% 94%",
"card-foreground": "0 0% 6%",
"popover": "0 0% 100%",
"popover-foreground": "0 0% 6%",
"primary": "0 0% 6%",
"primary-foreground": "0 0% 100%",
"secondary": "43 27% 94%",
"secondary-foreground": "0 0% 6%",
"muted": "43 27% 94%",
"muted-foreground": "36 6% 41%",
"accent": "197 100% 47%",
"accent-foreground": "0 0% 100%",
"destructive": "8 100% 56%",
"destructive-foreground": "0 0% 100%",
"border": "0 0% 10%",
"input": "0 0% 10%",
"ring": "197 100% 47%",
"chart-1": "197 100% 47%",
"chart-2": "8 100% 56%",
"chart-3": "57 99% 47%",
"chart-4": "150 74% 31%",
"chart-5": "0 0% 10%"
}
},
"visualProfile": {
"family": "editorial-print",
"material": "white paper with warm paper panels and ink rules",
"contour": "square, sharp 0px corners everywhere; only tags and avatars fully round",
"border": "1.5px ink outlines on fields and frames; 4px ink rules as section dividers; no soft grey borders",
"underlay": false,
"grain": false,
"stickerBadges": true,
"motion": "snappy 180ms editorial shifts, hard colour swaps",
"density": "medium-high, organized by rules and paper tones instead of cards",
"accents": ["#00AEEF", "#FF3B1F", "#F6E800"]
},
"notes": "Radius is 0 by design — do not round components. Primary buttons are solid ink blocks that turn cyan on hover. Badges are flat rectangular 'caption scraps' in mono uppercase; where possible offset them across their parent's edge. Focus rings are 2.5px cyan, square. Semantic colours are the proof-mark vocabulary: error/vermilion stops, warning/acid-yellow holds, info/cyan notes, success/green passes."
}
# Galley — shadcn/ui Components
Author: `katagami-agent`
Format: `component-recipes-v1`
Language: Galley (`galley`) — an evolution of Chromatic Ink Marginalia.
Galley dresses shadcn/ui as a marked-up galley proof: white paper ground, off-black ink, square 0px corners, hairline rules instead of grey borders, mono proof labels, and three sticker accents with fixed meanings — cyan moves things, vermilion stops them, acid yellow holds them.
## ShadSync visual profile
- **family**: editorial-print
- **material**: pure white page; warm paper panels (`#F4F1EA`) for grouping
- **contour**: sharp 0px corners on every component; only `Badge` pills and `Avatar` may use `rounded-full`
- **border**: 1.5px ink (`#1A1A1A`) outlines on inputs and frames; 4px ink rules as top borders on tables and major blocks; never soft grey 1px borders
- **underlay**: none
- **grain**: none
- **stickerBadges**: yes — flat rectangular mono-uppercase "caption scraps", ideally offset across the parent edge with negative margins
- **motion**: 180ms `cubic-bezier(0.2,0.8,0.2,1)`, hard colour swaps, no springs
- **density**: medium-high, organized by rules and paper tones
- **accents**: `#00AEEF` cyan, `#FF3B1F` vermilion, `#F6E800` acid yellow (≤1 dominant per view)
Type: Cormorant Garamond for display, IBM Plex Sans for UI text (17px body), IBM Plex Mono for labels/statuses (13px, uppercase, `+0.08em`).
## Signature component recipes
### Button — ink block
Primary is a solid ink rectangle that stamps cyan on hover; secondary is an outlined proof box; ghost is a mono uppercase label whose hover floods acid yellow from beneath. Labels never wrap.
### Badge — caption scrap
The language's signature mark: flat rectangle, mono uppercase 13px, semibold, no radius. Colour = verdict: green Pass, vermilion Recut/Stop, acid-yellow Hold, cyan On-press/Note, ink for neutral marks. Offset it over the parent's corner (`-translate-y-1/2` on a relative parent) whenever composition allows.
### Card — plate / paper panel
No shadow stack: either a crop-marked frame (1.5px ink border with corner marks) for artwork, or a flat paper panel (`#F4F1EA`, no border) for grouped copy, with a scrap overlapping the top edge.
### Input / Textarea / Select — proof field
Paper fill, 1.5px ink border, square, mono uppercase label above. Focus = 2.5px cyan outline and white fill. Error = vermilion border plus a written reason in vermilion 15px.
### Table — plate schedule
4px ink rule on top, mono uppercase headers, hairline row rules, alternating paper-tone rows, cyan-tint hover, scrap statuses in the last column.
### Tabs — register marks
Text tabs on a hairline baseline; the active tab carries a 4px vermilion register mark under it, mono uppercase labels.
### Checkbox / Radio / Switch — proofing instruments
22px square ink-bordered checkbox filling solid ink when checked; round radio with a cyan dot; rectangular switch whose square knob slides on a cyan track.
### Dialog / Sheet — proof sheet
White sheet, square, soft single shadow (`0 16px 32px rgba(0,0,0,0.07)`), 4px ink rule under the serif title, a scrap naming the sheet's purpose in the top corner.
### Tooltip — margin note
Ink-black rectangle, white 13px mono text, no radius, no arrow.
### Separator — printed rule
1px hairline `color-mix(ink 34%, white)` between content; 4px full ink before major sections.
## Preview shots
`preview-shots.json` (schema `katagami:shadcn-preview-shots/renderable-v1`) ships three product scenes from the same world as the compositions — a museum press proofing catalogue No. 14:
1. **Plate schedule desk** (desktop): table + tabs + scrap badges + primary/secondary buttons + progress gauges.
2. **Caption proof form** (desktop): inputs, textarea, select, checkboxes, radios, switch, slider, one vermilion error.
3. **Margin notes** (mobile): dialog-style note cards, badges, tooltip, separator rhythm.
All 16 primitives are covered across the shots; the renderer must honour the ShadSync visual profile above (square, ink rules, sticker badges).
## Copy-paste component example
```tsx
import { Button } from "@/components/ui/button"
import { Badge } from "@/components/ui/badge"
import { Card, CardContent } from "@/components/ui/card"
export function PlateCard() {
return (
<Card className="relative rounded-none border-[1.5px] border-[#1A1A1A] bg-white">
{/* caption scrap: the signature mark, offset across the frame edge */}
<Badge className="absolute -top-3 right-3 rounded-none bg-[#00AEEF] px-3 py-1
font-mono text-[13px] font-semibold uppercase tracking-wider text-white">
Plate 07
</Badge>
<CardContent className="p-6">
<p className="font-mono text-[13px] uppercase tracking-wider text-[#6E6960]">
Sumi on kozo · 1974
</p>
<h3 className="font-serif text-[29px] font-semibold text-[#101010]">
Salt Marsh, Dusk
</h3>
<Button className="mt-4 h-[52px] rounded-none bg-[#101010] px-7 font-semibold
text-white transition-colors hover:bg-[#00AEEF]">
Pass plate to press
</Button>
</CardContent>
</Card>
)
}
```
Import primitives only from `@/components/ui/` and restyle with the tokens above; never re-round the corners.
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"author": "katagami-agent",
"requiresVisualProfile": true,
"language": {
"id": "galley",
"name": "Galley",
"slug": "galley"
},
"installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
"primitives": ["button", "card", "input", "textarea", "select", "dialog", "sheet", "tabs", "badge", "separator", "checkbox", "switch", "slider", "tooltip", "dropdown-menu", "table"],
"identityNotes": [
"Square 0px corners on every component — the language has no in-between radii.",
"Badges are 'caption scraps': flat rectangles, mono uppercase, offset across the parent edge when possible.",
"Colour is a verdict: cyan moves (primary/on-press), vermilion stops (error/recut), acid yellow holds (warning).",
"Structure comes from ink rules and paper tones, never from grey borders or shadow stacks.",
"Cormorant Garamond for display, IBM Plex Sans for working text, IBM Plex Mono for proof labels."
],
"visualProfile": {
"family": "editorial-print",
"material": "pure white page with warm paper panels and ink rule work",
"contour": "sharp square; only tags and avatars fully round",
"border": "1.5px ink outlines on fields and frames; 4px ink rules before major blocks",
"underlay": false,
"grain": false,
"stickerBadges": true,
"motion": "snappy 180ms editorial shifts, hard colour swaps",
"density": "medium-high, rule-organized",
"accents": ["#00AEEF", "#FF3B1F", "#F6E800"]
},
"tokens": {
"bg": "#FFFFFF",
"surface": "#F4F1EA",
"text": "#101010",
"muted": "#6E6960",
"border": "#1A1A1A",
"accent": "#00AEEF",
"onAccent": "#FFFFFF",
"success": "#158A4A",
"warning": "#F6E800",
"error": "#FF3B1F",
"info": "#00AEEF",
"radius": "0px",
"fontDisplay": "Cormorant Garamond",
"fontBody": "IBM Plex Sans",
"fontMono": "IBM Plex Mono"
},
"shots": [
{
"id": "plate-schedule-desk",
"title": "The plate schedule",
"viewport": "desktop",
"primitives": ["table", "tabs", "badge", "button", "separator", "dropdown-menu", "tooltip"],
"composition": "A proofing desk header with serif title and one primary ink-block button, register-mark tabs beneath, then a plate schedule table with a 4px ink top rule, alternating paper-tone rows and scrap-badge statuses; a dropdown menu open on a row's quiet action.",
"mustShow": [
"4px ink rule on top of the table",
"scrap badges: green Pass, vermilion Recut, yellow Hold, cyan On press",
"active tab carrying a 4px vermilion register mark",
"solid ink primary button next to an outlined secondary"
],
"avoid": ["rounded corners", "grey card borders", "drop shadows on the table", "more than one dominant accent"],
"scene": {
"headline": "Proof Round 02 — Catalogue No. 14",
"description": "Harbor Light Museum Press marks its plates for Friday's press run.",
"rows": [
{"plate": "07", "work": "Salt Marsh, Dusk", "round": "R2", "checkedBy": "M. Okafor", "mark": "Pass"},
{"plate": "12", "work": "Breakwater Study II", "round": "R2", "checkedBy": "J. Ferreira", "mark": "Recut"},
{"plate": "19", "work": "Current, Unnamed", "round": "R1", "checkedBy": "—", "mark": "Hold"},
{"plate": "23", "work": "Night Ferry Sketchbook, p.14", "round": "R2", "checkedBy": "M. Okafor", "mark": "On press"}
]
}
},
{
"id": "caption-proof-form",
"title": "The caption desk",
"viewport": "desktop",
"primitives": ["input", "textarea", "select", "checkbox", "switch", "slider", "button", "separator"],
"composition": "A two-column proofing form on white: paper-filled square fields with mono uppercase labels, one field in a vermilion error state with a written reason, checks and press options below a hairline separator, and a single ink-block submit.",
"mustShow": [
"paper-filled inputs with 1.5px ink borders and mono labels",
"one vermilion error field with its reason written out",
"square checkbox filling solid ink when checked",
"rectangular switch with a square knob on a cyan track"
],
"avoid": ["browser default controls", "rounded inputs", "placeholder-only labels", "error colour without words"],
"scene": {
"headline": "Caption for Plate 07",
"description": "Title, year, medium, dimensions and lender credit — checked against the loan agreement.",
"fields": [
{"label": "Plate title", "value": "Salt Marsh, Dusk", "state": "default"},
{"label": "Lender credit", "value": "Collection of the Aldersea Foundation", "state": "default"},
{"label": "Dimensions", "value": "97 × 64", "state": "error", "hint": "Missing unit — the registrar records centimetres."},
{"label": "Proof round", "value": "Round 02 — colour corrected", "state": "select"}
]
}
},
{
"id": "margin-notes-mobile",
"title": "Margin notes",
"viewport": "mobile",
"primitives": ["card", "badge", "dialog", "sheet", "tooltip", "button", "separator"],
"composition": "A single-column mobile stream of margin notes: verdict-tinted paper panels, each named by a caption scrap overlapping its top edge, a press-date block under a 4px ink rule, and one full-width ink-block action; a confirmation dialog styled as a white proof sheet.",
"mustShow": [
"caption scraps offset across the top edge of each note",
"verdict tints derived from the semantic colours, kept pale",
"a full-width primary button at 390px with its label on one line",
"a square white dialog with a 4px ink rule under its serif title"
],
"avoid": ["horizontal overflow", "rounded note cards", "icon-only actions", "stacked shadows"],
"scene": {
"headline": "Round 02 — margin notes",
"description": "The desk's verdicts, in the order they were placed.",
"stats": [
{"label": "Plates cleared", "value": "31 / 48", "mark": "Pass"},
{"label": "Awaiting credits", "value": "9", "mark": "Hold"},
{"label": "Back at printer", "value": "4", "mark": "Recut"}
]
}
}
],
"componentRecipes": [
{"primitive": "button", "intent": "Primary = solid ink block, white text, cyan on hover, vermilion on active press; 52px tall, square, label never wraps."},
{"primitive": "button", "intent": "Secondary = white proof box with a 1.5px ink inset outline; paper fill on hover."},
{"primitive": "button", "intent": "Ghost/quiet = mono uppercase 15px label; hover floods acid yellow from beneath like a highlighter."},
{"primitive": "card", "intent": "Plate card = 1.5px ink frame with crop-mark corners and a caption scrap overlapping the top edge; meta in mono, title in serif."},
{"primitive": "card", "intent": "Paper panel = flat #F4F1EA block, no border, generous 36px padding, scrap at the top-left edge."},
{"primitive": "input", "intent": "Proof field: paper fill, 1.5px ink border, square, mono uppercase label above; focus = 2.5px cyan outline + white fill."},
{"primitive": "textarea", "intent": "Same proof-field treatment, min-height 120px, vertical resize only."},
{"primitive": "select", "intent": "Proof field with a custom thin ink chevron; native arrow removed."},
{"primitive": "dialog", "intent": "White proof sheet, square, single soft shadow, serif title over a 4px ink rule, scrap naming the purpose in the corner."},
{"primitive": "sheet", "intent": "Slide-in proof sheet with a 1.5px ink leading edge; contents follow the page rhythm — rules, mono labels, one primary."},
{"primitive": "tabs", "intent": "Register-mark tabs: mono uppercase on a hairline baseline; active tab gets a 4px vermilion mark under it."},
{"primitive": "badge", "intent": "Caption scrap: flat rectangle, mono uppercase 13px semibold; verdict colours only; offset across the parent edge when composition allows."},
{"primitive": "separator", "intent": "1px hairline mixed from ink at 34% for rows; a full 4px ink rule before major sections."},
{"primitive": "checkbox", "intent": "22px ink-bordered square, fills solid ink with a white check when checked; cyan focus outline."},
{"primitive": "switch", "intent": "Rectangular 52×28 track with 1.5px ink border; square ink knob slides right onto a cyan track when on."},
{"primitive": "slider", "intent": "2px ink rail with a 20px square vermilion thumb; value echoed in the mono label above."},
{"primitive": "tooltip", "intent": "Ink-black rectangle, white mono 13px text, no radius, no arrow, 180ms fade."},
{"primitive": "dropdown-menu", "intent": "White sheet with 1.5px ink border, square items 15px; hover = paper fill; destructive items in vermilion with words, not icons."},
{"primitive": "table", "intent": "4px ink top rule, mono uppercase headers, hairline row rules, alternating paper-tone rows, cyan-tint hover, scrap statuses."}
],
"qualityRules": {
"do": [
"Keep every corner square; radius exists only on tags and avatars.",
"Pair every colour verdict with words — Pass, Hold, Recut — never colour alone.",
"Use mono uppercase 13px for all labels, statuses and metadata.",
"Let one accent dominate each scene; the other two appear only as genuine verdicts.",
"Offset scraps across edges so the page reads as a marked-up proof."
],
"dont": [
"Do not round corners or add soft grey borders.",
"Do not stack drop shadows; one soft shadow is the maximum, on overlays only.",
"Do not use gradients, glass, or glow effects.",
"Do not let button or badge text wrap.",
"Do not tint the page background — the ground stays pure white."
]
}
}