back to gallery
design language·spool

Spool

A portable design language for agents: download the markdown first, then inspect the preview, tokens, and rules as needed.

Download DESIGN.md

Portable DESIGN.md source of truth for most agents and apps.

the spec

specification

philosophy
summary
Spool reads terminal fluency as a continuous listing tape: every action stamps an addressed line you read top to bottom and can wind back to. Operations indent under the scope that owns them, selection flips a line to reverse video, and color does the parsing rather than the decoration.
values
A run is a tape: lines stamp in order, addressed, and rewindable to any point.Structure comes from the address gutter and scope indent, not from frames or rails.Dense information stays calm when typography, separators, and semantic color are disciplined.Hardware-era affordances appear as machined control geometry and status modules, never arcade chrome.
anti-values
×No square-grid wallpaper, dotted default texture, decorative side rails, colored card stripes, or color used as garnish.×No vaporwave, cyberpunk glow, novelty CRT filters, or green-on-black hacker nostalgia.×No generic SaaS dashboard cards with terminal labels pasted on top; no nested cards or boxed-in nav.
tokens
colors19 items
bg
#15101C
surface
#1E1726
surface_2
#28202F
surface_3
#322840
text
#ECE6DA
muted
#9A90A6
gutter
#6E647E
border
#37304A
rule
#2A2336
accent
#A78BFA
on_accent
#15101C
command
#FF6A45
data
#5BD0E0
paper
#ECE6DA
primary
#FF6A45
success
#7FD69B
warning
#F0C45C
error
#F07A6E
info
#79B8F2
typography10 items
base size
17px
body font
Space Grotesk
heading font
Space Grotesk
mono font
JetBrains Mono
heading weight
600
heading transform
none
letter spacing
-0.018em
line height
1.55
scale ratio
1.2
google fonts url
https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap
radii5 items
none
0
sm
3px
md
6px
lg
14px
full
9999px
shadows3 items
sm
0 1px 0 rgba(255,255,255,0.04), 0 10px 24px rgba(0,0,0,0.28)
md
0 1px 0 rgba(255,255,255,0.05), 0 18px 48px rgba(0,0,0,0.38)
lg
0 1px 0 rgba(255,255,255,0.06), 0 32px 90px rgba(0,0,0,0.50)
spacing2 items
base
8px
scale
4, 8, 12, 16, 24, 32, 48, 64
surfaces3 items
treatment
Translucent matte graphite panels over an ink-violet field with broad horizontal luminance banding and subtle inner highlights; no default dot or square-grid texture.
card style
Low-radius machined modules with a one-pixel graphite border and a monospaced command/path header; never nested, never side-railed.
bg pattern
Layered radial panel light plus oversized horizontal scan bands at very low opacity and a faint 38px horizontal listing rhythm; never a square grid or repeated dotted pattern.
borders4 items
default width
1px
accent width
2px
style
graphite separators and form-feed perforation rules with a violet bracket focus outline on active entry
character
Cool graphite separators define structure; accent edges appear only for active focus, selection, or the terminal prompt affordance, never as card rails.
motion3 items
duration
160ms
easing
cubic-bezier(0.2, 0.8, 0.2, 1)
philosophy
Operational and minimal: command focus snaps, the tape advances without theatrical glitch, sections reveal on scroll. The settled state renders with no JavaScript; motion is layered on top behind a class on the root and respects prefers-reduced-motion.
rules
composition
Build around a single listing tape: an address gutter, scope-indented operation lines, and an adjacent inspector. Hierarchy comes from address, depth, and pane scale, not decorative frames.
hierarchy
Use compact Space Grotesk section labels, monospaced command lines with addresses, tabular metrics, and restrained semantic color so users parse state, action, and evidence by reading down.
density

High information density is allowed, but rows breathe on an 8px rhythm with quiet graphite rules and grouped whitespace so the tape stays calm.

