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.
Compose every screen as a typographic set: oversized display type strikes into place along a signal-red set-line, body copy left-aligned in an editorial column. Cards are borderless surface fills; navigation sits open across the header as a masthead, never trapped in a pill or floating card. One inverted black frame per view marks a contrast break.
Hierarchy comes from register and weight, not colour: Space Grotesk 800 for display and headings, Inter 300/400 for reading, JetBrains Mono 11-13px for metadata and readouts. Scale contrast is dramatic between a viewport-scale headline and tiny mono labels; the page stays pure ink and paper with one signal red.
Generous whitespace on an 8px rhythm, always padding above titles; balance density across the canvas — never a crowded cluster beside a starved void. Horizontal rules (one bold red set-line, thin ink hairlines) are the only line vocabulary.
The set-line: a signal-red baseline where type sets. Display lines wipe into being from it via clip-path; overlapping type inverts through mix-blend difference; a monospace readout counts the lines. The mechanic recolours through components — buttons wipe-fill on hover, active tabs and nav carry a red baseline, links ink up with a red sweep, inputs focus to a red underline, meters and progress are red rules.
Editorial column on a 1180-1280px max width, centred with auto margins; asymmetric 2fr/1fr splits for text-plus-aside. Use minmax(0,1fr) columns and min-width:0 children so nothing blows out. Only the full-bleed hero and landing plates span 100vw.
8px rhythm — 16px between related items, 32px between groups, 64-128px between sections; generous padding above every title. Cards get 24-28px internal padding.
Generous and balanced; content-defined surfaces rather than heavy chrome. The landing HUD and dashboard readouts pack mono islands densely against airy display type.
Renders from ~390px to 2560px+. Four art-directed breakpoints: wide ~1920+, desktop 1440, tablet 768-1024 (its own considered layout), mobile 390. On mobile, stack to a single column, hide non-essential nav and table columns, and shrink display type via clamp() so it never clips the edge. On ultra-wide, cap and centre the contained column; only the full-bleed hero spans 100vw.
ticker-kinetic-motion
High-contrast black-and-white editorial photography with strong directional motion blur and long-exposure light streaks — everything monochrome except one crimson-red element. The technique is transferable: it dresses any subject, and it is never the subject. Copy and imagery never contest the same ground; type sits on the calm edge of a frame or inverts cleanly through mix-blend difference.
Use full-frame high-contrast monochrome plates with one crimson accent for the hero and feature imagery; the ink UI frames the plate. Keep everything monochrome except the single red element; never use flat digital illustration, gradients, or a second accent colour.
# Ticker ## Philosophy Ticker is a kinetic-typographic interface where typography is the interface. Every screen is a typographic composition: letterforms carry meaning and hierarchy, black and white hold the canvas, and a single signal red punctuates each decision. Type is set, line by line, along a red baseline — the way hot-metal type once struck a page — and motion reveals structure rather than decorating it. Ticker is the corrected, current-standards form of the Kinetic Typography lineage. ### Values - Typography is the interface: letterforms establish hierarchy and guide the eye; ornamentation is zero. - The set-line: a signal-red baseline where display lines wipe into place with a clip-path reveal. - Extreme weight contrast: Space Grotesk 800 against Inter 300/400 — the light end reads, the heavy end commands. - One accent: pure ink and paper carry the canvas; signal red #E11D48 is the only departure, used like a highlighter. - Motion as meaning: snappy under-300ms wipes and mix-blend-difference inversions, never leisurely decoration. - Editorial to the core: left-aligned reading, generous whitespace, borderless surfaces, folio rules as furniture. ### Anti-Values - A second accent, a gradient wash, or a pastel background. - Boxed cards, grey borders, left accent edges, or navigation trapped in a pill. - In-between radii; anything but square 0 (avatars and switches aside). - Centred body text, wrapped control labels, or a headline clipping the mobile edge. - Decorative motion without narrative purpose, or animation exceeding 300ms. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#FFFFFF` | | surface | `#F5F5F2` | | surface_solid | `#FFFFFF` | | text | `#0A0A0A` | | muted | `#6B6B6B` | | border | `rgba(10,10,10,0.12)` | | accent | `#E11D48` | | accent_2 | `#0A0A0A` | | accent_soft | `rgba(225,29,72,0.12)` | | on_accent | `#FFFFFF` | | success | `#1B7F4B` | | warning | `#B45309` | | error | `#C81E3A` | | info | `#1D4ED8` | ### Typography - **Base Size**: 17px - **Body Font**: Inter - **Heading Font**: Space Grotesk - **Mono Font**: JetBrains Mono - **Heading Weight**: 800 - **Heading Transform**: none - **Letter Spacing**: -0.03em - **Line Height**: 1.6 - **Scale Ratio**: 1.333 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap ### Radii - **None**: 0px - **Md**: 0px - **Lg**: 0px - **Full**: 9999px ### Shadows - **Sm**: 0 1px 0 rgba(10,10,10,0.06) - **Md**: 0 8px 24px rgba(10,10,10,0.08) - **Lg**: 0 24px 60px rgba(10,10,10,0.12) ### Spacing - **Base**: 8px - **Scale**: [4,8,16,24,32,48,64,96,128] ### Surfaces - **Treatment**: Pure white paper ground with a near-white surface tint; flat and borderless. Content is defined by type weight, horizontal rules, and one signal-red set-line. One inverted black frame per composition marks a dramatic contrast break. - **Card Style**: Borderless cards defined by a surface fill and a mono index; on hover a signal-red set-line wipes across the top. Never boxed, never a left accent edge, never nested. - **Bg Pattern**: none; an optional faint kinetic streak field sits behind the inverted hero only. ### Borders - **Default Width**: 0 - **Accent Width**: 4px - **Style**: horizontal rules only — never box borders or left accent edges - **Character**: editorial folio rules: thin ink hairline separators and one bold signal-red 4px set-line ### Motion - **Duration**: 100-300ms - **Easing**: cubic-bezier(0.22,1,0.36,1) - **Philosophy**: Motion is cognitive scaffolding, never decoration: type wipes into place via clip-path from the set-line, overlaps invert via mix-blend difference, states change in under 300ms with snappy easing; reduced motion is respected. ## Rules ### Composition Compose every screen as a typographic set: oversized display type strikes into place along a signal-red set-line, body copy left-aligned in an editorial column. Cards are borderless surface fills; navigation sits open across the header as a masthead, never trapped in a pill or floating card. One inverted black frame per view marks a contrast break. ### Hierarchy Hierarchy comes from register and weight, not colour: Space Grotesk 800 for display and headings, Inter 300/400 for reading, JetBrains Mono 11-13px for metadata and readouts. Scale contrast is dramatic between a viewport-scale headline and tiny mono labels; the page stays pure ink and paper with one signal red. ### Density Generous whitespace on an 8px rhythm, always padding above titles; balance density across the canvas — never a crowded cluster beside a starved void. Horizontal rules (one bold red set-line, thin ink hairlines) are the only line vocabulary. ### Signature The set-line: a signal-red baseline where type sets. Display lines wipe into being from it via clip-path; overlapping type inverts through mix-blend difference; a monospace readout counts the lines. The mechanic recolours through components — buttons wipe-fill on hover, active tabs and nav carry a red baseline, links ink up with a red sweep, inputs focus to a red underline, meters and progress are red rules. ## Layout ### Grid Editorial column on a 1180-1280px max width, centred with auto margins; asymmetric 2fr/1fr splits for text-plus-aside. Use minmax(0,1fr) columns and min-width:0 children so nothing blows out. Only the full-bleed hero and landing plates span 100vw. ### Whitespace 8px rhythm — 16px between related items, 32px between groups, 64-128px between sections; generous padding above every title. Cards get 24-28px internal padding. ### Density Generous and balanced; content-defined surfaces rather than heavy chrome. The landing HUD and dashboard readouts pack mono islands densely against airy display type. ### Responsive Renders from ~390px to 2560px+. Four art-directed breakpoints: wide ~1920+, desktop 1440, tablet 768-1024 (its own considered layout), mobile 390. On mobile, stack to a single column, hide non-essential nav and table columns, and shrink display type via clamp() so it never clips the edge. On ultra-wide, cap and centre the contained column; only the full-bleed hero spans 100vw. ### Breakpoints - **Wide**: 1920px+ - **Lg**: 1025-1919px - **Md**: 768-1024px - **Sm**: 561-767px - **Xs**: below 561px ## Guidance ### Do - Lead with oversized display type set along the signal-red set-line. - Pair extreme weights — 800 display against 300/400 body — and use JetBrains Mono for metadata. - Use signal red like a highlighter: CTAs, active states, the set-line, one detonation. - Keep motion under 300ms with snappy easing; wipe, don't fade; respect reduced motion. - Keep the ground pure ink and paper; define cards by surface fill and a mono index, not a box. ### Don't - Add a second accent, a gradient, or a pastel wash. - Box a card in a border, give it an accent edge, or trap navigation in a pill. - Round corners to an in-between radius; use anything but 0 or 9999. - Centre body paragraphs, wrap a control label, or let a headline clip the mobile edge. - Use emoji or symbol glyphs as icons; use inline SVG primitives. ### Accessibility Ink on paper meets WCAG AA (19.4:1); signal red pairs with a label or shape so colour is never the sole signal. Every control has a visible signal-red focus ring and a 44px minimum target. The settled page renders without JavaScript; motion respects prefers-reduced-motion, which de-pins the landing to a readable document. ## Imagery Direction ### Pairs With ticker-kinetic-motion ### Summary High-contrast black-and-white editorial photography with strong directional motion blur and long-exposure light streaks — everything monochrome except one crimson-red element. The technique is transferable: it dresses any subject, and it is never the subject. Copy and imagery never contest the same ground; type sits on the calm edge of a frame or inverts cleanly through mix-blend difference. ### Subjects - a contemporary dancer mid-leap with a trailing crimson ribbon - a sprinter exploding off the blocks over a red lane stripe - a lone figure descending a brutalist spiral staircase with a red handrail - an editorial portrait snapping into motion with a single red earring - a kinetic long-exposure of moving light ### Usage Use full-frame high-contrast monochrome plates with one crimson accent for the hero and feature imagery; the ink UI frames the plate. Keep everything monochrome except the single red element; never use flat digital illustration, gradients, or a second accent colour.
---
version: "alpha"
name: "Ticker"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#FFFFFF"
surface: "#F5F5F2"
surface_solid: "#FFFFFF"
text: "#0A0A0A"
muted: "#6B6B6B"
accent: "#E11D48"
accent_2: "#0A0A0A"
on_accent: "#FFFFFF"
success: "#1B7F4B"
warning: "#B45309"
error: "#C81E3A"
info: "#1D4ED8"
typography:
headline-lg:
fontFamily: "Space Grotesk"
fontSize: "2.075rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.03em"
headline-md:
fontFamily: "Space Grotesk"
fontSize: "1.66rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.03em"
body-md:
fontFamily: "Inter"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.03em"
label-md:
fontFamily: "JetBrains Mono"
fontSize: "0.75rem"
fontWeight: 600
lineHeight: 1
letterSpacing: "0.08em"
rounded:
none: "0px"
md: "0px"
lg: "0px"
full: "9999px"
spacing:
base: "8px"
xs: "4px"
sm: "8px"
md: "16px"
lg: "24px"
xl: "32px"
2xl: "48px"
3xl: "64px"
4xl: "96px"
step-8: "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-accent:
backgroundColor: "{colors.accent}"
color-reference-accent_2:
backgroundColor: "{colors.accent_2}"
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"
---
# Ticker
## Overview
Ticker is a kinetic-typographic interface where typography is the interface. Every screen is a typographic composition: letterforms carry meaning and hierarchy, black and white hold the canvas, and a single signal red punctuates each decision. Type is set, line by line, along a red baseline — the way hot-metal type once struck a page — and motion reveals structure rather than decorating it. Ticker is the corrected, current-standards form of the Kinetic Typography lineage.
### Values
- Typography is the interface: letterforms establish hierarchy and guide the eye; ornamentation is zero.
- The set-line: a signal-red baseline where display lines wipe into place with a clip-path reveal.
- Extreme weight contrast: Space Grotesk 800 against Inter 300/400 — the light end reads, the heavy end commands.
- One accent: pure ink and paper carry the canvas; signal red #E11D48 is the only departure, used like a highlighter.
- Motion as meaning: snappy under-300ms wipes and mix-blend-difference inversions, never leisurely decoration.
- Editorial to the core: left-aligned reading, generous whitespace, borderless surfaces, folio rules as furniture.
### Anti-Values
- A second accent, a gradient wash, or a pastel background.
- Boxed cards, grey borders, left accent edges, or navigation trapped in a pill.
- In-between radii; anything but square 0 (avatars and switches aside).
- Centred body text, wrapped control labels, or a headline clipping the mobile edge.
- Decorative motion without narrative purpose, or animation exceeding 300ms.
## 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 | `#FFFFFF` |
| surface | `#F5F5F2` |
| surface_solid | `#FFFFFF` |
| text | `#0A0A0A` |
| muted | `#6B6B6B` |
| accent | `#E11D48` |
| accent_2 | `#0A0A0A` |
| on_accent | `#FFFFFF` |
| success | `#1B7F4B` |
| warning | `#B45309` |
| error | `#C81E3A` |
| info | `#1D4ED8` |
## Typography
- **Headline-Lg**: Space Grotesk, 2.075rem, weight 700, line-height 1.1.
- **Headline-Md**: Space Grotesk, 1.66rem, weight 600, line-height 1.15.
- **Body-Md**: Inter, 17px, weight 400, line-height 1.5.
- **Label-Md**: JetBrains Mono, 0.75rem, weight 600, line-height 1.
## Layout
### Spacing Tokens
- **Base**: `8px`
- **Xs**: `4px`
- **Sm**: `8px`
- **Md**: `16px`
- **Lg**: `24px`
- **Xl**: `32px`
- **2xl**: `48px`
- **3xl**: `64px`
- **4xl**: `96px`
- **Step-8**: `128px`
### Grid
Editorial column on a 1180-1280px max width, centred with auto margins; asymmetric 2fr/1fr splits for text-plus-aside. Use minmax(0,1fr) columns and min-width:0 children so nothing blows out. Only the full-bleed hero and landing plates span 100vw.
### Whitespace
8px rhythm — 16px between related items, 32px between groups, 64-128px between sections; generous padding above every title. Cards get 24-28px internal padding.
### Density
Generous and balanced; content-defined surfaces rather than heavy chrome. The landing HUD and dashboard readouts pack mono islands densely against airy display type.
### Responsive
Renders from ~390px to 2560px+. Four art-directed breakpoints: wide ~1920+, desktop 1440, tablet 768-1024 (its own considered layout), mobile 390. On mobile, stack to a single column, hide non-essential nav and table columns, and shrink display type via clamp() so it never clips the edge. On ultra-wide, cap and centre the contained column; only the full-bleed hero spans 100vw.
### Breakpoints
- **Wide**: 1920px+
- **Lg**: 1025-1919px
- **Md**: 768-1024px
- **Sm**: 561-767px
- **Xs**: below 561px
## Elevation & Depth
### Shadows
- **Sm**: 0 1px 0 rgba(10,10,10,0.06)
- **Md**: 0 8px 24px rgba(10,10,10,0.08)
- **Lg**: 0 24px 60px rgba(10,10,10,0.12)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `0px`
- **Lg**: `0px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: Pure white paper ground with a near-white surface tint; flat and borderless. Content is defined by type weight, horizontal rules, and one signal-red set-line. One inverted black frame per composition marks a dramatic contrast break.
- **Card Style**: Borderless cards defined by a surface fill and a mono index; on hover a signal-red set-line wipes across the top. Never boxed, never a left accent edge, never nested.
- **Bg Pattern**: none; an optional faint kinetic streak field sits behind the inverted hero only.
### Borders
- **Default Width**: 0
- **Accent Width**: 4px
- **Style**: horizontal rules only — never box borders or left accent edges
- **Character**: editorial folio rules: thin ink hairline separators and one bold signal-red 4px set-line
## Components
### Composition
Compose every screen as a typographic set: oversized display type strikes into place along a signal-red set-line, body copy left-aligned in an editorial column. Cards are borderless surface fills; navigation sits open across the header as a masthead, never trapped in a pill or floating card. One inverted black frame per view marks a contrast break.
### Hierarchy
Hierarchy comes from register and weight, not colour: Space Grotesk 800 for display and headings, Inter 300/400 for reading, JetBrains Mono 11-13px for metadata and readouts. Scale contrast is dramatic between a viewport-scale headline and tiny mono labels; the page stays pure ink and paper with one signal red.
### Density
Generous whitespace on an 8px rhythm, always padding above titles; balance density across the canvas — never a crowded cluster beside a starved void. Horizontal rules (one bold red set-line, thin ink hairlines) are the only line vocabulary.
### Signature
The set-line: a signal-red baseline where type sets. Display lines wipe into being from it via clip-path; overlapping type inverts through mix-blend difference; a monospace readout counts the lines. The mechanic recolours through components — buttons wipe-fill on hover, active tabs and nav carry a red baseline, links ink up with a red sweep, inputs focus to a red underline, meters and progress are red rules.
## 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-019f8acc-0a21-7852-bce3-ccea9bc93c73/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 Lead with oversized display type set along the signal-red set-line.
- Do Pair extreme weights — 800 display against 300/400 body — and use JetBrains Mono for metadata.
- Do Use signal red like a highlighter: CTAs, active states, the set-line, one detonation.
- Do Keep motion under 300ms with snappy easing; wipe, don't fade; respect reduced motion.
- Do Keep the ground pure ink and paper; define cards by surface fill and a mono index, not a box.
- Don't Add a second accent, a gradient, or a pastel wash.
- Don't Box a card in a border, give it an accent edge, or trap navigation in a pill.
- Don't Round corners to an in-between radius; use anything but 0 or 9999.
- Don't Centre body paragraphs, wrap a control label, or let a headline clip the mobile edge.
- Don't Use emoji or symbol glyphs as icons; use inline SVG primitives.
### Accessibility
Ink on paper meets WCAG AA (19.4:1); signal red pairs with a label or shape so colour is never the sole signal. Every control has a visible signal-red focus ring and a 44px minimum target. The settled page renders without JavaScript; motion respects prefers-reduced-motion, which de-pins the landing to a readable document.
## Imagery Direction
### Pairs With
ticker-kinetic-motion
### Summary
High-contrast black-and-white editorial photography with strong directional motion blur and long-exposure light streaks — everything monochrome except one crimson-red element. The technique is transferable: it dresses any subject, and it is never the subject. Copy and imagery never contest the same ground; type sits on the calm edge of a frame or inverts cleanly through mix-blend difference.
### Subjects
- a contemporary dancer mid-leap with a trailing crimson ribbon
- a sprinter exploding off the blocks over a red lane stripe
- a lone figure descending a brutalist spiral staircase with a red handrail
- an editorial portrait snapping into motion with a single red earring
- a kinetic long-exposure of moving light
### Usage
Use full-frame high-contrast monochrome plates with one crimson accent for the hero and feature imagery; the ink UI frames the plate. Keep everything monochrome except the single red element; never use flat digital illustration, gradients, or a second accent colour.
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "ticker",
"type": "registry:theme",
"title": "Ticker shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#FFFFFF",
"foreground": "#0A0A0A",
"card": "#F5F5F2",
"card-foreground": "#0A0A0A",
"popover": "#F5F5F2",
"popover-foreground": "#0A0A0A",
"primary": "#0A0A0A",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#6B6B6B",
"muted-foreground": "#0A0A0A",
"accent": "#E11D48",
"accent-foreground": "#ffffff",
"destructive": "#C81E3A",
"border": "rgba(10,10,10,0.12)",
"input": "rgba(10,10,10,0.12)",
"ring": "#E11D48",
"chart-1": "#0A0A0A",
"chart-2": "#f4f4f5",
"chart-3": "#E11D48",
"chart-4": "#1B7F4B",
"chart-5": "#B45309",
"sidebar": "#F5F5F2",
"sidebar-foreground": "#0A0A0A",
"sidebar-primary": "#0A0A0A",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#1D4ED8",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "rgba(10,10,10,0.12)",
"sidebar-ring": "#E11D48",
"radius": "0px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#0A0A0A",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#E11D48",
"accent-foreground": "#ffffff",
"destructive": "#C81E3A",
"border": "#303642",
"input": "#303642",
"ring": "#E11D48",
"chart-1": "#0A0A0A",
"chart-2": "#f4f4f5",
"chart-3": "#E11D48",
"chart-4": "#1B7F4B",
"chart-5": "#B45309",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#0A0A0A",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#E11D48",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#E11D48",
"radius": "0px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019f8acc-0a21-7852-bce3-ccea9bc93c73",
"slug": "ticker",
"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 Tickerand 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: #FFFFFF;
--foreground: #0A0A0A;
--card: #F5F5F2;
--card-foreground: #0A0A0A;
--popover: #F5F5F2;
--popover-foreground: #0A0A0A;
--primary: #0A0A0A;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #6B6B6B;
--muted-foreground: #0A0A0A;
--accent: #E11D48;
--accent-foreground: #ffffff;
--destructive: #C81E3A;
--border: rgba(10,10,10,0.12);
--input: rgba(10,10,10,0.12);
--ring: #E11D48;
--chart-1: #0A0A0A;
--chart-2: #f4f4f5;
--chart-3: #E11D48;
--chart-4: #1B7F4B;
--chart-5: #B45309;
--sidebar: #F5F5F2;
--sidebar-foreground: #0A0A0A;
--sidebar-primary: #0A0A0A;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #1D4ED8;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: rgba(10,10,10,0.12);
--sidebar-ring: #E11D48;
--radius: 0px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #0A0A0A;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #E11D48;
--accent-foreground: #ffffff;
--destructive: #C81E3A;
--border: #303642;
--input: #303642;
--ring: #E11D48;
--chart-1: #0A0A0A;
--chart-2: #f4f4f5;
--chart-3: #E11D48;
--chart-4: #1B7F4B;
--chart-5: #B45309;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #0A0A0A;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #E11D48;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #E11D48;
--radius: 0px;
}
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 TickerShadcnKit() {
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">Ticker</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": "ticker",
"type": "registry:theme",
"author": "katagami-agent",
"title": "Ticker",
"description": "Kinetic-typographic editorial theme: pure ink and paper, one signal-red set-line, extreme weight contrast, square geometry, and clip-path wipe motion.",
"cssVars": {
"theme": {
"font-sans": "Inter, sans-serif",
"font-display": "Space Grotesk, sans-serif",
"font-mono": "JetBrains Mono, ui-monospace, monospace",
"radius": "0px"
},
"light": {
"background": "#FFFFFF",
"foreground": "#0A0A0A",
"card": "#F5F5F2",
"card-foreground": "#0A0A0A",
"popover": "#FFFFFF",
"popover-foreground": "#0A0A0A",
"primary": "#E11D48",
"primary-foreground": "#FFFFFF",
"secondary": "#0A0A0A",
"secondary-foreground": "#FFFFFF",
"muted": "#F5F5F2",
"muted-foreground": "#6B6B6B",
"accent": "#E11D48",
"accent-foreground": "#FFFFFF",
"destructive": "#C81E3A",
"destructive-foreground": "#FFFFFF",
"border": "rgba(10,10,10,0.12)",
"input": "rgba(10,10,10,0.82)",
"ring": "#E11D48",
"radius": "0px",
"chart-1": "#E11D48",
"chart-2": "#0A0A0A",
"chart-3": "#6B6B6B",
"chart-4": "#1B7F4B",
"chart-5": "#B45309"
},
"dark": {
"background": "#0A0A0A",
"foreground": "#FFFFFF",
"card": "#161616",
"card-foreground": "#FFFFFF",
"popover": "#0A0A0A",
"popover-foreground": "#FFFFFF",
"primary": "#E11D48",
"primary-foreground": "#FFFFFF",
"secondary": "#FFFFFF",
"secondary-foreground": "#0A0A0A",
"muted": "#161616",
"muted-foreground": "#9A9A9A",
"accent": "#E11D48",
"accent-foreground": "#FFFFFF",
"destructive": "#C81E3A",
"destructive-foreground": "#FFFFFF",
"border": "rgba(255,255,255,0.14)",
"input": "rgba(255,255,255,0.72)",
"ring": "#E11D48",
"radius": "0px",
"chart-1": "#E11D48",
"chart-2": "#FFFFFF",
"chart-3": "#9A9A9A",
"chart-4": "#6E9C6A",
"chart-5": "#C79A4A"
}
},
"visualProfile": {
"family": "kinetic-editorial",
"material": "ink on paper",
"contour": "square",
"border": "none",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "snappy clip-path wipe, under 300ms",
"density": "generous",
"accents": ["#E11D48", "#0A0A0A"]
},
"notes": "Square geometry (radius 0; pills only for avatars/switches). No borders — cards are surface fills, feedback uses a marker not an edge bar. One signal-red accent used like a highlighter, plus the ink axis. Display face Space Grotesk 800 against Inter 300/400 body for extreme weight contrast; JetBrains Mono for metadata. The signature is the set-line: a red baseline where type wipes into place; buttons wipe-fill on hover, active tabs/links carry a red baseline."
}
# Ticker — shadcn/ui Components
Author: `katagami-agent`
Ticker dresses shadcn/ui as a kinetic-typographic editorial system: pure ink and paper, one
signal-red set-line, extreme weight contrast, square geometry, and clip-path wipe motion.
Install the `ticker` registry theme, then compose the primitives below — every component reads
as the language itself, never a generic house chassis.
```bash
npx shadcn@latest add button card input textarea select dialog sheet tabs badge separator checkbox switch slider tooltip dropdown-menu table
```
## ShadSync visual profile
The renderer follows this profile — honour it on every primitive:
- **family:** kinetic-editorial
- **material:** ink on paper (`#0A0A0A` on `#FFFFFF`); one inverted black frame per view for contrast breaks
- **contour:** square — `--radius: 0px`; only avatars and switches round to `9999px`
- **border:** none — cards are surface fills (`#F5F5F2`); feedback uses a small semantic marker, never a left edge bar
- **accents:** signal red `#E11D48` used like a highlighter, plus the ink axis `#0A0A0A`; never a second decorative hue
- **type:** Space Grotesk 800 display · Inter 300/400 body (17px) · JetBrains Mono 11–13px metadata
- **motion:** snappy clip-path wipe and set-line fills under 300ms, `cubic-bezier(0.22,1,0.36,1)`; respects reduced motion
- **grain:** false · **stickerBadges:** false · **underlay:** false
## Signature component recipes
The set-line recolours through every primitive.
- **Button** — primary is a signal-red fill with an ink wipe-fill on hover (`::before` translateX from `-101%`); label centred, uppercase JetBrains Mono 13px, radius 0, text never wraps. Solid variant is ink with a red wipe; ghost is a text button with a red underline sweep.
- **Card** — no border. A surface fill, a mono index eyebrow (`CASE / 01`), a Space Grotesk 700 title. On hover a 4px red set-line wipes across the top and the index turns red.
- **Input / Textarea / Select** — no box border; a surface fill with a 2px ink underline that turns signal-red on focus (the set-line). Chevron is an inline SVG, never a glyph.
- **Tabs** — underline tabs; the active tab carries a 3px red baseline. **Switch** — track fills signal-red when checked; thumb rounds to 9999.
- **Badge** — square, filled (ink / signal / surface), JetBrains Mono uppercase; text never wraps.
- **Table** — header on a 2px ink rule; rows separated by thin ink hairlines; row hover is a faint surface fill; numerals in mono.
- **Dialog / Sheet** — ink scrim, square panel, a red set-line under the title, close is an inline SVG cross.
## Preview shots
The renderable preview scenes live in `preview-shots.json` (`renderable-v1`, 16 primitives, 4 product
scenes): an editorial desk overview, a contributor brief form, a publishing pipeline table, and a
kinetic front-page dialog. Each scene states what it must show and what to avoid so the renderer keeps
the borderless, single-accent, square-geometry identity.
## Copy-paste component example
```tsx
import { Button } from "@/components/ui/button"
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"
import { Badge } from "@/components/ui/badge"
export function CaseCard() {
return (
<Card className="group relative overflow-hidden rounded-none border-0 bg-[#F5F5F2] p-7">
<span className="absolute left-0 top-0 h-1 w-0 bg-[#E11D48] transition-all duration-300 group-hover:w-full" />
<CardHeader className="p-0">
<span className="font-mono text-[11px] uppercase tracking-[0.16em] text-[#6B6B6B] transition-colors group-hover:text-[#E11D48]">
Case / 01
</span>
<CardTitle className="mt-3 font-[Space_Grotesk] text-xl font-bold tracking-tight">
Axiom Capital rebrand
</CardTitle>
</CardHeader>
<CardContent className="p-0 pt-2 text-sm leading-relaxed text-[#6B6B6B]">
A typographic identity system across forty touchpoints, led by a single kinetic wordmark
that sets on entry.
<div className="mt-4 flex gap-2">
<Badge className="rounded-none bg-[#F5F5F2] font-mono text-[10px] uppercase tracking-wide text-[#0A0A0A] shadow-[inset_0_0_0_1px_rgba(10,10,10,0.12)]">
Identity
</Badge>
<Badge className="rounded-none bg-[#E11D48] font-mono text-[10px] uppercase tracking-wide text-white">
Award
</Badge>
</div>
</CardContent>
</Card>
)
}
```
Import every primitive from `@/components/ui/` and keep the identity: square corners, no borders,
one signal-red accent, extreme weight contrast, and the set-line wipe on interaction.
{
"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": "en-019f8acc-0a21-7852-bce3-ccea9bc93c73",
"name": "Ticker",
"slug": "ticker"
},
"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": [
"Square geometry: radius 0 on every surface; only avatars and switches round to 9999.",
"No borders — cards are surface fills (#F5F5F2); feedback uses a small semantic marker, never a left edge bar.",
"One signal-red accent (#E11D48) used like a highlighter, plus the ink axis (#0A0A0A) on paper (#FFFFFF).",
"Extreme weight contrast: Space Grotesk 800 display against Inter 300/400 body; JetBrains Mono for metadata.",
"The set-line: a red baseline where type sets. Buttons wipe-fill on hover; active tabs and links carry a red baseline; input focus is a red underline.",
"Body text 17px, table rows 14.5px; micro labels 11-13px uppercase mono."
],
"visualProfile": {
"family": "kinetic-editorial",
"material": "ink on paper",
"contour": "square",
"border": "none",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "snappy clip-path wipe and set-line fills under 300ms",
"density": "generous",
"accents": ["#E11D48", "#0A0A0A"]
},
"tokens": {
"background": "#FFFFFF",
"foreground": "#0A0A0A",
"card": "#F5F5F2",
"muted-foreground": "#6B6B6B",
"primary": "#E11D48",
"primary-foreground": "#FFFFFF",
"secondary": "#0A0A0A",
"ring": "#E11D48",
"border": "rgba(10,10,10,0.12)",
"radius": "0px",
"font-display": "Space Grotesk",
"font-body": "Inter",
"font-mono": "JetBrains Mono"
},
"shots": [
{
"id": "editorial-desk",
"title": "Editorial desk overview",
"viewport": "desktop",
"primitives": ["card", "badge", "tabs", "separator", "button"],
"composition": "A borderless overview: four KPI tiles separated by hairline seams, a tab strip with a red active baseline, and one inverted black kinetic-headline preview panel.",
"mustShow": [
"square cards with a mono index eyebrow and no border",
"one signal-red KPI number amongst ink numbers",
"a red set-line under the section title"
],
"avoid": ["rounded cards", "grey box borders", "a second accent colour", "gradients"],
"scene": {
"headline": "Type that ships.",
"description": "An editorial desk overview for the Ticker studio, tracking reads, publishing pace, and the front page now setting.",
"stats": [
{ "label": "Reads / week", "value": "48.2k", "delta": "+12.4%" },
{ "label": "Published", "value": "147", "delta": "+6" },
{ "label": "Avg read time", "value": "4:12", "delta": "+0:18" },
{ "label": "In review", "value": "3", "delta": "-2" }
]
}
},
{
"id": "contributor-brief",
"title": "Contributor brief form",
"viewport": "desktop",
"primitives": ["input", "textarea", "select", "checkbox", "switch", "slider", "button", "tooltip"],
"composition": "A single-column brief form; every control is borderless with a 2px ink underline that turns signal-red on focus. Primary submit is a red wipe-fill button beside a ghost reset.",
"mustShow": [
"underline inputs with a red focus set-line",
"one clearly primary red button and a quieter ghost button",
"a switch whose track fills red when on"
],
"avoid": ["boxed inputs with grey borders", "pill buttons", "wrapping button labels"],
"scene": {
"headline": "Set a brief.",
"description": "A contributor submits a new editorial brief to the desk.",
"fields": [
{ "label": "Full name", "placeholder": "Set your name", "type": "text" },
{ "label": "Email", "placeholder": "you@studio.com", "type": "email" },
{ "label": "Discipline", "placeholder": "Select one", "type": "select" },
{ "label": "Brief", "placeholder": "Describe the work", "type": "textarea" }
]
}
},
{
"id": "publishing-pipeline",
"title": "Publishing pipeline table",
"viewport": "desktop",
"primitives": ["table", "badge", "dropdown-menu", "checkbox", "separator"],
"composition": "A borderless pipeline table: header on a 2px ink rule, rows separated by thin ink hairlines, mono numerals, and square status badges.",
"mustShow": [
"header on an ink rule with mono uppercase labels",
"square status badges (New in signal-red, Live in ink, Review with a warning dot)",
"mono numerals for word counts and set times"
],
"avoid": ["zebra fills in colour", "rounded badges", "a second accent hue on badges"],
"scene": {
"headline": "Publishing pipeline",
"description": "The desk's live queue of stories moving from draft to set-to-press.",
"rows": [
{ "slug": "decorative-interface", "author": "A. Kowalski", "words": "1,840", "status": "New", "set": "09:41" },
{ "slug": "motion-is-the-grid", "author": "M. Reeves", "words": "2,210", "status": "Live", "set": "—" },
{ "slug": "axiom-identity-case", "author": "J. Tanaka", "words": "3,050", "status": "Review", "set": "14:00" },
{ "slug": "restraint-radical", "author": "A. Kowalski", "words": "1,290", "status": "Review", "set": "Thu" }
]
}
},
{
"id": "front-page-dialog",
"title": "Kinetic front-page dialog",
"viewport": "desktop",
"primitives": ["dialog", "button", "badge", "separator", "sheet"],
"composition": "A square dialog over an ink scrim: a mono eyebrow, a Space Grotesk 700 title, a red set-line, chips, and a red wipe-fill confirm button. An inline-SVG close cross, never a glyph.",
"mustShow": [
"square dialog panel with no border",
"a red set-line under the title",
"a red wipe-fill confirm button and a ghost cancel"
],
"avoid": ["rounded modal corners", "emoji or glyph close icon", "drop shadow on text"],
"scene": {
"headline": "Set to front page?",
"description": "Confirm setting the essay The death of the decorative interface to the front page.",
"rows": [
{ "field": "Story", "value": "decorative-interface" },
{ "field": "Author", "value": "A. Kowalski" },
{ "field": "Goes live", "value": "in 04:00" }
]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Primary is a signal-red fill with an ink wipe-fill on hover; label centred uppercase mono 13px; square; text never wraps." },
{ "primitive": "card", "intent": "Borderless surface fill with a mono index eyebrow; a 4px red set-line wipes across the top on hover." },
{ "primitive": "input", "intent": "No box border; surface fill with a 2px ink underline that turns signal-red on focus." },
{ "primitive": "textarea", "intent": "Same underline set-line treatment as input; comfortable line-height for drafting copy." },
{ "primitive": "select", "intent": "Underline control with an inline-SVG chevron; options in body face, never a native glyph arrow." },
{ "primitive": "dialog", "intent": "Square panel over an ink scrim; a red set-line under the title; inline-SVG close cross." },
{ "primitive": "sheet", "intent": "Edge-anchored square panel; mono section labels; a red set-line marks the active region." },
{ "primitive": "tabs", "intent": "Underline tabs; the active tab carries a 3px red baseline; labels uppercase mono." },
{ "primitive": "badge", "intent": "Square filled chip (ink / signal / surface) in uppercase mono; text never wraps." },
{ "primitive": "separator", "intent": "A thin ink hairline rule, or the bold 4px signal-red set-line where a section is set." },
{ "primitive": "checkbox", "intent": "Square control; checked fills ink with an inline-SVG tick; focus ring is signal-red." },
{ "primitive": "switch", "intent": "Track fills signal-red when on; thumb rounds fully to 9999." },
{ "primitive": "slider", "intent": "Thin ink rail with a square signal-red thumb; the filled portion reads as a set-line." },
{ "primitive": "tooltip", "intent": "Ink panel, paper text, square corners, mono micro label; no arrow glyph." },
{ "primitive": "dropdown-menu", "intent": "Square surface panel; active item carries a red baseline; hairline rule separators." },
{ "primitive": "table", "intent": "Header on a 2px ink rule; rows on thin ink hairlines; mono numerals; row hover a faint surface fill." }
],
"qualityRules": {
"do": [
"Keep corners square (radius 0); round only avatars and switches to 9999.",
"Use one signal-red accent like a highlighter, plus the ink axis on paper.",
"Pair Space Grotesk 800 display with Inter 300/400 body and JetBrains Mono metadata.",
"Apply the set-line as the interaction language: wipe-fill buttons, red-baseline active states, red underline focus.",
"Keep body at 17px, table rows at 14.5px, micro labels 11-13px uppercase."
],
"dont": [
"Add borders, boxed cards, or a left accent edge on any surface.",
"Introduce a second decorative accent, a gradient, or a pastel wash.",
"Round corners to an in-between radius, or use pill buttons.",
"Centre body paragraphs, wrap a control label, or clip a headline at the edge.",
"Use emoji or symbol glyphs as icons; use inline SVG primitives."
]
}
}