Dither
Dither renders any interface through a low-resolution CGA phosphor grid.
Retro Computing & Terminal family.
Download DESIGN.md
Tokens and rules, ready for an agent to follow. It passes the format check with 0 errors and 0 warnings.
Preview
Typography
Each face set in this language's own words.
Dither
Dither
Dither renders any interface through a low-resolution CGA phosphor grid.
Dither renders any interface through a low-resolution CGA phosphor grid.
Specification
Philosophy
summary
Dither renders any interface through a low-resolution CGA phosphor grid. Every module is a framed utility window snapped to an 8-pixel rhythm; surfaces carry an ordered checker-dither and fixed scanlines so flat colour reads like it is drawn through a CRT; feedback appears as inverse-video labels, segmented meters, and blinking machine states. It keeps the retro home-computer shell identity while correcting the craft to current standards.
It values
- Respect a limited palette and let colour coding carry system meaning - green runs the system, cyan carries signal, magenta marks memory.
- Build hierarchy through framed windows, inverse-video title bars, and dense monospace labels.
- Preserve pixel alignment so borders, bevels, and dither read crisply at every size.
- Use machine-like feedback: segmented meters, status lamps, and stepped state changes.
- Pair nostalgia with utility - the interface stays genuinely usable, not costume.
It refuses
- Soft neumorphic depth, blur, and frosted glass.
- Rounded organic cards, pills, or amorphous panels.
- Palette sprawl beyond the intentional phosphor set.
- Airy luxury spacing that erases the compact workstation feel.
- Illustrative decoration that overwhelms the functional screen structure.
visual character
- Every window and key wears a full four-sided pixel bevel: a bright top-left highlight edge and a dark bottom-right shadow edge, recreating the embossed frames of DOS and 8-bit GUI shells.
- Backgrounds carry repeating scanlines and a checker-dither field so flat colour feels rendered through a low-resolution CRT.
- Typography pairs a bitmap display face (Press Start 2P) with dense monospace data text (VT323, IBM Plex Mono), using uppercase labels, inverse-video chips, and wide tracking.
- Interactive controls are rectangular, radius-0 keys with a stepped hard-black shadow and discrete on/off status lamps - never soft pills or floating modern buttons.
- Information is arranged as tiled utility windows, instrument bays, and ledger lists on an 8px grid, producing the compact rectangular rhythm of file managers and BBS dashboards.
Tokens
colors14
typography10
- base size
- 17px
- body font
- 'VT323', monospace
- heading font
- 'Press Start 2P', monospace
- mono font
- 'IBM Plex Mono', monospace
- heading weight
- 400
- heading transform
- uppercase
- letter spacing
- 0.04em
- line height
- 1.5
- scale ratio
- 1.25
- google fonts url
- https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&family=Press+Start+2P&family=VT323&display=swap
radii4
- none
- 0px
- md
- 16px
- lg
- 24px
- full
- 9999px
shadows3
- sm
- 2px 2px 0 #000000
- md
- 4px 4px 0 #000000
- lg
- 6px 6px 0 #000000
spacing2
- base
- 8px
- scale
- 1.5
surfaces3
- treatment
- CRT phosphor: repeating horizontal scanlines plus an ordered checker-dither field over dark panels, dual-edge pixel bevel framing (bright top-left, dark bottom-right).
- card style
- Framed utility windows with an inverse-video title bar, hard 90-degree corners, and a stepped hard-black drop shadow.
- bg pattern
- scanlines + checker-dither
borders4
- default width
- 2px
- accent width
- 2px
- style
- solid
- character
- Full four-sided pixel bevel: a bright top-left highlight edge and a dark bottom-right shadow edge on every window and key, recreating DOS/8-bit GUI shell frames.
motion3
- duration
- 120ms
- easing
- steps(3, end)
- philosophy
- Snappy, quantized machine motion: state changes step rather than glide; a cursor blink and a scanline sweep are the only ambient motion.
Rules
composition
Compose screens as nested utility windows: a command/status bar at the top, a primary work surface in the centre, and supporting instrument panels flanking it. Modules align to the 8px grid and behave like rearrangeable software panes rather than marketing cards.
hierarchy
Title bars, inverse labels, colour-state chips, and boxed readouts define hierarchy. Large type is reserved for screen titles and critical counters; most hierarchy comes from framing, fill contrast, and status-colour changes.
density
Compact and information-rich - controls sit close, lists are multi-row, and readouts expose many simultaneous states, with density balanced across the canvas (never a crowded cluster beside a starved void).
signature patterns
- Repeating-linear-gradient scanlines plus a checker-dither field on major surfaces, page-wide, so panels visibly emulate CRT phosphor texture and limited-colour shading.
- Dual-edge pixel framing on every window and key: a bright top-left border and a dark bottom-right border for the stepped bevel of DOS and 8-bit GUI shells.
- Inverse-video title bars and status chips with uppercase mono typography, where labels sit inside framed rectangles instead of floating above content.
- Meters and charts built from discrete rectangular cells rather than smooth bars, making progress, memory, and signal read as quantized and machine-like.
- Recurring corner checker-pixels and hard 90-degree geometry so the interface never reads as a generic modern dashboard with a retro palette pasted on top.
links motion
Links carry the language's own gesture - an inverse-video ink-up that fills the accent on hover, never a bare default underline. Motion is snappy and quantized (steps()); the settled, fully-rendered state is the no-JS default and reveal motion is added on top behind a class the inline script sets. prefers-reduced-motion is respected.
Layout
grid
A rigid 12-column desktop grid on an 8px base unit; panels snap to whole-column spans and all internal spacing resolves in multiples of 4px or 8px.
breakpoints
The tablet band (~768-1024) is its own considered two-column layout with full-width title bars preserved - never a mobile column stretched wide. At mobile (~390px) it collapses to a single column: nav wraps or collapses, oversized headlines shrink and wrap, and data tables scroll horizontally only where necessary.
whitespace
Whitespace is economical and structural - gaps separate windows and control groups, but empty space never overpowers the dense workstation character.
Guidance
Do
- Use the phosphor palette intentionally - green system, cyan signal, magenta memory.
- Snap icons, borders, and layout edges to pixel-friendly values so the interface stays crisp.
- Prefer framed windows, title bars, meter blocks, and ledger lists over floating cards.
- Use the display / body / mono pairing to clearly distinguish headings from data text.
- Run scanline and dither texture across large surfaces to keep the scene materially retro.
Avoid
- Introduce blur, translucent glass, or soft radial lighting.
- Use rounded corners, pills, or amorphous panels.
- Rely on smooth modern charts or gradients when segmented cells express the same state.
- Let whitespace become sparse luxury minimalism, or let control labels wrap.
- Mix glossy 3D or photographic imagery into the workstation scene - imagery stays in the paired pixel-art / CRT-dither technique.
Imagery
pairs with
dither-phosphor
technique
Low-resolution CGA-era pixel art: flat quantized colour shaded by ordered checker-dither, hard pixel/voxel forms, a fixed horizontal scanline overlay, and a phosphor bloom on the brightest cells against a near-black ground.
usage
One full-bleed dithered hero scene at the top of the landing (a CGA voxel terrain); feature imagery kept on its own ground beside copy, never under text. All imagery in the same pixel-dither technique - never glossy 3D or photographic.
hero file id
fl-019f3dba-9513-7581-b0d2-1444f302793f
Katagami spec file
# Dither ## Philosophy Dither renders any interface through a low-resolution CGA phosphor grid. Every module is a framed utility window snapped to an 8-pixel rhythm; surfaces carry an ordered checker-dither and fixed scanlines so flat colour reads like it is drawn through a CRT; feedback appears as inverse-video labels, segmented meters, and blinking machine states. It keeps the retro home-computer shell identity while correcting the craft to current standards. ### Values - Respect a limited palette and let colour coding carry system meaning - green runs the system, cyan carries signal, magenta marks memory. - Build hierarchy through framed windows, inverse-video title bars, and dense monospace labels. - Preserve pixel alignment so borders, bevels, and dither read crisply at every size. - Use machine-like feedback: segmented meters, status lamps, and stepped state changes. - Pair nostalgia with utility - the interface stays genuinely usable, not costume. ### Anti-Values - Soft neumorphic depth, blur, and frosted glass. - Rounded organic cards, pills, or amorphous panels. - Palette sprawl beyond the intentional phosphor set. - Airy luxury spacing that erases the compact workstation feel. - Illustrative decoration that overwhelms the functional screen structure. ### Visual Character - Every window and key wears a full four-sided pixel bevel: a bright top-left highlight edge and a dark bottom-right shadow edge, recreating the embossed frames of DOS and 8-bit GUI shells. - Backgrounds carry repeating scanlines and a checker-dither field so flat colour feels rendered through a low-resolution CRT. - Typography pairs a bitmap display face (Press Start 2P) with dense monospace data text (VT323, IBM Plex Mono), using uppercase labels, inverse-video chips, and wide tracking. - Interactive controls are rectangular, radius-0 keys with a stepped hard-black shadow and discrete on/off status lamps - never soft pills or floating modern buttons. - Information is arranged as tiled utility windows, instrument bays, and ledger lists on an 8px grid, producing the compact rectangular rhythm of file managers and BBS dashboards. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#0A0A0A` | | surface | `#161616` | | surface_solid | `#1E1E1E` | | text | `#F2F2F2` | | muted | `#9AA39A` | | border | `#3A3F3A` | | accent | `#55FF55` | | accent_2 | `#55FFFF` | | accent_soft | `#FF55FF` | | on_accent | `#0A0A0A` | | success | `#55FF55` | | warning | `#FFF255` | | error | `#FF5A5A` | | info | `#55FFFF` | ### Typography - **Base Size**: 17px - **Body Font**: 'VT323', monospace - **Heading Font**: 'Press Start 2P', monospace - **Mono Font**: 'IBM Plex Mono', monospace - **Heading Weight**: 400 - **Heading Transform**: uppercase - **Letter Spacing**: 0.04em - **Line Height**: 1.5 - **Scale Ratio**: 1.25 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&family=Press+Start+2P&family=VT323&display=swap ### Radii - **None**: 0px - **Md**: 16px - **Lg**: 24px - **Full**: 9999px ### Shadows - **Sm**: 2px 2px 0 #000000 - **Md**: 4px 4px 0 #000000 - **Lg**: 6px 6px 0 #000000 ### Spacing - **Base**: 8px - **Scale**: 1.5 ### Surfaces - **Treatment**: CRT phosphor: repeating horizontal scanlines plus an ordered checker-dither field over dark panels, dual-edge pixel bevel framing (bright top-left, dark bottom-right). - **Card Style**: Framed utility windows with an inverse-video title bar, hard 90-degree corners, and a stepped hard-black drop shadow. - **Bg Pattern**: scanlines + checker-dither ### Borders - **Default Width**: 2px - **Accent Width**: 2px - **Style**: solid - **Character**: Full four-sided pixel bevel: a bright top-left highlight edge and a dark bottom-right shadow edge on every window and key, recreating DOS/8-bit GUI shell frames. ### Motion - **Duration**: 120ms - **Easing**: steps(3, end) - **Philosophy**: Snappy, quantized machine motion: state changes step rather than glide; a cursor blink and a scanline sweep are the only ambient motion. ## Rules ### Composition Compose screens as nested utility windows: a command/status bar at the top, a primary work surface in the centre, and supporting instrument panels flanking it. Modules align to the 8px grid and behave like rearrangeable software panes rather than marketing cards. ### Hierarchy Title bars, inverse labels, colour-state chips, and boxed readouts define hierarchy. Large type is reserved for screen titles and critical counters; most hierarchy comes from framing, fill contrast, and status-colour changes. ### Density Compact and information-rich - controls sit close, lists are multi-row, and readouts expose many simultaneous states, with density balanced across the canvas (never a crowded cluster beside a starved void). ### Signature Patterns - Repeating-linear-gradient scanlines plus a checker-dither field on major surfaces, page-wide, so panels visibly emulate CRT phosphor texture and limited-colour shading. - Dual-edge pixel framing on every window and key: a bright top-left border and a dark bottom-right border for the stepped bevel of DOS and 8-bit GUI shells. - Inverse-video title bars and status chips with uppercase mono typography, where labels sit inside framed rectangles instead of floating above content. - Meters and charts built from discrete rectangular cells rather than smooth bars, making progress, memory, and signal read as quantized and machine-like. - Recurring corner checker-pixels and hard 90-degree geometry so the interface never reads as a generic modern dashboard with a retro palette pasted on top. ### Links Motion Links carry the language's own gesture - an inverse-video ink-up that fills the accent on hover, never a bare default underline. Motion is snappy and quantized (steps()); the settled, fully-rendered state is the no-JS default and reveal motion is added on top behind a class the inline script sets. prefers-reduced-motion is respected. ## Layout ### Grid A rigid 12-column desktop grid on an 8px base unit; panels snap to whole-column spans and all internal spacing resolves in multiples of 4px or 8px. ### Breakpoints The tablet band (~768-1024) is its own considered two-column layout with full-width title bars preserved - never a mobile column stretched wide. At mobile (~390px) it collapses to a single column: nav wraps or collapses, oversized headlines shrink and wrap, and data tables scroll horizontally only where necessary. ### Whitespace Whitespace is economical and structural - gaps separate windows and control groups, but empty space never overpowers the dense workstation character. ## Guidance ### Do - Use the phosphor palette intentionally - green system, cyan signal, magenta memory. - Snap icons, borders, and layout edges to pixel-friendly values so the interface stays crisp. - Prefer framed windows, title bars, meter blocks, and ledger lists over floating cards. - Use the display / body / mono pairing to clearly distinguish headings from data text. - Run scanline and dither texture across large surfaces to keep the scene materially retro. ### Don't - Introduce blur, translucent glass, or soft radial lighting. - Use rounded corners, pills, or amorphous panels. - Rely on smooth modern charts or gradients when segmented cells express the same state. - Let whitespace become sparse luxury minimalism, or let control labels wrap. - Mix glossy 3D or photographic imagery into the workstation scene - imagery stays in the paired pixel-art / CRT-dither technique. ## Imagery Direction ### Pairs With dither-phosphor ### Technique Low-resolution CGA-era pixel art: flat quantized colour shaded by ordered checker-dither, hard pixel/voxel forms, a fixed horizontal scanline overlay, and a phosphor bloom on the brightest cells against a near-black ground. ### Usage One full-bleed dithered hero scene at the top of the landing (a CGA voxel terrain); feature imagery kept on its own ground beside copy, never under text. All imagery in the same pixel-dither technique - never glossy 3D or photographic. ### Hero File Id fl-019f3dba-9513-7581-b0d2-1444f302793f
DESIGN.md file
---
version: "alpha"
name: "Dither"
description: "Dither renders any interface through a low-resolution CGA phosphor grid. Every module is a framed utility window snapped to an 8-pixel rhythm; surfaces carry an ordered checker-dither and fixed scanlines so flat colour reads like it is d..."
colors:
bg: "#0A0A0A"
surface: "#161616"
surface_solid: "#1E1E1E"
text: "#F2F2F2"
muted: "#9AA39A"
border: "#3A3F3A"
accent: "#55FF55"
accent_2: "#55FFFF"
accent_soft: "#FF55FF"
on_accent: "#0A0A0A"
success: "#55FF55"
warning: "#FFF255"
error: "#FF5A5A"
info: "#55FFFF"
typography:
headline-lg:
fontFamily: "'Press Start 2P', monospace"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "0.04em"
headline-md:
fontFamily: "'Press Start 2P', monospace"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "0.04em"
body-md:
fontFamily: "'VT323', monospace"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "0.04em"
label-md:
fontFamily: "'IBM Plex Mono', monospace"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
md: "16px"
lg: "24px"
full: "9999px"
spacing:
base: "8px"
components:
color-reference-bg:
backgroundColor: "{colors.bg}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-surface_solid:
backgroundColor: "{colors.surface_solid}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-accent_2:
backgroundColor: "{colors.accent_2}"
color-reference-accent_soft:
backgroundColor: "{colors.accent_soft}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-info:
backgroundColor: "{colors.info}"
button-primary:
backgroundColor: "{colors.accent}"
textColor: "{colors.on_accent}"
typography: "{typography.label-md}"
rounded: "{rounded.md}"
padding: "{spacing.base}"
card-surface:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
padding: "{spacing.base}"
input-default:
backgroundColor: "{colors.surface}"
textColor: "{colors.text}"
rounded: "{rounded.md}"
height: "44px"
---
# Dither
## Overview
Dither renders any interface through a low-resolution CGA phosphor grid. Every module is a framed utility window snapped to an 8-pixel rhythm; surfaces carry an ordered checker-dither and fixed scanlines so flat colour reads like it is drawn through a CRT; feedback appears as inverse-video labels, segmented meters, and blinking machine states. It keeps the retro home-computer shell identity while correcting the craft to current standards.
### Values
- Respect a limited palette and let colour coding carry system meaning - green runs the system, cyan carries signal, magenta marks memory.
- Build hierarchy through framed windows, inverse-video title bars, and dense monospace labels.
- Preserve pixel alignment so borders, bevels, and dither read crisply at every size.
- Use machine-like feedback: segmented meters, status lamps, and stepped state changes.
- Pair nostalgia with utility - the interface stays genuinely usable, not costume.
### Anti-Values
- Soft neumorphic depth, blur, and frosted glass.
- Rounded organic cards, pills, or amorphous panels.
- Palette sprawl beyond the intentional phosphor set.
- Airy luxury spacing that erases the compact workstation feel.
- Illustrative decoration that overwhelms the functional screen structure.
### Visual Character
- Every window and key wears a full four-sided pixel bevel: a bright top-left highlight edge and a dark bottom-right shadow edge, recreating the embossed frames of DOS and 8-bit GUI shells.
- Backgrounds carry repeating scanlines and a checker-dither field so flat colour feels rendered through a low-resolution CRT.
- Typography pairs a bitmap display face (Press Start 2P) with dense monospace data text (VT323, IBM Plex Mono), using uppercase labels, inverse-video chips, and wide tracking.
- Interactive controls are rectangular, radius-0 keys with a stepped hard-black shadow and discrete on/off status lamps - never soft pills or floating modern buttons.
- Information is arranged as tiled utility windows, instrument bays, and ledger lists on an 8px grid, producing the compact rectangular rhythm of file managers and BBS dashboards.
## 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 | `#161616` |
| surface_solid | `#1E1E1E` |
| text | `#F2F2F2` |
| muted | `#9AA39A` |
| border | `#3A3F3A` |
| accent | `#55FF55` |
| accent_2 | `#55FFFF` |
| accent_soft | `#FF55FF` |
| on_accent | `#0A0A0A` |
| success | `#55FF55` |
| warning | `#FFF255` |
| error | `#FF5A5A` |
| info | `#55FFFF` |
## Typography
Load the fonts from Google Fonts: https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&family=Press+Start+2P&family=VT323&display=swap
- **Headline-Lg**: 'Press Start 2P', monospace, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: 'Press Start 2P', monospace, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: 'VT323', monospace, 17px, weight 400, line-height 1.5.
- **Label-Md**: 'IBM Plex Mono', monospace, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
### Grid
A rigid 12-column desktop grid on an 8px base unit; panels snap to whole-column spans and all internal spacing resolves in multiples of 4px or 8px.
### Breakpoints
The tablet band (~768-1024) is its own considered two-column layout with full-width title bars preserved - never a mobile column stretched wide. At mobile (~390px) it collapses to a single column: nav wraps or collapses, oversized headlines shrink and wrap, and data tables scroll horizontally only where necessary.
### Whitespace
Whitespace is economical and structural - gaps separate windows and control groups, but empty space never overpowers the dense workstation character.
## Elevation & Depth
### Shadows
- **Sm**: 2px 2px 0 #000000
- **Md**: 4px 4px 0 #000000
- **Lg**: 6px 6px 0 #000000
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: CRT phosphor: repeating horizontal scanlines plus an ordered checker-dither field over dark panels, dual-edge pixel bevel framing (bright top-left, dark bottom-right).
- **Card Style**: Framed utility windows with an inverse-video title bar, hard 90-degree corners, and a stepped hard-black drop shadow.
- **Bg Pattern**: scanlines + checker-dither
### Borders
- **Default Width**: 2px
- **Accent Width**: 2px
- **Style**: solid
- **Character**: Full four-sided pixel bevel: a bright top-left highlight edge and a dark bottom-right shadow edge on every window and key, recreating DOS/8-bit GUI shell frames.
## Components
### Composition
Compose screens as nested utility windows: a command/status bar at the top, a primary work surface in the centre, and supporting instrument panels flanking it. Modules align to the 8px grid and behave like rearrangeable software panes rather than marketing cards.
### Hierarchy
Title bars, inverse labels, colour-state chips, and boxed readouts define hierarchy. Large type is reserved for screen titles and critical counters; most hierarchy comes from framing, fill contrast, and status-colour changes.
### Density
Compact and information-rich - controls sit close, lists are multi-row, and readouts expose many simultaneous states, with density balanced across the canvas (never a crowded cluster beside a starved void).
### Signature Patterns
- Repeating-linear-gradient scanlines plus a checker-dither field on major surfaces, page-wide, so panels visibly emulate CRT phosphor texture and limited-colour shading.
- Dual-edge pixel framing on every window and key: a bright top-left border and a dark bottom-right border for the stepped bevel of DOS and 8-bit GUI shells.
- Inverse-video title bars and status chips with uppercase mono typography, where labels sit inside framed rectangles instead of floating above content.
- Meters and charts built from discrete rectangular cells rather than smooth bars, making progress, memory, and signal read as quantized and machine-like.
- Recurring corner checker-pixels and hard 90-degree geometry so the interface never reads as a generic modern dashboard with a retro palette pasted on top.
### Links Motion
Links carry the language's own gesture - an inverse-video ink-up that fills the accent on hover, never a bare default underline. Motion is snappy and quantized (steps()); the settled, fully-rendered state is the no-JS default and reveal motion is added on top behind a class the inline script sets. prefers-reduced-motion is respected.
## 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-019f3dc1-daa0-7132-b782-52468ebdfb94/DESIGN.with-shadcn.md`.
Machine-readable companions for automation: `/language/en-019f3dc1-daa0-7132-b782-52468ebdfb94/shadcn.json` (registry theme), `/language/en-019f3dc1-daa0-7132-b782-52468ebdfb94/shadcn-components.md` (component recipes) and `/language/en-019f3dc1-daa0-7132-b782-52468ebdfb94/shadcn-shots.json` (preview shots). The human-facing handoff is still 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 the phosphor palette intentionally - green system, cyan signal, magenta memory.
- Do Snap icons, borders, and layout edges to pixel-friendly values so the interface stays crisp.
- Do Prefer framed windows, title bars, meter blocks, and ledger lists over floating cards.
- Do Use the display / body / mono pairing to clearly distinguish headings from data text.
- Do Run scanline and dither texture across large surfaces to keep the scene materially retro.
- Don't Introduce blur, translucent glass, or soft radial lighting.
- Don't Use rounded corners, pills, or amorphous panels.
- Don't Rely on smooth modern charts or gradients when segmented cells express the same state.
- Don't Let whitespace become sparse luxury minimalism, or let control labels wrap.
- Don't Mix glossy 3D or photographic imagery into the workstation scene - imagery stays in the paired pixel-art / CRT-dither technique.
## Imagery Direction
### Pairs With
dither-phosphor
### Technique
Low-resolution CGA-era pixel art: flat quantized colour shaded by ordered checker-dither, hard pixel/voxel forms, a fixed horizontal scanline overlay, and a phosphor bloom on the brightest cells against a near-black ground.
### Usage
One full-bleed dithered hero scene at the top of the landing (a CGA voxel terrain); feature imagery kept on its own ground beside copy, never under text. All imagery in the same pixel-dither technique - never glossy 3D or photographic.
### Hero File Id
fl-019f3dba-9513-7581-b0d2-1444f302793f
shadcn/ui theme file
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "dither",
"type": "registry:theme",
"title": "Dither shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#0A0A0A",
"foreground": "#F2F2F2",
"card": "#161616",
"card-foreground": "#F2F2F2",
"popover": "#161616",
"popover-foreground": "#F2F2F2",
"primary": "#F2F2F2",
"primary-foreground": "#111111",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#9AA39A",
"muted-foreground": "#F2F2F2",
"accent": "#55FF55",
"accent-foreground": "#111111",
"destructive": "#FF5A5A",
"border": "#3A3F3A",
"input": "#3A3F3A",
"ring": "#55FF55",
"chart-1": "#F2F2F2",
"chart-2": "#f4f4f5",
"chart-3": "#55FF55",
"chart-4": "#55FF55",
"chart-5": "#FFF255",
"sidebar": "#161616",
"sidebar-foreground": "#F2F2F2",
"sidebar-primary": "#F2F2F2",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#55FFFF",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#3A3F3A",
"sidebar-ring": "#55FF55",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#F2F2F2",
"primary-foreground": "#111111",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#55FF55",
"accent-foreground": "#111111",
"destructive": "#FF5A5A",
"border": "#303642",
"input": "#303642",
"ring": "#55FF55",
"chart-1": "#F2F2F2",
"chart-2": "#f4f4f5",
"chart-3": "#55FF55",
"chart-4": "#55FF55",
"chart-5": "#FFF255",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#F2F2F2",
"sidebar-primary-foreground": "#111111",
"sidebar-accent": "#55FF55",
"sidebar-accent-foreground": "#111111",
"sidebar-border": "#303642",
"sidebar-ring": "#55FF55",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019f3dc1-daa0-7132-b782-52468ebdfb94",
"slug": "dither",
"componentManifest": [
"button",
"card",
"input",
"textarea",
"select",
"dialog",
"sheet",
"tabs",
"badge",
"separator",
"checkbox",
"switch",
"slider",
"tooltip",
"dropdown-menu",
"table"
],
"installCommand": "npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table",
"nativeTokenNames": {
"colors": [
"accent",
"accent_2",
"accent_soft",
"bg",
"border",
"error",
"info",
"muted",
"on_accent",
"success",
"surface",
"surface_solid",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
],
"radii": [
"full",
"lg",
"md",
"none"
],
"shadows": [
"lg",
"md",
"sm"
],
"spacing": [
"base",
"scale"
],
"surfaces": [
"bg_pattern",
"card_style",
"treatment"
],
"borders": [
"accent_width",
"character",
"default_width",
"style"
],
"motion": [
"duration",
"easing",
"philosophy"
]
}
}
}
```