signature
The listing tape: a fixed left address gutter (tabular numerals) with rows that indent by scope depth via an SVG elbow connector.Reverse-video selection: the chosen line flips to listing-paper neutral with darkened syntax color, never a side stripe or colored card rail.Log lines use semantic syntax spans for actor, command, object, value, and state, with color doing structural parsing rather than decoration.The command bar carries a fixed spool> prompt, a violet bracket focus outline, and segmented Run/Plan/Replay mode pills.Sections are separated by form-feed perforation rules; data tables compress into address+line packets on mobile with the state chip dropping below.
layout
grid
Landing and embodiment use a centered single-column listing measure (~980px) with a persistent left address gutter; the dashboard widens to a tape-plus-inspector grid (2.1fr / 1fr). Mobile collapses to stacked address+line packets without square-grid backgrounds.
whitespace

Narrow but intentional: 8px row rhythm, 16-18px pane padding, and 24-32px macro gaps around primary operational zones.

density

dense but calm

responsive
Every artifact renders from ~390px mobile (single column, address+line packets, state below) to 2560px+ ultra-wide (capped, centred content; only the hero spans 100vw).
breakpoints
mobile
390px
tablet
720px
desktop
1100px
wide
1440px
guidance
do
  • Let the address gutter and scope indent carry structure; cite and rewind operations by address.
  • Keep every color mapped to a role: command, data, selection, or a labelled state.
  • Pair every state color with a written word so state survives a greyscale or color-blind read.
  • Use the spool> prompt, bracket focus, form-feed rules, and reverse-video selection as the recurring grammar.
avoid
  • Do not use square-grid backgrounds, dotted textures, decorative side rails, colored card stripes, or single accent edges on cards.
  • Do not turn the language into vaporwave, cyberpunk, arcade CRT, or green-on-black hacker nostalgia.
  • Do not nest cards or box the nav into a pill bar; let the masthead sit openly across the header.
  • Do not spread accent colors across unrelated decoration; every color identifies state, syntax, or interaction.
imagery
pairs with

graphite-console

summary
Subjects rendered as if inspected through a precision operations workstation: cool graphite tonality over an ink-violet field, broad horizontal scan bands, one-pixel cool edge highlights, monospaced syntax-color annotation tags, and a single translucent violet selection mask.
subjects
continuous-feed listing tape and spoolread-heads and machined hardwareoperational instrument modulesdeploy and runbook apparatus
usage
Use for the landing hero and section accents; keep the subject filling the frame and let the console treatment annotate it. Annotation colors map to syntax roles: coral=command, cyan=data, violet=selection.
katagami spec
# Spool

## Philosophy

Spool reads terminal fluency as a continuous listing tape: every action stamps an addressed line you read top to bottom and can wind back to. Operations indent under the scope that owns them, selection flips a line to reverse video, and color does the parsing rather than the decoration.

### Values

- A run is a tape: lines stamp in order, addressed, and rewindable to any point.
- Structure comes from the address gutter and scope indent, not from frames or rails.
- Dense information stays calm when typography, separators, and semantic color are disciplined.
- Hardware-era affordances appear as machined control geometry and status modules, never arcade chrome.

### Anti-Values

- No square-grid wallpaper, dotted default texture, decorative side rails, colored card stripes, or color used as garnish.
- No vaporwave, cyberpunk glow, novelty CRT filters, or green-on-black hacker nostalgia.
- No generic SaaS dashboard cards with terminal labels pasted on top; no nested cards or boxed-in nav.

### Visual Character

