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.
Build around a command spine, an operational log, and adjacent inspection panes; hierarchy comes from pane scale and syntax grouping rather than decorative frames.
Use compact Sora section labels, monospaced command lines, tabular metrics, and restrained semantic color so users can parse state, action, and evidence at a glance.
High information density is allowed, but rows must breathe with an 8px rhythm, quiet graphite zebra, and grouped whitespace so the interface stays calm.
Desktop uses a 12-column product shell with a command rail, a primary log/main, and an inspector; mobile collapses into stacked terminal packets without square-grid backgrounds.
Whitespace is narrow but intentional: 8px row rhythm, 16px pane padding, and 24-32px macro gaps around primary operational zones.
dense but calm
Every artifact renders from ~390px mobile (single column, terminal packets) to 2560px+ ultra-wide (capped, centred content; only the hero spans 100vw).
graphite-console
Subjects rendered as if inspected through a precision operations workstation: cool graphite tonality over a deep ink field, broad horizontal scan bands, fine cyan edge highlights, and syntax-color annotation tags (amber command, cyan data, violet selection) with one translucent violet selection mask.
Use for full-bleed landing heroes and section imagery. Keep the subject filling the frame; annotation tags map to semantic syntax roles; never let a device bezel become the subject; no text, letters, or logos.
# Caret Ledger ## Philosophy Caret Ledger turns terminal fluency into a premium operations product language: command-first, log-aware, dense but calm, with color reserved for semantic structure rather than retro decoration. Every action is a line you can read back. ### Values - Command surfaces should make complex operations feel inspectable, reversible, and fast. - Terminal references must become useful product structure, not nostalgic costume or hacker theater. - Dense information can feel calm when typography, separators, and semantic color are disciplined. - Hardware-era affordances should appear as tactile control geometry and status modules, not arcade chrome. ### Anti-Values - No vaporwave, cyberpunk glow, novelty CRT filters, or illegible green-on-black hacker aesthetics. - No square-grid wallpaper, dotted default texture, decorative side rails, rainbow sprawl, or color used as garnish. - No generic SaaS card dashboard with terminal labels pasted on top. ### Visual Character - Deep cool-graphite ink ground uses broad horizontal luminance bands and soft radial panel light, never square grids or dotted texture. - Panels are translucent graphite fills with one-pixel cool borders, clipped-corner radii, and inset highlight lines that recall workstation hardware. - Typography pairs compact geometric Sora labels with crisp Azeret Mono command text, using tabular numerals and measured negative letter spacing. - Semantic syntax color is limited to amber commands, cyan data, violet selection, plus quiet green/yellow/red/blue state across code-like content. - Interactive controls use a bracket focus outline, a prompt glyph, segmented mode pills, and quiet status chips instead of decorative stripes. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#101318` | | surface | `#181D24` | | surface_2 | `#1F2630` | | text | `#E7E1D4` | | muted | `#8D96A3` | | border | `#303845` | | accent | `#9B8CFF` | | accent_command | `#E7A84B` | | accent_data | `#5BC8D6` | | primary | `#E7A84B` | | on_accent | `#101318` | | success | `#79D18B` | | warning | `#F0C35B` | | error | `#EF6F6C` | | info | `#6BC7F1` | ### Typography - **Base Size**: 17px - **Body Font**: Sora - **Heading Font**: Sora - **Mono Font**: Azeret Mono - **Heading Weight**: 600 - **Heading Transform**: none - **Letter Spacing**: -0.018em - **Line Height**: 1.48 - **Scale Ratio**: 1.2 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Azeret+Mono:wght@400;500;600;700&family=Sora:wght@400;500;600;700&display=swap ### Radii - **None**: 0 - **Sm**: 3px - **Md**: 7px - **Lg**: 12px - **Full**: 9999px - **Clip**: 10px ### Shadows - **Sm**: 0 1px 0 rgba(255,255,255,0.04), 0 10px 24px rgba(0,0,0,0.20) - **Md**: 0 1px 0 rgba(255,255,255,0.05), 0 18px 48px rgba(0,0,0,0.30) - **Lg**: 0 1px 0 rgba(255,255,255,0.06), 0 32px 90px rgba(0,0,0,0.42) ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64] ### Surfaces - **Treatment**: Translucent graphite panels over a near-black ink field with broad horizontal banding, subtle inner highlights, and no default dot or square-grid texture. - **Card Style**: Low-radius clipped-corner workstation modules with a one-pixel inner highlight, a command/hardware header, and compact metadata rows. - **Bg Pattern**: Layered radial panel light plus oversized horizontal scan bands at very low opacity; never a square grid and never a repeated dotted pattern. ### Borders - **Default Width**: 1px - **Accent Width**: 2px - **Style**: graphite separators and inset highlights with a bracket focus outline on active entry - **Character**: Cool graphite separators define structure; accent edges appear only for active focus, selection, warnings, or terminal prompt affordances — never as card rails. ### Motion - **Duration**: 160ms - **Easing**: cubic-bezier(0.2, 0.8, 0.2, 1) - **Philosophy**: Motion is operational and minimal: panels clarify state with short opacity/translate changes, command focus snaps into place, and logs stream without theatrical glitch. The settled state renders with no JavaScript; motion is layered on top and respects prefers-reduced-motion. ## Rules ### Composition Build around a command spine, an operational log, and adjacent inspection panes; hierarchy comes from pane scale and syntax grouping rather than decorative frames. ### Hierarchy Use compact Sora section labels, monospaced command lines, tabular metrics, and restrained semantic color so users can parse state, action, and evidence at a glance. ### Density High information density is allowed, but rows must breathe with an 8px rhythm, quiet graphite zebra, and grouped whitespace so the interface stays calm. ### Signature - Command input bars include a fixed prompt glyph, segmented mode pills, and a bracket focus outline that appears only during active entry. - Log streams use semantic syntax spans for actor, action, object, timestamp, and state, with color doing structural parsing rather than decoration. - Panels use clipped-corner masks, one-pixel inner highlights, and small hardware labels to create workstation material without nostalgic ornament. - Active selections appear as translucent violet fills with paired top-and-bottom rules, never as side stripes or colored card rails. - Data tables compress into terminal packets on mobile, preserving command labels and semantic status chips instead of becoming generic cards. ## Layout ### Grid Desktop uses a 12-column product shell with a command rail, a primary log/main, and an inspector; mobile collapses into stacked terminal packets without square-grid backgrounds. ### Whitespace Whitespace is narrow but intentional: 8px row rhythm, 16px pane padding, and 24-32px macro gaps around primary operational zones. ### Density dense but calm ### Responsive Every artifact renders from ~390px mobile (single column, terminal packets) to 2560px+ ultra-wide (capped, centred content; only the hero spans 100vw). ### Breakpoints - **Mobile**: 390px - **Tablet**: 760px - **Desktop**: 1100px - **Wide**: 1440px ## Guidance ### Do - Use semantic syntax color for commands, data, selected state, success, warning, error, and informational values. - Keep surfaces clean with horizontal luminance bands and translucent graphite panels; justify every texture as state or material. - Design scene-first operational workflows such as deploy consoles, AI runbooks, observability workbenches, or data command centers. - Use bracket focus, prompt glyphs, clipped corners, and compact labels as the recurring product grammar. ### Don't - Do not use square-grid backgrounds, default dotted textures, decorative side rails, colored card stripes, or arbitrary confetti. - Do not turn the language into vaporwave, cyberpunk, arcade CRT, or green hacker nostalgia. - Do not spread accent colors across unrelated decoration; every color must identify state, syntax, or interaction. - Do not rely on generic dashboard cards without command, log, or inspection behavior. ### Accessibility Body text rides at 17px with high contrast on the ink ground (text #E7E1D4 on #101318). Every form control is explicitly styled — no browser defaults. Focus is a visible amber bracket or violet ring. State is never carried by color alone: status chips and log states pair color with a text label. Motion respects prefers-reduced-motion and the settled state renders without JavaScript. ## Imagery Direction ### Pairs With graphite-console ### Summary Subjects rendered as if inspected through a precision operations workstation: cool graphite tonality over a deep ink field, broad horizontal scan bands, fine cyan edge highlights, and syntax-color annotation tags (amber command, cyan data, violet selection) with one translucent violet selection mask. ### Subjects - command spines feeding stacked ledger bars - operational nodes and edges under inspection - machined control surfaces and status modules - deploy and runbook scenes parsed by the console ### Usage Use for full-bleed landing heroes and section imagery. Keep the subject filling the frame; annotation tags map to semantic syntax roles; never let a device bezel become the subject; no text, letters, or logos.
---
version: "alpha"
name: "Caret Ledger"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#101318"
surface: "#181D24"
surface_2: "#1F2630"
text: "#E7E1D4"
muted: "#8D96A3"
border: "#303845"
accent: "#9B8CFF"
accent_command: "#E7A84B"
accent_data: "#5BC8D6"
primary: "#E7A84B"
on_accent: "#101318"
success: "#79D18B"
warning: "#F0C35B"
error: "#EF6F6C"
info: "#6BC7F1"
typography:
headline-lg:
fontFamily: "Sora"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.018em"
headline-md:
fontFamily: "Sora"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.018em"
body-md:
fontFamily: "Sora"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.018em"
label-md:
fontFamily: "Azeret Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
sm: "3px"
md: "7px"
lg: "12px"
full: "9999px"
clip: "10px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_2:
backgroundColor: "{colors.surface_2}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-accent_command:
backgroundColor: "{colors.accent_command}"
color-reference-accent_data:
backgroundColor: "{colors.accent_data}"
color-reference-primary:
backgroundColor: "{colors.primary}"
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.primary}"
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"
---
# Caret Ledger
## Overview
Caret Ledger turns terminal fluency into a premium operations product language: command-first, log-aware, dense but calm, with color reserved for semantic structure rather than retro decoration. Every action is a line you can read back.
### Values
- Command surfaces should make complex operations feel inspectable, reversible, and fast.
- Terminal references must become useful product structure, not nostalgic costume or hacker theater.
- Dense information can feel calm when typography, separators, and semantic color are disciplined.
- Hardware-era affordances should appear as tactile control geometry and status modules, not arcade chrome.
### Anti-Values
- No vaporwave, cyberpunk glow, novelty CRT filters, or illegible green-on-black hacker aesthetics.
- No square-grid wallpaper, dotted default texture, decorative side rails, rainbow sprawl, or color used as garnish.
- No generic SaaS card dashboard with terminal labels pasted on top.
### Visual Character
- Deep cool-graphite ink ground uses broad horizontal luminance bands and soft radial panel light, never square grids or dotted texture.
- Panels are translucent graphite fills with one-pixel cool borders, clipped-corner radii, and inset highlight lines that recall workstation hardware.
- Typography pairs compact geometric Sora labels with crisp Azeret Mono command text, using tabular numerals and measured negative letter spacing.
- Semantic syntax color is limited to amber commands, cyan data, violet selection, plus quiet green/yellow/red/blue state across code-like content.
- Interactive controls use a bracket focus outline, a prompt glyph, segmented mode pills, and quiet status chips instead of decorative stripes.
## 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 | `#101318` |
| surface | `#181D24` |
| surface_2 | `#1F2630` |
| text | `#E7E1D4` |
| muted | `#8D96A3` |
| border | `#303845` |
| accent | `#9B8CFF` |
| accent_command | `#E7A84B` |
| accent_data | `#5BC8D6` |
| primary | `#E7A84B` |
| on_accent | `#101318` |
| success | `#79D18B` |
| warning | `#F0C35B` |
| error | `#EF6F6C` |
| info | `#6BC7F1` |
## Typography
- **Headline-Lg**: Sora, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Sora, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Sora, 17px, weight 400, line-height 1.5.
- **Label-Md**: Azeret 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`
### Grid
Desktop uses a 12-column product shell with a command rail, a primary log/main, and an inspector; mobile collapses into stacked terminal packets without square-grid backgrounds.
### Whitespace
Whitespace is narrow but intentional: 8px row rhythm, 16px pane padding, and 24-32px macro gaps around primary operational zones.
### Density
dense but calm
### Responsive
Every artifact renders from ~390px mobile (single column, terminal packets) to 2560px+ ultra-wide (capped, centred content; only the hero spans 100vw).
### Breakpoints
- **Mobile**: 390px
- **Tablet**: 760px
- **Desktop**: 1100px
- **Wide**: 1440px
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 0 rgba(255,255,255,0.04), 0 10px 24px rgba(0,0,0,0.20)
- **Md**: 0 1px 0 rgba(255,255,255,0.05), 0 18px 48px rgba(0,0,0,0.30)
- **Lg**: 0 1px 0 rgba(255,255,255,0.06), 0 32px 90px rgba(0,0,0,0.42)
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `3px`
- **Md**: `7px`
- **Lg**: `12px`
- **Full**: `9999px`
- **Clip**: `10px`
### Surfaces
- **Treatment**: Translucent graphite panels over a near-black ink field with broad horizontal banding, subtle inner highlights, and no default dot or square-grid texture.
- **Card Style**: Low-radius clipped-corner workstation modules with a one-pixel inner highlight, a command/hardware header, and compact metadata rows.
- **Bg Pattern**: Layered radial panel light plus oversized horizontal scan bands at very low opacity; never a square grid and never a repeated dotted pattern.
### Borders
- **Default Width**: 1px
- **Accent Width**: 2px
- **Style**: graphite separators and inset highlights with a bracket focus outline on active entry
- **Character**: Cool graphite separators define structure; accent edges appear only for active focus, selection, warnings, or terminal prompt affordances — never as card rails.
## Components
### Composition
Build around a command spine, an operational log, and adjacent inspection panes; hierarchy comes from pane scale and syntax grouping rather than decorative frames.
### Hierarchy
Use compact Sora section labels, monospaced command lines, tabular metrics, and restrained semantic color so users can parse state, action, and evidence at a glance.
### Density
High information density is allowed, but rows must breathe with an 8px rhythm, quiet graphite zebra, and grouped whitespace so the interface stays calm.
### Signature
- Command input bars include a fixed prompt glyph, segmented mode pills, and a bracket focus outline that appears only during active entry.
- Log streams use semantic syntax spans for actor, action, object, timestamp, and state, with color doing structural parsing rather than decoration.
- Panels use clipped-corner masks, one-pixel inner highlights, and small hardware labels to create workstation material without nostalgic ornament.
- Active selections appear as translucent violet fills with paired top-and-bottom rules, never as side stripes or colored card rails.
- Data tables compress into terminal packets on mobile, preserving command labels and semantic status chips instead of becoming generic cards.
## 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-019ef9ad-bb34-7241-9fb2-8b5ce772e041/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 semantic syntax color for commands, data, selected state, success, warning, error, and informational values.
- Do Keep surfaces clean with horizontal luminance bands and translucent graphite panels; justify every texture as state or material.
- Do Design scene-first operational workflows such as deploy consoles, AI runbooks, observability workbenches, or data command centers.
- Do Use bracket focus, prompt glyphs, clipped corners, and compact labels as the recurring product grammar.
- Don't Do not use square-grid backgrounds, default dotted textures, decorative side rails, colored card stripes, or arbitrary confetti.
- Don't Do not turn the language into vaporwave, cyberpunk, arcade CRT, or green hacker nostalgia.
- Don't Do not spread accent colors across unrelated decoration; every color must identify state, syntax, or interaction.
- Don't Do not rely on generic dashboard cards without command, log, or inspection behavior.
### Accessibility
Body text rides at 17px with high contrast on the ink ground (text #E7E1D4 on #101318). Every form control is explicitly styled — no browser defaults. Focus is a visible amber bracket or violet ring. State is never carried by color alone: status chips and log states pair color with a text label. Motion respects prefers-reduced-motion and the settled state renders without JavaScript.
## Imagery Direction
### Pairs With
graphite-console
### Summary
Subjects rendered as if inspected through a precision operations workstation: cool graphite tonality over a deep ink field, broad horizontal scan bands, fine cyan edge highlights, and syntax-color annotation tags (amber command, cyan data, violet selection) with one translucent violet selection mask.
### Subjects
- command spines feeding stacked ledger bars
- operational nodes and edges under inspection
- machined control surfaces and status modules
- deploy and runbook scenes parsed by the console
### Usage
Use for full-bleed landing heroes and section imagery. Keep the subject filling the frame; annotation tags map to semantic syntax roles; never let a device bezel become the subject; no text, letters, or logos.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "caret-ledger",
"type": "registry:theme",
"title": "Caret Ledger shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#101318",
"foreground": "#E7E1D4",
"card": "#181D24",
"card-foreground": "#E7E1D4",
"popover": "#181D24",
"popover-foreground": "#E7E1D4",
"primary": "#E7A84B",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#8D96A3",
"muted-foreground": "#E7E1D4",
"accent": "#9B8CFF",
"accent-foreground": "#ffffff",
"destructive": "#EF6F6C",
"border": "#303845",
"input": "#303845",
"ring": "#9B8CFF",
"chart-1": "#E7A84B",
"chart-2": "#f4f4f5",
"chart-3": "#9B8CFF",
"chart-4": "#79D18B",
"chart-5": "#F0C35B",
"sidebar": "#181D24",
"sidebar-foreground": "#E7E1D4",
"sidebar-primary": "#E7A84B",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#6BC7F1",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303845",
"sidebar-ring": "#9B8CFF",
"radius": "7px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#E7A84B",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#9B8CFF",
"accent-foreground": "#ffffff",
"destructive": "#EF6F6C",
"border": "#303642",
"input": "#303642",
"ring": "#9B8CFF",
"chart-1": "#E7A84B",
"chart-2": "#f4f4f5",
"chart-3": "#9B8CFF",
"chart-4": "#79D18B",
"chart-5": "#F0C35B",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#E7A84B",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#9B8CFF",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#9B8CFF",
"radius": "7px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ef9ad-bb34-7241-9fb2-8b5ce772e041",
"slug": "caret-ledger",
"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_command",
"accent_data",
"bg",
"border",
"error",
"info",
"muted",
"on_accent",
"primary",
"success",
"surface",
"surface_2",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
],
"radii": [
"clip",
"full",
"lg",
"md",
"none",
"sm"
],
"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 Caret Ledgerand swap a palette and an art style onto it — the landing & dashboard recolor live. The Studio does the same with all three lanes free.
Agent-authored scenes, component recipes, and visual profile rendered on local shadcn-style primitives.
A command-first console: queue a deploy, watch the log stream parse state, and read the release ledger.
A command form proving mono labels, a bracket-focused command input, an invalid budget state, an auto-promote toggle, and a confirm.
A compact log with terminal packets, per-row menus, status chips, and a watch affordance.
Copy this when the target app uses shadcn/ui. It packages the Katagami DESIGN.md context with the install list, theme variables, component recipes, preview-shot contract, and starter TSX in one Markdown companion.
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table:root {
--background: #101318;
--foreground: #E7E1D4;
--card: #181D24;
--card-foreground: #E7E1D4;
--popover: #181D24;
--popover-foreground: #E7E1D4;
--primary: #E7A84B;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #8D96A3;
--muted-foreground: #E7E1D4;
--accent: #9B8CFF;
--accent-foreground: #ffffff;
--destructive: #EF6F6C;
--border: #303845;
--input: #303845;
--ring: #9B8CFF;
--chart-1: #E7A84B;
--chart-2: #f4f4f5;
--chart-3: #9B8CFF;
--chart-4: #79D18B;
--chart-5: #F0C35B;
--sidebar: #181D24;
--sidebar-foreground: #E7E1D4;
--sidebar-primary: #E7A84B;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #6BC7F1;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303845;
--sidebar-ring: #9B8CFF;
--radius: 7px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #E7A84B;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #9B8CFF;
--accent-foreground: #ffffff;
--destructive: #EF6F6C;
--border: #303642;
--input: #303642;
--ring: #9B8CFF;
--chart-1: #E7A84B;
--chart-2: #f4f4f5;
--chart-3: #9B8CFF;
--chart-4: #79D18B;
--chart-5: #F0C35B;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #E7A84B;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #9B8CFF;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #9B8CFF;
--radius: 7px;
}
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 CaretLedgerShadcnKit() {
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">Caret Ledger</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": "caret-ledger",
"type": "registry:theme",
"title": "Caret Ledger",
"description": "Command-first operations console. Cool-graphite dark ground with semantic syntax color — amber command, cyan data, violet selection — and green/yellow/red/blue for state. Sora display + Azeret Mono command voice; clipped-corner workstation panels with a one-pixel inner highlight; no borders or accent edges — structure comes from graphite separators, the command spine, and translucent selection masks with paired top-and-bottom rules.",
"cssVars": {
"theme": {
"font-sans": "Sora, system-ui, sans-serif",
"font-mono": "Azeret Mono, ui-monospace, monospace",
"font-display": "Sora, system-ui, sans-serif",
"font-heading": "Sora, system-ui, sans-serif",
"radius": "7px"
},
"dark": {
"background": "#101318",
"foreground": "#E7E1D4",
"card": "#181D24",
"card-foreground": "#E7E1D4",
"popover": "#1F2630",
"popover-foreground": "#E7E1D4",
"primary": "#E7A84B",
"primary-foreground": "#1A1206",
"secondary": "#1F2630",
"secondary-foreground": "#E7E1D4",
"accent": "#9B8CFF",
"accent-foreground": "#101318",
"muted": "#1F2630",
"muted-foreground": "#8D96A3",
"destructive": "#EF6F6C",
"destructive-foreground": "#101318",
"success": "#79D18B",
"warning": "#F0C35B",
"info": "#5BC8D6",
"border": "transparent",
"input": "#1F2630",
"ring": "#9B8CFF",
"radius": "7px"
}
}
}
# Caret Ledger shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-agent`
Slug: `caret-ledger`
## Intent
Caret Ledger is a command-first operations console language. Through shadcn/ui its one governing
idea — **every action is a readable line** — must survive: a prompt glyph leads command input, an
active field draws a **bracket focus outline** (never a glow ring), and the log parses into
**semantic syntax color** (amber command, cyan data, violet selection; green/yellow/red/blue for
state). The ground is cool-graphite dark; panels are **clipped-corner workstation modules** with a
one-pixel inner highlight and a small hardware label. **No borders, no accent edges, no colored
side rails** — separation comes from graphite separators, the command spine, soft shadow, and an
8px rhythm. Type pairs **Sora** (display + body) with **Azeret Mono** (command voice). Dark mode is
the point.
## Required primitives
- button
- card
- input
- textarea
- select
- dialog
- sheet
- tabs
- badge
- separator
- checkbox
- switch
- slider
- tooltip
- dropdown-menu
- table
Install with `npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table`.
## Token cues
Colors:
```json
{ "primary": "#E7A84B", "accent": "#9B8CFF", "data": "#5BC8D6", "background": "#101318", "surface": "#181D24", "recess": "#1F2630", "text": "#E7E1D4", "muted": "#8D96A3", "separator": "#303845", "success": "#79D18B", "warning": "#F0C35B", "error": "#EF6F6C", "info": "#6BC7F1" }
```
Typography:
```json
{ "heading_font": "Sora", "body_font": "Sora", "mono_font": "Azeret Mono", "letter_spacing": "-0.018em", "base_size": "17px" }
```
## Visual character to preserve
- **The command spine:** a fixed prompt glyph (`caret>`) leads command input; segmented mode pills
sit beside it; an active field draws a **bracket focus outline** in amber, not a ring or glow.
- **Semantic syntax color:** actor (cyan), action (amber), object (text), timestamp (muted), and
state (green/yellow/red/blue). Color is structural parsing, never decoration.
- **Clipped-corner graphite panels:** dark surface, one-pixel inner highlight, small hardware label;
**no border, no top rule, no colored side rail.** Never nest cards.
- **Selection is a translucent violet fill with paired top-and-bottom rules** — never a side stripe.
- **Density on an 8px rhythm:** quiet graphite zebra and grouped whitespace keep dense data calm.
- Mono (Azeret Mono) for commands, slugs, counts, and timestamps; Sora for everything else.
## ShadSync visual profile
```json
{ "family": "console", "material": "graphite", "contour": "clipped-corner", "border": "none", "underlay": true, "grain": false, "stickerBadges": false, "motion": "snap", "density": "dense", "accents": ["accent", "warning", "info"] }
```
## Signature component recipes
### Button
Primary `Button` = `--primary` (amber) with near-black text — the one emphasis; a secondary variant
is a graphite recess; a quiet variant is transparent. No `border`; clipped or square corners; a
prompt glyph (`>`) may lead the label. Buttons in a set share one height and shape, label centred,
mono uppercase.
### Card
`Card` is a clipped-corner graphite panel on the dark ground, lifted by soft shadow with a one-pixel
inner highlight and a small mono hardware label — no border, no top rule, no colored rail. A focal
card may carry a translucent violet selection fill with paired top-and-bottom rules. Never nest cards.
### Input and Textarea
`Input` / `Textarea` sit on the graphite recess (no border); active entry draws an **amber bracket
focus outline**; an invalid field draws a red inset. Mono labels above, real command values inside.
### Select, Tabs, and Table
`Select` filters targets/modes; `Tabs` switch run / plan / watch / rollback (the active pill is a
graphite fill, not an underline); `Table` is the release ledger — mono header, mono slug rows, quiet
graphite zebra, a semantic status `Badge` per row, a watch/empty state, and a mobile reflow into
terminal packets. No rule-lines — separation is the zebra and rhythm.
### Dialog and Sheet
`Dialog` is a clipped-corner graphite notice ("Queue this command?") — centered, generous, no border.
`Sheet` is the node / runbook inspector side rail. Both graphite/ink, no border.
### Badge, Switch, Slider, Tooltip, Separator, Checkbox, Dropdown-menu
`Badge` is a flat status chip on a faint syntax tint (green ok / cyan running / yellow watch / red
rolled-back / violet selected). `Switch` "on" is violet. `Slider` is a cyan track with a square cyan
thumb. `Tooltip` is concise mono. `Separator` is a one-pixel graphite line or open 8px rhythm —
never a colored rail. `Checkbox` and `dropdown-menu` carry a violet focus; the menu's destructive
item ("rollback") is red.
## Preview shots
- `application-shell`: the deploy console — command rail, command bar, KPI cards, semantic log stream, release ledger.
- `detail-editor`: queue a command — mono fields, a bracket-focused command input, an invalid budget state, an auto-promote switch, a canary slider, a confirm dialog.
- `data-operations`: stream packets — terminal-packet rows on mobile, dropdown actions, status chips, a watch state.
- Each preview shot carries a renderable `scene` (headline, description, actions, rows/fields/stats).
## Implementation contract
- Start from the local `@/components/ui/*` shadcn primitives; do not create a second component system.
- Apply `/katagami/shadcn/caret-ledger/registry-theme.json` variables first, then compose with these recipes.
- Keep Katagami token names as source metadata; shadcn semantic names are only the export surface.
- Do: lead command input with a prompt glyph + bracket focus; reserve amber/cyan/violet for command/data/selection; separate by graphite separators, the spine, shadow, and the 8px rhythm.
- Do not: add borders, accent edges, colored rails, or divider hairlines; use white/cream surfaces; round chrome into pill bars; nest cards; drift into vaporwave/cyberpunk/CRT/green-hacker styling.
## Copy-paste component example
This shows the import shape and a real Caret Ledger composition.
```tsx
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card";
// A node card: clipped-corner graphite panel, no border, lifted by shadow with a one-pixel
// inner highlight; a small mono hardware label; a translucent violet selection fill marks focus.
export function NodeCard() {
return (
<Card
className="relative border-0 bg-card text-card-foreground shadow-lg
[clip-path:polygon(10px_0,100%_0,100%_calc(100%-10px),calc(100%-10px)_100%,0_100%,0_10px)]"
>
<div className="p-6">
<CardHeader className="flex-row items-center justify-between p-0">
<span className="font-mono text-[10.5px] uppercase tracking-[0.16em] text-muted-foreground">
node · edge-3
</span>
<Badge className="rounded-sm bg-[rgba(240,195,91,0.12)] text-[var(--warning)]">watch</Badge>
</CardHeader>
<CardTitle className="mt-3 text-xl tracking-tight">edge-3</CardTitle>
<CardDescription className="font-mono text-xs uppercase tracking-wide text-muted-foreground">
us-east · v4.2.0
</CardDescription>
<CardContent className="px-0 pt-3 font-mono text-sm">
<span className="text-[var(--data)]">5xx 0.31%</span> · drains{" "}
<span className="text-[var(--data)]">2</span>
</CardContent>
<CardFooter className="justify-end px-0">
<Button className="rounded-sm">{">"} Drain node</Button>
</CardFooter>
</div>
</Card>
);
}
```
## Layout notes
```json
{ "grid": "12-column product shell — command rail, primary log/main, inspector; mobile collapses to stacked terminal packets", "density": "dense; 8px row rhythm, 16px pane padding, 24–32px macro gaps", "radii": "0 / 3 / 7 / 12 / 9999, plus a clipped-corner panel mask", "no_borders": true, "separators": "graphite separators, the command spine, soft shadow, an 8px rhythm, and a violet selection mask with paired top-and-bottom rules" }
```
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"author": "katagami-agent",
"generatedBy": "katagami-agent",
"requiresVisualProfile": true,
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"language": { "id": "", "name": "Caret Ledger", "slug": "caret-ledger" },
"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": [
"Command-first: a fixed prompt glyph (caret>) leads command input; an active field draws a bracket focus outline, never a glowing ring.",
"Semantic syntax color does the parsing — amber=command, cyan=data, violet=selection; green/yellow/red/blue carry state. Color is never decoration.",
"Cool-graphite dark ground; clipped-corner workstation panels with a one-pixel inner highlight and a small hardware label; no borders, no accent edges, no colored side rails.",
"Selection is a translucent violet fill with paired top-and-bottom rules; rows breathe on an 8px rhythm with quiet zebra, not divider lines."
],
"visualProfile": {
"family": "console",
"material": "graphite",
"contour": "clipped-corner",
"border": "none",
"underlay": true,
"grain": false,
"stickerBadges": false,
"motion": "snap",
"density": "dense",
"accents": ["accent", "warning", "info"]
},
"shots": [
{
"id": "application-shell",
"title": "The deploy console",
"viewport": "desktop",
"primitives": ["button", "card", "input", "select", "tabs", "badge", "separator", "table"],
"composition": "An operations workbench: a command rail, a command bar with prompt glyph and mode pills, KPI cards on clipped-corner graphite panels, a semantic-syntax log stream, and the release ledger with status badges.",
"mustShow": ["amber primary action vs graphite secondary action", "clipped-corner graphite cards with a one-pixel inner highlight, no borders", "semantic log spans (cyan actor / amber action / colored state)", "a violet selection row with paired top-and-bottom rules"],
"avoid": ["borders, divider hairlines, accent side edges, or colored card rails", "white or cream surfaces", "glow rings, CRT scanlines, green-on-black hacker text", "rounded pill chrome around the nav"],
"scene": {
"eyebrow": "workbench",
"headline": "Deploy console — prod-edge",
"description": "A command-first console: queue a deploy, watch the log stream parse state, and read the release ledger.",
"primaryAction": "Run deploy",
"secondaryAction": "Open runbook",
"stats": [
{ "label": "p99 latency", "value": "214ms", "tone": "info" },
{ "label": "availability 30d", "value": "99.98%", "tone": "success" },
{ "label": "deploys", "value": "128", "tone": "accent" }
],
"rows": [
{ "label": "prod-edge v4.2", "value": "rita · 58s", "status": "done" },
{ "label": "cache-warm", "value": "scheduler · 12s", "status": "running" },
{ "label": "edge-3 drain", "value": "gate · 04s", "status": "watch" },
{ "label": "schema migrate", "value": "rita · 31s", "status": "rolled back" }
],
"statuses": ["Done", "Running", "Watch", "Rolled back"]
}
},
{
"id": "detail-editor",
"title": "Queue a command",
"viewport": "tablet",
"primitives": ["button", "card", "input", "textarea", "select", "checkbox", "switch", "slider", "dialog", "sheet"],
"composition": "A command form: mono-labelled fields, a command input with bracket focus, an invalid (red) budget state, an auto-promote switch, a canary-share slider, a require-gate checkbox, and a send-confirm dialog.",
"mustShow": ["bracket focus on the active field (no glow ring)", "an invalid (red) inset state", "the canary-share slider with a square cyan thumb", "a send-confirm dialog as a clipped-corner graphite notice"],
"avoid": ["unstyled browser controls", "missing labels", "nested cards", "rounded inputs with borders"],
"scene": {
"eyebrow": "controls",
"headline": "Queue — deploy prod-edge",
"description": "A command form proving mono labels, a bracket-focused command input, an invalid budget state, an auto-promote toggle, and a confirm.",
"primaryAction": "Queue command",
"secondaryAction": "Reset",
"fields": [
{ "label": "target", "value": "prod-edge", "type": "select" },
{ "label": "command", "value": "deploy --canary 10", "type": "text" },
{ "label": "budget", "value": "-5% — cannot be negative", "type": "invalid" },
{ "label": "auto-promote", "value": "on", "type": "switch" }
],
"statuses": ["Draft", "Invalid", "Queued"]
}
},
{
"id": "data-operations",
"title": "Stream packets",
"viewport": "mobile",
"primitives": ["button", "tabs", "badge", "dropdown-menu", "table", "tooltip", "separator"],
"composition": "A narrow log on mobile: stacked terminal packets that preserve command labels and semantic status chips, per-row dropdown actions, tooltips, and a watch state.",
"mustShow": ["table reflows to terminal packets, not generic cards", "semantic status chips per row", "row action menu with a destructive rollback item", "no horizontal overflow"],
"avoid": ["desktop-only tables", "text overflow", "generic shadcn spacing without Caret Ledger character"],
"scene": {
"eyebrow": "stream",
"headline": "Stream — prod-edge",
"description": "A compact log with terminal packets, per-row menus, status chips, and a watch affordance.",
"primaryAction": "Watch",
"secondaryAction": "Filter",
"rows": [
{ "label": "edge-1 pull", "value": "9c3f1a8", "status": "ok" },
{ "label": "gate evaluate", "value": "p99 214ms", "status": "hold" },
{ "label": "edge-3 5xx", "value": "0.31%", "status": "watch" }
],
"statuses": ["Ok", "Hold", "Watch"]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Hierarchy: amber primary = the one emphasis; graphite secondary; transparent quiet. Mono uppercase label, optional prompt glyph, one shared height; clipped or square corners, no border." },
{ "primitive": "card", "intent": "Clipped-corner graphite panel on the dark ground, lifted by soft shadow with a one-pixel inner highlight and a small hardware label — no border, no top rule. Never nest cards." },
{ "primitive": "input", "intent": "Graphite recess fill, no border; bracket focus outline in amber on active entry; red inset when invalid; mono label above." },
{ "primitive": "textarea", "intent": "Longer command notes with the same bracket-focus + invalid rhythm; mono, generous." },
{ "primitive": "select", "intent": "Target / mode filtering with a graphite trigger, a custom chevron, and clear selection contrast." },
{ "primitive": "dialog", "intent": "A clipped-corner graphite notice ('Queue this command?') — centered, generous, no border." },
{ "primitive": "sheet", "intent": "The node / runbook inspector side rail for contextual operations." },
{ "primitive": "tabs", "intent": "Switch run / plan / watch / rollback modes; the active pill carries a graphite fill, not an underline rule." },
{ "primitive": "badge", "intent": "Flat status chip on a faint syntax tint: ok (green) / running (cyan) / watch (yellow) / rolled back (red) / selected (violet)." },
{ "primitive": "separator", "intent": "A one-pixel graphite line or open 8px rhythm — never a colored rail; selection uses paired top-and-bottom rules instead." },
{ "primitive": "checkbox", "intent": "Require-gate opt-ins with a violet checked state and a clear focus." },
{ "primitive": "switch", "intent": "Auto-promote toggle; on is violet, off is a flat graphite track." },
{ "primitive": "slider", "intent": "Canary share / capacity with a cyan track and a square cyan thumb." },
{ "primitive": "tooltip", "intent": "Concise mono notes above compact controls." },
{ "primitive": "dropdown-menu", "intent": "Per-row command actions with a destructive 'rollback' item; graphite surface, syntax-color highlights." },
{ "primitive": "table", "intent": "The release ledger: mono header, mono slug rows, quiet graphite zebra, a semantic status badge per row, a watch/empty state, and a mobile reflow into terminal packets — no rule-lines." }
],
"qualityRules": {
"do": [
"Lead command input with a prompt glyph and draw a bracket focus outline on active entry.",
"Reserve amber for command, cyan for data, violet for selection; let state colors stay quiet.",
"Separate by graphite separators, the command spine, soft shadow, and the 8px rhythm.",
"Set commands, slugs, counts, and timestamps in Azeret Mono; everything else in Sora."
],
"dont": [
"Add borders, accent side edges, colored card rails, or divider hairlines.",
"Use white or cream surfaces, glow rings, CRT scanlines, or green-on-black hacker text.",
"Spread accent colors as decoration when the spine, separators, and rhythm can do the work.",
"Round chrome into floating pill bars or nest cards."
]
}
}