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.
Build screens as asymmetric archival spreads: one dominant artifact (a tape-path console, a hero slip, a schematic) spanning ~7-8 of 12 columns, a narrow evidence rail of 3-4, taped fragments, and a large quiet vellum field. Include one deliberate grid break per screen — a rotated bench note, a rail hugging the dark edge — while labels, ticks, and codes stay surgically aligned.
Alternate packed instrument clusters (8px gaps inside readouts and rails) with broad 64-110px archive whitespace. Balance across the canvas: the one dark toner mass anchors each page; never a crowded cluster beside a starved void.
Reading order is ink first (Teko title cards), oxide mass second (bands, fills, buttons), phosphor last and smallest (the single active point). Serif carries testimony at 17px+, mono carries operational truth at 12-14.5px. Accent color never decorates; one clearly primary button per scene.
Desktop uses a 12-column, max-width 1320px archival spread (1440px for bench dashboards) with 24-40px gutters; the dominant artifact spans 7-8 columns, the evidence rail 3-4.
Under 640px stacks to a single column with non-essential nav hidden and display type clamped; 640-1024px is its own considered band (2-up grids, the rail becoming a strip, j-cards reflowing); above 1024px restores the full asymmetric spread.
Medium-high inside instruments (readouts, ledgers, rails), offset by broad untouched vellum margins in an archive-notebook rhythm.
Grids never blow out (minmax(0,1fr) throughout); tables scroll within their slip; buttons and chips never wrap — rows stack instead; hero display type clamps between 44 and 96px and wraps cleanly at 390px.
8px within instrument clusters, 24-48px inside panels, 64-110px between archival sections; titles always carry padding above them.
Hand-drawn archival schematics in oxide-brown ink on cream vellum: cassette mechanisms, tape-path geometry, reel cross-sections, photocopy contour linework, faint ruled paper, taped-in blank slips, and small phosphor-green registration crosses. Flat, matte, precise but warm.
Character illustration, neon cityscapes, glossy 3D renders, gradients, and any text, letters, or logos in the artwork.
ferrite
# Ferrite ## Philosophy Ferrite is a warm forensic interface language for recovering analog memory: cream vellum, oxide tape masses, three typographic voices, and one phosphor accent reserved for the active point. Named for the magnetic oxide that carries the memory on cassette tape, it treats every screen like a recovery bench treats a fragile reel. ### Values - Analog evidence first: every surface reads as paper, tape stock, photocopy toner, or a handled archive sleeve — structure comes from paper on paper, never from drawn boxes. - One ownable mechanic: the tape path — two reels, an oxide band, a phosphor playhead — measures progress, marks position, and threads every composition together. - Precision without coldness: registration brackets, calibration ticks, and mono catalog codes align surgically while the vellum stays warm. - Restrained luminance: phosphor green appears only as the active point — playhead, cursor, current step, the one primary action. - Ink economy: black toner and oxide brown carry recognition before any accent color arrives. - Existential archive calm: compositions feel like recovered notes from a lab that treats memories as fragile evidence. ### Anti-Values - Generic neon cyberpunk gradients, glassmorphism, chrome reflections, or synthetic glow as decoration. - Rounded SaaS cards, boxed navigation, equal dashboard widgets, and anonymous analytics layouts. - Grunge overload: distress so heavy that labels, diagrams, or registration overlays become illegible. - Accent color spent on decoration where ink, cream, and oxide brown can solve the hierarchy. ### Visual Character - Cream vellum ground with faint 36px ruled lines; deeper vellum folds and bright paper slips build all structure, lifted by hard photocopy-offset shadows. - The tape path recurs everywhere: hero device, live-transfer readout, table progress cells, tab bands, separators. - J-card anatomy for panels: a 44px labelled spine with rotated mono catalog code, serif body notes, an inset reel window. - One dark toner mass per page — the annotation rail — with cream mono text and a blinking phosphor cursor. - Registration brackets, calibration tick strips, and mono ·FE-nnn section codes form one page-wide ornament system. - Three strict voices: Teko 600 uppercase title cards, IBM Plex Serif 17px+ testimony, Share Tech Mono 12–14.5px operational truth. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#F5E9CA` | | surface | `#EDDDB4` | | surface_solid | `#FBF4E1` | | text | `#241711` | | muted | `#6E5848` | | border | `#2A1711` | | accent | `#0E6B54` | | accent_2 | `#5A3826` | | accent_soft | `#DCE8DB` | | on_accent | `#F8F0DA` | | success | `#4F6F58` | | warning | `#8A5A1E` | | error | `#9A3D24` | | info | `#3D6E74` | ### Typography - **Base Size**: 17px - **Body Font**: IBM Plex Serif - **Heading Font**: Teko - **Mono Font**: Share Tech Mono - **Heading Weight**: 600 - **Heading Transform**: uppercase - **Letter Spacing**: -0.02em - **Line Height**: 1.6 - **Scale Ratio**: 1.27 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Teko:wght@400;500;600&family=IBM+Plex+Serif:ital,wght@0,400;0,500;0,600;1,400&family=Share+Tech+Mono&display=swap ### Radii - **None**: 0px - **Md**: 16px - **Lg**: 24px - **Full**: 9999px ### Shadows - **Sm**: 0 1px 0 rgba(42,23,17,.14) - **Md**: 0 6px 20px rgba(90,56,38,.12) - **Lg**: 12px 14px 0 rgba(90,56,38,.13) ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64,96,128] ### Surfaces - **Treatment**: Matte cream vellum with faint 36px ruled hairlines; structure built from paper-on-paper layers (vellum, fold tone, bright slip) lifted by hard photocopy-offset shadows. - **Card Style**: Squared j-card slips: bright paper on vellum, a 44px fold-tone spine with rotated mono catalog code, optional inset reel window; no drawn borders. - **Bg Pattern**: repeating-linear-gradient ruled lines at 13% ink alpha over the cream ground; sparse calibration tick strips as ornament. ### Borders - **Default Width**: 0 - **Accent Width**: 2px - **Style**: registration hairlines and dashed phosphor focus outlines only — never container boxes - **Character**: Structure comes from paper surfaces and ink masses; 1px ink rules appear only as ruled paper, table hairlines, and fold lines; 2px dashed phosphor marks focus. ### Motion - **Duration**: 220ms - **Easing**: cubic-bezier(.2,.7,.1,1) - **Philosophy**: Motion behaves like a tape transport or a scanner advancing one calibrated step: linear sweeps, cursor blinks, playhead travel — settled state first, reveals gated behind JS, prefers-reduced-motion respected, never bouncy. ## Rules ### Composition Build screens as asymmetric archival spreads: one dominant artifact (a tape-path console, a hero slip, a schematic) spanning ~7-8 of 12 columns, a narrow evidence rail of 3-4, taped fragments, and a large quiet vellum field. Include one deliberate grid break per screen — a rotated bench note, a rail hugging the dark edge — while labels, ticks, and codes stay surgically aligned. ### Density Alternate packed instrument clusters (8px gaps inside readouts and rails) with broad 64-110px archive whitespace. Balance across the canvas: the one dark toner mass anchors each page; never a crowded cluster beside a starved void. ### Hierarchy Reading order is ink first (Teko title cards), oxide mass second (bands, fills, buttons), phosphor last and smallest (the single active point). Serif carries testimony at 17px+, mono carries operational truth at 12-14.5px. Accent color never decorates; one clearly primary button per scene. ### Signature Patterns - The tape path: two reel circles joined by an oxide band with a phosphor playhead — progress, position, and section threading in every composition. - J-card fold anatomy: labelled 44px spines, fold tones, and inset reel windows instead of standard cards. - The annotation rail: one toner-ink CLI mass per page with prompt symbols, checksums, and a blinking phosphor cursor. - Taped semantics: alerts and statuses arrive as translucent tape strips across a slip's top edge plus a mono tag — never a colored side edge. - Registration overlay: phosphor corner brackets, calibration tick strips, and mono ·FE-nnn catalog codes recurring page-wide as one ornament system. - The splice link gesture: a phosphor band under link text that sweeps up into a highlight on hover. ## Layout ### Grid Desktop uses a 12-column, max-width 1320px archival spread (1440px for bench dashboards) with 24-40px gutters; the dominant artifact spans 7-8 columns, the evidence rail 3-4. ### Breakpoints Under 640px stacks to a single column with non-essential nav hidden and display type clamped; 640-1024px is its own considered band (2-up grids, the rail becoming a strip, j-cards reflowing); above 1024px restores the full asymmetric spread. ### Density Medium-high inside instruments (readouts, ledgers, rails), offset by broad untouched vellum margins in an archive-notebook rhythm. ### Responsive Grids never blow out (minmax(0,1fr) throughout); tables scroll within their slip; buttons and chips never wrap — rows stack instead; hero display type clamps between 44 and 96px and wraps cleanly at 390px. ### Whitespace 8px within instrument clusters, 24-48px inside panels, 64-110px between archival sections; titles always carry padding above them. ## Guidance ### Do - Build all structure from paper on paper — vellum, fold tone, bright slip — lifted by the hard photocopy-offset shadow. - Thread the tape path through every composition so progress and position always read as tape. - Ration phosphor to the single active point per view: playhead, cursor, current step, one primary button. - Keep the three voices strict: Teko titles, IBM Plex Serif testimony at 17px+, Share Tech Mono codes at 12-14.5px, all on one declared scale. - Deliver semantic states as taped strips and badge tints with mono tags. - Write copy as a real recovery bench: accession codes, azimuth trims, bake cycles, donor names, checksums. - Keep one deliberate asymmetric break per screen — a rotated bench note or a schematic crossing the fold. ### Don't - Do not use neon-purple cyberpunk gradients, glassmorphism, chrome, or club lighting. - Do not box content in drawn borders or trap navigation in a floating pill bar. - Do not give any card a single colored edge — not top, not side, not bottom. - Do not arrange equal metric cards; every screen needs a dominant artifact and a scene. - Do not let button, chip, or badge labels wrap; shrink or stack the layout instead. - Do not spend accent color where ink, cream, and oxide can solve the hierarchy. - Do not use default browser form styling or default AI fonts. ### Usage Context Best for archive tools, analog media recovery services, cataloging and ledger software, restoration studio consoles, memory-preservation products, and narrative pages about recovered sound. ### Accessibility Body contrast is #241711 on #F5E9CA (≈13:1); phosphor #0E6B54 on cream passes AA for the mono sizes it is used at; mono labels never go below 12px; status is never carried by color alone (every badge pairs a dot with a text tag); focus is a visible 2px dashed phosphor outline; motion respects prefers-reduced-motion with the settled state as default. ## Imagery Direction ### Technique Hand-drawn archival schematics in oxide-brown ink on cream vellum: cassette mechanisms, tape-path geometry, reel cross-sections, photocopy contour linework, faint ruled paper, taped-in blank slips, and small phosphor-green registration crosses. Flat, matte, precise but warm. ### Avoid Character illustration, neon cityscapes, glossy 3D renders, gradients, and any text, letters, or logos in the artwork. ### Pairs With ferrite
---
version: "alpha"
name: "Ferrite"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#F5E9CA"
surface: "#EDDDB4"
surface_solid: "#FBF4E1"
text: "#241711"
muted: "#6E5848"
border: "#2A1711"
accent: "#0E6B54"
accent_2: "#5A3826"
accent_soft: "#DCE8DB"
on_accent: "#F8F0DA"
success: "#4F6F58"
warning: "#8A5A1E"
error: "#9A3D24"
info: "#3D6E74"
typography:
headline-lg:
fontFamily: "Teko"
fontSize: "2.176rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
headline-md:
fontFamily: "Teko"
fontSize: "1.714rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.02em"
body-md:
fontFamily: "IBM Plex Serif"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.6
letterSpacing: "-0.02em"
label-md:
fontFamily: "Share Tech Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
md: "16px"
lg: "24px"
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-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: "#ffffff"
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"
---
# Ferrite
## Overview
Ferrite is a warm forensic interface language for recovering analog memory: cream vellum, oxide tape masses, three typographic voices, and one phosphor accent reserved for the active point. Named for the magnetic oxide that carries the memory on cassette tape, it treats every screen like a recovery bench treats a fragile reel.
### Values
- Analog evidence first: every surface reads as paper, tape stock, photocopy toner, or a handled archive sleeve — structure comes from paper on paper, never from drawn boxes.
- One ownable mechanic: the tape path — two reels, an oxide band, a phosphor playhead — measures progress, marks position, and threads every composition together.
- Precision without coldness: registration brackets, calibration ticks, and mono catalog codes align surgically while the vellum stays warm.
- Restrained luminance: phosphor green appears only as the active point — playhead, cursor, current step, the one primary action.
- Ink economy: black toner and oxide brown carry recognition before any accent color arrives.
- Existential archive calm: compositions feel like recovered notes from a lab that treats memories as fragile evidence.
### Anti-Values
- Generic neon cyberpunk gradients, glassmorphism, chrome reflections, or synthetic glow as decoration.
- Rounded SaaS cards, boxed navigation, equal dashboard widgets, and anonymous analytics layouts.
- Grunge overload: distress so heavy that labels, diagrams, or registration overlays become illegible.
- Accent color spent on decoration where ink, cream, and oxide brown can solve the hierarchy.
### Visual Character
- Cream vellum ground with faint 36px ruled lines; deeper vellum folds and bright paper slips build all structure, lifted by hard photocopy-offset shadows.
- The tape path recurs everywhere: hero device, live-transfer readout, table progress cells, tab bands, separators.
- J-card anatomy for panels: a 44px labelled spine with rotated mono catalog code, serif body notes, an inset reel window.
- One dark toner mass per page — the annotation rail — with cream mono text and a blinking phosphor cursor.
- Registration brackets, calibration tick strips, and mono ·FE-nnn section codes form one page-wide ornament system.
- Three strict voices: Teko 600 uppercase title cards, IBM Plex Serif 17px+ testimony, Share Tech Mono 12–14.5px operational truth.
## 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 | `#F5E9CA` |
| surface | `#EDDDB4` |
| surface_solid | `#FBF4E1` |
| text | `#241711` |
| muted | `#6E5848` |
| border | `#2A1711` |
| accent | `#0E6B54` |
| accent_2 | `#5A3826` |
| accent_soft | `#DCE8DB` |
| on_accent | `#F8F0DA` |
| success | `#4F6F58` |
| warning | `#8A5A1E` |
| error | `#9A3D24` |
| info | `#3D6E74` |
## Typography
- **Headline-Lg**: Teko, 2.176rem, weight 700, line-height 1.1.
- **Headline-Md**: Teko, 1.714rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Serif, 17px, weight 400, line-height 1.6.
- **Label-Md**: Share Tech 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 uses a 12-column, max-width 1320px archival spread (1440px for bench dashboards) with 24-40px gutters; the dominant artifact spans 7-8 columns, the evidence rail 3-4.
### Breakpoints
Under 640px stacks to a single column with non-essential nav hidden and display type clamped; 640-1024px is its own considered band (2-up grids, the rail becoming a strip, j-cards reflowing); above 1024px restores the full asymmetric spread.
### Density
Medium-high inside instruments (readouts, ledgers, rails), offset by broad untouched vellum margins in an archive-notebook rhythm.
### Responsive
Grids never blow out (minmax(0,1fr) throughout); tables scroll within their slip; buttons and chips never wrap — rows stack instead; hero display type clamps between 44 and 96px and wraps cleanly at 390px.
### Whitespace
8px within instrument clusters, 24-48px inside panels, 64-110px between archival sections; titles always carry padding above them.
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 0 rgba(42,23,17,.14)
- **Md**: 0 6px 20px rgba(90,56,38,.12)
- **Lg**: 12px 14px 0 rgba(90,56,38,.13)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: Matte cream vellum with faint 36px ruled hairlines; structure built from paper-on-paper layers (vellum, fold tone, bright slip) lifted by hard photocopy-offset shadows.
- **Card Style**: Squared j-card slips: bright paper on vellum, a 44px fold-tone spine with rotated mono catalog code, optional inset reel window; no drawn borders.
- **Bg Pattern**: repeating-linear-gradient ruled lines at 13% ink alpha over the cream ground; sparse calibration tick strips as ornament.
### Borders
- **Default Width**: 0
- **Accent Width**: 2px
- **Style**: registration hairlines and dashed phosphor focus outlines only — never container boxes
- **Character**: Structure comes from paper surfaces and ink masses; 1px ink rules appear only as ruled paper, table hairlines, and fold lines; 2px dashed phosphor marks focus.
## Components
### Composition
Build screens as asymmetric archival spreads: one dominant artifact (a tape-path console, a hero slip, a schematic) spanning ~7-8 of 12 columns, a narrow evidence rail of 3-4, taped fragments, and a large quiet vellum field. Include one deliberate grid break per screen — a rotated bench note, a rail hugging the dark edge — while labels, ticks, and codes stay surgically aligned.
### Density
Alternate packed instrument clusters (8px gaps inside readouts and rails) with broad 64-110px archive whitespace. Balance across the canvas: the one dark toner mass anchors each page; never a crowded cluster beside a starved void.
### Hierarchy
Reading order is ink first (Teko title cards), oxide mass second (bands, fills, buttons), phosphor last and smallest (the single active point). Serif carries testimony at 17px+, mono carries operational truth at 12-14.5px. Accent color never decorates; one clearly primary button per scene.
### Signature Patterns
- The tape path: two reel circles joined by an oxide band with a phosphor playhead — progress, position, and section threading in every composition.
- J-card fold anatomy: labelled 44px spines, fold tones, and inset reel windows instead of standard cards.
- The annotation rail: one toner-ink CLI mass per page with prompt symbols, checksums, and a blinking phosphor cursor.
- Taped semantics: alerts and statuses arrive as translucent tape strips across a slip's top edge plus a mono tag — never a colored side edge.
- Registration overlay: phosphor corner brackets, calibration tick strips, and mono ·FE-nnn catalog codes recurring page-wide as one ornament system.
- The splice link gesture: a phosphor band under link text that sweeps up into a highlight on hover.
## 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-019f2e78-a19f-7c62-9aed-d62770afac6a/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 Build all structure from paper on paper — vellum, fold tone, bright slip — lifted by the hard photocopy-offset shadow.
- Do Thread the tape path through every composition so progress and position always read as tape.
- Do Ration phosphor to the single active point per view: playhead, cursor, current step, one primary button.
- Do Keep the three voices strict: Teko titles, IBM Plex Serif testimony at 17px+, Share Tech Mono codes at 12-14.5px, all on one declared scale.
- Do Deliver semantic states as taped strips and badge tints with mono tags.
- Do Write copy as a real recovery bench: accession codes, azimuth trims, bake cycles, donor names, checksums.
- Do Keep one deliberate asymmetric break per screen — a rotated bench note or a schematic crossing the fold.
- Don't Do not use neon-purple cyberpunk gradients, glassmorphism, chrome, or club lighting.
- Don't Do not box content in drawn borders or trap navigation in a floating pill bar.
- Don't Do not give any card a single colored edge — not top, not side, not bottom.
- Don't Do not arrange equal metric cards; every screen needs a dominant artifact and a scene.
- Don't Do not let button, chip, or badge labels wrap; shrink or stack the layout instead.
- Don't Do not spend accent color where ink, cream, and oxide can solve the hierarchy.
- Don't Do not use default browser form styling or default AI fonts.
### Usage Context
Best for archive tools, analog media recovery services, cataloging and ledger software, restoration studio consoles, memory-preservation products, and narrative pages about recovered sound.
### Accessibility
Body contrast is #241711 on #F5E9CA (≈13:1); phosphor #0E6B54 on cream passes AA for the mono sizes it is used at; mono labels never go below 12px; status is never carried by color alone (every badge pairs a dot with a text tag); focus is a visible 2px dashed phosphor outline; motion respects prefers-reduced-motion with the settled state as default.
## Imagery Direction
### Technique
Hand-drawn archival schematics in oxide-brown ink on cream vellum: cassette mechanisms, tape-path geometry, reel cross-sections, photocopy contour linework, faint ruled paper, taped-in blank slips, and small phosphor-green registration crosses. Flat, matte, precise but warm.
### Avoid
Character illustration, neon cityscapes, glossy 3D renders, gradients, and any text, letters, or logos in the artwork.
### Pairs With
ferrite
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "ferrite",
"type": "registry:theme",
"title": "Ferrite shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F5E9CA",
"foreground": "#241711",
"card": "#EDDDB4",
"card-foreground": "#241711",
"popover": "#EDDDB4",
"popover-foreground": "#241711",
"primary": "#241711",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#6E5848",
"muted-foreground": "#241711",
"accent": "#0E6B54",
"accent-foreground": "#ffffff",
"destructive": "#9A3D24",
"border": "#2A1711",
"input": "#2A1711",
"ring": "#0E6B54",
"chart-1": "#241711",
"chart-2": "#f4f4f5",
"chart-3": "#0E6B54",
"chart-4": "#4F6F58",
"chart-5": "#8A5A1E",
"sidebar": "#EDDDB4",
"sidebar-foreground": "#241711",
"sidebar-primary": "#241711",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#3D6E74",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#2A1711",
"sidebar-ring": "#0E6B54",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#241711",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#0E6B54",
"accent-foreground": "#ffffff",
"destructive": "#9A3D24",
"border": "#303642",
"input": "#303642",
"ring": "#0E6B54",
"chart-1": "#241711",
"chart-2": "#f4f4f5",
"chart-3": "#0E6B54",
"chart-4": "#4F6F58",
"chart-5": "#8A5A1E",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#241711",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#0E6B54",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#0E6B54",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019f2e78-a19f-7c62-9aed-d62770afac6a",
"slug": "ferrite",
"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"
]
}
}
}
```The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
The quick brown fox jumps
Agent-generated
Keep Ferriteand swap a palette and an art style onto it — the landing & dashboard recolor live. The Studio does the same with all three lanes free.
Copy this when the target app uses shadcn/ui. It packages the Katagami DESIGN.md context with the install list, theme variables, component recipes, preview-shot contract, and starter TSX in one Markdown companion.
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table:root {
--background: #F5E9CA;
--foreground: #241711;
--card: #EDDDB4;
--card-foreground: #241711;
--popover: #EDDDB4;
--popover-foreground: #241711;
--primary: #241711;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #6E5848;
--muted-foreground: #241711;
--accent: #0E6B54;
--accent-foreground: #ffffff;
--destructive: #9A3D24;
--border: #2A1711;
--input: #2A1711;
--ring: #0E6B54;
--chart-1: #241711;
--chart-2: #f4f4f5;
--chart-3: #0E6B54;
--chart-4: #4F6F58;
--chart-5: #8A5A1E;
--sidebar: #EDDDB4;
--sidebar-foreground: #241711;
--sidebar-primary: #241711;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #3D6E74;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #2A1711;
--sidebar-ring: #0E6B54;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #241711;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #0E6B54;
--accent-foreground: #ffffff;
--destructive: #9A3D24;
--border: #303642;
--input: #303642;
--ring: #0E6B54;
--chart-1: #241711;
--chart-2: #f4f4f5;
--chart-3: #0E6B54;
--chart-4: #4F6F58;
--chart-5: #8A5A1E;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #241711;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #0E6B54;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #0E6B54;
--radius: 16px;
}
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 FerriteShadcnKit() {
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">Ferrite</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": "ferrite",
"type": "registry:theme",
"author": "katagami-agent",
"title": "Ferrite",
"description": "Warm forensic archive theme: cream vellum ground, oxide tape masses, square paper geometry, mono bench annotations, and one phosphor accent reserved for the active point.",
"cssVars": {
"theme": {
"font-sans": "Teko, sans-serif",
"font-serif": "'IBM Plex Serif', serif",
"font-mono": "'Share Tech Mono', monospace",
"radius": "0rem"
},
"light": {
"background": "#F5E9CA",
"foreground": "#241711",
"card": "#FBF4E1",
"card-foreground": "#241711",
"popover": "#FBF4E1",
"popover-foreground": "#241711",
"primary": "#0E6B54",
"primary-foreground": "#F8F0DA",
"secondary": "#5A3826",
"secondary-foreground": "#FBF4E1",
"muted": "#EDDDB4",
"muted-foreground": "#6E5848",
"accent": "#0E6B54",
"accent-foreground": "#F8F0DA",
"destructive": "#9A3D24",
"destructive-foreground": "#FBF4E1",
"border": "rgba(42, 23, 17, 0.13)",
"input": "#FBF4E1",
"ring": "#0E6B54",
"chart-1": "#5A3826",
"chart-2": "#0E6B54",
"chart-3": "#8A5A1E",
"chart-4": "#3D6E74",
"chart-5": "#6E5848",
"radius": "0rem"
}
},
"visualProfile": {
"family": "archival-paper",
"material": "matte cream vellum with paper-on-paper layering; the photocopy-offset shadow (12px 14px 0, hard-cornered) does the lifting instead of borders",
"contour": "dead-square rectangles for all paper; perfect circles only for what spins (reels, radio wells, switch thumbs)",
"border": "none on containers; faint ruled hairlines belong to the paper ground, an ink baseline under inputs turns phosphor on focus",
"underlay": true,
"grain": true,
"stickerBadges": true,
"motion": "scanner-calm: 220ms cubic-bezier(.2,.7,.1,1) linear sweeps and cursor blinks, never bouncy",
"density": "packed instrument clusters beside broad blank vellum",
"accents": ["#0E6B54", "#5A3826"]
},
"notes": "Phosphor (#0E6B54) is rationed to the active point: primary button, playhead, focus ring, current tab tick. Oxide (#5A3826) carries mass: progress fills, secondary buttons, nav bands. Semantic colors arrive as taped strips and badge tints, never as card edges. Labels are Share Tech Mono uppercase and never wrap; body text is IBM Plex Serif 17px+."
}
# Ferrite — shadcn/ui Components
Author: `katagami-agent`
Format: `component-recipes-v1`
Language: Ferrite (`ferrite`) — warm forensic archive interfaces on cream vellum.
This file specifies how the sixteen shadcn/ui primitives are dressed in Ferrite. The renderer and any implementing agent must follow the ShadSync visual profile below; the recipes then describe each primitive's identity in this language.
## ShadSync visual profile
- family: `archival-paper` — structure comes from paper on paper (vellum ground `#F5E9CA`, fold tone, bright slip `#FBF4E1`), never from drawn container borders.
- contour: dead-square rectangles (radius 0) for all paper surfaces; perfect circles (radius 9999) only for what spins — radio wells, switch thumbs, status dots.
- elevation: `0 1px 0 rgba(42,23,17,.14)` for resting paper, `0 6px 20px rgba(90,56,38,.12)` for lifted slips, and the signature photocopy offset `12px 14px 0` oxide-at-13% for hero panels. Shadows stay hard-cornered like the geometry.
- typography: Teko 600 uppercase for display; IBM Plex Serif 17px+ for body; Share Tech Mono 12–14.5px letter-spaced uppercase for labels, codes, and badges. One strict scale: 12 / 14.5 / 17 / 21 / 27 / 34 / 44.
- accents: phosphor `#0E6B54` strictly rationed to the active point (primary action, focus ring, playhead, current tab tick); oxide `#5A3826` carries mass (progress fills, secondary actions, bands). Semantic tints arrive as taped strips, never as card edges.
- focus: `outline: 2px dashed #0E6B54; outline-offset: 4px` — a registration mark, on every interactive element.
- motion: 220ms `cubic-bezier(.2,.7,.1,1)`; linear sweeps and one-step advances, like a transport; respect `prefers-reduced-motion`.
## Signature component recipes
1. **button** — square, borderless, mono uppercase label that never wraps. Primary: phosphor fill, cream text, photocopy hover-shift (translate -2px,-2px + hard offset shadow). Secondary: oxide fill. Tertiary: bright paper slip with sm shadow. Ghost: transparent with the splice underline that thickens on hover. One primary per scene.
2. **card** — the j-card: bright slip with a 44px fold-tone spine column carrying a rotated mono catalog code, body of serif notes, optional reel-window inset (two oxide circles joined by a band on fold tone).
3. **input** — paper well on the vellum, no border, ink baseline (`inset 0 -2px 0` ink at 28%) that turns phosphor on focus; serif 17px value, mono uppercase label above, mono hint below.
4. **textarea** — same paper-well anatomy as input, ruled feel preserved, min 3 rows.
5. **select** — paper well with an inline SVG chevron (ink stroke), mono label; options styled by the OS but the trigger is fully Ferrite.
6. **dialog** — an accession slip lifted off the bench: bright paper, square corners, photocopy offset shadow, phosphor corner registration brackets, dimmed vellum (not black) scrim behind.
7. **sheet** — the evidence rail sliding in from the right: toner-ink panel for log content or bright paper for forms; square edge, no rounded lip.
8. **tabs** — positions on a tape band: a 6px oxide band under the row; the active tab is ink-dark text with a 3px phosphor playhead tick dropping onto the band.
9. **badge** — taped status chips: mono uppercase, square, semantic tint at 14% over paper with a matching status dot; the live/primary state inverts to solid phosphor. Text never wraps.
10. **separator** — a tape path in miniature: hairline rule flanked by two small reel dots, or a plain 4px oxide band at 28% for section breaks.
11. **checkbox** — square paper well with 2px ink inset ring; checked floods phosphor with a cream tick stroke.
12. **switch** — the transport lever: capsule track in pale oxide, circular oxide thumb; on-state floods the track phosphor-soft and the thumb phosphor.
13. **slider** — the azimuth trim: 8px track (oxide fill up to value), a 6×26px rectangular phosphor caliper thumb, calibration ticks optional beneath.
14. **tooltip** — a small taped label: toner-ink slip, cream mono text, square corners, no arrow — it sits offset like a stuck-on note.
15. **dropdown-menu** — a pulled ledger strip: bright paper, square, sm shadow; items are mono 14.5px rows that flood phosphor-soft on highlight; separators are ruled hairlines.
16. **table** — the accession ledger: mono uppercase 12px headers, serif 14.5px rows, ruled hairline row separation only, phosphor-soft row hover; catalog codes in mono, statuses as taped badges.
## Preview shots
`preview-shots.json` (schema `katagami:shadcn-preview-shots/renderable-v1`) stages three bench scenes: the live transfer console (buttons, tabs, badges, slider, table), the accession intake dialog (input, textarea, select, checkbox, switch), and the ledger review sheet (table, dropdown-menu, tooltip, separator). All sixteen primitives above appear across the shots, each styled per this profile — square paper, rationed phosphor, mono labels.
## Copy-paste component example
```tsx
import { Button } from "@/components/ui/button"
import { Badge } from "@/components/ui/badge"
export function TransferControls() {
return (
<div className="flex flex-wrap items-center gap-4">
<Button className="h-[50px] rounded-none bg-[#0E6B54] px-8 font-mono text-[14.5px] uppercase tracking-[0.08em] text-[#F8F0DA] shadow-[0_6px_20px_rgba(90,56,38,.12)] transition-transform hover:-translate-x-[2px] hover:-translate-y-[2px] hover:shadow-[6px_6px_0_rgba(14,107,84,.3)] focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-[#0E6B54]">
Begin transfer
</Button>
<Button className="h-[50px] rounded-none bg-[#5A3826] px-8 font-mono text-[14.5px] uppercase tracking-[0.08em] text-[#FBF4E1]">
Wind to cue
</Button>
<Badge className="rounded-none bg-[#0E6B54] px-3 py-1 font-mono text-[12px] uppercase tracking-[0.08em] text-[#F8F0DA]">
Capturing
</Badge>
</div>
)
}
```
Import primitives from `@/components/ui/` as usual; the theme in `export.json` (registry-theme-v1) supplies the vellum ground, square radius, and phosphor ring so unmodified primitives already sit on the bench correctly.
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"author": "katagami-agent",
"requiresVisualProfile": true,
"language": {
"id": "ferrite",
"name": "Ferrite",
"slug": "ferrite"
},
"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": [
"Structure is paper on paper: cream vellum ground, fold tones, bright slips — no drawn container borders anywhere.",
"Dead-square geometry for all paper; perfect circles only for what spins (radio wells, switch thumbs, status dots).",
"Phosphor #0E6B54 is rationed to the active point: one primary button, the focus ring, the playhead tick, the current tab.",
"Oxide #5A3826 carries mass: progress fills, secondary buttons, tape bands under tabs and navs.",
"Labels and codes are Share Tech Mono uppercase and never wrap; body is IBM Plex Serif 17px+; display is Teko 600 uppercase.",
"Semantic states arrive as taped strips and badge tints — never as a colored card edge.",
"Focus is a registration mark: 2px dashed phosphor outline, offset 4px."
],
"visualProfile": {
"family": "archival-paper",
"material": "matte cream vellum, paper-on-paper layering, photocopy-offset shadows (12px 14px 0) on hero panels",
"contour": "square",
"border": "none on containers; ink baseline under inputs turning phosphor on focus; faint ruled hairlines belong to the page ground",
"underlay": true,
"grain": true,
"stickerBadges": true,
"motion": "scanner-calm 220ms cubic-bezier(.2,.7,.1,1), linear sweeps, reduced-motion respected",
"density": "packed instrument clusters beside broad blank vellum",
"accents": ["#0E6B54", "#5A3826"]
},
"tokens": {
"background": "#F5E9CA",
"surface": "#EDDDB4",
"card": "#FBF4E1",
"text": "#241711",
"muted": "#6E5848",
"accent": "#0E6B54",
"onAccent": "#F8F0DA",
"secondary": "#5A3826",
"success": "#4F6F58",
"warning": "#8A5A1E",
"error": "#9A3D24",
"info": "#3D6E74",
"radius": "0px",
"fontDisplay": "Teko",
"fontBody": "IBM Plex Serif",
"fontMono": "Share Tech Mono",
"shadowSm": "0 1px 0 rgba(42,23,17,.14)",
"shadowMd": "0 6px 20px rgba(90,56,38,.12)",
"shadowLg": "12px 14px 0 rgba(90,56,38,.13)"
},
"shots": [
{
"id": "deck-console",
"title": "Live transfer console",
"viewport": "desktop",
"primitives": ["button", "tabs", "badge", "slider", "table", "separator", "card"],
"composition": "A dominant j-card panel titled with the deck and catalog code, a solid phosphor 'Capturing' badge top right, tabs riding an oxide tape band, the azimuth slider with its rectangular phosphor caliper, and the accession ledger table below with taped status badges; a tape-path separator closes the panel.",
"mustShow": [
"one phosphor primary button and quieter oxide/paper buttons at one shared height",
"active tab marked by a phosphor playhead tick dropping onto the oxide band",
"table rows separated by ruled hairlines only, with mono catalog codes",
"square geometry and photocopy-offset shadow on the main panel"
],
"avoid": [
"rounded corners on any paper surface",
"colored card edges or heavy container borders",
"more than one phosphor-filled button"
],
"scene": {
"headline": "Deck MR-1 · FE-1976-A-04",
"description": "The bench console mid-capture: azimuth locked at +12 minutes of arc, playhead at 00:23:41, voice detected.",
"rows": [
{ "catalog": "FE-1976-A-04", "contents": "Breakfast, birthday, radio behind", "deck": "MR-1", "status": "Capturing" },
{ "catalog": "FE-1983-D-11", "contents": "Shortwave logging, 6840 kHz", "deck": "oven", "status": "Baking" },
{ "catalog": "FE-1988-F-07", "contents": "Choir rehearsal, St. Olaf's crypt", "deck": "MR-2", "status": "Delivered" },
{ "catalog": "FE-1979-B-02", "contents": "Answering machine, unknown voices", "deck": "bench", "status": "Splice queue" }
]
}
},
{
"id": "accession-intake",
"title": "Accession intake dialog",
"viewport": "desktop",
"primitives": ["dialog", "input", "textarea", "select", "checkbox", "switch", "button"],
"composition": "An accession slip dialog lifted over a dimmed vellum bench: phosphor corner registration brackets, mono uppercase field labels, paper-well inputs with ink baselines, a tape-stock select, bake/decode checkboxes, the monitor-off-tape transport switch, and one phosphor 'Open ledger line' primary.",
"mustShow": [
"dialog as a square bright-paper slip with photocopy-offset shadow and phosphor corner brackets",
"input focus shown as the baseline turning phosphor",
"checked checkbox flooded phosphor with a cream tick",
"switch as a capsule transport lever with circular thumb"
],
"avoid": [
"default browser form styling",
"black overlay scrim — the vellum dims instead",
"wrapping labels on any control"
],
"scene": {
"headline": "Open a ledger line",
"description": "Donor intake for a shoebox of C-90s: name as written on the shell, suspected contents, stock type, and bench options before the first wind.",
"fields": [
{ "label": "Donor name", "value": "Marta Ojanen", "primitive": "input" },
{ "label": "Bench observation", "value": "Shell cracked at the hub. Pad spring intact. Bake before first wind.", "primitive": "textarea" },
{ "label": "Tape stock", "value": "Type II — chrome", "primitive": "select" },
{ "label": "Bake before transfer", "value": "checked", "primitive": "checkbox" },
{ "label": "Monitor off tape", "value": "on", "primitive": "switch" }
]
}
},
{
"id": "ledger-review",
"title": "Ledger review rail",
"viewport": "tablet",
"primitives": ["sheet", "table", "dropdown-menu", "tooltip", "badge", "separator"],
"composition": "The evidence rail sheet slid in from the right over the deck room: a compact ledger table of today's reels, a per-row dropdown of bench actions (thread, bake, splice, quarantine), a tooltip explaining the splice-shadow note as a taped toner label, tape-path separators between groups.",
"mustShow": [
"sheet with a square edge and no rounded lip",
"dropdown as a bright ledger strip with mono rows and phosphor-soft highlight",
"tooltip as a toner-ink taped label with cream mono text and no arrow",
"stats delivered as taped badges, not colored edges"
],
"avoid": [
"rounded sheet corners",
"arrowed bubble tooltips",
"equal-weight metric cards"
],
"scene": {
"headline": "Today's reels · shift B",
"description": "Reviewing the day: one reel capturing, one baking, one delivered, one waiting on the splice bench.",
"stats": [
{ "label": "reels held", "value": "217" },
{ "label": "audio recovered", "value": "41 h" },
{ "label": "reels lost", "value": "0" }
]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Square, borderless, mono uppercase, never wraps; phosphor primary with photocopy hover-shift, oxide secondary, paper tertiary, splice-underline ghost. One primary per scene." },
{ "primitive": "card", "intent": "The j-card: bright slip with a 44px fold-tone spine carrying a rotated mono catalog code, serif body, optional reel-window inset." },
{ "primitive": "input", "intent": "Paper well with an ink baseline that turns phosphor on focus; serif 17px value, mono uppercase label, mono hint." },
{ "primitive": "textarea", "intent": "Same paper-well anatomy as input; three rows minimum; bench observations in serif." },
{ "primitive": "select", "intent": "Paper well with inline ink-stroke SVG chevron; trigger fully styled, mono label above." },
{ "primitive": "dialog", "intent": "Accession slip over dimmed vellum: square bright paper, photocopy-offset shadow, phosphor corner registration brackets." },
{ "primitive": "sheet", "intent": "The evidence rail sliding from the right; toner-ink for logs, bright paper for forms; square edge." },
{ "primitive": "tabs", "intent": "Positions on a tape band: 6px oxide band under the row, active tab gets a 3px phosphor playhead tick." },
{ "primitive": "badge", "intent": "Taped status chip: mono uppercase, square, semantic tint at 14% with status dot; live state inverts to solid phosphor." },
{ "primitive": "separator", "intent": "A miniature tape path — hairline with two reel dots — or a 4px oxide band at 28% for section breaks." },
{ "primitive": "checkbox", "intent": "Square paper well with 2px ink inset ring; checked floods phosphor with a cream tick stroke." },
{ "primitive": "switch", "intent": "Transport lever: pale-oxide capsule track, circular oxide thumb; on-state floods phosphor." },
{ "primitive": "slider", "intent": "Azimuth trim: 8px oxide-filled track with a 6×26px rectangular phosphor caliper thumb." },
{ "primitive": "tooltip", "intent": "Taped toner label: dark slip, cream mono text, square, arrowless, offset like a stuck-on note." },
{ "primitive": "dropdown-menu", "intent": "Pulled ledger strip: bright paper, mono 14.5px rows, phosphor-soft highlight, ruled hairline separators." },
{ "primitive": "table", "intent": "The accession ledger: mono 12px uppercase headers, serif 14.5px rows, hairline row rules only, phosphor-soft hover, taped status badges." }
],
"qualityRules": {
"do": [
"Keep every paper surface dead-square and borderless; let shadows and fold tones do the structure.",
"Ration phosphor to the single active point per view.",
"Set all labels, codes and badges in Share Tech Mono uppercase at 12–14.5px.",
"Thread the tape-path motif through progress, tabs, and separators so position always reads as tape.",
"Keep body copy IBM Plex Serif at 17px or larger with high contrast on cream."
],
"dont": [
"No rounded corners on paper surfaces; circles are reserved for spinning parts.",
"No colored card edges, gradients, glass, or glow.",
"No wrapping button or badge labels — shrink content or stack the layout.",
"No default browser form styling anywhere.",
"No spending accent color on decoration that ink, cream, and oxide can solve."
]
}
}