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.
Resolve the 12-column grid asymmetrically: one dominant 7-8 column working field beside narrow utility rails, never equal card grids. Registration corners, index callouts (KX / 01 rails), and tick rules recur page-wide as the single ornament system. Keep cyan below ten percent of visible color and reserve it for seal state, focus, and selection.
Alternate quiet voids of 64-128px with micro-dense monospaced instrument clusters at 4-8px. Balance density across the canvas — never a crowded cluster beside a starved void.
Condensed 700 headings name the system; mono microtype carries record numbers, keys, dates, and countersigns beside every control. The hero is a filed document plate over schematic linework, never a dashboard metric.
mobile <700px, tablet 700-1099px, desktop >=1100px
12-column desktop grid resolved as a dominant 7-8 column working field with narrow rails; the tablet band is its own considered layout (instrument strips fold 2x2, side rails join as a second column); mobile stacks to one column keeping the main plate first.
Whitespace is the atmosphere and must remain visibly larger than the control clusters.
Sparse macro layout, dense mono micro labels.
Display headlines clamp and wrap, never clip; non-essential nav links and table columns hide on mobile; grids use minmax(0,1fr) so children shrink instead of overflowing; only the hero spans 100vw on ultra-wide.
Exploded schematic linework as interface architecture: fine ink contour drawings of drawers, card indexes, and instruments on dotted or ruled archive paper, with leader lines, crop marks, registration corners, and two or three small cyan squares at meaningful intersections.
archival schematic ink drawing, flat one-bit style, no shading gradients
no character posters, no cyberpunk scenery, no photography, no text or logos in imagery
fl-019f2e36-41f1-7950-9727-189afbaef64e
# Kardex ## Philosophy Kardex is the records instrument: an archival interface language in which identity is a filed plate, permission is a countersigned grant, and verification is a one-bit fact. Carbon-ink rules, registration marks, and tick rails organize archive white; monospaced ledger microtype sits beside every control; one small desaturated cyan pixel carries the whole verdict of trust — lit for sealed, pale for pending, absent for unsealed. ### Values - negative space as evidence, not decoration - precise microtype and diagnostic labels over spectacle - carbon ink rule systems that organize the page - cyan as a one-bit seal — sparse signal state, never glow wash - interfaces that feel authored, verified, and slightly philosophical - human presence implied through traces — initials, keys, countersigns — never portraits ### Anti-Values - no green matrix rain or neon cyberpunk gradients - no generic analytics dashboard - no rounded SaaS card grid as the core form - no character illustration or fan-art posters - no glow washes; cyan stays under ten percent of visible color - no deleted history — records accrue, never thin ### Visual Character - Pale archival fields interrupted by narrow instrument bands — evidence strips with tick rails, not decorative cards. - One-pixel ink rules, registration corners, and indexed callouts give every panel manga-schematic structure. - Small desaturated cyan pixels appear only for sealed records, active tabs, selected rows, focus, and live keys. - Asymmetric document consoles keep large silent white fields beside dense monospaced instrument clusters. - Schematic linework is the interface architecture: rules, leader ticks, and crop marks replace illustration. ## Tokens ### Colors | Name | Value | |------|-------| | bg | `#F8FAF7` | | surface | `#FFFFFF` | | surface_solid | `#FFFFFF` | | text | `#14181D` | | muted | `#5B646C` | | border | `#171A1F` | | accent | `#147D96` | | accent_2 | `#2E93A6` | | accent_soft | `#EDF4F6` | | on_accent | `#FFFFFF` | | success | `#43705D` | | warning | `#A8752E` | | error | `#A84A52` | | info | `#2E93A6` | ### Typography - **Base Size**: 17px - **Body Font**: IBM Plex Sans - **Heading Font**: IBM Plex Sans Condensed - **Mono Font**: IBM Plex Mono - **Heading Weight**: 700 - **Heading Transform**: none - **Letter Spacing**: -0.01em - **Display Letter Spacing**: -0.02em - **Line Height**: 1.55 - **Display Line Height**: 1.12 - **Scale Ratio**: 1.22 - **Google Fonts Url**: https://fonts.googleapis.com/css2?family=IBM+Plex+Sans+Condensed:wght@500;600;700&family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap ### Radii - **None**: 0px - **Md**: 16px - **Lg**: 24px - **Full**: 9999px ### Shadows - **Sm**: 3px 3px 0 rgba(20,24,29,.18) - **Md**: 4px 4px 0 rgba(20,24,29,.12) - **Lg**: 0 24px 80px rgba(20,24,29,.10) ### Spacing - **Base**: 8px - **Scale**: [4,8,12,16,24,32,48,64,96,128] ### Surfaces - **Treatment**: cold archive white ground, pure white plates, carbon ink, one-bit cyan seal signals - **Card Style**: hard-edged square plates with 1px ink rules, registration corners, and hard offset ink shadows - **Bg Pattern**: faint dotted registration grid and sparse schematic contour fragments ### Borders - **Default Width**: 1px - **Accent Width**: 2px - **Style**: solid - **Character**: carbon ink rules as considered structure — full-strength for plate perimeters and table heads, 8% ink hairlines for in-panel separation; registration corners and 12px tick rails as the page-wide ornament system ### Motion - **Duration**: 160ms - **Easing**: cubic-bezier(.16,1,.3,1) - **Philosophy**: quiet one-bit ticks: state changes snap in 160ms, a blinking mono cursor, gentle 14px rise-ins gated behind a JS-set class so the settled page is the no-JS default; all motion respects prefers-reduced-motion ## Rules ### Composition Resolve the 12-column grid asymmetrically: one dominant 7-8 column working field beside narrow utility rails, never equal card grids. Registration corners, index callouts (KX / 01 rails), and tick rules recur page-wide as the single ornament system. Keep cyan below ten percent of visible color and reserve it for seal state, focus, and selection. ### Density Alternate quiet voids of 64-128px with micro-dense monospaced instrument clusters at 4-8px. Balance density across the canvas — never a crowded cluster beside a starved void. ### Hierarchy Condensed 700 headings name the system; mono microtype carries record numbers, keys, dates, and countersigns beside every control. The hero is a filed document plate over schematic linework, never a dashboard metric. ### Signature Patterns - The one-bit seal: an 8px cyan pixel — lit, pale, or absent — carries the verdict of verification on rows, tabs, records, and the primary button. - Title plates with mono index rails, stacked coordinates, registration corners, and a closing tick rule. - The ledger: verified rows wash cyan at 7% and carry their pixel in a leading seal column an auditor scans like a card drawer. - Instrument strips: horizontal evidence bands of large condensed numerals over mono sublabels, split by hairlines. - The shell: an ink-ground transcript strip where the archive answers in writing, prompt marked by the pale signal. ## Layout ### Breakpoints mobile <700px, tablet 700-1099px, desktop >=1100px ### Grid 12-column desktop grid resolved as a dominant 7-8 column working field with narrow rails; the tablet band is its own considered layout (instrument strips fold 2x2, side rails join as a second column); mobile stacks to one column keeping the main plate first. ### Whitespace Whitespace is the atmosphere and must remain visibly larger than the control clusters. ### Density Sparse macro layout, dense mono micro labels. ### Responsive Display headlines clamp and wrap, never clip; non-essential nav links and table columns hide on mobile; grids use minmax(0,1fr) so children shrink instead of overflowing; only the hero spans 100vw on ultra-wide. ## Guidance ### Do - Use archive white and carbon ink as the dominant material - Make every cyan mark communicate seal state, focus, or selection - Use monospaced record numbers, keys, dates, and countersign labels beside controls - Build asymmetric working fields with narrow rails, not equal cards - Let schematic linework — rules, registration corners, tick rails — behave as the page's architecture - Keep warnings tiny and semantically specific ### Don't - Do not use neon cyberpunk, green code rain, or glow washes - Do not round plates, buttons, or inputs — pills are for state chips only - Do not use portraits or character art; people appear as initials and signatures - Do not create generic analytics dashboards; every number belongs to a filed record - Do not let button or chip labels wrap - Do not delete history in the fiction of the interface — records accrue, never thin ### Accessibility Maintain AA contrast; never encode seal state through cyan alone — pair the pixel with a mono state label; focus states are 2px cyan outlines offset 3px; body text stays at 17px or larger. ### Usage Context Best for registries, archives, access and permission systems, provenance and audit tools, diagnostic fiction, and editorial interfaces that need cybernetic restraint with institutional gravity. ## Imagery Direction ### Summary Exploded schematic linework as interface architecture: fine ink contour drawings of drawers, card indexes, and instruments on dotted or ruled archive paper, with leader lines, crop marks, registration corners, and two or three small cyan squares at meaningful intersections. ### Technique archival schematic ink drawing, flat one-bit style, no shading gradients ### Negative no character posters, no cyberpunk scenery, no photography, no text or logos in imagery ### Hero File Id fl-019f2e36-41f1-7950-9727-189afbaef64e
---
version: "alpha"
name: "Kardex"
description: "Agent-curated design language exported from Katagami as DESIGN.md."
colors:
bg: "#F8FAF7"
surface: "#FFFFFF"
surface_solid: "#FFFFFF"
text: "#14181D"
muted: "#5B646C"
border: "#171A1F"
accent: "#147D96"
accent_2: "#2E93A6"
accent_soft: "#EDF4F6"
on_accent: "#FFFFFF"
success: "#43705D"
warning: "#A8752E"
error: "#A84A52"
info: "#2E93A6"
typography:
headline-lg:
fontFamily: "IBM Plex Sans Condensed"
fontSize: "1.929rem"
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.01em"
headline-md:
fontFamily: "IBM Plex Sans Condensed"
fontSize: "1.581rem"
fontWeight: 600
lineHeight: 1.15
letterSpacing: "-0.01em"
body-md:
fontFamily: "IBM Plex Sans"
fontSize: "17px"
fontWeight: 400
lineHeight: 1.55
letterSpacing: "-0.01em"
label-md:
fontFamily: "IBM Plex 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"
---
# Kardex
## Overview
Kardex is the records instrument: an archival interface language in which identity is a filed plate, permission is a countersigned grant, and verification is a one-bit fact. Carbon-ink rules, registration marks, and tick rails organize archive white; monospaced ledger microtype sits beside every control; one small desaturated cyan pixel carries the whole verdict of trust — lit for sealed, pale for pending, absent for unsealed.
### Values
- negative space as evidence, not decoration
- precise microtype and diagnostic labels over spectacle
- carbon ink rule systems that organize the page
- cyan as a one-bit seal — sparse signal state, never glow wash
- interfaces that feel authored, verified, and slightly philosophical
- human presence implied through traces — initials, keys, countersigns — never portraits
### Anti-Values
- no green matrix rain or neon cyberpunk gradients
- no generic analytics dashboard
- no rounded SaaS card grid as the core form
- no character illustration or fan-art posters
- no glow washes; cyan stays under ten percent of visible color
- no deleted history — records accrue, never thin
### Visual Character
- Pale archival fields interrupted by narrow instrument bands — evidence strips with tick rails, not decorative cards.
- One-pixel ink rules, registration corners, and indexed callouts give every panel manga-schematic structure.
- Small desaturated cyan pixels appear only for sealed records, active tabs, selected rows, focus, and live keys.
- Asymmetric document consoles keep large silent white fields beside dense monospaced instrument clusters.
- Schematic linework is the interface architecture: rules, leader ticks, and crop marks replace illustration.
## 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 | `#F8FAF7` |
| surface | `#FFFFFF` |
| surface_solid | `#FFFFFF` |
| text | `#14181D` |
| muted | `#5B646C` |
| border | `#171A1F` |
| accent | `#147D96` |
| accent_2 | `#2E93A6` |
| accent_soft | `#EDF4F6` |
| on_accent | `#FFFFFF` |
| success | `#43705D` |
| warning | `#A8752E` |
| error | `#A84A52` |
| info | `#2E93A6` |
## Typography
- **Headline-Lg**: IBM Plex Sans Condensed, 1.929rem, weight 700, line-height 1.1.
- **Headline-Md**: IBM Plex Sans Condensed, 1.581rem, weight 600, line-height 1.15.
- **Body-Md**: IBM Plex Sans, 17px, weight 400, line-height 1.55.
- **Label-Md**: IBM Plex 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`
### Breakpoints
mobile <700px, tablet 700-1099px, desktop >=1100px
### Grid
12-column desktop grid resolved as a dominant 7-8 column working field with narrow rails; the tablet band is its own considered layout (instrument strips fold 2x2, side rails join as a second column); mobile stacks to one column keeping the main plate first.
### Whitespace
Whitespace is the atmosphere and must remain visibly larger than the control clusters.
### Density
Sparse macro layout, dense mono micro labels.
### Responsive
Display headlines clamp and wrap, never clip; non-essential nav links and table columns hide on mobile; grids use minmax(0,1fr) so children shrink instead of overflowing; only the hero spans 100vw on ultra-wide.
## Elevation & Depth
### Shadows
- **Sm**: 3px 3px 0 rgba(20,24,29,.18)
- **Md**: 4px 4px 0 rgba(20,24,29,.12)
- **Lg**: 0 24px 80px rgba(20,24,29,.10)
## Shapes
### Rounded
- **None**: `0px`
- **Md**: `16px`
- **Lg**: `24px`
- **Full**: `9999px`
### Surfaces
- **Treatment**: cold archive white ground, pure white plates, carbon ink, one-bit cyan seal signals
- **Card Style**: hard-edged square plates with 1px ink rules, registration corners, and hard offset ink shadows
- **Bg Pattern**: faint dotted registration grid and sparse schematic contour fragments
### Borders
- **Default Width**: 1px
- **Accent Width**: 2px
- **Style**: solid
- **Character**: carbon ink rules as considered structure — full-strength for plate perimeters and table heads, 8% ink hairlines for in-panel separation; registration corners and 12px tick rails as the page-wide ornament system
## Components
### Composition
Resolve the 12-column grid asymmetrically: one dominant 7-8 column working field beside narrow utility rails, never equal card grids. Registration corners, index callouts (KX / 01 rails), and tick rules recur page-wide as the single ornament system. Keep cyan below ten percent of visible color and reserve it for seal state, focus, and selection.
### Density
Alternate quiet voids of 64-128px with micro-dense monospaced instrument clusters at 4-8px. Balance density across the canvas — never a crowded cluster beside a starved void.
### Hierarchy
Condensed 700 headings name the system; mono microtype carries record numbers, keys, dates, and countersigns beside every control. The hero is a filed document plate over schematic linework, never a dashboard metric.
### Signature Patterns
- The one-bit seal: an 8px cyan pixel — lit, pale, or absent — carries the verdict of verification on rows, tabs, records, and the primary button.
- Title plates with mono index rails, stacked coordinates, registration corners, and a closing tick rule.
- The ledger: verified rows wash cyan at 7% and carry their pixel in a leading seal column an auditor scans like a card drawer.
- Instrument strips: horizontal evidence bands of large condensed numerals over mono sublabels, split by hairlines.
- The shell: an ink-ground transcript strip where the archive answers in writing, prompt marked by the pale signal.
## 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-019f2e75-1dec-76e2-9380-2adde9fed568/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 Use archive white and carbon ink as the dominant material
- Do Make every cyan mark communicate seal state, focus, or selection
- Do Use monospaced record numbers, keys, dates, and countersign labels beside controls
- Do Build asymmetric working fields with narrow rails, not equal cards
- Do Let schematic linework — rules, registration corners, tick rails — behave as the page's architecture
- Do Keep warnings tiny and semantically specific
- Don't Do not use neon cyberpunk, green code rain, or glow washes
- Don't Do not round plates, buttons, or inputs — pills are for state chips only
- Don't Do not use portraits or character art; people appear as initials and signatures
- Don't Do not create generic analytics dashboards; every number belongs to a filed record
- Don't Do not let button or chip labels wrap
- Don't Do not delete history in the fiction of the interface — records accrue, never thin
### Accessibility
Maintain AA contrast; never encode seal state through cyan alone — pair the pixel with a mono state label; focus states are 2px cyan outlines offset 3px; body text stays at 17px or larger.
### Usage Context
Best for registries, archives, access and permission systems, provenance and audit tools, diagnostic fiction, and editorial interfaces that need cybernetic restraint with institutional gravity.
## Imagery Direction
### Summary
Exploded schematic linework as interface architecture: fine ink contour drawings of drawers, card indexes, and instruments on dotted or ruled archive paper, with leader lines, crop marks, registration corners, and two or three small cyan squares at meaningful intersections.
### Technique
archival schematic ink drawing, flat one-bit style, no shading gradients
### Negative
no character posters, no cyberpunk scenery, no photography, no text or logos in imagery
### Hero File Id
fl-019f2e36-41f1-7950-9727-189afbaef64e
```json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "kardex",
"type": "registry:theme",
"title": "Kardex shadcn Theme",
"cssVars": {
"theme": {},
"light": {
"background": "#F8FAF7",
"foreground": "#14181D",
"card": "#FFFFFF",
"card-foreground": "#14181D",
"popover": "#FFFFFF",
"popover-foreground": "#14181D",
"primary": "#14181D",
"primary-foreground": "#ffffff",
"secondary": "#f4f4f5",
"secondary-foreground": "#111111",
"muted": "#5B646C",
"muted-foreground": "#14181D",
"accent": "#147D96",
"accent-foreground": "#ffffff",
"destructive": "#A84A52",
"border": "#171A1F",
"input": "#171A1F",
"ring": "#147D96",
"chart-1": "#14181D",
"chart-2": "#f4f4f5",
"chart-3": "#147D96",
"chart-4": "#43705D",
"chart-5": "#A8752E",
"sidebar": "#FFFFFF",
"sidebar-foreground": "#14181D",
"sidebar-primary": "#14181D",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#2E93A6",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#171A1F",
"sidebar-ring": "#147D96",
"radius": "16px"
},
"dark": {
"background": "#0f1115",
"foreground": "#f8fafc",
"card": "#181b22",
"card-foreground": "#f8fafc",
"popover": "#181b22",
"popover-foreground": "#f8fafc",
"primary": "#14181D",
"primary-foreground": "#ffffff",
"secondary": "#252a33",
"secondary-foreground": "#f8fafc",
"muted": "#252a33",
"muted-foreground": "#a1a1aa",
"accent": "#147D96",
"accent-foreground": "#ffffff",
"destructive": "#A84A52",
"border": "#303642",
"input": "#303642",
"ring": "#147D96",
"chart-1": "#14181D",
"chart-2": "#f4f4f5",
"chart-3": "#147D96",
"chart-4": "#43705D",
"chart-5": "#A8752E",
"sidebar": "#181b22",
"sidebar-foreground": "#f8fafc",
"sidebar-primary": "#14181D",
"sidebar-primary-foreground": "#ffffff",
"sidebar-accent": "#147D96",
"sidebar-accent-foreground": "#ffffff",
"sidebar-border": "#303642",
"sidebar-ring": "#147D96",
"radius": "16px"
}
},
"meta": {
"source": "katagami",
"languageId": "en-019f2e75-1dec-76e2-9380-2adde9fed568",
"slug": "kardex",
"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",
"display_letter_spacing",
"display_line_height",
"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 Kardexand 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: #F8FAF7;
--foreground: #14181D;
--card: #FFFFFF;
--card-foreground: #14181D;
--popover: #FFFFFF;
--popover-foreground: #14181D;
--primary: #14181D;
--primary-foreground: #ffffff;
--secondary: #f4f4f5;
--secondary-foreground: #111111;
--muted: #5B646C;
--muted-foreground: #14181D;
--accent: #147D96;
--accent-foreground: #ffffff;
--destructive: #A84A52;
--border: #171A1F;
--input: #171A1F;
--ring: #147D96;
--chart-1: #14181D;
--chart-2: #f4f4f5;
--chart-3: #147D96;
--chart-4: #43705D;
--chart-5: #A8752E;
--sidebar: #FFFFFF;
--sidebar-foreground: #14181D;
--sidebar-primary: #14181D;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #2E93A6;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #171A1F;
--sidebar-ring: #147D96;
--radius: 16px;
}
.dark {
--background: #0f1115;
--foreground: #f8fafc;
--card: #181b22;
--card-foreground: #f8fafc;
--popover: #181b22;
--popover-foreground: #f8fafc;
--primary: #14181D;
--primary-foreground: #ffffff;
--secondary: #252a33;
--secondary-foreground: #f8fafc;
--muted: #252a33;
--muted-foreground: #a1a1aa;
--accent: #147D96;
--accent-foreground: #ffffff;
--destructive: #A84A52;
--border: #303642;
--input: #303642;
--ring: #147D96;
--chart-1: #14181D;
--chart-2: #f4f4f5;
--chart-3: #147D96;
--chart-4: #43705D;
--chart-5: #A8752E;
--sidebar: #181b22;
--sidebar-foreground: #f8fafc;
--sidebar-primary: #14181D;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #147D96;
--sidebar-accent-foreground: #ffffff;
--sidebar-border: #303642;
--sidebar-ring: #147D96;
--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 KardexShadcnKit() {
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">Kardex</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": "kardex",
"type": "registry:theme",
"author": "katagami-agent",
"title": "Kardex",
"description": "The records instrument: archive white, carbon-ink rules, monospaced ledger labels, and one desaturated cyan pixel that means verified. Square plates with hard offset ink shadows; pills reserved for state chips.",
"cssVars": {
"theme": {
"font-sans": "IBM Plex Sans, sans-serif",
"font-mono": "IBM Plex Mono, monospace",
"font-serif": "IBM Plex Sans Condensed, sans-serif",
"radius": "0rem"
},
"light": {
"background": "#F8FAF7",
"foreground": "#14181D",
"card": "#FFFFFF",
"card-foreground": "#14181D",
"popover": "#FFFFFF",
"popover-foreground": "#14181D",
"primary": "#14181D",
"primary-foreground": "#F8FAF7",
"secondary": "#DCE8EA",
"secondary-foreground": "#14181D",
"muted": "#EDF1EE",
"muted-foreground": "#5B646C",
"accent": "#147D96",
"accent-foreground": "#FFFFFF",
"destructive": "#A84A52",
"destructive-foreground": "#FFFFFF",
"border": "#171A1F",
"input": "#171A1F",
"ring": "#147D96",
"chart-1": "#147D96",
"chart-2": "#43705D",
"chart-3": "#A8752E",
"chart-4": "#A84A52",
"chart-5": "#2E93A6",
"sidebar": "#FFFFFF",
"sidebar-foreground": "#14181D",
"sidebar-primary": "#14181D",
"sidebar-primary-foreground": "#F8FAF7",
"sidebar-accent": "#147D96",
"sidebar-accent-foreground": "#FFFFFF",
"sidebar-border": "#171A1F",
"sidebar-ring": "#147D96"
}
},
"visualProfile": {
"family": "archival-instrument",
"material": "archive paper and carbon ink",
"contour": "hard-edged square plates",
"border": "1px ink rules as considered structure",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "quiet 160ms ticks, no cinematic sweeps",
"density": "sparse macro layout, dense mono microlabels",
"accents": ["#147D96"]
},
"notes": "Primary buttons are ink-filled with a small cyan signal pixel; the accent cyan is a one-bit seal for verified/active/focus states, never a wash. Radius is 0 everywhere except state chips (9999px). Shadows are hard offsets (3px 3px 0) that follow the square plate geometry. Labels for buttons and table heads are IBM Plex Mono, uppercase, letter-spaced, and never wrap."
}
# Kardex — shadcn/ui Components
Author: `katagami-agent`
Format: `component-recipes-v1`
Language: Kardex (`kardex`) — the records instrument.
Kardex renders shadcn/ui as an archival instrument: square ink-ruled plates on archive white, monospaced ledger labels, and one desaturated cyan pixel (`#147D96`) that appears only where something is verified, active, or focused. Nothing is rounded except state chips. Nothing glows.
## ShadSync visual profile
- **family**: `archival-instrument`
- **material**: archive paper (`#F8FAF7` ground, `#FFFFFF` plates) and carbon ink (`#14181D`)
- **contour**: hard-edged square plates; `border-radius: 0` on every component except Badge state-chips (`9999px`)
- **border**: 1px ink rules (`#171A1F`) are the language's considered structural device — keep them crisp, never grey-soft
- **shadow**: hard offsets that follow the square geometry — `3px 3px 0 rgba(20,24,29,.18)` on primary actions and lifted cards; soft blur only on Dialog overlays
- **type**: IBM Plex Sans (body 17px), IBM Plex Sans Condensed 700 (headings, -0.02em), IBM Plex Mono (all micro labels, uppercase, `.12em` tracking)
- **motion**: 160ms `cubic-bezier(.16,1,.3,1)` state ticks; respect `prefers-reduced-motion`
- **accent discipline**: cyan is a one-bit seal — signal pixels, active-tab baselines, focus rings, link sweeps, verified-row wash at 7% mix. It never fills large areas.
## Signature component recipes
1. **Button (primary)** — ink-filled square plate, mono uppercase label, an 8px cyan signal pixel before the label, `3px 3px 0` ink shadow lifting `-1px,-1px` on hover. One per view.
2. **Button (outline/ghost/destructive)** — surface plates with 1px ink rule; ghost gains the 7% cyan wash on hover; destructive swaps rule and text to `#A84A52`.
3. **Input / Textarea / Select** — hairline ink wells, `IBM Plex Mono` values, square corners, inset 2px cyan focus ring; hints are 12px mono uppercase under the well.
4. **Checkbox / Radio / Switch** — 20px ink-ruled boxes that fill solid cyan when checked (radio rounds to a pill); the switch is a square lever whose knob slides on a 160ms tick.
5. **Tabs** — text triggers with an 8px pixel that lights cyan on the active file plus a 2px ink baseline; inactive tabs stay muted slate.
6. **Table (the ledger)** — mono uppercase column heads over a 1px ink rule; verified rows carry the 7% cyan wash and a lit pixel in a dedicated leading seal column; numerics right-aligned in mono.
7. **Badge (state chip vs fact badge)** — state chips are the only pills: tinted semantic ground, 7px dot, mono uppercase. Fact badges (record numbers, revisions) stay square with a 1px rule.
8. **Card (record plate)** — square surface plate with registration-corner marks, an ink-ruled header row (avatar initials + chip), and a `dt/dd` mono fact grid.
9. **Dialog (countersign)** — square plate over a dim ink scrim, mono index rail on top, one ink primary and one quiet action, `0 24px 80px` soft shadow (the one permitted blur).
10. **Alert** — ink-ruled strip with a 10px semantic square and a 12px mono uppercase strong; body copy stays muted. Tiny and specific, never a banner.
11. **Progress** — bordered track with a 2px-inset accent fill and a mono `LABEL — VALUE` rail above.
12. **Tooltip** — ink-ground label-maker strip: `#14181D` fill, mono 12px, square corners, no arrow softness.
## Preview shots
Renderable product scenes live in `preview-shots.json` (`preview-shots-v1`, schema `katagami:shadcn-preview-shots/renderable-v1`): the permission ledger, the countersign dialog over a record plate, and the grant-entry form. Each scene must show the one-bit seal doing real work — a lit pixel on a verified row, a pale pixel on a pending one.
## Copy-paste component example
```tsx
import { Button } from "@/components/ui/button"
import { Badge } from "@/components/ui/badge"
import {
Card,
CardContent,
CardHeader,
CardTitle,
} from "@/components/ui/card"
export function RecordPlate() {
return (
<Card className="rounded-none border border-[#171A1F] shadow-[4px_4px_0_rgba(20,24,29,.12)]">
<CardHeader className="border-b border-[#171A1F] flex-row items-center justify-between">
<CardTitle className="font-mono text-xs uppercase tracking-[.12em] text-[#5B646C]">
KX-0447-EL · Reading Room
</CardTitle>
<Badge className="rounded-full bg-[#43705D]/10 font-mono text-xs uppercase text-[#43705D]">
Sealed
</Badge>
</CardHeader>
<CardContent className="pt-6">
<p className="text-[17px]">Elin Lindqvist — holds reading-room, cold-annex-2.</p>
<Button className="mt-6 rounded-none bg-[#14181D] font-mono text-xs uppercase tracking-[.08em] shadow-[3px_3px_0_rgba(20,24,29,.18)]">
<span className="mr-2 inline-block h-2 w-2 bg-[#147D96]" aria-hidden />
Countersign
</Button>
</CardContent>
</Card>
)
}
```
## Quality rules
Do: keep one ink-filled primary per view; give every verified state its pixel; keep mono labels uppercase and unwrapped; let 1px ink rules structure the plate.
Don't: round anything but chips; let cyan exceed ~10% of visible color; use glow, gradients-as-decoration, or grey borders; let a control's label wrap into a blob.
{
"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": "kardex",
"name": "Kardex",
"slug": "kardex"
},
"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 everything except state chips: border-radius 0 on buttons, cards, inputs, dialogs; 9999px only on Badge state-chips and dots.",
"The one-bit seal: an 8px cyan (#147D96) pixel marks verified rows, active tabs, and the primary button; pale (42% mix) means pending; absent means unsealed.",
"1px carbon-ink rules (#171A1F) are structural, not decorative — table heads, card headers, and input wells all sit on them.",
"All micro labels are IBM Plex Mono, 12px, uppercase, .12em tracking; body is IBM Plex Sans 17px; headings IBM Plex Sans Condensed 700.",
"Hard offset shadows (3px 3px 0) follow the square plate geometry; the only soft shadow belongs to the dialog overlay.",
"Verified table rows carry a 7% cyan wash; cyan never fills large surfaces."
],
"visualProfile": {
"family": "archival-instrument",
"material": "archive paper and carbon ink",
"contour": "hard-edged square plates",
"border": "1px ink rules as considered structure",
"underlay": false,
"grain": false,
"stickerBadges": false,
"motion": "quiet 160ms ticks",
"density": "sparse macro, dense mono micro",
"accents": ["#147D96"]
},
"tokens": {
"background": "#F8FAF7",
"surface": "#FFFFFF",
"text": "#14181D",
"muted": "#5B646C",
"border": "#171A1F",
"accent": "#147D96",
"onAccent": "#FFFFFF",
"success": "#43705D",
"warning": "#A8752E",
"error": "#A84A52",
"info": "#2E93A6",
"radius": "0px",
"chipRadius": "9999px",
"fontBody": "IBM Plex Sans",
"fontDisplay": "IBM Plex Sans Condensed",
"fontMono": "IBM Plex Mono",
"shadow": "3px 3px 0 rgba(20,24,29,.18)"
},
"shots": [
{
"id": "permission-ledger",
"title": "The permission ledger",
"viewport": { "width": 1200, "height": 800 },
"primitives": ["table", "badge", "tabs", "button", "separator"],
"composition": "Ledger table under a tab rail; mono index callout top-left; one ink primary button top-right; verified rows washed cyan with a lit seal pixel in the leading column.",
"mustShow": [
"mono uppercase column heads over a 1px ink rule",
"a verified row with the 7% cyan wash and lit 8px pixel",
"a revoked row with no pixel and a muted error state label",
"active tab with cyan pixel and 2px ink baseline",
"primary button: ink fill, mono label, signal pixel, hard offset shadow"
],
"avoid": ["rounded corners on the table or buttons", "zebra striping", "grey soft borders", "accent-filled buttons"],
"scene": {
"headline": "Access, written down where auditors can read it.",
"description": "Each row is one grant; the cyan pixel means its seal is current.",
"rows": [
{ "seal": "lit", "holder": "Elin Lindqvist", "key": "cold-annex-2", "countersign": "M. Vasquez", "term": "2027-01-01", "state": "Sealed" },
{ "seal": "pale", "holder": "Adaeze Okafor", "key": "seed-floor", "countersign": "M. Vasquez", "term": "2026-09-15", "state": "Lapsing" },
{ "seal": "lit", "holder": "Tomas Herrera", "key": "reading-room", "countersign": "E. Lindqvist", "term": "2026-12-31", "state": "Sealed" },
{ "seal": "none", "holder": "Petra Molnar", "key": "key-4471", "countersign": "A. Okafor", "term": "—", "state": "Revoked" }
]
}
},
{
"id": "countersign-dialog",
"title": "Countersign a grant",
"viewport": { "width": 1200, "height": 800 },
"primitives": ["dialog", "card", "button", "badge", "checkbox", "tooltip"],
"composition": "A countersign dialog centered over a dimmed record plate; mono index rail at the dialog top; one ink primary and one quiet action, right-aligned; a checkbox for notify-the-keeper.",
"mustShow": [
"square dialog plate with a soft overlay shadow (the one permitted blur)",
"mono index rail with signal pixel at the dialog top",
"record facts as a mono dt/dd grid on the plate behind",
"sealed state chip as the only rounded element",
"checked checkbox filled solid cyan"
],
"avoid": ["rounded dialog corners", "button pairs of equal weight", "emoji or icon glyphs in copy"],
"scene": {
"headline": "Countersign KX-0447-EL",
"description": "You are signing Elin Lindqvist's cold-annex-2 grant as keeper. The record is permanent.",
"fields": [
{ "label": "Record", "value": "KX-0447-EL" },
{ "label": "Key", "value": "cold-annex-2" },
{ "label": "Term", "value": "to 2027-01-01" },
{ "label": "Keeper", "value": "M. Vasquez" }
]
}
},
{
"id": "grant-entry",
"title": "File a new grant",
"viewport": { "width": 1200, "height": 800 },
"primitives": ["input", "textarea", "select", "checkbox", "switch", "slider", "button", "card", "separator"],
"composition": "A grant-entry form on a registration-cornered plate: two-column field grid, mono uppercase labels above hairline ink wells, one error field with a specific mono hint, choices row with checkbox/radio/switch, ink primary bottom-right.",
"mustShow": [
"mono 12px uppercase labels above every well",
"an invalid field with error rule and the hint 'NOT A CALENDAR DATE — USE YYYY-MM-DD'",
"a switch as a square lever, checked state cyan",
"inset cyan focus ring on the active input",
"one ink primary button with signal pixel"
],
"avoid": ["browser-default controls", "rounded wells", "placeholder lorem", "floating labels"],
"scene": {
"headline": "File a grant",
"description": "One key per grant; the keeper countersigns before the seal is struck.",
"fields": [
{ "label": "Holder", "value": "Lindqvist, Elin" },
{ "label": "Key", "value": "cold-annex-2" },
{ "label": "Term", "value": "2025-13-40", "state": "error", "hint": "NOT A CALENDAR DATE — USE YYYY-MM-DD" },
{ "label": "Reason for grant", "value": "Quarterly seal audit of the seed floor, per keeper's order 26-114." }
]
}
},
{
"id": "keeper-strip",
"title": "Keeper's instrument strip",
"viewport": { "width": 1200, "height": 480 },
"primitives": ["card", "badge", "dropdown-menu", "button", "separator", "sheet"],
"composition": "A horizontal evidence band of four cells split by hairlines: condensed display numbers over mono sublabels, signal pixels on the live cells; a dropdown for drawer selection and a sheet trigger for the day queue.",
"mustShow": [
"condensed 44px numerals over 12px mono uppercase sublabels",
"hairline cell separators inside one ink-ruled band",
"lit pixels on current cells, pale pixel on the lapsing cell",
"square dropdown plate with mono items"
],
"avoid": ["four separate stat cards", "icons as decoration", "sparkline confetti"],
"scene": {
"headline": "Morning audit, drawer by drawer.",
"description": "The keeper's four instruments in one hairline-split evidence band; the pale pixels mark the cells that need attention.",
"stats": [
{ "label": "RECORDS ON FILE", "value": "12,408", "sub": "+34 THIS WEEK · 0 DELETED, EVER", "seal": "lit" },
{ "label": "SEALS CURRENT", "value": "11,977", "sub": "96.5% OF LIVING RECORDS", "seal": "lit" },
{ "label": "LAPSING ≤ 30 DAYS", "value": "148", "sub": "+41 VS LAST WINDOW", "seal": "pale" },
{ "label": "OPEN DISPUTES", "value": "2", "sub": "OLDEST: 6 DAYS · DRAWER 7", "seal": "pale" }
]
}
}
],
"componentRecipes": [
{ "primitive": "button", "intent": "Primary: ink-filled square plate, mono uppercase label, 8px cyan signal pixel, 3px hard offset shadow lifting on hover; outline/ghost/destructive stay surface plates with 1px rules." },
{ "primitive": "card", "intent": "Record plate: square surface with registration-corner marks, ink-ruled header (initials avatar + state chip), mono dt/dd fact grid." },
{ "primitive": "input", "intent": "Hairline ink well, square, mono value, 12px mono uppercase label above, inset 2px cyan focus ring; error swaps the rule to #A84A52 with a specific mono hint." },
{ "primitive": "textarea", "intent": "Same well language as input, min-height 110px, 1.6 line-height mono, vertical resize only." },
{ "primitive": "select", "intent": "Square well with a 1px-ink chevron drawn as rotated borders, mono options; no native default styling." },
{ "primitive": "dialog", "intent": "Countersign plate: square, mono index rail on top, one ink primary + one quiet action, the only soft shadow in the language." },
{ "primitive": "sheet", "intent": "Day-queue drawer sliding from the right as a full-height square plate with an ink rule edge and mono queue entries." },
{ "primitive": "tabs", "intent": "Text triggers with an 8px pixel lighting cyan on the active file and a 2px ink baseline; inactive stays muted slate." },
{ "primitive": "badge", "intent": "Two kinds: state chips (the only pills — tinted semantic ground, 7px dot, mono uppercase) and square fact badges with 1px rules for record numbers." },
{ "primitive": "separator", "intent": "1px ink rule at full strength for structure; 8% ink hairline for in-panel division; the tick rule (1px base + 12px ticks) closes mastheads." },
{ "primitive": "checkbox", "intent": "20px ink-ruled box filling solid cyan with a white inner square when checked; label in mono." },
{ "primitive": "switch", "intent": "Square lever: 46×24 ink-ruled track, square knob sliding 22px on a 160ms tick, cyan track when on." },
{ "primitive": "slider", "intent": "2px hairline track, square ink thumb ringed by ground and rule; value echoed in a mono label." },
{ "primitive": "tooltip", "intent": "Label-maker strip: ink ground, 12px mono, square corners, high contrast, no rounded arrow." },
{ "primitive": "dropdown-menu", "intent": "Square plate with 1px rule and hard offset shadow; mono items, hover takes the 7% cyan wash; no rounded item highlights." },
{ "primitive": "table", "intent": "The ledger: mono uppercase heads over an ink rule, verified rows with 7% cyan wash and a lit pixel in a leading seal column, right-aligned mono numerics." }
],
"qualityRules": {
"do": [
"Keep one ink-filled primary action per view",
"Give every verified state its 8px cyan pixel — lit, pale, or absent",
"Use IBM Plex Mono uppercase for every micro label and column head",
"Let 1px carbon-ink rules structure plates, tables, and wells",
"Keep hard offset shadows aligned with the square geometry"
],
"dont": [
"Round anything except state chips and dots",
"Let cyan exceed roughly ten percent of visible color",
"Use glow, soft grey borders, or decorative gradients",
"Let button or chip labels wrap",
"Replace initials avatars with portraits or illustration"
]
}
}