Ledgerline Editorial Systems
A portable design language for agents: download the markdown first, then inspect the preview, tokens, and rules as needed.
Download DESIGN.md
Portable DESIGN.md source of truth for most agents and apps.
specification
philosophy
tokens
borders4 items
- accent width
- 4px
- character
- Hairline slate rules at rgba-equivalent low contrast, with vermilion only as active rail or selected chart series.
- default width
- 1px
- style
- solid
colors15 items
motion3 items
- duration
- 140ms
- easing
- cubic-bezier(0.2, 0, 0, 1)
- philosophy
- Motion confirms state changes with quick opacity and rule-position transitions; no bouncing, pulsing, or decorative loops.
radii5 items
- full
- 9999px
- lg
- 16px
- md
- 0
- none
- 0
- sm
- 0
shadows3 items
- lg
- 0 18px 48px rgba(23,26,28,0.10)
- md
- 0 1px 0 rgba(23,26,28,0.08)
- sm
- none
spacing2 items
- base
- 8px
- scale
- 2, 4, 6, 8, 12, 16, 24, 32, 48, 64, 80, 96
surfaces3 items
- bg pattern
- None by default; when structure is needed, use actual hairline rules tied to rows, axes, and navigation.
- card style
- Use flat panels with square corners, top ledger rules, and caption blocks; avoid nested rounded stat cards.
- treatment
- Warm paper background with off-white work surfaces; no gradients, no glass, and no decorative texture except subtle rule density.
typography11 items
- base size
- 16px
- body font
- Atkinson Hyperlegible
- fallback strategy
- Bitter falls back to Georgia and serif; Atkinson Hyperlegible falls back to system-ui and Arial; Azeret Mono falls back to ui-monospace and SFMono-Regular. If web fonts fail, role contrast remains through serif display, readable sans body, and monospaced tabular data.
- google fonts url
- https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&family=Azeret+Mono:wght@400;500;600&family=Bitter:wght@500;650;700&display=swap
- heading font
- Bitter
- letter spacing
- -0.02em
- line height
- 1.56
- mono font
- Azeret Mono
- rationale
- Bitter gives magazine authority without fashion-editorial fragility, Atkinson Hyperlegible protects dense accessibility, and Azeret Mono separates quantitative reading from prose.
- roles
- body Atkinson Hyperlegible 400, 16px, -0.02em tracking, 1.56 line-height, 62ch measure for explanations and captions.·data Azeret Mono 500, tabular-nums, 13-14px, -0.02em tracking for dense tables and chart labels.·display Bitter 650-700, -0.035em tracking, 1.12 line-height, max 10 words per line for narrative dashboard headers.·numerals Azeret Mono with font-variant-numeric: tabular-nums lining-nums; align decimals and use ink for primary, muted slate for secondary.·ui labels Atkinson Hyperlegible 700, 11-12px, 0.04em tracking, uppercase only for persistent chrome and table headers; contrast must exceed 4.5:1.
- scale ratio
- 1.22
rules
Designed for dense enterprise and civic operations: tables can run 9-11 rows per viewport, charts keep readable axes, and row gaps compress to 6px only inside related groups while major sections separate by 64-96px.
layout
1440 desktop: rail plus two-column analytical grid; 768 tablet: rail compresses to top folio bar and content becomes single column; 375 mobile: all controls stack, tables become horizontally scrollable, captions stay visible.
High-density dashboard workspaces with a dominant chart and dense adjacent operations list; tiny clusters at 4-8px and major editorial breaks at 64-96px satisfy an 8:1 rhythm.
Desktop uses 72px folio rail plus 12-column content grid with 24px gutters and max-width 1320px; dominant visualization spans 7 columns while table/queue spans 5.
Whitespace is editorial, not empty: prose keeps 62ch measure, chart margins reserve room for labels, and unrelated sections separate with 64px rule-led pauses.
guidance
- Use Bitter for narrative headers and Atkinson Hyperlegible for all product text so editorial character never harms legibility.
- Attach captions, units, and source notes to every visualization and dense table.
- Use the vermilion accent only for active navigation, selected controls, focus outlines, or one selected chart series.
- Maintain WCAG AA contrast for metadata, captions, labels, legends, and table headers; do not fade secondary text below usable contrast.
- Group related controls within 8-12px and separate unrelated analysis blocks by 64px or more.
- Use square surfaces, hairline rules, and tabular numerals as the recognizable structural signature.
- Make semantic status colors redundant with text labels, icons, or row annotations.
- Do not use generic gradient hero surfaces, bento icon boxes, nested rounded stat cards, or decorative grid backgrounds.
- Do not create three equal cards in a row; one analysis region must dominate and another must be dense.
- Do not apply vermilion to every important number; reserve it for selection or critical intervention.
- Do not make captions, metadata, table labels, or navigation smaller than real product readability allows.
- Do not use pulsing-dot pills, gradient keyword emphasis, floating blobs, glassmorphism, or synthetic accent triads.
- Do not rely on color alone for state, status, or chart meaning.
- Do not let display tracking become tight and billboard-like; this is a working dashboard, not a launch page.
katagami spec
# Ledgerline Editorial Systems
## Philosophy
Ledgerline Editorial Systems translates magazine-grade hierarchy into dense operational dashboards for public-interest data teams. It behaves like a sober printed ledger: paper ground, ink typography, slate rules, and one restrained vermilion control color used only where a reader must act or compare a selected series.
### Values
- Readability before decoration: every label, caption, legend, and table cell must remain useful at production density.
- Editorial authority through measure discipline, captions, source notes, and narrative headers rather than oversized marketing slogans.
- System credibility through tokenized neutral foundations, semantic status colors, and consistent app-shell mechanics.
- Restraint as taste: paper, ink, slate, hairline rules, and a single high-chroma accent used surgically.
- Charts and tables are written like annotated reporting: titles explain the question, legends state units, and source notes are visible.
- Structural distinction comes from ledger rails, ruled tables, and offset folio marks, not icon bento boxes or decorative gradients.
### Anti-Values
- Huge overbold tight-tracked headings that make product dashboards feel like landing pages.
- Sterile textureless gradient panels, generic grid backgrounds, nested rounded stat cards, and unrelated decorative icon boxes.
- Low-contrast secondary metadata, tiny legends, or captions that disappear in real analytical use.
- Pill biscuits with pulsing dots, gradient keyword emphasis, and chroma sprayed across every metric.
### Visual Character
- A fixed-width left folio rail uses 1px slate rules plus a 4px vermilion active segment, creating editorial navigation without rounded pills.
- Dashboard regions are separated by horizontal ledger rules and column-spanning captions instead of shadowed cards; surfaces stay nearly flat paper.
- Tables use tabular numerals, alternating rule weights, and tight 6px row clusters so dense enterprise data remains scannable.
- Narrative headers sit in a disciplined 62ch measure with small source notes and deck copy; display type contrasts with readable UI text rather than just scaling larger.
- Charts use restrained ink strokes, one selected vermilion series, visible axis labels, and caption/source blocks attached directly below the plot.
## Tokens
### Borders
- **Accent Width**: 4px
- **Character**: Hairline slate rules at rgba-equivalent low contrast, with vermilion only as active rail or selected chart series.
- **Default Width**: 1px
- **Style**: solid
### Colors
| Name | Value |
|------|-------|
| accent | `#C43A25` |
| active_blue | `#245F9D` |
| background | `#F7F3EA` |
| border | `#D7D0C3` |
| error | `#A73328` |
| hairline | `#BEB6A8` |
| info | `#245F9D` |
| muted | `#5F676D` |
| paper_warm | `#F1EADF` |
| primary | `#171A1C` |
| secondary | `#4E5961` |
| success | `#2F6F4F` |
| surface | `#FFFDF8` |
| text | `#171A1C` |
| warning | `#A16B18` |
### Motion
- **Duration**: 140ms
- **Easing**: cubic-bezier(0.2, 0, 0, 1)
- **Philosophy**: Motion confirms state changes with quick opacity and rule-position transitions; no bouncing, pulsing, or decorative loops.
### Radii
- **Full**: 9999px
- **Lg**: 16px
- **Md**: 0
- **None**: 0
- **Sm**: 0
### Shadows
- **Lg**: 0 18px 48px rgba(23,26,28,0.10)
- **Md**: 0 1px 0 rgba(23,26,28,0.08)
- **Sm**: none
### Spacing
- **Base**: 8px
- **Scale**: [2,4,6,8,12,16,24,32,48,64,80,96]
### Surfaces
- **Bg Pattern**: None by default; when structure is needed, use actual hairline rules tied to rows, axes, and navigation.
- **Card Style**: Use flat panels with square corners, top ledger rules, and caption blocks; avoid nested rounded stat cards.
- **Treatment**: Warm paper background with off-white work surfaces; no gradients, no glass, and no decorative texture except subtle rule density.
### Typography
- **Base Size**: 16px
- **Body Font**: Atkinson Hyperlegible
- **Fallback Strategy**: Bitter falls back to Georgia and serif; Atkinson Hyperlegible falls back to system-ui and Arial; Azeret Mono falls back to ui-monospace and SFMono-Regular. If web fonts fail, role contrast remains through serif display, readable sans body, and monospaced tabular data.
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&family=Azeret+Mono:wght@400;500;600&family=Bitter:wght@500;650;700&display=swap
- **Heading Font**: Bitter
- **Letter Spacing**: -0.02em
- **Line Height**: 1.56
- **Mono Font**: Azeret Mono
- **Rationale**: Bitter gives magazine authority without fashion-editorial fragility, Atkinson Hyperlegible protects dense accessibility, and Azeret Mono separates quantitative reading from prose.
- **Roles**: {"body":"Atkinson Hyperlegible 400, 16px, -0.02em tracking, 1.56 line-height, 62ch measure for explanations and captions.","data":"Azeret Mono 500, tabular-nums, 13-14px, -0.02em tracking for dense tables and chart labels.","display":"Bitter 650-700, -0.035em tracking, 1.12 line-height, max 10 words per line for narrative dashboard headers.","numerals":"Azeret Mono with font-variant-numeric: tabular-nums lining-nums; align decimals and use ink for primary, muted slate for secondary.","ui_labels":"Atkinson Hyperlegible 700, 11-12px, 0.04em tracking, uppercase only for persistent chrome and table headers; contrast must exceed 4.5:1."}
- **Scale Ratio**: 1.22
## Rules
### Composition
- Start with an app shell: narrow folio rail, operational top bar, and an asymmetrical content grid where one narrative chart dominates.
- Use horizontal rules as architecture; do not wrap every group in a card when proximity and typography can group it.
- Break the grid once per screen with a column-spanning editorial brief or source note that interrupts pure dashboard modularity.
- Keep controls close to the data they affect, but place explanatory captions directly below charts and tables.
- Prefer one dominant visualization, one dense table, and one compact queue over equal-weight metric boxes.
### Density
Designed for dense enterprise and civic operations: tables can run 9-11 rows per viewport, charts keep readable axes, and row gaps compress to 6px only inside related groups while major sections separate by 64-96px.
### Hierarchy
- Display voice is editorial and measured: Bitter headings, modest size, narrow measure, and no gradient text.
- Primary data uses tabular mono numerals in ink; secondary deltas use muted slate plus words, not color alone.
- Section labels are small uppercase with generous letter spacing but never below accessible contrast.
- Active navigation uses a vermilion rail segment and ink text rather than pill backgrounds.
- Captions and source notes are first-class hierarchy elements with readable 13-14px text.
### Signature Patterns
- Folio rail navigation: a square-corner left column with 1px slate dividers and a 4px vermilion active bar aligned to the selected section.
- Ruled caption blocks: every chart and table ends with a two-column caption/source strip separated by hairline rules, making provenance visually inseparable from data.
- Ledger-row tables: dense rows use tabular mono numbers, left text in readable sans, and alternating 1px/2px rule weights instead of zebra fills or nested cards.
- Offset section tabs: small rectangular chapter labels sit half over a top rule, producing a magazine folio cue without pills or badges.
- Selected-series restraint: charts are mostly ink and slate strokes; exactly one active series or threshold uses vermilion, never broad gradients.
## Layout
### Breakpoints
1440 desktop: rail plus two-column analytical grid; 768 tablet: rail compresses to top folio bar and content becomes single column; 375 mobile: all controls stack, tables become horizontally scrollable, captions stay visible.
### Density
High-density dashboard workspaces with a dominant chart and dense adjacent operations list; tiny clusters at 4-8px and major editorial breaks at 64-96px satisfy an 8:1 rhythm.
### Grid
Desktop uses 72px folio rail plus 12-column content grid with 24px gutters and max-width 1320px; dominant visualization spans 7 columns while table/queue spans 5.
### Whitespace
Whitespace is editorial, not empty: prose keeps 62ch measure, chart margins reserve room for labels, and unrelated sections separate with 64px rule-led pauses.
## Guidance
### Do
- Use Bitter for narrative headers and Atkinson Hyperlegible for all product text so editorial character never harms legibility.
- Attach captions, units, and source notes to every visualization and dense table.
- Use the vermilion accent only for active navigation, selected controls, focus outlines, or one selected chart series.
- Maintain WCAG AA contrast for metadata, captions, labels, legends, and table headers; do not fade secondary text below usable contrast.
- Group related controls within 8-12px and separate unrelated analysis blocks by 64px or more.
- Use square surfaces, hairline rules, and tabular numerals as the recognizable structural signature.
- Make semantic status colors redundant with text labels, icons, or row annotations.
### Don't
- Do not use generic gradient hero surfaces, bento icon boxes, nested rounded stat cards, or decorative grid backgrounds.
- Do not create three equal cards in a row; one analysis region must dominate and another must be dense.
- Do not apply vermilion to every important number; reserve it for selection or critical intervention.
- Do not make captions, metadata, table labels, or navigation smaller than real product readability allows.
- Do not use pulsing-dot pills, gradient keyword emphasis, floating blobs, glassmorphism, or synthetic accent triads.
- Do not rely on color alone for state, status, or chart meaning.
- Do not let display tracking become tight and billboard-like; this is a working dashboard, not a launch page.
### Accessibility
Body and UI text meet WCAG AA against paper and surface tokens. Minimum body 15-16px, captions 13px with #4E5961 or darker, visible focus outline 2px vermilion plus underline or rail shift, tables preserve row height at 36px minimum on desktop and touch targets at 44px on mobile.
### Usage Context
Best for editorial data dashboards, civic analytics consoles, policy monitoring tools, enterprise reporting shells, and production interfaces where trust, density, and provenance matter.
DESIGN.md
---
version: "alpha"
name: "Ledgerline Editorial Systems"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
accent: "#C43A25"
active_blue: "#245F9D"
background: "#F7F3EA"
border: "#D7D0C3"
error: "#A73328"
hairline: "#BEB6A8"
info: "#245F9D"
muted: "#5F676D"
paper_warm: "#F1EADF"
primary: "#171A1C"
secondary: "#4E5961"
success: "#2F6F4F"
surface: "#FFFDF8"
text: "#171A1C"
warning: "#A16B18"
typography:
headline-lg:
fontFamily: "Bitter"
fontSize: "1.816rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Bitter"
fontSize: "1.488rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "Atkinson Hyperlegible"
fontSize: "16px"
fontWeight: 400
lineHeight: 1.56
letterSpacing: "-0.02em"
label-md:
fontFamily: "Azeret Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
full: "9999px"
lg: "16px"
md: "0px"
none: "0px"
sm: "0px"
spacing:
base: "8px"
xs: "2px"
sm: "4px"
md: "6px"
lg: "8px"
xl: "12px"
2xl: "16px"
3xl: "24px"
4xl: "32px"
step-8: "48px"
step-9: "64px"
step-10: "80px"
step-11: "96px"
components:
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-active_blue:
backgroundColor: "{colors.active_blue}"
color-reference-background:
backgroundColor: "{colors.background}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-hairline:
backgroundColor: "{colors.hairline}"
color-reference-info:
backgroundColor: "{colors.info}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-paper_warm:
backgroundColor: "{colors.paper_warm}"
color-reference-primary:
backgroundColor: "{colors.primary}"
color-reference-secondary:
backgroundColor: "{colors.secondary}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-warning:
backgroundColor: "{colors.warning}"
button-primary:
backgroundColor: "{colors.primary}"
textColor: "#ffffff"
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"
---
# Ledgerline Editorial Systems
## Overview
Ledgerline Editorial Systems translates magazine-grade hierarchy into dense operational dashboards for public-interest data teams. It behaves like a sober printed ledger: paper ground, ink typography, slate rules, and one restrained vermilion control color used only where a reader must act or compare a selected series.
### Values
- Readability before decoration: every label, caption, legend, and table cell must remain useful at production density.
- Editorial authority through measure discipline, captions, source notes, and narrative headers rather than oversized marketing slogans.
- System credibility through tokenized neutral foundations, semantic status colors, and consistent app-shell mechanics.
- Restraint as taste: paper, ink, slate, hairline rules, and a single high-chroma accent used surgically.
- Charts and tables are written like annotated reporting: titles explain the question, legends state units, and source notes are visible.
- Structural distinction comes from ledger rails, ruled tables, and offset folio marks, not icon bento boxes or decorative gradients.
### Anti-Values
- Huge overbold tight-tracked headings that make product dashboards feel like landing pages.
- Sterile textureless gradient panels, generic grid backgrounds, nested rounded stat cards, and unrelated decorative icon boxes.
- Low-contrast secondary metadata, tiny legends, or captions that disappear in real analytical use.
- Pill biscuits with pulsing dots, gradient keyword emphasis, and chroma sprayed across every metric.
### Visual Character
- A fixed-width left folio rail uses 1px slate rules plus a 4px vermilion active segment, creating editorial navigation without rounded pills.
- Dashboard regions are separated by horizontal ledger rules and column-spanning captions instead of shadowed cards; surfaces stay nearly flat paper.
- Tables use tabular numerals, alternating rule weights, and tight 6px row clusters so dense enterprise data remains scannable.
- Narrative headers sit in a disciplined 62ch measure with small source notes and deck copy; display type contrasts with readable UI text rather than just scaling larger.
- Charts use restrained ink strokes, one selected vermilion series, visible axis labels, and caption/source blocks attached directly below the plot.
## Colors
Use the YAML color tokens as the normative palette. The prose below names the roles agents should preserve when generating UI.
| Token | Value |
|-------|-------|
| accent | `#C43A25` |
| active_blue | `#245F9D` |
| background | `#F7F3EA` |
| border | `#D7D0C3` |
| error | `#A73328` |
| hairline | `#BEB6A8` |
| info | `#245F9D` |
| muted | `#5F676D` |
| paper_warm | `#F1EADF` |
| primary | `#171A1C` |
| secondary | `#4E5961` |
| success | `#2F6F4F` |
| surface | `#FFFDF8` |
| text | `#171A1C` |
| warning | `#A16B18` |
## Typography
- **Headline-Lg**: Bitter, 1.816rem, weight 700, line-height 1.1.
- **Headline-Md**: Bitter, 1.488rem, weight 600, line-height 1.15.
- **Body-Md**: Atkinson Hyperlegible, 16px, weight 400, line-height 1.56.
- **Label-Md**: Azeret Mono, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `2px`
- **Sm**: `4px`
- **Md**: `6px`
- **Lg**: `8px`
- **Xl**: `12px`
- **2xl**: `16px`
- **3xl**: `24px`
- **4xl**: `32px`
- **Step-8**: `48px`
- **Step-9**: `64px`
- **Step-10**: `80px`
- **Step-11**: `96px`
### Breakpoints
1440 desktop: rail plus two-column analytical grid; 768 tablet: rail compresses to top folio bar and content becomes single column; 375 mobile: all controls stack, tables become horizontally scrollable, captions stay visible.
### Density
High-density dashboard workspaces with a dominant chart and dense adjacent operations list; tiny clusters at 4-8px and major editorial breaks at 64-96px satisfy an 8:1 rhythm.
### Grid
Desktop uses 72px folio rail plus 12-column content grid with 24px gutters and max-width 1320px; dominant visualization spans 7 columns while table/queue spans 5.
### Whitespace
Whitespace is editorial, not empty: prose keeps 62ch measure, chart margins reserve room for labels, and unrelated sections separate with 64px rule-led pauses.
## Elevation & Depth
### Shadows
- **Lg**: 0 18px 48px rgba(23,26,28,0.10)
- **Md**: 0 1px 0 rgba(23,26,28,0.08)
- **Sm**: none
## Shapes
### Rounded
- **Full**: `9999px`
- **Lg**: `16px`
- **Md**: `0px`
- **None**: `0px`
- **Sm**: `0px`
### Surfaces
- **Bg Pattern**: None by default; when structure is needed, use actual hairline rules tied to rows, axes, and navigation.
- **Card Style**: Use flat panels with square corners, top ledger rules, and caption blocks; avoid nested rounded stat cards.
- **Treatment**: Warm paper background with off-white work surfaces; no gradients, no glass, and no decorative texture except subtle rule density.
### Borders
- **Accent Width**: 4px
- **Character**: Hairline slate rules at rgba-equivalent low contrast, with vermilion only as active rail or selected chart series.
- **Default Width**: 1px
- **Style**: solid
## Components
### Composition
- Start with an app shell: narrow folio rail, operational top bar, and an asymmetrical content grid where one narrative chart dominates.
- Use horizontal rules as architecture; do not wrap every group in a card when proximity and typography can group it.
- Break the grid once per screen with a column-spanning editorial brief or source note that interrupts pure dashboard modularity.
- Keep controls close to the data they affect, but place explanatory captions directly below charts and tables.
- Prefer one dominant visualization, one dense table, and one compact queue over equal-weight metric boxes.
### Density
Designed for dense enterprise and civic operations: tables can run 9-11 rows per viewport, charts keep readable axes, and row gaps compress to 6px only inside related groups while major sections separate by 64-96px.
### Hierarchy
- Display voice is editorial and measured: Bitter headings, modest size, narrow measure, and no gradient text.
- Primary data uses tabular mono numerals in ink; secondary deltas use muted slate plus words, not color alone.
- Section labels are small uppercase with generous letter spacing but never below accessible contrast.
- Active navigation uses a vermilion rail segment and ink text rather than pill backgrounds.
- Captions and source notes are first-class hierarchy elements with readable 13-14px text.
### Signature Patterns
- Folio rail navigation: a square-corner left column with 1px slate dividers and a 4px vermilion active bar aligned to the selected section.
- Ruled caption blocks: every chart and table ends with a two-column caption/source strip separated by hairline rules, making provenance visually inseparable from data.
- Ledger-row tables: dense rows use tabular mono numbers, left text in readable sans, and alternating 1px/2px rule weights instead of zebra fills or nested cards.
- Offset section tabs: small rectangular chapter labels sit half over a top rule, producing a magazine folio cue without pills or badges.
- Selected-series restraint: charts are mostly ink and slate strokes; exactly one active series or threshold uses vermilion, never broad gradients.
## 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/ledgerline-editorial-systems/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 Bitter for narrative headers and Atkinson Hyperlegible for all product text so editorial character never harms legibility.
- Do Attach captions, units, and source notes to every visualization and dense table.
- Do Use the vermilion accent only for active navigation, selected controls, focus outlines, or one selected chart series.
- Do Maintain WCAG AA contrast for metadata, captions, labels, legends, and table headers; do not fade secondary text below usable contrast.
- Do Group related controls within 8-12px and separate unrelated analysis blocks by 64px or more.
- Do Use square surfaces, hairline rules, and tabular numerals as the recognizable structural signature.
- Do Make semantic status colors redundant with text labels, icons, or row annotations.
- Don't Do not use generic gradient hero surfaces, bento icon boxes, nested rounded stat cards, or decorative grid backgrounds.
- Don't Do not create three equal cards in a row; one analysis region must dominate and another must be dense.
- Don't Do not apply vermilion to every important number; reserve it for selection or critical intervention.
- Don't Do not make captions, metadata, table labels, or navigation smaller than real product readability allows.
- Don't Do not use pulsing-dot pills, gradient keyword emphasis, floating blobs, glassmorphism, or synthetic accent triads.
- Don't Do not rely on color alone for state, status, or chart meaning.
- Don't Do not let display tracking become tight and billboard-like; this is a working dashboard, not a launch page.
### Accessibility
Body and UI text meet WCAG AA against paper and surface tokens. Minimum body 15-16px, captions 13px with #4E5961 or darker, visible focus outline 2px vermilion plus underline or rail shift, tables preserve row height at 36px minimum on desktop and touch targets at 44px on mobile.
### Usage Context
Best for editorial data dashboards, civic analytics consoles, policy monitoring tools, enterprise reporting shells, and production interfaces where trust, density, and provenance matter.
shadcn/ui theme
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "ledgerline-editorial-systems",
"type": "registry:theme",
"title": "Ledgerline Editorial Systems shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F7F3EA",
"foreground": "#171A1C",
"card": "#FFFDF8",
"card-foreground": "#171A1C",
"popover": "#FFFDF8",
"popover-foreground": "#171A1C",
"primary": "#171A1C",
"primary-foreground": "#ffffff",
"secondary": "#4E5961",
"secondary-foreground": "#ffffff",
"muted": "#5F676D",
"muted-foreground": "#171A1C",
"accent": "#C43A25",
"accent-foreground": "#ffffff",
"destructive": "#A73328",
"border": "#D7D0C3",
"input": "#D7D0C3",
"ring": "#C43A25",
"chart-1": "#171A1C",
"chart-2": "#4E5961",
"chart-3": "#C43A25",
"chart-4": "#2F6F4F",
"chart-5": "#A16B18",
"sidebar": "#FFFDF8",
"sidebar-foreground": "#171A1C",
"sidebar-primary": "#171A1C",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#245F9D",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#D7D0C3",
"sidebar-ring": "#C43A25",
"radius": "0"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#171A1C",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#C43A25",
"accent-foreground": "#ffffff",
"destructive": "#A73328",
"border": "#303642",
"input": "#303642",
"ring": "#C43A25",
"chart-1": "#171A1C",
"chart-2": "#4E5961",
"chart-3": "#C43A25",
"chart-4": "#2F6F4F",
"chart-5": "#A16B18",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#171A1C",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#C43A25",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#C43A25",
"radius": "0"
}
},
"meta": {
"source": "katagami",
"languageId": "ledgerline-editorial-systems",
"slug": "ledgerline-editorial-systems",
"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": {
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"colors": [
"accent",
"active_blue",
"background",
"border",
"error",
"hairline",
"info",
"muted",
"paper_warm",
"primary",
"secondary",
"success",
"surface",
"text",
"warning"
],
"motion": [
"duration",
"easing",
"philosophy"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"typography": [
"base_size",
"body_font",
"fallback_strategy",
"google_fonts_url",
"heading_font",
"letter_spacing",
"line_height",
"mono_font",
"rationale",
"roles",
"scale_ratio"
]
}
}
}
```embodiments
at a glance
Typography
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Components
Components rendered with this language’s tokens — colors, type, and rounded corners as specified.
Spacing
- base8px
- xs2px
- sm4px
- md6px
- lg8px
- xl12px
- 2xl16px
- 3xl24px
- 4xl32px
- step-848px
- step-964px
- step-1080px
- step-1196px
Shape
implementation kit
DESIGN.md with shadcn
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.
advanced implementation filesoptional machine-readable theme, CSS, TSX starter, recipes, and preview contract
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table:root {
--background: #F7F3EA;
--foreground: #171A1C;
--card: #FFFDF8;
--card-foreground: #171A1C;
--popover: #FFFDF8;
--popover-foreground: #171A1C;
--primary: #171A1C;
--primary-foreground: #ffffff;
--secondary: #4E5961;
--secondary-foreground: #ffffff;
--muted: #5F676D;
--muted-foreground: #171A1C;
--accent: #C43A25;
--accent-foreground: #ffffff;
--destructive: #A73328;
--border: #D7D0C3;
--input: #D7D0C3;
--ring: #C43A25;
--chart-1: #171A1C;
--chart-2: #4E5961;
--chart-3: #C43A25;
--chart-4: #2F6F4F;
--chart-5: #A16B18;
--sidebar: #FFFDF8;
--sidebar-foreground: #171A1C;
--sidebar-primary: #171A1C;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #245F9D;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #D7D0C3;
--sidebar-ring: #C43A25;
--radius: 0;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #171A1C;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #C43A25;
--accent-foreground: #ffffff;
--destructive: #A73328;
--border: #303642;
--input: #303642;
--ring: #C43A25;
--chart-1: #171A1C;
--chart-2: #4E5961;
--chart-3: #C43A25;
--chart-4: #2F6F4F;
--chart-5: #A16B18;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #171A1C;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #C43A25;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #C43A25;
--radius: 0;
}
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
export function LedgerlineEditorialSystemsShadcnKit() {
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">Ledgerline Editorial Systems</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": "ledgerline-editorial-systems",
"type": "registry:theme",
"title": "Ledgerline Editorial Systems shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F7F3EA",
"foreground": "#171A1C",
"card": "#FFFDF8",
"card-foreground": "#171A1C",
"popover": "#FFFDF8",
"popover-foreground": "#171A1C",
"primary": "#171A1C",
"primary-foreground": "#ffffff",
"secondary": "#4E5961",
"secondary-foreground": "#ffffff",
"muted": "#5F676D",
"muted-foreground": "#171A1C",
"accent": "#C43A25",
"accent-foreground": "#ffffff",
"destructive": "#A73328",
"border": "#D7D0C3",
"input": "#D7D0C3",
"ring": "#C43A25",
"chart-1": "#171A1C",
"chart-2": "#4E5961",
"chart-3": "#C43A25",
"chart-4": "#2F6F4F",
"chart-5": "#A16B18",
"sidebar": "#FFFDF8",
"sidebar-foreground": "#171A1C",
"sidebar-primary": "#171A1C",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#245F9D",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#D7D0C3",
"sidebar-ring": "#C43A25",
"radius": "0"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#171A1C",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#C43A25",
"accent-foreground": "#ffffff",
"destructive": "#A73328",
"border": "#303642",
"input": "#303642",
"ring": "#C43A25",
"chart-1": "#171A1C",
"chart-2": "#4E5961",
"chart-3": "#C43A25",
"chart-4": "#2F6F4F",
"chart-5": "#A16B18",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#171A1C",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#C43A25",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#C43A25",
"radius": "0"
}
},
"meta": {
"source": "katagami",
"languageId": "ledgerline-editorial-systems",
"slug": "ledgerline-editorial-systems",
"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": {
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"colors": [
"accent",
"active_blue",
"background",
"border",
"error",
"hairline",
"info",
"muted",
"paper_warm",
"primary",
"secondary",
"success",
"surface",
"text",
"warning"
],
"motion": [
"duration",
"easing",
"philosophy"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"typography": [
"base_size",
"body_font",
"fallback_strategy",
"google_fonts_url",
"heading_font",
"letter_spacing",
"line_height",
"mono_font",
"rationale",
"roles",
"scale_ratio"
]
}
}
}
# Ledgerline Editorial Systems shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `ledgerline-editorial-systems`
Slug: `ledgerline-editorial-systems`
## Intent
Ledgerline Editorial Systems translates magazine-grade hierarchy into dense operational dashboards for public-interest data teams. It behaves like a sober printed ledger: paper ground, ink typography, slate rules, and one restrained vermilion control color used only where a reader must act or compare a selected series.
## 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:
{
"accent": "#C43A25",
"active_blue": "#245F9D",
"background": "#F7F3EA",
"border": "#D7D0C3",
"error": "#A73328",
"hairline": "#BEB6A8",
"info": "#245F9D",
"muted": "#5F676D",
"paper_warm": "#F1EADF",
"primary": "#171A1C",
"secondary": "#4E5961",
"success": "#2F6F4F",
"surface": "#FFFDF8",
"text": "#171A1C",
"warning": "#A16B18"
}
Typography:
{
"base_size": "16px",
"body_font": "Atkinson Hyperlegible",
"fallback_strategy": "Bitter falls back to Georgia and serif; Atkinson Hyperlegible falls back to system-ui and Arial; Azeret Mono falls back to ui-monospace and SFMono-Regular. If web fonts fail, role contrast remains through serif display, readable sans body, and monospaced tabular data.",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&family=Azeret+Mono:wght@400;500;600&family=Bitter:wght@500;650;700&display=swap",
"heading_font": "Bitter",
"letter_spacing": "-0.02em",
"line_height": 1.56,
"mono_font": "Azeret Mono",
"rationale": "Bitter gives magazine authority without fashion-editorial fragility, Atkinson Hyperlegible protects dense accessibility, and Azeret Mono separates quantitative reading from prose.",
"roles": {
"body": "Atkinson Hyperlegible 400, 16px, -0.02em tracking, 1.56 line-height, 62ch measure for explanations and captions.",
"data": "Azeret Mono 500, tabular-nums, 13-14px, -0.02em tracking for dense tables and chart labels.",
"display": "Bitter 650-700, -0.035em tracking, 1.12 line-height, max 10 words per line for narrative dashboard headers.",
"numerals": "Azeret Mono with font-variant-numeric: tabular-nums lining-nums; align decimals and use ink for primary, muted slate for secondary.",
"ui_labels": "Atkinson Hyperlegible 700, 11-12px, 0.04em tracking, uppercase only for persistent chrome and table headers; contrast must exceed 4.5:1."
},
"scale_ratio": 1.22
}
## Visual character to preserve
- A fixed-width left folio rail uses 1px slate rules plus a 4px vermilion active segment, creating editorial navigation without rounded pills.
- Dashboard regions are separated by horizontal ledger rules and column-spanning captions instead of shadowed cards; surfaces stay nearly flat paper.
- Tables use tabular numerals, alternating rule weights, and tight 6px row clusters so dense enterprise data remains scannable.
- Narrative headers sit in a disciplined 62ch measure with small source notes and deck copy; display type contrasts with readable UI text rather than just scaling larger.
- Charts use restrained ink strokes, one selected vermilion series, visible axis labels, and caption/source blocks attached directly below the plot.
## ShadSync visual profile
{
"family": "paper-collage",
"material": "paper",
"contour": "pebble",
"border": "solid",
"underlay": true,
"grain": true,
"stickerBadges": true,
"motion": "still",
"density": "dense",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
}
## Signature component recipes
### Button
Use `Button` for primary, secondary, outline, and ghost actions. Primary actions must expose the language's strongest contrast pair, while secondary and ghost actions should preserve the surface treatment instead of falling back to default neutral SaaS styling.
### Card
Use `Card`, `CardHeader`, `CardContent`, `CardFooter`, and `CardAction` as the main composition frame. Cards should demonstrate the language's surface, border, hierarchy, and density rules rather than appearing as generic rounded rectangles.
### Input and Textarea
Use `Input` and `Textarea` with visible focus rings, field labels, validation states, and the language's rhythm. Forms should show real product content, not placeholder-only controls.
### Select, Tabs, and Table
Use `Select`, `Tabs`, and `Table` to prove navigation, filtering, and dense data states. The table should show row rhythm, separators, hover/focus states, and an empty or status state when the language calls for it.
### Dialog and Sheet
Use `Dialog` for centered decisions and `Sheet` for contextual editing. Both should inherit the language's spacing, border, overlay, and motion rules.
## Preview shots
- `application-shell`: dashboard or workspace shell with navigation, cards, forms, and state badges.
- `detail-editor`: focused editing flow using input, textarea, select, switch/checkbox, dialog or sheet, and action buttons.
- `data-operations`: table-heavy operational view with tabs, dropdown menu affordances, badges, and destructive/empty states.
- Each preview shot must include a renderable `scene` payload with concrete headline, description, actions, and rows/fields/stats for the UI preview.
## Implementation contract
- Start from local `ui/src/components/ui` shadcn-style primitives; do not create a second component system.
- Apply `/katagami/shadcn/ledgerline-editorial-systems/registry-theme.json` variables, then use these recipes for composition and state design.
- Preserve Katagami token names as source metadata; shadcn semantic names are only the export surface.
- Do: Use Bitter for narrative headers and Atkinson Hyperlegible for all product text so editorial character never harms legibility.; Attach captions, units, and source notes to every visualization and dense table.; Use the vermilion accent only for active navigation, selected controls, focus outlines, or one selected chart series.; Maintain WCAG AA contrast for metadata, captions, labels, legends, and table headers; do not fade secondary text below usable contrast.; Group related controls within 8-12px and separate unrelated analysis blocks by 64px or more.; Use square surfaces, hairline rules, and tabular numerals as the recognizable structural signature.; Make semantic status colors redundant with text labels, icons, or row annotations.
- Do not: Do not use generic gradient hero surfaces, bento icon boxes, nested rounded stat cards, or decorative grid backgrounds.; Do not create three equal cards in a row; one analysis region must dominate and another must be dense.; Do not apply vermilion to every important number; reserve it for selection or critical intervention.; Do not make captions, metadata, table labels, or navigation smaller than real product readability allows.; Do not use pulsing-dot pills, gradient keyword emphasis, floating blobs, glassmorphism, or synthetic accent triads.; Do not rely on color alone for state, status, or chart meaning.; Do not let display tracking become tight and billboard-like; this is a working dashboard, not a launch page.
## Copy-paste component example
This generated starter proves the import shape. Production Katagami agents should replace it with a language-specific product composition.
```tsx
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
export function LedgerlineEditorialSystemsShadcnKit() {
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">Ledgerline Editorial Systems</h2>
<p className="mt-1 max-w-xl text-sm text-muted-foreground">
Use the Katagami registry theme, then compose these shadcn primitives
with the language-specific component recipes.
</p>
</div>
<Button>Apply theme</Button>
</div>
<Tabs defaultValue="components">
<TabsList>
<TabsTrigger value="components">Components</TabsTrigger>
<TabsTrigger value="states">States</TabsTrigger>
<TabsTrigger value="export">Export</TabsTrigger>
</TabsList>
</Tabs>
<Card>
<CardHeader>
<CardTitle>Component recipe</CardTitle>
<CardDescription>
Replace this starter content with the agent-authored product scene
from components.md and preview-shots.json.
</CardDescription>
</CardHeader>
<CardContent className="grid gap-3 sm:grid-cols-[1fr_auto]">
<Input defaultValue="Tokenized shadcn surface" aria-label="Recipe name" />
<Button variant="secondary">Preview state</Button>
</CardContent>
<CardFooter className="justify-between">
<Badge>Ready</Badge>
<Button variant="outline">Copy recipe</Button>
</CardFooter>
</Card>
</section>
);
}
```
## Layout notes
{
"breakpoints": "1440 desktop: rail plus two-column analytical grid; 768 tablet: rail compresses to top folio bar and content becomes single column; 375 mobile: all controls stack, tables become horizontally scrollable, captions stay visible.",
"density": "High-density dashboard workspaces with a dominant chart and dense adjacent operations list; tiny clusters at 4-8px and major editorial breaks at 64-96px satisfy an 8:1 rhythm.",
"grid": "Desktop uses 72px folio rail plus 12-column content grid with 24px gutters and max-width 1320px; dominant visualization spans 7 columns while table/queue spans 5.",
"whitespace": "Whitespace is editorial, not empty: prose keeps 62ch measure, chart margins reserve room for labels, and unrelated sections separate with 64px rule-led pauses."
}
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"generator": "katagami-ui-compatibility-projection",
"generatedBy": "katagami-ui-projection",
"requiresVisualProfile": true,
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"language": {
"id": "ledgerline-editorial-systems",
"name": "Ledgerline Editorial Systems",
"slug": "ledgerline-editorial-systems"
},
"installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
"primitives": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"identityNotes": [
"A fixed-width left folio rail uses 1px slate rules plus a 4px vermilion active segment, creating editorial navigation without rounded pills.",
"Dashboard regions are separated by horizontal ledger rules and column-spanning captions instead of shadowed cards; surfaces stay nearly flat paper.",
"Tables use tabular numerals, alternating rule weights, and tight 6px row clusters so dense enterprise data remains scannable.",
"Narrative headers sit in a disciplined 62ch measure with small source notes and deck copy; display type contrasts with readable UI text rather than just scaling larger.",
"Charts use restrained ink strokes, one selected vermilion series, visible axis labels, and caption/source blocks attached directly below the plot."
],
"visualProfile": {
"family": "paper-collage",
"material": "paper",
"contour": "pebble",
"border": "solid",
"underlay": true,
"grain": true,
"stickerBadges": true,
"motion": "still",
"density": "dense",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
},
"shots": [
{
"id": "application-shell",
"title": "Application shell",
"viewport": "desktop",
"primitives": [
"button",
"card",
"input",
"select",
"tabs",
"badge",
"separator",
"table"
],
"composition": "A real product workspace with navigation, summary cards, filtering controls, and one dense content region.",
"mustShow": [
"primary and secondary actions",
"card hierarchy",
"filterable state",
"table or list density"
],
"avoid": [
"component inventory walls",
"placeholder-only content",
"generic rounded SaaS chrome"
],
"scene": {
"eyebrow": "workspace spread",
"headline": "Ledgerline Editorial Systems launch room",
"description": "A product team workspace where navigation, filters, metrics, and dense rows carry the language's visible structure.",
"primaryAction": "Apply theme",
"secondaryAction": "Review states",
"stats": [
{
"label": "components",
"value": "16",
"tone": "accent"
},
{
"label": "states",
"value": "ready"
},
{
"label": "density",
"value": "balanced",
"tone": "warning"
}
],
"rows": [
{
"label": "Primary flow",
"value": "mapped",
"status": "active"
},
{
"label": "Token coverage",
"value": "semantic",
"status": "synced"
},
{
"label": "Responsive proof",
"value": "queued",
"status": "review"
}
],
"statuses": [
"Active",
"Synced",
"Draft"
]
}
},
{
"id": "detail-editor",
"title": "Detail editor",
"viewport": "tablet",
"primitives": [
"button",
"card",
"input",
"textarea",
"select",
"checkbox",
"switch",
"slider",
"dialog",
"sheet"
],
"composition": "A focused editing flow with form fields, validation, confirmation, and a contextual side panel.",
"mustShow": [
"focus ring",
"error or destructive state",
"dialog or sheet treatment",
"written guidance content"
],
"avoid": [
"unstyled browser controls",
"floating cards inside cards",
"missing labels"
],
"scene": {
"eyebrow": "editing flow",
"headline": "Language recipe editor",
"description": "A focused form proving labels, validation, toggles, panel rhythm, and action hierarchy.",
"primaryAction": "Save recipe",
"secondaryAction": "Open sheet",
"fields": [
{
"label": "Component family",
"value": "Narrative cards"
},
{
"label": "State treatment",
"value": "Visible focus + validation"
},
{
"label": "Motion",
"value": "Small lift, no opacity-only fade"
}
],
"statuses": [
"Focus",
"Invalid",
"Confirmed"
]
}
},
{
"id": "data-operations",
"title": "Data operations",
"viewport": "mobile",
"primitives": [
"button",
"tabs",
"badge",
"dropdown-menu",
"table",
"tooltip",
"separator"
],
"composition": "A compact operational view proving row rhythm, stacked actions, menu states, badges, and empty/destructive states.",
"mustShow": [
"responsive reflow",
"dense row styling",
"menu affordance",
"status badge system"
],
"avoid": [
"desktop-only tables",
"text overflow",
"default shadcn spacing without Katagami character"
],
"scene": {
"eyebrow": "operations",
"headline": "Compact review queue",
"description": "A narrow viewport scene with rows, menus, tooltips, badges, and destructive affordances.",
"primaryAction": "Resolve",
"secondaryAction": "Filter",
"rows": [
{
"label": "Button hierarchy",
"value": "approved",
"status": "ok"
},
{
"label": "Table rhythm",
"value": "needs pass",
"status": "watch"
},
{
"label": "Empty state",
"value": "designed",
"status": "done"
}
],
"statuses": [
"Queued",
"Blocked",
"Done"
]
}
}
],
"componentRecipes": [
{
"primitive": "button",
"intent": "Prove action hierarchy, focus, disabled, and destructive states."
},
{
"primitive": "card",
"intent": "Carry the language surface, border, elevation, and density rules."
},
{
"primitive": "input",
"intent": "Show labels, focus rings, validation, and spacing rhythm."
},
{
"primitive": "textarea",
"intent": "Show longer guidance, validation copy, and writing density."
},
{
"primitive": "select",
"intent": "Show filtering, selection contrast, and menu trigger styling."
},
{
"primitive": "dialog",
"intent": "Show centered decision states and overlay treatment."
},
{
"primitive": "sheet",
"intent": "Show contextual side panels and responsive editing."
},
{
"primitive": "tabs",
"intent": "Show navigational structure and active/inactive contrast."
},
{
"primitive": "badge",
"intent": "Show compact status vocabulary and semantic colors."
},
{
"primitive": "separator",
"intent": "Show section rhythm without generic gray dividers."
},
{
"primitive": "checkbox",
"intent": "Show binary selection with visible focus and checked states."
},
{
"primitive": "switch",
"intent": "Show settings toggles and on/off contrast."
},
{
"primitive": "slider",
"intent": "Show numeric adjustment with track/thumb styling."
},
{
"primitive": "tooltip",
"intent": "Show concise explanation styling above compact controls."
},
{
"primitive": "dropdown-menu",
"intent": "Show action menus, destructive items, and grouped choices."
},
{
"primitive": "table",
"intent": "Show dense operational data, separators, row states, and responsive behavior."
}
],
"qualityRules": {
"do": [
"Use Bitter for narrative headers and Atkinson Hyperlegible for all product text so editorial character never harms legibility.",
"Attach captions, units, and source notes to every visualization and dense table.",
"Use the vermilion accent only for active navigation, selected controls, focus outlines, or one selected chart series.",
"Maintain WCAG AA contrast for metadata, captions, labels, legends, and table headers; do not fade secondary text below usable contrast.",
"Group related controls within 8-12px and separate unrelated analysis blocks by 64px or more.",
"Use square surfaces, hairline rules, and tabular numerals as the recognizable structural signature.",
"Make semantic status colors redundant with text labels, icons, or row annotations."
],
"dont": [
"Do not use generic gradient hero surfaces, bento icon boxes, nested rounded stat cards, or decorative grid backgrounds.",
"Do not create three equal cards in a row; one analysis region must dominate and another must be dense.",
"Do not apply vermilion to every important number; reserve it for selection or critical intervention.",
"Do not make captions, metadata, table labels, or navigation smaller than real product readability allows.",
"Do not use pulsing-dot pills, gradient keyword emphasis, floating blobs, glassmorphism, or synthetic accent triads.",
"Do not rely on color alone for state, status, or chart meaning.",
"Do not let display tracking become tight and billboard-like; this is a working dashboard, not a launch page."
]
}
}