- Deep ink-violet graphite ground (#15101C, aubergine-black) with broad horizontal luminance scan bands and soft radial panel light; never a square grid or dotted texture.
- The listing tape: a single-column measure with a fixed left address gutter of tabular numerals, rows that indent by scope depth with SVG elbow connectors.
- Reverse-video selection: the chosen line flips to listing-paper neutral with darkened syntax color, never a side stripe or colored card rail.
- Typography pairs mechanical Space Grotesk display with JetBrains Mono command, address, and metric text using tabular numerals and tight negative tracking.
- Semantic syntax color is limited to coral commands, cyan data, and violet selection, with quiet green/yellow/red/blue state that always pairs color with a written word.

## Tokens

### Colors

| Name | Value |
|------|-------|
| bg | `#15101C` |
| surface | `#1E1726` |
| surface_2 | `#28202F` |
| surface_3 | `#322840` |
| text | `#ECE6DA` |
| muted | `#9A90A6` |
| gutter | `#6E647E` |
| border | `#37304A` |
| rule | `#2A2336` |
| accent | `#A78BFA` |
| on_accent | `#15101C` |
| command | `#FF6A45` |
| data | `#5BD0E0` |
| paper | `#ECE6DA` |
| primary | `#FF6A45` |
| success | `#7FD69B` |
| warning | `#F0C45C` |
| error | `#F07A6E` |
| info | `#79B8F2` |

### Typography

- **Base Size**: 17px
- **Body Font**: Space Grotesk
- **Heading Font**: Space Grotesk
- **Mono Font**: JetBrains Mono
- **Heading Weight**: 600
- **Heading Transform**: none
- **Letter Spacing**: -0.018em
- **Line Height**: 1.55
- **Scale Ratio**: 1.2
- **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap

### Radii

- **None**: 0
- **Sm**: 3px
- **Md**: 6px
- **Lg**: 14px
- **Full**: 9999px

### Shadows

- **Sm**: 0 1px 0 rgba(255,255,255,0.04), 0 10px 24px rgba(0,0,0,0.28)
- **Md**: 0 1px 0 rgba(255,255,255,0.05), 0 18px 48px rgba(0,0,0,0.38)
- **Lg**: 0 1px 0 rgba(255,255,255,0.06), 0 32px 90px rgba(0,0,0,0.50)

### Spacing

- **Base**: 8px
- **Scale**: [4,8,12,16,24,32,48,64]

### Surfaces

- **Treatment**: Translucent matte graphite panels over an ink-violet field with broad horizontal luminance banding and subtle inner highlights; no default dot or square-grid texture.
- **Card Style**: Low-radius machined modules with a one-pixel graphite border and a monospaced command/path header; never nested, never side-railed.
- **Bg Pattern**: Layered radial panel light plus oversized horizontal scan bands at very low opacity and a faint 38px horizontal listing rhythm; never a square grid or repeated dotted pattern.

### Borders

- **Default Width**: 1px
- **Accent Width**: 2px
- **Style**: graphite separators and form-feed perforation rules with a violet bracket focus outline on active entry
- **Character**: Cool graphite separators define structure; accent edges appear only for active focus, selection, or the terminal prompt affordance, never as card rails.

### Motion

- **Duration**: 160ms
- **Easing**: cubic-bezier(0.2, 0.8, 0.2, 1)
- **Philosophy**: Operational and minimal: command focus snaps, the tape advances without theatrical glitch, sections reveal on scroll. The settled state renders with no JavaScript; motion is layered on top behind a class on the root and respects prefers-reduced-motion.

## Rules

### Composition

Build around a single listing tape: an address gutter, scope-indented operation lines, and an adjacent inspector. Hierarchy comes from address, depth, and pane scale, not decorative frames.

### Hierarchy

Use compact Space Grotesk section labels, monospaced command lines with addresses, tabular metrics, and restrained semantic color so users parse state, action, and evidence by reading down.

### Density

High information density is allowed, but rows breathe on an 8px rhythm with quiet graphite rules and grouped whitespace so the tape stays calm.

### Signature

- The listing tape: a fixed left address gutter (tabular numerals) with rows that indent by scope depth via an SVG elbow connector.
- Reverse-video selection: the chosen line flips to listing-paper neutral with darkened syntax color, never a side stripe or colored card rail.
- Log lines use semantic syntax spans for actor, command, object, value, and state, with color doing structural parsing rather than decoration.
- The command bar carries a fixed spool> prompt, a violet bracket focus outline, and segmented Run/Plan/Replay mode pills.
- Sections are separated by form-feed perforation rules; data tables compress into address+line packets on mobile with the state chip dropping below.

## Layout

### Grid

Landing and embodiment use a centered single-column listing measure (~980px) with a persistent left address gutter; the dashboard widens to a tape-plus-inspector grid (2.1fr / 1fr). Mobile collapses to stacked address+line packets without square-grid backgrounds.

### Whitespace

Narrow but intentional: 8px row rhythm, 16-18px pane padding, and 24-32px macro gaps around primary operational zones.

### Density

dense but calm

### Responsive

Every artifact renders from ~390px mobile (single column, address+line packets, state below) to 2560px+ ultra-wide (capped, centred content; only the hero spans 100vw).

### Breakpoints

- **Mobile**: 390px
- **Tablet**: 720px
- **Desktop**: 1100px
- **Wide**: 1440px

## Guidance

### Do

- Let the address gutter and scope indent carry structure; cite and rewind operations by address.
- Keep every color mapped to a role: command, data, selection, or a labelled state.
- Pair every state color with a written word so state survives a greyscale or color-blind read.
- Use the spool> prompt, bracket focus, form-feed rules, and reverse-video selection as the recurring grammar.

### Don't

- Do not use square-grid backgrounds, dotted textures, decorative side rails, colored card stripes, or single accent edges on cards.
- Do not turn the language into vaporwave, cyberpunk, arcade CRT, or green-on-black hacker nostalgia.
- Do not nest cards or box the nav into a pill bar; let the masthead sit openly across the header.
- Do not spread accent colors across unrelated decoration; every color identifies state, syntax, or interaction.

### Accessibility

Body text rides at 17px with high contrast (#ECE6DA on #15101C). Every form control is explicitly styled with no browser defaults. Focus is a visible violet bracket or ring. State is never carried by color alone: chips and tape states pair color with a word. Motion respects prefers-reduced-motion and the settled state renders without JavaScript.

## Imagery Direction

### Pairs With

graphite-console

### Summary

Subjects rendered as if inspected through a precision operations workstation: cool graphite tonality over an ink-violet field, broad horizontal scan bands, one-pixel cool edge highlights, monospaced syntax-color annotation tags, and a single translucent violet selection mask.

### Subjects

- continuous-feed listing tape and spool
- read-heads and machined hardware
- operational instrument modules
- deploy and runbook apparatus

### Usage

Use for the landing hero and section accents; keep the subject filling the frame and let the console treatment annotate it. Annotation colors map to syntax roles: coral=command, cyan=data, violet=selection.
DESIGN.md
---
version: "alpha"
name: "Spool"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
  bg: "#15101C"
  surface: "#1E1726"
  surface_2: "#28202F"
  surface_3: "#322840"
  text: "#ECE6DA"
  muted: "#9A90A6"
  gutter: "#6E647E"
  border: "#37304A"
  rule: "#2A2336"
  accent: "#A78BFA"
  on_accent: "#15101C"
  command: "#FF6A45"
  data: "#5BD0E0"
  paper: "#ECE6DA"
  primary: "#FF6A45"
  success: "#7FD69B"
  warning: "#F0C45C"
  error: "#F07A6E"
  info: "#79B8F2"
typography:
  headline-lg:
    fontFamily: "Space Grotesk"
    fontSize: "2.075rem"
    fontWeight: 700
    lineHeight: 1.1
    letterSpacing: "-0.018em"
  headline-md:
    fontFamily: "Space Grotesk"
    fontSize: "1.66rem"
    fontWeight: 600
    lineHeight: 1.15
    letterSpacing: "-0.018em"
  body-md:
    fontFamily: "Space Grotesk"
    fontSize: "17px"
    fontWeight: 400
    lineHeight: 1.5
    letterSpacing: "-0.018em"
  label-md:
    fontFamily: "JetBrains Mono"
    fontSize: "0.75rem"
    fontWeight: 600
    lineHeight: 1
    letterSpacing: "0.08em"
rounded:
  none: "0px"
  sm: "3px"
  md: "6px"
  lg: "14px"
  full: "9999px"
spacing:
  base: "8px"
  xs: "4px"
  sm: "8px"
  md: "12px"
  lg: "16px"
  xl: "24px"
  2xl: "32px"
  3xl: "48px"
  4xl: "64px"
components:
  color-reference-bg:
    backgroundColor: "{colors.bg}"
  color-reference-surface:
    backgroundColor: "{colors.surface}"
  color-reference-surface_2:
    backgroundColor: "{colors.surface_2}"
  color-reference-surface_3:
    backgroundColor: "{colors.surface_3}"
  color-reference-text:
    backgroundColor: "{colors.text}"
  color-reference-muted:
    backgroundColor: "{colors.muted}"
  color-reference-gutter:
    backgroundColor: "{colors.gutter}"
  color-reference-border:
    backgroundColor: "{colors.border}"
  color-reference-rule:
    backgroundColor: "{colors.rule}"
  color-reference-accent:
    backgroundColor: "{colors.accent}"
  color-reference-on_accent:
    backgroundColor: "{colors.on_accent}"
  color-reference-command:
    backgroundColor: "{colors.command}"
  color-reference-data:
    backgroundColor: "{colors.data}"
  color-reference-paper:
    backgroundColor: "{colors.paper}"
  color-reference-primary:
    backgroundColor: "{colors.primary}"
  color-reference-success:
    backgroundColor: "{colors.success}"
  color-reference-warning:
    backgroundColor: "{colors.warning}"
  color-reference-error:
    backgroundColor: "{colors.error}"
  color-reference-info:
    backgroundColor: "{colors.info}"
  button-primary:
    backgroundColor: "{colors.primary}"
    textColor: "#000000"
    typography: "{typography.label-md}"
    rounded: "{rounded.md}"
    padding: "{spacing.md}"
  card-surface:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.text}"
    rounded: "{rounded.md}"
    padding: "{spacing.md}"
  input-default:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.text}"
    rounded: "{rounded.md}"
    height: "44px"
