DESIGN.md@claude/skills/visualize/design-systems/dithered · git:20261007.b0c13a7 · 2026-10-07 · sha256 56702bcdcfd52cf2
DESIGN.md@claude/skills/visualize/design-systems/dithered git:20261007.b0c13a7A
Immutable. This exact content never changes and is served at /api/v1/blob/56702bcdcfd52cf2.
---
name: Dithered
description: 80s/90s computing aesthetic — limited CGA-inspired palette (cyan + magenta + black + white), dither-pattern fills, pixel-grid typography. The artifact reads as a system message from a 16-colour video mode.
# Modern OKLCH translation of CGA palette. Light-canonical (the CGA
# monitor's bright variant); dark is the deep-phosphor CRT register.
# Surfaces carry just-perceptible cool tint; the chromatic primary
# (magenta) and accent (cyan) are the canonical CGA two-tone.
canonical-canvas: light
selection:
mood: [playful, tactile, industrial, spatial]
tone: [confident, polished]
formality: medium
density: high
canonical_canvas: light
best_for: |
Use for information-dense artifacts that need a confident, polished register with playful, tactile, industrial, spatial visual cues. Strongest when the reference can preserve its light canonical canvas instead of forcing the opposite polarity.
avoid_for: |
Avoid for keynote-style moments that need sparse type, cinematic pacing, or a purely emotional first read.
colors:
background: "oklch(0.96 0.010 200)"
foreground: "oklch(0.18 0.020 250)"
card: "oklch(0.98 0.008 200)"
card-foreground: "oklch(0.18 0.020 250)"
popover: "oklch(0.98 0.008 200)"
popover-foreground: "oklch(0.18 0.020 250)"
primary: "oklch(0.55 0.20 320)"
primary-foreground: "oklch(0.98 0.008 200)"
secondary: "oklch(0.92 0.012 200)"
secondary-foreground: "oklch(0.18 0.020 250)"
muted: "oklch(0.92 0.012 200)"
muted-foreground: "oklch(0.42 0.020 250)"
accent: "oklch(0.62 0.16 200)"
accent-foreground: "oklch(0.18 0.020 250)"
destructive: "oklch(0.55 0.22 25)"
destructive-foreground: "oklch(0.98 0.008 200)"
border: "oklch(0.18 0.020 250)"
input: "oklch(0.18 0.020 250)"
ring: "oklch(0.55 0.20 320)"
chart-1: "oklch(0.55 0.20 320)"
chart-2: "oklch(0.62 0.16 200)"
chart-3: "oklch(0.78 0.12 320)"
chart-4: "oklch(0.38 0.18 200)"
chart-5: "oklch(0.18 0.020 250)"
sidebar: "oklch(0.94 0.010 200)"
sidebar-foreground: "oklch(0.18 0.020 250)"
sidebar-primary: "oklch(0.55 0.20 320)"
sidebar-primary-foreground: "oklch(0.98 0.008 200)"
sidebar-accent: "oklch(0.62 0.16 200)"
sidebar-accent-foreground: "oklch(0.18 0.020 250)"
sidebar-border: "oklch(0.18 0.020 250)"
sidebar-ring: "oklch(0.55 0.20 320)"
typography:
display:
fontFamily: "var(--font-mono)"
fontSize: "clamp(2rem, 5vw, 2.75rem)"
fontWeight: 700
lineHeight: 1.05
letterSpacing: "-0.005em"
textTransform: "uppercase"
heading:
fontFamily: "var(--font-mono)"
fontSize: "1.5rem"
fontWeight: 700
lineHeight: 1.1
textTransform: "uppercase"
title:
fontFamily: "var(--font-mono)"
fontSize: "1rem"
fontWeight: 700
lineHeight: 1.2
letterSpacing: "0.04em"
textTransform: "uppercase"
body:
fontFamily: "var(--font-mono)"
fontSize: "14px"
fontWeight: 400
lineHeight: 1.55
label:
fontFamily: "var(--font-mono)"
fontSize: "0.75rem"
fontWeight: 700
letterSpacing: "0.08em"
textTransform: "uppercase"
mono:
fontFamily: "var(--font-mono)"
fontSize: "0.875rem"
fontWeight: 400
rounded:
sm: "0"
md: "0"
lg: "0"
xl: "0"
components:
button-primary:
backgroundColor: "{colors.primary}"
textColor: "{colors.primary-foreground}"
typography: "{typography.label}"
rounded: "{rounded.md}"
padding: "0.375rem 0.75rem"
button-secondary:
backgroundColor: "{colors.secondary}"
textColor: "{colors.secondary-foreground}"
typography: "{typography.label}"
rounded: "{rounded.md}"
padding: "0.375rem 0.75rem"
card:
backgroundColor: "{colors.card}"
textColor: "{colors.card-foreground}"
rounded: "{rounded.lg}"
padding: "1rem"
input-text:
backgroundColor: "{colors.background}"
textColor: "{colors.foreground}"
rounded: "{rounded.md}"
padding: "0.375rem 0.625rem"
nav-link:
textColor: "{colors.foreground}"
typography: "{typography.label}"
nav-link-hover:
textColor: "{colors.primary}"
spacing:
xs: "0.25rem"
sm: "0.5rem"
md: "1rem"
lg: "1.5rem"
xl: "2.5rem"
---
# Design System: Dithered
## 1. Overview: 16-Colour Video Mode
**Creative North Star: "The Constraint of the Bit-Plane"**
Dithered is visualize's 80s/90s computing register — the aesthetic of a system message rendered in 16 colours on a phosphor monitor. Limited palette (cyan + magenta + black + white per the canonical CGA pairing), pixelated dither-pattern fills for depth, all-mono typography that reads as a BIOS-era system notice or floppy-disk installer screen.
Use Dithered for self-aware retro artifacts — release notes for a tool that *wants* to feel terminal-era, post-mortems with a "system fault" register, conference handouts for indie-game / hacker-culture contexts, jokey internal "404" pages. Not for serious customer-facing content (the retro register reads as joke or pastiche), not for long-form prose (mono everywhere fights reading), not for data dashboards (the limited palette can't carry multi-series chart distinction at scale).
**Key Characteristics:**
- Two-tone CGA-derived primary + accent: magenta (hue 320, chroma 0.20) + cyan (hue 200, chroma 0.16). The same pairing the original IBM CGA mode 4 palette was built on.
- All typography mono. Display + heading + title + label all uppercased; tracking compressed for the dense terminal-block feel.
- Zero radius everywhere. Pixel grids don't round.
- Borders carry full-strength foreground (`--border` = `--foreground`). 2-bit borders, not antialiased hairlines.
- Dither-pattern fills (via SVG / repeating linear-gradient) on accent surfaces — adds the "we only have 16 colours but we need shading" texture.
## 2. Colors: Two-Tone CGA + Dither
A two-tone chromatic primary + accent atop near-monochrome surfaces. The dither patterns are doing the "soft surface" work — surfaces themselves are flat.
### Two-Tone
- **Magenta Primary** (`oklch(0.55 0.20 320)`): The hot voltage. CGA mode 4's first chromatic register.
- **Cyan Accent** (`oklch(0.62 0.16 200)`): The cool counterpart. CGA mode 4's second register.
### Surfaces
- **Background** (`oklch(0.96 0.010 200)`): Cool off-white "monitor phosphor" base.
- **Card** (`oklch(0.98 0.008 200)`): Slightly brighter — but the visual differentiation between background and card comes from the BORDER (full-strength foreground), not surface lightness.
### Named Rules
**The Two-Tone-Only Rule.** Magenta + cyan are the chromatic vocabulary. Adding a third chromatic accent breaks the CGA fidelity.
**The Border-Is-Foreground Rule.** `--border` equals `--foreground` (deep cool ink). Cards / inputs / dividers all carry full-strength 2px borders in the foreground value — visible, pixelated, intentional.
**The Dither-For-Shading Rule.** When a surface needs "shading" (subtle tonal variation), use a dither pattern (2-bit dot fill, repeating gradient) rather than a softened colour. The constraint is the identity.
## 3. Typography: All Mono, All Uppercased
Every chrome role runs mono. Display + heading + title + label are uppercased. Body stays mono but normal-case for readability. The split is mono-everywhere (uniform pixel-grid feel) with case as the hierarchy signal.
## 4. Elevation: None
No shadows, no depth lift. Dithered is a 2D surface like a phosphor screen. Elevation comes from border + dither contrast, never from `box-shadow`.
## 5. Components
### Buttons
- Zero radius. Mono uppercased label. Magenta primary fill or transparent + 2px magenta border secondary.
### Cards
- Zero radius. 2px solid `--foreground` border. Optional dither overlay on accent cards.
### Notices / Banners
- Full-bleed coloured strip (magenta or cyan), foreground text, 2px border top + bottom. Maximum BIOS-message energy.
## 6. Do's and Don'ts
### Do:
- **Do** keep palette to two chromatic tones + black + white. The constraint is the identity.
- **Do** use mono everywhere. The pixel-grid uniformity is the read.
- **Do** use 2px full-strength borders. Hairlines belong to modern systems.
- **Do** add dither-pattern fills for visual texture instead of soft surfaces.
### Don't:
- **Don't** use Dithered for serious customer-facing content. The retro register reads as pastiche.
- **Don't** soften the corners. Zero radius is the identity.
- **Don't** add a third chromatic accent.
- **Don't** use sans-serif for any role. Mono is the rule.