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 pages as a film reel: a dominant captioned strip of cells sequenced left to right on a sprocket-perforated leader, framed by perforation rails at the margins, with a literary serif lede setting the scene above.
Lead with an optical Fraunces serif headline, descend into Inter Tight summaries, Space Mono cues and tabular figures, and caption-scale annotations so information feels authored and sequenced rather than dumped.
High density controlled by the reel: every cluster of figures is a captioned cell with whitespace and mono labels, advanced on one shared sprocket that preserves reading order.
Data rides a horizontal sprocket-perforated film strip of registration-ticked cells; charts sit over an instrument-grid and scanline scaffold with an amber playhead; controls reveal through ink fill and a measured amber ring, never soft fills.
A 12-column desktop grid with a dominant horizontal reel and asymmetric supporting spans; a two-column tablet reduction; a single-column mobile stack that keeps the leader band and corner ticks wherever possible.
Deliberate and editorial: generous outer margins, compact internal cell padding, and larger inter-section gaps that pace the page like reels.
dense
Renders from ~390px mobile to 2560px+ ultra-wide; mobile stacks to one column, hides non-essential nav links and table columns, and drops the side perforation rails; the full-bleed hero spans 100vw while contained content caps and centres.
scanline-bureau
Instrumented telemetry captures rendered on a warm bone-parchment daylight ground rather than dark — projection-booth subjects (projectors, reels, the gate) dressed with a faint instrument grid, scanline texture, and a single electric amber halation as the projector beam.
One full-bleed landing hero composed wide with the projector body left-of-centre and the amber beam exiting the right edge, leaving a darker left zone for the overlay headline; keep the subject full-frame so the instrument grid reads as an overlay, not surrounding apparatus.
# Sprocket ## Philosophy Sprocket threads live operations through a film projector: every metric is a frame on a sprocket-perforated strip, captioned where it sits and advanced on one shared mechanism, so an operator reads a control room like a screening rather than a scoreboard. A warm bone-parchment daylight ground (a printed cinema programme, not a dark room), deep oxblood ink, and one electric amber that reads like the projector beam. ### Values - editorial pacing before decorative futurism - data sequenced on one reel and captioned in place, not stacked as identical tiles - warm daylight atmosphere with accessibility-aware contrast - cinematic worldbuilding through measured typographic restraint, not neon ### Anti-Values - arcade neon overload without information structure - generic dashboard cards with a palette pasted on top - dark control-room cliche; the daylight bone ground is the identity - skeuomorphic cockpit clutter that defeats reading flow ### Visual Character - A warm bone-parchment field carries a dark sprocket-perforated film-leader band as its spine; metrics ride that reel as captioned cells, sequenced left to right like film rather than floating as isolated cards. - Perforation rails run down the left and right margins, framing the page as film stock; the landing hero is a full-bleed projector with an amber halation beam and the same film edges. - Every focal cell carries an oxblood corner crosshair registration tick instead of a boxed border, reading as a frame mounted on a light table. - An optical Fraunces serif narrates, a tight Inter Tight grotesk runs operations, and a tabular Space Mono types the cues, timestamps, and indexes — three voices on one strip. - Charts and timelines sit over a faint instrument-grid and scanline scaffold with an amber playhead and crosshair registration, so data reads instrumented without sci-fi chrome. - Controls reveal through ink fill, hairline brightening, and a single measured amber ring; the amber is one signal, used like the projector beam, never a flood. ## Tokens ### Colors | Name | Value | |------|-------| | primary | `#7A1B22` | | secondary | `#E8761A` | | accent | `#E8761A` | | background | `#F4EFE6` | | surface | `#FBF8F2` | | text | `#1A1410` | | muted | `#6E5F52` | | border | `#D8CDBC` | | error | `#B23A2E` | | success | `#2F7D52` | | warning | `#B5781A` | | info | `#345C8A` | | strip | `#231012` | | strip_ink | `#F2E4D0` | | amber_soft | `#F6B16A` | | on_accent | `#231012` | ### Typography - **Heading Font**: Fraunces - **Body Font**: Inter Tight - **Mono Font**: Space Mono - **Base Size**: 17px - **Scale Ratio**: 1.25 - **Line Height**: 1.55 - **Letter Spacing**: -0.005em - **Heading Weight**: 700 - **Heading Transform**: none - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,500;0,9..144,600;0,9..144,700;1,9..144,500;1,9..144,600&family=Inter+Tight:wght@400;500;600;700&family=Space+Mono:wght@400;700&display=swap ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64] ### Radii - **None**: 0 - **Sm**: 0 - **Md**: 0 - **Lg**: 0 - **Full**: 9999px ### Shadows - **Sm**: 0 1px 0 rgba(122,27,34,.06), 0 8px 20px rgba(35,16,18,.07) - **Md**: 0 1px 0 rgba(122,27,34,.07), 0 14px 36px rgba(35,16,18,.10) - **Lg**: 0 1px 0 rgba(122,27,34,.10), 0 24px 60px rgba(35,16,18,.14) ### Surfaces - **Treatment**: scanline - **Card Style**: Lit film cells on a warm bone ground, mounted on a dark sprocket-perforated leader band; an oxblood corner registration tick replaces any border; glow and scanlines stay faint overlays, never glassy. - **Bg Pattern**: instrument-grid ### Borders - **Default Width**: 1px - **Accent Width**: 2px - **Style**: solid - **Character**: No boxed borders: structure comes from the dark film-leader band, hairline rules, generous space, and oxblood corner registration ticks; never a heavy or single-accent card edge. ### Motion - **Duration**: 240ms - **Easing**: cubic-bezier(0.2,0.8,0.2,1) - **Philosophy**: deliberate; the settled state is the no-JS default, reveals layered on top via a .js-gated start-state, fully disabled under prefers-reduced-motion ## Rules ### Composition Build pages as a film reel: a dominant captioned strip of cells sequenced left to right on a sprocket-perforated leader, framed by perforation rails at the margins, with a literary serif lede setting the scene above. ### Hierarchy Lead with an optical Fraunces serif headline, descend into Inter Tight summaries, Space Mono cues and tabular figures, and caption-scale annotations so information feels authored and sequenced rather than dumped. ### Density High density controlled by the reel: every cluster of figures is a captioned cell with whitespace and mono labels, advanced on one shared sprocket that preserves reading order. ### Signature Data rides a horizontal sprocket-perforated film strip of registration-ticked cells; charts sit over an instrument-grid and scanline scaffold with an amber playhead; controls reveal through ink fill and a measured amber ring, never soft fills. ## Layout ### Grid A 12-column desktop grid with a dominant horizontal reel and asymmetric supporting spans; a two-column tablet reduction; a single-column mobile stack that keeps the leader band and corner ticks wherever possible. ### Whitespace Deliberate and editorial: generous outer margins, compact internal cell padding, and larger inter-section gaps that pace the page like reels. ### Density dense ### Responsive Renders from ~390px mobile to 2560px+ ultra-wide; mobile stacks to one column, hides non-essential nav links and table columns, and drops the side perforation rails; the full-bleed hero spans 100vw while contained content caps and centres. ### Breakpoints - **Mobile**: 390px - **Tablet**: 768px - **Desktop**: 1440px - **Ultrawide**: 1700px ## Guidance ### Do - Pair the serif narration with the mono cue track so figures never lose context. - Mount data as captioned cells on the reel; caption where it happens. - Keep the amber a single projector-beam signal; let the dark leader and space do the separating. ### Don't - Do not drift to a dark control-room ground; the daylight bone is the identity. - Do not box cells in borders or stack identical tiles; the reel sequences them. - Do not use neon or more than the three accents, or round the square frames. ### Accessibility Body 17px+, table rows 14.5px+; ink on bone and strip-ink on leader both clear AA. The hero overlay uses a directional ink veil, not a lazy scrim, to keep the headline legible. Status uses labelled chips (colour AND text). Motion respects prefers-reduced-motion; the settled page renders with no JavaScript. ## Imagery Direction ### Pairs With scanline-bureau ### Summary Instrumented telemetry captures rendered on a warm bone-parchment daylight ground rather than dark — projection-booth subjects (projectors, reels, the gate) dressed with a faint instrument grid, scanline texture, and a single electric amber halation as the projector beam. ### Subjects - film projector and mounted reel - the gate and sprocket mechanism - a contact sheet / light table of frames - a projection beam in a daylit booth ### Usage One full-bleed landing hero composed wide with the projector body left-of-centre and the amber beam exiting the right edge, leaving a darker left zone for the overlay headline; keep the subject full-frame so the instrument grid reads as an overlay, not surrounding apparatus.
---
version: "alpha"
name: "Sprocket"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
primary: "#7A1B22"
secondary: "#E8761A"
accent: "#E8761A"
background: "#F4EFE6"
surface: "#FBF8F2"
text: "#1A1410"
muted: "#6E5F52"
border: "#D8CDBC"
error: "#B23A2E"
success: "#2F7D52"
warning: "#B5781A"
info: "#345C8A"
strip: "#231012"
strip_ink: "#F2E4D0"
amber_soft: "#F6B16A"
on_accent: "#231012"
typography:
headline-lg:
fontFamily: "Fraunces"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.005em"
headline-md:
fontFamily: "Fraunces"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.005em"
body-md:
fontFamily: "Inter Tight"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.55
letterSpacing: "-0.005em"
label-md:
fontFamily: "Space Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
sm: "0px"
md: "0px"
lg: "0px"
full: "9999px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "12px"
lg: "16px"
xl: "24px"
2xl: "32px"
3xl: "48px"
4xl: "64px"
components:
color-reference-primary:
backgroundColor: "{colors.primary}"
color-reference-secondary:
backgroundColor: "{colors.secondary}"
color-reference-accent:
backgroundColor: "{colors.accent}"
color-reference-background:
backgroundColor: "{colors.background}"
color-reference-surface:
backgroundColor: "{colors.surface}"
color-reference-text:
backgroundColor: "{colors.text}"
color-reference-muted:
backgroundColor: "{colors.muted}"
color-reference-border:
backgroundColor: "{colors.border}"
color-reference-error:
backgroundColor: "{colors.error}"
color-reference-success:
backgroundColor: "{colors.success}"
color-reference-warning:
backgroundColor: "{colors.warning}"
color-reference-info:
backgroundColor: "{colors.info}"
color-reference-strip:
backgroundColor: "{colors.strip}"
color-reference-strip_ink:
backgroundColor: "{colors.strip_ink}"
color-reference-amber_soft:
backgroundColor: "{colors.amber_soft}"
color-reference-on_accent:
backgroundColor: "{colors.on_accent}"
button-primary:
backgroundColor: "{colors.primary}"
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"
---
# Sprocket
## Overview
Sprocket threads live operations through a film projector: every metric is a frame on a sprocket-perforated strip, captioned where it sits and advanced on one shared mechanism, so an operator reads a control room like a screening rather than a scoreboard. A warm bone-parchment daylight ground (a printed cinema programme, not a dark room), deep oxblood ink, and one electric amber that reads like the projector beam.
### Values
- editorial pacing before decorative futurism
- data sequenced on one reel and captioned in place, not stacked as identical tiles
- warm daylight atmosphere with accessibility-aware contrast
- cinematic worldbuilding through measured typographic restraint, not neon
### Anti-Values
- arcade neon overload without information structure
- generic dashboard cards with a palette pasted on top
- dark control-room cliche; the daylight bone ground is the identity
- skeuomorphic cockpit clutter that defeats reading flow
### Visual Character
- A warm bone-parchment field carries a dark sprocket-perforated film-leader band as its spine; metrics ride that reel as captioned cells, sequenced left to right like film rather than floating as isolated cards.
- Perforation rails run down the left and right margins, framing the page as film stock; the landing hero is a full-bleed projector with an amber halation beam and the same film edges.
- Every focal cell carries an oxblood corner crosshair registration tick instead of a boxed border, reading as a frame mounted on a light table.
- An optical Fraunces serif narrates, a tight Inter Tight grotesk runs operations, and a tabular Space Mono types the cues, timestamps, and indexes — three voices on one strip.
- Charts and timelines sit over a faint instrument-grid and scanline scaffold with an amber playhead and crosshair registration, so data reads instrumented without sci-fi chrome.
- Controls reveal through ink fill, hairline brightening, and a single measured amber ring; the amber is one signal, used like the projector beam, never a flood.
## Colors
Use the YAML color tokens as the normative palette. The prose below names the roles agents should preserve when generating UI.
| Token | Value |
|-------|-------|
| primary | `#7A1B22` |
| secondary | `#E8761A` |
| accent | `#E8761A` |
| background | `#F4EFE6` |
| surface | `#FBF8F2` |
| text | `#1A1410` |
| muted | `#6E5F52` |
| border | `#D8CDBC` |
| error | `#B23A2E` |
| success | `#2F7D52` |
| warning | `#B5781A` |
| info | `#345C8A` |
| strip | `#231012` |
| strip_ink | `#F2E4D0` |
| amber_soft | `#F6B16A` |
| on_accent | `#231012` |
## Typography
- **Headline-Lg**: Fraunces, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Fraunces, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Inter Tight, 17px, weight 400, line-height 1.55.
- **Label-Md**: Space 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
A 12-column desktop grid with a dominant horizontal reel and asymmetric supporting spans; a two-column tablet reduction; a single-column mobile stack that keeps the leader band and corner ticks wherever possible.
### Whitespace
Deliberate and editorial: generous outer margins, compact internal cell padding, and larger inter-section gaps that pace the page like reels.
### Density
dense
### Responsive
Renders from ~390px mobile to 2560px+ ultra-wide; mobile stacks to one column, hides non-essential nav links and table columns, and drops the side perforation rails; the full-bleed hero spans 100vw while contained content caps and centres.
### Breakpoints
- **Mobile**: 390px
- **Tablet**: 768px
- **Desktop**: 1440px
- **Ultrawide**: 1700px
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 0 rgba(122,27,34,.06), 0 8px 20px rgba(35,16,18,.07)
- **Md**: 0 1px 0 rgba(122,27,34,.07), 0 14px 36px rgba(35,16,18,.10)
- **Lg**: 0 1px 0 rgba(122,27,34,.10), 0 24px 60px rgba(35,16,18,.14)
## Shapes
### Rounded
- **None**: `0px`
- **Sm**: `0px`
- **Md**: `0px`
- **Lg**: `0px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: scanline
- **Card Style**: Lit film cells on a warm bone ground, mounted on a dark sprocket-perforated leader band; an oxblood corner registration tick replaces any border; glow and scanlines stay faint overlays, never glassy.
- **Bg Pattern**: instrument-grid
### Borders
- **Default Width**: 1px
- **Accent Width**: 2px
- **Style**: solid
- **Character**: No boxed borders: structure comes from the dark film-leader band, hairline rules, generous space, and oxblood corner registration ticks; never a heavy or single-accent card edge.
## Components
### Composition
Build pages as a film reel: a dominant captioned strip of cells sequenced left to right on a sprocket-perforated leader, framed by perforation rails at the margins, with a literary serif lede setting the scene above.
### Hierarchy
Lead with an optical Fraunces serif headline, descend into Inter Tight summaries, Space Mono cues and tabular figures, and caption-scale annotations so information feels authored and sequenced rather than dumped.
### Density
High density controlled by the reel: every cluster of figures is a captioned cell with whitespace and mono labels, advanced on one shared sprocket that preserves reading order.
### Signature
Data rides a horizontal sprocket-perforated film strip of registration-ticked cells; charts sit over an instrument-grid and scanline scaffold with an amber playhead; controls reveal through ink fill and a measured amber ring, never soft fills.
## 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-019ef8a5-edcc-7773-9eb9-8c37c3c64da0/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 Pair the serif narration with the mono cue track so figures never lose context.
- Do Mount data as captioned cells on the reel; caption where it happens.
- Do Keep the amber a single projector-beam signal; let the dark leader and space do the separating.
- Don't Do not drift to a dark control-room ground; the daylight bone is the identity.
- Don't Do not box cells in borders or stack identical tiles; the reel sequences them.
- Don't Do not use neon or more than the three accents, or round the square frames.
### Accessibility
Body 17px+, table rows 14.5px+; ink on bone and strip-ink on leader both clear AA. The hero overlay uses a directional ink veil, not a lazy scrim, to keep the headline legible. Status uses labelled chips (colour AND text). Motion respects prefers-reduced-motion; the settled page renders with no JavaScript.
## Imagery Direction
### Pairs With
scanline-bureau
### Summary
Instrumented telemetry captures rendered on a warm bone-parchment daylight ground rather than dark — projection-booth subjects (projectors, reels, the gate) dressed with a faint instrument grid, scanline texture, and a single electric amber halation as the projector beam.
### Subjects
- film projector and mounted reel
- the gate and sprocket mechanism
- a contact sheet / light table of frames
- a projection beam in a daylit booth
### Usage
One full-bleed landing hero composed wide with the projector body left-of-centre and the amber beam exiting the right edge, leaving a darker left zone for the overlay headline; keep the subject full-frame so the instrument grid reads as an overlay, not surrounding apparatus.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "sprocket",
"type": "registry:theme",
"title": "Sprocket shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F4EFE6",
"foreground": "#1A1410",
"card": "#FBF8F2",
"card-foreground": "#1A1410",
"popover": "#FBF8F2",
"popover-foreground": "#1A1410",
"primary": "#7A1B22",
"primary-foreground": "#ffffff",
"secondary": "#E8761A",
"secondary-foreground": "#ffffff",
"muted": "#6E5F52",
"muted-foreground": "#1A1410",
"accent": "#E8761A",
"accent-foreground": "#ffffff",
"destructive": "#B23A2E",
"border": "#D8CDBC",
"input": "#D8CDBC",
"ring": "#E8761A",
"chart-1": "#7A1B22",
"chart-2": "#E8761A",
"chart-3": "#E8761A",
"chart-4": "#2F7D52",
"chart-5": "#B5781A",
"sidebar": "#FBF8F2",
"sidebar-foreground": "#1A1410",
"sidebar-primary": "#7A1B22",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#345C8A",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#D8CDBC",
"sidebar-ring": "#E8761A",
"radius": "0"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#7A1B22",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#E8761A",
"accent-foreground": "#ffffff",
"destructive": "#B23A2E",
"border": "#303642",
"input": "#303642",
"ring": "#E8761A",
"chart-1": "#7A1B22",
"chart-2": "#E8761A",
"chart-3": "#E8761A",
"chart-4": "#2F7D52",
"chart-5": "#B5781A",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#7A1B22",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#E8761A",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#E8761A",
"radius": "0"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019ef8a5-edcc-7773-9eb9-8c37c3c64da0",
"slug": "sprocket",
"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",
"amber_soft",
"background",
"border",
"error",
"info",
"muted",
"on_accent",
"primary",
"secondary",
"strip",
"strip_ink",
"success",
"surface",
"text",
"warning"
],
"typography": [
"base_size",
"body_font",
"google_fonts_url",
"heading_font",
"heading_transform",
"heading_weight",
"letter_spacing",
"line_height",
"mono_font",
"scale_ratio"
],
"spacing": [
"base",
"scale"
],
"radii": [
"full",
"lg",
"md",
"none",
"sm"
],
"shadows": [
"lg",
"md",
"sm"
],
"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 Sprocketand 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: #F4EFE6;
--foreground: #1A1410;
--card: #FBF8F2;
--card-foreground: #1A1410;
--popover: #FBF8F2;
--popover-foreground: #1A1410;
--primary: #7A1B22;
--primary-foreground: #ffffff;
--secondary: #E8761A;
--secondary-foreground: #ffffff;
--muted: #6E5F52;
--muted-foreground: #1A1410;
--accent: #E8761A;
--accent-foreground: #ffffff;
--destructive: #B23A2E;
--border: #D8CDBC;
--input: #D8CDBC;
--ring: #E8761A;
--chart-1: #7A1B22;
--chart-2: #E8761A;
--chart-3: #E8761A;
--chart-4: #2F7D52;
--chart-5: #B5781A;
--sidebar: #FBF8F2;
--sidebar-foreground: #1A1410;
--sidebar-primary: #7A1B22;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #345C8A;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #D8CDBC;
--sidebar-ring: #E8761A;
--radius: 0;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #7A1B22;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #E8761A;
--accent-foreground: #ffffff;
--destructive: #B23A2E;
--border: #303642;
--input: #303642;
--ring: #E8761A;
--chart-1: #7A1B22;
--chart-2: #E8761A;
--chart-3: #E8761A;
--chart-4: #2F7D52;
--chart-5: #B5781A;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #7A1B22;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #E8761A;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #E8761A;
--radius: 0;
}
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
export function SprocketShadcnKit() {
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">Sprocket</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": "sprocket",
"type": "registry:theme",
"author": "katagami-agent",
"visualProfile": {
"vibe": "warm-daylight cinema-program; sprocketed film strip; oxblood ink + one amber projector-beam signal on bone parchment",
"radius": "square frames (0) for every surface and control; full-round only for status pips",
"border": "no boxed borders; structure from a dark film-leader band, hairline rules, generous space, and oxblood corner registration ticks",
"elevation": "restrained ink-tinted shadows; controls reveal through ink fill, hairline brightening, and a measured amber ring — never glassy or glowing soft fills",
"typography": "Fraunces display serif, Inter Tight body, Space Mono tabular for cues/figures",
"motion": "240ms cubic-bezier(0.2,0.8,0.2,1); settled state is the no-JS default"
},
"cssVars": {
"theme": {
"font-sans": "Inter Tight, ui-sans-serif, system-ui, sans-serif",
"font-serif": "Fraunces, Georgia, serif",
"font-mono": "Space Mono, ui-monospace, SFMono-Regular, Menlo, monospace",
"radius": "0px"
},
"light": {
"background": "#F4EFE6",
"foreground": "#1A1410",
"card": "#FBF8F2",
"card-foreground": "#1A1410",
"popover": "#FBF8F2",
"popover-foreground": "#1A1410",
"primary": "#7A1B22",
"primary-foreground": "#FBEFD9",
"secondary": "#ECE4D6",
"secondary-foreground": "#1A1410",
"muted": "#ECE4D6",
"muted-foreground": "#6E5F52",
"accent": "#E8761A",
"accent-foreground": "#231012",
"destructive": "#B23A2E",
"destructive-foreground": "#FBEFD9",
"border": "#D8CDBC",
"input": "#C4B6A1",
"ring": "#7A1B22",
"chart-1": "#7A1B22",
"chart-2": "#E8761A",
"chart-3": "#F6B16A",
"chart-4": "#345C8A",
"chart-5": "#2F7D52"
},
"dark": {
"background": "#231012",
"foreground": "#F2E4D0",
"card": "#2E171A",
"card-foreground": "#F2E4D0",
"popover": "#2E171A",
"popover-foreground": "#F2E4D0",
"primary": "#E8761A",
"primary-foreground": "#231012",
"secondary": "#3A0E12",
"secondary-foreground": "#F2E4D0",
"muted": "#3A0E12",
"muted-foreground": "#C4A99A",
"accent": "#F6B16A",
"accent-foreground": "#231012",
"destructive": "#E06A5C",
"destructive-foreground": "#231012",
"border": "#4A2A2E",
"input": "#4A2A2E",
"ring": "#E8761A",
"chart-1": "#E8761A",
"chart-2": "#F6B16A",
"chart-3": "#7A1B22",
"chart-4": "#79A3CF",
"chart-5": "#6FE0A6"
}
}
}
# Sprocket shadcn/ui Components
Artifact: `component-recipes-v1`
Author: `katagami-ui-projection`
Language ID: `en-019ef8a5-edcc-7773-9eb9-8c37c3c64da0`
Slug: `sprocket`
## Intent
Sprocket threads live operations through a film projector: every metric is a frame on a sprocket-perforated strip, captioned where it sits and advanced on one shared mechanism, so an operator reads a control room like a screening rather than a scoreboard. A warm bone-parchment daylight ground (a printed cinema programme, not a dark room), deep oxblood ink, and one electric amber that reads like the projector beam.
## Required primitives
- button
- card
- input
- textarea
- select
- dialog
- sheet
- tabs
- badge
- separator
- checkbox
- switch
- slider
- tooltip
- dropdown-menu
- table
Install with `npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table`.
## Token cues
Colors:
{
"primary": "#7A1B22",
"secondary": "#E8761A",
"accent": "#E8761A",
"background": "#F4EFE6",
"surface": "#FBF8F2",
"text": "#1A1410",
"muted": "#6E5F52",
"border": "#D8CDBC",
"error": "#B23A2E",
"success": "#2F7D52",
"warning": "#B5781A",
"info": "#345C8A",
"strip": "#231012",
"strip_ink": "#F2E4D0",
"amber_soft": "#F6B16A",
"on_accent": "#231012"
}
Typography:
{
"heading_font": "Fraunces",
"body_font": "Inter Tight",
"mono_font": "Space Mono",
"base_size": "17px",
"scale_ratio": 1.25,
"line_height": 1.55,
"letter_spacing": "-0.005em",
"heading_weight": 700,
"heading_transform": "none",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,500;0,9..144,600;0,9..144,700;1,9..144,500;1,9..144,600&family=Inter+Tight:wght@400;500;600;700&family=Space+Mono:wght@400;700&display=swap"
}
## Visual character to preserve
- A warm bone-parchment field carries a dark sprocket-perforated film-leader band as its spine; metrics ride that reel as captioned cells, sequenced left to right like film rather than floating as isolated cards.
- Perforation rails run down the left and right margins, framing the page as film stock; the landing hero is a full-bleed projector with an amber halation beam and the same film edges.
- Every focal cell carries an oxblood corner crosshair registration tick instead of a boxed border, reading as a frame mounted on a light table.
- An optical Fraunces serif narrates, a tight Inter Tight grotesk runs operations, and a tabular Space Mono types the cues, timestamps, and indexes — three voices on one strip.
- Charts and timelines sit over a faint instrument-grid and scanline scaffold with an amber playhead and crosshair registration, so data reads instrumented without sci-fi chrome.
- Controls reveal through ink fill, hairline brightening, and a single measured amber ring; the amber is one signal, used like the projector beam, never a flood.
## ShadSync visual profile
{
"family": "editorial",
"material": "flat",
"contour": "default",
"border": "solid",
"underlay": true,
"grain": false,
"stickerBadges": true,
"motion": "still",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
}
## Signature component recipes
### Button
Use `Button` for primary, secondary, outline, and ghost actions. Primary actions must expose the language's strongest contrast pair, while secondary and ghost actions should preserve the surface treatment instead of falling back to default neutral SaaS styling.
### Card
Use `Card`, `CardHeader`, `CardContent`, `CardFooter`, and `CardAction` as the main composition frame. Cards should demonstrate the language's surface, border, hierarchy, and density rules rather than appearing as generic rounded rectangles.
### Input and Textarea
Use `Input` and `Textarea` with visible focus rings, field labels, validation states, and the language's rhythm. Forms should show real product content, not placeholder-only controls.
### Select, Tabs, and Table
Use `Select`, `Tabs`, and `Table` to prove navigation, filtering, and dense data states. The table should show row rhythm, separators, hover/focus states, and an empty or status state when the language calls for it.
### Dialog and Sheet
Use `Dialog` for centered decisions and `Sheet` for contextual editing. Both should inherit the language's spacing, border, overlay, and motion rules.
## Preview shots
- `application-shell`: dashboard or workspace shell with navigation, cards, forms, and state badges.
- `detail-editor`: focused editing flow using input, textarea, select, switch/checkbox, dialog or sheet, and action buttons.
- `data-operations`: table-heavy operational view with tabs, dropdown menu affordances, badges, and destructive/empty states.
- Each preview shot must include a renderable `scene` payload with concrete headline, description, actions, and rows/fields/stats for the UI preview.
## Implementation contract
- Start from local `ui/src/components/ui` shadcn-style primitives; do not create a second component system.
- Apply `/katagami/shadcn/sprocket/registry-theme.json` variables, then use these recipes for composition and state design.
- Preserve Katagami token names as source metadata; shadcn semantic names are only the export surface.
- Do: Pair the serif narration with the mono cue track so figures never lose context.; Mount data as captioned cells on the reel; caption where it happens.; Keep the amber a single projector-beam signal; let the dark leader and space do the separating.
- Do not: Do not drift to a dark control-room ground; the daylight bone is the identity.; Do not box cells in borders or stack identical tiles; the reel sequences them.; Do not use neon or more than the three accents, or round the square frames.
## Copy-paste component example
This generated starter proves the import shape. Production Katagami agents should replace it with a language-specific product composition.
```tsx
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
export function SprocketShadcnKit() {
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">Sprocket</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>
);
}
```
## Layout notes
{
"grid": "A 12-column desktop grid with a dominant horizontal reel and asymmetric supporting spans; a two-column tablet reduction; a single-column mobile stack that keeps the leader band and corner ticks wherever possible.",
"whitespace": "Deliberate and editorial: generous outer margins, compact internal cell padding, and larger inter-section gaps that pace the page like reels.",
"density": "dense",
"responsive": "Renders from ~390px mobile to 2560px+ ultra-wide; mobile stacks to one column, hides non-essential nav links and table columns, and drops the side perforation rails; the full-bleed hero spans 100vw while contained content caps and centres.",
"breakpoints": {
"mobile": "390px",
"tablet": "768px",
"desktop": "1440px",
"ultrawide": "1700px"
}
}
{
"artifact": "katagami:shadcn-preview-shots",
"version": "preview-shots-v1",
"generator": "katagami-ui-compatibility-projection",
"generatedBy": "katagami-ui-projection",
"requiresVisualProfile": true,
"schema": "katagami:shadcn-preview-shots/renderable-v1",
"renderable": true,
"language": {
"id": "en-019ef8a5-edcc-7773-9eb9-8c37c3c64da0",
"name": "Sprocket",
"slug": "sprocket"
},
"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": [
"A warm bone-parchment field carries a dark sprocket-perforated film-leader band as its spine; metrics ride that reel as captioned cells, sequenced left to right like film rather than floating as isolated cards.",
"Perforation rails run down the left and right margins, framing the page as film stock; the landing hero is a full-bleed projector with an amber halation beam and the same film edges.",
"Every focal cell carries an oxblood corner crosshair registration tick instead of a boxed border, reading as a frame mounted on a light table.",
"An optical Fraunces serif narrates, a tight Inter Tight grotesk runs operations, and a tabular Space Mono types the cues, timestamps, and indexes — three voices on one strip.",
"Charts and timelines sit over a faint instrument-grid and scanline scaffold with an amber playhead and crosshair registration, so data reads instrumented without sci-fi chrome.",
"Controls reveal through ink fill, hairline brightening, and a single measured amber ring; the amber is one signal, used like the projector beam, never a flood."
],
"visualProfile": {
"family": "editorial",
"material": "flat",
"contour": "default",
"border": "solid",
"underlay": false,
"grain": false,
"stickerBadges": true,
"motion": "still",
"density": "balanced",
"accents": [
"primary",
"accent",
"secondary",
"muted"
]
},
"shots": [
{
"id": "application-shell",
"title": "Application shell",
"viewport": "desktop",
"primitives": [
"button",
"card",
"input",
"select",
"tabs",
"badge",
"separator",
"table"
],
"composition": "A real product workspace with navigation, summary cards, filtering controls, and one dense content region.",
"mustShow": [
"primary and secondary actions",
"card hierarchy",
"filterable state",
"table or list density"
],
"avoid": [
"component inventory walls",
"placeholder-only content",
"generic rounded SaaS chrome"
],
"scene": {
"eyebrow": "workspace spread",
"headline": "Sprocket launch room",
"description": "A product team workspace where navigation, filters, metrics, and dense rows carry the language's visible structure.",
"primaryAction": "Apply theme",
"secondaryAction": "Review states",
"stats": [
{
"label": "components",
"value": "16",
"tone": "accent"
},
{
"label": "states",
"value": "ready"
},
{
"label": "density",
"value": "balanced",
"tone": "warning"
}
],
"rows": [
{
"label": "Primary flow",
"value": "mapped",
"status": "active"
},
{
"label": "Token coverage",
"value": "semantic",
"status": "synced"
},
{
"label": "Responsive proof",
"value": "queued",
"status": "review"
}
],
"statuses": [
"Active",
"Synced",
"Draft"
]
}
},
{
"id": "detail-editor",
"title": "Detail editor",
"viewport": "tablet",
"primitives": [
"button",
"card",
"input",
"textarea",
"select",
"checkbox",
"switch",
"slider",
"dialog",
"sheet"
],
"composition": "A focused editing flow with form fields, validation, confirmation, and a contextual side panel.",
"mustShow": [
"focus ring",
"error or destructive state",
"dialog or sheet treatment",
"written guidance content"
],
"avoid": [
"unstyled browser controls",
"floating cards inside cards",
"missing labels"
],
"scene": {
"eyebrow": "editing flow",
"headline": "Language recipe editor",
"description": "A focused form proving labels, validation, toggles, panel rhythm, and action hierarchy.",
"primaryAction": "Save recipe",
"secondaryAction": "Open sheet",
"fields": [
{
"label": "Component family",
"value": "Narrative cards"
},
{
"label": "State treatment",
"value": "Visible focus + validation"
},
{
"label": "Motion",
"value": "Small lift, no opacity-only fade"
}
],
"statuses": [
"Focus",
"Invalid",
"Confirmed"
]
}
},
{
"id": "data-operations",
"title": "Data operations",
"viewport": "mobile",
"primitives": [
"button",
"tabs",
"badge",
"dropdown-menu",
"table",
"tooltip",
"separator"
],
"composition": "A compact operational view proving row rhythm, stacked actions, menu states, badges, and empty/destructive states.",
"mustShow": [
"responsive reflow",
"dense row styling",
"menu affordance",
"status badge system"
],
"avoid": [
"desktop-only tables",
"text overflow",
"default shadcn spacing without Katagami character"
],
"scene": {
"eyebrow": "operations",
"headline": "Compact review queue",
"description": "A narrow viewport scene with rows, menus, tooltips, badges, and destructive affordances.",
"primaryAction": "Resolve",
"secondaryAction": "Filter",
"rows": [
{
"label": "Button hierarchy",
"value": "approved",
"status": "ok"
},
{
"label": "Table rhythm",
"value": "needs pass",
"status": "watch"
},
{
"label": "Empty state",
"value": "designed",
"status": "done"
}
],
"statuses": [
"Queued",
"Blocked",
"Done"
]
}
}
],
"componentRecipes": [
{
"primitive": "button",
"intent": "Prove action hierarchy, focus, disabled, and destructive states."
},
{
"primitive": "card",
"intent": "Carry the language surface, border, elevation, and density rules."
},
{
"primitive": "input",
"intent": "Show labels, focus rings, validation, and spacing rhythm."
},
{
"primitive": "textarea",
"intent": "Show longer guidance, validation copy, and writing density."
},
{
"primitive": "select",
"intent": "Show filtering, selection contrast, and menu trigger styling."
},
{
"primitive": "dialog",
"intent": "Show centered decision states and overlay treatment."
},
{
"primitive": "sheet",
"intent": "Show contextual side panels and responsive editing."
},
{
"primitive": "tabs",
"intent": "Show navigational structure and active/inactive contrast."
},
{
"primitive": "badge",
"intent": "Show compact status vocabulary and semantic colors."
},
{
"primitive": "separator",
"intent": "Show section rhythm without generic gray dividers."
},
{
"primitive": "checkbox",
"intent": "Show binary selection with visible focus and checked states."
},
{
"primitive": "switch",
"intent": "Show settings toggles and on/off contrast."
},
{
"primitive": "slider",
"intent": "Show numeric adjustment with track/thumb styling."
},
{
"primitive": "tooltip",
"intent": "Show concise explanation styling above compact controls."
},
{
"primitive": "dropdown-menu",
"intent": "Show action menus, destructive items, and grouped choices."
},
{
"primitive": "table",
"intent": "Show dense operational data, separators, row states, and responsive behavior."
}
],
"qualityRules": {
"do": [
"Pair the serif narration with the mono cue track so figures never lose context.",
"Mount data as captioned cells on the reel; caption where it happens.",
"Keep the amber a single projector-beam signal; let the dark leader and space do the separating."
],
"dont": [
"Do not drift to a dark control-room ground; the daylight bone is the identity.",
"Do not box cells in borders or stack identical tiles; the reel sequences them.",
"Do not use neon or more than the three accents, or round the square frames."
]
}
}