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.
Open masthead nav across the header (never a pill); full-viewport landing hero on a swappable image; flat panels grouped by hairline + dashed dividers; dashboards add a quiet sidebar rail with $ prompt markers.
Phosphor green is the signal and the one primary action; cyan is trace/info + focus; amber is attention/warning; red is faults only. Status reads down a fixed-width column.
dense
Character-cell phosphor screen: fixed-width [OK]/[WARN]/[ERR] state markers, ch-aligned columns, prompt-style section labels, and a CRT scanline ground.
Character-cell rhythm; minmax(0,1fr) columns with min-width:0 children so grids never blow out.
Generous padding above titles; the inset recess and dashed dividers replace heavy boxing.
Dense, instrument-panel layouts favouring logs, tables, and command surfaces.
Single column on mobile; non-essential nav links and the dashboard rail hide; tables drop low-priority columns; never overflow horizontally; full-bleed hero spans 100vw, contained content caps and centres on ultra-wide.
phosphor
Phosphor-technique CAD wireframes of instruments and engineered objects — thin luminous green/cyan/amber hairlines on a near-black ground, like an oscilloscope vector display or pen-plotter blueprint. The landing hero is a cathode-ray oscilloscope rendered in this technique.
One full-bleed phosphor-wireframe hero behind a left phosphor-wash overlay; keep imagery to the wireframe technique, never photographic or painterly.
# Cathode ## Philosophy Cathode is a phosphor-console design language: the interface is an instrument panel, not a polished shell. A near-black CRT ground carries a faint scanline and a character-cell coordinate grid, everything is set in IBM Plex Mono, and state reads as a fixed-width text marker down a single column. It is a faithful glow-up of the Technical Mono console direction — same operational, machine-adjacent grammar and the same phosphor-green / cyan / amber colour family — with the source's stacked nested boxes replaced by a calmer scaffold of hairline borders, dashed inner dividers, and a recessed inset surface. ### Values - Operational clarity: status is a literal fixed-width marker ([OK]/[WARN]/[ERR]), scannable down one column - Alignment is the layout: the character cell (ch units) governs labels, values, meters, and tables - Flat phosphor material: no gradients, blur, or skeuomorphic depth — only the scanline and grid texture - Restrained accents: three highlighters on the dark screen, with a sparing glow on the live region ### Anti-Values - Soft rounded SaaS friendliness and pill-shaped status badges - Nested cards and a top nav trapped in a floating pill or rounded bar - Accents used as large fills instead of highlighters - Decorative ornament that does not belong to the console grammar ### Visual Character - A near-black CRT ground (#0A0A0A) with a faint scanline and a 64px character-cell coordinate grid as the only texture. - All typography is IBM Plex Mono with widths in ch units, so labels, values, and panels align to a code-editor / terminal grid. - Prompt-style section labels — // OVERVIEW, > ACTIVE QUEUE, $ CONTROLS — in muted uppercase with a single accent sigil. - State as fixed-width text markers [OK] [SYNC] [WARN] [ERR] [IDLE] in green/cyan/amber/red, never soft pills or icon circles. - Hierarchy from thin always-visible hairline borders and dashed inner dividers; nested groups recess into the inset surface rather than stacking a second box. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#0A0A0A` | | surface | `#141414` | | inset | `#0E0E0E` | | text | `#E8E8E8` | | muted | `#8A8A8A` | | border | `#262626` | | accent | `#33FF66` | | on_accent | `#06210F` | | accent_cyan | `#7DD7F0` | | accent_amber | `#FFB000` | | success | `#33FF66` | | info | `#7DD7F0` | | warning | `#FFB000` | | error | `#FF5F56` | ### Typography - **Base Size**: 17px - **Body Font**: IBM Plex Mono - **Heading Font**: IBM Plex Mono - **Mono Font**: IBM Plex Mono - **Heading Weight**: 600 - **Heading Transform**: none - **Letter Spacing**: 0.04em - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&display=swap ### Radii - **None**: 0 - **Sm**: 0 - **Md**: 0 - **Lg**: 0 - **Card**: 0 - **Full**: 9999px ### Shadows - **Sm**: none - **Md**: none - **Lg**: none - **Glow Accent**: 0 0 24px -6px rgba(51,255,102,.45) - **Glow Cyan**: 0 0 18px -6px rgba(125,215,240,.45) ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,40,56,80] ### Surfaces - **Treatment**: flat - **Card Style**: Flat #141414 panels on a #0A0A0A CRT ground, separated by 1px hairline borders and dashed inner dividers; content recesses into the #0E0E0E inset surface, never into a nested card. No gradients, blur, or shadow. - **Bg Pattern**: scanline + character-cell grid ### Borders - **Default Width**: 1px - **Accent Width**: 1px - **Style**: solid - **Character**: Borders are the scaffold: thin, sharp, always visible between regions; nested groups switch to dashed dividers to keep hierarchy without a second box. ### Motion - **Duration**: 150ms - **Easing**: linear - **Philosophy**: The settled state renders with no JavaScript; an inline script adds an on-scroll reveal only when motion is allowed, and respects prefers-reduced-motion. ## Rules ### Composition Open masthead nav across the header (never a pill); full-viewport landing hero on a swappable image; flat panels grouped by hairline + dashed dividers; dashboards add a quiet sidebar rail with $ prompt markers. ### Hierarchy Phosphor green is the signal and the one primary action; cyan is trace/info + focus; amber is attention/warning; red is faults only. Status reads down a fixed-width column. ### Density dense ### Signature Character-cell phosphor screen: fixed-width [OK]/[WARN]/[ERR] state markers, ch-aligned columns, prompt-style section labels, and a CRT scanline ground. ## Layout ### Grid Character-cell rhythm; minmax(0,1fr) columns with min-width:0 children so grids never blow out. ### Whitespace Generous padding above titles; the inset recess and dashed dividers replace heavy boxing. ### Density Dense, instrument-panel layouts favouring logs, tables, and command surfaces. ### Responsive Single column on mobile; non-essential nav links and the dashboard rail hide; tables drop low-priority columns; never overflow horizontally; full-bleed hero spans 100vw, contained content caps and centres on ultra-wide. ### Breakpoints - **Mobile**: 390px - **Tablet**: 760px - **Desktop**: 1024px - **Wide**: 1440px ## Guidance ### Do - Read state down a single fixed-width column; keep markers literal text. - Let the hairline border, dashed divider, and inset recess do the grouping. - Keep one phosphor-green primary; cyan for focus/info, amber for attention, red for faults. - Align everything to the character cell and keep numerics tabular. ### Don't - Round corners, add drop shadows, blur, or gradients. - Nest a bordered card inside another, or trap the nav in a pill/floating bar. - Turn state into soft pills or icon circles. - Let an accent become a large fill — accents are highlighters on the dark screen. ### Accessibility Phosphor, cyan, amber, and text all clear AA on the #0A0A0A / #141414 grounds. State is never colour-only — the text marker carries the meaning. Focus is a visible cyan border + glow on every control. Motion is gated behind prefers-reduced-motion and never required to read the page. ## Imagery Direction ### Pairs With phosphor ### Summary Phosphor-technique CAD wireframes of instruments and engineered objects — thin luminous green/cyan/amber hairlines on a near-black ground, like an oscilloscope vector display or pen-plotter blueprint. The landing hero is a cathode-ray oscilloscope rendered in this technique. ### Subjects - oscilloscope / CRT instrument - server rack or node - circuit board - engineered hardware - measured mechanical part ### Usage One full-bleed phosphor-wireframe hero behind a left phosphor-wash overlay; keep imagery to the wireframe technique, never photographic or painterly.
---
version: "alpha"
name: "Cathode"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#0A0A0A"
surface: "#141414"
inset: "#0E0E0E"
text: "#E8E8E8"
muted: "#8A8A8A"
border: "#262626"
accent: "#33FF66"
on_accent: "#06210F"
accent_cyan: "#7DD7F0"
accent_amber: "#FFB000"
success: "#33FF66"
info: "#7DD7F0"
warning: "#FFB000"
error: "#FF5F56"
typography:
headline-lg:
fontFamily: "IBM Plex Mono"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "0.04em"
headline-md:
fontFamily: "IBM Plex Mono"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "0.04em"
body-md:
fontFamily: "IBM Plex Mono"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "0.04em"
label-md:
fontFamily: "IBM Plex Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
sm: "0px"
md: "0px"
lg: "0px"
card: "0px"
full: "9999px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "40px"
4xl: "56px"
step-8: "80px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-inset:
backgroundColor: "{colors.inset}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-accent_cyan:
backgroundColor: "{colors.accent_cyan}"
color-reference-accent_amber:
backgroundColor: "{colors.accent_amber}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-info:
backgroundColor: "{colors.info}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "#000000"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Cathode
## Overview
Cathode is a phosphor-console design language: the interface is an instrument panel, not a polished shell. A near-black CRT ground carries a faint scanline and a character-cell coordinate grid, everything is set in IBM Plex Mono, and state reads as a fixed-width text marker down a single column. It is a faithful glow-up of the Technical Mono console direction — same operational, machine-adjacent grammar and the same phosphor-green / cyan / amber colour family — with the source's stacked nested boxes replaced by a calmer scaffold of hairline borders, dashed inner dividers, and a recessed inset surface.
### Values
- Operational clarity: status is a literal fixed-width marker ([OK]/[WARN]/[ERR]), scannable down one column
- Alignment is the layout: the character cell (ch units) governs labels, values, meters, and tables
- Flat phosphor material: no gradients, blur, or skeuomorphic depth — only the scanline and grid texture
- Restrained accents: three highlighters on the dark screen, with a sparing glow on the live region
### Anti-Values
- Soft rounded SaaS friendliness and pill-shaped status badges
- Nested cards and a top nav trapped in a floating pill or rounded bar
- Accents used as large fills instead of highlighters
- Decorative ornament that does not belong to the console grammar
### Visual Character
- A near-black CRT ground (#0A0A0A) with a faint scanline and a 64px character-cell coordinate grid as the only texture.
- All typography is IBM Plex Mono with widths in ch units, so labels, values, and panels align to a code-editor / terminal grid.
- Prompt-style section labels — // OVERVIEW, > ACTIVE QUEUE, $ CONTROLS — in muted uppercase with a single accent sigil.
- State as fixed-width text markers [OK] [SYNC] [WARN] [ERR] [IDLE] in green/cyan/amber/red, never soft pills or icon circles.
- Hierarchy from thin always-visible hairline borders and dashed inner dividers; nested groups recess into the inset surface rather than stacking a second box.
## 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 | `#0A0A0A` |
| surface | `#141414` |
| inset | `#0E0E0E` |
| text | `#E8E8E8` |
| muted | `#8A8A8A` |
| border | `#262626` |
| accent | `#33FF66` |
| on_accent | `#06210F` |
| accent_cyan | `#7DD7F0` |
| accent_amber | `#FFB000` |
| success | `#33FF66` |
| info | `#7DD7F0` |
| warning | `#FFB000` |
| error | `#FF5F56` |
## Typography
- **Headline-Lg**: IBM Plex Mono, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: IBM Plex Mono, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Mono, 17px, weight 400, line-height 1.5.
- **Label-Md**: IBM Plex Mono, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `12px`
- **Lg**: `16px`
- **Xl**: `24px`
- **2xl**: `32px`
- **3xl**: `40px`
- **4xl**: `56px`
- **Step-8**: `80px`
### Grid
Character-cell rhythm; minmax(0,1fr) columns with min-width:0 children so grids never blow out.
### Whitespace
Generous padding above titles; the inset recess and dashed dividers replace heavy boxing.
### Density
Dense, instrument-panel layouts favouring logs, tables, and command surfaces.
### Responsive
Single column on mobile; non-essential nav links and the dashboard rail hide; tables drop low-priority columns; never overflow horizontally; full-bleed hero spans 100vw, contained content caps and centres on ultra-wide.
### Breakpoints
- **Mobile**: 390px
- **Tablet**: 760px
- **Desktop**: 1024px
- **Wide**: 1440px
## Elevation & Depth
### Shadows
- **Sm**: none
- **Md**: none
- **Lg**: none
- **Glow Accent**: 0 0 24px -6px rgba(51,255,102,.45)
- **Glow Cyan**: 0 0 18px -6px rgba(125,215,240,.45)
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `0px`
- **Md**: `0px`
- **Lg**: `0px`
- **Card**: `0px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: flat
- **Card Style**: Flat #141414 panels on a #0A0A0A CRT ground, separated by 1px hairline borders and dashed inner dividers; content recesses into the #0E0E0E inset surface, never into a nested card. No gradients, blur, or shadow.
- **Bg Pattern**: scanline + character-cell grid
### Borders
- **Default Width**: 1px
- **Accent Width**: 1px
- **Style**: solid
- **Character**: Borders are the scaffold: thin, sharp, always visible between regions; nested groups switch to dashed dividers to keep hierarchy without a second box.
## Components
### Composition
Open masthead nav across the header (never a pill); full-viewport landing hero on a swappable image; flat panels grouped by hairline + dashed dividers; dashboards add a quiet sidebar rail with $ prompt markers.
### Hierarchy
Phosphor green is the signal and the one primary action; cyan is trace/info + focus; amber is attention/warning; red is faults only. Status reads down a fixed-width column.
### Density
dense
### Signature
Character-cell phosphor screen: fixed-width [OK]/[WARN]/[ERR] state markers, ch-aligned columns, prompt-style section labels, and a CRT scanline ground.
## 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-019ef93a-e850-7bd2-8af0-2ce6caf5f775/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 Read state down a single fixed-width column; keep markers literal text.
- Do Let the hairline border, dashed divider, and inset recess do the grouping.
- Do Keep one phosphor-green primary; cyan for focus/info, amber for attention, red for faults.
- Do Align everything to the character cell and keep numerics tabular.
- Don't Round corners, add drop shadows, blur, or gradients.
- Don't Nest a bordered card inside another, or trap the nav in a pill/floating bar.
- Don't Turn state into soft pills or icon circles.
- Don't Let an accent become a large fill — accents are highlighters on the dark screen.
### Accessibility
Phosphor, cyan, amber, and text all clear AA on the #0A0A0A / #141414 grounds. State is never colour-only — the text marker carries the meaning. Focus is a visible cyan border + glow on every control. Motion is gated behind prefers-reduced-motion and never required to read the page.
## Imagery Direction
### Pairs With
phosphor
### Summary
Phosphor-technique CAD wireframes of instruments and engineered objects — thin luminous green/cyan/amber hairlines on a near-black ground, like an oscilloscope vector display or pen-plotter blueprint. The landing hero is a cathode-ray oscilloscope rendered in this technique.
### Subjects
- oscilloscope / CRT instrument
- server rack or node
- circuit board
- engineered hardware
- measured mechanical part
### Usage
One full-bleed phosphor-wireframe hero behind a left phosphor-wash overlay; keep imagery to the wireframe technique, never photographic or painterly.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "cathode",
"type": "registry:theme",
"title": "Cathode shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#0A0A0A",
"foreground": "#E8E8E8",
"card": "#141414",
"card-foreground": "#E8E8E8",
"popover": "#141414",
"popover-foreground": "#E8E8E8",
"primary": "#E8E8E8",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#8A8A8A",
"muted-foreground": "#E8E8E8",
"accent": "#33FF66",
"accent-foreground": "#111111",
"destructive": "#FF5F56",
"border": "#262626",
"input": "#262626",
"ring": "#33FF66",
"chart-1": "#E8E8E8",
"chart-2": "#f4f4f5",
"chart-3": "#33FF66",
"chart-4": "#33FF66",
"chart-5": "#FFB000",
"sidebar": "#141414",
"sidebar-foreground": "#E8E8E8",
"sidebar-primary": "#E8E8E8",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#7DD7F0",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#262626",
"sidebar-ring": "#33FF66",
"radius": "0"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#E8E8E8",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#33FF66",
"accent-foreground": "#111111",
"destructive": "#FF5F56",
"border": "#303642",
"input": "#303642",
"ring": "#33FF66",
"chart-1": "#E8E8E8",
"chart-2": "#f4f4f5",
"chart-3": "#33FF66",
"chart-4": "#33FF66",
"chart-5": "#FFB000",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#E8E8E8",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#33FF66",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#303642",
"sidebar-ring": "#33FF66",
"radius": "0"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ef93a-e850-7bd2-8af0-2ce6caf5f775",
"slug": "cathode",
"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_amber",
"accent_cyan",
"bg",
"border",
"error",
"info",
"inset",
"muted",
"on_accent",
"success",
"surface",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"mono_font"
],
"radii": [
"card",
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"glow_accent",
"glow_cyan",
"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 Cathodeand swap a palette and an art style onto it — the landing & dashboard recolor live. The Studio does the same with all three lanes free.
Copy this when the target app uses shadcn/ui. It packages the Katagami DESIGN.md context with the install list, theme variables, component recipes, preview-shot contract, and starter TSX in one Markdown companion.
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table:root {
--background: #0A0A0A;
--foreground: #E8E8E8;
--card: #141414;
--card-foreground: #E8E8E8;
--popover: #141414;
--popover-foreground: #E8E8E8;
--primary: #E8E8E8;
--primary-foreground: #111111;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #8A8A8A;
--muted-foreground: #E8E8E8;
--accent: #33FF66;
--accent-foreground: #111111;
--destructive: #FF5F56;
--border: #262626;
--input: #262626;
--ring: #33FF66;
--chart-1: #E8E8E8;
--chart-2: #f4f4f5;
--chart-3: #33FF66;
--chart-4: #33FF66;
--chart-5: #FFB000;
--sidebar: #141414;
--sidebar-foreground: #E8E8E8;
--sidebar-primary: #E8E8E8;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #7DD7F0;
--sidebar-accent-foreground: #111111;
--sidebar-border: #262626;
--sidebar-ring: #33FF66;
--radius: 0;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #E8E8E8;
--primary-foreground: #111111;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #33FF66;
--accent-foreground: #111111;
--destructive: #FF5F56;
--border: #303642;
--input: #303642;
--ring: #33FF66;
--chart-1: #E8E8E8;
--chart-2: #f4f4f5;
--chart-3: #33FF66;
--chart-4: #33FF66;
--chart-5: #FFB000;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #E8E8E8;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #33FF66;
--sidebar-accent-foreground: #111111;
--sidebar-border: #303642;
--sidebar-ring: #33FF66;
--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 CathodeShadcnKit() {
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">Cathode</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": "cathode",
"type": "registry:theme",
"title": "Cathode",
"description": "Phosphor-console interface. A near-black CRT ground (#0A0A0A) with three highlighter accents — phosphor green signal, cyan trace, amber attention — in IBM Plex Mono. Rectangular corners, thin always-visible hairline borders and dashed inner dividers, flat surfaces with no blur or shadow; state reads as fixed-width [OK]/[WARN]/[ERR] markers on a character-cell grid.",
"cssVars": {
"theme": {
"font-sans": "IBM Plex Mono, ui-monospace, SFMono-Regular, Menlo, monospace",
"font-mono": "IBM Plex Mono, ui-monospace, SFMono-Regular, Menlo, monospace",
"font-heading": "IBM Plex Mono, ui-monospace, SFMono-Regular, Menlo, monospace",
"radius": "0px"
},
"dark": {
"background": "#0A0A0A",
"foreground": "#E8E8E8",
"card": "#141414",
"card-foreground": "#E8E8E8",
"popover": "#141414",
"popover-foreground": "#E8E8E8",
"primary": "#33FF66",
"primary-foreground": "#06210F",
"secondary": "#141414",
"secondary-foreground": "#E8E8E8",
"accent": "#7DD7F0",
"accent-foreground": "#06181F",
"muted": "#0E0E0E",
"muted-foreground": "#8A8A8A",
"destructive": "#FF5F56",
"destructive-foreground": "#1A0605",
"success": "#33FF66",
"warning": "#FFB000",
"info": "#7DD7F0",
"border": "#262626",
"input": "#0E0E0E",
"ring": "#7DD7F0",
"radius": "0px"
}
}
}
# Cathode shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019ef93a-e850-7bd2-8af0-2ce6caf5f775`
Slug: `cathode`
## Intent
Cathode is a phosphor-console design language: the interface is an instrument panel, not a polished shell. A near-black CRT ground carries a faint scanline and a character-cell coordinate grid, everything is set in IBM Plex Mono, and state reads as a fixed-width text marker down a single column. It is a faithful glow-up of the Technical Mono console direction — same operational, machine-adjacent grammar and the same phosphor-green / cyan / amber colour family — with the source's stacked nested boxes replaced by a calmer scaffold of hairline borders, dashed inner dividers, and a recessed inset surface.
## Required primitives
- button
- card
- input
- textarea
- select
- dialog
- sheet
- tabs
- badge
- separator
- checkbox
- switch
- slider
- tooltip
- dropdown-menu
- table
Install with `npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table`.
## Token cues
Colors:
{
"bg": "#0A0A0A",
"surface": "#141414",
"inset": "#0E0E0E",
"text": "#E8E8E8",
"muted": "#8A8A8A",
"border": "#262626",
"accent": "#33FF66",
"on_accent": "#06210F",
"accent_cyan": "#7DD7F0",
"accent_amber": "#FFB000",
"success": "#33FF66",
"info": "#7DD7F0",
"warning": "#FFB000",
"error": "#FF5F56"
}
Typography:
{
"base_size": "17px",
"body_font": "IBM Plex Mono",
"heading_font": "IBM Plex Mono",
"mono_font": "IBM Plex Mono",
"heading_weight": "600",
"heading_transform": "none",
"letter_spacing": "0.04em",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&display=swap"
}
## Visual character to preserve
- A near-black CRT ground (#0A0A0A) with a faint scanline and a 64px character-cell coordinate grid as the only texture.
- All typography is IBM Plex Mono with widths in ch units, so labels, values, and panels align to a code-editor / terminal grid.
- Prompt-style section labels — // OVERVIEW, > ACTIVE QUEUE, $ CONTROLS — in muted uppercase with a single accent sigil.
- State as fixed-width text markers [OK] [SYNC] [WARN] [ERR] [IDLE] in green/cyan/amber/red, never soft pills or icon circles.
- Hierarchy from thin always-visible hairline borders and dashed inner dividers; nested groups recess into the inset surface rather than stacking a second box.
## ShadSync visual profile
{
"family": "brutalist",
"material": "ink",
"contour": "pebble",
"border": "dashed",
"underlay": false,
"grain": true,
"stickerBadges": false,
"motion": "still",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
}
## Signature component recipes
### Button
Use `Button` for primary, secondary, outline, and ghost actions. Primary actions must expose the language's strongest contrast pair, while secondary and ghost actions should preserve the surface treatment instead of falling back to default neutral SaaS styling.
### Card
Use `Card`, `CardHeader`, `CardContent`, `CardFooter`, and `CardAction` as the main composition frame. Cards should demonstrate the language's surface, border, hierarchy, and density rules rather than appearing as generic rounded rectangles.
### Input and Textarea
Use `Input` and `Textarea` with visible focus rings, field labels, validation states, and the language's rhythm. Forms should show real product content, not placeholder-only controls.
### Select, Tabs, and Table
Use `Select`, `Tabs`, and `Table` to prove navigation, filtering, and dense data states. The table should show row rhythm, separators, hover/focus states, and an empty or status state when the language calls for it.
### Dialog and Sheet
Use `Dialog` for centered decisions and `Sheet` for contextual editing. Both should inherit the language's spacing, border, overlay, and motion rules.
## Preview shots
- `application-shell`: dashboard or workspace shell with navigation, cards, forms, and state badges.
- `detail-editor`: focused editing flow using input, textarea, select, switch/checkbox, dialog or sheet, and action buttons.
- `data-operations`: table-heavy operational view with tabs, dropdown menu affordances, badges, and destructive/empty states.
- Each preview shot must include a renderable `scene` payload with concrete headline, description, actions, and rows/fields/stats for the UI preview.
## Implementation contract
- Start from local `ui/src/components/ui` shadcn-style primitives; do not create a second component system.
- Apply `/katagami/shadcn/cathode/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: Read state down a single fixed-width column; keep markers literal text.; Let the hairline border, dashed divider, and inset recess do the grouping.; Keep one phosphor-green primary; cyan for focus/info, amber for attention, red for faults.; Align everything to the character cell and keep numerics tabular.
- Do not: Round corners, add drop shadows, blur, or gradients.; Nest a bordered card inside another, or trap the nav in a pill/floating bar.; Turn state into soft pills or icon circles.; Let an accent become a large fill — accents are highlighters on the dark screen.
## 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 CathodeShadcnKit() {
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">Cathode</h2>
<p className="mt-1 max-w-xl text-sm text-muted-foreground">
Use the Katagami registry theme, then compose these shadcn primitives
with the language-specific component recipes.
</p>
</div>
<Button>Apply theme</Button>
</div>
<Tabs defaultValue="components">
<TabsList>
<TabsTrigger value="components">Components</TabsTrigger>
<TabsTrigger value="states">States</TabsTrigger>
<TabsTrigger value="export">Export</TabsTrigger>
</TabsList>
</Tabs>
<Card>
<CardHeader>
<CardTitle>Component recipe</CardTitle>
<CardDescription>
Replace this starter content with the agent-authored product scene
from components.md and preview-shots.json.
</CardDescription>
</CardHeader>
<CardContent className="grid gap-3 sm:grid-cols-[1fr_auto]">
<Input defaultValue="Tokenized shadcn surface" aria-label="Recipe name" />
<Button variant="secondary">Preview state</Button>
</CardContent>
<CardFooter className="justify-between">
<Badge>Ready</Badge>
<Button variant="outline">Copy recipe</Button>
</CardFooter>
</Card>
</section>
);
}
```
## Layout notes
{
"grid": "Character-cell rhythm; minmax(0,1fr) columns with min-width:0 children so grids never blow out.",
"whitespace": "Generous padding above titles; the inset recess and dashed dividers replace heavy boxing.",
"density": "Dense, instrument-panel layouts favouring logs, tables, and command surfaces.",
"responsive": "Single column on mobile; non-essential nav links and the dashboard rail hide; tables drop low-priority columns; never overflow horizontally; full-bleed hero spans 100vw, contained content caps and centres on ultra-wide.",
"breakpoints": {
"mobile": "390px",
"tablet": "760px",
"desktop": "1024px",
"wide": "1440px"
}
}
{
"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": "Cathode", "slug": "cathode" },
"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": [
"Phosphor-console: a near-black CRT ground with a faint scanline + character-cell grid; type is IBM Plex Mono throughout.",
"State is a fixed-width text marker — [OK] [SYNC] [WARN] [ERR] [IDLE] — set in the accent channel, never a soft pill or icon circle.",
"Three highlighter accents: phosphor green is the signal and the one primary action, cyan is trace/info + focus, amber is attention; red is faults only.",
"Hierarchy from thin always-visible hairline borders, dashed inner dividers, and the inset recess surface — square corners, flat surfaces, no blur or shadow, never nested cards."
],
"visualProfile": {
"family": "terminal",
"material": "flat",
"contour": "rect",
"border": "hairline",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "still",
"density": "dense",
"accents": ["primary", "accent", "warning"]
},
"shots": [
{
"id": "application-shell",
"title": "The patch-window console",
"viewport": "desktop",
"primitives": ["button", "card", "input", "select", "tabs", "badge", "separator", "table"],
"composition": "An operations console: an open mono masthead with a > OPS prompt marker, four KPI panels with [OK]/[SYNC]/[WARN]/[ERR] markers, a section label // SIGNAL, and a worker-pool table with a fixed-width state column.",
"mustShow": ["phosphor-green primary 'Resume drain' vs hairline secondary", "flat #141414 panels with a 1px hairline border, square corners, no shadow", "[OK]/[SYNC]/[WARN]/[ERR] fixed-width state markers in green/cyan/amber/red", "mono table with dashed-hairline rows, inset zebra, tabular-nums"],
"avoid": ["rounded corners", "drop shadows / blur / gradients", "nested cards or a pill nav", "soft status pills or icon circles"],
"scene": {
"eyebrow": "$ patch-window",
"headline": "Patch window — eu-west worker pool",
"description": "A rolling kernel patch; nine of twelve nodes drained, one fault, window closing 06:30.",
"primaryAction": "Resume drain",
"secondaryAction": "Dry run",
"stats": [
{ "label": "nodes drained", "value": "09/12", "tone": "success" },
{ "label": "in-flight req", "value": "1.42k", "tone": "info" },
{ "label": "error budget", "value": "31%", "tone": "warning" },
{ "label": "faults", "value": "01", "tone": "destructive" }
],
"rows": [
{ "label": "node-07", "value": "euw-1a · 0 pods · 04%", "status": "OK" },
{ "label": "node-09", "value": "euw-1b · 3 pods · 61%", "status": "WARN" },
{ "label": "node-10", "value": "euw-1b · 1 pod · 38%", "status": "SYNC" },
{ "label": "node-11", "value": "euw-1c · 7 pods · 88%", "status": "ERR" }
],
"statuses": ["OK", "SYNC", "WARN", "ERR"]
}
},
{
"id": "detail-editor",
"title": "Schedule a drain",
"viewport": "tablet",
"primitives": ["button", "card", "input", "textarea", "select", "checkbox", "switch", "slider", "dialog", "sheet"],
"composition": "A drain order form: mono uppercase labels, a cyan-focus input, an invalid (red) grace-period field with a // message, a strategy select with a custom chevron, a respect-PDB switch, a notify checkbox, and a confirm dialog titled $ execute drain?",
"mustShow": ["cyan focus border + soft glow on inputs", "an invalid red field with a // message below", "$ confirm-style dialog title, square, no blur", "square switch/checkbox with phosphor-green on-state"],
"avoid": ["unstyled browser controls", "missing labels", "rounded inputs or pill switches", "nested cards"],
"scene": {
"eyebrow": "$ controls",
"headline": "Schedule a drain — node-11",
"description": "A drain order proving labels, a cyan focus, an invalid grace period, a PDB switch, and an execute-confirm dialog.",
"primaryAction": "Execute drain",
"secondaryAction": "Cancel",
"fields": [
{ "label": "target node", "value": "node-11", "type": "text" },
{ "label": "grace period", "value": "-30 // must be a positive duration", "type": "invalid" },
{ "label": "strategy", "value": "cordon, then evict", "type": "select" },
{ "label": "respect pod disruption budgets", "value": "on", "type": "switch" }
],
"statuses": ["OK", "Invalid", "Held"]
}
},
{
"id": "data-operations",
"title": "Drain queue",
"viewport": "mobile",
"primitives": ["button", "tabs", "badge", "dropdown-menu", "table", "tooltip", "separator"],
"composition": "A narrow drain queue: stacked mono rows, per-row dropdown actions (cordon / evict / spike), [OK]/[WARN]/[ERR] markers, tooltips, and a tab set with a > prompt marker on the active tab.",
"mustShow": ["single-column reflow with no horizontal overflow", "mono node rows with fixed-width state markers", "row dropdown with a destructive red 'spike' item", "active tab carries a > phosphor prompt marker, not a pill"],
"avoid": ["desktop-only tables", "text overflow", "generic shadcn spacing without the console character"],
"scene": {
"eyebrow": "$ queue",
"headline": "Drain queue",
"description": "A compact queue with rows, action menus, tooltips, and fixed-width state markers.",
"primaryAction": "Drain",
"secondaryAction": "Filter",
"rows": [
{ "label": "node-09", "value": "euw-1b", "status": "WARN" },
{ "label": "node-10", "value": "euw-1b", "status": "SYNC" },
{ "label": "node-11", "value": "euw-1c", "status": "ERR" }
],
"statuses": ["OK", "SYNC", "WARN", "ERR"]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "One shared height + square shape, mono uppercase centred label; phosphor-green primary on dark ink with a faint glow = the one emphasis; hairline secondary; muted quiet; cyan link." },
{ "primitive": "card", "intent": "Flat #141414 panel, single 1px hairline border, square corners, no shadow; header split from body by a dashed divider; never nest a bordered card — recess into the inset surface." },
{ "primitive": "input", "intent": "Inset fill, hairline border, square; cyan border + soft glow on focus; red border + // message when invalid; mono label above." },
{ "primitive": "textarea", "intent": "Same inset fill, focus, and invalid rhythm; square; vertical resize." },
{ "primitive": "select", "intent": "Square inset trigger with a CSS-drawn chevron (no native arrow); flat options with hairline separators." },
{ "primitive": "dialog", "intent": "Centred flat panel, hairline border, square; $ prompt-style title; green primary + quiet cancel; flat scrim, no blur." },
{ "primitive": "sheet", "intent": "Node/ticket detail side rail; flat surface, hairline left border, dashed section dividers." },
{ "primitive": "tabs", "intent": "Mono uppercase triggers; active carries a > phosphor prompt marker and brighter text, never a pill or sliding bar." },
{ "primitive": "badge", "intent": "Flat category chip: uppercase mono label + a small channel dot (green/cyan/amber/red) on the inset surface with a hairline border." },
{ "primitive": "separator", "intent": "1px hairline — solid between regions, dashed within a panel; never a coloured accent rule." },
{ "primitive": "checkbox", "intent": "Square inset box; checked shows a phosphor-green tick and green border." },
{ "primitive": "switch", "intent": "Square track + square knob; off = muted knob on inset, on = phosphor-green knob + green border; no pill rounding." },
{ "primitive": "slider", "intent": "Square thumb on a hairline track; filled portion green (or cyan/amber by channel); tabular mono value readout." },
{ "primitive": "tooltip", "intent": "Flat #141414 panel, hairline border, square, mono, concise." },
{ "primitive": "dropdown-menu", "intent": "Flat hairline menu, square items, per-row node actions, a destructive red 'spike' item." },
{ "primitive": "table", "intent": "Mono uppercase header on a 1px bottom rule; rows separated by dashed hairlines with an inset zebra; tabular-nums; a [OK]/[WARN]/[ERR] state column; no vertical rules, no boxed cells." }
],
"qualityRules": {
"do": [
"Read state down a single fixed-width column; keep markers literal text.",
"Let the hairline border, dashed divider, and inset recess do the grouping.",
"Keep one phosphor-green primary; cyan for focus/info, amber for attention, red for faults.",
"Align to the character cell (ch units); keep numerics tabular."
],
"dont": [
"Round corners, add drop shadows, blur, or gradients.",
"Nest a bordered card inside another, or trap the nav in a pill/floating bar.",
"Turn state into soft pills or icon circles instead of text markers.",
"Let an accent become a large fill — accents are highlighters on the dark screen."
]
}
}