---

# Spool

## Overview

Spool reads terminal fluency as a continuous listing tape: every action stamps an addressed line you read top to bottom and can wind back to. Operations indent under the scope that owns them, selection flips a line to reverse video, and color does the parsing rather than the decoration.

### Values

- A run is a tape: lines stamp in order, addressed, and rewindable to any point.
- Structure comes from the address gutter and scope indent, not from frames or rails.
- Dense information stays calm when typography, separators, and semantic color are disciplined.
- Hardware-era affordances appear as machined control geometry and status modules, never arcade chrome.

### Anti-Values

- No square-grid wallpaper, dotted default texture, decorative side rails, colored card stripes, or color used as garnish.
- No vaporwave, cyberpunk glow, novelty CRT filters, or green-on-black hacker nostalgia.
- No generic SaaS dashboard cards with terminal labels pasted on top; no nested cards or boxed-in nav.

### Visual Character

- Deep ink-violet graphite ground (#15101C, aubergine-black) with broad horizontal luminance scan bands and soft radial panel light; never a square grid or dotted texture.
- The listing tape: a single-column measure with a fixed left address gutter of tabular numerals, rows that indent by scope depth with SVG elbow connectors.
- Reverse-video selection: the chosen line flips to listing-paper neutral with darkened syntax color, never a side stripe or colored card rail.
- Typography pairs mechanical Space Grotesk display with JetBrains Mono command, address, and metric text using tabular numerals and tight negative tracking.
- Semantic syntax color is limited to coral commands, cyan data, and violet selection, with quiet green/yellow/red/blue state that always pairs color with a written word.

## 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 | `#15101C` |
| surface | `#1E1726` |
| surface_2 | `#28202F` |
| surface_3 | `#322840` |
| text | `#ECE6DA` |
| muted | `#9A90A6` |
| gutter | `#6E647E` |
| border | `#37304A` |
| rule | `#2A2336` |
| accent | `#A78BFA` |
| on_accent | `#15101C` |
| command | `#FF6A45` |
| data | `#5BD0E0` |
| paper | `#ECE6DA` |
| primary | `#FF6A45` |
| success | `#7FD69B` |
| warning | `#F0C45C` |
| error | `#F07A6E` |
| info | `#79B8F2` |

## Typography

- **Headline-Lg**: Space Grotesk, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Space Grotesk, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Space Grotesk, 17px, weight 400, line-height 1.5.
- **Label-Md**: JetBrains Mono, 0.75rem, weight 600, line-height 1.

## Layout

### Spacing Tokens

- **Base**: `8px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `12px`
- **Lg**: `16px`
- **Xl**: `24px`
- **2xl**: `32px`
- **3xl**: `48px`
- **4xl**: `64px`

### Grid

Landing and embodiment use a centered single-column listing measure (~980px) with a persistent left address gutter; the dashboard widens to a tape-plus-inspector grid (2.1fr / 1fr). Mobile collapses to stacked address+line packets without square-grid backgrounds.

### Whitespace

Narrow but intentional: 8px row rhythm, 16-18px pane padding, and 24-32px macro gaps around primary operational zones.

### Density

dense but calm

### Responsive

Every artifact renders from ~390px mobile (single column, address+line packets, state below) to 2560px+ ultra-wide (capped, centred content; only the hero spans 100vw).

### Breakpoints

- **Mobile**: 390px
- **Tablet**: 720px
- **Desktop**: 1100px
- **Wide**: 1440px

## Elevation & Depth

### Shadows

- **Sm**: 0 1px 0 rgba(255,255,255,0.04), 0 10px 24px rgba(0,0,0,0.28)
- **Md**: 0 1px 0 rgba(255,255,255,0.05), 0 18px 48px rgba(0,0,0,0.38)
- **Lg**: 0 1px 0 rgba(255,255,255,0.06), 0 32px 90px rgba(0,0,0,0.50)

## Shapes

### Rounded

- **None**: `0px`
- **Sm**: `3px`
- **Md**: `6px`
- **Lg**: `14px`
- **Full**: `9999px`

### Surfaces

- **Treatment**: Translucent matte graphite panels over an ink-violet field with broad horizontal luminance banding and subtle inner highlights; no default dot or square-grid texture.
- **Card Style**: Low-radius machined modules with a one-pixel graphite border and a monospaced command/path header; never nested, never side-railed.
- **Bg Pattern**: Layered radial panel light plus oversized horizontal scan bands at very low opacity and a faint 38px horizontal listing rhythm; never a square grid or repeated dotted pattern.

### Borders

- **Default Width**: 1px
- **Accent Width**: 2px
- **Style**: graphite separators and form-feed perforation rules with a violet bracket focus outline on active entry
- **Character**: Cool graphite separators define structure; accent edges appear only for active focus, selection, or the terminal prompt affordance, never as card rails.

## Components

### Composition

Build around a single listing tape: an address gutter, scope-indented operation lines, and an adjacent inspector. Hierarchy comes from address, depth, and pane scale, not decorative frames.

### Hierarchy

Use compact Space Grotesk section labels, monospaced command lines with addresses, tabular metrics, and restrained semantic color so users parse state, action, and evidence by reading down.

### Density

High information density is allowed, but rows breathe on an 8px rhythm with quiet graphite rules and grouped whitespace so the tape stays calm.

### Signature

- The listing tape: a fixed left address gutter (tabular numerals) with rows that indent by scope depth via an SVG elbow connector.
- Reverse-video selection: the chosen line flips to listing-paper neutral with darkened syntax color, never a side stripe or colored card rail.
- Log lines use semantic syntax spans for actor, command, object, value, and state, with color doing structural parsing rather than decoration.
- The command bar carries a fixed spool> prompt, a violet bracket focus outline, and segmented Run/Plan/Replay mode pills.
- Sections are separated by form-feed perforation rules; data tables compress into address+line packets on mobile with the state chip dropping below.

## 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-019ef9bd-d955-78d2-bd49-1bd396c7c8d5/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 Let the address gutter and scope indent carry structure; cite and rewind operations by address.
- Do Keep every color mapped to a role: command, data, selection, or a labelled state.
- Do Pair every state color with a written word so state survives a greyscale or color-blind read.
- Do Use the spool> prompt, bracket focus, form-feed rules, and reverse-video selection as the recurring grammar.
- Don't Do not use square-grid backgrounds, dotted textures, decorative side rails, colored card stripes, or single accent edges on cards.
- Don't Do not turn the language into vaporwave, cyberpunk, arcade CRT, or green-on-black hacker nostalgia.
- Don't Do not nest cards or box the nav into a pill bar; let the masthead sit openly across the header.
- Don't Do not spread accent colors across unrelated decoration; every color identifies state, syntax, or interaction.

### Accessibility

Body text rides at 17px with high contrast (#ECE6DA on #15101C). Every form control is explicitly styled with no browser defaults. Focus is a visible violet bracket or ring. State is never carried by color alone: chips and tape states pair color with a word. Motion respects prefers-reduced-motion and the settled state renders without JavaScript.

## Imagery Direction

### Pairs With

graphite-console

### Summary

Subjects rendered as if inspected through a precision operations workstation: cool graphite tonality over an ink-violet field, broad horizontal scan bands, one-pixel cool edge highlights, monospaced syntax-color annotation tags, and a single translucent violet selection mask.

### Subjects

- continuous-feed listing tape and spool
- read-heads and machined hardware
- operational instrument modules
- deploy and runbook apparatus

### Usage

Use for the landing hero and section accents; keep the subject filling the frame and let the console treatment annotate it. Annotation colors map to syntax roles: coral=command, cyan=data, violet=selection.
shadcn/ui theme
```json
{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "spool",
  "type": "registry:theme",
  "title": "Spool shadcn Theme",
  "cssVars": {
    "theme": {},
    "light": {
      "background": "#15101C",
      "foreground": "#ECE6DA",
      "card": "#1E1726",
      "card-foreground": "#ECE6DA",
      "popover": "#1E1726",
      "popover-foreground": "#ECE6DA",
      "primary": "#FF6A45",
      "primary-foreground": "#ffffff",
      "secondary": "#f4f4f5",
      "secondary-foreground": "#111111",
      "muted": "#9A90A6",
      "muted-foreground": "#ECE6DA",
      "accent": "#A78BFA",
      "accent-foreground": "#ffffff",
      "destructive": "#F07A6E",
      "border": "#37304A",
      "input": "#37304A",
      "ring": "#A78BFA",
      "chart-1": "#FF6A45",
      "chart-2": "#f4f4f5",
      "chart-3": "#A78BFA",
      "chart-4": "#7FD69B",
      "chart-5": "#F0C45C",
      "sidebar": "#1E1726",
      "sidebar-foreground": "#ECE6DA",
      "sidebar-primary": "#FF6A45",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#79B8F2",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#37304A",
      "sidebar-ring": "#A78BFA",
      "radius": "6px"
    },
    "dark": {
      "background": "#0f1115",
      "foreground": "#f8fafc",
      "card": "#181b22",
      "card-foreground": "#f8fafc",
      "popover": "#181b22",
      "popover-foreground": "#f8fafc",
      "primary": "#FF6A45",
      "primary-foreground": "#ffffff",
      "secondary": "#252a33",
      "secondary-foreground": "#f8fafc",
      "muted": "#252a33",
      "muted-foreground": "#a1a1aa",
      "accent": "#A78BFA",
      "accent-foreground": "#ffffff",
      "destructive": "#F07A6E",
      "border": "#303642",
      "input": "#303642",
      "ring": "#A78BFA",
      "chart-1": "#FF6A45",
      "chart-2": "#f4f4f5",
      "chart-3": "#A78BFA",
      "chart-4": "#7FD69B",
      "chart-5": "#F0C45C",
      "sidebar": "#181b22",
      "sidebar-foreground": "#f8fafc",
      "sidebar-primary": "#FF6A45",
      "sidebar-primary-foreground": "#ffffff",
      "sidebar-accent": "#A78BFA",
      "sidebar-accent-foreground": "#ffffff",
      "sidebar-border": "#303642",
      "sidebar-ring": "#A78BFA",
      "radius": "6px"
    }
  },
  "meta": {
    "source": "katagami",
    "languageId": "en-019ef9bd-d955-78d2-bd49-1bd396c7c8d5",
    "slug": "spool",
    "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",
        "border",
        "command",
        "data",
        "error",
        "gutter",
        "info",
        "muted",
        "on_accent",
        "paper",
        "primary",
        "rule",
        "success",
        "surface",
        "surface_2",
        "surface_3",
        "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",
        "sm"
      ],
      "shadows": [
        "lg",
        "md",
        "sm"
      ],
      "spacing": [
        "base",
        "scale"
      ],
      "surfaces": [
        "bg_pattern",
        "card_style",
        "treatment"
      ],
      "borders": [
        "accent_width",
        "character",
        "default_width",
        "style"
      ],
      "motion": [
        "duration",
        "easing",
        "philosophy"
      ]
    }
  }
}
```
in the wild

embodiments

bespoke marketing landingopen full page ↗
landing · spool
DESIGN.md

at a glance

Typography

headline-lgSpace Grotesk · 33px · 700

The quick brown fox jumps

headline-mdSpace Grotesk · 27px · 600

The quick brown fox jumps

body-mdSpace Grotesk · 17px · 400

The quick brown fox jumps

label-mdJetBrains Mono · 12px · 600

The quick brown fox jumps

shadcn/ui

implementation kit

built with

Agent-generated

remix lane

try a remix

Keep Spooland swap a palette and an art style onto it — the landing & dashboard recolor live. The Studio does the same with all three lanes free.

UI language · fixed
Spool
Palette
Art style
Landing Page
live preview · recolored + filled
lineage

Family

related

More like this