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.
Compose on a near-black field as an asymmetric terminal workbench: a command rail, a live canvas, and a telemetry column. Draw structure with dark surface panels and glow edges, never borders. Reserve the brightest cyan for the single live element and magenta for the command in focus.
Display type is IBM Plex Mono, uppercase, with a cyan/magenta RGB-misregistration split; headings are mono, body is Plex Sans kept legible and unblurred. Hierarchy is carried by glow intensity and scale, not weight alone.
Dense inside meters, tables, and telemetry; generous near-black gutters around them. Build meters and minimaps from square pixel cells. Mobile stacks into single-column panels with the glow-scale status preserved.
The glow scale runs every status surface — off (graphite), idle (dim cyan), live (cyan glow), focus (magenta), alert (red). Scanlines are a hard-stop 1px line texture, never a gradient wash.
Desktop is an 8px bitmap grid: a 64-72px command rail, a flexible live canvas, and a ~220px telemetry column. Panels are dark surfaces separated by near-black gutters.
Near-black gutters are active negative space — at least 16-24px between panels; titles never stuck to panel tops.
High inside readouts (meters, tables, KPIs); the surrounding field stays dark and open so live elements glow against it.
Tablet collapses the rail to a horizontal strip; mobile becomes one column with the glow-scale status and pixel meters preserved. Hide non-essential columns before letting tables overflow.
cathode-ray
Macro CRT phosphor photography — luminous cyan/magenta waveforms and pixel grids, fine scanlines, soft bloom on near-black, with generous negative space for overlay type.
One full-bleed hero per landing via --hero-image; never an inline <img> in compositions.
# Phosphor ## Philosophy Phosphor is a luminous CRT operating environment where glow is liveness: the field stays near-black and only what is running glows. Cyan marks live, magenta burns for command focus, and brightness reads as how active a thing is. It evolves CRT Dream Glow into a disciplined control surface — sharp pixel geometry, terminal-mono voice, edges drawn in light rather than borders, and chromatic misregistration reserved for display type. Dark mode here is deliberate, not a theme toggle. ### Values - Glow encodes liveness — light only what is active - Edges are glow (box-shadow), never borders - Sharp pixel geometry and a mono terminal voice - RGB misregistration on display type only, never on body - Near-black field; reserve magenta for command focus ### Anti-Values - Gradient washes, glassmorphism, or pastel backgrounds - Borders or grey dividers - Neon on every element — glow loses its meaning - Blurred body text or whole-panel blur - Light-mode reskins that kill the cathode identity ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#050509` | | surface | `#0B0D16` | | surface2 | `#11141F` | | text | `#F1F7FF` | | muted | `#818FA8` | | accent | `#00E7FF` | | command | `#FF2BD6` | | cyan | `#00E7FF` | | magenta | `#FF2BD6` | | mint | `#3BFFB0` | | success | `#3BFFB0` | | warning | `#FFD166` | | error | `#FF4D6D` | | info | `#66A3FF` | ### Typography - **Base Size**: 17px - **Body Font**: IBM Plex Sans - **Heading Font**: IBM Plex Mono - **Mono Font**: IBM Plex Mono - **Heading Weight**: 700 - **Heading Transform**: uppercase - **Letter Spacing**: -0.01em - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&family=IBM+Plex+Sans:wght@400;500;600&display=swap ### Radii - **None**: 0 - **Sm**: 0 - **Md**: 0 - **Lg**: 0 - **Default**: 0 - **Full**: 9999px ### Shadows - **Sm**: 0 0 0 1px rgba(0,231,255,.25) - **Md**: 0 0 22px rgba(0,231,255,.25) - **Lg**: 0 0 60px rgba(0,231,255,.18) ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64,96,128] ### Surfaces - **Field**: #050509 - **Panel**: #0B0D16 - **Raised**: #11141F ### Borders - **Default**: none - **Note**: edges are glow (box-shadow), not borders ### Motion - **Ease**: steps(4,end) - **Note**: stepped CRT motion; power-on + reveals respect prefers-reduced-motion ## Rules ### Composition Compose on a near-black field as an asymmetric terminal workbench: a command rail, a live canvas, and a telemetry column. Draw structure with dark surface panels and glow edges, never borders. Reserve the brightest cyan for the single live element and magenta for the command in focus. ### Hierarchy Display type is IBM Plex Mono, uppercase, with a cyan/magenta RGB-misregistration split; headings are mono, body is Plex Sans kept legible and unblurred. Hierarchy is carried by glow intensity and scale, not weight alone. ### Density Dense inside meters, tables, and telemetry; generous near-black gutters around them. Build meters and minimaps from square pixel cells. Mobile stacks into single-column panels with the glow-scale status preserved. ### Signature The glow scale runs every status surface — off (graphite), idle (dim cyan), live (cyan glow), focus (magenta), alert (red). Scanlines are a hard-stop 1px line texture, never a gradient wash. ## Layout ### Grid Desktop is an 8px bitmap grid: a 64-72px command rail, a flexible live canvas, and a ~220px telemetry column. Panels are dark surfaces separated by near-black gutters. ### Whitespace Near-black gutters are active negative space — at least 16-24px between panels; titles never stuck to panel tops. ### Density High inside readouts (meters, tables, KPIs); the surrounding field stays dark and open so live elements glow against it. ### Responsive Tablet collapses the rail to a horizontal strip; mobile becomes one column with the glow-scale status and pixel meters preserved. Hide non-essential columns before letting tables overflow. ### Breakpoints - **Desktop**: 1024px+ rail + canvas + telemetry - **Tablet**: 768-1023px two-column console - **Mobile**: 360-767px single-column panels ## Guidance ### Do - Keep the field near-black; let glow mean liveness - Cyan = live, magenta = command focus, mint = ready - Draw edges with box-shadow glow, never a border property - Use IBM Plex Mono for display + data, Plex Sans for body - Build meters and icons from square pixel cells; keep 0 corners ### Don't - No gradients, glassmorphism, or pastel washes - No borders or grey dividers - No neon on every element — glow must stay meaningful - No RGB split or blur on body text - No light-mode reskin — dark is the identity ### Accessibility Phosphor-white on near-black exceeds practical contrast targets; cyan/magenta accents are backed by labels and position, never colour alone. Scanline texture stays <=0.025 opacity and never sits under small body copy. Honour prefers-reduced-motion: power-on and reveal animations are gated and degrade to the correct final state. ## Imagery Direction ### Pairs With Art Style cathode-ray ### Summary Macro CRT phosphor photography — luminous cyan/magenta waveforms and pixel grids, fine scanlines, soft bloom on near-black, with generous negative space for overlay type. ### Subjects - glowing waveforms - pixel / level-meter grids - a single command glow ### Usage One full-bleed hero per landing via --hero-image; never an inline <img> in compositions.
---
version: "alpha"
name: "Phosphor"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#050509"
surface: "#0B0D16"
surface2: "#11141F"
text: "#F1F7FF"
muted: "#818FA8"
accent: "#00E7FF"
command: "#FF2BD6"
cyan: "#00E7FF"
magenta: "#FF2BD6"
mint: "#3BFFB0"
success: "#3BFFB0"
warning: "#FFD166"
error: "#FF4D6D"
info: "#66A3FF"
typography:
headline-lg:
fontFamily: "IBM Plex Mono"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.01em"
headline-md:
fontFamily: "IBM Plex Mono"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.01em"
body-md:
fontFamily: "IBM Plex Sans"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.01em"
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"
default: "0px"
full: "9999px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
step-8: "96px"
step-9: "128px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface2:
backgroundColor: "{colors.surface2}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-command:
backgroundColor: "{colors.command}"
color-reference-cyan:
backgroundColor: "{colors.cyan}"
color-reference-magenta:
backgroundColor: "{colors.magenta}"
color-reference-mint:
backgroundColor: "{colors.mint}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "#000000"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.md}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Phosphor
## Overview
Phosphor is a luminous CRT operating environment where glow is liveness: the field stays near-black and only what is running glows. Cyan marks live, magenta burns for command focus, and brightness reads as how active a thing is. It evolves CRT Dream Glow into a disciplined control surface — sharp pixel geometry, terminal-mono voice, edges drawn in light rather than borders, and chromatic misregistration reserved for display type. Dark mode here is deliberate, not a theme toggle.
### Values
- Glow encodes liveness — light only what is active
- Edges are glow (box-shadow), never borders
- Sharp pixel geometry and a mono terminal voice
- RGB misregistration on display type only, never on body
- Near-black field; reserve magenta for command focus
### Anti-Values
- Gradient washes, glassmorphism, or pastel backgrounds
- Borders or grey dividers
- Neon on every element — glow loses its meaning
- Blurred body text or whole-panel blur
- Light-mode reskins that kill the cathode identity
## 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 | `#050509` |
| surface | `#0B0D16` |
| surface2 | `#11141F` |
| text | `#F1F7FF` |
| muted | `#818FA8` |
| accent | `#00E7FF` |
| command | `#FF2BD6` |
| cyan | `#00E7FF` |
| magenta | `#FF2BD6` |
| mint | `#3BFFB0` |
| success | `#3BFFB0` |
| warning | `#FFD166` |
| error | `#FF4D6D` |
| info | `#66A3FF` |
## 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 Sans, 17px, weight 400, line-height 1.5.
- **Label-Md**: IBM Plex Mono, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `12px`
- **Lg**: `16px`
- **Xl**: `24px`
- **2xl**: `32px`
- **3xl**: `48px`
- **4xl**: `64px`
- **Step-8**: `96px`
- **Step-9**: `128px`
### Grid
Desktop is an 8px bitmap grid: a 64-72px command rail, a flexible live canvas, and a ~220px telemetry column. Panels are dark surfaces separated by near-black gutters.
### Whitespace
Near-black gutters are active negative space — at least 16-24px between panels; titles never stuck to panel tops.
### Density
High inside readouts (meters, tables, KPIs); the surrounding field stays dark and open so live elements glow against it.
### Responsive
Tablet collapses the rail to a horizontal strip; mobile becomes one column with the glow-scale status and pixel meters preserved. Hide non-essential columns before letting tables overflow.
### Breakpoints
- **Desktop**: 1024px+ rail + canvas + telemetry
- **Tablet**: 768-1023px two-column console
- **Mobile**: 360-767px single-column panels
## Elevation & Depth
### Shadows
- **Sm**: 0 0 0 1px rgba(0,231,255,.25)
- **Md**: 0 0 22px rgba(0,231,255,.25)
- **Lg**: 0 0 60px rgba(0,231,255,.18)
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `0px`
- **Md**: `0px`
- **Lg**: `0px`
- **Default**: `0px`
- **Full**: `9999px`
### Surfaces
- **Field**: #050509
- **Panel**: #0B0D16
- **Raised**: #11141F
### Borders
- **Default**: none
- **Note**: edges are glow (box-shadow), not borders
## Components
### Composition
Compose on a near-black field as an asymmetric terminal workbench: a command rail, a live canvas, and a telemetry column. Draw structure with dark surface panels and glow edges, never borders. Reserve the brightest cyan for the single live element and magenta for the command in focus.
### Hierarchy
Display type is IBM Plex Mono, uppercase, with a cyan/magenta RGB-misregistration split; headings are mono, body is Plex Sans kept legible and unblurred. Hierarchy is carried by glow intensity and scale, not weight alone.
### Density
Dense inside meters, tables, and telemetry; generous near-black gutters around them. Build meters and minimaps from square pixel cells. Mobile stacks into single-column panels with the glow-scale status preserved.
### Signature
The glow scale runs every status surface — off (graphite), idle (dim cyan), live (cyan glow), focus (magenta), alert (red). Scanlines are a hard-stop 1px line texture, never a gradient wash.
## 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-019ef593-437c-7592-b31b-78e006fe537e/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 Keep the field near-black; let glow mean liveness
- Do Cyan = live, magenta = command focus, mint = ready
- Do Draw edges with box-shadow glow, never a border property
- Do Use IBM Plex Mono for display + data, Plex Sans for body
- Do Build meters and icons from square pixel cells; keep 0 corners
- Don't No gradients, glassmorphism, or pastel washes
- Don't No borders or grey dividers
- Don't No neon on every element — glow must stay meaningful
- Don't No RGB split or blur on body text
- Don't No light-mode reskin — dark is the identity
### Accessibility
Phosphor-white on near-black exceeds practical contrast targets; cyan/magenta accents are backed by labels and position, never colour alone. Scanline texture stays <=0.025 opacity and never sits under small body copy. Honour prefers-reduced-motion: power-on and reveal animations are gated and degrade to the correct final state.
## Imagery Direction
### Pairs With Art Style
cathode-ray
### Summary
Macro CRT phosphor photography — luminous cyan/magenta waveforms and pixel grids, fine scanlines, soft bloom on near-black, with generous negative space for overlay type.
### Subjects
- glowing waveforms
- pixel / level-meter grids
- a single command glow
### Usage
One full-bleed hero per landing via --hero-image; never an inline <img> in compositions.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "phosphor",
"type": "registry:theme",
"title": "Phosphor shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#050509",
"foreground": "#F1F7FF",
"card": "#0B0D16",
"card-foreground": "#F1F7FF",
"popover": "#0B0D16",
"popover-foreground": "#F1F7FF",
"primary": "#F1F7FF",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#818FA8",
"muted-foreground": "#F1F7FF",
"accent": "#00E7FF",
"accent-foreground": "#111111",
"destructive": "#FF4D6D",
"border": "#e4e4e7",
"input": "#e4e4e7",
"ring": "#00E7FF",
"chart-1": "#F1F7FF",
"chart-2": "#f4f4f5",
"chart-3": "#00E7FF",
"chart-4": "#3BFFB0",
"chart-5": "#FFD166",
"sidebar": "#0B0D16",
"sidebar-foreground": "#F1F7FF",
"sidebar-primary": "#F1F7FF",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#66A3FF",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#e4e4e7",
"sidebar-ring": "#00E7FF",
"radius": "0"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#F1F7FF",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#00E7FF",
"accent-foreground": "#111111",
"destructive": "#FF4D6D",
"border": "#303642",
"input": "#303642",
"ring": "#00E7FF",
"chart-1": "#F1F7FF",
"chart-2": "#f4f4f5",
"chart-3": "#00E7FF",
"chart-4": "#3BFFB0",
"chart-5": "#FFD166",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#F1F7FF",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#00E7FF",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#303642",
"sidebar-ring": "#00E7FF",
"radius": "0"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ef593-437c-7592-b31b-78e006fe537e",
"slug": "phosphor",
"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",
"bg",
"command",
"cyan",
"error",
"info",
"magenta",
"mint",
"muted",
"success",
"surface",
"surface2",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"mono_font"
],
"radii": [
"default",
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"field",
"panel",
"raised"
],
"borders": [
"default",
"note"
],
"motion": [
"ease",
"note"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
Keep Phosphorand 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 live-control console where glow is liveness: dark by default, cyan where it runs, magenta where command focus is queued.
A routing form proving labels, an invalid state, an auto-arm toggle, a level slider, and a go-live confirm.
A compact queue with rows, menus, tooltips, glow-scale badges, and an offline 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: #050509;
--foreground: #F1F7FF;
--card: #0B0D16;
--card-foreground: #F1F7FF;
--popover: #0B0D16;
--popover-foreground: #F1F7FF;
--primary: #F1F7FF;
--primary-foreground: #111111;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #818FA8;
--muted-foreground: #F1F7FF;
--accent: #00E7FF;
--accent-foreground: #111111;
--destructive: #FF4D6D;
--border: #e4e4e7;
--input: #e4e4e7;
--ring: #00E7FF;
--chart-1: #F1F7FF;
--chart-2: #f4f4f5;
--chart-3: #00E7FF;
--chart-4: #3BFFB0;
--chart-5: #FFD166;
--sidebar: #0B0D16;
--sidebar-foreground: #F1F7FF;
--sidebar-primary: #F1F7FF;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #66A3FF;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #e4e4e7;
--sidebar-ring: #00E7FF;
--radius: 0;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #F1F7FF;
--primary-foreground: #111111;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #00E7FF;
--accent-foreground: #111111;
--destructive: #FF4D6D;
--border: #303642;
--input: #303642;
--ring: #00E7FF;
--chart-1: #F1F7FF;
--chart-2: #f4f4f5;
--chart-3: #00E7FF;
--chart-4: #3BFFB0;
--chart-5: #FFD166;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #F1F7FF;
--sidebar-primary-foreground: #111111;
--sidebar-accent: #00E7FF;
--sidebar-accent-foreground: #111111;
--sidebar-border: #303642;
--sidebar-ring: #00E7FF;
--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 PhosphorShadcnKit() {
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">Phosphor</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": "phosphor",
"type": "registry:theme",
"title": "Phosphor",
"description": "Luminous CRT operating environment for control work. Glow is liveness: a near-black field where only live elements glow cyan and command focus burns magenta. Dark mode is deliberate; edges are glow, not borders.",
"cssVars": {
"theme": {
"font-sans": "IBM Plex Sans, ui-sans-serif, sans-serif",
"font-mono": "IBM Plex Mono, ui-monospace, monospace",
"radius": "0px"
},
"light": {
"background": "#050509",
"foreground": "#F1F7FF",
"card": "#0B0D16",
"card-foreground": "#F1F7FF",
"popover": "#0B0D16",
"popover-foreground": "#F1F7FF",
"primary": "#00E7FF",
"primary-foreground": "#050509",
"secondary": "#FF2BD6",
"secondary-foreground": "#050509",
"accent": "#FF2BD6",
"accent-foreground": "#050509",
"muted": "#11141F",
"muted-foreground": "#818FA8",
"destructive": "#FF4D6D",
"destructive-foreground": "#050509",
"success": "#3BFFB0",
"warning": "#FFD166",
"border": "transparent",
"input": "#11141F",
"ring": "#00E7FF",
"radius": "0px"
}
}
}
# Phosphor shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-agent`
Slug: `phosphor`
## Intent
Phosphor is a luminous CRT operating environment for dense control work. Expressed
through shadcn/ui, its one governing idea — **glow is liveness** — must survive: the
field stays near-black, only *live* elements glow (cyan), command focus burns magenta,
and brightness encodes how active a thing is. Dark mode is deliberate. No borders —
edges are glow (box-shadow), never a `border` property. No gradient fills — bloom is a
tinted shadow and scanlines are a hard-stop line texture. Sharp `0` radius for pixel
precision; pills `9999px`. Type is IBM Plex Mono (terminal) for display + data, IBM
Plex Sans for legible body.
## 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": "#00E7FF", "accent": "#FF2BD6", "background": "#050509", "surface": "#0B0D16", "text": "#F1F7FF", "muted": "#818FA8", "success": "#3BFFB0", "warning": "#FFD166", "error": "#FF4D6D", "info": "#66A3FF" }
```
Typography:
```json
{ "heading_font": "IBM Plex Mono", "body_font": "IBM Plex Sans", "mono_font": "IBM Plex Mono", "letter_spacing": "-0.01em", "base_size": "17px" }
```
## Visual character to preserve
- The glow scale: liveness read as light across every status surface (pill, meter, edge, trace) — off=graphite, idle=dim cyan, live=cyan glow, focus=magenta, alert=red.
- Edges are glow, not borders: a `box-shadow` cyan halo marks a live element; idle elements have no edge.
- RGB misregistration on display type only (cyan/magenta `text-shadow` split), never on body copy.
- Pixel meters/minimaps built from small CSS-grid cells; sharp `0` corners.
- Near-black field; scanline texture; reserve magenta for command focus.
## ShadSync visual profile
```json
{ "family": "system", "material": "flat", "contour": "default", "border": "none", "underlay": false, "grain": false, "stickerBadges": false, "motion": "still", "density": "dense", "accents": ["primary", "accent", "success", "warning"] }
```
## Signature component recipes
### Button
Primary `Button` = `--primary` (cyan) on near-black with a cyan glow `box-shadow` — the
one live action; command actions burn magenta; `ghost` is transparent with a faint cyan
glow ring that brightens on hover. No `border`; sharp `0` radius; disabled = dim graphite,
no glow ("offline").
### Card
`Card` is a dark `--surface` panel, no border, sharp corners. A *live* card carries a cyan
glow halo (box-shadow); idle cards have none. Mono caption row for time/channel/level.
### Input and Textarea
`Input` / `Textarea` on the near-black field with an inset 1px graphite edge that becomes
a cyan glow ring on focus; invalid state glows red. Mono, real operational values.
### Select, Tabs, and Table
`Select` filters channels; `Tabs` switch Console/Signals/Decks; `Table` is the signal log
— mono header, dark rows on near-black gaps (no grey dividers), glow-scale status `Badge`
per row, and an "offline" empty state.
### Dialog and Sheet
`Dialog` for "Go live?" confirmations (centered, dark overlay, cyan glow edge); `Sheet`
for the patch / routing panel. Both sharp, no border, generous dark space.
### Badge, Switch, Slider, Tooltip, Separator, Checkbox, Dropdown-menu
`Badge` carries the glow-scale vocabulary (off/idle/live/focus/alert). `Switch` "on" glows
cyan. `Slider` = level/capacity with a cyan-lit track. `Tooltip` = concise mono notes.
`Separator` = a dark gap, never a grey line. `Checkbox` and `dropdown-menu` carry a visible
cyan focus glow.
## Preview shots
- `application-shell`: a Signal Ops console — command rail, live KPIs, channel log, signal history.
- `detail-editor`: patch a deck — labelled fields, an invalid (red) state, an auto-arm switch, a "go live" confirm.
- `data-operations`: a channel-log queue — table rows, glow-scale badges, a dropdown menu, tooltips, an offline 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/phosphor/registry-theme.json` variables first, then compose with these recipes.
- Keep Katagami token names as source metadata; shadcn semantic names are only the export surface.
- Do: let glow mean liveness; keep the field dark; reserve magenta for command focus; build meters from pixel cells.
- Do not: add gradients or rounded glassmorphism, blur whole panels or body text, fill every control with neon, add borders, or stage a component-inventory wall.
## Copy-paste component example
This shows the import shape and a real Phosphor 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 live channel card: dark surface, cyan glow when live, mono caption.
export function ChannelCard() {
return (
<Card
className="rounded-none border-0 bg-card text-card-foreground"
style={{ boxShadow: "0 0 0 1px rgba(0,231,255,.55), 0 0 26px rgba(0,231,255,.25)" }}
>
<CardHeader>
<Badge className="rounded-full bg-primary/10 text-primary">live</Badge>
<CardTitle className="mt-2 font-mono text-2xl uppercase">Master bus</CardTitle>
<CardDescription className="font-mono text-xs uppercase tracking-widest">
CH A · 02:14 · 60FPS · −6.2 dB
</CardDescription>
</CardHeader>
<CardContent>
<p className="font-mono text-xs text-muted-foreground">glow = liveness · dark until it runs</p>
</CardContent>
<CardFooter className="justify-between">
<span className="font-mono text-xs text-muted-foreground">channel A</span>
<Button className="rounded-none">Go live</Button>
</CardFooter>
</Card>
);
}
```
## Layout notes
```json
{ "grid": "8px bitmap, asymmetric terminal workbench (rail + canvas + telemetry)", "density": "dense, grouped tile clusters with dark gutters", "radii": "0 / 9999", "no_borders": true, "dark_mode": "deliberate" }
```
{
"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": "Phosphor", "slug": "phosphor" },
"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": [
"Glow is liveness — the field stays dark, only live elements glow (cyan), command focus burns magenta.",
"Edges are glow (box-shadow), never borders; bloom is a tinted shadow, scanlines a hard-stop texture (no gradient fills).",
"Sharp 0 radius for pixel precision; mono terminal voice; reserve magenta for command focus."
],
"visualProfile": {
"family": "system",
"material": "flat",
"contour": "default",
"border": "none",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "still",
"density": "dense",
"accents": ["primary", "accent", "success", "warning"]
},
"shots": [
{
"id": "application-shell",
"title": "Signal Ops console",
"viewport": "desktop",
"primitives": ["button", "card", "input", "select", "tabs", "badge", "separator", "table"],
"composition": "A dark CRT control console: command rail, live KPI cards (glowing only where live), a filter row, and the dense channel log with glow-scale status badges.",
"mustShow": ["primary (cyan glow) vs command (magenta) actions", "live card with glow halo vs idle card with none", "glow-scale status badges", "dense mono table on a near-black field"],
"avoid": ["borders or grey dividers", "gradient fills", "neon on every element", "component inventory walls"],
"scene": {
"eyebrow": "signal ops",
"headline": "Console — Nightshift",
"description": "A live-control console where glow is liveness: dark by default, cyan where it runs, magenta where command focus is queued.",
"primaryAction": "Go live",
"secondaryAction": "Patch a deck",
"stats": [
{ "label": "channels live", "value": "12", "tone": "accent" },
{ "label": "master level", "value": "-6.2", "tone": "default" },
{ "label": "command queue", "value": "3", "tone": "warning" }
],
"rows": [
{ "label": "Master bus", "value": "Ch A · -6.2 dB", "status": "live" },
{ "label": "Reverb send", "value": "Ch B · -18.0 dB", "status": "idle" },
{ "label": "Talkback", "value": "Ch C · +0.4 dB", "status": "focus" },
{ "label": "Aux return", "value": "Ch D · offline", "status": "off" }
],
"statuses": ["Live", "Idle", "Focus", "Offline"]
}
},
{
"id": "detail-editor",
"title": "Patch a deck",
"viewport": "tablet",
"primitives": ["button", "card", "input", "textarea", "select", "checkbox", "switch", "slider", "dialog", "sheet"],
"composition": "A focused patch / routing flow: labelled mono fields, an invalid (red glow) routing state, an auto-arm switch, a level slider, and a go-live confirm dialog.",
"mustShow": ["cyan focus glow on inputs", "an invalid (red) state", "go-live confirm dialog", "real operational values, not placeholders"],
"avoid": ["unstyled browser controls", "missing labels", "cards inside cards"],
"scene": {
"eyebrow": "patch",
"headline": "Patch — Nightshift 04",
"description": "A routing form proving labels, an invalid state, an auto-arm toggle, a level slider, and a go-live confirm.",
"primaryAction": "Go live",
"secondaryAction": "Hold",
"fields": [
{ "label": "Deck name", "value": "Nightshift 04", "type": "text" },
{ "label": "Routing", "value": "bus:// — enter a valid bus address", "type": "invalid" },
{ "label": "Channel", "value": "A · master", "type": "select" },
{ "label": "Auto-arm", "value": "on", "type": "switch" }
],
"statuses": ["Focus", "Invalid", "Armed"]
}
},
{
"id": "data-operations",
"title": "Channel queue",
"viewport": "mobile",
"primitives": ["button", "tabs", "badge", "dropdown-menu", "table", "tooltip", "separator"],
"composition": "A narrow channel-control queue: stacked rows, per-row dropdown actions, glow-scale badges, tooltips, and an offline / empty state.",
"mustShow": ["responsive reflow", "dense mono rows", "row action menu", "glow-scale badges", "an offline state"],
"avoid": ["desktop-only tables", "text overflow", "default shadcn spacing without Phosphor character"],
"scene": {
"eyebrow": "channels",
"headline": "Channel queue",
"description": "A compact queue with rows, menus, tooltips, glow-scale badges, and an offline affordance.",
"primaryAction": "Arm channel",
"secondaryAction": "Filter",
"rows": [
{ "label": "Master bus", "value": "-6.2 dB", "status": "live" },
{ "label": "Talkback", "value": "+0.4 dB", "status": "focus" },
{ "label": "Aux return", "value": "offline", "status": "off" }
],
"statuses": ["Live", "Focus", "Offline"]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Action hierarchy: cyan-glow primary = the live action; magenta = command; ghost = faint cyan ring; disabled = dim graphite (offline)." },
{ "primitive": "card", "intent": "Dark surface panel, no border; a live card carries a cyan glow halo, idle cards none; mono caption row." },
{ "primitive": "input", "intent": "Near-black field, inset graphite edge, cyan glow ring on focus, red glow when invalid." },
{ "primitive": "textarea", "intent": "Longer operational notes with the same focus + invalid glow rhythm." },
{ "primitive": "select", "intent": "Channel / routing filtering with a dark trigger and clear selection contrast." },
{ "primitive": "dialog", "intent": "Centered 'Go live?' confirm with a dark overlay and cyan glow edge; sharp, no border." },
{ "primitive": "sheet", "intent": "Patch / routing side panel for contextual editing." },
{ "primitive": "tabs", "intent": "Switch Console / Signals / Decks; active glows cyan, inactive dim." },
{ "primitive": "badge", "intent": "Glow-scale status vocabulary: off / idle / live / focus / alert." },
{ "primitive": "separator", "intent": "A dark gap for rhythm — never a grey divider line." },
{ "primitive": "checkbox", "intent": "Opt-ins with a visible cyan focus glow and lit checked state." },
{ "primitive": "switch", "intent": "Arm / settings toggle; on glows cyan, off is dim graphite." },
{ "primitive": "slider", "intent": "Level / capacity with a cyan-lit track and pixel-sharp thumb." },
{ "primitive": "tooltip", "intent": "Concise mono notes above compact controls." },
{ "primitive": "dropdown-menu", "intent": "Per-row channel actions, grouped choices, a destructive 'kill' item." },
{ "primitive": "table", "intent": "The signal log: mono header, dark rows on near-black gaps, glow-scale status per row, offline empty state." }
],
"qualityRules": {
"do": [
"Let glow mean liveness; reserve it for live elements and reserve magenta for command focus.",
"Keep the field near-black; light only what is active.",
"Build meters and icons from square pixel cells; keep corners sharp.",
"Set times, levels and channels in mono, like a terminal readout."
],
"dont": [
"Add gradient fills or rounded glassmorphism.",
"Add borders or grey dividers.",
"Blur whole panels or body text.",
"Fill every control with neon or collapse the language into generic shadcn defaults."
]
}
}